<?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>171809</bug_id>
          
          <creation_ts>2017-05-08 09:54:41 -0700</creation_ts>
          <short_desc>Reduce PassRefPtr use</short_desc>
          <delta_ts>2017-05-08 13:12:08 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Alex Christensen">achristensen</reporter>
          <assigned_to name="Alex Christensen">achristensen</assigned_to>
          <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>simon.fraser</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1305891</commentid>
    <comment_count>0</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-05-08 09:54:41 -0700</bug_when>
    <thetext>Reduce PassRefPtr use</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305892</commentid>
    <comment_count>1</comment_count>
      <attachid>309368</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-05-08 09:55:16 -0700</bug_when>
    <thetext>Created attachment 309368
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305894</commentid>
    <comment_count>2</comment_count>
    <who name="Build Bot">buildbot</who>
    <bug_when>2017-05-08 09:57:00 -0700</bug_when>
    <thetext>Attachment 309368 did not pass style-queue:


ERROR: Source/WebCore/ChangeLog:8:  You should remove the &apos;No new tests&apos; and either add and list tests, or explain why no new tests were possible.  [changelog/nonewtests] [5]
Total errors found: 1 in 29 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305903</commentid>
    <comment_count>3</comment_count>
      <attachid>309368</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-05-08 10:06:29 -0700</bug_when>
    <thetext>Comment on attachment 309368
Patch

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

r=me with comments, please make sure all bots are happy.

&gt; Source/WebCore/platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:355
&gt; +        AVPlayerLayer *destinationPlayerLayer = static_cast&lt;PlatformCALayerCocoa&amp;&gt;(newLayer.get()).avPlayerLayer();

Should be a downcast.

&gt; Source/WebKit2/WebProcess/WebPage/VisitedLinkTableController.cpp:54
&gt;      visitedLinkTableControllerPtr = visitedLinkTableController.ptr();

This line seems useless?

&gt; Source/WebKit2/WebProcess/WebPage/WebOpenPanelResultListener.h:57
&gt;      RefPtr&lt;WebCore::FileChooser&gt; m_fileChooser;

Should be a Ref&lt;&gt;.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305907</commentid>
    <comment_count>4</comment_count>
      <attachid>309371</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-05-08 10:07:54 -0700</bug_when>
    <thetext>Created attachment 309371
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305909</commentid>
    <comment_count>5</comment_count>
      <attachid>309371</attachid>
    <who name="Chris Dumez">cdumez</who>
    <bug_when>2017-05-08 10:09:07 -0700</bug_when>
    <thetext>Comment on attachment 309371
Patch

Same comments as before.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305937</commentid>
    <comment_count>6</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-05-08 10:41:55 -0700</bug_when>
    <thetext>(In reply to Chris Dumez from comment #3)
&gt; &gt; Source/WebCore/platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:355
&gt; &gt; +        AVPlayerLayer *destinationPlayerLayer = static_cast&lt;PlatformCALayerCocoa&amp;&gt;(newLayer.get()).avPlayerLayer();
&gt; 
&gt; Should be a downcast.
That doesn&apos;t compile.
&gt; 
&gt; &gt; Source/WebKit2/WebProcess/WebPage/VisitedLinkTableController.cpp:54
&gt; &gt;      visitedLinkTableControllerPtr = visitedLinkTableController.ptr();
&gt; 
&gt; This line seems useless?
It&apos;s needed in this case to set the pointer in the HashMap.  Weird.  We can&apos;t use ensure here, though, because the HashMap values are raw pointers, and we need to return a Ref here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305938</commentid>
    <comment_count>7</comment_count>
      <attachid>309378</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-05-08 10:42:24 -0700</bug_when>
    <thetext>Created attachment 309378
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305962</commentid>
    <comment_count>8</comment_count>
      <attachid>309384</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-05-08 11:30:19 -0700</bug_when>
    <thetext>Created attachment 309384
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305964</commentid>
    <comment_count>9</comment_count>
      <attachid>309386</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-05-08 11:31:38 -0700</bug_when>
    <thetext>Created attachment 309386
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1305981</commentid>
    <comment_count>10</comment_count>
      <attachid>309392</attachid>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-05-08 12:11:58 -0700</bug_when>
    <thetext>Created attachment 309392
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1306015</commentid>
    <comment_count>11</comment_count>
    <who name="Alex Christensen">achristensen</who>
    <bug_when>2017-05-08 13:12:08 -0700</bug_when>
    <thetext>http://trac.webkit.org/r216448</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309368</attachid>
            <date>2017-05-08 09:55:16 -0700</date>
            <delta_ts>2017-05-08 10:07:53 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171809-20170508095515.patch</filename>
            <type>text/plain</type>
            <size>43811</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI2IEBACisyMDE3LTA1LTA4ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVkdWNlIFBh
c3NSZWZQdHIgdXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzE4MDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICBObyBuZXcgdGVzdHMgKE9PUFMhKS4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhL1BsYXRmb3JtQ0FMYXllci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5
ZXI6OmNyZWF0ZUNvbXBhdGlibGVMYXllck9yVGFrZUZyb21Qb29sKToKKyAgICAgICAgKiBwbGF0
Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYS9UaWxlQ292ZXJhZ2VNYXAuY3BwOgorICAgICAgICAoV2ViQ29yZTo6VGlsZUNv
dmVyYWdlTWFwOjpUaWxlQ292ZXJhZ2VNYXApOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNz
L2NhL1RpbGVHcmlkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlRpbGVHcmlkOjpUaWxlR3JpZCk6
CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVyQ29j
b2EuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBTGF5
ZXJDb2NvYS5tbToKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllckNvY29hOjpjcmVhdGUpOgorICAg
ICAgICAoUGxhdGZvcm1DQUxheWVyQ29jb2E6OmNsb25lKToKKyAgICAgICAgKFBsYXRmb3JtQ0FM
YXllckNvY29hOjphbmltYXRpb25Gb3JLZXkpOgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyQ29j
b2E6OmNyZWF0ZUNvbXBhdGlibGVMYXllcik6CisKIDIwMTctMDUtMDcgIEJlbiBLZWxseSAgPGJl
bkB3YW5kZXJ2aWV3LmNvbT4KIAogICAgICAgICBTZXQgdGhlIFJlc3BvbnNlLmJsb2IoKSB0eXBl
IGJhc2VkIG9uIHRoZSBjb250ZW50LXR5cGUgaGVhZGVyIHZhbHVlLgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIu
Y3BwCShyZXZpc2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9QbGF0Zm9ybUNBTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsMTkgKzE2Nywx
NiBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6ZHJhd1RleHRBdFBvaW50KENHCiAgICAgQ1RMaW5l
RHJhdyhsaW5lLmdldCgpLCBjb250ZXh0KTsKIH0KIAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5
ZXI+IFBsYXRmb3JtQ0FMYXllcjo6Y3JlYXRlQ29tcGF0aWJsZUxheWVyT3JUYWtlRnJvbVBvb2wo
UGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGUgbGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGll
bnQqIGNsaWVudCwgSW50U2l6ZSBzaXplKQorUmVmPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1D
QUxheWVyOjpjcmVhdGVDb21wYXRpYmxlTGF5ZXJPclRha2VGcm9tUG9vbChQbGF0Zm9ybUNBTGF5
ZXI6OkxheWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogY2xpZW50LCBJ
bnRTaXplIHNpemUpCiB7Ci0gICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gbGF5ZXI7Ci0KLSAg
ICBpZiAoKGxheWVyID0gbGF5ZXJQb29sKCkudGFrZUxheWVyV2l0aFNpemUoc2l6ZSkpKSB7Ci0g
ICAgICAgIGxheWVyLT5zZXRPd25lcihjbGllbnQpOwotICAgICAgICByZXR1cm4gV1RGTW92ZShs
YXllcik7CisgICAgaWYgKGF1dG8gbGF5ZXJGcm9tUG9vbCA9IGxheWVyUG9vbCgpLnRha2VMYXll
cldpdGhTaXplKHNpemUpKSB7CisgICAgICAgIGxheWVyRnJvbVBvb2wtPnNldE93bmVyKGNsaWVu
dCk7CisgICAgICAgIHJldHVybiBsYXllckZyb21Qb29sLnJlbGVhc2VOb25OdWxsKCk7CiAgICAg
fQogCi0gICAgbGF5ZXIgPSBjcmVhdGVDb21wYXRpYmxlTGF5ZXIobGF5ZXJUeXBlLCBjbGllbnQp
OworICAgIGF1dG8gbGF5ZXIgPSBjcmVhdGVDb21wYXRpYmxlTGF5ZXIobGF5ZXJUeXBlLCBjbGll
bnQpOwogICAgIGxheWVyLT5zZXRCb3VuZHMoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSkp
OwotICAgIAotICAgIHJldHVybiBXVEZNb3ZlKGxheWVyKTsKKyAgICByZXR1cm4gbGF5ZXI7CiB9
CiAKIHZvaWQgUGxhdGZvcm1DQUxheWVyOjptb3ZlVG9MYXllclBvb2woKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVy
LmgJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL1BsYXRmb3JtQ0FMYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAj
aW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUgPFF1YXJ0ekNvcmUvQ0FCYXNlLmg+
CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KICNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CkBAIC04Miw3ICs4MSw3IEBAIHB1YmxpYzoK
ICAgICB9OwogICAgIGVudW0gRmlsdGVyVHlwZSB7IExpbmVhciwgTmVhcmVzdCwgVHJpbGluZWFy
IH07CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBjbG9uZShQbGF0
Zm9ybUNBTGF5ZXJDbGllbnQqKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBSZWY8UGxhdGZvcm1D
QUxheWVyPiBjbG9uZShQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKSBjb25zdCA9IDA7CiAKICAgICB2
aXJ0dWFsIH5QbGF0Zm9ybUNBTGF5ZXIoKTsKIApAQCAtMTMyLDcgKzEzMSw3IEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgdm9pZCBhZGRBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXks
IFBsYXRmb3JtQ0FBbmltYXRpb24mKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1h
dGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBhbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkp
ID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBhbmltYXRpb25G
b3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNr
KFBsYXRmb3JtQ0FMYXllciopID0gMDsKIApAQCAtMjYwLDggKzI1OSw4IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldEFuY2hvclBvaW50T25NYWluVGhyZWFkKEZsb2F0UG9pbnQzRCk7CiAjZW5kaWYK
IAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZUNvbXBhdGli
bGVMYXllcihMYXllclR5cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCopIGNvbnN0ID0gMDsKLSAg
ICBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlQ29tcGF0aWJsZUxheWVyT3JUYWtl
RnJvbVBvb2woTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBjbGll
bnQsIEludFNpemUpOworICAgIHZpcnR1YWwgUmVmPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlQ29t
cGF0aWJsZUxheWVyKExheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KikgY29uc3QgPSAw
OworICAgIFJlZjxQbGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZUNvbXBhdGlibGVMYXllck9yVGFrZUZy
b21Qb29sKExheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiwgSW50U2l6ZSk7CiAKICNp
ZiBQTEFURk9STShDT0NPQSkKICAgICB2aXJ0dWFsIHZvaWQgZW51bWVyYXRlUmVjdHNCZWluZ0Ry
YXduKENHQ29udGV4dFJlZiwgdm9pZCAoXmJsb2NrKShDR1JlY3QpKSA9IDA7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlQ292ZXJhZ2VNYXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVDb3ZlcmFn
ZU1hcC5jcHAJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL1RpbGVDb3ZlcmFnZU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEwICsz
NSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBUaWxlQ292ZXJhZ2VNYXA6OlRpbGVDb3ZlcmFn
ZU1hcChjb25zdCBUaWxlQ29udHJvbGxlciYgY29udHJvbGxlcikKICAgICA6IG1fY29udHJvbGxl
cihjb250cm9sbGVyKQogICAgICwgbV91cGRhdGVUaW1lcigqdGhpcywgJlRpbGVDb3ZlcmFnZU1h
cDo6dXBkYXRlVGltZXJGaXJlZCkKLSAgICAsIG1fbGF5ZXIoKmNvbnRyb2xsZXIucm9vdExheWVy
KCkuY3JlYXRlQ29tcGF0aWJsZUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlU2ltcGxl
TGF5ZXIsIHRoaXMpKQotICAgICwgbV92aXNpYmxlVmlld3BvcnRJbmRpY2F0b3JMYXllcigqY29u
dHJvbGxlci5yb290TGF5ZXIoKS5jcmVhdGVDb21wYXRpYmxlTGF5ZXIoUGxhdGZvcm1DQUxheWVy
OjpMYXllclR5cGVMYXllciwgbnVsbHB0cikpCi0gICAgLCBtX2xheW91dFZpZXdwb3J0SW5kaWNh
dG9yTGF5ZXIoKmNvbnRyb2xsZXIucm9vdExheWVyKCkuY3JlYXRlQ29tcGF0aWJsZUxheWVyKFBs
YXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5ZXIsIG51bGxwdHIpKQotICAgICwgbV9jb3ZlcmFn
ZVJlY3RJbmRpY2F0b3JMYXllcigqY29udHJvbGxlci5yb290TGF5ZXIoKS5jcmVhdGVDb21wYXRp
YmxlTGF5ZXIoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVMYXllciwgbnVsbHB0cikpCisgICAg
LCBtX2xheWVyKGNvbnRyb2xsZXIucm9vdExheWVyKCkuY3JlYXRlQ29tcGF0aWJsZUxheWVyKFBs
YXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlU2ltcGxlTGF5ZXIsIHRoaXMpKQorICAgICwgbV92aXNp
YmxlVmlld3BvcnRJbmRpY2F0b3JMYXllcihjb250cm9sbGVyLnJvb3RMYXllcigpLmNyZWF0ZUNv
bXBhdGlibGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxheWVyLCBudWxscHRyKSkK
KyAgICAsIG1fbGF5b3V0Vmlld3BvcnRJbmRpY2F0b3JMYXllcihjb250cm9sbGVyLnJvb3RMYXll
cigpLmNyZWF0ZUNvbXBhdGlibGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxheWVy
LCBudWxscHRyKSkKKyAgICAsIG1fY292ZXJhZ2VSZWN0SW5kaWNhdG9yTGF5ZXIoY29udHJvbGxl
ci5yb290TGF5ZXIoKS5jcmVhdGVDb21wYXRpYmxlTGF5ZXIoUGxhdGZvcm1DQUxheWVyOjpMYXll
clR5cGVMYXllciwgbnVsbHB0cikpCiAgICAgLCBtX3Bvc2l0aW9uKEZsb2F0UG9pbnQoMCwgY29u
dHJvbGxlci50b3BDb250ZW50SW5zZXQoKSkpCiB7CiAgICAgbV9sYXllci5nZXQoKS5zZXRPcGFj
aXR5KDAuNzUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvVGls
ZUdyaWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL1RpbGVHcmlkLmNwcAkocmV2aXNpb24gMjE2NDE3KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUdyaWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2
NSw3IEBAIHN0YXRpYyBTdHJpbmcgdmFsaWRhdGlvblBvbGljeUFzU3RyaW5nKFQKIAogVGlsZUdy
aWQ6OlRpbGVHcmlkKFRpbGVDb250cm9sbGVyJiBjb250cm9sbGVyKQogICAgIDogbV9jb250cm9s
bGVyKGNvbnRyb2xsZXIpCi0gICAgLCBtX2NvbnRhaW5lckxheWVyKCpjb250cm9sbGVyLnJvb3RM
YXllcigpLmNyZWF0ZUNvbXBhdGlibGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxh
eWVyLCBudWxscHRyKSkKKyAgICAsIG1fY29udGFpbmVyTGF5ZXIoY29udHJvbGxlci5yb290TGF5
ZXIoKS5jcmVhdGVDb21wYXRpYmxlTGF5ZXIoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVMYXll
ciwgbnVsbHB0cikpCiAgICAgLCBtX2NvaG9ydFJlbW92YWxUaW1lcigqdGhpcywgJlRpbGVHcmlk
Ojpjb2hvcnRSZW1vdmFsVGltZXJGaXJlZCkKICAgICAsIG1fdGlsZVNpemUoa0RlZmF1bHRUaWxl
U2l6ZSwga0RlZmF1bHRUaWxlU2l6ZSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVy
Q29jb2EuaAkocmV2aXNpb24gMjE2NDE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVyQ29jb2EuaAkod29ya2luZyBjb3B5KQpAQCAt
MzMsMTEgKzMzLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUGxhdGZvcm1DQUxh
eWVyQ29jb2EgZmluYWwgOiBwdWJsaWMgUGxhdGZvcm1DQUxheWVyIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZShMYXllclR5cGUsIFBsYXRm
b3JtQ0FMYXllckNsaWVudCopOworICAgIHN0YXRpYyBSZWY8UGxhdGZvcm1DQUxheWVyPiBjcmVh
dGUoTGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKTsKICAgICAKICAgICAvLyBUaGlz
IGZ1bmN0aW9uIHBhc3NlcyB0aGUgbGF5ZXIgYXMgYSB2b2lkKiByYXRoZXIgdGhhbiBhIFBsYXRm
b3JtTGF5ZXIgYmVjYXVzZSBQbGF0Zm9ybUxheWVyCiAgICAgLy8gaXMgZGVmaW5lZCBkaWZmZXJl
bnRseSBmb3IgT2JqIEMgYW5kIEMrKy4gVGhpcyBhbGxvd3MgY2FsbGVycyBmcm9tIGJvdGggbGFu
Z3VhZ2VzLgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlKHZv
aWQqIHBsYXRmb3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCopOworICAgIHN0YXRpYyBS
ZWY8UGxhdGZvcm1DQUxheWVyPiBjcmVhdGUodm9pZCogcGxhdGZvcm1MYXllciwgUGxhdGZvcm1D
QUxheWVyQ2xpZW50Kik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgTGF5ZXJUeXBlIGxh
eWVyVHlwZUZvclBsYXRmb3JtTGF5ZXIoUGxhdGZvcm1MYXllciopOwogCkBAIC02Miw3ICs2Miw3
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWRkQW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYg
a2V5LCBQbGF0Zm9ybUNBQW5pbWF0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCByZW1vdmVBbmlt
YXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOwotICAgIFBhc3NSZWZQdHI8
UGxhdGZvcm1DQUFuaW1hdGlvbj4gYW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5KSBv
dmVycmlkZTsKKyAgICBSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gYW5pbWF0aW9uRm9yS2V5
KGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKICAgICB2b2lkIGFuaW1hdGlvblN0YXJ0ZWQo
Y29uc3QgU3RyaW5nJiBrZXksIENGVGltZUludGVydmFsIGJlZ2luVGltZSkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBhbmltYXRpb25FbmRlZChjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7CiAKQEAg
LTE2OSw5ICsxNjksOSBAQCBwdWJsaWM6CiAKICAgICBUaWxlZEJhY2tpbmcqIHRpbGVkQmFja2lu
ZygpIG92ZXJyaWRlOwogCi0gICAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IGNsb25lKFBs
YXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZjxQbGF0
Zm9ybUNBTGF5ZXI+IGNsb25lKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0IG92
ZXJyaWRlOwogCi0gICAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZUNvbXBhdGli
bGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50
KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlQ29tcGF0
aWJsZUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGll
bnQqKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgZW51bWVyYXRlUmVjdHNCZWluZ0RyYXdu
KENHQ29udGV4dFJlZiwgdm9pZCAoXmJsb2NrKShDR1JlY3QpKSBvdmVycmlkZTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVy
Q29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvY29jb2EvUGxhdGZvcm1DQUxheWVyQ29jb2EubW0JKHJldmlzaW9uIDIxNjQxNykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNv
Y29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02OSwxNCArNjksMTQgQEAgU09GVF9MSU5LX0NMQVNT
X09QVElPTkFMKEFWRm91bmRhdGlvbiwgQQogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAot
UGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllckNvY29hOjpjcmVhdGUo
TGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikKK1JlZjxQ
bGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllckNvY29hOjpjcmVhdGUoTGF5ZXJUeXBlIGxh
eWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikKIHsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFBsYXRmb3JtQ0FMYXllckNvY29hKGxheWVyVHlwZSwgb3duZXIpKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBQbGF0Zm9ybUNBTGF5ZXJDb2NvYShsYXllclR5cGUsIG93bmVy
KSk7CiB9CiAKLVBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJDb2Nv
YTo6Y3JlYXRlKHZvaWQqIHBsYXRmb3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3du
ZXIpCitSZWY8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y3JlYXRlKHZv
aWQqIHBsYXRmb3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBQbGF0Zm9ybUNBTGF5ZXJDb2NvYShzdGF0aWNfY2FzdDxQbGF0
Zm9ybUxheWVyKj4ocGxhdGZvcm1MYXllciksIG93bmVyKSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgUGxhdGZvcm1DQUxheWVyQ29jb2Eoc3RhdGljX2Nhc3Q8UGxhdGZvcm1MYXllcio+KHBs
YXRmb3JtTGF5ZXIpLCBvd25lcikpOwogfQogCiBzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBwbGF0
Zm9ybUNBTGF5ZXJQb2ludGVyID0gQCJXS1BsYXRmb3JtQ0FMYXllciI7CkBAIC0zMTEsNyArMzEx
LDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y29tbW9uSW5pdCgpCiAgICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi1QYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxh
dGZvcm1DQUxheWVyQ29jb2E6OmNsb25lKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNv
bnN0CitSZWY8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y2xvbmUoUGxh
dGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikgY29uc3QKIHsKICAgICBMYXllclR5cGUgdHlwZTsK
ICAgICBzd2l0Y2ggKGxheWVyVHlwZSgpKSB7CkBAIC0zMzIsNyArMzMyLDcgQEAgUGFzc1JlZlB0
cjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYQogICAgICAgICB0eXBlID0gTGF5ZXJUeXBl
TGF5ZXI7CiAgICAgICAgIGJyZWFrOwogICAgIH07Ci0gICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXll
cj4gbmV3TGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y3JlYXRlKHR5cGUsIG93bmVyKTsK
KyAgICBhdXRvIG5ld0xheWVyID0gUGxhdGZvcm1DQUxheWVyQ29jb2E6OmNyZWF0ZSh0eXBlLCBv
d25lcik7CiAgICAgCiAgICAgbmV3TGF5ZXItPnNldFBvc2l0aW9uKHBvc2l0aW9uKCkpOwogICAg
IG5ld0xheWVyLT5zZXRCb3VuZHMoYm91bmRzKCkpOwpAQCAtMzUyLDcgKzM1Miw3IEBAIFBhc3NS
ZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGEKICAgICBpZiAodHlwZSA9PSBMYXll
clR5cGVBVlBsYXllckxheWVyKSB7CiAgICAgICAgIEFTU0VSVChbbmV3TGF5ZXItPnBsYXRmb3Jt
TGF5ZXIoKSBpc0tpbmRPZkNsYXNzOmdldEFWUGxheWVyTGF5ZXJDbGFzcygpXSk7CiAKLSAgICAg
ICAgQVZQbGF5ZXJMYXllciAqZGVzdGluYXRpb25QbGF5ZXJMYXllciA9IHN0YXRpY19jYXN0PFBs
YXRmb3JtQ0FMYXllckNvY29hICo+KG5ld0xheWVyLmdldCgpKS0+YXZQbGF5ZXJMYXllcigpOwor
ICAgICAgICBBVlBsYXllckxheWVyICpkZXN0aW5hdGlvblBsYXllckxheWVyID0gc3RhdGljX2Nh
c3Q8UGxhdGZvcm1DQUxheWVyQ29jb2EmPihuZXdMYXllci5nZXQoKSkuYXZQbGF5ZXJMYXllcigp
OwogICAgICAgICBBVlBsYXllckxheWVyICpzb3VyY2VQbGF5ZXJMYXllciA9IGF2UGxheWVyTGF5
ZXIoKTsKICAgICAgICAgQVNTRVJUKHNvdXJjZVBsYXllckxheWVyKTsKIApAQCAtNTA4LDExICs1
MDgsMTEgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6cmVtb3ZlQW5pbWF0aQogICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0
aW9uPiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6YW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYg
a2V5KQorUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IFBsYXRmb3JtQ0FMYXllckNvY29hOjph
bmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpCiB7CiAgICAgQ0FQcm9wZXJ0eUFuaW1h
dGlvbiogcHJvcGVydHlBbmltYXRpb24gPSBzdGF0aWNfY2FzdDxDQVByb3BlcnR5QW5pbWF0aW9u
Kj4oW21fbGF5ZXIgYW5pbWF0aW9uRm9yS2V5OmtleV0pOwogICAgIGlmICghcHJvcGVydHlBbmlt
YXRpb24pCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBy
ZXR1cm4gUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpjcmVhdGUocHJvcGVydHlBbmltYXRpb24p
OwogfQogCkBAIC0xMTkwLDcgKzExOTAsNyBAQCBDR1JlY3QgUGxhdGZvcm1DQUxheWVyOjpmcmFt
ZUZvckxheWVyKGNvCiAgICAgcmV0dXJuIFt0aWxlTGF5ZXIgZnJhbWVdOwogfQogCi1QYXNzUmVm
UHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1DQUxheWVyQ29jb2E6OmNyZWF0ZUNvbXBhdGli
bGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3JtQ0FM
YXllckNsaWVudCogY2xpZW50KSBjb25zdAorUmVmPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1D
QUxheWVyQ29jb2E6OmNyZWF0ZUNvbXBhdGlibGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVy
VHlwZSBsYXllclR5cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogY2xpZW50KSBjb25zdAogewog
ICAgIHJldHVybiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y3JlYXRlKGxheWVyVHlwZSwgY2xpZW50
KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNjQyNikKKysrIFNvdXJjZS9XZWJLaXQy
L0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDU0IEBACisyMDE3LTA1LTA4ICBB
bGV4IENocmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVk
dWNlIFBhc3NSZWZQdHIgdXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3df
YnVnLmNnaT9pZD0xNzE4MDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFBsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6UGx1Z2luQ29udHJvbGxlclByb3h5OjpzZXRJbml0aWFsaXphdGlvblJl
cGx5KToKKyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5oOgor
ICAgICAgICAqIFBsdWdpblByb2Nlc3MvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6ZGVzdHJveVBsdWdpbik6CisgICAgICAg
IChXZWJLaXQ6OldlYlByb2Nlc3NDb25uZWN0aW9uOjpjcmVhdGVQbHVnaW4pOgorICAgICAgICAq
IFBsdWdpblByb2Nlc3MvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24uaDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYkNocm9tZUNsaWVudDo6cnVuT3BlblBhbmVsKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVudC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYkVk
aXRvckNsaWVudDo6cmVnaXN0ZXJVbmRvU3RlcCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQ
YWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLmNwcDoKKyAgICAgICAgKFdlYktpdDo6Vmlz
aXRlZExpbmtUYWJsZUNvbnRyb2xsZXI6OmdldE9yQ3JlYXRlKToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIuaDoKKyAgICAgICAgKiBXZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZTo6
aGl0VGVzdCk6CisgICAgICAgIChXZWJLaXQ6OldlYkZyYW1lOjpjcmVhdGVTZWxlY3Rpb25TbmFw
c2hvdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmg6CisgICAgICAg
ICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI6OmNyZWF0ZSk6CisgICAg
ICAgIChXZWJLaXQ6OldlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyOjpXZWJPcGVuUGFuZWxSZXN1
bHRMaXN0ZW5lcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYk9wZW5QYW5lbFJl
c3VsdExpc3RlbmVyLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1bmFwcGx5RWRpdENvbW1hbmQpOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlOjpyZWFwcGx5RWRpdENvbW1hbmQpOgorICAgICAgICAqIFdlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6Oldl
YlBhZ2VHcm91cFByb3h5OjpjcmVhdGUpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlR3JvdXBQcm94eS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVbmRv
U3RlcC5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlVuZG9TdGVwOjpjcmVhdGUpOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJVbmRvU3RlcC5oOgorICAgICAgICAoV2ViS2l0OjpX
ZWJVbmRvU3RlcDo6c3RlcCk6CisgICAgICAgIChXZWJLaXQ6OldlYlVuZG9TdGVwOjpXZWJVbmRv
U3RlcCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJS
ZW1vdGUuY3BwOgorICAgICAgICAoV2ViS2l0OjpQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNyZWF0
ZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXRmb3JtQ0FMYXllclJlbW90ZTo6Y2xvbmUpOgorICAg
ICAgICAoV2ViS2l0OjpQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmFuaW1hdGlvbkZvcktleSk6Cisg
ICAgICAgIChXZWJLaXQ6OlBsYXRmb3JtQ0FMYXllclJlbW90ZTo6Y3JlYXRlQ29tcGF0aWJsZUxh
eWVyKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJl
bW90ZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVy
UmVtb3RlQ3VzdG9tLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9y
bUNBTGF5ZXJSZW1vdGVDdXN0b20ubW06CisgICAgICAgIChXZWJLaXQ6OlBsYXRmb3JtQ0FMYXll
clJlbW90ZUN1c3RvbTo6Y3JlYXRlKToKKyAgICAgICAgKFdlYktpdDo6UGxhdGZvcm1DQUxheWVy
UmVtb3RlQ3VzdG9tOjpjbG9uZSk6CisKIDIwMTctMDUtMDggIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KIAogICAgICAgICBNb3ZlICdzdHlsZScgZnJvbSBFbGVtZW50IHRvIEhUTUxF
bGVtZW50IC8gU1ZHRWxlbWVudCBhbmQgbWFrZSBpdCBzZXR0YWJsZQpJbmRleDogU291cmNlL1dl
YktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmNw
cAkocmV2aXNpb24gMjE2NDE3KQorKysgU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVn
aW5Db250cm9sbGVyUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC05MSwxMCArOTEsMTAgQEAg
UGx1Z2luQ29udHJvbGxlclByb3h5Ojp+UGx1Z2luQ29udHJvbGxlcgogICAgICAgICByZWxlYXNl
TlBPYmplY3QobV9wbHVnaW5FbGVtZW50TlBPYmplY3QpOwogfQogCi12b2lkIFBsdWdpbkNvbnRy
b2xsZXJQcm94eTo6c2V0SW5pdGlhbGl6YXRpb25SZXBseShQYXNzUmVmUHRyPE1lc3NhZ2VzOjpX
ZWJQcm9jZXNzQ29ubmVjdGlvbjo6Q3JlYXRlUGx1Z2luOjpEZWxheWVkUmVwbHk+IHJlcGx5KQor
dm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OnNldEluaXRpYWxpemF0aW9uUmVwbHkoUmVmPE1l
c3NhZ2VzOjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Q3JlYXRlUGx1Z2luOjpEZWxheWVkUmVwbHk+
JiYgcmVwbHkpCiB7CiAgICAgQVNTRVJUKCFtX2luaXRpYWxpemF0aW9uUmVwbHkpOwotICAgIG1f
aW5pdGlhbGl6YXRpb25SZXBseSA9IHJlcGx5OworICAgIG1faW5pdGlhbGl6YXRpb25SZXBseSA9
IFdURk1vdmUocmVwbHkpOwogfQogCiBSZWZQdHI8TWVzc2FnZXM6OldlYlByb2Nlc3NDb25uZWN0
aW9uOjpDcmVhdGVQbHVnaW46OkRlbGF5ZWRSZXBseT4gUGx1Z2luQ29udHJvbGxlclByb3h5Ojp0
YWtlSW5pdGlhbGl6YXRpb25SZXBseSgpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9j
ZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmgJKHJldmlzaW9uIDIxNjQxNykK
KysrIFNvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmgJ
KHdvcmtpbmcgY29weSkKQEAgLTc1LDcgKzc1LDcgQEAgcHVibGljOgogCiAgICAgYm9vbCBpc0lu
aXRpYWxpemluZygpIGNvbnN0IHsgcmV0dXJuIG1faXNJbml0aWFsaXppbmc7IH0KICAgICAKLSAg
ICB2b2lkIHNldEluaXRpYWxpemF0aW9uUmVwbHkoUGFzc1JlZlB0cjxNZXNzYWdlczo6V2ViUHJv
Y2Vzc0Nvbm5lY3Rpb246OkNyZWF0ZVBsdWdpbjo6RGVsYXllZFJlcGx5Pik7CisgICAgdm9pZCBz
ZXRJbml0aWFsaXphdGlvblJlcGx5KFJlZjxNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246
OkNyZWF0ZVBsdWdpbjo6RGVsYXllZFJlcGx5PiYmKTsKICAgICBSZWZQdHI8TWVzc2FnZXM6Oldl
YlByb2Nlc3NDb25uZWN0aW9uOjpDcmVhdGVQbHVnaW46OkRlbGF5ZWRSZXBseT4gdGFrZUluaXRp
YWxpemF0aW9uUmVwbHkoKTsKIAogcHJpdmF0ZToKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsdWdp
blByb2Nlc3MvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1BsdWdpblByb2Nlc3MvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24uY3BwCShyZXZpc2lvbiAy
MTY0MTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0
aW9uLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTc2LDcgKzE3Niw3IEBAIHZvaWQgV2ViUHJvY2Vz
c0Nvbm5lY3Rpb246OmRpZENsb3NlKElQQzoKICAgICAgICAgZGVzdHJveVBsdWdpbkNvbnRyb2xs
ZXJQcm94eShwbHVnaW5Db250cm9sbGVyc1tpXSk7CiB9CiAKLXZvaWQgV2ViUHJvY2Vzc0Nvbm5l
Y3Rpb246OmRlc3Ryb3lQbHVnaW4odWludDY0X3QgcGx1Z2luSW5zdGFuY2VJRCwgYm9vbCBhc3lu
Y2hyb25vdXNDcmVhdGlvbkluY29tcGxldGUsIFBhc3NSZWZQdHI8TWVzc2FnZXM6OldlYlByb2Nl
c3NDb25uZWN0aW9uOjpEZXN0cm95UGx1Z2luOjpEZWxheWVkUmVwbHk+IHJlcGx5KQordm9pZCBX
ZWJQcm9jZXNzQ29ubmVjdGlvbjo6ZGVzdHJveVBsdWdpbih1aW50NjRfdCBwbHVnaW5JbnN0YW5j
ZUlELCBib29sIGFzeW5jaHJvbm91c0NyZWF0aW9uSW5jb21wbGV0ZSwgUmVmPE1lc3NhZ2VzOjpX
ZWJQcm9jZXNzQ29ubmVjdGlvbjo6RGVzdHJveVBsdWdpbjo6RGVsYXllZFJlcGx5PiYmIHJlcGx5
KQogewogICAgIC8vIFdlIHJldHVybiBpbW1lZGlhdGVseSBmcm9tIHRoaXMgc3luY2hyb25vdXMg
SVBDLiBXZSB3YW50IHRvIG1ha2Ugc3VyZSB0aGUgcGx1Z2luIGRlc3RydWN0aW9uIGlzIGp1c3Qg
YWJvdXQgdG8gc3RhcnQgc28gYXVkaW8gcGxheWJhY2sKICAgICAvLyB3aWxsIGZpbmlzaCBzb29u
IGFmdGVyIHJldHVybmluZy4gSG93ZXZlciB3ZSBkb24ndCB3YW50IHRvIHdhaXQgZm9yIGRlc3Ry
dWN0aW9uIHRvIGNvbXBsZXRlIGZ1bGx5IGFzIHRoYXQgbWF5IHRha2UgYSB3aGlsZS4KQEAgLTIy
OSw3ICsyMjksNyBAQCB2b2lkIFdlYlByb2Nlc3NDb25uZWN0aW9uOjpjcmVhdGVQbHVnaW5JCiAj
ZW5kaWYKIH0KIAotdm9pZCBXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Y3JlYXRlUGx1Z2luKGNvbnN0
IFBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycyYgY3JlYXRpb25QYXJhbWV0ZXJzLCBQYXNzUmVmUHRy
PE1lc3NhZ2VzOjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Q3JlYXRlUGx1Z2luOjpEZWxheWVkUmVw
bHk+IHJlcGx5KQordm9pZCBXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Y3JlYXRlUGx1Z2luKGNvbnN0
IFBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycyYgY3JlYXRpb25QYXJhbWV0ZXJzLCBSZWY8TWVzc2Fn
ZXM6OldlYlByb2Nlc3NDb25uZWN0aW9uOjpDcmVhdGVQbHVnaW46OkRlbGF5ZWRSZXBseT4mJiBy
ZXBseSkKIHsKICAgICAvLyBFbnN1cmUgd2UgZG9uJ3QgY2xhbXAgYW55IHRpbWVycyBkdXJpbmcg
aW5pdGlhbGl6YXRpb24KICAgICBBY3Rpdml0eUFzc2VydGlvbiBhY3Rpdml0eUFzc2VydGlvbihQ
bHVnaW5Qcm9jZXNzOjpzaW5nbGV0b24oKS5jb25uZWN0aW9uQWN0aXZpdHkoKSk7CkBAIC0yNDAs
NyArMjQwLDcgQEAgdm9pZCBXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Y3JlYXRlUGx1Z2luKAogICAg
IGlmIChwbHVnaW5Db250cm9sbGVyUHJveHkpIHsKICAgICAgICAgLy8gSXQgbWlnaHQgc3RpbGwg
YmUgaW4gdGhlIG1pZGRsZSBvZiBpbml0aWFsaXphdGlvbiBpbiB3aGljaCBjYXNlIHdlIGhhdmUg
dG8gbGV0IHRoYXQgaW5pdGlhbGl6YXRpb24gY29tcGxldGUgYW5kIHJlc3BvbmQgdG8gdGhpcyBt
ZXNzYWdlIGxhdGVyLgogICAgICAgICBpZiAocGx1Z2luQ29udHJvbGxlclByb3h5LT5pc0luaXRp
YWxpemluZygpKSB7Ci0gICAgICAgICAgICBwbHVnaW5Db250cm9sbGVyUHJveHktPnNldEluaXRp
YWxpemF0aW9uUmVwbHkocmVwbHkpOworICAgICAgICAgICAgcGx1Z2luQ29udHJvbGxlclByb3h5
LT5zZXRJbml0aWFsaXphdGlvblJlcGx5KFdURk1vdmUocmVwbHkpKTsKICAgICAgICAgICAgIHJl
dHVybjsKICAgICAgICAgfQogICAgICAgICAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsdWdpblBy
b2Nlc3MvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uLmgJKHJldmlzaW9uIDIxNjQxNykK
KysrIFNvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvV2ViUHJvY2Vzc0Nvbm5lY3Rpb24uaAko
d29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsNyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNV
Q0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgV2ViUHJvY2Vzc0Nvbm5lY3Rpb25faAotI2RlZmlu
ZSBXZWJQcm9jZXNzQ29ubmVjdGlvbl9oCisjcHJhZ21hIG9uY2UKIAogI2lmIEVOQUJMRShORVRT
Q0FQRV9QTFVHSU5fQVBJKQogCkBAIC03MCw5ICs2OSw5IEBAIHByaXZhdGU6CiAgICAgLy8gTWVz
c2FnZSBoYW5kbGVycy4KICAgICB2b2lkIGRpZFJlY2VpdmVXZWJQcm9jZXNzQ29ubmVjdGlvbk1l
c3NhZ2UoSVBDOjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJik7CiAgICAgdm9pZCBkaWRSZWNl
aXZlU3luY1dlYlByb2Nlc3NDb25uZWN0aW9uTWVzc2FnZShJUEM6OkNvbm5lY3Rpb24mLCBJUEM6
OkRlY29kZXImLCBzdGQ6OnVuaXF1ZV9wdHI8SVBDOjpFbmNvZGVyPiYpOwotICAgIHZvaWQgY3Jl
YXRlUGx1Z2luKGNvbnN0IFBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycyYsIFBhc3NSZWZQdHI8TWVz
c2FnZXM6OldlYlByb2Nlc3NDb25uZWN0aW9uOjpDcmVhdGVQbHVnaW46OkRlbGF5ZWRSZXBseT4p
OworICAgIHZvaWQgY3JlYXRlUGx1Z2luKGNvbnN0IFBsdWdpbkNyZWF0aW9uUGFyYW1ldGVycyYs
IFJlZjxNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkNyZWF0ZVBsdWdpbjo6RGVsYXll
ZFJlcGx5PiYmKTsKICAgICB2b2lkIGNyZWF0ZVBsdWdpbkFzeW5jaHJvbm91c2x5KGNvbnN0IFBs
dWdpbkNyZWF0aW9uUGFyYW1ldGVycyYpOwotICAgIHZvaWQgZGVzdHJveVBsdWdpbih1aW50NjRf
dCBwbHVnaW5JbnN0YW5jZUlELCBib29sIGFzeW5jaHJvbm91c0NyZWF0aW9uSW5jb21wbGV0ZSwg
UGFzc1JlZlB0cjxNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkRlc3Ryb3lQbHVnaW46
OkRlbGF5ZWRSZXBseT4pOworICAgIHZvaWQgZGVzdHJveVBsdWdpbih1aW50NjRfdCBwbHVnaW5J
bnN0YW5jZUlELCBib29sIGFzeW5jaHJvbm91c0NyZWF0aW9uSW5jb21wbGV0ZSwgUmVmPE1lc3Nh
Z2VzOjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6RGVzdHJveVBsdWdpbjo6RGVsYXllZFJlcGx5PiYm
KTsKICAgICAKICAgICB2b2lkIGNyZWF0ZVBsdWdpbkludGVybmFsKGNvbnN0IFBsdWdpbkNyZWF0
aW9uUGFyYW1ldGVycyYsIGJvb2wmIHJlc3VsdCwgYm9vbCYgd2FudHNXaGVlbEV2ZW50cywgdWlu
dDMyX3QmIHJlbW90ZUxheWVyQ2xpZW50SUQpOwogCkBAIC04Niw2ICs4NSwzIEBAIHByaXZhdGU6
CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogI2VuZGlmIC8vIEVOQUJMRShORVRTQ0FQRV9QTFVH
SU5fQVBJKQotCi0KLSNlbmRpZiAvLyBXZWJQcm9jZXNzQ29ubmVjdGlvbl9oCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuY3BwCShyZXZpc2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkNocm9tZUNsaWVudC5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTc3Myw3ICs3NzMsNyBAQCB2b2lkIFdlYkNocm9tZUNsaWVudDo6cnVuT3BlblBhbmVs
KEZyYW1lCiAgICAgaWYgKG1fcGFnZS5hY3RpdmVPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcigpKQog
ICAgICAgICByZXR1cm47CiAKLSAgICBtX3BhZ2Uuc2V0QWN0aXZlT3BlblBhbmVsUmVzdWx0TGlz
dGVuZXIoV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI6OmNyZWF0ZSgmbV9wYWdlLCAmZmlsZUNo
b29zZXIpKTsKKyAgICBtX3BhZ2Uuc2V0QWN0aXZlT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIoV2Vi
T3BlblBhbmVsUmVzdWx0TGlzdGVuZXI6OmNyZWF0ZShtX3BhZ2UsIGZpbGVDaG9vc2VyKSk7CiAK
ICAgICBhdXRvKiB3ZWJGcmFtZSA9IFdlYkZyYW1lOjpmcm9tQ29yZUZyYW1lKGZyYW1lKTsKICAg
ICBBU1NFUlQod2ViRnJhbWUpOwpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJD
b3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAkocmV2aXNp
b24gMjE2NDE3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJFZGl0b3JDbGllbnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yNDUsOCArMjQ1LDggQEAgdm9p
ZCBXZWJFZGl0b3JDbGllbnQ6OnJlZ2lzdGVyVW5kb1N0ZXAoVQogICAgIGlmIChtX3BhZ2UtPmlz
SW5SZWRvKCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIGF1dG8gd2ViU3RlcCA9IFdlYlVuZG9T
dGVwOjpjcmVhdGUoJnN0ZXApOwotICAgIGF1dG8gZWRpdEFjdGlvbiA9IHN0YXRpY19jYXN0PHVp
bnQzMl90Pih3ZWJTdGVwLT5zdGVwKCktPmVkaXRpbmdBY3Rpb24oKSk7CisgICAgYXV0byB3ZWJT
dGVwID0gV2ViVW5kb1N0ZXA6OmNyZWF0ZShzdGVwKTsKKyAgICBhdXRvIGVkaXRBY3Rpb24gPSBz
dGF0aWNfY2FzdDx1aW50MzJfdD4od2ViU3RlcC0+c3RlcCgpLmVkaXRpbmdBY3Rpb24oKSk7CiAK
ICAgICBtX3BhZ2UtPmFkZFdlYlVuZG9TdGVwKHdlYlN0ZXAtPnN0ZXBJRCgpLCB3ZWJTdGVwLnB0
cigpKTsKICAgICBtX3BhZ2UtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6UmVnaXN0ZXJF
ZGl0Q29tbWFuZEZvclVuZG8od2ViU3RlcC0+c3RlcElEKCksIGVkaXRBY3Rpb24pKTsKSW5kZXg6
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJv
bGxlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1Zpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLmNwcAkocmV2aXNpb24gMjE2NDE3KQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVy
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsMTYgKzQ0LDE2IEBAIHN0YXRpYyBIYXNoTWFwPHVp
bnQ2NF90LCBWaXNpdGVkTGlua1RhYmwKICAgICByZXR1cm4gdmlzaXRlZExpbmtUYWJsZUNvbnRy
b2xsZXJzOwogfQogCi1QYXNzUmVmUHRyPFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyPiBWaXNp
dGVkTGlua1RhYmxlQ29udHJvbGxlcjo6Z2V0T3JDcmVhdGUodWludDY0X3QgaWRlbnRpZmllcikK
K1JlZjxWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcj4gVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xs
ZXI6OmdldE9yQ3JlYXRlKHVpbnQ2NF90IGlkZW50aWZpZXIpCiB7CiAgICAgYXV0byYgdmlzaXRl
ZExpbmtUYWJsZUNvbnRyb2xsZXJQdHIgPSB2aXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcnMoKS5h
ZGQoaWRlbnRpZmllciwgbnVsbHB0cikuaXRlcmF0b3ItPnZhbHVlOwogICAgIGlmICh2aXNpdGVk
TGlua1RhYmxlQ29udHJvbGxlclB0cikKLSAgICAgICAgcmV0dXJuIHZpc2l0ZWRMaW5rVGFibGVD
b250cm9sbGVyUHRyOworICAgICAgICByZXR1cm4gKnZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVy
UHRyOwogCiAgICAgYXV0byB2aXNpdGVkTGlua1RhYmxlQ29udHJvbGxlciA9IGFkb3B0UmVmKCpu
ZXcgVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIoaWRlbnRpZmllcikpOwogICAgIHZpc2l0ZWRM
aW5rVGFibGVDb250cm9sbGVyUHRyID0gdmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIucHRyKCk7
CiAKLSAgICByZXR1cm4gV1RGTW92ZSh2aXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcik7CisgICAg
cmV0dXJuIHZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyOwogfQogCiBWaXNpdGVkTGlua1RhYmxl
Q29udHJvbGxlcjo6VmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIodWludDY0X3QgaWRlbnRpZmll
cikKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1Rh
YmxlQ29udHJvbGxlci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5oCShyZXZpc2lvbiAyMTY0MTcpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNvbnRy
b2xsZXIuaAkod29ya2luZyBjb3B5KQpAQCAtMjMsOCArMjMsNyBAQAogICogVEhFIFBPU1NJQklM
SVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgVmlzaXRlZExpbmtUYWJsZUNvbnRy
b2xsZXJfaAotI2RlZmluZSBWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcl9oCisjcHJhZ21hIG9u
Y2UKIAogI2luY2x1ZGUgIk1lc3NhZ2VSZWNlaXZlci5oIgogI2luY2x1ZGUgIlNoYXJlZE1lbW9y
eS5oIgpAQCAtMzUsNyArMzQsNyBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgVmlzaXRl
ZExpbmtUYWJsZUNvbnRyb2xsZXIgZmluYWwgOiBwdWJsaWMgV2ViQ29yZTo6VmlzaXRlZExpbmtT
dG9yZSAsIHByaXZhdGUgSVBDOjpNZXNzYWdlUmVjZWl2ZXIgewogcHVibGljOgotICAgIHN0YXRp
YyBQYXNzUmVmUHRyPFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyPiBnZXRPckNyZWF0ZSh1aW50
NjRfdCBpZGVudGlmaWVyKTsKKyAgICBzdGF0aWMgUmVmPFZpc2l0ZWRMaW5rVGFibGVDb250cm9s
bGVyPiBnZXRPckNyZWF0ZSh1aW50NjRfdCBpZGVudGlmaWVyKTsKICAgICB2aXJ0dWFsIH5WaXNp
dGVkTGlua1RhYmxlQ29udHJvbGxlcigpOwogCiBwcml2YXRlOgpAQCAtNTgsNSArNTcsMyBAQCBw
cml2YXRlOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBWaXNpdGVk
TGlua1RhYmxlQ29udHJvbGxlcl9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViRnJhbWUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYw
MywxMCArNjAzLDEwIEBAIGJvb2wgV2ViRnJhbWU6Omhhc1ZlcnRpY2FsU2Nyb2xsYmFyKCkgY28K
ICAgICByZXR1cm4gdmlldy0+dmVydGljYWxTY3JvbGxiYXIoKTsKIH0KIAotUGFzc1JlZlB0cjxJ
bmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQ+IFdlYkZyYW1lOjpoaXRUZXN0KGNvbnN0IEludFBv
aW50IHBvaW50KSBjb25zdAorUmVmUHRyPEluamVjdGVkQnVuZGxlSGl0VGVzdFJlc3VsdD4gV2Vi
RnJhbWU6OmhpdFRlc3QoY29uc3QgSW50UG9pbnQgcG9pbnQpIGNvbnN0CiB7CiAgICAgaWYgKCFt
X2NvcmVGcmFtZSkKLSAgICAgICAgcmV0dXJuIDA7CisgICAgICAgIHJldHVybiBudWxscHRyOwog
CiAgICAgcmV0dXJuIEluamVjdGVkQnVuZGxlSGl0VGVzdFJlc3VsdDo6Y3JlYXRlKG1fY29yZUZy
YW1lLT5ldmVudEhhbmRsZXIoKS5oaXRUZXN0UmVzdWx0QXRQb2ludChwb2ludCwgSGl0VGVzdFJl
cXVlc3Q6OlJlYWRPbmx5IHwgSGl0VGVzdFJlcXVlc3Q6OkFjdGl2ZSB8IEhpdFRlc3RSZXF1ZXN0
OjpJZ25vcmVDbGlwcGluZyB8IEhpdFRlc3RSZXF1ZXN0OjpEaXNhbGxvd1VzZXJBZ2VudFNoYWRv
d0NvbnRlbnQpKTsKIH0KQEAgLTgxOCw3ICs4MTgsNyBAQCBSZXRhaW5QdHI8Q0ZEYXRhUmVmPiBX
ZWJGcmFtZTo6d2ViQXJjaGl2CiB9CiAjZW5kaWYKIAotUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRt
YXA+IFdlYkZyYW1lOjpjcmVhdGVTZWxlY3Rpb25TbmFwc2hvdCgpIGNvbnN0CitSZWZQdHI8U2hh
cmVhYmxlQml0bWFwPiBXZWJGcmFtZTo6Y3JlYXRlU2VsZWN0aW9uU25hcHNob3QoKSBjb25zdAog
ewogICAgIHN0ZDo6dW5pcXVlX3B0cjxJbWFnZUJ1ZmZlcj4gc25hcHNob3QgPSBzbmFwc2hvdFNl
bGVjdGlvbigqY29yZUZyYW1lKCksIFdlYkNvcmU6OlNuYXBzaG90T3B0aW9uc0ZvcmNlQmxhY2tU
ZXh0KTsKICAgICBpZiAoIXNuYXBzaG90KQpAQCAtODM1LDcgKzgzNSw3IEBAIFBhc3NSZWZQdHI8
U2hhcmVhYmxlQml0bWFwPiBXZWJGcmFtZTo6Y3IKICAgICBncmFwaGljc0NvbnRleHQtPnNjYWxl
KGRldmljZVNjYWxlRmFjdG9yKTsKICAgICBncmFwaGljc0NvbnRleHQtPmRyYXdDb25zdW1pbmdJ
bWFnZUJ1ZmZlcihXVEZNb3ZlKHNuYXBzaG90KSwgRmxvYXRQb2ludCgpKTsKIAotICAgIHJldHVy
biBXVEZNb3ZlKHNoYXJlZFNuYXBzaG90KTsKKyAgICByZXR1cm4gc2hhcmVkU25hcHNob3Q7CiB9
CiAgICAgCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFtZS5oCShyZXZpc2lvbiAyMTY0MTcpCisrKyBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuaAkod29ya2luZyBjb3B5KQpAQCAt
MjMsOCArMjMsNyBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAK
LSNpZm5kZWYgV2ViRnJhbWVfaAotI2RlZmluZSBXZWJGcmFtZV9oCisjcHJhZ21hIG9uY2UKIAog
I2luY2x1ZGUgIkFQSU9iamVjdC5oIgogI2luY2x1ZGUgIkRvd25sb2FkSUQuaCIKQEAgLTM2LDcg
KzM1LDYgQEAKICNpbmNsdWRlIDxXZWJDb3JlL0ZyYW1lTG9hZGVyVHlwZXMuaD4KICNpbmNsdWRl
IDxXZWJDb3JlL1BvbGljeUNoZWNrZXIuaD4KICNpbmNsdWRlIDx3dGYvRm9yd2FyZC5oPgotI2lu
Y2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CiAjaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgogI2luY2x1
ZGUgPHd0Zi9SZXRhaW5QdHIuaD4KIApAQCAtMTExLDcgKzEwOSw3IEBAIHB1YmxpYzoKICAgICBX
ZWJDb3JlOjpJbnRTaXplIHNjcm9sbE9mZnNldCgpIGNvbnN0OwogICAgIGJvb2wgaGFzSG9yaXpv
bnRhbFNjcm9sbGJhcigpIGNvbnN0OwogICAgIGJvb2wgaGFzVmVydGljYWxTY3JvbGxiYXIoKSBj
b25zdDsKLSAgICBQYXNzUmVmUHRyPEluamVjdGVkQnVuZGxlSGl0VGVzdFJlc3VsdD4gaGl0VGVz
dChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCkgY29uc3Q7CisgICAgUmVmUHRyPEluamVjdGVkQnVu
ZGxlSGl0VGVzdFJlc3VsdD4gaGl0VGVzdChjb25zdCBXZWJDb3JlOjpJbnRQb2ludCkgY29uc3Q7
CiAgICAgYm9vbCBnZXREb2N1bWVudEJhY2tncm91bmRDb2xvcihkb3VibGUqIHJlZCwgZG91Ymxl
KiBncmVlbiwgZG91YmxlKiBibHVlLCBkb3VibGUqIGFscGhhKTsKICAgICBib29sIGNvbnRhaW5z
QW55Rm9ybUVsZW1lbnRzKCkgY29uc3Q7CiAgICAgYm9vbCBjb250YWluc0FueUZvcm1Db250cm9s
cygpIGNvbnN0OwpAQCAtMTU4LDcgKzE1Niw3IEBAIHB1YmxpYzoKICAgICBSZXRhaW5QdHI8Q0ZE
YXRhUmVmPiB3ZWJBcmNoaXZlRGF0YShGcmFtZUZpbHRlckZ1bmN0aW9uLCB2b2lkKiBjb250ZXh0
KTsKICNlbmRpZgogCi0gICAgUGFzc1JlZlB0cjxTaGFyZWFibGVCaXRtYXA+IGNyZWF0ZVNlbGVj
dGlvblNuYXBzaG90KCkgY29uc3Q7CisgICAgUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gY3JlYXRl
U2VsZWN0aW9uU25hcHNob3QoKSBjb25zdDsKIAogI2lmIFBMQVRGT1JNKElPUykKICAgICB1aW50
NjRfdCBmaXJzdExheWVyVHJlZVRyYW5zYWN0aW9uSURBZnRlckRpZENvbW1pdExvYWQoKSBjb25z
dCB7IHJldHVybiBtX2ZpcnN0TGF5ZXJUcmVlVHJhbnNhY3Rpb25JREFmdGVyRGlkQ29tbWl0TG9h
ZDsgfQpAQCAtMTg2LDUgKzE4NCwzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBX
ZWJLaXQKLQotI2VuZGlmIC8vIFdlYkZyYW1lX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9XZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYk9wZW5QYW5lbFJlc3VsdExp
c3RlbmVyLmNwcAkocmV2aXNpb24gMjE2NDE3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmNwcAkod29ya2luZyBjb3B5KQpA
QCAtMjYsMTggKzI2LDE5IEBACiAjaW5jbHVkZSAiY29uZmlnLmgiCiAjaW5jbHVkZSAiV2ViT3Bl
blBhbmVsUmVzdWx0TGlzdGVuZXIuaCIKIAorI2luY2x1ZGUgPFdlYkNvcmUvRmlsZUNob29zZXIu
aD4KICNpbmNsdWRlIDxXZWJDb3JlL0ljb24uaD4KIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVJl
ZjxXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcj4gV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI6
OmNyZWF0ZShXZWJQYWdlKiBwYWdlLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkZpbGVDaG9vc2VyPiBm
aWxlQ2hvb3NlcikKK1JlZjxXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcj4gV2ViT3BlblBhbmVs
UmVzdWx0TGlzdGVuZXI6OmNyZWF0ZShXZWJQYWdlJiBwYWdlLCBSZWY8V2ViQ29yZTo6RmlsZUNo
b29zZXI+JiYgZmlsZUNob29zZXIpCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViT3Bl
blBhbmVsUmVzdWx0TGlzdGVuZXIocGFnZSwgZmlsZUNob29zZXIpKTsKKyAgICByZXR1cm4gYWRv
cHRSZWYoKm5ldyBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcihwYWdlLCBXVEZNb3ZlKGZpbGVD
aG9vc2VyKSkpOwogfQogCi1XZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcjo6V2ViT3BlblBhbmVs
UmVzdWx0TGlzdGVuZXIoV2ViUGFnZSogcGFnZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpGaWxlQ2hv
b3Nlcj4gZmlsZUNob29zZXIpCi0gICAgOiBtX3BhZ2UocGFnZSkKLSAgICAsIG1fZmlsZUNob29z
ZXIoZmlsZUNob29zZXIpCitXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcjo6V2ViT3BlblBhbmVs
UmVzdWx0TGlzdGVuZXIoV2ViUGFnZSYgcGFnZSwgUmVmPFdlYkNvcmU6OkZpbGVDaG9vc2VyPiYm
IGZpbGVDaG9vc2VyKQorICAgIDogbV9wYWdlKCZwYWdlKQorICAgICwgbV9maWxlQ2hvb3NlcihX
VEZNb3ZlKGZpbGVDaG9vc2VyKSkKIHsKIH0KIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJv
Y2Vzcy9XZWJQYWdlL1dlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYk9wZW5QYW5lbFJlc3VsdExpc3Rl
bmVyLmgJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMywx
MyArMjMsMTUgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0j
aWZuZGVmIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyX2gKLSNkZWZpbmUgV2ViT3BlblBhbmVs
UmVzdWx0TGlzdGVuZXJfaAorI3ByYWdtYSBvbmNlCiAKKyNpbmNsdWRlIDx3dGYvRm9yd2FyZC5o
PgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgotI2lu
Y2x1ZGUgPFdlYkNvcmUvRmlsZUNob29zZXIuaD4KKyNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAK
IG5hbWVzcGFjZSBXZWJDb3JlIHsKK2NsYXNzIEZpbGVDaG9vc2VyOwogY2xhc3MgSWNvbjsKIH0K
IApAQCAtMzksNyArNDEsNyBAQCBjbGFzcyBXZWJQYWdlOwogCiBjbGFzcyBXZWJPcGVuUGFuZWxS
ZXN1bHRMaXN0ZW5lciA6IHB1YmxpYyBSZWZDb3VudGVkPFdlYk9wZW5QYW5lbFJlc3VsdExpc3Rl
bmVyPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5l
cj4gY3JlYXRlKFdlYlBhZ2UqLCBQYXNzUmVmUHRyPFdlYkNvcmU6OkZpbGVDaG9vc2VyPik7Cisg
ICAgc3RhdGljIFJlZjxXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcj4gY3JlYXRlKFdlYlBhZ2Um
LCBSZWY8V2ViQ29yZTo6RmlsZUNob29zZXI+JiYpOwogICAgIH5XZWJPcGVuUGFuZWxSZXN1bHRM
aXN0ZW5lcigpOwogCiAgICAgdm9pZCBkaXNjb25uZWN0RnJvbVBhZ2UoKSB7IG1fcGFnZSA9IDA7
IH0KQEAgLTQ5LDEzICs1MSwxMCBAQCBwdWJsaWM6CiAjZW5kaWYKIAogcHJpdmF0ZToKLSAgICBX
ZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcihXZWJQYWdlKiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpG
aWxlQ2hvb3Nlcj4pOworICAgIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyKFdlYlBhZ2UmLCBS
ZWY8V2ViQ29yZTo6RmlsZUNob29zZXI+JiYpOwogCiAgICAgV2ViUGFnZSogbV9wYWdlOwogICAg
IFJlZlB0cjxXZWJDb3JlOjpGaWxlQ2hvb3Nlcj4gbV9maWxlQ2hvb3NlcjsKIH07CiAKIH0gLy8g
bmFtZXNwYWNlIFdlYktpdAotCi0KLSNlbmRpZiAvLyBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5l
cl9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwCShyZXZpc2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM3MTAsNyArMzcxMCw3IEBAIHZvaWQg
V2ViUGFnZTo6dW5hcHBseUVkaXRDb21tYW5kKHVpbnQ2NF8KICAgICBpZiAoIXN0ZXApCiAgICAg
ICAgIHJldHVybjsKIAotICAgIHN0ZXAtPnN0ZXAoKS0+dW5hcHBseSgpOworICAgIHN0ZXAtPnN0
ZXAoKS51bmFwcGx5KCk7CiB9CiAKIHZvaWQgV2ViUGFnZTo6cmVhcHBseUVkaXRDb21tYW5kKHVp
bnQ2NF90IHN0ZXBJRCkKQEAgLTM3MjAsNyArMzcyMCw3IEBAIHZvaWQgV2ViUGFnZTo6cmVhcHBs
eUVkaXRDb21tYW5kKHVpbnQ2NF8KICAgICAgICAgcmV0dXJuOwogCiAgICAgbV9pc0luUmVkbyA9
IHRydWU7Ci0gICAgc3RlcC0+c3RlcCgpLT5yZWFwcGx5KCk7CisgICAgc3RlcC0+c3RlcCgpLnJl
YXBwbHkoKTsKICAgICBtX2lzSW5SZWRvID0gZmFsc2U7CiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmNw
cAkocmV2aXNpb24gMjE2NDE3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2VHcm91cFByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzUsMTQgKzM1LDE0IEBA
CiAKIG5hbWVzcGFjZSBXZWJLaXQgewogCi1QYXNzUmVmUHRyPFdlYlBhZ2VHcm91cFByb3h5PiBX
ZWJQYWdlR3JvdXBQcm94eTo6Y3JlYXRlKGNvbnN0IFdlYlBhZ2VHcm91cERhdGEmIGRhdGEpCitS
ZWY8V2ViUGFnZUdyb3VwUHJveHk+IFdlYlBhZ2VHcm91cFByb3h5OjpjcmVhdGUoY29uc3QgV2Vi
UGFnZUdyb3VwRGF0YSYgZGF0YSkKIHsKICAgICBhdXRvIHBhZ2VHcm91cCA9IGFkb3B0UmVmKCpu
ZXcgV2ViUGFnZUdyb3VwUHJveHkoZGF0YSkpOwogCiAgICAgaWYgKHBhZ2VHcm91cC0+aXNWaXNp
YmxlVG9JbmplY3RlZEJ1bmRsZSgpICYmIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmluamVjdGVk
QnVuZGxlKCkpCiAgICAgICAgIFdlYlByb2Nlc3M6OnNpbmdsZXRvbigpLmluamVjdGVkQnVuZGxl
KCktPmRpZEluaXRpYWxpemVQYWdlR3JvdXAocGFnZUdyb3VwLnB0cigpKTsKIAotICAgIHJldHVy
biBXVEZNb3ZlKHBhZ2VHcm91cCk7CisgICAgcmV0dXJuIHBhZ2VHcm91cDsKIH0KIAogV2ViUGFn
ZUdyb3VwUHJveHk6OldlYlBhZ2VHcm91cFByb3h5KGNvbnN0IFdlYlBhZ2VHcm91cERhdGEmIGRh
dGEpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3Vw
UHJveHkuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViUGFnZUdyb3VwUHJveHkuaAkocmV2aXNpb24gMjE2NDE3KQorKysgU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmgJKHdvcmtpbmcgY29weSkKQEAg
LTIzLDEyICsyMywxMSBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICov
CiAKLSNpZm5kZWYgV2ViUGFnZUdyb3VwUHJveHlfaAotI2RlZmluZSBXZWJQYWdlR3JvdXBQcm94
eV9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIkFQSU9iamVjdC5oIgogI2luY2x1ZGUgIldl
YlBhZ2VHcm91cERhdGEuaCIKLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgorI2luY2x1ZGUg
PHd0Zi9SZWYuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogY2xhc3MgUGFnZUdyb3VwOwpAQCAt
NDAsNyArMzksNyBAQCBjbGFzcyBXZWJVc2VyQ29udGVudENvbnRyb2xsZXI7CiAKIGNsYXNzIFdl
YlBhZ2VHcm91cFByb3h5IDogcHVibGljIEFQSTo6T2JqZWN0SW1wbDxBUEk6Ok9iamVjdDo6VHlw
ZTo6QnVuZGxlUGFnZUdyb3VwPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8V2Vi
UGFnZUdyb3VwUHJveHk+IGNyZWF0ZShjb25zdCBXZWJQYWdlR3JvdXBEYXRhJik7CisgICAgc3Rh
dGljIFJlZjxXZWJQYWdlR3JvdXBQcm94eT4gY3JlYXRlKGNvbnN0IFdlYlBhZ2VHcm91cERhdGEm
KTsKICAgICB2aXJ0dWFsIH5XZWJQYWdlR3JvdXBQcm94eSgpOwogCiAgICAgY29uc3QgU3RyaW5n
JiBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4gbV9kYXRhLmlkZW50aWZpZXI7IH0KQEAgLTYw
LDUgKzU5LDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5k
aWYgLy8gV2ViUGFnZUdyb3VwUHJveHlfaApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlVuZG9TdGVwLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVW5kb1N0ZXAuY3BwCShyZXZpc2lvbiAyMTY0MTcpCisrKyBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVW5kb1N0ZXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNCw5ICszNCw5IEBAIHN0YXRpYyB1aW50NjRfdCBnZW5lcmF0ZVVuZG9TdGVw
KCkKICAgICByZXR1cm4gdW5pcXVlRW50cnlJRCsrOwogfQogCi1SZWY8V2ViVW5kb1N0ZXA+IFdl
YlVuZG9TdGVwOjpjcmVhdGUoUGFzc1JlZlB0cjxXZWJDb3JlOjpVbmRvU3RlcD4gc3RlcCkKK1Jl
ZjxXZWJVbmRvU3RlcD4gV2ViVW5kb1N0ZXA6OmNyZWF0ZShSZWY8V2ViQ29yZTo6VW5kb1N0ZXA+
JiYgc3RlcCkKIHsKLSAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJVbmRvU3RlcChzdGVwLCBn
ZW5lcmF0ZVVuZG9TdGVwKCkpKTsKKyAgICByZXR1cm4gYWRvcHRSZWYoKm5ldyBXZWJVbmRvU3Rl
cChXVEZNb3ZlKHN0ZXApLCBnZW5lcmF0ZVVuZG9TdGVwKCkpKTsKIH0KIAogV2ViVW5kb1N0ZXA6
On5XZWJVbmRvU3RlcCgpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
V2ViVW5kb1N0ZXAuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViVW5kb1N0ZXAuaAkocmV2aXNpb24gMjE2NDE3KQorKysgU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVuZG9TdGVwLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDM0
ICsyMywzMCBAQAogICogVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNp
Zm5kZWYgV2ViVW5kb1N0ZXBfaAotI2RlZmluZSBXZWJVbmRvU3RlcF9oCisjcHJhZ21hIG9uY2UK
IAogI2luY2x1ZGUgPFdlYkNvcmUvVW5kb1N0ZXAuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0
ci5oPgotI2luY2x1ZGUgPHd0Zi9SZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CiAKIG5h
bWVzcGFjZSBXZWJLaXQgewogCiBjbGFzcyBXZWJVbmRvU3RlcCA6IHB1YmxpYyBSZWZDb3VudGVk
PFdlYlVuZG9TdGVwPiB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFJlZjxXZWJVbmRvU3RlcD4gY3Jl
YXRlKFBhc3NSZWZQdHI8V2ViQ29yZTo6VW5kb1N0ZXA+KTsKKyAgICBzdGF0aWMgUmVmPFdlYlVu
ZG9TdGVwPiBjcmVhdGUoUmVmPFdlYkNvcmU6OlVuZG9TdGVwPiYmKTsKICAgICB+V2ViVW5kb1N0
ZXAoKTsKIAotICAgIFdlYkNvcmU6OlVuZG9TdGVwKiBzdGVwKCkgY29uc3QgeyByZXR1cm4gbV9z
dGVwLmdldCgpOyB9CisgICAgV2ViQ29yZTo6VW5kb1N0ZXAmIHN0ZXAoKSBjb25zdCB7IHJldHVy
biBtX3N0ZXAuZ2V0KCk7IH0KICAgICB1aW50NjRfdCBzdGVwSUQoKSBjb25zdCB7IHJldHVybiBt
X3N0ZXBJRDsgfQogCiBwcml2YXRlOgotICAgIFdlYlVuZG9TdGVwKFBhc3NSZWZQdHI8V2ViQ29y
ZTo6VW5kb1N0ZXA+IHN0ZXAsIHVpbnQ2NF90IHN0ZXBJRCkKLSAgICAgICAgOiBtX3N0ZXAoc3Rl
cCkKKyAgICBXZWJVbmRvU3RlcChSZWY8V2ViQ29yZTo6VW5kb1N0ZXA+JiYgc3RlcCwgdWludDY0
X3Qgc3RlcElEKQorICAgICAgICA6IG1fc3RlcChXVEZNb3ZlKHN0ZXApKQogICAgICAgICAsIG1f
c3RlcElEKHN0ZXBJRCkKICAgICB7CiAgICAgfQogCi0gICAgUmVmUHRyPFdlYkNvcmU6OlVuZG9T
dGVwPiBtX3N0ZXA7CisgICAgUmVmPFdlYkNvcmU6OlVuZG9TdGVwPiBtX3N0ZXA7CiAgICAgdWlu
dDY0X3QgbV9zdGVwSUQ7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotI2VuZGlmIC8v
IFdlYkVkaXRDb21tYW5kX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5jcHAJKHJl
dmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
UGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBA
QCB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVBhc3NS
ZWZQdHI8UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNyZWF0
ZShMYXllclR5cGUgbGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyLCBSZW1v
dGVMYXllclRyZWVDb250ZXh0JiBjb250ZXh0KQorUmVmPFBsYXRmb3JtQ0FMYXllclJlbW90ZT4g
UGxhdGZvcm1DQUxheWVyUmVtb3RlOjpjcmVhdGUoTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZv
cm1DQUxheWVyQ2xpZW50KiBvd25lciwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYgY29udGV4dCkK
IHsKICAgICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBsYXllcjsKIApAQCAtNTUsMjEg
KzU1LDIxIEBAIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBQbGF0Zm8KIAogICAg
IGNvbnRleHQubGF5ZXJXYXNDcmVhdGVkKCpsYXllciwgbGF5ZXJUeXBlKTsKIAotICAgIHJldHVy
biBXVEZNb3ZlKGxheWVyKTsKKyAgICByZXR1cm4gbGF5ZXIucmVsZWFzZU5vbk51bGwoKTsKIH0K
IAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU+IFBsYXRmb3JtQ0FMYXllclJlbW90
ZTo6Y3JlYXRlKFBsYXRmb3JtTGF5ZXIgKnBsYXRmb3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNs
aWVudCogb3duZXIsIFJlbW90ZUxheWVyVHJlZUNvbnRleHQmIGNvbnRleHQpCitSZWY8UGxhdGZv
cm1DQUxheWVyUmVtb3RlPiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNyZWF0ZShQbGF0Zm9ybUxh
eWVyICpwbGF0Zm9ybUxheWVyLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyLCBSZW1vdGVM
YXllclRyZWVDb250ZXh0JiBjb250ZXh0KQogewogICAgIHJldHVybiBQbGF0Zm9ybUNBTGF5ZXJS
ZW1vdGVDdXN0b206OmNyZWF0ZShwbGF0Zm9ybUxheWVyLCBvd25lciwgY29udGV4dCk7CiB9CiAK
LVBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6
OmNyZWF0ZShjb25zdCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUmIG90aGVyLCBXZWJDb3JlOjpQbGF0
Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyLCBSZW1vdGVMYXllclRyZWVDb250ZXh0JiBjb250ZXh0
KQorUmVmPFBsYXRmb3JtQ0FMYXllclJlbW90ZT4gUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpjcmVh
dGUoY29uc3QgUGxhdGZvcm1DQUxheWVyUmVtb3RlJiBvdGhlciwgV2ViQ29yZTo6UGxhdGZvcm1D
QUxheWVyQ2xpZW50KiBvd25lciwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYgY29udGV4dCkKIHsK
ICAgICBhdXRvIGxheWVyID0gYWRvcHRSZWYoKm5ldyBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUob3Ro
ZXIsIG93bmVyLCBjb250ZXh0KSk7CiAKICAgICBjb250ZXh0LmxheWVyV2FzQ3JlYXRlZChsYXll
ci5nZXQoKSwgb3RoZXIubGF5ZXJUeXBlKCkpOwogCi0gICAgcmV0dXJuIFdURk1vdmUobGF5ZXIp
OworICAgIHJldHVybiBsYXllcjsKIH0KIAogUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpQbGF0Zm9y
bUNBTGF5ZXJSZW1vdGUoTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50
KiBvd25lciwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYgY29udGV4dCkKQEAgLTg5LDE0ICs4OSwx
NCBAQCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OlBsYXRmb3JtQ0FMYXllclJlCiB7CiB9CiAKLVBh
c3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNsb25lKFBs
YXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0CitSZWY8UGxhdGZvcm1DQUxheWVyPiBQ
bGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNsb25lKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIp
IGNvbnN0CiB7CiAgICAgYXV0byBjbG9uZSA9IFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6Y3JlYXRl
KCp0aGlzLCBvd25lciwgKm1fY29udGV4dCk7CiAKLSAgICB1cGRhdGVDbG9uZWRMYXllclByb3Bl
cnRpZXMoKmNsb25lKTsKKyAgICB1cGRhdGVDbG9uZWRMYXllclByb3BlcnRpZXMoY2xvbmUpOwog
CiAgICAgY2xvbmUtPnNldENsb25lZExheWVyKHRoaXMpOwotICAgIHJldHVybiBXVEZNb3ZlKGNs
b25lKTsKKyAgICByZXR1cm4gY2xvbmU7CiB9CiAKIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6flBs
YXRmb3JtQ0FMYXllclJlbW90ZSgpCkBAIC0zNTcsNyArMzU3LDcgQEAgdm9pZCBQbGF0Zm9ybUNB
TGF5ZXJSZW1vdGU6OnJlbW92ZUFuaW1hdAogICAgIG1fcHJvcGVydGllcy5ub3RlUHJvcGVydGll
c0NoYW5nZWQoUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkFuaW1hdGlvbnNDaGFuZ2VkKTsK
IH0KIAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBQbGF0Zm9ybUNBTGF5ZXJSZW1v
dGU6OmFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkKK1JlZlB0cjxQbGF0Zm9ybUNB
QW5pbWF0aW9uPiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmFuaW1hdGlvbkZvcktleShjb25zdCBT
dHJpbmcmIGtleSkKIHsKICAgICByZXR1cm4gbV9hbmltYXRpb25zLmdldChrZXkpOwogfQpAQCAt
ODIxLDcgKzgyMSw3IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjp1cGRhdGVDdXN0b20K
ICAgICBtX3Byb3BlcnRpZXMubm90ZVByb3BlcnRpZXNDaGFuZ2VkKFJlbW90ZUxheWVyVHJlZVRy
YW5zYWN0aW9uOjpDdXN0b21BcHBlYXJhbmNlQ2hhbmdlZCk7CiB9CiAKLVBhc3NSZWZQdHI8UGxh
dGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNyZWF0ZUNvbXBhdGlibGVMYXll
cihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3JtQ0FMYXllckNs
aWVudCogY2xpZW50KSBjb25zdAorUmVmPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1DQUxheWVy
UmVtb3RlOjpjcmVhdGVDb21wYXRpYmxlTGF5ZXIoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGUg
bGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIGNsaWVudCkgY29uc3QKIHsKICAgICBy
ZXR1cm4gUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpjcmVhdGUobGF5ZXJUeXBlLCBjbGllbnQsICpt
X2NvbnRleHQpOwogfQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5oCShyZXZpc2lvbiAy
MTY0MTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3Jt
Q0FMYXllclJlbW90ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw5ICszOSw5IEBAIGNsYXNzIFJl
bW90ZUxheWVyVHJlZUNvbnRleHQ7CiAKIGNsYXNzIFBsYXRmb3JtQ0FMYXllclJlbW90ZSA6IHB1
YmxpYyBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFBsYXRmb3JtQ0FMYXllclJlbW90ZT4gY3JlYXRlKFdlYkNvcmU6OlBsYXRmb3JtQ0FM
YXllcjo6TGF5ZXJUeXBlLCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqLCBSZW1vdGVM
YXllclRyZWVDb250ZXh0Jik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVy
UmVtb3RlPiBjcmVhdGUoUGxhdGZvcm1MYXllciAqLCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJD
bGllbnQqLCBSZW1vdGVMYXllclRyZWVDb250ZXh0Jik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8
UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBjcmVhdGUoY29uc3QgUGxhdGZvcm1DQUxheWVyUmVtb3Rl
JiwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50KiwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4
dCYpOworICAgIHN0YXRpYyBSZWY8UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBjcmVhdGUoV2ViQ29y
ZTo6UGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGUsIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllckNs
aWVudCosIFJlbW90ZUxheWVyVHJlZUNvbnRleHQmKTsKKyAgICBzdGF0aWMgUmVmPFBsYXRmb3Jt
Q0FMYXllclJlbW90ZT4gY3JlYXRlKFBsYXRmb3JtTGF5ZXIgKiwgV2ViQ29yZTo6UGxhdGZvcm1D
QUxheWVyQ2xpZW50KiwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYpOworICAgIHN0YXRpYyBSZWY8
UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBjcmVhdGUoY29uc3QgUGxhdGZvcm1DQUxheWVyUmVtb3Rl
JiwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50KiwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4
dCYpOwogCiAgICAgdmlydHVhbCB+UGxhdGZvcm1DQUxheWVyUmVtb3RlKCk7CiAKQEAgLTY2LDcg
KzY2LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGRBbmltYXRpb25Gb3JLZXkoY29uc3QgU3Ry
aW5nJiBrZXksIFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb24mKSBvdmVycmlkZTsKICAgICB2
b2lkIHJlbW92ZUFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7Ci0g
ICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uPiBhbmltYXRpb25Gb3JL
ZXkoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOworICAgIFJlZlB0cjxXZWJDb3JlOjpQbGF0
Zm9ybUNBQW5pbWF0aW9uPiBhbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJy
aWRlOwogICAgIHZvaWQgYW5pbWF0aW9uU3RhcnRlZChjb25zdCBTdHJpbmcmIGtleSwgQ0ZUaW1l
SW50ZXJ2YWwgYmVnaW5UaW1lKSBvdmVycmlkZTsKICAgICB2b2lkIGFuaW1hdGlvbkVuZGVkKGNv
bnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKIApAQCAtMTc1LDkgKzE3NSw5IEBAIHB1YmxpYzoK
IAogICAgIFdlYkNvcmU6OlRpbGVkQmFja2luZyogdGlsZWRCYWNraW5nKCkgb3ZlcnJpZGUgeyBy
ZXR1cm4gbnVsbHB0cjsgfQogCi0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5
ZXI+IGNsb25lKFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0IG92
ZXJyaWRlOworICAgIFJlZjxXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI+IGNsb25lKFdlYkNvcmU6
OlBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgUGFz
c1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZUNvbXBhdGlibGVMYXllcihXZWJDb3JlOjpQ
bGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50
KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlQ29tcGF0
aWJsZUxheWVyKFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlLCBXZWJDb3JlOjpQ
bGF0Zm9ybUNBTGF5ZXJDbGllbnQqKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgZW51bWVy
YXRlUmVjdHNCZWluZ0RyYXduKENHQ29udGV4dFJlZiwgdm9pZCAoXmJsb2NrKShDR1JlY3QpKSBv
dmVycmlkZTsKIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9Q
bGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbS5oCShy
ZXZpc2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFj
L1BsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsy
Myw3IEBACiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJ
QklMSVRZIE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgUGxhdGZvcm1DQUxheWVyUmVt
b3RlQ3VzdG9tX2gKLSNkZWZpbmUgUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tX2gKKyNwcmFn
bWEgb25jZQogCiAjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyUmVtb3RlLmgiCiAKQEAgLTM2LDcg
KzM1LDcgQEAgY2xhc3MgTGF5ZXJIb3N0aW5nQ29udGV4dDsKIGNsYXNzIFBsYXRmb3JtQ0FMYXll
clJlbW90ZUN1c3RvbSBmaW5hbCA6IHB1YmxpYyBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUgewogICAg
IGZyaWVuZCBjbGFzcyBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU7CiBwdWJsaWM6Ci0gICAgc3RhdGlj
IFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBjcmVhdGUoUGxhdGZvcm1MYXllciAq
LCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqLCBSZW1vdGVMYXllclRyZWVDb250ZXh0
Jik7CisgICAgc3RhdGljIFJlZjxQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU+IGNyZWF0ZShQbGF0Zm9y
bUxheWVyICosIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllckNsaWVudCosIFJlbW90ZUxheWVyVHJl
ZUNvbnRleHQmKTsKIAogICAgIHZpcnR1YWwgflBsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbSgp
OwogCkBAIC01MCw3ICs0OSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgUGxhdGZvcm1DQUxh
eWVyUmVtb3RlQ3VzdG9tKFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlLCBQbGF0
Zm9ybUxheWVyICosIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIsIFJlbW90
ZUxheWVyVHJlZUNvbnRleHQmKTsKIAotICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6UGxhdGZvcm1D
QUxheWVyPiBjbG9uZShXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKSBjb25z
dCBvdmVycmlkZTsKKyAgICBSZWY8V2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyPiBjbG9uZShXZWJD
b3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKSBjb25zdCBvdmVycmlkZTsKIAogICAg
IGJvb2wgaXNQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20oKSBjb25zdCBvdmVycmlkZSB7IHJl
dHVybiB0cnVlOyB9CiAKQEAgLTY1LDUgKzY0LDMgQEAgcHJpdmF0ZToKIH0gLy8gbmFtZXNwYWNl
IFdlYktpdAogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1BMQVRGT1JNX0NBTEFZRVIoV2ViS2l0
OjpQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20sIGlzUGxhdGZvcm1DQUxheWVyUmVtb3RlKCkp
Ci0KLSNlbmRpZiAvLyBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b21faApJbmRleDogU291cmNl
L1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0
b20ubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20ubW0JKHJldmlzaW9uIDIxNjQxNykKKysrIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3Rl
Q3VzdG9tLm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMiArNDYsMTIgQEAgbmFtZXNwYWNlIFdl
YktpdCB7CiAKIHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IHBsYXRmb3JtQ0FMYXllclBvaW50ZXIg
PSBAIldLUGxhdGZvcm1DQUxheWVyIjsKIAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXJSZW1v
dGU+IFBsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbTo6Y3JlYXRlKFBsYXRmb3JtTGF5ZXIgKnBs
YXRmb3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIsIFJlbW90ZUxheWVyVHJl
ZUNvbnRleHQmIGNvbnRleHQpCitSZWY8UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBQbGF0Zm9ybUNB
TGF5ZXJSZW1vdGVDdXN0b206OmNyZWF0ZShQbGF0Zm9ybUxheWVyICpwbGF0Zm9ybUxheWVyLCBQ
bGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyLCBSZW1vdGVMYXllclRyZWVDb250ZXh0JiBjb250
ZXh0KQogewogICAgIGF1dG8gbGF5ZXIgPSBhZG9wdFJlZigqbmV3IFBsYXRmb3JtQ0FMYXllclJl
bW90ZUN1c3RvbShQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6bGF5ZXJUeXBlRm9yUGxhdGZvcm1MYXll
cihwbGF0Zm9ybUxheWVyKSwgcGxhdGZvcm1MYXllciwgb3duZXIsIGNvbnRleHQpKTsKICAgICBj
b250ZXh0LmxheWVyV2FzQ3JlYXRlZChsYXllci5nZXQoKSwgbGF5ZXItPmxheWVyVHlwZSgpKTsK
IAotICAgIHJldHVybiBXVEZNb3ZlKGxheWVyKTsKKyAgICByZXR1cm4gbGF5ZXI7CiB9CiAKIFBs
YXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbTo6UGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tKExh
eWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3JtTGF5ZXIgKiBjdXN0b21MYXllciwgUGxhdGZvcm1D
QUxheWVyQ2xpZW50KiBvd25lciwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYgY29udGV4dCkKQEAg
LTEwMCw3ICsxMDAsNyBAQCB1aW50MzJfdCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b206Omhv
CiAgICAgcmV0dXJuIG1fbGF5ZXJIb3N0aW5nQ29udGV4dC0+Y29udGV4dElEKCk7CiB9CiAKLVBh
c3NSZWZQdHI8V2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVD
dXN0b206OmNsb25lKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0CitSZWY8V2Vi
Q29yZTo6UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b206OmNsb25l
KFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0CiB7CiAgICAgUmV0YWluUHRyPENB
TGF5ZXIgKj4gY2xvbmVkTGF5ZXI7CiAgICAgYm9vbCBjb3B5Q29udGVudHMgPSB0cnVlOwpAQCAt
MTMzLDcgKzEzMyw3IEBAIFBhc3NSZWZQdHI8V2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyPiBQbGEK
ICAgICB1cGRhdGVDbG9uZWRMYXllclByb3BlcnRpZXMoY2xvbmUuZ2V0KCksIGNvcHlDb250ZW50
cyk7CiAKICAgICBjbG9uZS0+c2V0Q2xvbmVkTGF5ZXIodGhpcyk7Ci0gICAgcmV0dXJuIFdURk1v
dmUoY2xvbmUpOworICAgIHJldHVybiBjbG9uZTsKIH0KIAogQ0ZUeXBlUmVmIFBsYXRmb3JtQ0FM
YXllclJlbW90ZUN1c3RvbTo6Y29udGVudHMoKSBjb25zdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309371</attachid>
            <date>2017-05-08 10:07:54 -0700</date>
            <delta_ts>2017-05-08 10:42:23 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171809-20170508100753.patch</filename>
            <type>text/plain</type>
            <size>48903</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDE3LTA1LTA4ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVkdWNlIFBh
c3NSZWZQdHIgdXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzE4MDkKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OmNyZWF0ZUNvbXBhdGlibGVMYXllck9yVGFrZUZy
b21Qb29sKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIu
aDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlQ292ZXJhZ2VNYXAuY3BwOgor
ICAgICAgICAoV2ViQ29yZTo6VGlsZUNvdmVyYWdlTWFwOjpUaWxlQ292ZXJhZ2VNYXApOgorICAg
ICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVHcmlkLmNwcDoKKyAgICAgICAgKFdlYkNv
cmU6OlRpbGVHcmlkOjpUaWxlR3JpZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
Y29jb2EvUGxhdGZvcm1DQUxheWVyQ29jb2EuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGlj
cy9jYS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5tbToKKyAgICAgICAgKFBsYXRmb3JtQ0FM
YXllckNvY29hOjpjcmVhdGUpOgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyQ29jb2E6OmNsb25l
KToKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXllckNvY29hOjphbmltYXRpb25Gb3JLZXkpOgorICAg
ICAgICAoUGxhdGZvcm1DQUxheWVyQ29jb2E6OmNyZWF0ZUNvbXBhdGlibGVMYXllcik6CisKIDIw
MTctMDUtMDcgIEJlbiBLZWxseSAgPGJlbkB3YW5kZXJ2aWV3LmNvbT4KIAogICAgICAgICBTZXQg
dGhlIFJlc3BvbnNlLmJsb2IoKSB0eXBlIGJhc2VkIG9uIHRoZSBjb250ZW50LXR5cGUgaGVhZGVy
IHZhbHVlLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhp
Y3NMYXllckNBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCShyZXZpc2lvbiAyMTY0MTcpCisrKyBTb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNTYsNyArMzU2LDcgQEAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IEdy
YXBoaWNzTGF5ZQogICAgIGlmIChyZXN1bHQtPmNhbkhhdmVCYWNraW5nU3RvcmUoKSkKICAgICAg
ICAgcmVzdWx0LT5zZXRXYW50c0RlZXBDb2xvckJhY2tpbmdTdG9yZShzY3JlZW5TdXBwb3J0c0V4
dGVuZGVkQ29sb3IoKSk7CiAgICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gV1RG
TW92ZShyZXN1bHQpOwogI2VsaWYgUExBVEZPUk0oV0lOKQogICAgIHJldHVybiBQbGF0Zm9ybUNB
TGF5ZXJXaW46OmNyZWF0ZShsYXllclR5cGUsIG93bmVyKTsKICNlbmRpZgpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5
ZXIuY3BwCShyZXZpc2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsMTkgKzE2
NywxNiBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6ZHJhd1RleHRBdFBvaW50KENHCiAgICAgQ1RM
aW5lRHJhdyhsaW5lLmdldCgpLCBjb250ZXh0KTsKIH0KIAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNB
TGF5ZXI+IFBsYXRmb3JtQ0FMYXllcjo6Y3JlYXRlQ29tcGF0aWJsZUxheWVyT3JUYWtlRnJvbVBv
b2woUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGUgbGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJD
bGllbnQqIGNsaWVudCwgSW50U2l6ZSBzaXplKQorUmVmPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZv
cm1DQUxheWVyOjpjcmVhdGVDb21wYXRpYmxlTGF5ZXJPclRha2VGcm9tUG9vbChQbGF0Zm9ybUNB
TGF5ZXI6OkxheWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogY2xpZW50
LCBJbnRTaXplIHNpemUpCiB7Ci0gICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gbGF5ZXI7Ci0K
LSAgICBpZiAoKGxheWVyID0gbGF5ZXJQb29sKCkudGFrZUxheWVyV2l0aFNpemUoc2l6ZSkpKSB7
Ci0gICAgICAgIGxheWVyLT5zZXRPd25lcihjbGllbnQpOwotICAgICAgICByZXR1cm4gV1RGTW92
ZShsYXllcik7CisgICAgaWYgKGF1dG8gbGF5ZXJGcm9tUG9vbCA9IGxheWVyUG9vbCgpLnRha2VM
YXllcldpdGhTaXplKHNpemUpKSB7CisgICAgICAgIGxheWVyRnJvbVBvb2wtPnNldE93bmVyKGNs
aWVudCk7CisgICAgICAgIHJldHVybiBsYXllckZyb21Qb29sLnJlbGVhc2VOb25OdWxsKCk7CiAg
ICAgfQogCi0gICAgbGF5ZXIgPSBjcmVhdGVDb21wYXRpYmxlTGF5ZXIobGF5ZXJUeXBlLCBjbGll
bnQpOworICAgIGF1dG8gbGF5ZXIgPSBjcmVhdGVDb21wYXRpYmxlTGF5ZXIobGF5ZXJUeXBlLCBj
bGllbnQpOwogICAgIGxheWVyLT5zZXRCb3VuZHMoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc2l6
ZSkpOwotICAgIAotICAgIHJldHVybiBXVEZNb3ZlKGxheWVyKTsKKyAgICByZXR1cm4gbGF5ZXI7
CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUxheWVyOjptb3ZlVG9MYXllclBvb2woKQpJbmRleDogU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxh
eWVyLmgJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL1BsYXRmb3JtQ0FMYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBA
CiAjaW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUgPFF1YXJ0ekNvcmUvQ0FCYXNl
Lmg+CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5Q
dHIuaD4KICNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CkBAIC04Miw3ICs4MSw3IEBAIHB1Ymxp
YzoKICAgICB9OwogICAgIGVudW0gRmlsdGVyVHlwZSB7IExpbmVhciwgTmVhcmVzdCwgVHJpbGlu
ZWFyIH07CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBjbG9uZShQ
bGF0Zm9ybUNBTGF5ZXJDbGllbnQqKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBSZWY8UGxhdGZv
cm1DQUxheWVyPiBjbG9uZShQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKSBjb25zdCA9IDA7CiAKICAg
ICB2aXJ0dWFsIH5QbGF0Zm9ybUNBTGF5ZXIoKTsKIApAQCAtMTMyLDcgKzEzMSw3IEBAIHB1Ymxp
YzoKIAogICAgIHZpcnR1YWwgdm9pZCBhZGRBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBr
ZXksIFBsYXRmb3JtQ0FBbmltYXRpb24mKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFu
aW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkgPSAwOwotICAgIHZpcnR1YWwgUGFzc1Jl
ZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBhbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBr
ZXkpID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBhbmltYXRp
b25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRN
YXNrKFBsYXRmb3JtQ0FMYXllciopID0gMDsKIApAQCAtMjYwLDggKzI1OSw4IEBAIHB1YmxpYzoK
ICAgICB2b2lkIHNldEFuY2hvclBvaW50T25NYWluVGhyZWFkKEZsb2F0UG9pbnQzRCk7CiAjZW5k
aWYKIAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZUNvbXBh
dGlibGVMYXllcihMYXllclR5cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCopIGNvbnN0ID0gMDsK
LSAgICBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlQ29tcGF0aWJsZUxheWVyT3JU
YWtlRnJvbVBvb2woTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBj
bGllbnQsIEludFNpemUpOworICAgIHZpcnR1YWwgUmVmPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRl
Q29tcGF0aWJsZUxheWVyKExheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KikgY29uc3Qg
PSAwOworICAgIFJlZjxQbGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZUNvbXBhdGlibGVMYXllck9yVGFr
ZUZyb21Qb29sKExheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiwgSW50U2l6ZSk7CiAK
ICNpZiBQTEFURk9STShDT0NPQSkKICAgICB2aXJ0dWFsIHZvaWQgZW51bWVyYXRlUmVjdHNCZWlu
Z0RyYXduKENHQ29udGV4dFJlZiwgdm9pZCAoXmJsb2NrKShDR1JlY3QpKSA9IDA7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlQ292ZXJhZ2VNYXAuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVDb3Zl
cmFnZU1hcC5jcHAJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL1RpbGVDb3ZlcmFnZU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEw
ICszNSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBUaWxlQ292ZXJhZ2VNYXA6OlRpbGVDb3Zl
cmFnZU1hcChjb25zdCBUaWxlQ29udHJvbGxlciYgY29udHJvbGxlcikKICAgICA6IG1fY29udHJv
bGxlcihjb250cm9sbGVyKQogICAgICwgbV91cGRhdGVUaW1lcigqdGhpcywgJlRpbGVDb3ZlcmFn
ZU1hcDo6dXBkYXRlVGltZXJGaXJlZCkKLSAgICAsIG1fbGF5ZXIoKmNvbnRyb2xsZXIucm9vdExh
eWVyKCkuY3JlYXRlQ29tcGF0aWJsZUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlU2lt
cGxlTGF5ZXIsIHRoaXMpKQotICAgICwgbV92aXNpYmxlVmlld3BvcnRJbmRpY2F0b3JMYXllcigq
Y29udHJvbGxlci5yb290TGF5ZXIoKS5jcmVhdGVDb21wYXRpYmxlTGF5ZXIoUGxhdGZvcm1DQUxh
eWVyOjpMYXllclR5cGVMYXllciwgbnVsbHB0cikpCi0gICAgLCBtX2xheW91dFZpZXdwb3J0SW5k
aWNhdG9yTGF5ZXIoKmNvbnRyb2xsZXIucm9vdExheWVyKCkuY3JlYXRlQ29tcGF0aWJsZUxheWVy
KFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5ZXIsIG51bGxwdHIpKQotICAgICwgbV9jb3Zl
cmFnZVJlY3RJbmRpY2F0b3JMYXllcigqY29udHJvbGxlci5yb290TGF5ZXIoKS5jcmVhdGVDb21w
YXRpYmxlTGF5ZXIoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVMYXllciwgbnVsbHB0cikpCisg
ICAgLCBtX2xheWVyKGNvbnRyb2xsZXIucm9vdExheWVyKCkuY3JlYXRlQ29tcGF0aWJsZUxheWVy
KFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlU2ltcGxlTGF5ZXIsIHRoaXMpKQorICAgICwgbV92
aXNpYmxlVmlld3BvcnRJbmRpY2F0b3JMYXllcihjb250cm9sbGVyLnJvb3RMYXllcigpLmNyZWF0
ZUNvbXBhdGlibGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxheWVyLCBudWxscHRy
KSkKKyAgICAsIG1fbGF5b3V0Vmlld3BvcnRJbmRpY2F0b3JMYXllcihjb250cm9sbGVyLnJvb3RM
YXllcigpLmNyZWF0ZUNvbXBhdGlibGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxh
eWVyLCBudWxscHRyKSkKKyAgICAsIG1fY292ZXJhZ2VSZWN0SW5kaWNhdG9yTGF5ZXIoY29udHJv
bGxlci5yb290TGF5ZXIoKS5jcmVhdGVDb21wYXRpYmxlTGF5ZXIoUGxhdGZvcm1DQUxheWVyOjpM
YXllclR5cGVMYXllciwgbnVsbHB0cikpCiAgICAgLCBtX3Bvc2l0aW9uKEZsb2F0UG9pbnQoMCwg
Y29udHJvbGxlci50b3BDb250ZW50SW5zZXQoKSkpCiB7CiAgICAgbV9sYXllci5nZXQoKS5zZXRP
cGFjaXR5KDAuNzUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
VGlsZUdyaWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL1RpbGVHcmlkLmNwcAkocmV2aXNpb24gMjE2NDE3KQorKysgU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUdyaWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3
ICs2NSw3IEBAIHN0YXRpYyBTdHJpbmcgdmFsaWRhdGlvblBvbGljeUFzU3RyaW5nKFQKIAogVGls
ZUdyaWQ6OlRpbGVHcmlkKFRpbGVDb250cm9sbGVyJiBjb250cm9sbGVyKQogICAgIDogbV9jb250
cm9sbGVyKGNvbnRyb2xsZXIpCi0gICAgLCBtX2NvbnRhaW5lckxheWVyKCpjb250cm9sbGVyLnJv
b3RMYXllcigpLmNyZWF0ZUNvbXBhdGlibGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlw
ZUxheWVyLCBudWxscHRyKSkKKyAgICAsIG1fY29udGFpbmVyTGF5ZXIoY29udHJvbGxlci5yb290
TGF5ZXIoKS5jcmVhdGVDb21wYXRpYmxlTGF5ZXIoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVM
YXllciwgbnVsbHB0cikpCiAgICAgLCBtX2NvaG9ydFJlbW92YWxUaW1lcigqdGhpcywgJlRpbGVH
cmlkOjpjb2hvcnRSZW1vdmFsVGltZXJGaXJlZCkKICAgICAsIG1fdGlsZVNpemUoa0RlZmF1bHRU
aWxlU2l6ZSwga0RlZmF1bHRUaWxlU2l6ZSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxh
eWVyQ29jb2EuaAkocmV2aXNpb24gMjE2NDE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVyQ29jb2EuaAkod29ya2luZyBjb3B5KQpA
QCAtMzMsMTEgKzMzLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUGxhdGZvcm1D
QUxheWVyQ29jb2EgZmluYWwgOiBwdWJsaWMgUGxhdGZvcm1DQUxheWVyIHsKIHB1YmxpYzoKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZShMYXllclR5cGUsIFBs
YXRmb3JtQ0FMYXllckNsaWVudCopOworICAgIHN0YXRpYyBSZWY8UGxhdGZvcm1DQUxheWVyPiBj
cmVhdGUoTGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKTsKICAgICAKICAgICAvLyBU
aGlzIGZ1bmN0aW9uIHBhc3NlcyB0aGUgbGF5ZXIgYXMgYSB2b2lkKiByYXRoZXIgdGhhbiBhIFBs
YXRmb3JtTGF5ZXIgYmVjYXVzZSBQbGF0Zm9ybUxheWVyCiAgICAgLy8gaXMgZGVmaW5lZCBkaWZm
ZXJlbnRseSBmb3IgT2JqIEMgYW5kIEMrKy4gVGhpcyBhbGxvd3MgY2FsbGVycyBmcm9tIGJvdGgg
bGFuZ3VhZ2VzLgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRl
KHZvaWQqIHBsYXRmb3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCopOworICAgIHN0YXRp
YyBSZWY8UGxhdGZvcm1DQUxheWVyPiBjcmVhdGUodm9pZCogcGxhdGZvcm1MYXllciwgUGxhdGZv
cm1DQUxheWVyQ2xpZW50Kik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgTGF5ZXJUeXBl
IGxheWVyVHlwZUZvclBsYXRmb3JtTGF5ZXIoUGxhdGZvcm1MYXllciopOwogCkBAIC02Miw3ICs2
Miw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWRkQW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmlu
ZyYga2V5LCBQbGF0Zm9ybUNBQW5pbWF0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCByZW1vdmVB
bmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOwotICAgIFBhc3NSZWZQ
dHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gYW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5
KSBvdmVycmlkZTsKKyAgICBSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gYW5pbWF0aW9uRm9y
S2V5KGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKICAgICB2b2lkIGFuaW1hdGlvblN0YXJ0
ZWQoY29uc3QgU3RyaW5nJiBrZXksIENGVGltZUludGVydmFsIGJlZ2luVGltZSkgb3ZlcnJpZGU7
CiAgICAgdm9pZCBhbmltYXRpb25FbmRlZChjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7CiAK
QEAgLTE2OSw5ICsxNjksOSBAQCBwdWJsaWM6CiAKICAgICBUaWxlZEJhY2tpbmcqIHRpbGVkQmFj
a2luZygpIG92ZXJyaWRlOwogCi0gICAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IGNsb25l
KFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZjxQ
bGF0Zm9ybUNBTGF5ZXI+IGNsb25lKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0
IG92ZXJyaWRlOwogCi0gICAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZUNvbXBh
dGlibGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xp
ZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlQ29t
cGF0aWJsZUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJD
bGllbnQqKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgZW51bWVyYXRlUmVjdHNCZWluZ0Ry
YXduKENHQ29udGV4dFJlZiwgdm9pZCAoXmJsb2NrKShDR1JlY3QpKSBvdmVycmlkZTsKIApJbmRl
eDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxh
eWVyQ29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVyQ29jb2EubW0JKHJldmlzaW9uIDIxNjQxNykKKysr
IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXll
ckNvY29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02OSwxNCArNjksMTQgQEAgU09GVF9MSU5LX0NM
QVNTX09QVElPTkFMKEFWRm91bmRhdGlvbiwgQQogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsK
IAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllckNvY29hOjpjcmVh
dGUoTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikKK1Jl
ZjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllckNvY29hOjpjcmVhdGUoTGF5ZXJUeXBl
IGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikKIHsKLSAgICByZXR1cm4g
YWRvcHRSZWYobmV3IFBsYXRmb3JtQ0FMYXllckNvY29hKGxheWVyVHlwZSwgb3duZXIpKTsKKyAg
ICByZXR1cm4gYWRvcHRSZWYoKm5ldyBQbGF0Zm9ybUNBTGF5ZXJDb2NvYShsYXllclR5cGUsIG93
bmVyKSk7CiB9CiAKLVBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJD
b2NvYTo6Y3JlYXRlKHZvaWQqIHBsYXRmb3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCog
b3duZXIpCitSZWY8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y3JlYXRl
KHZvaWQqIHBsYXRmb3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpCiB7Ci0g
ICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQbGF0Zm9ybUNBTGF5ZXJDb2NvYShzdGF0aWNfY2FzdDxQ
bGF0Zm9ybUxheWVyKj4ocGxhdGZvcm1MYXllciksIG93bmVyKSk7CisgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgUGxhdGZvcm1DQUxheWVyQ29jb2Eoc3RhdGljX2Nhc3Q8UGxhdGZvcm1MYXllcio+
KHBsYXRmb3JtTGF5ZXIpLCBvd25lcikpOwogfQogCiBzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBw
bGF0Zm9ybUNBTGF5ZXJQb2ludGVyID0gQCJXS1BsYXRmb3JtQ0FMYXllciI7CkBAIC0zMTEsNyAr
MzExLDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y29tbW9uSW5pdCgpCiAgICAgRU5E
X0JMT0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi1QYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4g
UGxhdGZvcm1DQUxheWVyQ29jb2E6OmNsb25lKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIp
IGNvbnN0CitSZWY8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y2xvbmUo
UGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikgY29uc3QKIHsKICAgICBMYXllclR5cGUgdHlw
ZTsKICAgICBzd2l0Y2ggKGxheWVyVHlwZSgpKSB7CkBAIC0zMzIsNyArMzMyLDcgQEAgUGFzc1Jl
ZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYQogICAgICAgICB0eXBlID0gTGF5ZXJU
eXBlTGF5ZXI7CiAgICAgICAgIGJyZWFrOwogICAgIH07Ci0gICAgUmVmUHRyPFBsYXRmb3JtQ0FM
YXllcj4gbmV3TGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y3JlYXRlKHR5cGUsIG93bmVy
KTsKKyAgICBhdXRvIG5ld0xheWVyID0gUGxhdGZvcm1DQUxheWVyQ29jb2E6OmNyZWF0ZSh0eXBl
LCBvd25lcik7CiAgICAgCiAgICAgbmV3TGF5ZXItPnNldFBvc2l0aW9uKHBvc2l0aW9uKCkpOwog
ICAgIG5ld0xheWVyLT5zZXRCb3VuZHMoYm91bmRzKCkpOwpAQCAtMzUyLDcgKzM1Miw3IEBAIFBh
c3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGEKICAgICBpZiAodHlwZSA9PSBM
YXllclR5cGVBVlBsYXllckxheWVyKSB7CiAgICAgICAgIEFTU0VSVChbbmV3TGF5ZXItPnBsYXRm
b3JtTGF5ZXIoKSBpc0tpbmRPZkNsYXNzOmdldEFWUGxheWVyTGF5ZXJDbGFzcygpXSk7CiAKLSAg
ICAgICAgQVZQbGF5ZXJMYXllciAqZGVzdGluYXRpb25QbGF5ZXJMYXllciA9IHN0YXRpY19jYXN0
PFBsYXRmb3JtQ0FMYXllckNvY29hICo+KG5ld0xheWVyLmdldCgpKS0+YXZQbGF5ZXJMYXllcigp
OworICAgICAgICBBVlBsYXllckxheWVyICpkZXN0aW5hdGlvblBsYXllckxheWVyID0gc3RhdGlj
X2Nhc3Q8UGxhdGZvcm1DQUxheWVyQ29jb2EmPihuZXdMYXllci5nZXQoKSkuYXZQbGF5ZXJMYXll
cigpOwogICAgICAgICBBVlBsYXllckxheWVyICpzb3VyY2VQbGF5ZXJMYXllciA9IGF2UGxheWVy
TGF5ZXIoKTsKICAgICAgICAgQVNTRVJUKHNvdXJjZVBsYXllckxheWVyKTsKIApAQCAtNTA4LDEx
ICs1MDgsMTEgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6cmVtb3ZlQW5pbWF0aQogICAg
IEVORF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5p
bWF0aW9uPiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6YW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmlu
ZyYga2V5KQorUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IFBsYXRmb3JtQ0FMYXllckNvY29h
OjphbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpCiB7CiAgICAgQ0FQcm9wZXJ0eUFu
aW1hdGlvbiogcHJvcGVydHlBbmltYXRpb24gPSBzdGF0aWNfY2FzdDxDQVByb3BlcnR5QW5pbWF0
aW9uKj4oW21fbGF5ZXIgYW5pbWF0aW9uRm9yS2V5OmtleV0pOwogICAgIGlmICghcHJvcGVydHlB
bmltYXRpb24pCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAg
ICByZXR1cm4gUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpjcmVhdGUocHJvcGVydHlBbmltYXRp
b24pOwogfQogCkBAIC0xMTkwLDcgKzExOTAsNyBAQCBDR1JlY3QgUGxhdGZvcm1DQUxheWVyOjpm
cmFtZUZvckxheWVyKGNvCiAgICAgcmV0dXJuIFt0aWxlTGF5ZXIgZnJhbWVdOwogfQogCi1QYXNz
UmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1DQUxheWVyQ29jb2E6OmNyZWF0ZUNvbXBh
dGlibGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3Jt
Q0FMYXllckNsaWVudCogY2xpZW50KSBjb25zdAorUmVmPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZv
cm1DQUxheWVyQ29jb2E6OmNyZWF0ZUNvbXBhdGlibGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6Okxh
eWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogY2xpZW50KSBjb25zdAog
ewogICAgIHJldHVybiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y3JlYXRlKGxheWVyVHlwZSwgY2xp
ZW50KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9Q
bGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCShyZXZpc2lvbiAyMTY0
MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1D
QUxheWVyV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTQgKzQ3LDE0IEBACiAKIHVzaW5n
IG5hbWVzcGFjZSBXZWJDb3JlOwogCi1QYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZv
cm1DQUxheWVyV2luOjpjcmVhdGUoTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVy
Q2xpZW50KiBvd25lcikKK1JlZjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllcldpbjo6
Y3JlYXRlKExheWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIp
CiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQbGF0Zm9ybUNBTGF5ZXJXaW4obGF5ZXJUeXBl
LCBudWxscHRyLCBvd25lcikpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBsYXRmb3JtQ0FM
YXllcldpbihsYXllclR5cGUsIG51bGxwdHIsIG93bmVyKSk7CiB9CiAKLVBhc3NSZWZQdHI8UGxh
dGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJXaW46OmNyZWF0ZShQbGF0Zm9ybUxheWVyKiBw
bGF0Zm9ybUxheWVyLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKQorUmVmPFBsYXRmb3Jt
Q0FMYXllcj4gUGxhdGZvcm1DQUxheWVyV2luOjpjcmVhdGUoUGxhdGZvcm1MYXllciogcGxhdGZv
cm1MYXllciwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikKIHsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFBsYXRmb3JtQ0FMYXllcldpbihMYXllclR5cGVDdXN0b20sIHBsYXRmb3JtTGF5
ZXIsIG93bmVyKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGxhdGZvcm1DQUxheWVyV2lu
KExheWVyVHlwZUN1c3RvbSwgcGxhdGZvcm1MYXllciwgb3duZXIpKTsKIH0KIAogc3RhdGljIENG
U3RyaW5nUmVmIHRvQ0FDRkxheWVyVHlwZShQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSB0eXBl
KQpAQCAtMTgxLDExICsxODEsMTEgQEAgUGxhdGZvcm1DQUxheWVyV2luOjp+UGxhdGZvcm1DQUxh
eWVyV2luKAogICAgIGRlbGV0ZSBsYXllckludGVybjsKIH0KIAotUGFzc1JlZlB0cjxQbGF0Zm9y
bUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllcldpbjo6Y2xvbmUoUGxhdGZvcm1DQUxheWVyQ2xpZW50
KiBvd25lcikgY29uc3QKK1JlZjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllcldpbjo6
Y2xvbmUoUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikgY29uc3QKIHsKICAgICBQbGF0Zm9y
bUNBTGF5ZXI6OkxheWVyVHlwZSB0eXBlID0gKGxheWVyVHlwZSgpID09IFBsYXRmb3JtQ0FMYXll
cjo6TGF5ZXJUeXBlVHJhbnNmb3JtTGF5ZXIpID8KICAgICAgICAgUGxhdGZvcm1DQUxheWVyOjpM
YXllclR5cGVUcmFuc2Zvcm1MYXllciA6IFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5ZXI7
Ci0gICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gbmV3TGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXJX
aW46OmNyZWF0ZSh0eXBlLCBvd25lcik7CisgICAgYXV0byBuZXdMYXllciA9IFBsYXRmb3JtQ0FM
YXllcldpbjo6Y3JlYXRlKHR5cGUsIG93bmVyKTsKIAogICAgIG5ld0xheWVyLT5zZXRQb3NpdGlv
bihwb3NpdGlvbigpKTsKICAgICBuZXdMYXllci0+c2V0Qm91bmRzKGJvdW5kcygpKTsKQEAgLTM1
Myw3ICszNTMsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6cmVtb3ZlQW5pbWF0aW9uCiAg
ICAgc2V0TmVlZHNDb21taXQoKTsKIH0KIAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9u
PiBQbGF0Zm9ybUNBTGF5ZXJXaW46OmFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkK
K1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBQbGF0Zm9ybUNBTGF5ZXJXaW46OmFuaW1hdGlv
bkZvcktleShjb25zdCBTdHJpbmcmIGtleSkKIHsKICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRy
PFBsYXRmb3JtQ0FBbmltYXRpb24+ID46Oml0ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25zLmZpbmQo
a2V5KTsKICAgICBpZiAoaXQgPT0gbV9hbmltYXRpb25zLmVuZCgpKQpAQCAtOTM5LDcgKzkzOSw3
IEBAIFN0cmluZyBQbGF0Zm9ybUNBTGF5ZXJXaW46OmxheWVyVHJlZUFzU3QKICAgICByZXR1cm4g
YnVpbGRlci50b1N0cmluZygpOwogfQogCi1QYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxh
dGZvcm1DQUxheWVyV2luOjpjcmVhdGVDb21wYXRpYmxlTGF5ZXIoUGxhdGZvcm1DQUxheWVyOjpM
YXllclR5cGUgbGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIGNsaWVudCkgY29uc3QK
K1JlZjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllcldpbjo6Y3JlYXRlQ29tcGF0aWJs
ZUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxh
eWVyQ2xpZW50KiBjbGllbnQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFBsYXRmb3JtQ0FMYXllcldp
bjo6Y3JlYXRlKGxheWVyVHlwZSwgY2xpZW50KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVy
V2luLmgJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCAr
MzIsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFBsYXRmb3JtQ0FMYXllcldpbiBm
aW5hbCA6IHB1YmxpYyBQbGF0Zm9ybUNBTGF5ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNz
UmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlKExheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVy
Q2xpZW50Kik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBjcmVhdGUo
UGxhdGZvcm1MYXllciosIFBsYXRmb3JtQ0FMYXllckNsaWVudCopOworICAgIHN0YXRpYyBSZWY8
UGxhdGZvcm1DQUxheWVyPiBjcmVhdGUoTGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQq
KTsKKyAgICBzdGF0aWMgUmVmPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlKFBsYXRmb3JtTGF5ZXIq
LCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKTsKICAgICAKICAgICB+UGxhdGZvcm1DQUxheWVyV2lu
KCk7CiAKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGRBbmltYXRpb25G
b3JLZXkoY29uc3QgU3RyaW5nJiBrZXksIFBsYXRmb3JtQ0FBbmltYXRpb24mKSBvdmVycmlkZTsK
ICAgICB2b2lkIHJlbW92ZUFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJp
ZGU7Ci0gICAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBhbmltYXRpb25Gb3JLZXko
Y29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOworICAgIFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0
aW9uPiBhbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOwogICAgIHZv
aWQgYW5pbWF0aW9uU3RhcnRlZChjb25zdCBTdHJpbmcmIGtleSwgQ0ZUaW1lSW50ZXJ2YWwgYmVn
aW5UaW1lKSBvdmVycmlkZTsKICAgICB2b2lkIGFuaW1hdGlvbkVuZGVkKGNvbnN0IFN0cmluZyYg
a2V5KSBvdmVycmlkZTsKIApAQCAtMTY1LDkgKzE2NSw5IEBAIHB1YmxpYzoKIAogICAgIFN0cmlu
ZyBsYXllclRyZWVBc1N0cmluZygpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgUGFzc1JlZlB0cjxQ
bGF0Zm9ybUNBTGF5ZXI+IGNsb25lKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0
IG92ZXJyaWRlOworICAgIFJlZjxQbGF0Zm9ybUNBTGF5ZXI+IGNsb25lKFBsYXRmb3JtQ0FMYXll
ckNsaWVudCogb3duZXIpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgUGFzc1JlZlB0cjxQbGF0Zm9y
bUNBTGF5ZXI+IGNyZWF0ZUNvbXBhdGlibGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlw
ZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPFBsYXRm
b3JtQ0FMYXllcj4gY3JlYXRlQ29tcGF0aWJsZUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJU
eXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToK
ICAgICBQbGF0Zm9ybUNBTGF5ZXJXaW4oTGF5ZXJUeXBlLCBQbGF0Zm9ybUxheWVyKiwgUGxhdGZv
cm1DQUxheWVyQ2xpZW50KiBvd25lcik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTY0MjYp
CisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1
NCBAQAorMjAxNy0wNS0wOCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQu
b3JnPgorCisgICAgICAgIFJlZHVjZSBQYXNzUmVmUHRyIHVzZQorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxODA5CisKKyAgICAgICAgUmV2aWV3ZWQg
YnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRy
b2xsZXJQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6
c2V0SW5pdGlhbGl6YXRpb25SZXBseSk6CisgICAgICAgICogUGx1Z2luUHJvY2Vzcy9QbHVnaW5D
b250cm9sbGVyUHJveHkuaDoKKyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25u
ZWN0aW9uLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmRlc3Ry
b3lQbHVnaW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Y3JlYXRl
UGx1Z2luKToKKyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uLmg6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3Bw
OgorICAgICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OnJ1bk9wZW5QYW5lbCk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnJlZ2lzdGVyVW5kb1N0ZXApOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5jcHA6Cisg
ICAgICAgIChXZWJLaXQ6OlZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyOjpnZXRPckNyZWF0ZSk6
CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVy
Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcDoKKyAgICAgICAg
KFdlYktpdDo6V2ViRnJhbWU6OmhpdFRlc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZTo6
Y3JlYXRlU2VsZWN0aW9uU25hcHNob3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJGcmFtZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJPcGVuUGFuZWxSZXN1
bHRMaXN0ZW5lci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYk9wZW5QYW5lbFJlc3VsdExpc3Rl
bmVyOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5l
cjo6V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dW5hcHBseUVk
aXRDb21tYW5kKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVhcHBseUVkaXRDb21tYW5k
KToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuY3BwOgor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlR3JvdXBQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuaDoKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViVW5kb1N0ZXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJVbmRvU3Rl
cDo6Y3JlYXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVW5kb1N0ZXAuaDoK
KyAgICAgICAgKFdlYktpdDo6V2ViVW5kb1N0ZXA6OnN0ZXApOgorICAgICAgICAoV2ViS2l0OjpX
ZWJVbmRvU3RlcDo6V2ViVW5kb1N0ZXApOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGxhdGZvcm1D
QUxheWVyUmVtb3RlOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpQbGF0Zm9ybUNBTGF5ZXJS
ZW1vdGU6OmNsb25lKToKKyAgICAgICAgKFdlYktpdDo6UGxhdGZvcm1DQUxheWVyUmVtb3RlOjph
bmltYXRpb25Gb3JLZXkpOgorICAgICAgICAoV2ViS2l0OjpQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6
OmNyZWF0ZUNvbXBhdGlibGVMYXllcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
bWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbS5oOgorICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tLm1tOgorICAgICAgICAoV2Vi
S2l0OjpQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b206OmNyZWF0ZSk6CisgICAgICAgIChXZWJL
aXQ6OlBsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbTo6Y2xvbmUpOgorCiAyMDE3LTA1LTA4ICBD
aHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSAnc3R5bGUnIGZy
b20gRWxlbWVudCB0byBIVE1MRWxlbWVudCAvIFNWR0VsZW1lbnQgYW5kIG1ha2UgaXQgc2V0dGFi
bGUKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclBy
b3h5LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdp
bkNvbnRyb2xsZXJQcm94eS5jcHAJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJLaXQy
L1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmNwcAkod29ya2luZyBjb3B5KQpA
QCAtOTEsMTAgKzkxLDEwIEBAIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6flBsdWdpbkNvbnRyb2xs
ZXIKICAgICAgICAgcmVsZWFzZU5QT2JqZWN0KG1fcGx1Z2luRWxlbWVudE5QT2JqZWN0KTsKIH0K
IAotdm9pZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OnNldEluaXRpYWxpemF0aW9uUmVwbHkoUGFz
c1JlZlB0cjxNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkNyZWF0ZVBsdWdpbjo6RGVs
YXllZFJlcGx5PiByZXBseSkKK3ZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpzZXRJbml0aWFs
aXphdGlvblJlcGx5KFJlZjxNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkNyZWF0ZVBs
dWdpbjo6RGVsYXllZFJlcGx5PiYmIHJlcGx5KQogewogICAgIEFTU0VSVCghbV9pbml0aWFsaXph
dGlvblJlcGx5KTsKLSAgICBtX2luaXRpYWxpemF0aW9uUmVwbHkgPSByZXBseTsKKyAgICBtX2lu
aXRpYWxpemF0aW9uUmVwbHkgPSBXVEZNb3ZlKHJlcGx5KTsKIH0KIAogUmVmUHRyPE1lc3NhZ2Vz
OjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Q3JlYXRlUGx1Z2luOjpEZWxheWVkUmVwbHk+IFBsdWdp
bkNvbnRyb2xsZXJQcm94eTo6dGFrZUluaXRpYWxpemF0aW9uUmVwbHkoKQpJbmRleDogU291cmNl
L1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5o
CShyZXZpc2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdp
bkNvbnRyb2xsZXJQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHB1Ymxp
YzoKIAogICAgIGJvb2wgaXNJbml0aWFsaXppbmcoKSBjb25zdCB7IHJldHVybiBtX2lzSW5pdGlh
bGl6aW5nOyB9CiAgICAgCi0gICAgdm9pZCBzZXRJbml0aWFsaXphdGlvblJlcGx5KFBhc3NSZWZQ
dHI8TWVzc2FnZXM6OldlYlByb2Nlc3NDb25uZWN0aW9uOjpDcmVhdGVQbHVnaW46OkRlbGF5ZWRS
ZXBseT4pOworICAgIHZvaWQgc2V0SW5pdGlhbGl6YXRpb25SZXBseShSZWY8TWVzc2FnZXM6Oldl
YlByb2Nlc3NDb25uZWN0aW9uOjpDcmVhdGVQbHVnaW46OkRlbGF5ZWRSZXBseT4mJik7CiAgICAg
UmVmUHRyPE1lc3NhZ2VzOjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Q3JlYXRlUGx1Z2luOjpEZWxh
eWVkUmVwbHk+IHRha2VJbml0aWFsaXphdGlvblJlcGx5KCk7CiAKIHByaXZhdGU6CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0
aW9uLmNwcAkocmV2aXNpb24gMjE2NDE3KQorKysgU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vz
cy9XZWJQcm9jZXNzQ29ubmVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw3ICsxNzYs
NyBAQCB2b2lkIFdlYlByb2Nlc3NDb25uZWN0aW9uOjpkaWRDbG9zZShJUEM6CiAgICAgICAgIGRl
c3Ryb3lQbHVnaW5Db250cm9sbGVyUHJveHkocGx1Z2luQ29udHJvbGxlcnNbaV0pOwogfQogCi12
b2lkIFdlYlByb2Nlc3NDb25uZWN0aW9uOjpkZXN0cm95UGx1Z2luKHVpbnQ2NF90IHBsdWdpbklu
c3RhbmNlSUQsIGJvb2wgYXN5bmNocm9ub3VzQ3JlYXRpb25JbmNvbXBsZXRlLCBQYXNzUmVmUHRy
PE1lc3NhZ2VzOjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6RGVzdHJveVBsdWdpbjo6RGVsYXllZFJl
cGx5PiByZXBseSkKK3ZvaWQgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmRlc3Ryb3lQbHVnaW4odWlu
dDY0X3QgcGx1Z2luSW5zdGFuY2VJRCwgYm9vbCBhc3luY2hyb25vdXNDcmVhdGlvbkluY29tcGxl
dGUsIFJlZjxNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkRlc3Ryb3lQbHVnaW46OkRl
bGF5ZWRSZXBseT4mJiByZXBseSkKIHsKICAgICAvLyBXZSByZXR1cm4gaW1tZWRpYXRlbHkgZnJv
bSB0aGlzIHN5bmNocm9ub3VzIElQQy4gV2Ugd2FudCB0byBtYWtlIHN1cmUgdGhlIHBsdWdpbiBk
ZXN0cnVjdGlvbiBpcyBqdXN0IGFib3V0IHRvIHN0YXJ0IHNvIGF1ZGlvIHBsYXliYWNrCiAgICAg
Ly8gd2lsbCBmaW5pc2ggc29vbiBhZnRlciByZXR1cm5pbmcuIEhvd2V2ZXIgd2UgZG9uJ3Qgd2Fu
dCB0byB3YWl0IGZvciBkZXN0cnVjdGlvbiB0byBjb21wbGV0ZSBmdWxseSBhcyB0aGF0IG1heSB0
YWtlIGEgd2hpbGUuCkBAIC0yMjksNyArMjI5LDcgQEAgdm9pZCBXZWJQcm9jZXNzQ29ubmVjdGlv
bjo6Y3JlYXRlUGx1Z2luSQogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246
OmNyZWF0ZVBsdWdpbihjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmIGNyZWF0aW9uUGFy
YW1ldGVycywgUGFzc1JlZlB0cjxNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkNyZWF0
ZVBsdWdpbjo6RGVsYXllZFJlcGx5PiByZXBseSkKK3ZvaWQgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246
OmNyZWF0ZVBsdWdpbihjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmIGNyZWF0aW9uUGFy
YW1ldGVycywgUmVmPE1lc3NhZ2VzOjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Q3JlYXRlUGx1Z2lu
OjpEZWxheWVkUmVwbHk+JiYgcmVwbHkpCiB7CiAgICAgLy8gRW5zdXJlIHdlIGRvbid0IGNsYW1w
IGFueSB0aW1lcnMgZHVyaW5nIGluaXRpYWxpemF0aW9uCiAgICAgQWN0aXZpdHlBc3NlcnRpb24g
YWN0aXZpdHlBc3NlcnRpb24oUGx1Z2luUHJvY2Vzczo6c2luZ2xldG9uKCkuY29ubmVjdGlvbkFj
dGl2aXR5KCkpOwpAQCAtMjQwLDcgKzI0MCw3IEBAIHZvaWQgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246
OmNyZWF0ZVBsdWdpbigKICAgICBpZiAocGx1Z2luQ29udHJvbGxlclByb3h5KSB7CiAgICAgICAg
IC8vIEl0IG1pZ2h0IHN0aWxsIGJlIGluIHRoZSBtaWRkbGUgb2YgaW5pdGlhbGl6YXRpb24gaW4g
d2hpY2ggY2FzZSB3ZSBoYXZlIHRvIGxldCB0aGF0IGluaXRpYWxpemF0aW9uIGNvbXBsZXRlIGFu
ZCByZXNwb25kIHRvIHRoaXMgbWVzc2FnZSBsYXRlci4KICAgICAgICAgaWYgKHBsdWdpbkNvbnRy
b2xsZXJQcm94eS0+aXNJbml0aWFsaXppbmcoKSkgewotICAgICAgICAgICAgcGx1Z2luQ29udHJv
bGxlclByb3h5LT5zZXRJbml0aWFsaXphdGlvblJlcGx5KHJlcGx5KTsKKyAgICAgICAgICAgIHBs
dWdpbkNvbnRyb2xsZXJQcm94eS0+c2V0SW5pdGlhbGl6YXRpb25SZXBseShXVEZNb3ZlKHJlcGx5
KSk7CiAgICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9XZWJQcm9jZXNzQ29ubmVjdGlvbi5o
CShyZXZpc2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1dlYlBy
b2Nlc3NDb25uZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRI
RSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFdlYlByb2Nlc3ND
b25uZWN0aW9uX2gKLSNkZWZpbmUgV2ViUHJvY2Vzc0Nvbm5lY3Rpb25faAorI3ByYWdtYSBvbmNl
CiAKICNpZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIApAQCAtNzAsOSArNjksOSBAQCBw
cml2YXRlOgogICAgIC8vIE1lc3NhZ2UgaGFuZGxlcnMuCiAgICAgdm9pZCBkaWRSZWNlaXZlV2Vi
UHJvY2Vzc0Nvbm5lY3Rpb25NZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYp
OwogICAgIHZvaWQgZGlkUmVjZWl2ZVN5bmNXZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2UoSVBD
OjpDb25uZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rl
cj4mKTsKLSAgICB2b2lkIGNyZWF0ZVBsdWdpbihjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRl
cnMmLCBQYXNzUmVmUHRyPE1lc3NhZ2VzOjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Q3JlYXRlUGx1
Z2luOjpEZWxheWVkUmVwbHk+KTsKKyAgICB2b2lkIGNyZWF0ZVBsdWdpbihjb25zdCBQbHVnaW5D
cmVhdGlvblBhcmFtZXRlcnMmLCBSZWY8TWVzc2FnZXM6OldlYlByb2Nlc3NDb25uZWN0aW9uOjpD
cmVhdGVQbHVnaW46OkRlbGF5ZWRSZXBseT4mJik7CiAgICAgdm9pZCBjcmVhdGVQbHVnaW5Bc3lu
Y2hyb25vdXNseShjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICB2b2lkIGRl
c3Ryb3lQbHVnaW4odWludDY0X3QgcGx1Z2luSW5zdGFuY2VJRCwgYm9vbCBhc3luY2hyb25vdXND
cmVhdGlvbkluY29tcGxldGUsIFBhc3NSZWZQdHI8TWVzc2FnZXM6OldlYlByb2Nlc3NDb25uZWN0
aW9uOjpEZXN0cm95UGx1Z2luOjpEZWxheWVkUmVwbHk+KTsKKyAgICB2b2lkIGRlc3Ryb3lQbHVn
aW4odWludDY0X3QgcGx1Z2luSW5zdGFuY2VJRCwgYm9vbCBhc3luY2hyb25vdXNDcmVhdGlvbklu
Y29tcGxldGUsIFJlZjxNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkRlc3Ryb3lQbHVn
aW46OkRlbGF5ZWRSZXBseT4mJik7CiAgICAgCiAgICAgdm9pZCBjcmVhdGVQbHVnaW5JbnRlcm5h
bChjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmLCBib29sJiByZXN1bHQsIGJvb2wmIHdh
bnRzV2hlZWxFdmVudHMsIHVpbnQzMl90JiByZW1vdGVMYXllckNsaWVudElEKTsKIApAQCAtODYs
NiArODUsMyBAQCBwcml2YXRlOgogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBF
TkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKLQotCi0jZW5kaWYgLy8gV2ViUHJvY2Vzc0Nvbm5l
Y3Rpb25faApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9X
ZWJDaHJvbWVDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkocmV2aXNpb24gMjE2NDE3KQor
KysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGll
bnQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC03NzMsNyArNzczLDcgQEAgdm9pZCBXZWJDaHJvbWVD
bGllbnQ6OnJ1bk9wZW5QYW5lbChGcmFtZQogICAgIGlmIChtX3BhZ2UuYWN0aXZlT3BlblBhbmVs
UmVzdWx0TGlzdGVuZXIoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wYWdlLnNldEFjdGl2
ZU9wZW5QYW5lbFJlc3VsdExpc3RlbmVyKFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyOjpjcmVh
dGUoJm1fcGFnZSwgJmZpbGVDaG9vc2VyKSk7CisgICAgbV9wYWdlLnNldEFjdGl2ZU9wZW5QYW5l
bFJlc3VsdExpc3RlbmVyKFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyOjpjcmVhdGUobV9wYWdl
LCBmaWxlQ2hvb3NlcikpOwogCiAgICAgYXV0byogd2ViRnJhbWUgPSBXZWJGcmFtZTo6ZnJvbUNv
cmVGcmFtZShmcmFtZSk7CiAgICAgQVNTRVJUKHdlYkZyYW1lKTsKSW5kZXg6IFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRv
ckNsaWVudC5jcHAJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjQ1LDggKzI0NSw4IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZWdpc3RlclVuZG9TdGVwKFUK
ICAgICBpZiAobV9wYWdlLT5pc0luUmVkbygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRv
IHdlYlN0ZXAgPSBXZWJVbmRvU3RlcDo6Y3JlYXRlKCZzdGVwKTsKLSAgICBhdXRvIGVkaXRBY3Rp
b24gPSBzdGF0aWNfY2FzdDx1aW50MzJfdD4od2ViU3RlcC0+c3RlcCgpLT5lZGl0aW5nQWN0aW9u
KCkpOworICAgIGF1dG8gd2ViU3RlcCA9IFdlYlVuZG9TdGVwOjpjcmVhdGUoc3RlcCk7CisgICAg
YXV0byBlZGl0QWN0aW9uID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHdlYlN0ZXAtPnN0ZXAoKS5l
ZGl0aW5nQWN0aW9uKCkpOwogCiAgICAgbV9wYWdlLT5hZGRXZWJVbmRvU3RlcCh3ZWJTdGVwLT5z
dGVwSUQoKSwgd2ViU3RlcC5wdHIoKSk7CiAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlUHJveHk6OlJlZ2lzdGVyRWRpdENvbW1hbmRGb3JVbmRvKHdlYlN0ZXAtPnN0ZXBJRCgpLCBl
ZGl0QWN0aW9uKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlz
aXRlZExpbmtUYWJsZUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5jcHAJKHJldmlz
aW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVk
TGlua1RhYmxlQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDE2ICs0NCwxNiBA
QCBzdGF0aWMgSGFzaE1hcDx1aW50NjRfdCwgVmlzaXRlZExpbmtUYWJsCiAgICAgcmV0dXJuIHZp
c2l0ZWRMaW5rVGFibGVDb250cm9sbGVyczsKIH0KIAotUGFzc1JlZlB0cjxWaXNpdGVkTGlua1Rh
YmxlQ29udHJvbGxlcj4gVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXI6OmdldE9yQ3JlYXRlKHVp
bnQ2NF90IGlkZW50aWZpZXIpCitSZWY8VmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXI+IFZpc2l0
ZWRMaW5rVGFibGVDb250cm9sbGVyOjpnZXRPckNyZWF0ZSh1aW50NjRfdCBpZGVudGlmaWVyKQog
ewogICAgIGF1dG8mIHZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyUHRyID0gdmlzaXRlZExpbmtU
YWJsZUNvbnRyb2xsZXJzKCkuYWRkKGlkZW50aWZpZXIsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1
ZTsKICAgICBpZiAodmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXJQdHIpCi0gICAgICAgIHJldHVy
biB2aXNpdGVkTGlua1RhYmxlQ29udHJvbGxlclB0cjsKKyAgICAgICAgcmV0dXJuICp2aXNpdGVk
TGlua1RhYmxlQ29udHJvbGxlclB0cjsKIAogICAgIGF1dG8gdmlzaXRlZExpbmtUYWJsZUNvbnRy
b2xsZXIgPSBhZG9wdFJlZigqbmV3IFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyKGlkZW50aWZp
ZXIpKTsKICAgICB2aXNpdGVkTGlua1RhYmxlQ29udHJvbGxlclB0ciA9IHZpc2l0ZWRMaW5rVGFi
bGVDb250cm9sbGVyLnB0cigpOwogCi0gICAgcmV0dXJuIFdURk1vdmUodmlzaXRlZExpbmtUYWJs
ZUNvbnRyb2xsZXIpOworICAgIHJldHVybiB2aXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjsKIH0K
IAogVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXI6OlZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVy
KHVpbnQ2NF90IGlkZW50aWZpZXIpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIuaAko
cmV2aXNpb24gMjE2NDE3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1Zp
c2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDcg
QEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFZp
c2l0ZWRMaW5rVGFibGVDb250cm9sbGVyX2gKLSNkZWZpbmUgVmlzaXRlZExpbmtUYWJsZUNvbnRy
b2xsZXJfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKICNp
bmNsdWRlICJTaGFyZWRNZW1vcnkuaCIKQEAgLTM1LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYktp
dCB7CiAKIGNsYXNzIFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyIGZpbmFsIDogcHVibGljIFdl
YkNvcmU6OlZpc2l0ZWRMaW5rU3RvcmUgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsK
IHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxl
cj4gZ2V0T3JDcmVhdGUodWludDY0X3QgaWRlbnRpZmllcik7CisgICAgc3RhdGljIFJlZjxWaXNp
dGVkTGlua1RhYmxlQ29udHJvbGxlcj4gZ2V0T3JDcmVhdGUodWludDY0X3QgaWRlbnRpZmllcik7
CiAgICAgdmlydHVhbCB+VmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIoKTsKIAogcHJpdmF0ZToK
QEAgLTU4LDUgKzU3LDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAot
Ci0jZW5kaWYgLy8gVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXJfaApJbmRleDogU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCShyZXZpc2lvbiAyMTY0
MTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC02MDMsMTAgKzYwMywxMCBAQCBib29sIFdlYkZyYW1lOjpoYXNWZXJ0
aWNhbFNjcm9sbGJhcigpIGNvCiAgICAgcmV0dXJuIHZpZXctPnZlcnRpY2FsU2Nyb2xsYmFyKCk7
CiB9CiAKLVBhc3NSZWZQdHI8SW5qZWN0ZWRCdW5kbGVIaXRUZXN0UmVzdWx0PiBXZWJGcmFtZTo6
aGl0VGVzdChjb25zdCBJbnRQb2ludCBwb2ludCkgY29uc3QKK1JlZlB0cjxJbmplY3RlZEJ1bmRs
ZUhpdFRlc3RSZXN1bHQ+IFdlYkZyYW1lOjpoaXRUZXN0KGNvbnN0IEludFBvaW50IHBvaW50KSBj
b25zdAogewogICAgIGlmICghbV9jb3JlRnJhbWUpCi0gICAgICAgIHJldHVybiAwOworICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1
bHQ6OmNyZWF0ZShtX2NvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9p
bnQocG9pbnQsIEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSB8IEhpdFRlc3RSZXF1ZXN0OjpBY3Rp
dmUgfCBIaXRUZXN0UmVxdWVzdDo6SWdub3JlQ2xpcHBpbmcgfCBIaXRUZXN0UmVxdWVzdDo6RGlz
YWxsb3dVc2VyQWdlbnRTaGFkb3dDb250ZW50KSk7CiB9CkBAIC04MTgsNyArODE4LDcgQEAgUmV0
YWluUHRyPENGRGF0YVJlZj4gV2ViRnJhbWU6OndlYkFyY2hpdgogfQogI2VuZGlmCiAKLVBhc3NS
ZWZQdHI8U2hhcmVhYmxlQml0bWFwPiBXZWJGcmFtZTo6Y3JlYXRlU2VsZWN0aW9uU25hcHNob3Qo
KSBjb25zdAorUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gV2ViRnJhbWU6OmNyZWF0ZVNlbGVjdGlv
blNuYXBzaG90KCkgY29uc3QKIHsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHNu
YXBzaG90ID0gc25hcHNob3RTZWxlY3Rpb24oKmNvcmVGcmFtZSgpLCBXZWJDb3JlOjpTbmFwc2hv
dE9wdGlvbnNGb3JjZUJsYWNrVGV4dCk7CiAgICAgaWYgKCFzbmFwc2hvdCkKQEAgLTgzNSw3ICs4
MzUsNyBAQCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gV2ViRnJhbWU6OmNyCiAgICAgZ3Jh
cGhpY3NDb250ZXh0LT5zY2FsZShkZXZpY2VTY2FsZUZhY3Rvcik7CiAgICAgZ3JhcGhpY3NDb250
ZXh0LT5kcmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoV1RGTW92ZShzbmFwc2hvdCksIEZsb2F0UG9p
bnQoKSk7CiAKLSAgICByZXR1cm4gV1RGTW92ZShzaGFyZWRTbmFwc2hvdCk7CisgICAgcmV0dXJu
IHNoYXJlZFNuYXBzaG90OwogfQogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuaAkocmV2aXNpb24g
MjE2NDE3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmgJ
KHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFdlYkZyYW1lX2gKLSNkZWZpbmUgV2ViRnJhbWVf
aAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBUElPYmplY3QuaCIKICNpbmNsdWRlICJEb3du
bG9hZElELmgiCkBAIC0zNiw3ICszNSw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRl
clR5cGVzLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Qb2xpY3lDaGVja2VyLmg+CiAjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0
Zi9SZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKQEAgLTExMSw3ICsxMDks
NyBAQCBwdWJsaWM6CiAgICAgV2ViQ29yZTo6SW50U2l6ZSBzY3JvbGxPZmZzZXQoKSBjb25zdDsK
ICAgICBib29sIGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdDsKICAgICBib29sIGhhc1Zl
cnRpY2FsU2Nyb2xsYmFyKCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxJbmplY3RlZEJ1bmRsZUhp
dFRlc3RSZXN1bHQ+IGhpdFRlc3QoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQpIGNvbnN0OworICAg
IFJlZlB0cjxJbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQ+IGhpdFRlc3QoY29uc3QgV2ViQ29y
ZTo6SW50UG9pbnQpIGNvbnN0OwogICAgIGJvb2wgZ2V0RG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3Io
ZG91YmxlKiByZWQsIGRvdWJsZSogZ3JlZW4sIGRvdWJsZSogYmx1ZSwgZG91YmxlKiBhbHBoYSk7
CiAgICAgYm9vbCBjb250YWluc0FueUZvcm1FbGVtZW50cygpIGNvbnN0OwogICAgIGJvb2wgY29u
dGFpbnNBbnlGb3JtQ29udHJvbHMoKSBjb25zdDsKQEAgLTE1OCw3ICsxNTYsNyBAQCBwdWJsaWM6
CiAgICAgUmV0YWluUHRyPENGRGF0YVJlZj4gd2ViQXJjaGl2ZURhdGEoRnJhbWVGaWx0ZXJGdW5j
dGlvbiwgdm9pZCogY29udGV4dCk7CiAjZW5kaWYKIAotICAgIFBhc3NSZWZQdHI8U2hhcmVhYmxl
Qml0bWFwPiBjcmVhdGVTZWxlY3Rpb25TbmFwc2hvdCgpIGNvbnN0OworICAgIFJlZlB0cjxTaGFy
ZWFibGVCaXRtYXA+IGNyZWF0ZVNlbGVjdGlvblNuYXBzaG90KCkgY29uc3Q7CiAKICNpZiBQTEFU
Rk9STShJT1MpCiAgICAgdWludDY0X3QgZmlyc3RMYXllclRyZWVUcmFuc2FjdGlvbklEQWZ0ZXJE
aWRDb21taXRMb2FkKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdExheWVyVHJlZVRyYW5zYWN0aW9u
SURBZnRlckRpZENvbW1pdExvYWQ7IH0KQEAgLTE4Niw1ICsxODQsMyBAQCBwcml2YXRlOgogfTsK
IAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBXZWJGcmFtZV9oCkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVu
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5j
cHAJKHdvcmtpbmcgY29weSkKQEAgLTI2LDE4ICsyNiwxOSBAQAogI2luY2x1ZGUgImNvbmZpZy5o
IgogI2luY2x1ZGUgIldlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmgiCiAKKyNpbmNsdWRlIDxX
ZWJDb3JlL0ZpbGVDaG9vc2VyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JY29uLmg+CiAKIG5hbWVz
cGFjZSBXZWJLaXQgewogCi1SZWY8V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI+IFdlYk9wZW5Q
YW5lbFJlc3VsdExpc3RlbmVyOjpjcmVhdGUoV2ViUGFnZSogcGFnZSwgUGFzc1JlZlB0cjxXZWJD
b3JlOjpGaWxlQ2hvb3Nlcj4gZmlsZUNob29zZXIpCitSZWY8V2ViT3BlblBhbmVsUmVzdWx0TGlz
dGVuZXI+IFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyOjpjcmVhdGUoV2ViUGFnZSYgcGFnZSwg
UmVmPFdlYkNvcmU6OkZpbGVDaG9vc2VyPiYmIGZpbGVDaG9vc2VyKQogewotICAgIHJldHVybiBh
ZG9wdFJlZigqbmV3IFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyKHBhZ2UsIGZpbGVDaG9vc2Vy
KSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIo
cGFnZSwgV1RGTW92ZShmaWxlQ2hvb3NlcikpKTsKIH0KIAotV2ViT3BlblBhbmVsUmVzdWx0TGlz
dGVuZXI6OldlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyKFdlYlBhZ2UqIHBhZ2UsIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6RmlsZUNob29zZXI+IGZpbGVDaG9vc2VyKQotICAgIDogbV9wYWdlKHBhZ2Up
Ci0gICAgLCBtX2ZpbGVDaG9vc2VyKGZpbGVDaG9vc2VyKQorV2ViT3BlblBhbmVsUmVzdWx0TGlz
dGVuZXI6OldlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyKFdlYlBhZ2UmIHBhZ2UsIFJlZjxXZWJD
b3JlOjpGaWxlQ2hvb3Nlcj4mJiBmaWxlQ2hvb3NlcikKKyAgICA6IG1fcGFnZSgmcGFnZSkKKyAg
ICAsIG1fZmlsZUNob29zZXIoV1RGTW92ZShmaWxlQ2hvb3NlcikpCiB7CiB9CiAKSW5kZXg6IFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5l
ci5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJP
cGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5oCShyZXZpc2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtMjMsMTMgKzIzLDE1IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VD
SCBEQU1BR0UuCiAgKi8KIAotI2lmbmRlZiBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcl9oCi0j
ZGVmaW5lIFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyX2gKKyNwcmFnbWEgb25jZQogCisjaW5j
bHVkZSA8d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3Rm
L1JlZkNvdW50ZWQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVDaG9vc2VyLmg+CisjaW5jbHVk
ZSA8d3RmL1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBGaWxlQ2hvb3Nl
cjsKIGNsYXNzIEljb247CiB9CiAKQEAgLTM5LDcgKzQxLDcgQEAgY2xhc3MgV2ViUGFnZTsKIAog
Y2xhc3MgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJP
cGVuUGFuZWxSZXN1bHRMaXN0ZW5lcj4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViT3Bl
blBhbmVsUmVzdWx0TGlzdGVuZXI+IGNyZWF0ZShXZWJQYWdlKiwgUGFzc1JlZlB0cjxXZWJDb3Jl
OjpGaWxlQ2hvb3Nlcj4pOworICAgIHN0YXRpYyBSZWY8V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVu
ZXI+IGNyZWF0ZShXZWJQYWdlJiwgUmVmPFdlYkNvcmU6OkZpbGVDaG9vc2VyPiYmKTsKICAgICB+
V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIoKTsKIAogICAgIHZvaWQgZGlzY29ubmVjdEZyb21Q
YWdlKCkgeyBtX3BhZ2UgPSAwOyB9CkBAIC00OSwxMyArNTEsMTAgQEAgcHVibGljOgogI2VuZGlm
CiAKIHByaXZhdGU6Ci0gICAgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIoV2ViUGFnZSosIFBh
c3NSZWZQdHI8V2ViQ29yZTo6RmlsZUNob29zZXI+KTsKKyAgICBXZWJPcGVuUGFuZWxSZXN1bHRM
aXN0ZW5lcihXZWJQYWdlJiwgUmVmPFdlYkNvcmU6OkZpbGVDaG9vc2VyPiYmKTsKIAogICAgIFdl
YlBhZ2UqIG1fcGFnZTsKICAgICBSZWZQdHI8V2ViQ29yZTo6RmlsZUNob29zZXI+IG1fZmlsZUNo
b29zZXI7CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKLQotCi0jZW5kaWYgLy8gV2ViT3Bl
blBhbmVsUmVzdWx0TGlzdGVuZXJfaApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nl
c3MvV2ViUGFnZS9XZWJQYWdlLmNwcAkocmV2aXNpb24gMjE2NDE3KQorKysgU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNzEw
LDcgKzM3MTAsNyBAQCB2b2lkIFdlYlBhZ2U6OnVuYXBwbHlFZGl0Q29tbWFuZCh1aW50NjRfCiAg
ICAgaWYgKCFzdGVwKQogICAgICAgICByZXR1cm47CiAKLSAgICBzdGVwLT5zdGVwKCktPnVuYXBw
bHkoKTsKKyAgICBzdGVwLT5zdGVwKCkudW5hcHBseSgpOwogfQogCiB2b2lkIFdlYlBhZ2U6OnJl
YXBwbHlFZGl0Q29tbWFuZCh1aW50NjRfdCBzdGVwSUQpCkBAIC0zNzIwLDcgKzM3MjAsNyBAQCB2
b2lkIFdlYlBhZ2U6OnJlYXBwbHlFZGl0Q29tbWFuZCh1aW50NjRfCiAgICAgICAgIHJldHVybjsK
IAogICAgIG1faXNJblJlZG8gPSB0cnVlOwotICAgIHN0ZXAtPnN0ZXAoKS0+cmVhcHBseSgpOwor
ICAgIHN0ZXAtPnN0ZXAoKS5yZWFwcGx5KCk7CiAgICAgbV9pc0luUmVkbyA9IGZhbHNlOwogfQog
CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJv
eHkuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlR3JvdXBQcm94eS5jcHAJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTM1LDE0ICszNSwxNCBAQAogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAotUGFzc1JlZlB0cjxX
ZWJQYWdlR3JvdXBQcm94eT4gV2ViUGFnZUdyb3VwUHJveHk6OmNyZWF0ZShjb25zdCBXZWJQYWdl
R3JvdXBEYXRhJiBkYXRhKQorUmVmPFdlYlBhZ2VHcm91cFByb3h5PiBXZWJQYWdlR3JvdXBQcm94
eTo6Y3JlYXRlKGNvbnN0IFdlYlBhZ2VHcm91cERhdGEmIGRhdGEpCiB7CiAgICAgYXV0byBwYWdl
R3JvdXAgPSBhZG9wdFJlZigqbmV3IFdlYlBhZ2VHcm91cFByb3h5KGRhdGEpKTsKIAogICAgIGlm
IChwYWdlR3JvdXAtPmlzVmlzaWJsZVRvSW5qZWN0ZWRCdW5kbGUoKSAmJiBXZWJQcm9jZXNzOjpz
aW5nbGV0b24oKS5pbmplY3RlZEJ1bmRsZSgpKQogICAgICAgICBXZWJQcm9jZXNzOjpzaW5nbGV0
b24oKS5pbmplY3RlZEJ1bmRsZSgpLT5kaWRJbml0aWFsaXplUGFnZUdyb3VwKHBhZ2VHcm91cC5w
dHIoKSk7CiAKLSAgICByZXR1cm4gV1RGTW92ZShwYWdlR3JvdXApOworICAgIHJldHVybiBwYWdl
R3JvdXA7CiB9CiAKIFdlYlBhZ2VHcm91cFByb3h5OjpXZWJQYWdlR3JvdXBQcm94eShjb25zdCBX
ZWJQYWdlR3JvdXBEYXRhJiBkYXRhKQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmgJKHJldmlzaW9uIDIxNjQxNykK
KysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3JvdXBQcm94eS5o
CSh3b3JraW5nIGNvcHkpCkBAIC0yMywxMiArMjMsMTEgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBP
RiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFdlYlBhZ2VHcm91cFByb3h5X2gKLSNkZWZp
bmUgV2ViUGFnZUdyb3VwUHJveHlfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJBUElPYmpl
Y3QuaCIKICNpbmNsdWRlICJXZWJQYWdlR3JvdXBEYXRhLmgiCi0jaW5jbHVkZSA8d3RmL1Bhc3NS
ZWZQdHIuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CiAKIG5hbWVzcGFjZSBXZWJDb3JlIHsKIGNs
YXNzIFBhZ2VHcm91cDsKQEAgLTQwLDcgKzM5LDcgQEAgY2xhc3MgV2ViVXNlckNvbnRlbnRDb250
cm9sbGVyOwogCiBjbGFzcyBXZWJQYWdlR3JvdXBQcm94eSA6IHB1YmxpYyBBUEk6Ok9iamVjdElt
cGw8QVBJOjpPYmplY3Q6OlR5cGU6OkJ1bmRsZVBhZ2VHcm91cD4gewogcHVibGljOgotICAgIHN0
YXRpYyBQYXNzUmVmUHRyPFdlYlBhZ2VHcm91cFByb3h5PiBjcmVhdGUoY29uc3QgV2ViUGFnZUdy
b3VwRGF0YSYpOworICAgIHN0YXRpYyBSZWY8V2ViUGFnZUdyb3VwUHJveHk+IGNyZWF0ZShjb25z
dCBXZWJQYWdlR3JvdXBEYXRhJik7CiAgICAgdmlydHVhbCB+V2ViUGFnZUdyb3VwUHJveHkoKTsK
IAogICAgIGNvbnN0IFN0cmluZyYgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fZGF0YS5p
ZGVudGlmaWVyOyB9CkBAIC02MCw1ICs1OSwzIEBAIHByaXZhdGU6CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJLaXQKLQotI2VuZGlmIC8vIFdlYlBhZ2VHcm91cFByb3h5X2gKSW5kZXg6IFNvdXJj
ZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJVbmRvU3RlcC5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVuZG9TdGVwLmNwcAkocmV2
aXNpb24gMjE2NDE3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVu
ZG9TdGVwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQsOSArMzQsOSBAQCBzdGF0aWMgdWludDY0
X3QgZ2VuZXJhdGVVbmRvU3RlcCgpCiAgICAgcmV0dXJuIHVuaXF1ZUVudHJ5SUQrKzsKIH0KIAot
UmVmPFdlYlVuZG9TdGVwPiBXZWJVbmRvU3RlcDo6Y3JlYXRlKFBhc3NSZWZQdHI8V2ViQ29yZTo6
VW5kb1N0ZXA+IHN0ZXApCitSZWY8V2ViVW5kb1N0ZXA+IFdlYlVuZG9TdGVwOjpjcmVhdGUoUmVm
PFdlYkNvcmU6OlVuZG9TdGVwPiYmIHN0ZXApCiB7Ci0gICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcg
V2ViVW5kb1N0ZXAoc3RlcCwgZ2VuZXJhdGVVbmRvU3RlcCgpKSk7CisgICAgcmV0dXJuIGFkb3B0
UmVmKCpuZXcgV2ViVW5kb1N0ZXAoV1RGTW92ZShzdGVwKSwgZ2VuZXJhdGVVbmRvU3RlcCgpKSk7
CiB9CiAKIFdlYlVuZG9TdGVwOjp+V2ViVW5kb1N0ZXAoKQpJbmRleDogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVuZG9TdGVwLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlVuZG9TdGVwLmgJKHJldmlzaW9uIDIxNjQxNykK
KysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJVbmRvU3RlcC5oCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yMywzNCArMjMsMzAgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNI
IERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFdlYlVuZG9TdGVwX2gKLSNkZWZpbmUgV2ViVW5kb1N0
ZXBfaAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlIDxXZWJDb3JlL1VuZG9TdGVwLmg+Ci0jaW5j
bHVkZSA8d3RmL1Bhc3NSZWZQdHIuaD4KLSNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZi5oPgogCiBuYW1lc3BhY2UgV2ViS2l0IHsKIAogY2xhc3MgV2ViVW5kb1N0ZXAg
OiBwdWJsaWMgUmVmQ291bnRlZDxXZWJVbmRvU3RlcD4gewogcHVibGljOgotICAgIHN0YXRpYyBS
ZWY8V2ViVW5kb1N0ZXA+IGNyZWF0ZShQYXNzUmVmUHRyPFdlYkNvcmU6OlVuZG9TdGVwPik7Cisg
ICAgc3RhdGljIFJlZjxXZWJVbmRvU3RlcD4gY3JlYXRlKFJlZjxXZWJDb3JlOjpVbmRvU3RlcD4m
Jik7CiAgICAgfldlYlVuZG9TdGVwKCk7CiAKLSAgICBXZWJDb3JlOjpVbmRvU3RlcCogc3RlcCgp
IGNvbnN0IHsgcmV0dXJuIG1fc3RlcC5nZXQoKTsgfQorICAgIFdlYkNvcmU6OlVuZG9TdGVwJiBz
dGVwKCkgY29uc3QgeyByZXR1cm4gbV9zdGVwLmdldCgpOyB9CiAgICAgdWludDY0X3Qgc3RlcElE
KCkgY29uc3QgeyByZXR1cm4gbV9zdGVwSUQ7IH0KIAogcHJpdmF0ZToKLSAgICBXZWJVbmRvU3Rl
cChQYXNzUmVmUHRyPFdlYkNvcmU6OlVuZG9TdGVwPiBzdGVwLCB1aW50NjRfdCBzdGVwSUQpCi0g
ICAgICAgIDogbV9zdGVwKHN0ZXApCisgICAgV2ViVW5kb1N0ZXAoUmVmPFdlYkNvcmU6OlVuZG9T
dGVwPiYmIHN0ZXAsIHVpbnQ2NF90IHN0ZXBJRCkKKyAgICAgICAgOiBtX3N0ZXAoV1RGTW92ZShz
dGVwKSkKICAgICAgICAgLCBtX3N0ZXBJRChzdGVwSUQpCiAgICAgewogICAgIH0KIAotICAgIFJl
ZlB0cjxXZWJDb3JlOjpVbmRvU3RlcD4gbV9zdGVwOworICAgIFJlZjxXZWJDb3JlOjpVbmRvU3Rl
cD4gbV9zdGVwOwogICAgIHVpbnQ2NF90IG1fc3RlcElEOwogfTsKIAogfSAvLyBuYW1lc3BhY2Ug
V2ViS2l0Ci0KLSNlbmRpZiAvLyBXZWJFZGl0Q29tbWFuZF9oCkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNB
TGF5ZXJSZW1vdGUuY3BwCShyZXZpc2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTQ0LDcgKzQ0LDcgQEAgdXNpbmcgbmFtZXNwYWNlIFdlYkNvcmU7CiAKIG5hbWVzcGFj
ZSBXZWJLaXQgewogCi1QYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllclJlbW90ZT4gUGxhdGZvcm1D
QUxheWVyUmVtb3RlOjpjcmVhdGUoTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVy
Q2xpZW50KiBvd25lciwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYgY29udGV4dCkKK1JlZjxQbGF0
Zm9ybUNBTGF5ZXJSZW1vdGU+IFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6Y3JlYXRlKExheWVyVHlw
ZSBsYXllclR5cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIsIFJlbW90ZUxheWVyVHJl
ZUNvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXllclJlbW90ZT4g
bGF5ZXI7CiAKQEAgLTU1LDIxICs1NSwyMSBAQCBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllclJl
bW90ZT4gUGxhdGZvCiAKICAgICBjb250ZXh0LmxheWVyV2FzQ3JlYXRlZCgqbGF5ZXIsIGxheWVy
VHlwZSk7CiAKLSAgICByZXR1cm4gV1RGTW92ZShsYXllcik7CisgICAgcmV0dXJuIGxheWVyLnJl
bGVhc2VOb25OdWxsKCk7CiB9CiAKLVBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBQ
bGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNyZWF0ZShQbGF0Zm9ybUxheWVyICpwbGF0Zm9ybUxheWVy
LCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyLCBSZW1vdGVMYXllclRyZWVDb250ZXh0JiBj
b250ZXh0KQorUmVmPFBsYXRmb3JtQ0FMYXllclJlbW90ZT4gUGxhdGZvcm1DQUxheWVyUmVtb3Rl
OjpjcmVhdGUoUGxhdGZvcm1MYXllciAqcGxhdGZvcm1MYXllciwgUGxhdGZvcm1DQUxheWVyQ2xp
ZW50KiBvd25lciwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYgY29udGV4dCkKIHsKICAgICByZXR1
cm4gUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tOjpjcmVhdGUocGxhdGZvcm1MYXllciwgb3du
ZXIsIGNvbnRleHQpOwogfQogCi1QYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllclJlbW90ZT4gUGxh
dGZvcm1DQUxheWVyUmVtb3RlOjpjcmVhdGUoY29uc3QgUGxhdGZvcm1DQUxheWVyUmVtb3RlJiBv
dGhlciwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lciwgUmVtb3RlTGF5ZXJU
cmVlQ29udGV4dCYgY29udGV4dCkKK1JlZjxQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU+IFBsYXRmb3Jt
Q0FMYXllclJlbW90ZTo6Y3JlYXRlKGNvbnN0IFBsYXRmb3JtQ0FMYXllclJlbW90ZSYgb3RoZXIs
IFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIsIFJlbW90ZUxheWVyVHJlZUNv
bnRleHQmIGNvbnRleHQpCiB7CiAgICAgYXV0byBsYXllciA9IGFkb3B0UmVmKCpuZXcgUGxhdGZv
cm1DQUxheWVyUmVtb3RlKG90aGVyLCBvd25lciwgY29udGV4dCkpOwogCiAgICAgY29udGV4dC5s
YXllcldhc0NyZWF0ZWQobGF5ZXIuZ2V0KCksIG90aGVyLmxheWVyVHlwZSgpKTsKIAotICAgIHJl
dHVybiBXVEZNb3ZlKGxheWVyKTsKKyAgICByZXR1cm4gbGF5ZXI7CiB9CiAKIFBsYXRmb3JtQ0FM
YXllclJlbW90ZTo6UGxhdGZvcm1DQUxheWVyUmVtb3RlKExheWVyVHlwZSBsYXllclR5cGUsIFBs
YXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIsIFJlbW90ZUxheWVyVHJlZUNvbnRleHQmIGNvbnRl
eHQpCkBAIC04OSwxNCArODksMTQgQEAgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpQbGF0Zm9ybUNB
TGF5ZXJSZQogewogfQogCi1QYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1DQUxh
eWVyUmVtb3RlOjpjbG9uZShQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKSBjb25zdAorUmVm
PFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpjbG9uZShQbGF0Zm9ybUNB
TGF5ZXJDbGllbnQqIG93bmVyKSBjb25zdAogewogICAgIGF1dG8gY2xvbmUgPSBQbGF0Zm9ybUNB
TGF5ZXJSZW1vdGU6OmNyZWF0ZSgqdGhpcywgb3duZXIsICptX2NvbnRleHQpOwogCi0gICAgdXBk
YXRlQ2xvbmVkTGF5ZXJQcm9wZXJ0aWVzKCpjbG9uZSk7CisgICAgdXBkYXRlQ2xvbmVkTGF5ZXJQ
cm9wZXJ0aWVzKGNsb25lKTsKIAogICAgIGNsb25lLT5zZXRDbG9uZWRMYXllcih0aGlzKTsKLSAg
ICByZXR1cm4gV1RGTW92ZShjbG9uZSk7CisgICAgcmV0dXJuIGNsb25lOwogfQogCiBQbGF0Zm9y
bUNBTGF5ZXJSZW1vdGU6On5QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUoKQpAQCAtMzU3LDcgKzM1Nyw3
IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpyZW1vdmVBbmltYXQKICAgICBtX3Byb3Bl
cnRpZXMubm90ZVByb3BlcnRpZXNDaGFuZ2VkKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0aW9uOjpB
bmltYXRpb25zQ2hhbmdlZCk7CiB9CiAKLVBhc3NSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4g
UGxhdGZvcm1DQUxheWVyUmVtb3RlOjphbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkp
CitSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gUGxhdGZvcm1DQUxheWVyUmVtb3RlOjphbmlt
YXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpCiB7CiAgICAgcmV0dXJuIG1fYW5pbWF0aW9u
cy5nZXQoa2V5KTsKIH0KQEAgLTgyMSw3ICs4MjEsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllclJl
bW90ZTo6dXBkYXRlQ3VzdG9tCiAgICAgbV9wcm9wZXJ0aWVzLm5vdGVQcm9wZXJ0aWVzQ2hhbmdl
ZChSZW1vdGVMYXllclRyZWVUcmFuc2FjdGlvbjo6Q3VzdG9tQXBwZWFyYW5jZUNoYW5nZWQpOwog
fQogCi1QYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpj
cmVhdGVDb21wYXRpYmxlTGF5ZXIoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGUgbGF5ZXJUeXBl
LCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIGNsaWVudCkgY29uc3QKK1JlZjxQbGF0Zm9ybUNBTGF5
ZXI+IFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6Y3JlYXRlQ29tcGF0aWJsZUxheWVyKFBsYXRmb3Jt
Q0FMYXllcjo6TGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBjbGll
bnQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6Y3JlYXRlKGxh
eWVyVHlwZSwgY2xpZW50LCAqbV9jb250ZXh0KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmgKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJS
ZW1vdGUuaAkocmV2aXNpb24gMjE2NDE3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9X
ZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzks
OSArMzksOSBAQCBjbGFzcyBSZW1vdGVMYXllclRyZWVDb250ZXh0OwogCiBjbGFzcyBQbGF0Zm9y
bUNBTGF5ZXJSZW1vdGUgOiBwdWJsaWMgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU+IGNyZWF0ZShX
ZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSwgV2ViQ29yZTo6UGxhdGZvcm1DQUxh
eWVyQ2xpZW50KiwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYpOwotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFBsYXRmb3JtQ0FMYXllclJlbW90ZT4gY3JlYXRlKFBsYXRmb3JtTGF5ZXIgKiwgV2ViQ29y
ZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50KiwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYpOwotICAg
IHN0YXRpYyBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllclJlbW90ZT4gY3JlYXRlKGNvbnN0IFBs
YXRmb3JtQ0FMYXllclJlbW90ZSYsIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllckNsaWVudCosIFJl
bW90ZUxheWVyVHJlZUNvbnRleHQmKTsKKyAgICBzdGF0aWMgUmVmPFBsYXRmb3JtQ0FMYXllclJl
bW90ZT4gY3JlYXRlKFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlLCBXZWJDb3Jl
OjpQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqLCBSZW1vdGVMYXllclRyZWVDb250ZXh0Jik7CisgICAg
c3RhdGljIFJlZjxQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU+IGNyZWF0ZShQbGF0Zm9ybUxheWVyICos
IFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllckNsaWVudCosIFJlbW90ZUxheWVyVHJlZUNvbnRleHQm
KTsKKyAgICBzdGF0aWMgUmVmPFBsYXRmb3JtQ0FMYXllclJlbW90ZT4gY3JlYXRlKGNvbnN0IFBs
YXRmb3JtQ0FMYXllclJlbW90ZSYsIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllckNsaWVudCosIFJl
bW90ZUxheWVyVHJlZUNvbnRleHQmKTsKIAogICAgIHZpcnR1YWwgflBsYXRmb3JtQ0FMYXllclJl
bW90ZSgpOwogCkBAIC02Niw3ICs2Niw3IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWRkQW5pbWF0
aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5LCBXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9u
Jikgb3ZlcnJpZGU7CiAgICAgdm9pZCByZW1vdmVBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5n
JiBrZXkpIG92ZXJyaWRlOwotICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6UGxhdGZvcm1DQUFuaW1h
dGlvbj4gYW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKKyAgICBS
ZWZQdHI8V2ViQ29yZTo6UGxhdGZvcm1DQUFuaW1hdGlvbj4gYW5pbWF0aW9uRm9yS2V5KGNvbnN0
IFN0cmluZyYga2V5KSBvdmVycmlkZTsKICAgICB2b2lkIGFuaW1hdGlvblN0YXJ0ZWQoY29uc3Qg
U3RyaW5nJiBrZXksIENGVGltZUludGVydmFsIGJlZ2luVGltZSkgb3ZlcnJpZGU7CiAgICAgdm9p
ZCBhbmltYXRpb25FbmRlZChjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7CiAKQEAgLTE3NSw5
ICsxNzUsOSBAQCBwdWJsaWM6CiAKICAgICBXZWJDb3JlOjpUaWxlZEJhY2tpbmcqIHRpbGVkQmFj
a2luZygpIG92ZXJyaWRlIHsgcmV0dXJuIG51bGxwdHI7IH0KIAotICAgIFBhc3NSZWZQdHI8V2Vi
Q29yZTo6UGxhdGZvcm1DQUxheWVyPiBjbG9uZShXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGll
bnQqIG93bmVyKSBjb25zdCBvdmVycmlkZTsKKyAgICBSZWY8V2ViQ29yZTo6UGxhdGZvcm1DQUxh
eWVyPiBjbG9uZShXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKSBjb25zdCBv
dmVycmlkZTsKIAotICAgIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBjcmVhdGVDb21wYXRp
YmxlTGF5ZXIoV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGUsIFdlYkNvcmU6OlBs
YXRmb3JtQ0FMYXllckNsaWVudCopIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZjxQbGF0Zm9ybUNB
TGF5ZXI+IGNyZWF0ZUNvbXBhdGlibGVMYXllcihXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6Okxh
eWVyVHlwZSwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50KikgY29uc3Qgb3ZlcnJpZGU7
CiAKICAgICB2b2lkIGVudW1lcmF0ZVJlY3RzQmVpbmdEcmF3bihDR0NvbnRleHRSZWYsIHZvaWQg
KF5ibG9jaykoQ0dSZWN0KSkgb3ZlcnJpZGU7CiAKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5
ZXJSZW1vdGVDdXN0b20uaAkocmV2aXNpb24gMjE2NDE3KQorKysgU291cmNlL1dlYktpdDIvV2Vi
UHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20uaAkod29ya2lu
ZyBjb3B5KQpAQCAtMjMsOCArMjMsNyBAQAogICogT0YgVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBB
RFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVm
IFBsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbV9oCi0jZGVmaW5lIFBsYXRmb3JtQ0FMYXllclJl
bW90ZUN1c3RvbV9oCisjcHJhZ21hIG9uY2UKIAogI2luY2x1ZGUgIlBsYXRmb3JtQ0FMYXllclJl
bW90ZS5oIgogCkBAIC0zNiw3ICszNSw3IEBAIGNsYXNzIExheWVySG9zdGluZ0NvbnRleHQ7CiBj
bGFzcyBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20gZmluYWwgOiBwdWJsaWMgUGxhdGZvcm1D
QUxheWVyUmVtb3RlIHsKICAgICBmcmllbmQgY2xhc3MgUGxhdGZvcm1DQUxheWVyUmVtb3RlOwog
cHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllclJlbW90ZT4gY3Jl
YXRlKFBsYXRmb3JtTGF5ZXIgKiwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50KiwgUmVt
b3RlTGF5ZXJUcmVlQ29udGV4dCYpOworICAgIHN0YXRpYyBSZWY8UGxhdGZvcm1DQUxheWVyUmVt
b3RlPiBjcmVhdGUoUGxhdGZvcm1MYXllciAqLCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGll
bnQqLCBSZW1vdGVMYXllclRyZWVDb250ZXh0Jik7CiAKICAgICB2aXJ0dWFsIH5QbGF0Zm9ybUNB
TGF5ZXJSZW1vdGVDdXN0b20oKTsKIApAQCAtNTAsNyArNDksNyBAQCBwdWJsaWM6CiBwcml2YXRl
OgogICAgIFBsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbShXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5
ZXI6OkxheWVyVHlwZSwgUGxhdGZvcm1MYXllciAqLCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJD
bGllbnQqIG93bmVyLCBSZW1vdGVMYXllclRyZWVDb250ZXh0Jik7CiAKLSAgICBQYXNzUmVmUHRy
PFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcj4gY2xvbmUoV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVy
Q2xpZW50KiBvd25lcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPFdlYkNvcmU6OlBsYXRmb3Jt
Q0FMYXllcj4gY2xvbmUoV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikgY29u
c3Qgb3ZlcnJpZGU7CiAKICAgICBib29sIGlzUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tKCkg
Y29uc3Qgb3ZlcnJpZGUgeyByZXR1cm4gdHJ1ZTsgfQogCkBAIC02NSw1ICs2NCwzIEBAIHByaXZh
dGU6CiB9IC8vIG5hbWVzcGFjZSBXZWJLaXQKIAogU1BFQ0lBTElaRV9UWVBFX1RSQUlUU19QTEFU
Rk9STV9DQUxBWUVSKFdlYktpdDo6UGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tLCBpc1BsYXRm
b3JtQ0FMYXllclJlbW90ZSgpKQotCi0jZW5kaWYgLy8gUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3Vz
dG9tX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZv
cm1DQUxheWVyUmVtb3RlQ3VzdG9tLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tLm1tCShyZXZp
c2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1Bs
YXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbS5tbQkod29ya2luZyBjb3B5KQpAQCAtNDYsMTIgKzQ2
LDEyIEBAIG5hbWVzcGFjZSBXZWJLaXQgewogCiBzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBwbGF0
Zm9ybUNBTGF5ZXJQb2ludGVyID0gQCJXS1BsYXRmb3JtQ0FMYXllciI7CiAKLVBhc3NSZWZQdHI8
UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b206OmNyZWF0
ZShQbGF0Zm9ybUxheWVyICpwbGF0Zm9ybUxheWVyLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93
bmVyLCBSZW1vdGVMYXllclRyZWVDb250ZXh0JiBjb250ZXh0KQorUmVmPFBsYXRmb3JtQ0FMYXll
clJlbW90ZT4gUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tOjpjcmVhdGUoUGxhdGZvcm1MYXll
ciAqcGxhdGZvcm1MYXllciwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lciwgUmVtb3RlTGF5
ZXJUcmVlQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBhdXRvIGxheWVyID0gYWRvcHRSZWYoKm5l
dyBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20oUGxhdGZvcm1DQUxheWVyQ29jb2E6OmxheWVy
VHlwZUZvclBsYXRmb3JtTGF5ZXIocGxhdGZvcm1MYXllciksIHBsYXRmb3JtTGF5ZXIsIG93bmVy
LCBjb250ZXh0KSk7CiAgICAgY29udGV4dC5sYXllcldhc0NyZWF0ZWQobGF5ZXIuZ2V0KCksIGxh
eWVyLT5sYXllclR5cGUoKSk7CiAKLSAgICByZXR1cm4gV1RGTW92ZShsYXllcik7CisgICAgcmV0
dXJuIGxheWVyOwogfQogCiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b206OlBsYXRmb3JtQ0FM
YXllclJlbW90ZUN1c3RvbShMYXllclR5cGUgbGF5ZXJUeXBlLCBQbGF0Zm9ybUxheWVyICogY3Vz
dG9tTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIsIFJlbW90ZUxheWVyVHJlZUNv
bnRleHQmIGNvbnRleHQpCkBAIC0xMDAsNyArMTAwLDcgQEAgdWludDMyX3QgUGxhdGZvcm1DQUxh
eWVyUmVtb3RlQ3VzdG9tOjpobwogICAgIHJldHVybiBtX2xheWVySG9zdGluZ0NvbnRleHQtPmNv
bnRleHRJRCgpOwogfQogCi1QYXNzUmVmUHRyPFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcj4gUGxh
dGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tOjpjbG9uZShQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93
bmVyKSBjb25zdAorUmVmPFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1DQUxheWVy
UmVtb3RlQ3VzdG9tOjpjbG9uZShQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKSBjb25zdAog
ewogICAgIFJldGFpblB0cjxDQUxheWVyICo+IGNsb25lZExheWVyOwogICAgIGJvb2wgY29weUNv
bnRlbnRzID0gdHJ1ZTsKQEAgLTEzMyw3ICsxMzMsNyBAQCBQYXNzUmVmUHRyPFdlYkNvcmU6OlBs
YXRmb3JtQ0FMYXllcj4gUGxhCiAgICAgdXBkYXRlQ2xvbmVkTGF5ZXJQcm9wZXJ0aWVzKGNsb25l
LmdldCgpLCBjb3B5Q29udGVudHMpOwogCiAgICAgY2xvbmUtPnNldENsb25lZExheWVyKHRoaXMp
OwotICAgIHJldHVybiBXVEZNb3ZlKGNsb25lKTsKKyAgICByZXR1cm4gY2xvbmU7CiB9CiAKIENG
VHlwZVJlZiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b206OmNvbnRlbnRzKCkgY29uc3QK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309378</attachid>
            <date>2017-05-08 10:42:24 -0700</date>
            <delta_ts>2017-05-08 11:30:17 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171809-20170508104223.patch</filename>
            <type>text/plain</type>
            <size>49619</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDE3LTA1LTA4ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVkdWNlIFBh
c3NSZWZQdHIgdXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzE4MDkKKworICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBEdW1lei4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OmNyZWF0ZUNvbXBhdGlibGVMYXllck9yVGFrZUZyb21Q
b29sKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlQ292ZXJhZ2VNYXAuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGlsZUNvdmVyYWdlTWFwOjpUaWxlQ292ZXJhZ2VNYXApOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVHcmlkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRpbGVHcmlkOjpUaWxlR3JpZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29j
b2EvUGxhdGZvcm1DQUxheWVyQ29jb2EuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5tbToKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXll
ckNvY29hOjpjcmVhdGUpOgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyQ29jb2E6OmNsb25lKToK
KyAgICAgICAgKFBsYXRmb3JtQ0FMYXllckNvY29hOjphbmltYXRpb25Gb3JLZXkpOgorICAgICAg
ICAoUGxhdGZvcm1DQUxheWVyQ29jb2E6OmNyZWF0ZUNvbXBhdGlibGVMYXllcik6CisKIDIwMTct
MDUtMDcgIEJlbiBLZWxseSAgPGJlbkB3YW5kZXJ2aWV3LmNvbT4KIAogICAgICAgICBTZXQgdGhl
IFJlc3BvbnNlLmJsb2IoKSB0eXBlIGJhc2VkIG9uIHRoZSBjb250ZW50LXR5cGUgaGVhZGVyIHZh
bHVlLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NM
YXllckNBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCShyZXZpc2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNTYsNyArMzU2LDcgQEAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IEdyYXBo
aWNzTGF5ZQogICAgIGlmIChyZXN1bHQtPmNhbkhhdmVCYWNraW5nU3RvcmUoKSkKICAgICAgICAg
cmVzdWx0LT5zZXRXYW50c0RlZXBDb2xvckJhY2tpbmdTdG9yZShzY3JlZW5TdXBwb3J0c0V4dGVu
ZGVkQ29sb3IoKSk7CiAgICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gV1RGTW92
ZShyZXN1bHQpOwogI2VsaWYgUExBVEZPUk0oV0lOKQogICAgIHJldHVybiBQbGF0Zm9ybUNBTGF5
ZXJXaW46OmNyZWF0ZShsYXllclR5cGUsIG93bmVyKTsKICNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIu
Y3BwCShyZXZpc2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9QbGF0Zm9ybUNBTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsMTkgKzE2Nywx
NiBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6ZHJhd1RleHRBdFBvaW50KENHCiAgICAgQ1RMaW5l
RHJhdyhsaW5lLmdldCgpLCBjb250ZXh0KTsKIH0KIAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5
ZXI+IFBsYXRmb3JtQ0FMYXllcjo6Y3JlYXRlQ29tcGF0aWJsZUxheWVyT3JUYWtlRnJvbVBvb2wo
UGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGUgbGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGll
bnQqIGNsaWVudCwgSW50U2l6ZSBzaXplKQorUmVmPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1D
QUxheWVyOjpjcmVhdGVDb21wYXRpYmxlTGF5ZXJPclRha2VGcm9tUG9vbChQbGF0Zm9ybUNBTGF5
ZXI6OkxheWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogY2xpZW50LCBJ
bnRTaXplIHNpemUpCiB7Ci0gICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gbGF5ZXI7Ci0KLSAg
ICBpZiAoKGxheWVyID0gbGF5ZXJQb29sKCkudGFrZUxheWVyV2l0aFNpemUoc2l6ZSkpKSB7Ci0g
ICAgICAgIGxheWVyLT5zZXRPd25lcihjbGllbnQpOwotICAgICAgICByZXR1cm4gV1RGTW92ZShs
YXllcik7CisgICAgaWYgKGF1dG8gbGF5ZXJGcm9tUG9vbCA9IGxheWVyUG9vbCgpLnRha2VMYXll
cldpdGhTaXplKHNpemUpKSB7CisgICAgICAgIGxheWVyRnJvbVBvb2wtPnNldE93bmVyKGNsaWVu
dCk7CisgICAgICAgIHJldHVybiBsYXllckZyb21Qb29sLnJlbGVhc2VOb25OdWxsKCk7CiAgICAg
fQogCi0gICAgbGF5ZXIgPSBjcmVhdGVDb21wYXRpYmxlTGF5ZXIobGF5ZXJUeXBlLCBjbGllbnQp
OworICAgIGF1dG8gbGF5ZXIgPSBjcmVhdGVDb21wYXRpYmxlTGF5ZXIobGF5ZXJUeXBlLCBjbGll
bnQpOwogICAgIGxheWVyLT5zZXRCb3VuZHMoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSkp
OwotICAgIAotICAgIHJldHVybiBXVEZNb3ZlKGxheWVyKTsKKyAgICByZXR1cm4gbGF5ZXI7CiB9
CiAKIHZvaWQgUGxhdGZvcm1DQUxheWVyOjptb3ZlVG9MYXllclBvb2woKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVy
LmgJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL1BsYXRmb3JtQ0FMYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAj
aW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUgPFF1YXJ0ekNvcmUvQ0FCYXNlLmg+
CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KICNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CkBAIC04Miw3ICs4MSw3IEBAIHB1YmxpYzoK
ICAgICB9OwogICAgIGVudW0gRmlsdGVyVHlwZSB7IExpbmVhciwgTmVhcmVzdCwgVHJpbGluZWFy
IH07CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBjbG9uZShQbGF0
Zm9ybUNBTGF5ZXJDbGllbnQqKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBSZWY8UGxhdGZvcm1D
QUxheWVyPiBjbG9uZShQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKSBjb25zdCA9IDA7CiAKICAgICB2
aXJ0dWFsIH5QbGF0Zm9ybUNBTGF5ZXIoKTsKIApAQCAtMTMyLDcgKzEzMSw3IEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgdm9pZCBhZGRBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXks
IFBsYXRmb3JtQ0FBbmltYXRpb24mKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1h
dGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBhbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkp
ID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBhbmltYXRpb25G
b3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNr
KFBsYXRmb3JtQ0FMYXllciopID0gMDsKIApAQCAtMjYwLDggKzI1OSw4IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldEFuY2hvclBvaW50T25NYWluVGhyZWFkKEZsb2F0UG9pbnQzRCk7CiAjZW5kaWYK
IAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZUNvbXBhdGli
bGVMYXllcihMYXllclR5cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCopIGNvbnN0ID0gMDsKLSAg
ICBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlQ29tcGF0aWJsZUxheWVyT3JUYWtl
RnJvbVBvb2woTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBjbGll
bnQsIEludFNpemUpOworICAgIHZpcnR1YWwgUmVmPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlQ29t
cGF0aWJsZUxheWVyKExheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KikgY29uc3QgPSAw
OworICAgIFJlZjxQbGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZUNvbXBhdGlibGVMYXllck9yVGFrZUZy
b21Qb29sKExheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiwgSW50U2l6ZSk7CiAKICNp
ZiBQTEFURk9STShDT0NPQSkKICAgICB2aXJ0dWFsIHZvaWQgZW51bWVyYXRlUmVjdHNCZWluZ0Ry
YXduKENHQ29udGV4dFJlZiwgdm9pZCAoXmJsb2NrKShDR1JlY3QpKSA9IDA7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlQ292ZXJhZ2VNYXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVDb3ZlcmFn
ZU1hcC5jcHAJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL1RpbGVDb3ZlcmFnZU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEwICsz
NSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBUaWxlQ292ZXJhZ2VNYXA6OlRpbGVDb3ZlcmFn
ZU1hcChjb25zdCBUaWxlQ29udHJvbGxlciYgY29udHJvbGxlcikKICAgICA6IG1fY29udHJvbGxl
cihjb250cm9sbGVyKQogICAgICwgbV91cGRhdGVUaW1lcigqdGhpcywgJlRpbGVDb3ZlcmFnZU1h
cDo6dXBkYXRlVGltZXJGaXJlZCkKLSAgICAsIG1fbGF5ZXIoKmNvbnRyb2xsZXIucm9vdExheWVy
KCkuY3JlYXRlQ29tcGF0aWJsZUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlU2ltcGxl
TGF5ZXIsIHRoaXMpKQotICAgICwgbV92aXNpYmxlVmlld3BvcnRJbmRpY2F0b3JMYXllcigqY29u
dHJvbGxlci5yb290TGF5ZXIoKS5jcmVhdGVDb21wYXRpYmxlTGF5ZXIoUGxhdGZvcm1DQUxheWVy
OjpMYXllclR5cGVMYXllciwgbnVsbHB0cikpCi0gICAgLCBtX2xheW91dFZpZXdwb3J0SW5kaWNh
dG9yTGF5ZXIoKmNvbnRyb2xsZXIucm9vdExheWVyKCkuY3JlYXRlQ29tcGF0aWJsZUxheWVyKFBs
YXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5ZXIsIG51bGxwdHIpKQotICAgICwgbV9jb3ZlcmFn
ZVJlY3RJbmRpY2F0b3JMYXllcigqY29udHJvbGxlci5yb290TGF5ZXIoKS5jcmVhdGVDb21wYXRp
YmxlTGF5ZXIoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVMYXllciwgbnVsbHB0cikpCisgICAg
LCBtX2xheWVyKGNvbnRyb2xsZXIucm9vdExheWVyKCkuY3JlYXRlQ29tcGF0aWJsZUxheWVyKFBs
YXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlU2ltcGxlTGF5ZXIsIHRoaXMpKQorICAgICwgbV92aXNp
YmxlVmlld3BvcnRJbmRpY2F0b3JMYXllcihjb250cm9sbGVyLnJvb3RMYXllcigpLmNyZWF0ZUNv
bXBhdGlibGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxheWVyLCBudWxscHRyKSkK
KyAgICAsIG1fbGF5b3V0Vmlld3BvcnRJbmRpY2F0b3JMYXllcihjb250cm9sbGVyLnJvb3RMYXll
cigpLmNyZWF0ZUNvbXBhdGlibGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxheWVy
LCBudWxscHRyKSkKKyAgICAsIG1fY292ZXJhZ2VSZWN0SW5kaWNhdG9yTGF5ZXIoY29udHJvbGxl
ci5yb290TGF5ZXIoKS5jcmVhdGVDb21wYXRpYmxlTGF5ZXIoUGxhdGZvcm1DQUxheWVyOjpMYXll
clR5cGVMYXllciwgbnVsbHB0cikpCiAgICAgLCBtX3Bvc2l0aW9uKEZsb2F0UG9pbnQoMCwgY29u
dHJvbGxlci50b3BDb250ZW50SW5zZXQoKSkpCiB7CiAgICAgbV9sYXllci5nZXQoKS5zZXRPcGFj
aXR5KDAuNzUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvVGls
ZUdyaWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL1RpbGVHcmlkLmNwcAkocmV2aXNpb24gMjE2NDE3KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUdyaWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2
NSw3IEBAIHN0YXRpYyBTdHJpbmcgdmFsaWRhdGlvblBvbGljeUFzU3RyaW5nKFQKIAogVGlsZUdy
aWQ6OlRpbGVHcmlkKFRpbGVDb250cm9sbGVyJiBjb250cm9sbGVyKQogICAgIDogbV9jb250cm9s
bGVyKGNvbnRyb2xsZXIpCi0gICAgLCBtX2NvbnRhaW5lckxheWVyKCpjb250cm9sbGVyLnJvb3RM
YXllcigpLmNyZWF0ZUNvbXBhdGlibGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxh
eWVyLCBudWxscHRyKSkKKyAgICAsIG1fY29udGFpbmVyTGF5ZXIoY29udHJvbGxlci5yb290TGF5
ZXIoKS5jcmVhdGVDb21wYXRpYmxlTGF5ZXIoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVMYXll
ciwgbnVsbHB0cikpCiAgICAgLCBtX2NvaG9ydFJlbW92YWxUaW1lcigqdGhpcywgJlRpbGVHcmlk
Ojpjb2hvcnRSZW1vdmFsVGltZXJGaXJlZCkKICAgICAsIG1fdGlsZVNpemUoa0RlZmF1bHRUaWxl
U2l6ZSwga0RlZmF1bHRUaWxlU2l6ZSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVy
Q29jb2EuaAkocmV2aXNpb24gMjE2NDE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVyQ29jb2EuaAkod29ya2luZyBjb3B5KQpAQCAt
MzMsMTEgKzMzLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUGxhdGZvcm1DQUxh
eWVyQ29jb2EgZmluYWwgOiBwdWJsaWMgUGxhdGZvcm1DQUxheWVyIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZShMYXllclR5cGUsIFBsYXRm
b3JtQ0FMYXllckNsaWVudCopOworICAgIHN0YXRpYyBSZWY8UGxhdGZvcm1DQUxheWVyPiBjcmVh
dGUoTGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKTsKICAgICAKICAgICAvLyBUaGlz
IGZ1bmN0aW9uIHBhc3NlcyB0aGUgbGF5ZXIgYXMgYSB2b2lkKiByYXRoZXIgdGhhbiBhIFBsYXRm
b3JtTGF5ZXIgYmVjYXVzZSBQbGF0Zm9ybUxheWVyCiAgICAgLy8gaXMgZGVmaW5lZCBkaWZmZXJl
bnRseSBmb3IgT2JqIEMgYW5kIEMrKy4gVGhpcyBhbGxvd3MgY2FsbGVycyBmcm9tIGJvdGggbGFu
Z3VhZ2VzLgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlKHZv
aWQqIHBsYXRmb3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCopOworICAgIHN0YXRpYyBS
ZWY8UGxhdGZvcm1DQUxheWVyPiBjcmVhdGUodm9pZCogcGxhdGZvcm1MYXllciwgUGxhdGZvcm1D
QUxheWVyQ2xpZW50Kik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgTGF5ZXJUeXBlIGxh
eWVyVHlwZUZvclBsYXRmb3JtTGF5ZXIoUGxhdGZvcm1MYXllciopOwogCkBAIC02Miw3ICs2Miw3
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWRkQW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYg
a2V5LCBQbGF0Zm9ybUNBQW5pbWF0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCByZW1vdmVBbmlt
YXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOwotICAgIFBhc3NSZWZQdHI8
UGxhdGZvcm1DQUFuaW1hdGlvbj4gYW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5KSBv
dmVycmlkZTsKKyAgICBSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gYW5pbWF0aW9uRm9yS2V5
KGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKICAgICB2b2lkIGFuaW1hdGlvblN0YXJ0ZWQo
Y29uc3QgU3RyaW5nJiBrZXksIENGVGltZUludGVydmFsIGJlZ2luVGltZSkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBhbmltYXRpb25FbmRlZChjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7CiAKQEAg
LTE2OSw5ICsxNjksOSBAQCBwdWJsaWM6CiAKICAgICBUaWxlZEJhY2tpbmcqIHRpbGVkQmFja2lu
ZygpIG92ZXJyaWRlOwogCi0gICAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IGNsb25lKFBs
YXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZjxQbGF0
Zm9ybUNBTGF5ZXI+IGNsb25lKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0IG92
ZXJyaWRlOwogCi0gICAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZUNvbXBhdGli
bGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50
KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlQ29tcGF0
aWJsZUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGll
bnQqKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgZW51bWVyYXRlUmVjdHNCZWluZ0RyYXdu
KENHQ29udGV4dFJlZiwgdm9pZCAoXmJsb2NrKShDR1JlY3QpKSBvdmVycmlkZTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVy
Q29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvY29jb2EvUGxhdGZvcm1DQUxheWVyQ29jb2EubW0JKHJldmlzaW9uIDIxNjQxNykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNv
Y29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02OSwxNCArNjksMTQgQEAgU09GVF9MSU5LX0NMQVNT
X09QVElPTkFMKEFWRm91bmRhdGlvbiwgQQogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAot
UGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllckNvY29hOjpjcmVhdGUo
TGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikKK1JlZjxQ
bGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllckNvY29hOjpjcmVhdGUoTGF5ZXJUeXBlIGxh
eWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikKIHsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFBsYXRmb3JtQ0FMYXllckNvY29hKGxheWVyVHlwZSwgb3duZXIpKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBQbGF0Zm9ybUNBTGF5ZXJDb2NvYShsYXllclR5cGUsIG93bmVy
KSk7CiB9CiAKLVBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJDb2Nv
YTo6Y3JlYXRlKHZvaWQqIHBsYXRmb3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3du
ZXIpCitSZWY8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y3JlYXRlKHZv
aWQqIHBsYXRmb3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBQbGF0Zm9ybUNBTGF5ZXJDb2NvYShzdGF0aWNfY2FzdDxQbGF0
Zm9ybUxheWVyKj4ocGxhdGZvcm1MYXllciksIG93bmVyKSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgUGxhdGZvcm1DQUxheWVyQ29jb2Eoc3RhdGljX2Nhc3Q8UGxhdGZvcm1MYXllcio+KHBs
YXRmb3JtTGF5ZXIpLCBvd25lcikpOwogfQogCiBzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBwbGF0
Zm9ybUNBTGF5ZXJQb2ludGVyID0gQCJXS1BsYXRmb3JtQ0FMYXllciI7CkBAIC0zMTEsNyArMzEx
LDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y29tbW9uSW5pdCgpCiAgICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi1QYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxh
dGZvcm1DQUxheWVyQ29jb2E6OmNsb25lKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNv
bnN0CitSZWY8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y2xvbmUoUGxh
dGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikgY29uc3QKIHsKICAgICBMYXllclR5cGUgdHlwZTsK
ICAgICBzd2l0Y2ggKGxheWVyVHlwZSgpKSB7CkBAIC0zMzIsNyArMzMyLDcgQEAgUGFzc1JlZlB0
cjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYQogICAgICAgICB0eXBlID0gTGF5ZXJUeXBl
TGF5ZXI7CiAgICAgICAgIGJyZWFrOwogICAgIH07Ci0gICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXll
cj4gbmV3TGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y3JlYXRlKHR5cGUsIG93bmVyKTsK
KyAgICBhdXRvIG5ld0xheWVyID0gUGxhdGZvcm1DQUxheWVyQ29jb2E6OmNyZWF0ZSh0eXBlLCBv
d25lcik7CiAgICAgCiAgICAgbmV3TGF5ZXItPnNldFBvc2l0aW9uKHBvc2l0aW9uKCkpOwogICAg
IG5ld0xheWVyLT5zZXRCb3VuZHMoYm91bmRzKCkpOwpAQCAtMzUyLDcgKzM1Miw3IEBAIFBhc3NS
ZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGEKICAgICBpZiAodHlwZSA9PSBMYXll
clR5cGVBVlBsYXllckxheWVyKSB7CiAgICAgICAgIEFTU0VSVChbbmV3TGF5ZXItPnBsYXRmb3Jt
TGF5ZXIoKSBpc0tpbmRPZkNsYXNzOmdldEFWUGxheWVyTGF5ZXJDbGFzcygpXSk7CiAKLSAgICAg
ICAgQVZQbGF5ZXJMYXllciAqZGVzdGluYXRpb25QbGF5ZXJMYXllciA9IHN0YXRpY19jYXN0PFBs
YXRmb3JtQ0FMYXllckNvY29hICo+KG5ld0xheWVyLmdldCgpKS0+YXZQbGF5ZXJMYXllcigpOwor
ICAgICAgICBBVlBsYXllckxheWVyICpkZXN0aW5hdGlvblBsYXllckxheWVyID0gc3RhdGljX2Nh
c3Q8UGxhdGZvcm1DQUxheWVyQ29jb2EmPihuZXdMYXllci5nZXQoKSkuYXZQbGF5ZXJMYXllcigp
OwogICAgICAgICBBVlBsYXllckxheWVyICpzb3VyY2VQbGF5ZXJMYXllciA9IGF2UGxheWVyTGF5
ZXIoKTsKICAgICAgICAgQVNTRVJUKHNvdXJjZVBsYXllckxheWVyKTsKIApAQCAtNTA4LDExICs1
MDgsMTEgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6cmVtb3ZlQW5pbWF0aQogICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0
aW9uPiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6YW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYg
a2V5KQorUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IFBsYXRmb3JtQ0FMYXllckNvY29hOjph
bmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpCiB7CiAgICAgQ0FQcm9wZXJ0eUFuaW1h
dGlvbiogcHJvcGVydHlBbmltYXRpb24gPSBzdGF0aWNfY2FzdDxDQVByb3BlcnR5QW5pbWF0aW9u
Kj4oW21fbGF5ZXIgYW5pbWF0aW9uRm9yS2V5OmtleV0pOwogICAgIGlmICghcHJvcGVydHlBbmlt
YXRpb24pCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBy
ZXR1cm4gUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpjcmVhdGUocHJvcGVydHlBbmltYXRpb24p
OwogfQogCkBAIC0xMTkwLDcgKzExOTAsNyBAQCBDR1JlY3QgUGxhdGZvcm1DQUxheWVyOjpmcmFt
ZUZvckxheWVyKGNvCiAgICAgcmV0dXJuIFt0aWxlTGF5ZXIgZnJhbWVdOwogfQogCi1QYXNzUmVm
UHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1DQUxheWVyQ29jb2E6OmNyZWF0ZUNvbXBhdGli
bGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3JtQ0FM
YXllckNsaWVudCogY2xpZW50KSBjb25zdAorUmVmPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1D
QUxheWVyQ29jb2E6OmNyZWF0ZUNvbXBhdGlibGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVy
VHlwZSBsYXllclR5cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogY2xpZW50KSBjb25zdAogewog
ICAgIHJldHVybiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y3JlYXRlKGxheWVyVHlwZSwgY2xpZW50
KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0
Zm9ybUNBTGF5ZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCShyZXZpc2lvbiAyMTY0MTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxh
eWVyV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTQgKzQ3LDE0IEBACiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCi1QYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1D
QUxheWVyV2luOjpjcmVhdGUoTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xp
ZW50KiBvd25lcikKK1JlZjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllcldpbjo6Y3Jl
YXRlKExheWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQbGF0Zm9ybUNBTGF5ZXJXaW4obGF5ZXJUeXBlLCBu
dWxscHRyLCBvd25lcikpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBsYXRmb3JtQ0FMYXll
cldpbihsYXllclR5cGUsIG51bGxwdHIsIG93bmVyKSk7CiB9CiAKLVBhc3NSZWZQdHI8UGxhdGZv
cm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJXaW46OmNyZWF0ZShQbGF0Zm9ybUxheWVyKiBwbGF0
Zm9ybUxheWVyLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKQorUmVmPFBsYXRmb3JtQ0FM
YXllcj4gUGxhdGZvcm1DQUxheWVyV2luOjpjcmVhdGUoUGxhdGZvcm1MYXllciogcGxhdGZvcm1M
YXllciwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikKIHsKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFBsYXRmb3JtQ0FMYXllcldpbihMYXllclR5cGVDdXN0b20sIHBsYXRmb3JtTGF5ZXIs
IG93bmVyKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGxhdGZvcm1DQUxheWVyV2luKExh
eWVyVHlwZUN1c3RvbSwgcGxhdGZvcm1MYXllciwgb3duZXIpKTsKIH0KIAogc3RhdGljIENGU3Ry
aW5nUmVmIHRvQ0FDRkxheWVyVHlwZShQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSB0eXBlKQpA
QCAtMTgxLDExICsxODEsMTEgQEAgUGxhdGZvcm1DQUxheWVyV2luOjp+UGxhdGZvcm1DQUxheWVy
V2luKAogICAgIGRlbGV0ZSBsYXllckludGVybjsKIH0KIAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNB
TGF5ZXI+IFBsYXRmb3JtQ0FMYXllcldpbjo6Y2xvbmUoUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBv
d25lcikgY29uc3QKK1JlZjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllcldpbjo6Y2xv
bmUoUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikgY29uc3QKIHsKICAgICBQbGF0Zm9ybUNB
TGF5ZXI6OkxheWVyVHlwZSB0eXBlID0gKGxheWVyVHlwZSgpID09IFBsYXRmb3JtQ0FMYXllcjo6
TGF5ZXJUeXBlVHJhbnNmb3JtTGF5ZXIpID8KICAgICAgICAgUGxhdGZvcm1DQUxheWVyOjpMYXll
clR5cGVUcmFuc2Zvcm1MYXllciA6IFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5ZXI7Ci0g
ICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gbmV3TGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXJXaW46
OmNyZWF0ZSh0eXBlLCBvd25lcik7CisgICAgYXV0byBuZXdMYXllciA9IFBsYXRmb3JtQ0FMYXll
cldpbjo6Y3JlYXRlKHR5cGUsIG93bmVyKTsKIAogICAgIG5ld0xheWVyLT5zZXRQb3NpdGlvbihw
b3NpdGlvbigpKTsKICAgICBuZXdMYXllci0+c2V0Qm91bmRzKGJvdW5kcygpKTsKQEAgLTM1Myw3
ICszNTMsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6cmVtb3ZlQW5pbWF0aW9uCiAgICAg
c2V0TmVlZHNDb21taXQoKTsKIH0KIAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBQ
bGF0Zm9ybUNBTGF5ZXJXaW46OmFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkKK1Jl
ZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBQbGF0Zm9ybUNBTGF5ZXJXaW46OmFuaW1hdGlvbkZv
cktleShjb25zdCBTdHJpbmcmIGtleSkKIHsKICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFBs
YXRmb3JtQ0FBbmltYXRpb24+ID46Oml0ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25zLmZpbmQoa2V5
KTsKICAgICBpZiAoaXQgPT0gbV9hbmltYXRpb25zLmVuZCgpKQpAQCAtOTM5LDcgKzkzOSw3IEBA
IFN0cmluZyBQbGF0Zm9ybUNBTGF5ZXJXaW46OmxheWVyVHJlZUFzU3QKICAgICByZXR1cm4gYnVp
bGRlci50b1N0cmluZygpOwogfQogCi1QYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZv
cm1DQUxheWVyV2luOjpjcmVhdGVDb21wYXRpYmxlTGF5ZXIoUGxhdGZvcm1DQUxheWVyOjpMYXll
clR5cGUgbGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIGNsaWVudCkgY29uc3QKK1Jl
ZjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllcldpbjo6Y3JlYXRlQ29tcGF0aWJsZUxh
eWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVy
Q2xpZW50KiBjbGllbnQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFBsYXRmb3JtQ0FMYXllcldpbjo6
Y3JlYXRlKGxheWVyVHlwZSwgY2xpZW50KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2lu
LmgJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIs
OCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFBsYXRmb3JtQ0FMYXllcldpbiBmaW5h
bCA6IHB1YmxpYyBQbGF0Zm9ybUNBTGF5ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlKExheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xp
ZW50Kik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBjcmVhdGUoUGxh
dGZvcm1MYXllciosIFBsYXRmb3JtQ0FMYXllckNsaWVudCopOworICAgIHN0YXRpYyBSZWY8UGxh
dGZvcm1DQUxheWVyPiBjcmVhdGUoTGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKTsK
KyAgICBzdGF0aWMgUmVmPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlKFBsYXRmb3JtTGF5ZXIqLCBQ
bGF0Zm9ybUNBTGF5ZXJDbGllbnQqKTsKICAgICAKICAgICB+UGxhdGZvcm1DQUxheWVyV2luKCk7
CiAKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGRBbmltYXRpb25Gb3JL
ZXkoY29uc3QgU3RyaW5nJiBrZXksIFBsYXRmb3JtQ0FBbmltYXRpb24mKSBvdmVycmlkZTsKICAg
ICB2b2lkIHJlbW92ZUFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7
Ci0gICAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBhbmltYXRpb25Gb3JLZXkoY29u
c3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOworICAgIFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9u
PiBhbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOwogICAgIHZvaWQg
YW5pbWF0aW9uU3RhcnRlZChjb25zdCBTdHJpbmcmIGtleSwgQ0ZUaW1lSW50ZXJ2YWwgYmVnaW5U
aW1lKSBvdmVycmlkZTsKICAgICB2b2lkIGFuaW1hdGlvbkVuZGVkKGNvbnN0IFN0cmluZyYga2V5
KSBvdmVycmlkZTsKIApAQCAtMTY1LDkgKzE2NSw5IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBs
YXllclRyZWVBc1N0cmluZygpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgUGFzc1JlZlB0cjxQbGF0
Zm9ybUNBTGF5ZXI+IGNsb25lKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0IG92
ZXJyaWRlOworICAgIFJlZjxQbGF0Zm9ybUNBTGF5ZXI+IGNsb25lKFBsYXRmb3JtQ0FMYXllckNs
aWVudCogb3duZXIpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNB
TGF5ZXI+IGNyZWF0ZUNvbXBhdGlibGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSwg
UGxhdGZvcm1DQUxheWVyQ2xpZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPFBsYXRmb3Jt
Q0FMYXllcj4gY3JlYXRlQ29tcGF0aWJsZUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBl
LCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAg
ICBQbGF0Zm9ybUNBTGF5ZXJXaW4oTGF5ZXJUeXBlLCBQbGF0Zm9ybUxheWVyKiwgUGxhdGZvcm1D
QUxheWVyQ2xpZW50KiBvd25lcik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTY0MjYpCisr
KyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1NCBA
QAorMjAxNy0wNS0wOCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3Jn
PgorCisgICAgICAgIFJlZHVjZSBQYXNzUmVmUHRyIHVzZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxODA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Q2hyaXMgRHVtZXouCisKKyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQ
cm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6c2V0SW5p
dGlhbGl6YXRpb25SZXBseSk6CisgICAgICAgICogUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9s
bGVyUHJveHkuaDoKKyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9u
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmRlc3Ryb3lQbHVn
aW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Y3JlYXRlUGx1Z2lu
KToKKyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uLmg6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OnJ1bk9wZW5QYW5lbCk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnJlZ2lzdGVyVW5kb1N0ZXApOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5jcHA6CisgICAgICAg
IChXZWJLaXQ6OlZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyOjpnZXRPckNyZWF0ZSk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLmg6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViRnJhbWU6OmhpdFRlc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZTo6Y3JlYXRl
U2VsZWN0aW9uU25hcHNob3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFt
ZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJPcGVuUGFuZWxSZXN1bHRMaXN0
ZW5lci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcjo6V2Vi
T3BlblBhbmVsUmVzdWx0TGlzdGVuZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dW5hcHBseUVkaXRDb21t
YW5kKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVhcHBseUVkaXRDb21tYW5kKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlR3JvdXBQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViVW5kb1N0ZXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJVbmRvU3RlcDo6Y3Jl
YXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVW5kb1N0ZXAuaDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViVW5kb1N0ZXA6OnN0ZXApOgorICAgICAgICAoV2ViS2l0OjpXZWJVbmRv
U3RlcDo6V2ViVW5kb1N0ZXApOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxh
dGZvcm1DQUxheWVyUmVtb3RlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGxhdGZvcm1DQUxheWVy
UmVtb3RlOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6
OmNsb25lKToKKyAgICAgICAgKFdlYktpdDo6UGxhdGZvcm1DQUxheWVyUmVtb3RlOjphbmltYXRp
b25Gb3JLZXkpOgorICAgICAgICAoV2ViS2l0OjpQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNyZWF0
ZUNvbXBhdGlibGVMYXllcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0
Zm9ybUNBTGF5ZXJSZW1vdGUuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1Bs
YXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tLm1tOgorICAgICAgICAoV2ViS2l0OjpQ
bGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b206OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBs
YXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbTo6Y2xvbmUpOgorCiAyMDE3LTA1LTA4ICBDaHJpcyBE
dW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSAnc3R5bGUnIGZyb20gRWxl
bWVudCB0byBIVE1MRWxlbWVudCAvIFNWR0VsZW1lbnQgYW5kIG1ha2UgaXQgc2V0dGFibGUKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRy
b2xsZXJQcm94eS5jcHAJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJLaXQyL1BsdWdp
blByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEs
MTAgKzkxLDEwIEBAIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6flBsdWdpbkNvbnRyb2xsZXIKICAg
ICAgICAgcmVsZWFzZU5QT2JqZWN0KG1fcGx1Z2luRWxlbWVudE5QT2JqZWN0KTsKIH0KIAotdm9p
ZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OnNldEluaXRpYWxpemF0aW9uUmVwbHkoUGFzc1JlZlB0
cjxNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkNyZWF0ZVBsdWdpbjo6RGVsYXllZFJl
cGx5PiByZXBseSkKK3ZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpzZXRJbml0aWFsaXphdGlv
blJlcGx5KFJlZjxNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkNyZWF0ZVBsdWdpbjo6
RGVsYXllZFJlcGx5PiYmIHJlcGx5KQogewogICAgIEFTU0VSVCghbV9pbml0aWFsaXphdGlvblJl
cGx5KTsKLSAgICBtX2luaXRpYWxpemF0aW9uUmVwbHkgPSByZXBseTsKKyAgICBtX2luaXRpYWxp
emF0aW9uUmVwbHkgPSBXVEZNb3ZlKHJlcGx5KTsKIH0KIAogUmVmUHRyPE1lc3NhZ2VzOjpXZWJQ
cm9jZXNzQ29ubmVjdGlvbjo6Q3JlYXRlUGx1Z2luOjpEZWxheWVkUmVwbHk+IFBsdWdpbkNvbnRy
b2xsZXJQcm94eTo6dGFrZUluaXRpYWxpemF0aW9uUmVwbHkoKQpJbmRleDogU291cmNlL1dlYktp
dDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5oCShyZXZp
c2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRy
b2xsZXJQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKIAog
ICAgIGJvb2wgaXNJbml0aWFsaXppbmcoKSBjb25zdCB7IHJldHVybiBtX2lzSW5pdGlhbGl6aW5n
OyB9CiAgICAgCi0gICAgdm9pZCBzZXRJbml0aWFsaXphdGlvblJlcGx5KFBhc3NSZWZQdHI8TWVz
c2FnZXM6OldlYlByb2Nlc3NDb25uZWN0aW9uOjpDcmVhdGVQbHVnaW46OkRlbGF5ZWRSZXBseT4p
OworICAgIHZvaWQgc2V0SW5pdGlhbGl6YXRpb25SZXBseShSZWY8TWVzc2FnZXM6OldlYlByb2Nl
c3NDb25uZWN0aW9uOjpDcmVhdGVQbHVnaW46OkRlbGF5ZWRSZXBseT4mJik7CiAgICAgUmVmUHRy
PE1lc3NhZ2VzOjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Q3JlYXRlUGx1Z2luOjpEZWxheWVkUmVw
bHk+IHRha2VJbml0aWFsaXphdGlvblJlcGx5KCk7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uLmNw
cAkocmV2aXNpb24gMjE2NDE3KQorKysgU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9XZWJQ
cm9jZXNzQ29ubmVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw3ICsxNzYsNyBAQCB2
b2lkIFdlYlByb2Nlc3NDb25uZWN0aW9uOjpkaWRDbG9zZShJUEM6CiAgICAgICAgIGRlc3Ryb3lQ
bHVnaW5Db250cm9sbGVyUHJveHkocGx1Z2luQ29udHJvbGxlcnNbaV0pOwogfQogCi12b2lkIFdl
YlByb2Nlc3NDb25uZWN0aW9uOjpkZXN0cm95UGx1Z2luKHVpbnQ2NF90IHBsdWdpbkluc3RhbmNl
SUQsIGJvb2wgYXN5bmNocm9ub3VzQ3JlYXRpb25JbmNvbXBsZXRlLCBQYXNzUmVmUHRyPE1lc3Nh
Z2VzOjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6RGVzdHJveVBsdWdpbjo6RGVsYXllZFJlcGx5PiBy
ZXBseSkKK3ZvaWQgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmRlc3Ryb3lQbHVnaW4odWludDY0X3Qg
cGx1Z2luSW5zdGFuY2VJRCwgYm9vbCBhc3luY2hyb25vdXNDcmVhdGlvbkluY29tcGxldGUsIFJl
ZjxNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkRlc3Ryb3lQbHVnaW46OkRlbGF5ZWRS
ZXBseT4mJiByZXBseSkKIHsKICAgICAvLyBXZSByZXR1cm4gaW1tZWRpYXRlbHkgZnJvbSB0aGlz
IHN5bmNocm9ub3VzIElQQy4gV2Ugd2FudCB0byBtYWtlIHN1cmUgdGhlIHBsdWdpbiBkZXN0cnVj
dGlvbiBpcyBqdXN0IGFib3V0IHRvIHN0YXJ0IHNvIGF1ZGlvIHBsYXliYWNrCiAgICAgLy8gd2ls
bCBmaW5pc2ggc29vbiBhZnRlciByZXR1cm5pbmcuIEhvd2V2ZXIgd2UgZG9uJ3Qgd2FudCB0byB3
YWl0IGZvciBkZXN0cnVjdGlvbiB0byBjb21wbGV0ZSBmdWxseSBhcyB0aGF0IG1heSB0YWtlIGEg
d2hpbGUuCkBAIC0yMjksNyArMjI5LDcgQEAgdm9pZCBXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Y3Jl
YXRlUGx1Z2luSQogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmNyZWF0
ZVBsdWdpbihjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmIGNyZWF0aW9uUGFyYW1ldGVy
cywgUGFzc1JlZlB0cjxNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkNyZWF0ZVBsdWdp
bjo6RGVsYXllZFJlcGx5PiByZXBseSkKK3ZvaWQgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmNyZWF0
ZVBsdWdpbihjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmIGNyZWF0aW9uUGFyYW1ldGVy
cywgUmVmPE1lc3NhZ2VzOjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Q3JlYXRlUGx1Z2luOjpEZWxh
eWVkUmVwbHk+JiYgcmVwbHkpCiB7CiAgICAgLy8gRW5zdXJlIHdlIGRvbid0IGNsYW1wIGFueSB0
aW1lcnMgZHVyaW5nIGluaXRpYWxpemF0aW9uCiAgICAgQWN0aXZpdHlBc3NlcnRpb24gYWN0aXZp
dHlBc3NlcnRpb24oUGx1Z2luUHJvY2Vzczo6c2luZ2xldG9uKCkuY29ubmVjdGlvbkFjdGl2aXR5
KCkpOwpAQCAtMjQwLDcgKzI0MCw3IEBAIHZvaWQgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmNyZWF0
ZVBsdWdpbigKICAgICBpZiAocGx1Z2luQ29udHJvbGxlclByb3h5KSB7CiAgICAgICAgIC8vIEl0
IG1pZ2h0IHN0aWxsIGJlIGluIHRoZSBtaWRkbGUgb2YgaW5pdGlhbGl6YXRpb24gaW4gd2hpY2gg
Y2FzZSB3ZSBoYXZlIHRvIGxldCB0aGF0IGluaXRpYWxpemF0aW9uIGNvbXBsZXRlIGFuZCByZXNw
b25kIHRvIHRoaXMgbWVzc2FnZSBsYXRlci4KICAgICAgICAgaWYgKHBsdWdpbkNvbnRyb2xsZXJQ
cm94eS0+aXNJbml0aWFsaXppbmcoKSkgewotICAgICAgICAgICAgcGx1Z2luQ29udHJvbGxlclBy
b3h5LT5zZXRJbml0aWFsaXphdGlvblJlcGx5KHJlcGx5KTsKKyAgICAgICAgICAgIHBsdWdpbkNv
bnRyb2xsZXJQcm94eS0+c2V0SW5pdGlhbGl6YXRpb25SZXBseShXVEZNb3ZlKHJlcGx5KSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9XZWJQcm9jZXNzQ29ubmVjdGlvbi5oCShyZXZp
c2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3ND
b25uZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFdlYlByb2Nlc3NDb25uZWN0
aW9uX2gKLSNkZWZpbmUgV2ViUHJvY2Vzc0Nvbm5lY3Rpb25faAorI3ByYWdtYSBvbmNlCiAKICNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIApAQCAtNzAsOSArNjksOSBAQCBwcml2YXRl
OgogICAgIC8vIE1lc3NhZ2UgaGFuZGxlcnMuCiAgICAgdm9pZCBkaWRSZWNlaXZlV2ViUHJvY2Vz
c0Nvbm5lY3Rpb25NZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwogICAg
IHZvaWQgZGlkUmVjZWl2ZVN5bmNXZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKTsK
LSAgICB2b2lkIGNyZWF0ZVBsdWdpbihjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmLCBQ
YXNzUmVmUHRyPE1lc3NhZ2VzOjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Q3JlYXRlUGx1Z2luOjpE
ZWxheWVkUmVwbHk+KTsKKyAgICB2b2lkIGNyZWF0ZVBsdWdpbihjb25zdCBQbHVnaW5DcmVhdGlv
blBhcmFtZXRlcnMmLCBSZWY8TWVzc2FnZXM6OldlYlByb2Nlc3NDb25uZWN0aW9uOjpDcmVhdGVQ
bHVnaW46OkRlbGF5ZWRSZXBseT4mJik7CiAgICAgdm9pZCBjcmVhdGVQbHVnaW5Bc3luY2hyb25v
dXNseShjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICB2b2lkIGRlc3Ryb3lQ
bHVnaW4odWludDY0X3QgcGx1Z2luSW5zdGFuY2VJRCwgYm9vbCBhc3luY2hyb25vdXNDcmVhdGlv
bkluY29tcGxldGUsIFBhc3NSZWZQdHI8TWVzc2FnZXM6OldlYlByb2Nlc3NDb25uZWN0aW9uOjpE
ZXN0cm95UGx1Z2luOjpEZWxheWVkUmVwbHk+KTsKKyAgICB2b2lkIGRlc3Ryb3lQbHVnaW4odWlu
dDY0X3QgcGx1Z2luSW5zdGFuY2VJRCwgYm9vbCBhc3luY2hyb25vdXNDcmVhdGlvbkluY29tcGxl
dGUsIFJlZjxNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkRlc3Ryb3lQbHVnaW46OkRl
bGF5ZWRSZXBseT4mJik7CiAgICAgCiAgICAgdm9pZCBjcmVhdGVQbHVnaW5JbnRlcm5hbChjb25z
dCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmLCBib29sJiByZXN1bHQsIGJvb2wmIHdhbnRzV2hl
ZWxFdmVudHMsIHVpbnQzMl90JiByZW1vdGVMYXllckNsaWVudElEKTsKIApAQCAtODYsNiArODUs
MyBAQCBwcml2YXRlOgogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKLQotCi0jZW5kaWYgLy8gV2ViUHJvY2Vzc0Nvbm5lY3Rpb25f
aApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkocmV2aXNpb24gMjE2NDE3KQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03NzMsNyArNzczLDcgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6
OnJ1bk9wZW5QYW5lbChGcmFtZQogICAgIGlmIChtX3BhZ2UuYWN0aXZlT3BlblBhbmVsUmVzdWx0
TGlzdGVuZXIoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wYWdlLnNldEFjdGl2ZU9wZW5Q
YW5lbFJlc3VsdExpc3RlbmVyKFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyOjpjcmVhdGUoJm1f
cGFnZSwgJmZpbGVDaG9vc2VyKSk7CisgICAgbV9wYWdlLnNldEFjdGl2ZU9wZW5QYW5lbFJlc3Vs
dExpc3RlbmVyKFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyOjpjcmVhdGUobV9wYWdlLCBmaWxl
Q2hvb3NlcikpOwogCiAgICAgYXV0byogd2ViRnJhbWUgPSBXZWJGcmFtZTo6ZnJvbUNvcmVGcmFt
ZShmcmFtZSk7CiAgICAgQVNTRVJUKHdlYkZyYW1lKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5jcHAJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDgg
KzI0NSw4IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZWdpc3RlclVuZG9TdGVwKFUKICAgICBp
ZiAobV9wYWdlLT5pc0luUmVkbygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHdlYlN0
ZXAgPSBXZWJVbmRvU3RlcDo6Y3JlYXRlKCZzdGVwKTsKLSAgICBhdXRvIGVkaXRBY3Rpb24gPSBz
dGF0aWNfY2FzdDx1aW50MzJfdD4od2ViU3RlcC0+c3RlcCgpLT5lZGl0aW5nQWN0aW9uKCkpOwor
ICAgIGF1dG8gd2ViU3RlcCA9IFdlYlVuZG9TdGVwOjpjcmVhdGUoc3RlcCk7CisgICAgYXV0byBl
ZGl0QWN0aW9uID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHdlYlN0ZXAtPnN0ZXAoKS5lZGl0aW5n
QWN0aW9uKCkpOwogCiAgICAgbV9wYWdlLT5hZGRXZWJVbmRvU3RlcCh3ZWJTdGVwLT5zdGVwSUQo
KSwgd2ViU3RlcC5wdHIoKSk7CiAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OlJlZ2lzdGVyRWRpdENvbW1hbmRGb3JVbmRvKHdlYlN0ZXAtPnN0ZXBJRCgpLCBlZGl0QWN0
aW9uKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExp
bmtUYWJsZUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIx
NjQxNykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1Rh
YmxlQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDE2ICs0NCwxNiBAQCBzdGF0
aWMgSGFzaE1hcDx1aW50NjRfdCwgVmlzaXRlZExpbmtUYWJsCiAgICAgcmV0dXJuIHZpc2l0ZWRM
aW5rVGFibGVDb250cm9sbGVyczsKIH0KIAotUGFzc1JlZlB0cjxWaXNpdGVkTGlua1RhYmxlQ29u
dHJvbGxlcj4gVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXI6OmdldE9yQ3JlYXRlKHVpbnQ2NF90
IGlkZW50aWZpZXIpCitSZWY8VmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXI+IFZpc2l0ZWRMaW5r
VGFibGVDb250cm9sbGVyOjpnZXRPckNyZWF0ZSh1aW50NjRfdCBpZGVudGlmaWVyKQogewogICAg
IGF1dG8mIHZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyUHRyID0gdmlzaXRlZExpbmtUYWJsZUNv
bnRyb2xsZXJzKCkuYWRkKGlkZW50aWZpZXIsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAg
ICBpZiAodmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXJQdHIpCi0gICAgICAgIHJldHVybiB2aXNp
dGVkTGlua1RhYmxlQ29udHJvbGxlclB0cjsKKyAgICAgICAgcmV0dXJuICp2aXNpdGVkTGlua1Rh
YmxlQ29udHJvbGxlclB0cjsKIAogICAgIGF1dG8gdmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIg
PSBhZG9wdFJlZigqbmV3IFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyKGlkZW50aWZpZXIpKTsK
ICAgICB2aXNpdGVkTGlua1RhYmxlQ29udHJvbGxlclB0ciA9IHZpc2l0ZWRMaW5rVGFibGVDb250
cm9sbGVyLnB0cigpOwogCi0gICAgcmV0dXJuIFdURk1vdmUodmlzaXRlZExpbmtUYWJsZUNvbnRy
b2xsZXIpOworICAgIHJldHVybiB2aXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjsKIH0KIAogVmlz
aXRlZExpbmtUYWJsZUNvbnRyb2xsZXI6OlZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyKHVpbnQ2
NF90IGlkZW50aWZpZXIpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
VmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIuaAkocmV2aXNp
b24gMjE2NDE3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRM
aW5rVGFibGVDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDcgQEAKICAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFZpc2l0ZWRM
aW5rVGFibGVDb250cm9sbGVyX2gKLSNkZWZpbmUgVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXJf
aAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKICNpbmNsdWRl
ICJTaGFyZWRNZW1vcnkuaCIKQEAgLTM1LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAK
IGNsYXNzIFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyIGZpbmFsIDogcHVibGljIFdlYkNvcmU6
OlZpc2l0ZWRMaW5rU3RvcmUgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcj4gZ2V0
T3JDcmVhdGUodWludDY0X3QgaWRlbnRpZmllcik7CisgICAgc3RhdGljIFJlZjxWaXNpdGVkTGlu
a1RhYmxlQ29udHJvbGxlcj4gZ2V0T3JDcmVhdGUodWludDY0X3QgaWRlbnRpZmllcik7CiAgICAg
dmlydHVhbCB+VmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIoKTsKIAogcHJpdmF0ZToKQEAgLTU4
LDUgKzU3LDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5k
aWYgLy8gVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXJfaApJbmRleDogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCShyZXZpc2lvbiAyMTY0MTcpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02MDMsMTAgKzYwMywxMCBAQCBib29sIFdlYkZyYW1lOjpoYXNWZXJ0aWNhbFNj
cm9sbGJhcigpIGNvCiAgICAgcmV0dXJuIHZpZXctPnZlcnRpY2FsU2Nyb2xsYmFyKCk7CiB9CiAK
LVBhc3NSZWZQdHI8SW5qZWN0ZWRCdW5kbGVIaXRUZXN0UmVzdWx0PiBXZWJGcmFtZTo6aGl0VGVz
dChjb25zdCBJbnRQb2ludCBwb2ludCkgY29uc3QKK1JlZlB0cjxJbmplY3RlZEJ1bmRsZUhpdFRl
c3RSZXN1bHQ+IFdlYkZyYW1lOjpoaXRUZXN0KGNvbnN0IEludFBvaW50IHBvaW50KSBjb25zdAog
ewogICAgIGlmICghbV9jb3JlRnJhbWUpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQ6OmNy
ZWF0ZShtX2NvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQocG9p
bnQsIEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSB8IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUgfCBI
aXRUZXN0UmVxdWVzdDo6SWdub3JlQ2xpcHBpbmcgfCBIaXRUZXN0UmVxdWVzdDo6RGlzYWxsb3dV
c2VyQWdlbnRTaGFkb3dDb250ZW50KSk7CiB9CkBAIC04MTgsNyArODE4LDcgQEAgUmV0YWluUHRy
PENGRGF0YVJlZj4gV2ViRnJhbWU6OndlYkFyY2hpdgogfQogI2VuZGlmCiAKLVBhc3NSZWZQdHI8
U2hhcmVhYmxlQml0bWFwPiBXZWJGcmFtZTo6Y3JlYXRlU2VsZWN0aW9uU25hcHNob3QoKSBjb25z
dAorUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gV2ViRnJhbWU6OmNyZWF0ZVNlbGVjdGlvblNuYXBz
aG90KCkgY29uc3QKIHsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHNuYXBzaG90
ID0gc25hcHNob3RTZWxlY3Rpb24oKmNvcmVGcmFtZSgpLCBXZWJDb3JlOjpTbmFwc2hvdE9wdGlv
bnNGb3JjZUJsYWNrVGV4dCk7CiAgICAgaWYgKCFzbmFwc2hvdCkKQEAgLTgzNSw3ICs4MzUsNyBA
QCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gV2ViRnJhbWU6OmNyCiAgICAgZ3JhcGhpY3ND
b250ZXh0LT5zY2FsZShkZXZpY2VTY2FsZUZhY3Rvcik7CiAgICAgZ3JhcGhpY3NDb250ZXh0LT5k
cmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoV1RGTW92ZShzbmFwc2hvdCksIEZsb2F0UG9pbnQoKSk7
CiAKLSAgICByZXR1cm4gV1RGTW92ZShzaGFyZWRTbmFwc2hvdCk7CisgICAgcmV0dXJuIHNoYXJl
ZFNuYXBzaG90OwogfQogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuaAkocmV2aXNpb24gMjE2NDE3
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCi0jaWZuZGVmIFdlYkZyYW1lX2gKLSNkZWZpbmUgV2ViRnJhbWVfaAorI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlICJBUElPYmplY3QuaCIKICNpbmNsdWRlICJEb3dubG9hZElE
LmgiCkBAIC0zNiw3ICszNSw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlclR5cGVz
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Qb2xpY3lDaGVja2VyLmg+CiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKQEAgLTExMSw3ICsxMDksNyBAQCBw
dWJsaWM6CiAgICAgV2ViQ29yZTo6SW50U2l6ZSBzY3JvbGxPZmZzZXQoKSBjb25zdDsKICAgICBi
b29sIGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdDsKICAgICBib29sIGhhc1ZlcnRpY2Fs
U2Nyb2xsYmFyKCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxJbmplY3RlZEJ1bmRsZUhpdFRlc3RS
ZXN1bHQ+IGhpdFRlc3QoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQpIGNvbnN0OworICAgIFJlZlB0
cjxJbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQ+IGhpdFRlc3QoY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQpIGNvbnN0OwogICAgIGJvb2wgZ2V0RG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3IoZG91Ymxl
KiByZWQsIGRvdWJsZSogZ3JlZW4sIGRvdWJsZSogYmx1ZSwgZG91YmxlKiBhbHBoYSk7CiAgICAg
Ym9vbCBjb250YWluc0FueUZvcm1FbGVtZW50cygpIGNvbnN0OwogICAgIGJvb2wgY29udGFpbnNB
bnlGb3JtQ29udHJvbHMoKSBjb25zdDsKQEAgLTE1OCw3ICsxNTYsNyBAQCBwdWJsaWM6CiAgICAg
UmV0YWluUHRyPENGRGF0YVJlZj4gd2ViQXJjaGl2ZURhdGEoRnJhbWVGaWx0ZXJGdW5jdGlvbiwg
dm9pZCogY29udGV4dCk7CiAjZW5kaWYKIAotICAgIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFw
PiBjcmVhdGVTZWxlY3Rpb25TbmFwc2hvdCgpIGNvbnN0OworICAgIFJlZlB0cjxTaGFyZWFibGVC
aXRtYXA+IGNyZWF0ZVNlbGVjdGlvblNuYXBzaG90KCkgY29uc3Q7CiAKICNpZiBQTEFURk9STShJ
T1MpCiAgICAgdWludDY0X3QgZmlyc3RMYXllclRyZWVUcmFuc2FjdGlvbklEQWZ0ZXJEaWRDb21t
aXRMb2FkKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdExheWVyVHJlZVRyYW5zYWN0aW9uSURBZnRl
ckRpZENvbW1pdExvYWQ7IH0KQEAgLTE4Niw1ICsxODQsMyBAQCBwcml2YXRlOgogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBXZWJGcmFtZV9oCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJPcGVu
UGFuZWxSZXN1bHRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDE4ICsyNiwxOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIldlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmgiCiAKKyNpbmNsdWRlIDxXZWJDb3Jl
L0ZpbGVDaG9vc2VyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JY29uLmg+CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCi1SZWY8V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI+IFdlYk9wZW5QYW5lbFJl
c3VsdExpc3RlbmVyOjpjcmVhdGUoV2ViUGFnZSogcGFnZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpG
aWxlQ2hvb3Nlcj4gZmlsZUNob29zZXIpCitSZWY8V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI+
IFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyOjpjcmVhdGUoV2ViUGFnZSYgcGFnZSwgUmVmPFdl
YkNvcmU6OkZpbGVDaG9vc2VyPiYmIGZpbGVDaG9vc2VyKQogewotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyKHBhZ2UsIGZpbGVDaG9vc2VyKSk7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIocGFnZSwg
V1RGTW92ZShmaWxlQ2hvb3NlcikpKTsKIH0KIAotV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI6
OldlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyKFdlYlBhZ2UqIHBhZ2UsIFBhc3NSZWZQdHI8V2Vi
Q29yZTo6RmlsZUNob29zZXI+IGZpbGVDaG9vc2VyKQotICAgIDogbV9wYWdlKHBhZ2UpCi0gICAg
LCBtX2ZpbGVDaG9vc2VyKGZpbGVDaG9vc2VyKQorV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI6
OldlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyKFdlYlBhZ2UmIHBhZ2UsIFJlZjxXZWJDb3JlOjpG
aWxlQ2hvb3Nlcj4mJiBmaWxlQ2hvb3NlcikKKyAgICA6IG1fcGFnZSgmcGFnZSkKKyAgICAsIG1f
ZmlsZUNob29zZXIoV1RGTW92ZShmaWxlQ2hvb3NlcikpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJPcGVuUGFu
ZWxSZXN1bHRMaXN0ZW5lci5oCShyZXZpc2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMjMsMTMgKzIzLDE1IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KIAotI2lmbmRlZiBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcl9oCi0jZGVmaW5l
IFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyX2gKKyNwcmFnbWEgb25jZQogCisjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVDaG9vc2VyLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBGaWxlQ2hvb3NlcjsKIGNs
YXNzIEljb247CiB9CiAKQEAgLTM5LDcgKzQxLDcgQEAgY2xhc3MgV2ViUGFnZTsKIAogY2xhc3Mg
V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJPcGVuUGFu
ZWxSZXN1bHRMaXN0ZW5lcj4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViT3BlblBhbmVs
UmVzdWx0TGlzdGVuZXI+IGNyZWF0ZShXZWJQYWdlKiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpGaWxl
Q2hvb3Nlcj4pOworICAgIHN0YXRpYyBSZWY8V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI+IGNy
ZWF0ZShXZWJQYWdlJiwgUmVmPFdlYkNvcmU6OkZpbGVDaG9vc2VyPiYmKTsKICAgICB+V2ViT3Bl
blBhbmVsUmVzdWx0TGlzdGVuZXIoKTsKIAogICAgIHZvaWQgZGlzY29ubmVjdEZyb21QYWdlKCkg
eyBtX3BhZ2UgPSAwOyB9CkBAIC00OSwxMyArNTEsMTAgQEAgcHVibGljOgogI2VuZGlmCiAKIHBy
aXZhdGU6Ci0gICAgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIoV2ViUGFnZSosIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6RmlsZUNob29zZXI+KTsKKyAgICBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5l
cihXZWJQYWdlJiwgUmVmPFdlYkNvcmU6OkZpbGVDaG9vc2VyPiYmKTsKIAogICAgIFdlYlBhZ2Uq
IG1fcGFnZTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6RmlsZUNob29zZXI+IG1fZmlsZUNob29zZXI7
CisgICAgUmVmPFdlYkNvcmU6OkZpbGVDaG9vc2VyPiBtX2ZpbGVDaG9vc2VyOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0Ci0KLQotI2VuZGlmIC8vIFdlYk9wZW5QYW5lbFJlc3VsdExpc3Rl
bmVyX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcxMCw3ICszNzEwLDcgQEAgdm9p
ZCBXZWJQYWdlOjp1bmFwcGx5RWRpdENvbW1hbmQodWludDY0XwogICAgIGlmICghc3RlcCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgc3RlcC0+c3RlcCgpLT51bmFwcGx5KCk7CisgICAgc3RlcC0+
c3RlcCgpLnVuYXBwbHkoKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpyZWFwcGx5RWRpdENvbW1hbmQo
dWludDY0X3Qgc3RlcElEKQpAQCAtMzcyMCw3ICszNzIwLDcgQEAgdm9pZCBXZWJQYWdlOjpyZWFw
cGx5RWRpdENvbW1hbmQodWludDY0XwogICAgICAgICByZXR1cm47CiAKICAgICBtX2lzSW5SZWRv
ID0gdHJ1ZTsKLSAgICBzdGVwLT5zdGVwKCktPnJlYXBwbHkoKTsKKyAgICBzdGVwLT5zdGVwKCku
cmVhcHBseSgpOwogICAgIG1faXNJblJlZG8gPSBmYWxzZTsKIH0KIApJbmRleDogU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHku
Y3BwCShyZXZpc2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZUdyb3VwUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxNCArMzUsMTQg
QEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVBhc3NSZWZQdHI8V2ViUGFnZUdyb3VwUHJveHk+
IFdlYlBhZ2VHcm91cFByb3h5OjpjcmVhdGUoY29uc3QgV2ViUGFnZUdyb3VwRGF0YSYgZGF0YSkK
K1JlZjxXZWJQYWdlR3JvdXBQcm94eT4gV2ViUGFnZUdyb3VwUHJveHk6OmNyZWF0ZShjb25zdCBX
ZWJQYWdlR3JvdXBEYXRhJiBkYXRhKQogewogICAgIGF1dG8gcGFnZUdyb3VwID0gYWRvcHRSZWYo
Km5ldyBXZWJQYWdlR3JvdXBQcm94eShkYXRhKSk7CiAKICAgICBpZiAocGFnZUdyb3VwLT5pc1Zp
c2libGVUb0luamVjdGVkQnVuZGxlKCkgJiYgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuaW5qZWN0
ZWRCdW5kbGUoKSkKICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuaW5qZWN0ZWRCdW5k
bGUoKS0+ZGlkSW5pdGlhbGl6ZVBhZ2VHcm91cChwYWdlR3JvdXAucHRyKCkpOwogCi0gICAgcmV0
dXJuIFdURk1vdmUocGFnZUdyb3VwKTsKKyAgICByZXR1cm4gcGFnZUdyb3VwOwogfQogCiBXZWJQ
YWdlR3JvdXBQcm94eTo6V2ViUGFnZUdyb3VwUHJveHkoY29uc3QgV2ViUGFnZUdyb3VwRGF0YSYg
ZGF0YSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3Jv
dXBQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlR3JvdXBQcm94eS5oCShyZXZpc2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuaAkod29ya2luZyBjb3B5KQpA
QCAtMjMsMTIgKzIzLDExIEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAg
Ki8KIAotI2lmbmRlZiBXZWJQYWdlR3JvdXBQcm94eV9oCi0jZGVmaW5lIFdlYlBhZ2VHcm91cFBy
b3h5X2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCiAjaW5jbHVkZSAi
V2ViUGFnZUdyb3VwRGF0YS5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBQYWdlR3JvdXA7CkBA
IC00MCw3ICszOSw3IEBAIGNsYXNzIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjsKIAogY2xhc3Mg
V2ViUGFnZUdyb3VwUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpU
eXBlOjpCdW5kbGVQYWdlR3JvdXA+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxX
ZWJQYWdlR3JvdXBQcm94eT4gY3JlYXRlKGNvbnN0IFdlYlBhZ2VHcm91cERhdGEmKTsKKyAgICBz
dGF0aWMgUmVmPFdlYlBhZ2VHcm91cFByb3h5PiBjcmVhdGUoY29uc3QgV2ViUGFnZUdyb3VwRGF0
YSYpOwogICAgIHZpcnR1YWwgfldlYlBhZ2VHcm91cFByb3h5KCk7CiAKICAgICBjb25zdCBTdHJp
bmcmIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuaWRlbnRpZmllcjsgfQpAQCAt
NjAsNSArNTksMyBAQCBwcml2YXRlOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNl
bmRpZiAvLyBXZWJQYWdlR3JvdXBQcm94eV9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViVW5kb1N0ZXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJVbmRvU3RlcC5jcHAJKHJldmlzaW9uIDIxNjQxNykKKysr
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJVbmRvU3RlcC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDkgKzM0LDkgQEAgc3RhdGljIHVpbnQ2NF90IGdlbmVyYXRlVW5kb1N0
ZXAoKQogICAgIHJldHVybiB1bmlxdWVFbnRyeUlEKys7CiB9CiAKLVJlZjxXZWJVbmRvU3RlcD4g
V2ViVW5kb1N0ZXA6OmNyZWF0ZShQYXNzUmVmUHRyPFdlYkNvcmU6OlVuZG9TdGVwPiBzdGVwKQor
UmVmPFdlYlVuZG9TdGVwPiBXZWJVbmRvU3RlcDo6Y3JlYXRlKFJlZjxXZWJDb3JlOjpVbmRvU3Rl
cD4mJiBzdGVwKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlVuZG9TdGVwKHN0ZXAs
IGdlbmVyYXRlVW5kb1N0ZXAoKSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlVuZG9T
dGVwKFdURk1vdmUoc3RlcCksIGdlbmVyYXRlVW5kb1N0ZXAoKSkpOwogfQogCiBXZWJVbmRvU3Rl
cDo6fldlYlVuZG9TdGVwKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJVbmRvU3RlcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJVbmRvU3RlcC5oCShyZXZpc2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVW5kb1N0ZXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjMs
MzQgKzIzLDMwIEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAot
I2lmbmRlZiBXZWJVbmRvU3RlcF9oCi0jZGVmaW5lIFdlYlVuZG9TdGVwX2gKKyNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSA8V2ViQ29yZS9VbmRvU3RlcC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYlVuZG9TdGVwIDogcHVibGljIFJlZkNvdW50
ZWQ8V2ViVW5kb1N0ZXA+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlVuZG9TdGVwPiBj
cmVhdGUoUGFzc1JlZlB0cjxXZWJDb3JlOjpVbmRvU3RlcD4pOworICAgIHN0YXRpYyBSZWY8V2Vi
VW5kb1N0ZXA+IGNyZWF0ZShSZWY8V2ViQ29yZTo6VW5kb1N0ZXA+JiYpOwogICAgIH5XZWJVbmRv
U3RlcCgpOwogCi0gICAgV2ViQ29yZTo6VW5kb1N0ZXAqIHN0ZXAoKSBjb25zdCB7IHJldHVybiBt
X3N0ZXAuZ2V0KCk7IH0KKyAgICBXZWJDb3JlOjpVbmRvU3RlcCYgc3RlcCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RlcC5nZXQoKTsgfQogICAgIHVpbnQ2NF90IHN0ZXBJRCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RlcElEOyB9CiAKIHByaXZhdGU6Ci0gICAgV2ViVW5kb1N0ZXAoUGFzc1JlZlB0cjxXZWJD
b3JlOjpVbmRvU3RlcD4gc3RlcCwgdWludDY0X3Qgc3RlcElEKQotICAgICAgICA6IG1fc3RlcChz
dGVwKQorICAgIFdlYlVuZG9TdGVwKFJlZjxXZWJDb3JlOjpVbmRvU3RlcD4mJiBzdGVwLCB1aW50
NjRfdCBzdGVwSUQpCisgICAgICAgIDogbV9zdGVwKFdURk1vdmUoc3RlcCkpCiAgICAgICAgICwg
bV9zdGVwSUQoc3RlcElEKQogICAgIHsKICAgICB9CiAKLSAgICBSZWZQdHI8V2ViQ29yZTo6VW5k
b1N0ZXA+IG1fc3RlcDsKKyAgICBSZWY8V2ViQ29yZTo6VW5kb1N0ZXA+IG1fc3RlcDsKICAgICB1
aW50NjRfdCBtX3N0ZXBJRDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYg
Ly8gV2ViRWRpdENvbW1hbmRfaApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL21hYy9HcmFwaGljc0xheWVyQ0FSZW1vdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvR3JhcGhpY3NMYXllckNBUmVtb3RlLmNwcAko
cmV2aXNpb24gMjE2NDE3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9HcmFwaGljc0xheWVyQ0FSZW1vdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3
IEBAIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBHcmFwaGljc0xheWUKICAgICBpZiAocmVz
dWx0LT5jYW5IYXZlQmFja2luZ1N0b3JlKCkpCiAgICAgICAgIHJlc3VsdC0+c2V0V2FudHNEZWVw
Q29sb3JCYWNraW5nU3RvcmUoc2NyZWVuU3VwcG9ydHNFeHRlbmRlZENvbG9yKCkpOwogCi0gICAg
cmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwogfQogCiBQYXNzUmVm
UHRyPFBsYXRmb3JtQ0FMYXllcj4gR3JhcGhpY3NMYXllckNBUmVtb3RlOjpjcmVhdGVQbGF0Zm9y
bUNBTGF5ZXIoUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllciwgUGxhdGZvcm1DQUxheWVyQ2xp
ZW50KiBvd25lcikKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
UGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5jcHAJKHJldmlzaW9u
IDIxNjQxNykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZv
cm1DQUxheWVyUmVtb3RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVBhc3NSZWZQdHI8
UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNyZWF0ZShMYXll
clR5cGUgbGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyLCBSZW1vdGVMYXll
clRyZWVDb250ZXh0JiBjb250ZXh0KQorUmVmPFBsYXRmb3JtQ0FMYXllclJlbW90ZT4gUGxhdGZv
cm1DQUxheWVyUmVtb3RlOjpjcmVhdGUoTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxh
eWVyQ2xpZW50KiBvd25lciwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYgY29udGV4dCkKIHsKICAg
ICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBsYXllcjsKIApAQCAtNTUsMjEgKzU1LDIx
IEBAIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBQbGF0Zm8KIAogICAgIGNvbnRl
eHQubGF5ZXJXYXNDcmVhdGVkKCpsYXllciwgbGF5ZXJUeXBlKTsKIAotICAgIHJldHVybiBXVEZN
b3ZlKGxheWVyKTsKKyAgICByZXR1cm4gbGF5ZXIucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotUGFz
c1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU+IFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6Y3Jl
YXRlKFBsYXRmb3JtTGF5ZXIgKnBsYXRmb3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCog
b3duZXIsIFJlbW90ZUxheWVyVHJlZUNvbnRleHQmIGNvbnRleHQpCitSZWY8UGxhdGZvcm1DQUxh
eWVyUmVtb3RlPiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNyZWF0ZShQbGF0Zm9ybUxheWVyICpw
bGF0Zm9ybUxheWVyLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyLCBSZW1vdGVMYXllclRy
ZWVDb250ZXh0JiBjb250ZXh0KQogewogICAgIHJldHVybiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVD
dXN0b206OmNyZWF0ZShwbGF0Zm9ybUxheWVyLCBvd25lciwgY29udGV4dCk7CiB9CiAKLVBhc3NS
ZWZQdHI8UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNyZWF0
ZShjb25zdCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUmIG90aGVyLCBXZWJDb3JlOjpQbGF0Zm9ybUNB
TGF5ZXJDbGllbnQqIG93bmVyLCBSZW1vdGVMYXllclRyZWVDb250ZXh0JiBjb250ZXh0KQorUmVm
PFBsYXRmb3JtQ0FMYXllclJlbW90ZT4gUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpjcmVhdGUoY29u
c3QgUGxhdGZvcm1DQUxheWVyUmVtb3RlJiBvdGhlciwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVy
Q2xpZW50KiBvd25lciwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBh
dXRvIGxheWVyID0gYWRvcHRSZWYoKm5ldyBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUob3RoZXIsIG93
bmVyLCBjb250ZXh0KSk7CiAKICAgICBjb250ZXh0LmxheWVyV2FzQ3JlYXRlZChsYXllci5nZXQo
KSwgb3RoZXIubGF5ZXJUeXBlKCkpOwogCi0gICAgcmV0dXJuIFdURk1vdmUobGF5ZXIpOworICAg
IHJldHVybiBsYXllcjsKIH0KIAogUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpQbGF0Zm9ybUNBTGF5
ZXJSZW1vdGUoTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25l
ciwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYgY29udGV4dCkKQEAgLTg5LDE0ICs4OSwxNCBAQCBQ
bGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OlBsYXRmb3JtQ0FMYXllclJlCiB7CiB9CiAKLVBhc3NSZWZQ
dHI8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNsb25lKFBsYXRmb3Jt
Q0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0CitSZWY8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9y
bUNBTGF5ZXJSZW1vdGU6OmNsb25lKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0
CiB7CiAgICAgYXV0byBjbG9uZSA9IFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6Y3JlYXRlKCp0aGlz
LCBvd25lciwgKm1fY29udGV4dCk7CiAKLSAgICB1cGRhdGVDbG9uZWRMYXllclByb3BlcnRpZXMo
KmNsb25lKTsKKyAgICB1cGRhdGVDbG9uZWRMYXllclByb3BlcnRpZXMoY2xvbmUpOwogCiAgICAg
Y2xvbmUtPnNldENsb25lZExheWVyKHRoaXMpOwotICAgIHJldHVybiBXVEZNb3ZlKGNsb25lKTsK
KyAgICByZXR1cm4gY2xvbmU7CiB9CiAKIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6flBsYXRmb3Jt
Q0FMYXllclJlbW90ZSgpCkBAIC0zNTcsNyArMzU3LDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJS
ZW1vdGU6OnJlbW92ZUFuaW1hdAogICAgIG1fcHJvcGVydGllcy5ub3RlUHJvcGVydGllc0NoYW5n
ZWQoUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkFuaW1hdGlvbnNDaGFuZ2VkKTsKIH0KIAot
UGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmFu
aW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkKK1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0
aW9uPiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcm
IGtleSkKIHsKICAgICByZXR1cm4gbV9hbmltYXRpb25zLmdldChrZXkpOwogfQpAQCAtODIxLDcg
KzgyMSw3IEBAIHZvaWQgUGxhdGZvcm1DQUxheWVyUmVtb3RlOjp1cGRhdGVDdXN0b20KICAgICBt
X3Byb3BlcnRpZXMubm90ZVByb3BlcnRpZXNDaGFuZ2VkKFJlbW90ZUxheWVyVHJlZVRyYW5zYWN0
aW9uOjpDdXN0b21BcHBlYXJhbmNlQ2hhbmdlZCk7CiB9CiAKLVBhc3NSZWZQdHI8UGxhdGZvcm1D
QUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNyZWF0ZUNvbXBhdGlibGVMYXllcihQbGF0
Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCog
Y2xpZW50KSBjb25zdAorUmVmPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1DQUxheWVyUmVtb3Rl
OjpjcmVhdGVDb21wYXRpYmxlTGF5ZXIoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGUgbGF5ZXJU
eXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIGNsaWVudCkgY29uc3QKIHsKICAgICByZXR1cm4g
UGxhdGZvcm1DQUxheWVyUmVtb3RlOjpjcmVhdGUobGF5ZXJUeXBlLCBjbGllbnQsICptX2NvbnRl
eHQpOwogfQpJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0
Zm9ybUNBTGF5ZXJSZW1vdGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5oCShyZXZpc2lvbiAyMTY0MTcp
CisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXll
clJlbW90ZS5oCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw5ICszOSw5IEBAIGNsYXNzIFJlbW90ZUxh
eWVyVHJlZUNvbnRleHQ7CiAKIGNsYXNzIFBsYXRmb3JtQ0FMYXllclJlbW90ZSA6IHB1YmxpYyBX
ZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVmUHRy
PFBsYXRmb3JtQ0FMYXllclJlbW90ZT4gY3JlYXRlKFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6
TGF5ZXJUeXBlLCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqLCBSZW1vdGVMYXllclRy
ZWVDb250ZXh0Jik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyUmVtb3Rl
PiBjcmVhdGUoUGxhdGZvcm1MYXllciAqLCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGllbnQq
LCBSZW1vdGVMYXllclRyZWVDb250ZXh0Jik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UGxhdGZv
cm1DQUxheWVyUmVtb3RlPiBjcmVhdGUoY29uc3QgUGxhdGZvcm1DQUxheWVyUmVtb3RlJiwgV2Vi
Q29yZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50KiwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYpOwor
ICAgIHN0YXRpYyBSZWY8UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBjcmVhdGUoV2ViQ29yZTo6UGxh
dGZvcm1DQUxheWVyOjpMYXllclR5cGUsIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllckNsaWVudCos
IFJlbW90ZUxheWVyVHJlZUNvbnRleHQmKTsKKyAgICBzdGF0aWMgUmVmPFBsYXRmb3JtQ0FMYXll
clJlbW90ZT4gY3JlYXRlKFBsYXRmb3JtTGF5ZXIgKiwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVy
Q2xpZW50KiwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYpOworICAgIHN0YXRpYyBSZWY8UGxhdGZv
cm1DQUxheWVyUmVtb3RlPiBjcmVhdGUoY29uc3QgUGxhdGZvcm1DQUxheWVyUmVtb3RlJiwgV2Vi
Q29yZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50KiwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYpOwog
CiAgICAgdmlydHVhbCB+UGxhdGZvcm1DQUxheWVyUmVtb3RlKCk7CiAKQEAgLTY2LDcgKzY2LDcg
QEAgcHVibGljOgogCiAgICAgdm9pZCBhZGRBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBr
ZXksIFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb24mKSBvdmVycmlkZTsKICAgICB2b2lkIHJl
bW92ZUFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7Ci0gICAgUGFz
c1JlZlB0cjxXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uPiBhbmltYXRpb25Gb3JLZXkoY29u
c3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOworICAgIFJlZlB0cjxXZWJDb3JlOjpQbGF0Zm9ybUNB
QW5pbWF0aW9uPiBhbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOwog
ICAgIHZvaWQgYW5pbWF0aW9uU3RhcnRlZChjb25zdCBTdHJpbmcmIGtleSwgQ0ZUaW1lSW50ZXJ2
YWwgYmVnaW5UaW1lKSBvdmVycmlkZTsKICAgICB2b2lkIGFuaW1hdGlvbkVuZGVkKGNvbnN0IFN0
cmluZyYga2V5KSBvdmVycmlkZTsKIApAQCAtMTc1LDkgKzE3NSw5IEBAIHB1YmxpYzoKIAogICAg
IFdlYkNvcmU6OlRpbGVkQmFja2luZyogdGlsZWRCYWNraW5nKCkgb3ZlcnJpZGUgeyByZXR1cm4g
bnVsbHB0cjsgfQogCi0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI+IGNs
b25lKFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0IG92ZXJyaWRl
OworICAgIFJlZjxXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI+IGNsb25lKFdlYkNvcmU6OlBsYXRm
b3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgUGFzc1JlZlB0
cjxQbGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZUNvbXBhdGlibGVMYXllcihXZWJDb3JlOjpQbGF0Zm9y
bUNBTGF5ZXI6OkxheWVyVHlwZSwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50KikgY29u
c3Qgb3ZlcnJpZGU7CisgICAgUmVmPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlQ29tcGF0aWJsZUxh
eWVyKFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlLCBXZWJDb3JlOjpQbGF0Zm9y
bUNBTGF5ZXJDbGllbnQqKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgZW51bWVyYXRlUmVj
dHNCZWluZ0RyYXduKENHQ29udGV4dFJlZiwgdm9pZCAoXmJsb2NrKShDR1JlY3QpKSBvdmVycmlk
ZTsKIApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9y
bUNBTGF5ZXJSZW1vdGVDdXN0b20uaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQ
cm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbS5oCShyZXZpc2lv
biAyMTY0MTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRm
b3JtQ0FMYXllclJlbW90ZUN1c3RvbS5oCSh3b3JraW5nIGNvcHkpCkBAIC0yMyw4ICsyMyw3IEBA
CiAgKiBPRiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZ
IE9GIFNVQ0ggREFNQUdFLgogICovCiAKLSNpZm5kZWYgUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3Vz
dG9tX2gKLSNkZWZpbmUgUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tX2gKKyNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSAiUGxhdGZvcm1DQUxheWVyUmVtb3RlLmgiCiAKQEAgLTM2LDcgKzM1LDcg
QEAgY2xhc3MgTGF5ZXJIb3N0aW5nQ29udGV4dDsKIGNsYXNzIFBsYXRmb3JtQ0FMYXllclJlbW90
ZUN1c3RvbSBmaW5hbCA6IHB1YmxpYyBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUgewogICAgIGZyaWVu
ZCBjbGFzcyBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NS
ZWZQdHI8UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBjcmVhdGUoUGxhdGZvcm1MYXllciAqLCBXZWJD
b3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqLCBSZW1vdGVMYXllclRyZWVDb250ZXh0Jik7Cisg
ICAgc3RhdGljIFJlZjxQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU+IGNyZWF0ZShQbGF0Zm9ybUxheWVy
ICosIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllckNsaWVudCosIFJlbW90ZUxheWVyVHJlZUNvbnRl
eHQmKTsKIAogICAgIHZpcnR1YWwgflBsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbSgpOwogCkBA
IC01MCw3ICs0OSw3IEBAIHB1YmxpYzoKIHByaXZhdGU6CiAgICAgUGxhdGZvcm1DQUxheWVyUmVt
b3RlQ3VzdG9tKFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlLCBQbGF0Zm9ybUxh
eWVyICosIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIsIFJlbW90ZUxheWVy
VHJlZUNvbnRleHQmKTsKIAotICAgIFBhc3NSZWZQdHI8V2ViQ29yZTo6UGxhdGZvcm1DQUxheWVy
PiBjbG9uZShXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKSBjb25zdCBvdmVy
cmlkZTsKKyAgICBSZWY8V2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyPiBjbG9uZShXZWJDb3JlOjpQ
bGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKSBjb25zdCBvdmVycmlkZTsKIAogICAgIGJvb2wg
aXNQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20oKSBjb25zdCBvdmVycmlkZSB7IHJldHVybiB0
cnVlOyB9CiAKQEAgLTY1LDUgKzY0LDMgQEAgcHJpdmF0ZToKIH0gLy8gbmFtZXNwYWNlIFdlYktp
dAogCiBTUEVDSUFMSVpFX1RZUEVfVFJBSVRTX1BMQVRGT1JNX0NBTEFZRVIoV2ViS2l0OjpQbGF0
Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20sIGlzUGxhdGZvcm1DQUxheWVyUmVtb3RlKCkpCi0KLSNl
bmRpZiAvLyBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b21faApJbmRleDogU291cmNlL1dlYktp
dDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20ubW0K
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0
Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20ubW0JKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9t
Lm1tCSh3b3JraW5nIGNvcHkpCkBAIC00NiwxMiArNDYsMTIgQEAgbmFtZXNwYWNlIFdlYktpdCB7
CiAKIHN0YXRpYyBOU1N0cmluZyAqIGNvbnN0IHBsYXRmb3JtQ0FMYXllclBvaW50ZXIgPSBAIldL
UGxhdGZvcm1DQUxheWVyIjsKIAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU+IFBs
YXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbTo6Y3JlYXRlKFBsYXRmb3JtTGF5ZXIgKnBsYXRmb3Jt
TGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIsIFJlbW90ZUxheWVyVHJlZUNvbnRl
eHQmIGNvbnRleHQpCitSZWY8UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBQbGF0Zm9ybUNBTGF5ZXJS
ZW1vdGVDdXN0b206OmNyZWF0ZShQbGF0Zm9ybUxheWVyICpwbGF0Zm9ybUxheWVyLCBQbGF0Zm9y
bUNBTGF5ZXJDbGllbnQqIG93bmVyLCBSZW1vdGVMYXllclRyZWVDb250ZXh0JiBjb250ZXh0KQog
ewogICAgIGF1dG8gbGF5ZXIgPSBhZG9wdFJlZigqbmV3IFBsYXRmb3JtQ0FMYXllclJlbW90ZUN1
c3RvbShQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6bGF5ZXJUeXBlRm9yUGxhdGZvcm1MYXllcihwbGF0
Zm9ybUxheWVyKSwgcGxhdGZvcm1MYXllciwgb3duZXIsIGNvbnRleHQpKTsKICAgICBjb250ZXh0
LmxheWVyV2FzQ3JlYXRlZChsYXllci5nZXQoKSwgbGF5ZXItPmxheWVyVHlwZSgpKTsKIAotICAg
IHJldHVybiBXVEZNb3ZlKGxheWVyKTsKKyAgICByZXR1cm4gbGF5ZXI7CiB9CiAKIFBsYXRmb3Jt
Q0FMYXllclJlbW90ZUN1c3RvbTo6UGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tKExheWVyVHlw
ZSBsYXllclR5cGUsIFBsYXRmb3JtTGF5ZXIgKiBjdXN0b21MYXllciwgUGxhdGZvcm1DQUxheWVy
Q2xpZW50KiBvd25lciwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYgY29udGV4dCkKQEAgLTEwMCw3
ICsxMDAsNyBAQCB1aW50MzJfdCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b206OmhvCiAgICAg
cmV0dXJuIG1fbGF5ZXJIb3N0aW5nQ29udGV4dC0+Y29udGV4dElEKCk7CiB9CiAKLVBhc3NSZWZQ
dHI8V2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b206
OmNsb25lKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0CitSZWY8V2ViQ29yZTo6
UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b206OmNsb25lKFBsYXRm
b3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0CiB7CiAgICAgUmV0YWluUHRyPENBTGF5ZXIg
Kj4gY2xvbmVkTGF5ZXI7CiAgICAgYm9vbCBjb3B5Q29udGVudHMgPSB0cnVlOwpAQCAtMTMzLDcg
KzEzMyw3IEBAIFBhc3NSZWZQdHI8V2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyPiBQbGEKICAgICB1
cGRhdGVDbG9uZWRMYXllclByb3BlcnRpZXMoY2xvbmUuZ2V0KCksIGNvcHlDb250ZW50cyk7CiAK
ICAgICBjbG9uZS0+c2V0Q2xvbmVkTGF5ZXIodGhpcyk7Ci0gICAgcmV0dXJuIFdURk1vdmUoY2xv
bmUpOworICAgIHJldHVybiBjbG9uZTsKIH0KIAogQ0ZUeXBlUmVmIFBsYXRmb3JtQ0FMYXllclJl
bW90ZUN1c3RvbTo6Y29udGVudHMoKSBjb25zdAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309384</attachid>
            <date>2017-05-08 11:30:19 -0700</date>
            <delta_ts>2017-05-08 11:31:36 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171809-20170508113018.patch</filename>
            <type>text/plain</type>
            <size>49546</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDE3LTA1LTA4ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVkdWNlIFBh
c3NSZWZQdHIgdXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzE4MDkKKworICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBEdW1lei4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OmNyZWF0ZUNvbXBhdGlibGVMYXllck9yVGFrZUZyb21Q
b29sKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlQ292ZXJhZ2VNYXAuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGlsZUNvdmVyYWdlTWFwOjpUaWxlQ292ZXJhZ2VNYXApOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVHcmlkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRpbGVHcmlkOjpUaWxlR3JpZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29j
b2EvUGxhdGZvcm1DQUxheWVyQ29jb2EuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5tbToKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXll
ckNvY29hOjpjcmVhdGUpOgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyQ29jb2E6OmNsb25lKToK
KyAgICAgICAgKFBsYXRmb3JtQ0FMYXllckNvY29hOjphbmltYXRpb25Gb3JLZXkpOgorICAgICAg
ICAoUGxhdGZvcm1DQUxheWVyQ29jb2E6OmNyZWF0ZUNvbXBhdGlibGVMYXllcik6CisKIDIwMTct
MDUtMDcgIEJlbiBLZWxseSAgPGJlbkB3YW5kZXJ2aWV3LmNvbT4KIAogICAgICAgICBTZXQgdGhl
IFJlc3BvbnNlLmJsb2IoKSB0eXBlIGJhc2VkIG9uIHRoZSBjb250ZW50LXR5cGUgaGVhZGVyIHZh
bHVlLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NM
YXllckNBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCShyZXZpc2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNTYsNyArMzU2LDcgQEAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IEdyYXBo
aWNzTGF5ZQogICAgIGlmIChyZXN1bHQtPmNhbkhhdmVCYWNraW5nU3RvcmUoKSkKICAgICAgICAg
cmVzdWx0LT5zZXRXYW50c0RlZXBDb2xvckJhY2tpbmdTdG9yZShzY3JlZW5TdXBwb3J0c0V4dGVu
ZGVkQ29sb3IoKSk7CiAgICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gV1RGTW92
ZShyZXN1bHQpOwogI2VsaWYgUExBVEZPUk0oV0lOKQogICAgIHJldHVybiBQbGF0Zm9ybUNBTGF5
ZXJXaW46OmNyZWF0ZShsYXllclR5cGUsIG93bmVyKTsKICNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIu
Y3BwCShyZXZpc2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9QbGF0Zm9ybUNBTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsMTkgKzE2Nywx
NiBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6ZHJhd1RleHRBdFBvaW50KENHCiAgICAgQ1RMaW5l
RHJhdyhsaW5lLmdldCgpLCBjb250ZXh0KTsKIH0KIAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5
ZXI+IFBsYXRmb3JtQ0FMYXllcjo6Y3JlYXRlQ29tcGF0aWJsZUxheWVyT3JUYWtlRnJvbVBvb2wo
UGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGUgbGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGll
bnQqIGNsaWVudCwgSW50U2l6ZSBzaXplKQorUmVmPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1D
QUxheWVyOjpjcmVhdGVDb21wYXRpYmxlTGF5ZXJPclRha2VGcm9tUG9vbChQbGF0Zm9ybUNBTGF5
ZXI6OkxheWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogY2xpZW50LCBJ
bnRTaXplIHNpemUpCiB7Ci0gICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gbGF5ZXI7Ci0KLSAg
ICBpZiAoKGxheWVyID0gbGF5ZXJQb29sKCkudGFrZUxheWVyV2l0aFNpemUoc2l6ZSkpKSB7Ci0g
ICAgICAgIGxheWVyLT5zZXRPd25lcihjbGllbnQpOwotICAgICAgICByZXR1cm4gV1RGTW92ZShs
YXllcik7CisgICAgaWYgKGF1dG8gbGF5ZXJGcm9tUG9vbCA9IGxheWVyUG9vbCgpLnRha2VMYXll
cldpdGhTaXplKHNpemUpKSB7CisgICAgICAgIGxheWVyRnJvbVBvb2wtPnNldE93bmVyKGNsaWVu
dCk7CisgICAgICAgIHJldHVybiBsYXllckZyb21Qb29sLnJlbGVhc2VOb25OdWxsKCk7CiAgICAg
fQogCi0gICAgbGF5ZXIgPSBjcmVhdGVDb21wYXRpYmxlTGF5ZXIobGF5ZXJUeXBlLCBjbGllbnQp
OworICAgIGF1dG8gbGF5ZXIgPSBjcmVhdGVDb21wYXRpYmxlTGF5ZXIobGF5ZXJUeXBlLCBjbGll
bnQpOwogICAgIGxheWVyLT5zZXRCb3VuZHMoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSkp
OwotICAgIAotICAgIHJldHVybiBXVEZNb3ZlKGxheWVyKTsKKyAgICByZXR1cm4gbGF5ZXI7CiB9
CiAKIHZvaWQgUGxhdGZvcm1DQUxheWVyOjptb3ZlVG9MYXllclBvb2woKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVy
LmgJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL1BsYXRmb3JtQ0FMYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAj
aW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUgPFF1YXJ0ekNvcmUvQ0FCYXNlLmg+
CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KICNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CkBAIC04Miw3ICs4MSw3IEBAIHB1YmxpYzoK
ICAgICB9OwogICAgIGVudW0gRmlsdGVyVHlwZSB7IExpbmVhciwgTmVhcmVzdCwgVHJpbGluZWFy
IH07CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBjbG9uZShQbGF0
Zm9ybUNBTGF5ZXJDbGllbnQqKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBSZWY8UGxhdGZvcm1D
QUxheWVyPiBjbG9uZShQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKSBjb25zdCA9IDA7CiAKICAgICB2
aXJ0dWFsIH5QbGF0Zm9ybUNBTGF5ZXIoKTsKIApAQCAtMTMyLDcgKzEzMSw3IEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgdm9pZCBhZGRBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXks
IFBsYXRmb3JtQ0FBbmltYXRpb24mKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1h
dGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBhbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkp
ID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBhbmltYXRpb25G
b3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNr
KFBsYXRmb3JtQ0FMYXllciopID0gMDsKIApAQCAtMjYwLDggKzI1OSw4IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldEFuY2hvclBvaW50T25NYWluVGhyZWFkKEZsb2F0UG9pbnQzRCk7CiAjZW5kaWYK
IAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZUNvbXBhdGli
bGVMYXllcihMYXllclR5cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCopIGNvbnN0ID0gMDsKLSAg
ICBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlQ29tcGF0aWJsZUxheWVyT3JUYWtl
RnJvbVBvb2woTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBjbGll
bnQsIEludFNpemUpOworICAgIHZpcnR1YWwgUmVmPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlQ29t
cGF0aWJsZUxheWVyKExheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KikgY29uc3QgPSAw
OworICAgIFJlZjxQbGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZUNvbXBhdGlibGVMYXllck9yVGFrZUZy
b21Qb29sKExheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiwgSW50U2l6ZSk7CiAKICNp
ZiBQTEFURk9STShDT0NPQSkKICAgICB2aXJ0dWFsIHZvaWQgZW51bWVyYXRlUmVjdHNCZWluZ0Ry
YXduKENHQ29udGV4dFJlZiwgdm9pZCAoXmJsb2NrKShDR1JlY3QpKSA9IDA7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlQ292ZXJhZ2VNYXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVDb3ZlcmFn
ZU1hcC5jcHAJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL1RpbGVDb3ZlcmFnZU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEwICsz
NSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBUaWxlQ292ZXJhZ2VNYXA6OlRpbGVDb3ZlcmFn
ZU1hcChjb25zdCBUaWxlQ29udHJvbGxlciYgY29udHJvbGxlcikKICAgICA6IG1fY29udHJvbGxl
cihjb250cm9sbGVyKQogICAgICwgbV91cGRhdGVUaW1lcigqdGhpcywgJlRpbGVDb3ZlcmFnZU1h
cDo6dXBkYXRlVGltZXJGaXJlZCkKLSAgICAsIG1fbGF5ZXIoKmNvbnRyb2xsZXIucm9vdExheWVy
KCkuY3JlYXRlQ29tcGF0aWJsZUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlU2ltcGxl
TGF5ZXIsIHRoaXMpKQotICAgICwgbV92aXNpYmxlVmlld3BvcnRJbmRpY2F0b3JMYXllcigqY29u
dHJvbGxlci5yb290TGF5ZXIoKS5jcmVhdGVDb21wYXRpYmxlTGF5ZXIoUGxhdGZvcm1DQUxheWVy
OjpMYXllclR5cGVMYXllciwgbnVsbHB0cikpCi0gICAgLCBtX2xheW91dFZpZXdwb3J0SW5kaWNh
dG9yTGF5ZXIoKmNvbnRyb2xsZXIucm9vdExheWVyKCkuY3JlYXRlQ29tcGF0aWJsZUxheWVyKFBs
YXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5ZXIsIG51bGxwdHIpKQotICAgICwgbV9jb3ZlcmFn
ZVJlY3RJbmRpY2F0b3JMYXllcigqY29udHJvbGxlci5yb290TGF5ZXIoKS5jcmVhdGVDb21wYXRp
YmxlTGF5ZXIoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVMYXllciwgbnVsbHB0cikpCisgICAg
LCBtX2xheWVyKGNvbnRyb2xsZXIucm9vdExheWVyKCkuY3JlYXRlQ29tcGF0aWJsZUxheWVyKFBs
YXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlU2ltcGxlTGF5ZXIsIHRoaXMpKQorICAgICwgbV92aXNp
YmxlVmlld3BvcnRJbmRpY2F0b3JMYXllcihjb250cm9sbGVyLnJvb3RMYXllcigpLmNyZWF0ZUNv
bXBhdGlibGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxheWVyLCBudWxscHRyKSkK
KyAgICAsIG1fbGF5b3V0Vmlld3BvcnRJbmRpY2F0b3JMYXllcihjb250cm9sbGVyLnJvb3RMYXll
cigpLmNyZWF0ZUNvbXBhdGlibGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxheWVy
LCBudWxscHRyKSkKKyAgICAsIG1fY292ZXJhZ2VSZWN0SW5kaWNhdG9yTGF5ZXIoY29udHJvbGxl
ci5yb290TGF5ZXIoKS5jcmVhdGVDb21wYXRpYmxlTGF5ZXIoUGxhdGZvcm1DQUxheWVyOjpMYXll
clR5cGVMYXllciwgbnVsbHB0cikpCiAgICAgLCBtX3Bvc2l0aW9uKEZsb2F0UG9pbnQoMCwgY29u
dHJvbGxlci50b3BDb250ZW50SW5zZXQoKSkpCiB7CiAgICAgbV9sYXllci5nZXQoKS5zZXRPcGFj
aXR5KDAuNzUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvVGls
ZUdyaWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL1RpbGVHcmlkLmNwcAkocmV2aXNpb24gMjE2NDE3KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUdyaWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2
NSw3IEBAIHN0YXRpYyBTdHJpbmcgdmFsaWRhdGlvblBvbGljeUFzU3RyaW5nKFQKIAogVGlsZUdy
aWQ6OlRpbGVHcmlkKFRpbGVDb250cm9sbGVyJiBjb250cm9sbGVyKQogICAgIDogbV9jb250cm9s
bGVyKGNvbnRyb2xsZXIpCi0gICAgLCBtX2NvbnRhaW5lckxheWVyKCpjb250cm9sbGVyLnJvb3RM
YXllcigpLmNyZWF0ZUNvbXBhdGlibGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxh
eWVyLCBudWxscHRyKSkKKyAgICAsIG1fY29udGFpbmVyTGF5ZXIoY29udHJvbGxlci5yb290TGF5
ZXIoKS5jcmVhdGVDb21wYXRpYmxlTGF5ZXIoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVMYXll
ciwgbnVsbHB0cikpCiAgICAgLCBtX2NvaG9ydFJlbW92YWxUaW1lcigqdGhpcywgJlRpbGVHcmlk
Ojpjb2hvcnRSZW1vdmFsVGltZXJGaXJlZCkKICAgICAsIG1fdGlsZVNpemUoa0RlZmF1bHRUaWxl
U2l6ZSwga0RlZmF1bHRUaWxlU2l6ZSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVy
Q29jb2EuaAkocmV2aXNpb24gMjE2NDE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVyQ29jb2EuaAkod29ya2luZyBjb3B5KQpAQCAt
MzMsMTEgKzMzLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUGxhdGZvcm1DQUxh
eWVyQ29jb2EgZmluYWwgOiBwdWJsaWMgUGxhdGZvcm1DQUxheWVyIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZShMYXllclR5cGUsIFBsYXRm
b3JtQ0FMYXllckNsaWVudCopOworICAgIHN0YXRpYyBSZWY8UGxhdGZvcm1DQUxheWVyPiBjcmVh
dGUoTGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKTsKICAgICAKICAgICAvLyBUaGlz
IGZ1bmN0aW9uIHBhc3NlcyB0aGUgbGF5ZXIgYXMgYSB2b2lkKiByYXRoZXIgdGhhbiBhIFBsYXRm
b3JtTGF5ZXIgYmVjYXVzZSBQbGF0Zm9ybUxheWVyCiAgICAgLy8gaXMgZGVmaW5lZCBkaWZmZXJl
bnRseSBmb3IgT2JqIEMgYW5kIEMrKy4gVGhpcyBhbGxvd3MgY2FsbGVycyBmcm9tIGJvdGggbGFu
Z3VhZ2VzLgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlKHZv
aWQqIHBsYXRmb3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCopOworICAgIHN0YXRpYyBS
ZWY8UGxhdGZvcm1DQUxheWVyPiBjcmVhdGUodm9pZCogcGxhdGZvcm1MYXllciwgUGxhdGZvcm1D
QUxheWVyQ2xpZW50Kik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgTGF5ZXJUeXBlIGxh
eWVyVHlwZUZvclBsYXRmb3JtTGF5ZXIoUGxhdGZvcm1MYXllciopOwogCkBAIC02Miw3ICs2Miw3
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWRkQW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYg
a2V5LCBQbGF0Zm9ybUNBQW5pbWF0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCByZW1vdmVBbmlt
YXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOwotICAgIFBhc3NSZWZQdHI8
UGxhdGZvcm1DQUFuaW1hdGlvbj4gYW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5KSBv
dmVycmlkZTsKKyAgICBSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gYW5pbWF0aW9uRm9yS2V5
KGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKICAgICB2b2lkIGFuaW1hdGlvblN0YXJ0ZWQo
Y29uc3QgU3RyaW5nJiBrZXksIENGVGltZUludGVydmFsIGJlZ2luVGltZSkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBhbmltYXRpb25FbmRlZChjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7CiAKQEAg
LTE2OSw5ICsxNjksOSBAQCBwdWJsaWM6CiAKICAgICBUaWxlZEJhY2tpbmcqIHRpbGVkQmFja2lu
ZygpIG92ZXJyaWRlOwogCi0gICAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IGNsb25lKFBs
YXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZjxQbGF0
Zm9ybUNBTGF5ZXI+IGNsb25lKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0IG92
ZXJyaWRlOwogCi0gICAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZUNvbXBhdGli
bGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50
KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlQ29tcGF0
aWJsZUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGll
bnQqKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgZW51bWVyYXRlUmVjdHNCZWluZ0RyYXdu
KENHQ29udGV4dFJlZiwgdm9pZCAoXmJsb2NrKShDR1JlY3QpKSBvdmVycmlkZTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVy
Q29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvY29jb2EvUGxhdGZvcm1DQUxheWVyQ29jb2EubW0JKHJldmlzaW9uIDIxNjQxNykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNv
Y29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02OSwxNCArNjksMTQgQEAgU09GVF9MSU5LX0NMQVNT
X09QVElPTkFMKEFWRm91bmRhdGlvbiwgQQogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAot
UGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllckNvY29hOjpjcmVhdGUo
TGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikKK1JlZjxQ
bGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllckNvY29hOjpjcmVhdGUoTGF5ZXJUeXBlIGxh
eWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikKIHsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFBsYXRmb3JtQ0FMYXllckNvY29hKGxheWVyVHlwZSwgb3duZXIpKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBQbGF0Zm9ybUNBTGF5ZXJDb2NvYShsYXllclR5cGUsIG93bmVy
KSk7CiB9CiAKLVBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJDb2Nv
YTo6Y3JlYXRlKHZvaWQqIHBsYXRmb3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3du
ZXIpCitSZWY8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y3JlYXRlKHZv
aWQqIHBsYXRmb3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBQbGF0Zm9ybUNBTGF5ZXJDb2NvYShzdGF0aWNfY2FzdDxQbGF0
Zm9ybUxheWVyKj4ocGxhdGZvcm1MYXllciksIG93bmVyKSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgUGxhdGZvcm1DQUxheWVyQ29jb2Eoc3RhdGljX2Nhc3Q8UGxhdGZvcm1MYXllcio+KHBs
YXRmb3JtTGF5ZXIpLCBvd25lcikpOwogfQogCiBzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBwbGF0
Zm9ybUNBTGF5ZXJQb2ludGVyID0gQCJXS1BsYXRmb3JtQ0FMYXllciI7CkBAIC0zMTEsNyArMzEx
LDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y29tbW9uSW5pdCgpCiAgICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi1QYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxh
dGZvcm1DQUxheWVyQ29jb2E6OmNsb25lKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNv
bnN0CitSZWY8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y2xvbmUoUGxh
dGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikgY29uc3QKIHsKICAgICBMYXllclR5cGUgdHlwZTsK
ICAgICBzd2l0Y2ggKGxheWVyVHlwZSgpKSB7CkBAIC0zMzIsNyArMzMyLDcgQEAgUGFzc1JlZlB0
cjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYQogICAgICAgICB0eXBlID0gTGF5ZXJUeXBl
TGF5ZXI7CiAgICAgICAgIGJyZWFrOwogICAgIH07Ci0gICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXll
cj4gbmV3TGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y3JlYXRlKHR5cGUsIG93bmVyKTsK
KyAgICBhdXRvIG5ld0xheWVyID0gUGxhdGZvcm1DQUxheWVyQ29jb2E6OmNyZWF0ZSh0eXBlLCBv
d25lcik7CiAgICAgCiAgICAgbmV3TGF5ZXItPnNldFBvc2l0aW9uKHBvc2l0aW9uKCkpOwogICAg
IG5ld0xheWVyLT5zZXRCb3VuZHMoYm91bmRzKCkpOwpAQCAtMzUyLDcgKzM1Miw3IEBAIFBhc3NS
ZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGEKICAgICBpZiAodHlwZSA9PSBMYXll
clR5cGVBVlBsYXllckxheWVyKSB7CiAgICAgICAgIEFTU0VSVChbbmV3TGF5ZXItPnBsYXRmb3Jt
TGF5ZXIoKSBpc0tpbmRPZkNsYXNzOmdldEFWUGxheWVyTGF5ZXJDbGFzcygpXSk7CiAKLSAgICAg
ICAgQVZQbGF5ZXJMYXllciAqZGVzdGluYXRpb25QbGF5ZXJMYXllciA9IHN0YXRpY19jYXN0PFBs
YXRmb3JtQ0FMYXllckNvY29hICo+KG5ld0xheWVyLmdldCgpKS0+YXZQbGF5ZXJMYXllcigpOwor
ICAgICAgICBBVlBsYXllckxheWVyICpkZXN0aW5hdGlvblBsYXllckxheWVyID0gc3RhdGljX2Nh
c3Q8UGxhdGZvcm1DQUxheWVyQ29jb2EmPihuZXdMYXllci5nZXQoKSkuYXZQbGF5ZXJMYXllcigp
OwogICAgICAgICBBVlBsYXllckxheWVyICpzb3VyY2VQbGF5ZXJMYXllciA9IGF2UGxheWVyTGF5
ZXIoKTsKICAgICAgICAgQVNTRVJUKHNvdXJjZVBsYXllckxheWVyKTsKIApAQCAtNTA4LDExICs1
MDgsMTEgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6cmVtb3ZlQW5pbWF0aQogICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0
aW9uPiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6YW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYg
a2V5KQorUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IFBsYXRmb3JtQ0FMYXllckNvY29hOjph
bmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpCiB7CiAgICAgQ0FQcm9wZXJ0eUFuaW1h
dGlvbiogcHJvcGVydHlBbmltYXRpb24gPSBzdGF0aWNfY2FzdDxDQVByb3BlcnR5QW5pbWF0aW9u
Kj4oW21fbGF5ZXIgYW5pbWF0aW9uRm9yS2V5OmtleV0pOwogICAgIGlmICghcHJvcGVydHlBbmlt
YXRpb24pCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBy
ZXR1cm4gUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpjcmVhdGUocHJvcGVydHlBbmltYXRpb24p
OwogfQogCkBAIC0xMTkwLDcgKzExOTAsNyBAQCBDR1JlY3QgUGxhdGZvcm1DQUxheWVyOjpmcmFt
ZUZvckxheWVyKGNvCiAgICAgcmV0dXJuIFt0aWxlTGF5ZXIgZnJhbWVdOwogfQogCi1QYXNzUmVm
UHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1DQUxheWVyQ29jb2E6OmNyZWF0ZUNvbXBhdGli
bGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3JtQ0FM
YXllckNsaWVudCogY2xpZW50KSBjb25zdAorUmVmPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1D
QUxheWVyQ29jb2E6OmNyZWF0ZUNvbXBhdGlibGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVy
VHlwZSBsYXllclR5cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogY2xpZW50KSBjb25zdAogewog
ICAgIHJldHVybiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y3JlYXRlKGxheWVyVHlwZSwgY2xpZW50
KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0
Zm9ybUNBTGF5ZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCShyZXZpc2lvbiAyMTY0MTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxh
eWVyV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTQgKzQ3LDE0IEBACiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCi1QYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1D
QUxheWVyV2luOjpjcmVhdGUoTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xp
ZW50KiBvd25lcikKK1JlZjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllcldpbjo6Y3Jl
YXRlKExheWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQbGF0Zm9ybUNBTGF5ZXJXaW4obGF5ZXJUeXBlLCBu
dWxscHRyLCBvd25lcikpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBsYXRmb3JtQ0FMYXll
cldpbihsYXllclR5cGUsIG51bGxwdHIsIG93bmVyKSk7CiB9CiAKLVBhc3NSZWZQdHI8UGxhdGZv
cm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJXaW46OmNyZWF0ZShQbGF0Zm9ybUxheWVyKiBwbGF0
Zm9ybUxheWVyLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKQorUmVmPFBsYXRmb3JtQ0FM
YXllcj4gUGxhdGZvcm1DQUxheWVyV2luOjpjcmVhdGUoUGxhdGZvcm1MYXllciogcGxhdGZvcm1M
YXllciwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikKIHsKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFBsYXRmb3JtQ0FMYXllcldpbihMYXllclR5cGVDdXN0b20sIHBsYXRmb3JtTGF5ZXIs
IG93bmVyKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGxhdGZvcm1DQUxheWVyV2luKExh
eWVyVHlwZUN1c3RvbSwgcGxhdGZvcm1MYXllciwgb3duZXIpKTsKIH0KIAogc3RhdGljIENGU3Ry
aW5nUmVmIHRvQ0FDRkxheWVyVHlwZShQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSB0eXBlKQpA
QCAtMTgxLDExICsxODEsMTEgQEAgUGxhdGZvcm1DQUxheWVyV2luOjp+UGxhdGZvcm1DQUxheWVy
V2luKAogICAgIGRlbGV0ZSBsYXllckludGVybjsKIH0KIAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNB
TGF5ZXI+IFBsYXRmb3JtQ0FMYXllcldpbjo6Y2xvbmUoUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBv
d25lcikgY29uc3QKK1JlZjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllcldpbjo6Y2xv
bmUoUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikgY29uc3QKIHsKICAgICBQbGF0Zm9ybUNB
TGF5ZXI6OkxheWVyVHlwZSB0eXBlID0gKGxheWVyVHlwZSgpID09IFBsYXRmb3JtQ0FMYXllcjo6
TGF5ZXJUeXBlVHJhbnNmb3JtTGF5ZXIpID8KICAgICAgICAgUGxhdGZvcm1DQUxheWVyOjpMYXll
clR5cGVUcmFuc2Zvcm1MYXllciA6IFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5ZXI7Ci0g
ICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gbmV3TGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXJXaW46
OmNyZWF0ZSh0eXBlLCBvd25lcik7CisgICAgYXV0byBuZXdMYXllciA9IFBsYXRmb3JtQ0FMYXll
cldpbjo6Y3JlYXRlKHR5cGUsIG93bmVyKTsKIAogICAgIG5ld0xheWVyLT5zZXRQb3NpdGlvbihw
b3NpdGlvbigpKTsKICAgICBuZXdMYXllci0+c2V0Qm91bmRzKGJvdW5kcygpKTsKQEAgLTM1Myw3
ICszNTMsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6cmVtb3ZlQW5pbWF0aW9uCiAgICAg
c2V0TmVlZHNDb21taXQoKTsKIH0KIAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBQ
bGF0Zm9ybUNBTGF5ZXJXaW46OmFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkKK1Jl
ZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBQbGF0Zm9ybUNBTGF5ZXJXaW46OmFuaW1hdGlvbkZv
cktleShjb25zdCBTdHJpbmcmIGtleSkKIHsKICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFBs
YXRmb3JtQ0FBbmltYXRpb24+ID46Oml0ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25zLmZpbmQoa2V5
KTsKICAgICBpZiAoaXQgPT0gbV9hbmltYXRpb25zLmVuZCgpKQpAQCAtOTM5LDcgKzkzOSw3IEBA
IFN0cmluZyBQbGF0Zm9ybUNBTGF5ZXJXaW46OmxheWVyVHJlZUFzU3QKICAgICByZXR1cm4gYnVp
bGRlci50b1N0cmluZygpOwogfQogCi1QYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZv
cm1DQUxheWVyV2luOjpjcmVhdGVDb21wYXRpYmxlTGF5ZXIoUGxhdGZvcm1DQUxheWVyOjpMYXll
clR5cGUgbGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIGNsaWVudCkgY29uc3QKK1Jl
ZjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllcldpbjo6Y3JlYXRlQ29tcGF0aWJsZUxh
eWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVy
Q2xpZW50KiBjbGllbnQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFBsYXRmb3JtQ0FMYXllcldpbjo6
Y3JlYXRlKGxheWVyVHlwZSwgY2xpZW50KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2lu
LmgJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIs
OCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFBsYXRmb3JtQ0FMYXllcldpbiBmaW5h
bCA6IHB1YmxpYyBQbGF0Zm9ybUNBTGF5ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlKExheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xp
ZW50Kik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBjcmVhdGUoUGxh
dGZvcm1MYXllciosIFBsYXRmb3JtQ0FMYXllckNsaWVudCopOworICAgIHN0YXRpYyBSZWY8UGxh
dGZvcm1DQUxheWVyPiBjcmVhdGUoTGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKTsK
KyAgICBzdGF0aWMgUmVmPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlKFBsYXRmb3JtTGF5ZXIqLCBQ
bGF0Zm9ybUNBTGF5ZXJDbGllbnQqKTsKICAgICAKICAgICB+UGxhdGZvcm1DQUxheWVyV2luKCk7
CiAKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGRBbmltYXRpb25Gb3JL
ZXkoY29uc3QgU3RyaW5nJiBrZXksIFBsYXRmb3JtQ0FBbmltYXRpb24mKSBvdmVycmlkZTsKICAg
ICB2b2lkIHJlbW92ZUFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7
Ci0gICAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBhbmltYXRpb25Gb3JLZXkoY29u
c3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOworICAgIFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9u
PiBhbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOwogICAgIHZvaWQg
YW5pbWF0aW9uU3RhcnRlZChjb25zdCBTdHJpbmcmIGtleSwgQ0ZUaW1lSW50ZXJ2YWwgYmVnaW5U
aW1lKSBvdmVycmlkZTsKICAgICB2b2lkIGFuaW1hdGlvbkVuZGVkKGNvbnN0IFN0cmluZyYga2V5
KSBvdmVycmlkZTsKIApAQCAtMTY1LDkgKzE2NSw5IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBs
YXllclRyZWVBc1N0cmluZygpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgUGFzc1JlZlB0cjxQbGF0
Zm9ybUNBTGF5ZXI+IGNsb25lKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0IG92
ZXJyaWRlOworICAgIFJlZjxQbGF0Zm9ybUNBTGF5ZXI+IGNsb25lKFBsYXRmb3JtQ0FMYXllckNs
aWVudCogb3duZXIpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNB
TGF5ZXI+IGNyZWF0ZUNvbXBhdGlibGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSwg
UGxhdGZvcm1DQUxheWVyQ2xpZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPFBsYXRmb3Jt
Q0FMYXllcj4gY3JlYXRlQ29tcGF0aWJsZUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBl
LCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAg
ICBQbGF0Zm9ybUNBTGF5ZXJXaW4oTGF5ZXJUeXBlLCBQbGF0Zm9ybUxheWVyKiwgUGxhdGZvcm1D
QUxheWVyQ2xpZW50KiBvd25lcik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTY0MjYpCisr
KyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1NCBA
QAorMjAxNy0wNS0wOCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3Jn
PgorCisgICAgICAgIFJlZHVjZSBQYXNzUmVmUHRyIHVzZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxODA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Q2hyaXMgRHVtZXouCisKKyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQ
cm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6c2V0SW5p
dGlhbGl6YXRpb25SZXBseSk6CisgICAgICAgICogUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9s
bGVyUHJveHkuaDoKKyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9u
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmRlc3Ryb3lQbHVn
aW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Y3JlYXRlUGx1Z2lu
KToKKyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uLmg6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OnJ1bk9wZW5QYW5lbCk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnJlZ2lzdGVyVW5kb1N0ZXApOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5jcHA6CisgICAgICAg
IChXZWJLaXQ6OlZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyOjpnZXRPckNyZWF0ZSk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLmg6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViRnJhbWU6OmhpdFRlc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZTo6Y3JlYXRl
U2VsZWN0aW9uU25hcHNob3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFt
ZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJPcGVuUGFuZWxSZXN1bHRMaXN0
ZW5lci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcjo6V2Vi
T3BlblBhbmVsUmVzdWx0TGlzdGVuZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dW5hcHBseUVkaXRDb21t
YW5kKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVhcHBseUVkaXRDb21tYW5kKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlR3JvdXBQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViVW5kb1N0ZXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJVbmRvU3RlcDo6Y3Jl
YXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVW5kb1N0ZXAuaDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViVW5kb1N0ZXA6OnN0ZXApOgorICAgICAgICAoV2ViS2l0OjpXZWJVbmRv
U3RlcDo6V2ViVW5kb1N0ZXApOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxh
dGZvcm1DQUxheWVyUmVtb3RlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGxhdGZvcm1DQUxheWVy
UmVtb3RlOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6
OmNsb25lKToKKyAgICAgICAgKFdlYktpdDo6UGxhdGZvcm1DQUxheWVyUmVtb3RlOjphbmltYXRp
b25Gb3JLZXkpOgorICAgICAgICAoV2ViS2l0OjpQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNyZWF0
ZUNvbXBhdGlibGVMYXllcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0
Zm9ybUNBTGF5ZXJSZW1vdGUuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1Bs
YXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tLm1tOgorICAgICAgICAoV2ViS2l0OjpQ
bGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b206OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBs
YXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbTo6Y2xvbmUpOgorCiAyMDE3LTA1LTA4ICBDaHJpcyBE
dW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSAnc3R5bGUnIGZyb20gRWxl
bWVudCB0byBIVE1MRWxlbWVudCAvIFNWR0VsZW1lbnQgYW5kIG1ha2UgaXQgc2V0dGFibGUKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRy
b2xsZXJQcm94eS5jcHAJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJLaXQyL1BsdWdp
blByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEs
MTAgKzkxLDEwIEBAIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6flBsdWdpbkNvbnRyb2xsZXIKICAg
ICAgICAgcmVsZWFzZU5QT2JqZWN0KG1fcGx1Z2luRWxlbWVudE5QT2JqZWN0KTsKIH0KIAotdm9p
ZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OnNldEluaXRpYWxpemF0aW9uUmVwbHkoUGFzc1JlZlB0
cjxNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkNyZWF0ZVBsdWdpbjo6RGVsYXllZFJl
cGx5PiByZXBseSkKK3ZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpzZXRJbml0aWFsaXphdGlv
blJlcGx5KFJlZjxNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkNyZWF0ZVBsdWdpbjo6
RGVsYXllZFJlcGx5PiYmIHJlcGx5KQogewogICAgIEFTU0VSVCghbV9pbml0aWFsaXphdGlvblJl
cGx5KTsKLSAgICBtX2luaXRpYWxpemF0aW9uUmVwbHkgPSByZXBseTsKKyAgICBtX2luaXRpYWxp
emF0aW9uUmVwbHkgPSBXVEZNb3ZlKHJlcGx5KTsKIH0KIAogUmVmUHRyPE1lc3NhZ2VzOjpXZWJQ
cm9jZXNzQ29ubmVjdGlvbjo6Q3JlYXRlUGx1Z2luOjpEZWxheWVkUmVwbHk+IFBsdWdpbkNvbnRy
b2xsZXJQcm94eTo6dGFrZUluaXRpYWxpemF0aW9uUmVwbHkoKQpJbmRleDogU291cmNlL1dlYktp
dDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5oCShyZXZp
c2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRy
b2xsZXJQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKIAog
ICAgIGJvb2wgaXNJbml0aWFsaXppbmcoKSBjb25zdCB7IHJldHVybiBtX2lzSW5pdGlhbGl6aW5n
OyB9CiAgICAgCi0gICAgdm9pZCBzZXRJbml0aWFsaXphdGlvblJlcGx5KFBhc3NSZWZQdHI8TWVz
c2FnZXM6OldlYlByb2Nlc3NDb25uZWN0aW9uOjpDcmVhdGVQbHVnaW46OkRlbGF5ZWRSZXBseT4p
OworICAgIHZvaWQgc2V0SW5pdGlhbGl6YXRpb25SZXBseShSZWY8TWVzc2FnZXM6OldlYlByb2Nl
c3NDb25uZWN0aW9uOjpDcmVhdGVQbHVnaW46OkRlbGF5ZWRSZXBseT4mJik7CiAgICAgUmVmUHRy
PE1lc3NhZ2VzOjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Q3JlYXRlUGx1Z2luOjpEZWxheWVkUmVw
bHk+IHRha2VJbml0aWFsaXphdGlvblJlcGx5KCk7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uLmNw
cAkocmV2aXNpb24gMjE2NDE3KQorKysgU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9XZWJQ
cm9jZXNzQ29ubmVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw3ICsxNzYsNyBAQCB2
b2lkIFdlYlByb2Nlc3NDb25uZWN0aW9uOjpkaWRDbG9zZShJUEM6CiAgICAgICAgIGRlc3Ryb3lQ
bHVnaW5Db250cm9sbGVyUHJveHkocGx1Z2luQ29udHJvbGxlcnNbaV0pOwogfQogCi12b2lkIFdl
YlByb2Nlc3NDb25uZWN0aW9uOjpkZXN0cm95UGx1Z2luKHVpbnQ2NF90IHBsdWdpbkluc3RhbmNl
SUQsIGJvb2wgYXN5bmNocm9ub3VzQ3JlYXRpb25JbmNvbXBsZXRlLCBQYXNzUmVmUHRyPE1lc3Nh
Z2VzOjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6RGVzdHJveVBsdWdpbjo6RGVsYXllZFJlcGx5PiBy
ZXBseSkKK3ZvaWQgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmRlc3Ryb3lQbHVnaW4odWludDY0X3Qg
cGx1Z2luSW5zdGFuY2VJRCwgYm9vbCBhc3luY2hyb25vdXNDcmVhdGlvbkluY29tcGxldGUsIFJl
ZjxNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkRlc3Ryb3lQbHVnaW46OkRlbGF5ZWRS
ZXBseT4mJiByZXBseSkKIHsKICAgICAvLyBXZSByZXR1cm4gaW1tZWRpYXRlbHkgZnJvbSB0aGlz
IHN5bmNocm9ub3VzIElQQy4gV2Ugd2FudCB0byBtYWtlIHN1cmUgdGhlIHBsdWdpbiBkZXN0cnVj
dGlvbiBpcyBqdXN0IGFib3V0IHRvIHN0YXJ0IHNvIGF1ZGlvIHBsYXliYWNrCiAgICAgLy8gd2ls
bCBmaW5pc2ggc29vbiBhZnRlciByZXR1cm5pbmcuIEhvd2V2ZXIgd2UgZG9uJ3Qgd2FudCB0byB3
YWl0IGZvciBkZXN0cnVjdGlvbiB0byBjb21wbGV0ZSBmdWxseSBhcyB0aGF0IG1heSB0YWtlIGEg
d2hpbGUuCkBAIC0yMjksNyArMjI5LDcgQEAgdm9pZCBXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Y3Jl
YXRlUGx1Z2luSQogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmNyZWF0
ZVBsdWdpbihjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmIGNyZWF0aW9uUGFyYW1ldGVy
cywgUGFzc1JlZlB0cjxNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkNyZWF0ZVBsdWdp
bjo6RGVsYXllZFJlcGx5PiByZXBseSkKK3ZvaWQgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmNyZWF0
ZVBsdWdpbihjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmIGNyZWF0aW9uUGFyYW1ldGVy
cywgUmVmPE1lc3NhZ2VzOjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Q3JlYXRlUGx1Z2luOjpEZWxh
eWVkUmVwbHk+JiYgcmVwbHkpCiB7CiAgICAgLy8gRW5zdXJlIHdlIGRvbid0IGNsYW1wIGFueSB0
aW1lcnMgZHVyaW5nIGluaXRpYWxpemF0aW9uCiAgICAgQWN0aXZpdHlBc3NlcnRpb24gYWN0aXZp
dHlBc3NlcnRpb24oUGx1Z2luUHJvY2Vzczo6c2luZ2xldG9uKCkuY29ubmVjdGlvbkFjdGl2aXR5
KCkpOwpAQCAtMjQwLDcgKzI0MCw3IEBAIHZvaWQgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmNyZWF0
ZVBsdWdpbigKICAgICBpZiAocGx1Z2luQ29udHJvbGxlclByb3h5KSB7CiAgICAgICAgIC8vIEl0
IG1pZ2h0IHN0aWxsIGJlIGluIHRoZSBtaWRkbGUgb2YgaW5pdGlhbGl6YXRpb24gaW4gd2hpY2gg
Y2FzZSB3ZSBoYXZlIHRvIGxldCB0aGF0IGluaXRpYWxpemF0aW9uIGNvbXBsZXRlIGFuZCByZXNw
b25kIHRvIHRoaXMgbWVzc2FnZSBsYXRlci4KICAgICAgICAgaWYgKHBsdWdpbkNvbnRyb2xsZXJQ
cm94eS0+aXNJbml0aWFsaXppbmcoKSkgewotICAgICAgICAgICAgcGx1Z2luQ29udHJvbGxlclBy
b3h5LT5zZXRJbml0aWFsaXphdGlvblJlcGx5KHJlcGx5KTsKKyAgICAgICAgICAgIHBsdWdpbkNv
bnRyb2xsZXJQcm94eS0+c2V0SW5pdGlhbGl6YXRpb25SZXBseShXVEZNb3ZlKHJlcGx5KSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9XZWJQcm9jZXNzQ29ubmVjdGlvbi5oCShyZXZp
c2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3ND
b25uZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFdlYlByb2Nlc3NDb25uZWN0
aW9uX2gKLSNkZWZpbmUgV2ViUHJvY2Vzc0Nvbm5lY3Rpb25faAorI3ByYWdtYSBvbmNlCiAKICNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIApAQCAtNzAsOSArNjksOSBAQCBwcml2YXRl
OgogICAgIC8vIE1lc3NhZ2UgaGFuZGxlcnMuCiAgICAgdm9pZCBkaWRSZWNlaXZlV2ViUHJvY2Vz
c0Nvbm5lY3Rpb25NZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwogICAg
IHZvaWQgZGlkUmVjZWl2ZVN5bmNXZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKTsK
LSAgICB2b2lkIGNyZWF0ZVBsdWdpbihjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmLCBQ
YXNzUmVmUHRyPE1lc3NhZ2VzOjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Q3JlYXRlUGx1Z2luOjpE
ZWxheWVkUmVwbHk+KTsKKyAgICB2b2lkIGNyZWF0ZVBsdWdpbihjb25zdCBQbHVnaW5DcmVhdGlv
blBhcmFtZXRlcnMmLCBSZWY8TWVzc2FnZXM6OldlYlByb2Nlc3NDb25uZWN0aW9uOjpDcmVhdGVQ
bHVnaW46OkRlbGF5ZWRSZXBseT4mJik7CiAgICAgdm9pZCBjcmVhdGVQbHVnaW5Bc3luY2hyb25v
dXNseShjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICB2b2lkIGRlc3Ryb3lQ
bHVnaW4odWludDY0X3QgcGx1Z2luSW5zdGFuY2VJRCwgYm9vbCBhc3luY2hyb25vdXNDcmVhdGlv
bkluY29tcGxldGUsIFBhc3NSZWZQdHI8TWVzc2FnZXM6OldlYlByb2Nlc3NDb25uZWN0aW9uOjpE
ZXN0cm95UGx1Z2luOjpEZWxheWVkUmVwbHk+KTsKKyAgICB2b2lkIGRlc3Ryb3lQbHVnaW4odWlu
dDY0X3QgcGx1Z2luSW5zdGFuY2VJRCwgYm9vbCBhc3luY2hyb25vdXNDcmVhdGlvbkluY29tcGxl
dGUsIFJlZjxNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkRlc3Ryb3lQbHVnaW46OkRl
bGF5ZWRSZXBseT4mJik7CiAgICAgCiAgICAgdm9pZCBjcmVhdGVQbHVnaW5JbnRlcm5hbChjb25z
dCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmLCBib29sJiByZXN1bHQsIGJvb2wmIHdhbnRzV2hl
ZWxFdmVudHMsIHVpbnQzMl90JiByZW1vdGVMYXllckNsaWVudElEKTsKIApAQCAtODYsNiArODUs
MyBAQCBwcml2YXRlOgogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKLQotCi0jZW5kaWYgLy8gV2ViUHJvY2Vzc0Nvbm5lY3Rpb25f
aApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkocmV2aXNpb24gMjE2NDE3KQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03NzMsNyArNzczLDcgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6
OnJ1bk9wZW5QYW5lbChGcmFtZQogICAgIGlmIChtX3BhZ2UuYWN0aXZlT3BlblBhbmVsUmVzdWx0
TGlzdGVuZXIoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wYWdlLnNldEFjdGl2ZU9wZW5Q
YW5lbFJlc3VsdExpc3RlbmVyKFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyOjpjcmVhdGUoJm1f
cGFnZSwgJmZpbGVDaG9vc2VyKSk7CisgICAgbV9wYWdlLnNldEFjdGl2ZU9wZW5QYW5lbFJlc3Vs
dExpc3RlbmVyKFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyOjpjcmVhdGUobV9wYWdlLCBmaWxl
Q2hvb3NlcikpOwogCiAgICAgYXV0byogd2ViRnJhbWUgPSBXZWJGcmFtZTo6ZnJvbUNvcmVGcmFt
ZShmcmFtZSk7CiAgICAgQVNTRVJUKHdlYkZyYW1lKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5jcHAJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDgg
KzI0NSw4IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZWdpc3RlclVuZG9TdGVwKFUKICAgICBp
ZiAobV9wYWdlLT5pc0luUmVkbygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHdlYlN0
ZXAgPSBXZWJVbmRvU3RlcDo6Y3JlYXRlKCZzdGVwKTsKLSAgICBhdXRvIGVkaXRBY3Rpb24gPSBz
dGF0aWNfY2FzdDx1aW50MzJfdD4od2ViU3RlcC0+c3RlcCgpLT5lZGl0aW5nQWN0aW9uKCkpOwor
ICAgIGF1dG8gd2ViU3RlcCA9IFdlYlVuZG9TdGVwOjpjcmVhdGUoc3RlcCk7CisgICAgYXV0byBl
ZGl0QWN0aW9uID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHdlYlN0ZXAtPnN0ZXAoKS5lZGl0aW5n
QWN0aW9uKCkpOwogCiAgICAgbV9wYWdlLT5hZGRXZWJVbmRvU3RlcCh3ZWJTdGVwLT5zdGVwSUQo
KSwgd2ViU3RlcC5wdHIoKSk7CiAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OlJlZ2lzdGVyRWRpdENvbW1hbmRGb3JVbmRvKHdlYlN0ZXAtPnN0ZXBJRCgpLCBlZGl0QWN0
aW9uKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExp
bmtUYWJsZUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIx
NjQxNykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1Rh
YmxlQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDE2ICs0NCwxNiBAQCBzdGF0
aWMgSGFzaE1hcDx1aW50NjRfdCwgVmlzaXRlZExpbmtUYWJsCiAgICAgcmV0dXJuIHZpc2l0ZWRM
aW5rVGFibGVDb250cm9sbGVyczsKIH0KIAotUGFzc1JlZlB0cjxWaXNpdGVkTGlua1RhYmxlQ29u
dHJvbGxlcj4gVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXI6OmdldE9yQ3JlYXRlKHVpbnQ2NF90
IGlkZW50aWZpZXIpCitSZWY8VmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXI+IFZpc2l0ZWRMaW5r
VGFibGVDb250cm9sbGVyOjpnZXRPckNyZWF0ZSh1aW50NjRfdCBpZGVudGlmaWVyKQogewogICAg
IGF1dG8mIHZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyUHRyID0gdmlzaXRlZExpbmtUYWJsZUNv
bnRyb2xsZXJzKCkuYWRkKGlkZW50aWZpZXIsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAg
ICBpZiAodmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXJQdHIpCi0gICAgICAgIHJldHVybiB2aXNp
dGVkTGlua1RhYmxlQ29udHJvbGxlclB0cjsKKyAgICAgICAgcmV0dXJuICp2aXNpdGVkTGlua1Rh
YmxlQ29udHJvbGxlclB0cjsKIAogICAgIGF1dG8gdmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIg
PSBhZG9wdFJlZigqbmV3IFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyKGlkZW50aWZpZXIpKTsK
ICAgICB2aXNpdGVkTGlua1RhYmxlQ29udHJvbGxlclB0ciA9IHZpc2l0ZWRMaW5rVGFibGVDb250
cm9sbGVyLnB0cigpOwogCi0gICAgcmV0dXJuIFdURk1vdmUodmlzaXRlZExpbmtUYWJsZUNvbnRy
b2xsZXIpOworICAgIHJldHVybiB2aXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjsKIH0KIAogVmlz
aXRlZExpbmtUYWJsZUNvbnRyb2xsZXI6OlZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyKHVpbnQ2
NF90IGlkZW50aWZpZXIpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
VmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIuaAkocmV2aXNp
b24gMjE2NDE3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRM
aW5rVGFibGVDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDcgQEAKICAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFZpc2l0ZWRM
aW5rVGFibGVDb250cm9sbGVyX2gKLSNkZWZpbmUgVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXJf
aAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKICNpbmNsdWRl
ICJTaGFyZWRNZW1vcnkuaCIKQEAgLTM1LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAK
IGNsYXNzIFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyIGZpbmFsIDogcHVibGljIFdlYkNvcmU6
OlZpc2l0ZWRMaW5rU3RvcmUgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcj4gZ2V0
T3JDcmVhdGUodWludDY0X3QgaWRlbnRpZmllcik7CisgICAgc3RhdGljIFJlZjxWaXNpdGVkTGlu
a1RhYmxlQ29udHJvbGxlcj4gZ2V0T3JDcmVhdGUodWludDY0X3QgaWRlbnRpZmllcik7CiAgICAg
dmlydHVhbCB+VmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIoKTsKIAogcHJpdmF0ZToKQEAgLTU4
LDUgKzU3LDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5k
aWYgLy8gVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXJfaApJbmRleDogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCShyZXZpc2lvbiAyMTY0MTcpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02MDMsMTAgKzYwMywxMCBAQCBib29sIFdlYkZyYW1lOjpoYXNWZXJ0aWNhbFNj
cm9sbGJhcigpIGNvCiAgICAgcmV0dXJuIHZpZXctPnZlcnRpY2FsU2Nyb2xsYmFyKCk7CiB9CiAK
LVBhc3NSZWZQdHI8SW5qZWN0ZWRCdW5kbGVIaXRUZXN0UmVzdWx0PiBXZWJGcmFtZTo6aGl0VGVz
dChjb25zdCBJbnRQb2ludCBwb2ludCkgY29uc3QKK1JlZlB0cjxJbmplY3RlZEJ1bmRsZUhpdFRl
c3RSZXN1bHQ+IFdlYkZyYW1lOjpoaXRUZXN0KGNvbnN0IEludFBvaW50IHBvaW50KSBjb25zdAog
ewogICAgIGlmICghbV9jb3JlRnJhbWUpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQ6OmNy
ZWF0ZShtX2NvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQocG9p
bnQsIEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSB8IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUgfCBI
aXRUZXN0UmVxdWVzdDo6SWdub3JlQ2xpcHBpbmcgfCBIaXRUZXN0UmVxdWVzdDo6RGlzYWxsb3dV
c2VyQWdlbnRTaGFkb3dDb250ZW50KSk7CiB9CkBAIC04MTgsNyArODE4LDcgQEAgUmV0YWluUHRy
PENGRGF0YVJlZj4gV2ViRnJhbWU6OndlYkFyY2hpdgogfQogI2VuZGlmCiAKLVBhc3NSZWZQdHI8
U2hhcmVhYmxlQml0bWFwPiBXZWJGcmFtZTo6Y3JlYXRlU2VsZWN0aW9uU25hcHNob3QoKSBjb25z
dAorUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gV2ViRnJhbWU6OmNyZWF0ZVNlbGVjdGlvblNuYXBz
aG90KCkgY29uc3QKIHsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHNuYXBzaG90
ID0gc25hcHNob3RTZWxlY3Rpb24oKmNvcmVGcmFtZSgpLCBXZWJDb3JlOjpTbmFwc2hvdE9wdGlv
bnNGb3JjZUJsYWNrVGV4dCk7CiAgICAgaWYgKCFzbmFwc2hvdCkKQEAgLTgzNSw3ICs4MzUsNyBA
QCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gV2ViRnJhbWU6OmNyCiAgICAgZ3JhcGhpY3ND
b250ZXh0LT5zY2FsZShkZXZpY2VTY2FsZUZhY3Rvcik7CiAgICAgZ3JhcGhpY3NDb250ZXh0LT5k
cmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoV1RGTW92ZShzbmFwc2hvdCksIEZsb2F0UG9pbnQoKSk7
CiAKLSAgICByZXR1cm4gV1RGTW92ZShzaGFyZWRTbmFwc2hvdCk7CisgICAgcmV0dXJuIHNoYXJl
ZFNuYXBzaG90OwogfQogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuaAkocmV2aXNpb24gMjE2NDE3
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCi0jaWZuZGVmIFdlYkZyYW1lX2gKLSNkZWZpbmUgV2ViRnJhbWVfaAorI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlICJBUElPYmplY3QuaCIKICNpbmNsdWRlICJEb3dubG9hZElE
LmgiCkBAIC0zNiw3ICszNSw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlclR5cGVz
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Qb2xpY3lDaGVja2VyLmg+CiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKQEAgLTExMSw3ICsxMDksNyBAQCBw
dWJsaWM6CiAgICAgV2ViQ29yZTo6SW50U2l6ZSBzY3JvbGxPZmZzZXQoKSBjb25zdDsKICAgICBi
b29sIGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdDsKICAgICBib29sIGhhc1ZlcnRpY2Fs
U2Nyb2xsYmFyKCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxJbmplY3RlZEJ1bmRsZUhpdFRlc3RS
ZXN1bHQ+IGhpdFRlc3QoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQpIGNvbnN0OworICAgIFJlZlB0
cjxJbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQ+IGhpdFRlc3QoY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQpIGNvbnN0OwogICAgIGJvb2wgZ2V0RG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3IoZG91Ymxl
KiByZWQsIGRvdWJsZSogZ3JlZW4sIGRvdWJsZSogYmx1ZSwgZG91YmxlKiBhbHBoYSk7CiAgICAg
Ym9vbCBjb250YWluc0FueUZvcm1FbGVtZW50cygpIGNvbnN0OwogICAgIGJvb2wgY29udGFpbnNB
bnlGb3JtQ29udHJvbHMoKSBjb25zdDsKQEAgLTE1OCw3ICsxNTYsNyBAQCBwdWJsaWM6CiAgICAg
UmV0YWluUHRyPENGRGF0YVJlZj4gd2ViQXJjaGl2ZURhdGEoRnJhbWVGaWx0ZXJGdW5jdGlvbiwg
dm9pZCogY29udGV4dCk7CiAjZW5kaWYKIAotICAgIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFw
PiBjcmVhdGVTZWxlY3Rpb25TbmFwc2hvdCgpIGNvbnN0OworICAgIFJlZlB0cjxTaGFyZWFibGVC
aXRtYXA+IGNyZWF0ZVNlbGVjdGlvblNuYXBzaG90KCkgY29uc3Q7CiAKICNpZiBQTEFURk9STShJ
T1MpCiAgICAgdWludDY0X3QgZmlyc3RMYXllclRyZWVUcmFuc2FjdGlvbklEQWZ0ZXJEaWRDb21t
aXRMb2FkKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdExheWVyVHJlZVRyYW5zYWN0aW9uSURBZnRl
ckRpZENvbW1pdExvYWQ7IH0KQEAgLTE4Niw1ICsxODQsMyBAQCBwcml2YXRlOgogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBXZWJGcmFtZV9oCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJPcGVu
UGFuZWxSZXN1bHRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDE4ICsyNiwxOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIldlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmgiCiAKKyNpbmNsdWRlIDxXZWJDb3Jl
L0ZpbGVDaG9vc2VyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JY29uLmg+CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCi1SZWY8V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI+IFdlYk9wZW5QYW5lbFJl
c3VsdExpc3RlbmVyOjpjcmVhdGUoV2ViUGFnZSogcGFnZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpG
aWxlQ2hvb3Nlcj4gZmlsZUNob29zZXIpCitSZWY8V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI+
IFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyOjpjcmVhdGUoV2ViUGFnZSYgcGFnZSwgUmVmPFdl
YkNvcmU6OkZpbGVDaG9vc2VyPiYmIGZpbGVDaG9vc2VyKQogewotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyKHBhZ2UsIGZpbGVDaG9vc2VyKSk7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIocGFnZSwg
V1RGTW92ZShmaWxlQ2hvb3NlcikpKTsKIH0KIAotV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI6
OldlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyKFdlYlBhZ2UqIHBhZ2UsIFBhc3NSZWZQdHI8V2Vi
Q29yZTo6RmlsZUNob29zZXI+IGZpbGVDaG9vc2VyKQotICAgIDogbV9wYWdlKHBhZ2UpCi0gICAg
LCBtX2ZpbGVDaG9vc2VyKGZpbGVDaG9vc2VyKQorV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI6
OldlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyKFdlYlBhZ2UmIHBhZ2UsIFJlZjxXZWJDb3JlOjpG
aWxlQ2hvb3Nlcj4mJiBmaWxlQ2hvb3NlcikKKyAgICA6IG1fcGFnZSgmcGFnZSkKKyAgICAsIG1f
ZmlsZUNob29zZXIoV1RGTW92ZShmaWxlQ2hvb3NlcikpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJPcGVuUGFu
ZWxSZXN1bHRMaXN0ZW5lci5oCShyZXZpc2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMjMsMTMgKzIzLDE1IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KIAotI2lmbmRlZiBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcl9oCi0jZGVmaW5l
IFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyX2gKKyNwcmFnbWEgb25jZQogCisjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVDaG9vc2VyLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBGaWxlQ2hvb3NlcjsKIGNs
YXNzIEljb247CiB9CiAKQEAgLTM5LDcgKzQxLDcgQEAgY2xhc3MgV2ViUGFnZTsKIAogY2xhc3Mg
V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJPcGVuUGFu
ZWxSZXN1bHRMaXN0ZW5lcj4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViT3BlblBhbmVs
UmVzdWx0TGlzdGVuZXI+IGNyZWF0ZShXZWJQYWdlKiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpGaWxl
Q2hvb3Nlcj4pOworICAgIHN0YXRpYyBSZWY8V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI+IGNy
ZWF0ZShXZWJQYWdlJiwgUmVmPFdlYkNvcmU6OkZpbGVDaG9vc2VyPiYmKTsKICAgICB+V2ViT3Bl
blBhbmVsUmVzdWx0TGlzdGVuZXIoKTsKIAogICAgIHZvaWQgZGlzY29ubmVjdEZyb21QYWdlKCkg
eyBtX3BhZ2UgPSAwOyB9CkBAIC00OSwxMyArNTEsMTAgQEAgcHVibGljOgogI2VuZGlmCiAKIHBy
aXZhdGU6Ci0gICAgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIoV2ViUGFnZSosIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6RmlsZUNob29zZXI+KTsKKyAgICBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5l
cihXZWJQYWdlJiwgUmVmPFdlYkNvcmU6OkZpbGVDaG9vc2VyPiYmKTsKIAogICAgIFdlYlBhZ2Uq
IG1fcGFnZTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6RmlsZUNob29zZXI+IG1fZmlsZUNob29zZXI7
CisgICAgUmVmPFdlYkNvcmU6OkZpbGVDaG9vc2VyPiBtX2ZpbGVDaG9vc2VyOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0Ci0KLQotI2VuZGlmIC8vIFdlYk9wZW5QYW5lbFJlc3VsdExpc3Rl
bmVyX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcxMCw3ICszNzEwLDcgQEAgdm9p
ZCBXZWJQYWdlOjp1bmFwcGx5RWRpdENvbW1hbmQodWludDY0XwogICAgIGlmICghc3RlcCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgc3RlcC0+c3RlcCgpLT51bmFwcGx5KCk7CisgICAgc3RlcC0+
c3RlcCgpLnVuYXBwbHkoKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpyZWFwcGx5RWRpdENvbW1hbmQo
dWludDY0X3Qgc3RlcElEKQpAQCAtMzcyMCw3ICszNzIwLDcgQEAgdm9pZCBXZWJQYWdlOjpyZWFw
cGx5RWRpdENvbW1hbmQodWludDY0XwogICAgICAgICByZXR1cm47CiAKICAgICBtX2lzSW5SZWRv
ID0gdHJ1ZTsKLSAgICBzdGVwLT5zdGVwKCktPnJlYXBwbHkoKTsKKyAgICBzdGVwLT5zdGVwKCku
cmVhcHBseSgpOwogICAgIG1faXNJblJlZG8gPSBmYWxzZTsKIH0KIApJbmRleDogU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHku
Y3BwCShyZXZpc2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZUdyb3VwUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxNCArMzUsMTQg
QEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVBhc3NSZWZQdHI8V2ViUGFnZUdyb3VwUHJveHk+
IFdlYlBhZ2VHcm91cFByb3h5OjpjcmVhdGUoY29uc3QgV2ViUGFnZUdyb3VwRGF0YSYgZGF0YSkK
K1JlZjxXZWJQYWdlR3JvdXBQcm94eT4gV2ViUGFnZUdyb3VwUHJveHk6OmNyZWF0ZShjb25zdCBX
ZWJQYWdlR3JvdXBEYXRhJiBkYXRhKQogewogICAgIGF1dG8gcGFnZUdyb3VwID0gYWRvcHRSZWYo
Km5ldyBXZWJQYWdlR3JvdXBQcm94eShkYXRhKSk7CiAKICAgICBpZiAocGFnZUdyb3VwLT5pc1Zp
c2libGVUb0luamVjdGVkQnVuZGxlKCkgJiYgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuaW5qZWN0
ZWRCdW5kbGUoKSkKICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuaW5qZWN0ZWRCdW5k
bGUoKS0+ZGlkSW5pdGlhbGl6ZVBhZ2VHcm91cChwYWdlR3JvdXAucHRyKCkpOwogCi0gICAgcmV0
dXJuIFdURk1vdmUocGFnZUdyb3VwKTsKKyAgICByZXR1cm4gcGFnZUdyb3VwOwogfQogCiBXZWJQ
YWdlR3JvdXBQcm94eTo6V2ViUGFnZUdyb3VwUHJveHkoY29uc3QgV2ViUGFnZUdyb3VwRGF0YSYg
ZGF0YSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3Jv
dXBQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlR3JvdXBQcm94eS5oCShyZXZpc2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuaAkod29ya2luZyBjb3B5KQpA
QCAtMjMsMTIgKzIzLDExIEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAg
Ki8KIAotI2lmbmRlZiBXZWJQYWdlR3JvdXBQcm94eV9oCi0jZGVmaW5lIFdlYlBhZ2VHcm91cFBy
b3h5X2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCiAjaW5jbHVkZSAi
V2ViUGFnZUdyb3VwRGF0YS5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBQYWdlR3JvdXA7CkBA
IC00MCw3ICszOSw3IEBAIGNsYXNzIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjsKIAogY2xhc3Mg
V2ViUGFnZUdyb3VwUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpU
eXBlOjpCdW5kbGVQYWdlR3JvdXA+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxX
ZWJQYWdlR3JvdXBQcm94eT4gY3JlYXRlKGNvbnN0IFdlYlBhZ2VHcm91cERhdGEmKTsKKyAgICBz
dGF0aWMgUmVmPFdlYlBhZ2VHcm91cFByb3h5PiBjcmVhdGUoY29uc3QgV2ViUGFnZUdyb3VwRGF0
YSYpOwogICAgIHZpcnR1YWwgfldlYlBhZ2VHcm91cFByb3h5KCk7CiAKICAgICBjb25zdCBTdHJp
bmcmIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuaWRlbnRpZmllcjsgfQpAQCAt
NjAsNSArNTksMyBAQCBwcml2YXRlOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNl
bmRpZiAvLyBXZWJQYWdlR3JvdXBQcm94eV9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViVW5kb1N0ZXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJVbmRvU3RlcC5jcHAJKHJldmlzaW9uIDIxNjQxNykKKysr
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJVbmRvU3RlcC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDkgKzM0LDkgQEAgc3RhdGljIHVpbnQ2NF90IGdlbmVyYXRlVW5kb1N0
ZXAoKQogICAgIHJldHVybiB1bmlxdWVFbnRyeUlEKys7CiB9CiAKLVJlZjxXZWJVbmRvU3RlcD4g
V2ViVW5kb1N0ZXA6OmNyZWF0ZShQYXNzUmVmUHRyPFdlYkNvcmU6OlVuZG9TdGVwPiBzdGVwKQor
UmVmPFdlYlVuZG9TdGVwPiBXZWJVbmRvU3RlcDo6Y3JlYXRlKFJlZjxXZWJDb3JlOjpVbmRvU3Rl
cD4mJiBzdGVwKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlVuZG9TdGVwKHN0ZXAs
IGdlbmVyYXRlVW5kb1N0ZXAoKSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlVuZG9T
dGVwKFdURk1vdmUoc3RlcCksIGdlbmVyYXRlVW5kb1N0ZXAoKSkpOwogfQogCiBXZWJVbmRvU3Rl
cDo6fldlYlVuZG9TdGVwKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJVbmRvU3RlcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJVbmRvU3RlcC5oCShyZXZpc2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVW5kb1N0ZXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjMs
MzQgKzIzLDMwIEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAot
I2lmbmRlZiBXZWJVbmRvU3RlcF9oCi0jZGVmaW5lIFdlYlVuZG9TdGVwX2gKKyNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSA8V2ViQ29yZS9VbmRvU3RlcC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYlVuZG9TdGVwIDogcHVibGljIFJlZkNvdW50
ZWQ8V2ViVW5kb1N0ZXA+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlVuZG9TdGVwPiBj
cmVhdGUoUGFzc1JlZlB0cjxXZWJDb3JlOjpVbmRvU3RlcD4pOworICAgIHN0YXRpYyBSZWY8V2Vi
VW5kb1N0ZXA+IGNyZWF0ZShSZWY8V2ViQ29yZTo6VW5kb1N0ZXA+JiYpOwogICAgIH5XZWJVbmRv
U3RlcCgpOwogCi0gICAgV2ViQ29yZTo6VW5kb1N0ZXAqIHN0ZXAoKSBjb25zdCB7IHJldHVybiBt
X3N0ZXAuZ2V0KCk7IH0KKyAgICBXZWJDb3JlOjpVbmRvU3RlcCYgc3RlcCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RlcC5nZXQoKTsgfQogICAgIHVpbnQ2NF90IHN0ZXBJRCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RlcElEOyB9CiAKIHByaXZhdGU6Ci0gICAgV2ViVW5kb1N0ZXAoUGFzc1JlZlB0cjxXZWJD
b3JlOjpVbmRvU3RlcD4gc3RlcCwgdWludDY0X3Qgc3RlcElEKQotICAgICAgICA6IG1fc3RlcChz
dGVwKQorICAgIFdlYlVuZG9TdGVwKFJlZjxXZWJDb3JlOjpVbmRvU3RlcD4mJiBzdGVwLCB1aW50
NjRfdCBzdGVwSUQpCisgICAgICAgIDogbV9zdGVwKFdURk1vdmUoc3RlcCkpCiAgICAgICAgICwg
bV9zdGVwSUQoc3RlcElEKQogICAgIHsKICAgICB9CiAKLSAgICBSZWZQdHI8V2ViQ29yZTo6VW5k
b1N0ZXA+IG1fc3RlcDsKKyAgICBSZWY8V2ViQ29yZTo6VW5kb1N0ZXA+IG1fc3RlcDsKICAgICB1
aW50NjRfdCBtX3N0ZXBJRDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYg
Ly8gV2ViRWRpdENvbW1hbmRfaApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL21hYy9HcmFwaGljc0xheWVyQ0FSZW1vdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvR3JhcGhpY3NMYXllckNBUmVtb3RlLmNwcAko
cmV2aXNpb24gMjE2NDE3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9HcmFwaGljc0xheWVyQ0FSZW1vdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3
IEBAIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBHcmFwaGljc0xheWUKICAgICBpZiAocmVz
dWx0LT5jYW5IYXZlQmFja2luZ1N0b3JlKCkpCiAgICAgICAgIHJlc3VsdC0+c2V0V2FudHNEZWVw
Q29sb3JCYWNraW5nU3RvcmUoc2NyZWVuU3VwcG9ydHNFeHRlbmRlZENvbG9yKCkpOwogCi0gICAg
cmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwogfQogCiBQYXNzUmVm
UHRyPFBsYXRmb3JtQ0FMYXllcj4gR3JhcGhpY3NMYXllckNBUmVtb3RlOjpjcmVhdGVQbGF0Zm9y
bUNBTGF5ZXIoUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllciwgUGxhdGZvcm1DQUxheWVyQ2xp
ZW50KiBvd25lcikKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
UGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5jcHAJKHJldmlzaW9u
IDIxNjQxNykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZv
cm1DQUxheWVyUmVtb3RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVBhc3NSZWZQdHI8
UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNyZWF0ZShMYXll
clR5cGUgbGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyLCBSZW1vdGVMYXll
clRyZWVDb250ZXh0JiBjb250ZXh0KQorUmVmPFBsYXRmb3JtQ0FMYXllclJlbW90ZT4gUGxhdGZv
cm1DQUxheWVyUmVtb3RlOjpjcmVhdGUoTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxh
eWVyQ2xpZW50KiBvd25lciwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYgY29udGV4dCkKIHsKICAg
ICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBsYXllcjsKIApAQCAtNTUsMjEgKzU1LDIx
IEBAIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBQbGF0Zm8KIAogICAgIGNvbnRl
eHQubGF5ZXJXYXNDcmVhdGVkKCpsYXllciwgbGF5ZXJUeXBlKTsKIAotICAgIHJldHVybiBXVEZN
b3ZlKGxheWVyKTsKKyAgICByZXR1cm4gbGF5ZXIucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotUGFz
c1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU+IFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6Y3Jl
YXRlKFBsYXRmb3JtTGF5ZXIgKnBsYXRmb3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCog
b3duZXIsIFJlbW90ZUxheWVyVHJlZUNvbnRleHQmIGNvbnRleHQpCitSZWY8UGxhdGZvcm1DQUxh
eWVyUmVtb3RlPiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNyZWF0ZShQbGF0Zm9ybUxheWVyICpw
bGF0Zm9ybUxheWVyLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyLCBSZW1vdGVMYXllclRy
ZWVDb250ZXh0JiBjb250ZXh0KQogewogICAgIHJldHVybiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVD
dXN0b206OmNyZWF0ZShwbGF0Zm9ybUxheWVyLCBvd25lciwgY29udGV4dCk7CiB9CiAKLVBhc3NS
ZWZQdHI8UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNyZWF0
ZShjb25zdCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUmIG90aGVyLCBXZWJDb3JlOjpQbGF0Zm9ybUNB
TGF5ZXJDbGllbnQqIG93bmVyLCBSZW1vdGVMYXllclRyZWVDb250ZXh0JiBjb250ZXh0KQorUmVm
PFBsYXRmb3JtQ0FMYXllclJlbW90ZT4gUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpjcmVhdGUoY29u
c3QgUGxhdGZvcm1DQUxheWVyUmVtb3RlJiBvdGhlciwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVy
Q2xpZW50KiBvd25lciwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBh
dXRvIGxheWVyID0gYWRvcHRSZWYoKm5ldyBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUob3RoZXIsIG93
bmVyLCBjb250ZXh0KSk7CiAKICAgICBjb250ZXh0LmxheWVyV2FzQ3JlYXRlZChsYXllci5nZXQo
KSwgb3RoZXIubGF5ZXJUeXBlKCkpOwogCi0gICAgcmV0dXJuIFdURk1vdmUobGF5ZXIpOworICAg
IHJldHVybiBsYXllcjsKIH0KIAogUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpQbGF0Zm9ybUNBTGF5
ZXJSZW1vdGUoTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25l
ciwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYgY29udGV4dCkKQEAgLTg5LDExICs4OSwxMSBAQCBQ
bGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OlBsYXRmb3JtQ0FMYXllclJlCiB7CiB9CiAKLVBhc3NSZWZQ
dHI8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNsb25lKFBsYXRmb3Jt
Q0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0CitSZWY8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9y
bUNBTGF5ZXJSZW1vdGU6OmNsb25lKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0
CiB7CiAgICAgYXV0byBjbG9uZSA9IFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6Y3JlYXRlKCp0aGlz
LCBvd25lciwgKm1fY29udGV4dCk7CiAKLSAgICB1cGRhdGVDbG9uZWRMYXllclByb3BlcnRpZXMo
KmNsb25lKTsKKyAgICB1cGRhdGVDbG9uZWRMYXllclByb3BlcnRpZXMoY2xvbmUpOwogCiAgICAg
Y2xvbmUtPnNldENsb25lZExheWVyKHRoaXMpOwogICAgIHJldHVybiBXVEZNb3ZlKGNsb25lKTsK
QEAgLTM1Nyw3ICszNTcsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6cmVtb3ZlQW5p
bWF0CiAgICAgbV9wcm9wZXJ0aWVzLm5vdGVQcm9wZXJ0aWVzQ2hhbmdlZChSZW1vdGVMYXllclRy
ZWVUcmFuc2FjdGlvbjo6QW5pbWF0aW9uc0NoYW5nZWQpOwogfQogCi1QYXNzUmVmUHRyPFBsYXRm
b3JtQ0FBbmltYXRpb24+IFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6YW5pbWF0aW9uRm9yS2V5KGNv
bnN0IFN0cmluZyYga2V5KQorUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IFBsYXRmb3JtQ0FM
YXllclJlbW90ZTo6YW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5KQogewogICAgIHJl
dHVybiBtX2FuaW1hdGlvbnMuZ2V0KGtleSk7CiB9CkBAIC04MjEsNyArODIxLDcgQEAgdm9pZCBQ
bGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnVwZGF0ZUN1c3RvbQogICAgIG1fcHJvcGVydGllcy5ub3Rl
UHJvcGVydGllc0NoYW5nZWQoUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkN1c3RvbUFwcGVh
cmFuY2VDaGFuZ2VkKTsKIH0KIAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3Jt
Q0FMYXllclJlbW90ZTo6Y3JlYXRlQ29tcGF0aWJsZUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5
ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBjbGllbnQpIGNvbnN0CitS
ZWY8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNyZWF0ZUNvbXBhdGli
bGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3JtQ0FM
YXllckNsaWVudCogY2xpZW50KSBjb25zdAogewogICAgIHJldHVybiBQbGF0Zm9ybUNBTGF5ZXJS
ZW1vdGU6OmNyZWF0ZShsYXllclR5cGUsIGNsaWVudCwgKm1fY29udGV4dCk7CiB9CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
UGxhdGZvcm1DQUxheWVyUmVtb3RlLmgJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDkgKzM5LDkgQEAgY2xhc3MgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dDsK
IAogY2xhc3MgUGxhdGZvcm1DQUxheWVyUmVtb3RlIDogcHVibGljIFdlYkNvcmU6OlBsYXRmb3Jt
Q0FMYXllciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVy
UmVtb3RlPiBjcmVhdGUoV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGUsIFdlYkNv
cmU6OlBsYXRmb3JtQ0FMYXllckNsaWVudCosIFJlbW90ZUxheWVyVHJlZUNvbnRleHQmKTsKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU+IGNyZWF0ZShQbGF0Zm9y
bUxheWVyICosIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllckNsaWVudCosIFJlbW90ZUxheWVyVHJl
ZUNvbnRleHQmKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU+
IGNyZWF0ZShjb25zdCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUmLCBXZWJDb3JlOjpQbGF0Zm9ybUNB
TGF5ZXJDbGllbnQqLCBSZW1vdGVMYXllclRyZWVDb250ZXh0Jik7CisgICAgc3RhdGljIFJlZjxQ
bGF0Zm9ybUNBTGF5ZXJSZW1vdGU+IGNyZWF0ZShXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6Okxh
eWVyVHlwZSwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50KiwgUmVtb3RlTGF5ZXJUcmVl
Q29udGV4dCYpOworICAgIHN0YXRpYyBSZWY8UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBjcmVhdGUo
UGxhdGZvcm1MYXllciAqLCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqLCBSZW1vdGVM
YXllclRyZWVDb250ZXh0Jik7CisgICAgc3RhdGljIFJlZjxQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU+
IGNyZWF0ZShjb25zdCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUmLCBXZWJDb3JlOjpQbGF0Zm9ybUNB
TGF5ZXJDbGllbnQqLCBSZW1vdGVMYXllclRyZWVDb250ZXh0Jik7CiAKICAgICB2aXJ0dWFsIH5Q
bGF0Zm9ybUNBTGF5ZXJSZW1vdGUoKTsKIApAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIGFkZEFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSwgV2ViQ29yZTo6UGxh
dGZvcm1DQUFuaW1hdGlvbiYpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uRm9y
S2V5KGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6
OlBsYXRmb3JtQ0FBbmltYXRpb24+IGFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkg
b3ZlcnJpZGU7CisgICAgUmVmUHRyPFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb24+IGFuaW1h
dGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBhbmltYXRp
b25TdGFydGVkKGNvbnN0IFN0cmluZyYga2V5LCBDRlRpbWVJbnRlcnZhbCBiZWdpblRpbWUpIG92
ZXJyaWRlOwogICAgIHZvaWQgYW5pbWF0aW9uRW5kZWQoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJy
aWRlOwogCkBAIC0xNzUsOSArMTc1LDkgQEAgcHVibGljOgogCiAgICAgV2ViQ29yZTo6VGlsZWRC
YWNraW5nKiB0aWxlZEJhY2tpbmcoKSBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CiAKLSAg
ICBQYXNzUmVmUHRyPFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcj4gY2xvbmUoV2ViQ29yZTo6UGxh
dGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPFdlYkNv
cmU6OlBsYXRmb3JtQ0FMYXllcj4gY2xvbmUoV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50
KiBvd25lcikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXll
cj4gY3JlYXRlQ29tcGF0aWJsZUxheWVyKFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJU
eXBlLCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBSZWY8UGxhdGZvcm1DQUxheWVyPiBjcmVhdGVDb21wYXRpYmxlTGF5ZXIoV2ViQ29yZTo6UGxh
dGZvcm1DQUxheWVyOjpMYXllclR5cGUsIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllckNsaWVudCop
IGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBlbnVtZXJhdGVSZWN0c0JlaW5nRHJhd24oQ0dD
b250ZXh0UmVmLCB2b2lkICheYmxvY2spKENHUmVjdCkpIG92ZXJyaWRlOwogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZUN1
c3RvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tLmgJKHJldmlzaW9uIDIxNjQxNykKKysrIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3Rl
Q3VzdG9tLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDcgQEAKICAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAotI2lmbmRlZiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b21faAotI2RlZmluZSBQ
bGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b21faAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJQ
bGF0Zm9ybUNBTGF5ZXJSZW1vdGUuaCIKIApAQCAtMzYsNyArMzUsNyBAQCBjbGFzcyBMYXllckhv
c3RpbmdDb250ZXh0OwogY2xhc3MgUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tIGZpbmFsIDog
cHVibGljIFBsYXRmb3JtQ0FMYXllclJlbW90ZSB7CiAgICAgZnJpZW5kIGNsYXNzIFBsYXRmb3Jt
Q0FMYXllclJlbW90ZTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxQbGF0Zm9ybUNB
TGF5ZXJSZW1vdGU+IGNyZWF0ZShQbGF0Zm9ybUxheWVyICosIFdlYkNvcmU6OlBsYXRmb3JtQ0FM
YXllckNsaWVudCosIFJlbW90ZUxheWVyVHJlZUNvbnRleHQmKTsKKyAgICBzdGF0aWMgUmVmPFBs
YXRmb3JtQ0FMYXllclJlbW90ZT4gY3JlYXRlKFBsYXRmb3JtTGF5ZXIgKiwgV2ViQ29yZTo6UGxh
dGZvcm1DQUxheWVyQ2xpZW50KiwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYpOwogCiAgICAgdmly
dHVhbCB+UGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tKCk7CiAKQEAgLTUwLDcgKzQ5LDcgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20oV2ViQ29y
ZTo6UGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGUsIFBsYXRmb3JtTGF5ZXIgKiwgV2ViQ29yZTo6
UGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lciwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYpOwog
Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI+IGNsb25lKFdlYkNvcmU6
OlBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZjxX
ZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI+IGNsb25lKFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllckNs
aWVudCogb3duZXIpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgYm9vbCBpc1BsYXRmb3JtQ0FMYXll
clJlbW90ZUN1c3RvbSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIApAQCAtNjUs
NSArNjQsMyBAQCBwcml2YXRlOgogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKIFNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfUExBVEZPUk1fQ0FMQVlFUihXZWJLaXQ6OlBsYXRmb3JtQ0FMYXllclJlbW90
ZUN1c3RvbSwgaXNQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUoKSkKLQotI2VuZGlmIC8vIFBsYXRmb3Jt
Q0FMYXllclJlbW90ZUN1c3RvbV9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90
ZUN1c3RvbS5tbQkocmV2aXNpb24gMjE2NDE3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20ubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDEyICs0NiwxMiBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogc3RhdGljIE5TU3Ry
aW5nICogY29uc3QgcGxhdGZvcm1DQUxheWVyUG9pbnRlciA9IEAiV0tQbGF0Zm9ybUNBTGF5ZXIi
OwogCi1QYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllclJlbW90ZT4gUGxhdGZvcm1DQUxheWVyUmVt
b3RlQ3VzdG9tOjpjcmVhdGUoUGxhdGZvcm1MYXllciAqcGxhdGZvcm1MYXllciwgUGxhdGZvcm1D
QUxheWVyQ2xpZW50KiBvd25lciwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYgY29udGV4dCkKK1Jl
ZjxQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU+IFBsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbTo6Y3Jl
YXRlKFBsYXRmb3JtTGF5ZXIgKnBsYXRmb3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCog
b3duZXIsIFJlbW90ZUxheWVyVHJlZUNvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgYXV0byBsYXll
ciA9IGFkb3B0UmVmKCpuZXcgUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tKFBsYXRmb3JtQ0FM
YXllckNvY29hOjpsYXllclR5cGVGb3JQbGF0Zm9ybUxheWVyKHBsYXRmb3JtTGF5ZXIpLCBwbGF0
Zm9ybUxheWVyLCBvd25lciwgY29udGV4dCkpOwogICAgIGNvbnRleHQubGF5ZXJXYXNDcmVhdGVk
KGxheWVyLmdldCgpLCBsYXllci0+bGF5ZXJUeXBlKCkpOwogCi0gICAgcmV0dXJuIFdURk1vdmUo
bGF5ZXIpOworICAgIHJldHVybiBsYXllcjsKIH0KIAogUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3Vz
dG9tOjpQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20oTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxh
dGZvcm1MYXllciAqIGN1c3RvbUxheWVyLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyLCBS
ZW1vdGVMYXllclRyZWVDb250ZXh0JiBjb250ZXh0KQpAQCAtMTAwLDcgKzEwMCw3IEBAIHVpbnQz
Ml90IFBsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbTo6aG8KICAgICByZXR1cm4gbV9sYXllckhv
c3RpbmdDb250ZXh0LT5jb250ZXh0SUQoKTsKIH0KIAotUGFzc1JlZlB0cjxXZWJDb3JlOjpQbGF0
Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbTo6Y2xvbmUoUGxhdGZvcm1D
QUxheWVyQ2xpZW50KiBvd25lcikgY29uc3QKK1JlZjxXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI+
IFBsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbTo6Y2xvbmUoUGxhdGZvcm1DQUxheWVyQ2xpZW50
KiBvd25lcikgY29uc3QKIHsKICAgICBSZXRhaW5QdHI8Q0FMYXllciAqPiBjbG9uZWRMYXllcjsK
ICAgICBib29sIGNvcHlDb250ZW50cyA9IHRydWU7CkBAIC0xMzMsNyArMTMzLDcgQEAgUGFzc1Jl
ZlB0cjxXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI+IFBsYQogICAgIHVwZGF0ZUNsb25lZExheWVy
UHJvcGVydGllcyhjbG9uZS5nZXQoKSwgY29weUNvbnRlbnRzKTsKIAogICAgIGNsb25lLT5zZXRD
bG9uZWRMYXllcih0aGlzKTsKLSAgICByZXR1cm4gV1RGTW92ZShjbG9uZSk7CisgICAgcmV0dXJu
IGNsb25lOwogfQogCiBDRlR5cGVSZWYgUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tOjpjb250
ZW50cygpIGNvbnN0Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309386</attachid>
            <date>2017-05-08 11:31:38 -0700</date>
            <delta_ts>2017-05-08 12:11:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171809-20170508113137.patch</filename>
            <type>text/plain</type>
            <size>49355</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDE3LTA1LTA4ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVkdWNlIFBh
c3NSZWZQdHIgdXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzE4MDkKKworICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBEdW1lei4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OmNyZWF0ZUNvbXBhdGlibGVMYXllck9yVGFrZUZyb21Q
b29sKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlQ292ZXJhZ2VNYXAuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGlsZUNvdmVyYWdlTWFwOjpUaWxlQ292ZXJhZ2VNYXApOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVHcmlkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRpbGVHcmlkOjpUaWxlR3JpZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29j
b2EvUGxhdGZvcm1DQUxheWVyQ29jb2EuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5tbToKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXll
ckNvY29hOjpjcmVhdGUpOgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyQ29jb2E6OmNsb25lKToK
KyAgICAgICAgKFBsYXRmb3JtQ0FMYXllckNvY29hOjphbmltYXRpb25Gb3JLZXkpOgorICAgICAg
ICAoUGxhdGZvcm1DQUxheWVyQ29jb2E6OmNyZWF0ZUNvbXBhdGlibGVMYXllcik6CisKIDIwMTct
MDUtMDcgIEJlbiBLZWxseSAgPGJlbkB3YW5kZXJ2aWV3LmNvbT4KIAogICAgICAgICBTZXQgdGhl
IFJlc3BvbnNlLmJsb2IoKSB0eXBlIGJhc2VkIG9uIHRoZSBjb250ZW50LXR5cGUgaGVhZGVyIHZh
bHVlLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NM
YXllckNBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCShyZXZpc2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNTYsNyArMzU2LDcgQEAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IEdyYXBo
aWNzTGF5ZQogICAgIGlmIChyZXN1bHQtPmNhbkhhdmVCYWNraW5nU3RvcmUoKSkKICAgICAgICAg
cmVzdWx0LT5zZXRXYW50c0RlZXBDb2xvckJhY2tpbmdTdG9yZShzY3JlZW5TdXBwb3J0c0V4dGVu
ZGVkQ29sb3IoKSk7CiAgICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gV1RGTW92
ZShyZXN1bHQpOwogI2VsaWYgUExBVEZPUk0oV0lOKQogICAgIHJldHVybiBQbGF0Zm9ybUNBTGF5
ZXJXaW46OmNyZWF0ZShsYXllclR5cGUsIG93bmVyKTsKICNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIu
Y3BwCShyZXZpc2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9QbGF0Zm9ybUNBTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsMTkgKzE2Nywx
NiBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6ZHJhd1RleHRBdFBvaW50KENHCiAgICAgQ1RMaW5l
RHJhdyhsaW5lLmdldCgpLCBjb250ZXh0KTsKIH0KIAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5
ZXI+IFBsYXRmb3JtQ0FMYXllcjo6Y3JlYXRlQ29tcGF0aWJsZUxheWVyT3JUYWtlRnJvbVBvb2wo
UGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGUgbGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGll
bnQqIGNsaWVudCwgSW50U2l6ZSBzaXplKQorUmVmPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1D
QUxheWVyOjpjcmVhdGVDb21wYXRpYmxlTGF5ZXJPclRha2VGcm9tUG9vbChQbGF0Zm9ybUNBTGF5
ZXI6OkxheWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogY2xpZW50LCBJ
bnRTaXplIHNpemUpCiB7Ci0gICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gbGF5ZXI7Ci0KLSAg
ICBpZiAoKGxheWVyID0gbGF5ZXJQb29sKCkudGFrZUxheWVyV2l0aFNpemUoc2l6ZSkpKSB7Ci0g
ICAgICAgIGxheWVyLT5zZXRPd25lcihjbGllbnQpOwotICAgICAgICByZXR1cm4gV1RGTW92ZShs
YXllcik7CisgICAgaWYgKGF1dG8gbGF5ZXJGcm9tUG9vbCA9IGxheWVyUG9vbCgpLnRha2VMYXll
cldpdGhTaXplKHNpemUpKSB7CisgICAgICAgIGxheWVyRnJvbVBvb2wtPnNldE93bmVyKGNsaWVu
dCk7CisgICAgICAgIHJldHVybiBsYXllckZyb21Qb29sLnJlbGVhc2VOb25OdWxsKCk7CiAgICAg
fQogCi0gICAgbGF5ZXIgPSBjcmVhdGVDb21wYXRpYmxlTGF5ZXIobGF5ZXJUeXBlLCBjbGllbnQp
OworICAgIGF1dG8gbGF5ZXIgPSBjcmVhdGVDb21wYXRpYmxlTGF5ZXIobGF5ZXJUeXBlLCBjbGll
bnQpOwogICAgIGxheWVyLT5zZXRCb3VuZHMoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSkp
OwotICAgIAotICAgIHJldHVybiBXVEZNb3ZlKGxheWVyKTsKKyAgICByZXR1cm4gbGF5ZXI7CiB9
CiAKIHZvaWQgUGxhdGZvcm1DQUxheWVyOjptb3ZlVG9MYXllclBvb2woKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVy
LmgJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL1BsYXRmb3JtQ0FMYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAj
aW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUgPFF1YXJ0ekNvcmUvQ0FCYXNlLmg+
CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KICNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CkBAIC04Miw3ICs4MSw3IEBAIHB1YmxpYzoK
ICAgICB9OwogICAgIGVudW0gRmlsdGVyVHlwZSB7IExpbmVhciwgTmVhcmVzdCwgVHJpbGluZWFy
IH07CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBjbG9uZShQbGF0
Zm9ybUNBTGF5ZXJDbGllbnQqKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBSZWY8UGxhdGZvcm1D
QUxheWVyPiBjbG9uZShQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKSBjb25zdCA9IDA7CiAKICAgICB2
aXJ0dWFsIH5QbGF0Zm9ybUNBTGF5ZXIoKTsKIApAQCAtMTMyLDcgKzEzMSw3IEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgdm9pZCBhZGRBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXks
IFBsYXRmb3JtQ0FBbmltYXRpb24mKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1h
dGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBhbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkp
ID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBhbmltYXRpb25G
b3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNr
KFBsYXRmb3JtQ0FMYXllciopID0gMDsKIApAQCAtMjYwLDggKzI1OSw4IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldEFuY2hvclBvaW50T25NYWluVGhyZWFkKEZsb2F0UG9pbnQzRCk7CiAjZW5kaWYK
IAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZUNvbXBhdGli
bGVMYXllcihMYXllclR5cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCopIGNvbnN0ID0gMDsKLSAg
ICBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlQ29tcGF0aWJsZUxheWVyT3JUYWtl
RnJvbVBvb2woTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBjbGll
bnQsIEludFNpemUpOworICAgIHZpcnR1YWwgUmVmPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlQ29t
cGF0aWJsZUxheWVyKExheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KikgY29uc3QgPSAw
OworICAgIFJlZjxQbGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZUNvbXBhdGlibGVMYXllck9yVGFrZUZy
b21Qb29sKExheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiwgSW50U2l6ZSk7CiAKICNp
ZiBQTEFURk9STShDT0NPQSkKICAgICB2aXJ0dWFsIHZvaWQgZW51bWVyYXRlUmVjdHNCZWluZ0Ry
YXduKENHQ29udGV4dFJlZiwgdm9pZCAoXmJsb2NrKShDR1JlY3QpKSA9IDA7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlQ292ZXJhZ2VNYXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVDb3ZlcmFn
ZU1hcC5jcHAJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL1RpbGVDb3ZlcmFnZU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEwICsz
NSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBUaWxlQ292ZXJhZ2VNYXA6OlRpbGVDb3ZlcmFn
ZU1hcChjb25zdCBUaWxlQ29udHJvbGxlciYgY29udHJvbGxlcikKICAgICA6IG1fY29udHJvbGxl
cihjb250cm9sbGVyKQogICAgICwgbV91cGRhdGVUaW1lcigqdGhpcywgJlRpbGVDb3ZlcmFnZU1h
cDo6dXBkYXRlVGltZXJGaXJlZCkKLSAgICAsIG1fbGF5ZXIoKmNvbnRyb2xsZXIucm9vdExheWVy
KCkuY3JlYXRlQ29tcGF0aWJsZUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlU2ltcGxl
TGF5ZXIsIHRoaXMpKQotICAgICwgbV92aXNpYmxlVmlld3BvcnRJbmRpY2F0b3JMYXllcigqY29u
dHJvbGxlci5yb290TGF5ZXIoKS5jcmVhdGVDb21wYXRpYmxlTGF5ZXIoUGxhdGZvcm1DQUxheWVy
OjpMYXllclR5cGVMYXllciwgbnVsbHB0cikpCi0gICAgLCBtX2xheW91dFZpZXdwb3J0SW5kaWNh
dG9yTGF5ZXIoKmNvbnRyb2xsZXIucm9vdExheWVyKCkuY3JlYXRlQ29tcGF0aWJsZUxheWVyKFBs
YXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5ZXIsIG51bGxwdHIpKQotICAgICwgbV9jb3ZlcmFn
ZVJlY3RJbmRpY2F0b3JMYXllcigqY29udHJvbGxlci5yb290TGF5ZXIoKS5jcmVhdGVDb21wYXRp
YmxlTGF5ZXIoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVMYXllciwgbnVsbHB0cikpCisgICAg
LCBtX2xheWVyKGNvbnRyb2xsZXIucm9vdExheWVyKCkuY3JlYXRlQ29tcGF0aWJsZUxheWVyKFBs
YXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlU2ltcGxlTGF5ZXIsIHRoaXMpKQorICAgICwgbV92aXNp
YmxlVmlld3BvcnRJbmRpY2F0b3JMYXllcihjb250cm9sbGVyLnJvb3RMYXllcigpLmNyZWF0ZUNv
bXBhdGlibGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxheWVyLCBudWxscHRyKSkK
KyAgICAsIG1fbGF5b3V0Vmlld3BvcnRJbmRpY2F0b3JMYXllcihjb250cm9sbGVyLnJvb3RMYXll
cigpLmNyZWF0ZUNvbXBhdGlibGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxheWVy
LCBudWxscHRyKSkKKyAgICAsIG1fY292ZXJhZ2VSZWN0SW5kaWNhdG9yTGF5ZXIoY29udHJvbGxl
ci5yb290TGF5ZXIoKS5jcmVhdGVDb21wYXRpYmxlTGF5ZXIoUGxhdGZvcm1DQUxheWVyOjpMYXll
clR5cGVMYXllciwgbnVsbHB0cikpCiAgICAgLCBtX3Bvc2l0aW9uKEZsb2F0UG9pbnQoMCwgY29u
dHJvbGxlci50b3BDb250ZW50SW5zZXQoKSkpCiB7CiAgICAgbV9sYXllci5nZXQoKS5zZXRPcGFj
aXR5KDAuNzUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvVGls
ZUdyaWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL1RpbGVHcmlkLmNwcAkocmV2aXNpb24gMjE2NDE3KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUdyaWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2
NSw3IEBAIHN0YXRpYyBTdHJpbmcgdmFsaWRhdGlvblBvbGljeUFzU3RyaW5nKFQKIAogVGlsZUdy
aWQ6OlRpbGVHcmlkKFRpbGVDb250cm9sbGVyJiBjb250cm9sbGVyKQogICAgIDogbV9jb250cm9s
bGVyKGNvbnRyb2xsZXIpCi0gICAgLCBtX2NvbnRhaW5lckxheWVyKCpjb250cm9sbGVyLnJvb3RM
YXllcigpLmNyZWF0ZUNvbXBhdGlibGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxh
eWVyLCBudWxscHRyKSkKKyAgICAsIG1fY29udGFpbmVyTGF5ZXIoY29udHJvbGxlci5yb290TGF5
ZXIoKS5jcmVhdGVDb21wYXRpYmxlTGF5ZXIoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVMYXll
ciwgbnVsbHB0cikpCiAgICAgLCBtX2NvaG9ydFJlbW92YWxUaW1lcigqdGhpcywgJlRpbGVHcmlk
Ojpjb2hvcnRSZW1vdmFsVGltZXJGaXJlZCkKICAgICAsIG1fdGlsZVNpemUoa0RlZmF1bHRUaWxl
U2l6ZSwga0RlZmF1bHRUaWxlU2l6ZSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVy
Q29jb2EuaAkocmV2aXNpb24gMjE2NDE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVyQ29jb2EuaAkod29ya2luZyBjb3B5KQpAQCAt
MzMsMTEgKzMzLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUGxhdGZvcm1DQUxh
eWVyQ29jb2EgZmluYWwgOiBwdWJsaWMgUGxhdGZvcm1DQUxheWVyIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZShMYXllclR5cGUsIFBsYXRm
b3JtQ0FMYXllckNsaWVudCopOworICAgIHN0YXRpYyBSZWY8UGxhdGZvcm1DQUxheWVyPiBjcmVh
dGUoTGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKTsKICAgICAKICAgICAvLyBUaGlz
IGZ1bmN0aW9uIHBhc3NlcyB0aGUgbGF5ZXIgYXMgYSB2b2lkKiByYXRoZXIgdGhhbiBhIFBsYXRm
b3JtTGF5ZXIgYmVjYXVzZSBQbGF0Zm9ybUxheWVyCiAgICAgLy8gaXMgZGVmaW5lZCBkaWZmZXJl
bnRseSBmb3IgT2JqIEMgYW5kIEMrKy4gVGhpcyBhbGxvd3MgY2FsbGVycyBmcm9tIGJvdGggbGFu
Z3VhZ2VzLgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlKHZv
aWQqIHBsYXRmb3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCopOworICAgIHN0YXRpYyBS
ZWY8UGxhdGZvcm1DQUxheWVyPiBjcmVhdGUodm9pZCogcGxhdGZvcm1MYXllciwgUGxhdGZvcm1D
QUxheWVyQ2xpZW50Kik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgTGF5ZXJUeXBlIGxh
eWVyVHlwZUZvclBsYXRmb3JtTGF5ZXIoUGxhdGZvcm1MYXllciopOwogCkBAIC02Miw3ICs2Miw3
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWRkQW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYg
a2V5LCBQbGF0Zm9ybUNBQW5pbWF0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCByZW1vdmVBbmlt
YXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOwotICAgIFBhc3NSZWZQdHI8
UGxhdGZvcm1DQUFuaW1hdGlvbj4gYW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5KSBv
dmVycmlkZTsKKyAgICBSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gYW5pbWF0aW9uRm9yS2V5
KGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKICAgICB2b2lkIGFuaW1hdGlvblN0YXJ0ZWQo
Y29uc3QgU3RyaW5nJiBrZXksIENGVGltZUludGVydmFsIGJlZ2luVGltZSkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBhbmltYXRpb25FbmRlZChjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7CiAKQEAg
LTE2OSw5ICsxNjksOSBAQCBwdWJsaWM6CiAKICAgICBUaWxlZEJhY2tpbmcqIHRpbGVkQmFja2lu
ZygpIG92ZXJyaWRlOwogCi0gICAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IGNsb25lKFBs
YXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZjxQbGF0
Zm9ybUNBTGF5ZXI+IGNsb25lKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0IG92
ZXJyaWRlOwogCi0gICAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZUNvbXBhdGli
bGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50
KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlQ29tcGF0
aWJsZUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGll
bnQqKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgZW51bWVyYXRlUmVjdHNCZWluZ0RyYXdu
KENHQ29udGV4dFJlZiwgdm9pZCAoXmJsb2NrKShDR1JlY3QpKSBvdmVycmlkZTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVy
Q29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvY29jb2EvUGxhdGZvcm1DQUxheWVyQ29jb2EubW0JKHJldmlzaW9uIDIxNjQxNykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNv
Y29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02OSwxNCArNjksMTQgQEAgU09GVF9MSU5LX0NMQVNT
X09QVElPTkFMKEFWRm91bmRhdGlvbiwgQQogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAot
UGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllckNvY29hOjpjcmVhdGUo
TGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikKK1JlZjxQ
bGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllckNvY29hOjpjcmVhdGUoTGF5ZXJUeXBlIGxh
eWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikKIHsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFBsYXRmb3JtQ0FMYXllckNvY29hKGxheWVyVHlwZSwgb3duZXIpKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBQbGF0Zm9ybUNBTGF5ZXJDb2NvYShsYXllclR5cGUsIG93bmVy
KSk7CiB9CiAKLVBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJDb2Nv
YTo6Y3JlYXRlKHZvaWQqIHBsYXRmb3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3du
ZXIpCitSZWY8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y3JlYXRlKHZv
aWQqIHBsYXRmb3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBQbGF0Zm9ybUNBTGF5ZXJDb2NvYShzdGF0aWNfY2FzdDxQbGF0
Zm9ybUxheWVyKj4ocGxhdGZvcm1MYXllciksIG93bmVyKSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgUGxhdGZvcm1DQUxheWVyQ29jb2Eoc3RhdGljX2Nhc3Q8UGxhdGZvcm1MYXllcio+KHBs
YXRmb3JtTGF5ZXIpLCBvd25lcikpOwogfQogCiBzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBwbGF0
Zm9ybUNBTGF5ZXJQb2ludGVyID0gQCJXS1BsYXRmb3JtQ0FMYXllciI7CkBAIC0zMTEsNyArMzEx
LDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y29tbW9uSW5pdCgpCiAgICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi1QYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxh
dGZvcm1DQUxheWVyQ29jb2E6OmNsb25lKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNv
bnN0CitSZWY8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y2xvbmUoUGxh
dGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikgY29uc3QKIHsKICAgICBMYXllclR5cGUgdHlwZTsK
ICAgICBzd2l0Y2ggKGxheWVyVHlwZSgpKSB7CkBAIC0zMzIsNyArMzMyLDcgQEAgUGFzc1JlZlB0
cjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYQogICAgICAgICB0eXBlID0gTGF5ZXJUeXBl
TGF5ZXI7CiAgICAgICAgIGJyZWFrOwogICAgIH07Ci0gICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXll
cj4gbmV3TGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y3JlYXRlKHR5cGUsIG93bmVyKTsK
KyAgICBhdXRvIG5ld0xheWVyID0gUGxhdGZvcm1DQUxheWVyQ29jb2E6OmNyZWF0ZSh0eXBlLCBv
d25lcik7CiAgICAgCiAgICAgbmV3TGF5ZXItPnNldFBvc2l0aW9uKHBvc2l0aW9uKCkpOwogICAg
IG5ld0xheWVyLT5zZXRCb3VuZHMoYm91bmRzKCkpOwpAQCAtMzUyLDcgKzM1Miw3IEBAIFBhc3NS
ZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGEKICAgICBpZiAodHlwZSA9PSBMYXll
clR5cGVBVlBsYXllckxheWVyKSB7CiAgICAgICAgIEFTU0VSVChbbmV3TGF5ZXItPnBsYXRmb3Jt
TGF5ZXIoKSBpc0tpbmRPZkNsYXNzOmdldEFWUGxheWVyTGF5ZXJDbGFzcygpXSk7CiAKLSAgICAg
ICAgQVZQbGF5ZXJMYXllciAqZGVzdGluYXRpb25QbGF5ZXJMYXllciA9IHN0YXRpY19jYXN0PFBs
YXRmb3JtQ0FMYXllckNvY29hICo+KG5ld0xheWVyLmdldCgpKS0+YXZQbGF5ZXJMYXllcigpOwor
ICAgICAgICBBVlBsYXllckxheWVyICpkZXN0aW5hdGlvblBsYXllckxheWVyID0gc3RhdGljX2Nh
c3Q8UGxhdGZvcm1DQUxheWVyQ29jb2EmPihuZXdMYXllci5nZXQoKSkuYXZQbGF5ZXJMYXllcigp
OwogICAgICAgICBBVlBsYXllckxheWVyICpzb3VyY2VQbGF5ZXJMYXllciA9IGF2UGxheWVyTGF5
ZXIoKTsKICAgICAgICAgQVNTRVJUKHNvdXJjZVBsYXllckxheWVyKTsKIApAQCAtNTA4LDExICs1
MDgsMTEgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6cmVtb3ZlQW5pbWF0aQogICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0
aW9uPiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6YW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYg
a2V5KQorUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IFBsYXRmb3JtQ0FMYXllckNvY29hOjph
bmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpCiB7CiAgICAgQ0FQcm9wZXJ0eUFuaW1h
dGlvbiogcHJvcGVydHlBbmltYXRpb24gPSBzdGF0aWNfY2FzdDxDQVByb3BlcnR5QW5pbWF0aW9u
Kj4oW21fbGF5ZXIgYW5pbWF0aW9uRm9yS2V5OmtleV0pOwogICAgIGlmICghcHJvcGVydHlBbmlt
YXRpb24pCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBy
ZXR1cm4gUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpjcmVhdGUocHJvcGVydHlBbmltYXRpb24p
OwogfQogCkBAIC0xMTkwLDcgKzExOTAsNyBAQCBDR1JlY3QgUGxhdGZvcm1DQUxheWVyOjpmcmFt
ZUZvckxheWVyKGNvCiAgICAgcmV0dXJuIFt0aWxlTGF5ZXIgZnJhbWVdOwogfQogCi1QYXNzUmVm
UHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1DQUxheWVyQ29jb2E6OmNyZWF0ZUNvbXBhdGli
bGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3JtQ0FM
YXllckNsaWVudCogY2xpZW50KSBjb25zdAorUmVmPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1D
QUxheWVyQ29jb2E6OmNyZWF0ZUNvbXBhdGlibGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVy
VHlwZSBsYXllclR5cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogY2xpZW50KSBjb25zdAogewog
ICAgIHJldHVybiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y3JlYXRlKGxheWVyVHlwZSwgY2xpZW50
KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0
Zm9ybUNBTGF5ZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCShyZXZpc2lvbiAyMTY0MTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxh
eWVyV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTQgKzQ3LDE0IEBACiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCi1QYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1D
QUxheWVyV2luOjpjcmVhdGUoTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xp
ZW50KiBvd25lcikKK1JlZjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllcldpbjo6Y3Jl
YXRlKExheWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQbGF0Zm9ybUNBTGF5ZXJXaW4obGF5ZXJUeXBlLCBu
dWxscHRyLCBvd25lcikpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBsYXRmb3JtQ0FMYXll
cldpbihsYXllclR5cGUsIG51bGxwdHIsIG93bmVyKSk7CiB9CiAKLVBhc3NSZWZQdHI8UGxhdGZv
cm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJXaW46OmNyZWF0ZShQbGF0Zm9ybUxheWVyKiBwbGF0
Zm9ybUxheWVyLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKQorUmVmPFBsYXRmb3JtQ0FM
YXllcj4gUGxhdGZvcm1DQUxheWVyV2luOjpjcmVhdGUoUGxhdGZvcm1MYXllciogcGxhdGZvcm1M
YXllciwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikKIHsKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFBsYXRmb3JtQ0FMYXllcldpbihMYXllclR5cGVDdXN0b20sIHBsYXRmb3JtTGF5ZXIs
IG93bmVyKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGxhdGZvcm1DQUxheWVyV2luKExh
eWVyVHlwZUN1c3RvbSwgcGxhdGZvcm1MYXllciwgb3duZXIpKTsKIH0KIAogc3RhdGljIENGU3Ry
aW5nUmVmIHRvQ0FDRkxheWVyVHlwZShQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSB0eXBlKQpA
QCAtMTgxLDExICsxODEsMTEgQEAgUGxhdGZvcm1DQUxheWVyV2luOjp+UGxhdGZvcm1DQUxheWVy
V2luKAogICAgIGRlbGV0ZSBsYXllckludGVybjsKIH0KIAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNB
TGF5ZXI+IFBsYXRmb3JtQ0FMYXllcldpbjo6Y2xvbmUoUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBv
d25lcikgY29uc3QKK1JlZjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllcldpbjo6Y2xv
bmUoUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikgY29uc3QKIHsKICAgICBQbGF0Zm9ybUNB
TGF5ZXI6OkxheWVyVHlwZSB0eXBlID0gKGxheWVyVHlwZSgpID09IFBsYXRmb3JtQ0FMYXllcjo6
TGF5ZXJUeXBlVHJhbnNmb3JtTGF5ZXIpID8KICAgICAgICAgUGxhdGZvcm1DQUxheWVyOjpMYXll
clR5cGVUcmFuc2Zvcm1MYXllciA6IFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5ZXI7Ci0g
ICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gbmV3TGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXJXaW46
OmNyZWF0ZSh0eXBlLCBvd25lcik7CisgICAgYXV0byBuZXdMYXllciA9IFBsYXRmb3JtQ0FMYXll
cldpbjo6Y3JlYXRlKHR5cGUsIG93bmVyKTsKIAogICAgIG5ld0xheWVyLT5zZXRQb3NpdGlvbihw
b3NpdGlvbigpKTsKICAgICBuZXdMYXllci0+c2V0Qm91bmRzKGJvdW5kcygpKTsKQEAgLTM1Myw3
ICszNTMsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6cmVtb3ZlQW5pbWF0aW9uCiAgICAg
c2V0TmVlZHNDb21taXQoKTsKIH0KIAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBQ
bGF0Zm9ybUNBTGF5ZXJXaW46OmFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkKK1Jl
ZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBQbGF0Zm9ybUNBTGF5ZXJXaW46OmFuaW1hdGlvbkZv
cktleShjb25zdCBTdHJpbmcmIGtleSkKIHsKICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFBs
YXRmb3JtQ0FBbmltYXRpb24+ID46Oml0ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25zLmZpbmQoa2V5
KTsKICAgICBpZiAoaXQgPT0gbV9hbmltYXRpb25zLmVuZCgpKQpAQCAtOTM5LDcgKzkzOSw3IEBA
IFN0cmluZyBQbGF0Zm9ybUNBTGF5ZXJXaW46OmxheWVyVHJlZUFzU3QKICAgICByZXR1cm4gYnVp
bGRlci50b1N0cmluZygpOwogfQogCi1QYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZv
cm1DQUxheWVyV2luOjpjcmVhdGVDb21wYXRpYmxlTGF5ZXIoUGxhdGZvcm1DQUxheWVyOjpMYXll
clR5cGUgbGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIGNsaWVudCkgY29uc3QKK1Jl
ZjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllcldpbjo6Y3JlYXRlQ29tcGF0aWJsZUxh
eWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVy
Q2xpZW50KiBjbGllbnQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFBsYXRmb3JtQ0FMYXllcldpbjo6
Y3JlYXRlKGxheWVyVHlwZSwgY2xpZW50KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2lu
LmgJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIs
OCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFBsYXRmb3JtQ0FMYXllcldpbiBmaW5h
bCA6IHB1YmxpYyBQbGF0Zm9ybUNBTGF5ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlKExheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xp
ZW50Kik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBjcmVhdGUoUGxh
dGZvcm1MYXllciosIFBsYXRmb3JtQ0FMYXllckNsaWVudCopOworICAgIHN0YXRpYyBSZWY8UGxh
dGZvcm1DQUxheWVyPiBjcmVhdGUoTGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKTsK
KyAgICBzdGF0aWMgUmVmPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlKFBsYXRmb3JtTGF5ZXIqLCBQ
bGF0Zm9ybUNBTGF5ZXJDbGllbnQqKTsKICAgICAKICAgICB+UGxhdGZvcm1DQUxheWVyV2luKCk7
CiAKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGRBbmltYXRpb25Gb3JL
ZXkoY29uc3QgU3RyaW5nJiBrZXksIFBsYXRmb3JtQ0FBbmltYXRpb24mKSBvdmVycmlkZTsKICAg
ICB2b2lkIHJlbW92ZUFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7
Ci0gICAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBhbmltYXRpb25Gb3JLZXkoY29u
c3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOworICAgIFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9u
PiBhbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOwogICAgIHZvaWQg
YW5pbWF0aW9uU3RhcnRlZChjb25zdCBTdHJpbmcmIGtleSwgQ0ZUaW1lSW50ZXJ2YWwgYmVnaW5U
aW1lKSBvdmVycmlkZTsKICAgICB2b2lkIGFuaW1hdGlvbkVuZGVkKGNvbnN0IFN0cmluZyYga2V5
KSBvdmVycmlkZTsKIApAQCAtMTY1LDkgKzE2NSw5IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBs
YXllclRyZWVBc1N0cmluZygpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgUGFzc1JlZlB0cjxQbGF0
Zm9ybUNBTGF5ZXI+IGNsb25lKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0IG92
ZXJyaWRlOworICAgIFJlZjxQbGF0Zm9ybUNBTGF5ZXI+IGNsb25lKFBsYXRmb3JtQ0FMYXllckNs
aWVudCogb3duZXIpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNB
TGF5ZXI+IGNyZWF0ZUNvbXBhdGlibGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSwg
UGxhdGZvcm1DQUxheWVyQ2xpZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPFBsYXRmb3Jt
Q0FMYXllcj4gY3JlYXRlQ29tcGF0aWJsZUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBl
LCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAg
ICBQbGF0Zm9ybUNBTGF5ZXJXaW4oTGF5ZXJUeXBlLCBQbGF0Zm9ybUxheWVyKiwgUGxhdGZvcm1D
QUxheWVyQ2xpZW50KiBvd25lcik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTY0MjYpCisr
KyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1NCBA
QAorMjAxNy0wNS0wOCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3Jn
PgorCisgICAgICAgIFJlZHVjZSBQYXNzUmVmUHRyIHVzZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxODA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Q2hyaXMgRHVtZXouCisKKyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQ
cm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6c2V0SW5p
dGlhbGl6YXRpb25SZXBseSk6CisgICAgICAgICogUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9s
bGVyUHJveHkuaDoKKyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9u
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmRlc3Ryb3lQbHVn
aW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Y3JlYXRlUGx1Z2lu
KToKKyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uLmg6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OnJ1bk9wZW5QYW5lbCk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnJlZ2lzdGVyVW5kb1N0ZXApOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5jcHA6CisgICAgICAg
IChXZWJLaXQ6OlZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyOjpnZXRPckNyZWF0ZSk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLmg6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViRnJhbWU6OmhpdFRlc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZTo6Y3JlYXRl
U2VsZWN0aW9uU25hcHNob3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFt
ZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJPcGVuUGFuZWxSZXN1bHRMaXN0
ZW5lci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcjo6V2Vi
T3BlblBhbmVsUmVzdWx0TGlzdGVuZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dW5hcHBseUVkaXRDb21t
YW5kKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVhcHBseUVkaXRDb21tYW5kKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlR3JvdXBQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViVW5kb1N0ZXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJVbmRvU3RlcDo6Y3Jl
YXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVW5kb1N0ZXAuaDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViVW5kb1N0ZXA6OnN0ZXApOgorICAgICAgICAoV2ViS2l0OjpXZWJVbmRv
U3RlcDo6V2ViVW5kb1N0ZXApOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxh
dGZvcm1DQUxheWVyUmVtb3RlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGxhdGZvcm1DQUxheWVy
UmVtb3RlOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6
OmNsb25lKToKKyAgICAgICAgKFdlYktpdDo6UGxhdGZvcm1DQUxheWVyUmVtb3RlOjphbmltYXRp
b25Gb3JLZXkpOgorICAgICAgICAoV2ViS2l0OjpQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNyZWF0
ZUNvbXBhdGlibGVMYXllcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0
Zm9ybUNBTGF5ZXJSZW1vdGUuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1Bs
YXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tLm1tOgorICAgICAgICAoV2ViS2l0OjpQ
bGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b206OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBs
YXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbTo6Y2xvbmUpOgorCiAyMDE3LTA1LTA4ICBDaHJpcyBE
dW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSAnc3R5bGUnIGZyb20gRWxl
bWVudCB0byBIVE1MRWxlbWVudCAvIFNWR0VsZW1lbnQgYW5kIG1ha2UgaXQgc2V0dGFibGUKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRy
b2xsZXJQcm94eS5jcHAJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJLaXQyL1BsdWdp
blByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEs
MTAgKzkxLDEwIEBAIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6flBsdWdpbkNvbnRyb2xsZXIKICAg
ICAgICAgcmVsZWFzZU5QT2JqZWN0KG1fcGx1Z2luRWxlbWVudE5QT2JqZWN0KTsKIH0KIAotdm9p
ZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OnNldEluaXRpYWxpemF0aW9uUmVwbHkoUGFzc1JlZlB0
cjxNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkNyZWF0ZVBsdWdpbjo6RGVsYXllZFJl
cGx5PiByZXBseSkKK3ZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpzZXRJbml0aWFsaXphdGlv
blJlcGx5KFJlZjxNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkNyZWF0ZVBsdWdpbjo6
RGVsYXllZFJlcGx5PiYmIHJlcGx5KQogewogICAgIEFTU0VSVCghbV9pbml0aWFsaXphdGlvblJl
cGx5KTsKLSAgICBtX2luaXRpYWxpemF0aW9uUmVwbHkgPSByZXBseTsKKyAgICBtX2luaXRpYWxp
emF0aW9uUmVwbHkgPSBXVEZNb3ZlKHJlcGx5KTsKIH0KIAogUmVmUHRyPE1lc3NhZ2VzOjpXZWJQ
cm9jZXNzQ29ubmVjdGlvbjo6Q3JlYXRlUGx1Z2luOjpEZWxheWVkUmVwbHk+IFBsdWdpbkNvbnRy
b2xsZXJQcm94eTo6dGFrZUluaXRpYWxpemF0aW9uUmVwbHkoKQpJbmRleDogU291cmNlL1dlYktp
dDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5oCShyZXZp
c2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRy
b2xsZXJQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKIAog
ICAgIGJvb2wgaXNJbml0aWFsaXppbmcoKSBjb25zdCB7IHJldHVybiBtX2lzSW5pdGlhbGl6aW5n
OyB9CiAgICAgCi0gICAgdm9pZCBzZXRJbml0aWFsaXphdGlvblJlcGx5KFBhc3NSZWZQdHI8TWVz
c2FnZXM6OldlYlByb2Nlc3NDb25uZWN0aW9uOjpDcmVhdGVQbHVnaW46OkRlbGF5ZWRSZXBseT4p
OworICAgIHZvaWQgc2V0SW5pdGlhbGl6YXRpb25SZXBseShSZWY8TWVzc2FnZXM6OldlYlByb2Nl
c3NDb25uZWN0aW9uOjpDcmVhdGVQbHVnaW46OkRlbGF5ZWRSZXBseT4mJik7CiAgICAgUmVmUHRy
PE1lc3NhZ2VzOjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Q3JlYXRlUGx1Z2luOjpEZWxheWVkUmVw
bHk+IHRha2VJbml0aWFsaXphdGlvblJlcGx5KCk7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uLmNw
cAkocmV2aXNpb24gMjE2NDE3KQorKysgU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9XZWJQ
cm9jZXNzQ29ubmVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw3ICsxNzYsNyBAQCB2
b2lkIFdlYlByb2Nlc3NDb25uZWN0aW9uOjpkaWRDbG9zZShJUEM6CiAgICAgICAgIGRlc3Ryb3lQ
bHVnaW5Db250cm9sbGVyUHJveHkocGx1Z2luQ29udHJvbGxlcnNbaV0pOwogfQogCi12b2lkIFdl
YlByb2Nlc3NDb25uZWN0aW9uOjpkZXN0cm95UGx1Z2luKHVpbnQ2NF90IHBsdWdpbkluc3RhbmNl
SUQsIGJvb2wgYXN5bmNocm9ub3VzQ3JlYXRpb25JbmNvbXBsZXRlLCBQYXNzUmVmUHRyPE1lc3Nh
Z2VzOjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6RGVzdHJveVBsdWdpbjo6RGVsYXllZFJlcGx5PiBy
ZXBseSkKK3ZvaWQgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmRlc3Ryb3lQbHVnaW4odWludDY0X3Qg
cGx1Z2luSW5zdGFuY2VJRCwgYm9vbCBhc3luY2hyb25vdXNDcmVhdGlvbkluY29tcGxldGUsIFJl
ZjxNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkRlc3Ryb3lQbHVnaW46OkRlbGF5ZWRS
ZXBseT4mJiByZXBseSkKIHsKICAgICAvLyBXZSByZXR1cm4gaW1tZWRpYXRlbHkgZnJvbSB0aGlz
IHN5bmNocm9ub3VzIElQQy4gV2Ugd2FudCB0byBtYWtlIHN1cmUgdGhlIHBsdWdpbiBkZXN0cnVj
dGlvbiBpcyBqdXN0IGFib3V0IHRvIHN0YXJ0IHNvIGF1ZGlvIHBsYXliYWNrCiAgICAgLy8gd2ls
bCBmaW5pc2ggc29vbiBhZnRlciByZXR1cm5pbmcuIEhvd2V2ZXIgd2UgZG9uJ3Qgd2FudCB0byB3
YWl0IGZvciBkZXN0cnVjdGlvbiB0byBjb21wbGV0ZSBmdWxseSBhcyB0aGF0IG1heSB0YWtlIGEg
d2hpbGUuCkBAIC0yMjksNyArMjI5LDcgQEAgdm9pZCBXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Y3Jl
YXRlUGx1Z2luSQogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmNyZWF0
ZVBsdWdpbihjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmIGNyZWF0aW9uUGFyYW1ldGVy
cywgUGFzc1JlZlB0cjxNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkNyZWF0ZVBsdWdp
bjo6RGVsYXllZFJlcGx5PiByZXBseSkKK3ZvaWQgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmNyZWF0
ZVBsdWdpbihjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmIGNyZWF0aW9uUGFyYW1ldGVy
cywgUmVmPE1lc3NhZ2VzOjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Q3JlYXRlUGx1Z2luOjpEZWxh
eWVkUmVwbHk+JiYgcmVwbHkpCiB7CiAgICAgLy8gRW5zdXJlIHdlIGRvbid0IGNsYW1wIGFueSB0
aW1lcnMgZHVyaW5nIGluaXRpYWxpemF0aW9uCiAgICAgQWN0aXZpdHlBc3NlcnRpb24gYWN0aXZp
dHlBc3NlcnRpb24oUGx1Z2luUHJvY2Vzczo6c2luZ2xldG9uKCkuY29ubmVjdGlvbkFjdGl2aXR5
KCkpOwpAQCAtMjQwLDcgKzI0MCw3IEBAIHZvaWQgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmNyZWF0
ZVBsdWdpbigKICAgICBpZiAocGx1Z2luQ29udHJvbGxlclByb3h5KSB7CiAgICAgICAgIC8vIEl0
IG1pZ2h0IHN0aWxsIGJlIGluIHRoZSBtaWRkbGUgb2YgaW5pdGlhbGl6YXRpb24gaW4gd2hpY2gg
Y2FzZSB3ZSBoYXZlIHRvIGxldCB0aGF0IGluaXRpYWxpemF0aW9uIGNvbXBsZXRlIGFuZCByZXNw
b25kIHRvIHRoaXMgbWVzc2FnZSBsYXRlci4KICAgICAgICAgaWYgKHBsdWdpbkNvbnRyb2xsZXJQ
cm94eS0+aXNJbml0aWFsaXppbmcoKSkgewotICAgICAgICAgICAgcGx1Z2luQ29udHJvbGxlclBy
b3h5LT5zZXRJbml0aWFsaXphdGlvblJlcGx5KHJlcGx5KTsKKyAgICAgICAgICAgIHBsdWdpbkNv
bnRyb2xsZXJQcm94eS0+c2V0SW5pdGlhbGl6YXRpb25SZXBseShXVEZNb3ZlKHJlcGx5KSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9XZWJQcm9jZXNzQ29ubmVjdGlvbi5oCShyZXZp
c2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3ND
b25uZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFdlYlByb2Nlc3NDb25uZWN0
aW9uX2gKLSNkZWZpbmUgV2ViUHJvY2Vzc0Nvbm5lY3Rpb25faAorI3ByYWdtYSBvbmNlCiAKICNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIApAQCAtNzAsOSArNjksOSBAQCBwcml2YXRl
OgogICAgIC8vIE1lc3NhZ2UgaGFuZGxlcnMuCiAgICAgdm9pZCBkaWRSZWNlaXZlV2ViUHJvY2Vz
c0Nvbm5lY3Rpb25NZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwogICAg
IHZvaWQgZGlkUmVjZWl2ZVN5bmNXZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKTsK
LSAgICB2b2lkIGNyZWF0ZVBsdWdpbihjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmLCBQ
YXNzUmVmUHRyPE1lc3NhZ2VzOjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Q3JlYXRlUGx1Z2luOjpE
ZWxheWVkUmVwbHk+KTsKKyAgICB2b2lkIGNyZWF0ZVBsdWdpbihjb25zdCBQbHVnaW5DcmVhdGlv
blBhcmFtZXRlcnMmLCBSZWY8TWVzc2FnZXM6OldlYlByb2Nlc3NDb25uZWN0aW9uOjpDcmVhdGVQ
bHVnaW46OkRlbGF5ZWRSZXBseT4mJik7CiAgICAgdm9pZCBjcmVhdGVQbHVnaW5Bc3luY2hyb25v
dXNseShjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICB2b2lkIGRlc3Ryb3lQ
bHVnaW4odWludDY0X3QgcGx1Z2luSW5zdGFuY2VJRCwgYm9vbCBhc3luY2hyb25vdXNDcmVhdGlv
bkluY29tcGxldGUsIFBhc3NSZWZQdHI8TWVzc2FnZXM6OldlYlByb2Nlc3NDb25uZWN0aW9uOjpE
ZXN0cm95UGx1Z2luOjpEZWxheWVkUmVwbHk+KTsKKyAgICB2b2lkIGRlc3Ryb3lQbHVnaW4odWlu
dDY0X3QgcGx1Z2luSW5zdGFuY2VJRCwgYm9vbCBhc3luY2hyb25vdXNDcmVhdGlvbkluY29tcGxl
dGUsIFJlZjxNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkRlc3Ryb3lQbHVnaW46OkRl
bGF5ZWRSZXBseT4mJik7CiAgICAgCiAgICAgdm9pZCBjcmVhdGVQbHVnaW5JbnRlcm5hbChjb25z
dCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmLCBib29sJiByZXN1bHQsIGJvb2wmIHdhbnRzV2hl
ZWxFdmVudHMsIHVpbnQzMl90JiByZW1vdGVMYXllckNsaWVudElEKTsKIApAQCAtODYsNiArODUs
MyBAQCBwcml2YXRlOgogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKLQotCi0jZW5kaWYgLy8gV2ViUHJvY2Vzc0Nvbm5lY3Rpb25f
aApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkocmV2aXNpb24gMjE2NDE3KQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03NzMsNyArNzczLDcgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6
OnJ1bk9wZW5QYW5lbChGcmFtZQogICAgIGlmIChtX3BhZ2UuYWN0aXZlT3BlblBhbmVsUmVzdWx0
TGlzdGVuZXIoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wYWdlLnNldEFjdGl2ZU9wZW5Q
YW5lbFJlc3VsdExpc3RlbmVyKFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyOjpjcmVhdGUoJm1f
cGFnZSwgJmZpbGVDaG9vc2VyKSk7CisgICAgbV9wYWdlLnNldEFjdGl2ZU9wZW5QYW5lbFJlc3Vs
dExpc3RlbmVyKFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyOjpjcmVhdGUobV9wYWdlLCBmaWxl
Q2hvb3NlcikpOwogCiAgICAgYXV0byogd2ViRnJhbWUgPSBXZWJGcmFtZTo6ZnJvbUNvcmVGcmFt
ZShmcmFtZSk7CiAgICAgQVNTRVJUKHdlYkZyYW1lKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5jcHAJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDgg
KzI0NSw4IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZWdpc3RlclVuZG9TdGVwKFUKICAgICBp
ZiAobV9wYWdlLT5pc0luUmVkbygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHdlYlN0
ZXAgPSBXZWJVbmRvU3RlcDo6Y3JlYXRlKCZzdGVwKTsKLSAgICBhdXRvIGVkaXRBY3Rpb24gPSBz
dGF0aWNfY2FzdDx1aW50MzJfdD4od2ViU3RlcC0+c3RlcCgpLT5lZGl0aW5nQWN0aW9uKCkpOwor
ICAgIGF1dG8gd2ViU3RlcCA9IFdlYlVuZG9TdGVwOjpjcmVhdGUoc3RlcCk7CisgICAgYXV0byBl
ZGl0QWN0aW9uID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHdlYlN0ZXAtPnN0ZXAoKS5lZGl0aW5n
QWN0aW9uKCkpOwogCiAgICAgbV9wYWdlLT5hZGRXZWJVbmRvU3RlcCh3ZWJTdGVwLT5zdGVwSUQo
KSwgd2ViU3RlcC5wdHIoKSk7CiAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OlJlZ2lzdGVyRWRpdENvbW1hbmRGb3JVbmRvKHdlYlN0ZXAtPnN0ZXBJRCgpLCBlZGl0QWN0
aW9uKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExp
bmtUYWJsZUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIx
NjQxNykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1Rh
YmxlQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDE2ICs0NCwxNiBAQCBzdGF0
aWMgSGFzaE1hcDx1aW50NjRfdCwgVmlzaXRlZExpbmtUYWJsCiAgICAgcmV0dXJuIHZpc2l0ZWRM
aW5rVGFibGVDb250cm9sbGVyczsKIH0KIAotUGFzc1JlZlB0cjxWaXNpdGVkTGlua1RhYmxlQ29u
dHJvbGxlcj4gVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXI6OmdldE9yQ3JlYXRlKHVpbnQ2NF90
IGlkZW50aWZpZXIpCitSZWY8VmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXI+IFZpc2l0ZWRMaW5r
VGFibGVDb250cm9sbGVyOjpnZXRPckNyZWF0ZSh1aW50NjRfdCBpZGVudGlmaWVyKQogewogICAg
IGF1dG8mIHZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyUHRyID0gdmlzaXRlZExpbmtUYWJsZUNv
bnRyb2xsZXJzKCkuYWRkKGlkZW50aWZpZXIsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAg
ICBpZiAodmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXJQdHIpCi0gICAgICAgIHJldHVybiB2aXNp
dGVkTGlua1RhYmxlQ29udHJvbGxlclB0cjsKKyAgICAgICAgcmV0dXJuICp2aXNpdGVkTGlua1Rh
YmxlQ29udHJvbGxlclB0cjsKIAogICAgIGF1dG8gdmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIg
PSBhZG9wdFJlZigqbmV3IFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyKGlkZW50aWZpZXIpKTsK
ICAgICB2aXNpdGVkTGlua1RhYmxlQ29udHJvbGxlclB0ciA9IHZpc2l0ZWRMaW5rVGFibGVDb250
cm9sbGVyLnB0cigpOwogCi0gICAgcmV0dXJuIFdURk1vdmUodmlzaXRlZExpbmtUYWJsZUNvbnRy
b2xsZXIpOworICAgIHJldHVybiB2aXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjsKIH0KIAogVmlz
aXRlZExpbmtUYWJsZUNvbnRyb2xsZXI6OlZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyKHVpbnQ2
NF90IGlkZW50aWZpZXIpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
VmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIuaAkocmV2aXNp
b24gMjE2NDE3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRM
aW5rVGFibGVDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDcgQEAKICAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFZpc2l0ZWRM
aW5rVGFibGVDb250cm9sbGVyX2gKLSNkZWZpbmUgVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXJf
aAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKICNpbmNsdWRl
ICJTaGFyZWRNZW1vcnkuaCIKQEAgLTM1LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAK
IGNsYXNzIFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyIGZpbmFsIDogcHVibGljIFdlYkNvcmU6
OlZpc2l0ZWRMaW5rU3RvcmUgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcj4gZ2V0
T3JDcmVhdGUodWludDY0X3QgaWRlbnRpZmllcik7CisgICAgc3RhdGljIFJlZjxWaXNpdGVkTGlu
a1RhYmxlQ29udHJvbGxlcj4gZ2V0T3JDcmVhdGUodWludDY0X3QgaWRlbnRpZmllcik7CiAgICAg
dmlydHVhbCB+VmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIoKTsKIAogcHJpdmF0ZToKQEAgLTU4
LDUgKzU3LDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5k
aWYgLy8gVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXJfaApJbmRleDogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCShyZXZpc2lvbiAyMTY0MTcpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02MDMsMTAgKzYwMywxMCBAQCBib29sIFdlYkZyYW1lOjpoYXNWZXJ0aWNhbFNj
cm9sbGJhcigpIGNvCiAgICAgcmV0dXJuIHZpZXctPnZlcnRpY2FsU2Nyb2xsYmFyKCk7CiB9CiAK
LVBhc3NSZWZQdHI8SW5qZWN0ZWRCdW5kbGVIaXRUZXN0UmVzdWx0PiBXZWJGcmFtZTo6aGl0VGVz
dChjb25zdCBJbnRQb2ludCBwb2ludCkgY29uc3QKK1JlZlB0cjxJbmplY3RlZEJ1bmRsZUhpdFRl
c3RSZXN1bHQ+IFdlYkZyYW1lOjpoaXRUZXN0KGNvbnN0IEludFBvaW50IHBvaW50KSBjb25zdAog
ewogICAgIGlmICghbV9jb3JlRnJhbWUpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQ6OmNy
ZWF0ZShtX2NvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQocG9p
bnQsIEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSB8IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUgfCBI
aXRUZXN0UmVxdWVzdDo6SWdub3JlQ2xpcHBpbmcgfCBIaXRUZXN0UmVxdWVzdDo6RGlzYWxsb3dV
c2VyQWdlbnRTaGFkb3dDb250ZW50KSk7CiB9CkBAIC04MTgsNyArODE4LDcgQEAgUmV0YWluUHRy
PENGRGF0YVJlZj4gV2ViRnJhbWU6OndlYkFyY2hpdgogfQogI2VuZGlmCiAKLVBhc3NSZWZQdHI8
U2hhcmVhYmxlQml0bWFwPiBXZWJGcmFtZTo6Y3JlYXRlU2VsZWN0aW9uU25hcHNob3QoKSBjb25z
dAorUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gV2ViRnJhbWU6OmNyZWF0ZVNlbGVjdGlvblNuYXBz
aG90KCkgY29uc3QKIHsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHNuYXBzaG90
ID0gc25hcHNob3RTZWxlY3Rpb24oKmNvcmVGcmFtZSgpLCBXZWJDb3JlOjpTbmFwc2hvdE9wdGlv
bnNGb3JjZUJsYWNrVGV4dCk7CiAgICAgaWYgKCFzbmFwc2hvdCkKQEAgLTgzNSw3ICs4MzUsNyBA
QCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gV2ViRnJhbWU6OmNyCiAgICAgZ3JhcGhpY3ND
b250ZXh0LT5zY2FsZShkZXZpY2VTY2FsZUZhY3Rvcik7CiAgICAgZ3JhcGhpY3NDb250ZXh0LT5k
cmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoV1RGTW92ZShzbmFwc2hvdCksIEZsb2F0UG9pbnQoKSk7
CiAKLSAgICByZXR1cm4gV1RGTW92ZShzaGFyZWRTbmFwc2hvdCk7CisgICAgcmV0dXJuIHNoYXJl
ZFNuYXBzaG90OwogfQogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuaAkocmV2aXNpb24gMjE2NDE3
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCi0jaWZuZGVmIFdlYkZyYW1lX2gKLSNkZWZpbmUgV2ViRnJhbWVfaAorI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlICJBUElPYmplY3QuaCIKICNpbmNsdWRlICJEb3dubG9hZElE
LmgiCkBAIC0zNiw3ICszNSw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlclR5cGVz
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Qb2xpY3lDaGVja2VyLmg+CiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKQEAgLTExMSw3ICsxMDksNyBAQCBw
dWJsaWM6CiAgICAgV2ViQ29yZTo6SW50U2l6ZSBzY3JvbGxPZmZzZXQoKSBjb25zdDsKICAgICBi
b29sIGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdDsKICAgICBib29sIGhhc1ZlcnRpY2Fs
U2Nyb2xsYmFyKCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxJbmplY3RlZEJ1bmRsZUhpdFRlc3RS
ZXN1bHQ+IGhpdFRlc3QoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQpIGNvbnN0OworICAgIFJlZlB0
cjxJbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQ+IGhpdFRlc3QoY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQpIGNvbnN0OwogICAgIGJvb2wgZ2V0RG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3IoZG91Ymxl
KiByZWQsIGRvdWJsZSogZ3JlZW4sIGRvdWJsZSogYmx1ZSwgZG91YmxlKiBhbHBoYSk7CiAgICAg
Ym9vbCBjb250YWluc0FueUZvcm1FbGVtZW50cygpIGNvbnN0OwogICAgIGJvb2wgY29udGFpbnNB
bnlGb3JtQ29udHJvbHMoKSBjb25zdDsKQEAgLTE1OCw3ICsxNTYsNyBAQCBwdWJsaWM6CiAgICAg
UmV0YWluUHRyPENGRGF0YVJlZj4gd2ViQXJjaGl2ZURhdGEoRnJhbWVGaWx0ZXJGdW5jdGlvbiwg
dm9pZCogY29udGV4dCk7CiAjZW5kaWYKIAotICAgIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFw
PiBjcmVhdGVTZWxlY3Rpb25TbmFwc2hvdCgpIGNvbnN0OworICAgIFJlZlB0cjxTaGFyZWFibGVC
aXRtYXA+IGNyZWF0ZVNlbGVjdGlvblNuYXBzaG90KCkgY29uc3Q7CiAKICNpZiBQTEFURk9STShJ
T1MpCiAgICAgdWludDY0X3QgZmlyc3RMYXllclRyZWVUcmFuc2FjdGlvbklEQWZ0ZXJEaWRDb21t
aXRMb2FkKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdExheWVyVHJlZVRyYW5zYWN0aW9uSURBZnRl
ckRpZENvbW1pdExvYWQ7IH0KQEAgLTE4Niw1ICsxODQsMyBAQCBwcml2YXRlOgogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBXZWJGcmFtZV9oCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJPcGVu
UGFuZWxSZXN1bHRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDE4ICsyNiwxOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIldlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmgiCiAKKyNpbmNsdWRlIDxXZWJDb3Jl
L0ZpbGVDaG9vc2VyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JY29uLmg+CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCi1SZWY8V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI+IFdlYk9wZW5QYW5lbFJl
c3VsdExpc3RlbmVyOjpjcmVhdGUoV2ViUGFnZSogcGFnZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpG
aWxlQ2hvb3Nlcj4gZmlsZUNob29zZXIpCitSZWY8V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI+
IFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyOjpjcmVhdGUoV2ViUGFnZSYgcGFnZSwgUmVmPFdl
YkNvcmU6OkZpbGVDaG9vc2VyPiYmIGZpbGVDaG9vc2VyKQogewotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyKHBhZ2UsIGZpbGVDaG9vc2VyKSk7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIocGFnZSwg
V1RGTW92ZShmaWxlQ2hvb3NlcikpKTsKIH0KIAotV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI6
OldlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyKFdlYlBhZ2UqIHBhZ2UsIFBhc3NSZWZQdHI8V2Vi
Q29yZTo6RmlsZUNob29zZXI+IGZpbGVDaG9vc2VyKQotICAgIDogbV9wYWdlKHBhZ2UpCi0gICAg
LCBtX2ZpbGVDaG9vc2VyKGZpbGVDaG9vc2VyKQorV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI6
OldlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyKFdlYlBhZ2UmIHBhZ2UsIFJlZjxXZWJDb3JlOjpG
aWxlQ2hvb3Nlcj4mJiBmaWxlQ2hvb3NlcikKKyAgICA6IG1fcGFnZSgmcGFnZSkKKyAgICAsIG1f
ZmlsZUNob29zZXIoV1RGTW92ZShmaWxlQ2hvb3NlcikpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJPcGVuUGFu
ZWxSZXN1bHRMaXN0ZW5lci5oCShyZXZpc2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMjMsMTMgKzIzLDE1IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KIAotI2lmbmRlZiBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcl9oCi0jZGVmaW5l
IFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyX2gKKyNwcmFnbWEgb25jZQogCisjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVDaG9vc2VyLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBGaWxlQ2hvb3NlcjsKIGNs
YXNzIEljb247CiB9CiAKQEAgLTM5LDcgKzQxLDcgQEAgY2xhc3MgV2ViUGFnZTsKIAogY2xhc3Mg
V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJPcGVuUGFu
ZWxSZXN1bHRMaXN0ZW5lcj4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViT3BlblBhbmVs
UmVzdWx0TGlzdGVuZXI+IGNyZWF0ZShXZWJQYWdlKiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpGaWxl
Q2hvb3Nlcj4pOworICAgIHN0YXRpYyBSZWY8V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI+IGNy
ZWF0ZShXZWJQYWdlJiwgUmVmPFdlYkNvcmU6OkZpbGVDaG9vc2VyPiYmKTsKICAgICB+V2ViT3Bl
blBhbmVsUmVzdWx0TGlzdGVuZXIoKTsKIAogICAgIHZvaWQgZGlzY29ubmVjdEZyb21QYWdlKCkg
eyBtX3BhZ2UgPSAwOyB9CkBAIC00OSwxMyArNTEsMTAgQEAgcHVibGljOgogI2VuZGlmCiAKIHBy
aXZhdGU6Ci0gICAgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIoV2ViUGFnZSosIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6RmlsZUNob29zZXI+KTsKKyAgICBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5l
cihXZWJQYWdlJiwgUmVmPFdlYkNvcmU6OkZpbGVDaG9vc2VyPiYmKTsKIAogICAgIFdlYlBhZ2Uq
IG1fcGFnZTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6RmlsZUNob29zZXI+IG1fZmlsZUNob29zZXI7
CisgICAgUmVmPFdlYkNvcmU6OkZpbGVDaG9vc2VyPiBtX2ZpbGVDaG9vc2VyOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0Ci0KLQotI2VuZGlmIC8vIFdlYk9wZW5QYW5lbFJlc3VsdExpc3Rl
bmVyX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcxMCw3ICszNzEwLDcgQEAgdm9p
ZCBXZWJQYWdlOjp1bmFwcGx5RWRpdENvbW1hbmQodWludDY0XwogICAgIGlmICghc3RlcCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgc3RlcC0+c3RlcCgpLT51bmFwcGx5KCk7CisgICAgc3RlcC0+
c3RlcCgpLnVuYXBwbHkoKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpyZWFwcGx5RWRpdENvbW1hbmQo
dWludDY0X3Qgc3RlcElEKQpAQCAtMzcyMCw3ICszNzIwLDcgQEAgdm9pZCBXZWJQYWdlOjpyZWFw
cGx5RWRpdENvbW1hbmQodWludDY0XwogICAgICAgICByZXR1cm47CiAKICAgICBtX2lzSW5SZWRv
ID0gdHJ1ZTsKLSAgICBzdGVwLT5zdGVwKCktPnJlYXBwbHkoKTsKKyAgICBzdGVwLT5zdGVwKCku
cmVhcHBseSgpOwogICAgIG1faXNJblJlZG8gPSBmYWxzZTsKIH0KIApJbmRleDogU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHku
Y3BwCShyZXZpc2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZUdyb3VwUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxNCArMzUsMTQg
QEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVBhc3NSZWZQdHI8V2ViUGFnZUdyb3VwUHJveHk+
IFdlYlBhZ2VHcm91cFByb3h5OjpjcmVhdGUoY29uc3QgV2ViUGFnZUdyb3VwRGF0YSYgZGF0YSkK
K1JlZjxXZWJQYWdlR3JvdXBQcm94eT4gV2ViUGFnZUdyb3VwUHJveHk6OmNyZWF0ZShjb25zdCBX
ZWJQYWdlR3JvdXBEYXRhJiBkYXRhKQogewogICAgIGF1dG8gcGFnZUdyb3VwID0gYWRvcHRSZWYo
Km5ldyBXZWJQYWdlR3JvdXBQcm94eShkYXRhKSk7CiAKICAgICBpZiAocGFnZUdyb3VwLT5pc1Zp
c2libGVUb0luamVjdGVkQnVuZGxlKCkgJiYgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuaW5qZWN0
ZWRCdW5kbGUoKSkKICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuaW5qZWN0ZWRCdW5k
bGUoKS0+ZGlkSW5pdGlhbGl6ZVBhZ2VHcm91cChwYWdlR3JvdXAucHRyKCkpOwogCi0gICAgcmV0
dXJuIFdURk1vdmUocGFnZUdyb3VwKTsKKyAgICByZXR1cm4gcGFnZUdyb3VwOwogfQogCiBXZWJQ
YWdlR3JvdXBQcm94eTo6V2ViUGFnZUdyb3VwUHJveHkoY29uc3QgV2ViUGFnZUdyb3VwRGF0YSYg
ZGF0YSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3Jv
dXBQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlR3JvdXBQcm94eS5oCShyZXZpc2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuaAkod29ya2luZyBjb3B5KQpA
QCAtMjMsMTIgKzIzLDExIEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAg
Ki8KIAotI2lmbmRlZiBXZWJQYWdlR3JvdXBQcm94eV9oCi0jZGVmaW5lIFdlYlBhZ2VHcm91cFBy
b3h5X2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCiAjaW5jbHVkZSAi
V2ViUGFnZUdyb3VwRGF0YS5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBQYWdlR3JvdXA7CkBA
IC00MCw3ICszOSw3IEBAIGNsYXNzIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjsKIAogY2xhc3Mg
V2ViUGFnZUdyb3VwUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpU
eXBlOjpCdW5kbGVQYWdlR3JvdXA+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxX
ZWJQYWdlR3JvdXBQcm94eT4gY3JlYXRlKGNvbnN0IFdlYlBhZ2VHcm91cERhdGEmKTsKKyAgICBz
dGF0aWMgUmVmPFdlYlBhZ2VHcm91cFByb3h5PiBjcmVhdGUoY29uc3QgV2ViUGFnZUdyb3VwRGF0
YSYpOwogICAgIHZpcnR1YWwgfldlYlBhZ2VHcm91cFByb3h5KCk7CiAKICAgICBjb25zdCBTdHJp
bmcmIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuaWRlbnRpZmllcjsgfQpAQCAt
NjAsNSArNTksMyBAQCBwcml2YXRlOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNl
bmRpZiAvLyBXZWJQYWdlR3JvdXBQcm94eV9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViVW5kb1N0ZXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJVbmRvU3RlcC5jcHAJKHJldmlzaW9uIDIxNjQxNykKKysr
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJVbmRvU3RlcC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDkgKzM0LDkgQEAgc3RhdGljIHVpbnQ2NF90IGdlbmVyYXRlVW5kb1N0
ZXAoKQogICAgIHJldHVybiB1bmlxdWVFbnRyeUlEKys7CiB9CiAKLVJlZjxXZWJVbmRvU3RlcD4g
V2ViVW5kb1N0ZXA6OmNyZWF0ZShQYXNzUmVmUHRyPFdlYkNvcmU6OlVuZG9TdGVwPiBzdGVwKQor
UmVmPFdlYlVuZG9TdGVwPiBXZWJVbmRvU3RlcDo6Y3JlYXRlKFJlZjxXZWJDb3JlOjpVbmRvU3Rl
cD4mJiBzdGVwKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlVuZG9TdGVwKHN0ZXAs
IGdlbmVyYXRlVW5kb1N0ZXAoKSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlVuZG9T
dGVwKFdURk1vdmUoc3RlcCksIGdlbmVyYXRlVW5kb1N0ZXAoKSkpOwogfQogCiBXZWJVbmRvU3Rl
cDo6fldlYlVuZG9TdGVwKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJVbmRvU3RlcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJVbmRvU3RlcC5oCShyZXZpc2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVW5kb1N0ZXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjMs
MzQgKzIzLDMwIEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAot
I2lmbmRlZiBXZWJVbmRvU3RlcF9oCi0jZGVmaW5lIFdlYlVuZG9TdGVwX2gKKyNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSA8V2ViQ29yZS9VbmRvU3RlcC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYlVuZG9TdGVwIDogcHVibGljIFJlZkNvdW50
ZWQ8V2ViVW5kb1N0ZXA+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlVuZG9TdGVwPiBj
cmVhdGUoUGFzc1JlZlB0cjxXZWJDb3JlOjpVbmRvU3RlcD4pOworICAgIHN0YXRpYyBSZWY8V2Vi
VW5kb1N0ZXA+IGNyZWF0ZShSZWY8V2ViQ29yZTo6VW5kb1N0ZXA+JiYpOwogICAgIH5XZWJVbmRv
U3RlcCgpOwogCi0gICAgV2ViQ29yZTo6VW5kb1N0ZXAqIHN0ZXAoKSBjb25zdCB7IHJldHVybiBt
X3N0ZXAuZ2V0KCk7IH0KKyAgICBXZWJDb3JlOjpVbmRvU3RlcCYgc3RlcCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RlcC5nZXQoKTsgfQogICAgIHVpbnQ2NF90IHN0ZXBJRCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RlcElEOyB9CiAKIHByaXZhdGU6Ci0gICAgV2ViVW5kb1N0ZXAoUGFzc1JlZlB0cjxXZWJD
b3JlOjpVbmRvU3RlcD4gc3RlcCwgdWludDY0X3Qgc3RlcElEKQotICAgICAgICA6IG1fc3RlcChz
dGVwKQorICAgIFdlYlVuZG9TdGVwKFJlZjxXZWJDb3JlOjpVbmRvU3RlcD4mJiBzdGVwLCB1aW50
NjRfdCBzdGVwSUQpCisgICAgICAgIDogbV9zdGVwKFdURk1vdmUoc3RlcCkpCiAgICAgICAgICwg
bV9zdGVwSUQoc3RlcElEKQogICAgIHsKICAgICB9CiAKLSAgICBSZWZQdHI8V2ViQ29yZTo6VW5k
b1N0ZXA+IG1fc3RlcDsKKyAgICBSZWY8V2ViQ29yZTo6VW5kb1N0ZXA+IG1fc3RlcDsKICAgICB1
aW50NjRfdCBtX3N0ZXBJRDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYg
Ly8gV2ViRWRpdENvbW1hbmRfaApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL21hYy9HcmFwaGljc0xheWVyQ0FSZW1vdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvR3JhcGhpY3NMYXllckNBUmVtb3RlLmNwcAko
cmV2aXNpb24gMjE2NDE3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9HcmFwaGljc0xheWVyQ0FSZW1vdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3
IEBAIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBHcmFwaGljc0xheWUKICAgICBpZiAocmVz
dWx0LT5jYW5IYXZlQmFja2luZ1N0b3JlKCkpCiAgICAgICAgIHJlc3VsdC0+c2V0V2FudHNEZWVw
Q29sb3JCYWNraW5nU3RvcmUoc2NyZWVuU3VwcG9ydHNFeHRlbmRlZENvbG9yKCkpOwogCi0gICAg
cmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwogfQogCiBQYXNzUmVm
UHRyPFBsYXRmb3JtQ0FMYXllcj4gR3JhcGhpY3NMYXllckNBUmVtb3RlOjpjcmVhdGVQbGF0Zm9y
bUNBTGF5ZXIoUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllciwgUGxhdGZvcm1DQUxheWVyQ2xp
ZW50KiBvd25lcikKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
UGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5jcHAJKHJldmlzaW9u
IDIxNjQxNykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZv
cm1DQUxheWVyUmVtb3RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVBhc3NSZWZQdHI8
UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNyZWF0ZShMYXll
clR5cGUgbGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyLCBSZW1vdGVMYXll
clRyZWVDb250ZXh0JiBjb250ZXh0KQorUmVmPFBsYXRmb3JtQ0FMYXllclJlbW90ZT4gUGxhdGZv
cm1DQUxheWVyUmVtb3RlOjpjcmVhdGUoTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxh
eWVyQ2xpZW50KiBvd25lciwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYgY29udGV4dCkKIHsKICAg
ICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBsYXllcjsKIApAQCAtNTUsMjEgKzU1LDIx
IEBAIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBQbGF0Zm8KIAogICAgIGNvbnRl
eHQubGF5ZXJXYXNDcmVhdGVkKCpsYXllciwgbGF5ZXJUeXBlKTsKIAotICAgIHJldHVybiBXVEZN
b3ZlKGxheWVyKTsKKyAgICByZXR1cm4gbGF5ZXIucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotUGFz
c1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU+IFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6Y3Jl
YXRlKFBsYXRmb3JtTGF5ZXIgKnBsYXRmb3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCog
b3duZXIsIFJlbW90ZUxheWVyVHJlZUNvbnRleHQmIGNvbnRleHQpCitSZWY8UGxhdGZvcm1DQUxh
eWVyUmVtb3RlPiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNyZWF0ZShQbGF0Zm9ybUxheWVyICpw
bGF0Zm9ybUxheWVyLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyLCBSZW1vdGVMYXllclRy
ZWVDb250ZXh0JiBjb250ZXh0KQogewogICAgIHJldHVybiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVD
dXN0b206OmNyZWF0ZShwbGF0Zm9ybUxheWVyLCBvd25lciwgY29udGV4dCk7CiB9CiAKLVBhc3NS
ZWZQdHI8UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNyZWF0
ZShjb25zdCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUmIG90aGVyLCBXZWJDb3JlOjpQbGF0Zm9ybUNB
TGF5ZXJDbGllbnQqIG93bmVyLCBSZW1vdGVMYXllclRyZWVDb250ZXh0JiBjb250ZXh0KQorUmVm
PFBsYXRmb3JtQ0FMYXllclJlbW90ZT4gUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpjcmVhdGUoY29u
c3QgUGxhdGZvcm1DQUxheWVyUmVtb3RlJiBvdGhlciwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVy
Q2xpZW50KiBvd25lciwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBh
dXRvIGxheWVyID0gYWRvcHRSZWYoKm5ldyBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUob3RoZXIsIG93
bmVyLCBjb250ZXh0KSk7CiAKICAgICBjb250ZXh0LmxheWVyV2FzQ3JlYXRlZChsYXllci5nZXQo
KSwgb3RoZXIubGF5ZXJUeXBlKCkpOwogCi0gICAgcmV0dXJuIFdURk1vdmUobGF5ZXIpOworICAg
IHJldHVybiBsYXllcjsKIH0KIAogUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpQbGF0Zm9ybUNBTGF5
ZXJSZW1vdGUoTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25l
ciwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYgY29udGV4dCkKQEAgLTg5LDExICs4OSwxMSBAQCBQ
bGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OlBsYXRmb3JtQ0FMYXllclJlCiB7CiB9CiAKLVBhc3NSZWZQ
dHI8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNsb25lKFBsYXRmb3Jt
Q0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0CitSZWY8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9y
bUNBTGF5ZXJSZW1vdGU6OmNsb25lKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0
CiB7CiAgICAgYXV0byBjbG9uZSA9IFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6Y3JlYXRlKCp0aGlz
LCBvd25lciwgKm1fY29udGV4dCk7CiAKLSAgICB1cGRhdGVDbG9uZWRMYXllclByb3BlcnRpZXMo
KmNsb25lKTsKKyAgICB1cGRhdGVDbG9uZWRMYXllclByb3BlcnRpZXMoY2xvbmUpOwogCiAgICAg
Y2xvbmUtPnNldENsb25lZExheWVyKHRoaXMpOwogICAgIHJldHVybiBXVEZNb3ZlKGNsb25lKTsK
QEAgLTM1Nyw3ICszNTcsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6cmVtb3ZlQW5p
bWF0CiAgICAgbV9wcm9wZXJ0aWVzLm5vdGVQcm9wZXJ0aWVzQ2hhbmdlZChSZW1vdGVMYXllclRy
ZWVUcmFuc2FjdGlvbjo6QW5pbWF0aW9uc0NoYW5nZWQpOwogfQogCi1QYXNzUmVmUHRyPFBsYXRm
b3JtQ0FBbmltYXRpb24+IFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6YW5pbWF0aW9uRm9yS2V5KGNv
bnN0IFN0cmluZyYga2V5KQorUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IFBsYXRmb3JtQ0FM
YXllclJlbW90ZTo6YW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5KQogewogICAgIHJl
dHVybiBtX2FuaW1hdGlvbnMuZ2V0KGtleSk7CiB9CkBAIC04MjEsNyArODIxLDcgQEAgdm9pZCBQ
bGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnVwZGF0ZUN1c3RvbQogICAgIG1fcHJvcGVydGllcy5ub3Rl
UHJvcGVydGllc0NoYW5nZWQoUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkN1c3RvbUFwcGVh
cmFuY2VDaGFuZ2VkKTsKIH0KIAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3Jt
Q0FMYXllclJlbW90ZTo6Y3JlYXRlQ29tcGF0aWJsZUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5
ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBjbGllbnQpIGNvbnN0CitS
ZWY8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNyZWF0ZUNvbXBhdGli
bGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3JtQ0FM
YXllckNsaWVudCogY2xpZW50KSBjb25zdAogewogICAgIHJldHVybiBQbGF0Zm9ybUNBTGF5ZXJS
ZW1vdGU6OmNyZWF0ZShsYXllclR5cGUsIGNsaWVudCwgKm1fY29udGV4dCk7CiB9CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
UGxhdGZvcm1DQUxheWVyUmVtb3RlLmgJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDkgKzM5LDkgQEAgY2xhc3MgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dDsK
IAogY2xhc3MgUGxhdGZvcm1DQUxheWVyUmVtb3RlIDogcHVibGljIFdlYkNvcmU6OlBsYXRmb3Jt
Q0FMYXllciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVy
UmVtb3RlPiBjcmVhdGUoV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGUsIFdlYkNv
cmU6OlBsYXRmb3JtQ0FMYXllckNsaWVudCosIFJlbW90ZUxheWVyVHJlZUNvbnRleHQmKTsKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU+IGNyZWF0ZShQbGF0Zm9y
bUxheWVyICosIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllckNsaWVudCosIFJlbW90ZUxheWVyVHJl
ZUNvbnRleHQmKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU+
IGNyZWF0ZShjb25zdCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUmLCBXZWJDb3JlOjpQbGF0Zm9ybUNB
TGF5ZXJDbGllbnQqLCBSZW1vdGVMYXllclRyZWVDb250ZXh0Jik7CisgICAgc3RhdGljIFJlZjxQ
bGF0Zm9ybUNBTGF5ZXJSZW1vdGU+IGNyZWF0ZShXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6Okxh
eWVyVHlwZSwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50KiwgUmVtb3RlTGF5ZXJUcmVl
Q29udGV4dCYpOworICAgIHN0YXRpYyBSZWY8UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBjcmVhdGUo
UGxhdGZvcm1MYXllciAqLCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqLCBSZW1vdGVM
YXllclRyZWVDb250ZXh0Jik7CisgICAgc3RhdGljIFJlZjxQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU+
IGNyZWF0ZShjb25zdCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUmLCBXZWJDb3JlOjpQbGF0Zm9ybUNB
TGF5ZXJDbGllbnQqLCBSZW1vdGVMYXllclRyZWVDb250ZXh0Jik7CiAKICAgICB2aXJ0dWFsIH5Q
bGF0Zm9ybUNBTGF5ZXJSZW1vdGUoKTsKIApAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIGFkZEFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSwgV2ViQ29yZTo6UGxh
dGZvcm1DQUFuaW1hdGlvbiYpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uRm9y
S2V5KGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6
OlBsYXRmb3JtQ0FBbmltYXRpb24+IGFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkg
b3ZlcnJpZGU7CisgICAgUmVmUHRyPFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb24+IGFuaW1h
dGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBhbmltYXRp
b25TdGFydGVkKGNvbnN0IFN0cmluZyYga2V5LCBDRlRpbWVJbnRlcnZhbCBiZWdpblRpbWUpIG92
ZXJyaWRlOwogICAgIHZvaWQgYW5pbWF0aW9uRW5kZWQoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJy
aWRlOwogCkBAIC0xNzUsOSArMTc1LDkgQEAgcHVibGljOgogCiAgICAgV2ViQ29yZTo6VGlsZWRC
YWNraW5nKiB0aWxlZEJhY2tpbmcoKSBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CiAKLSAg
ICBQYXNzUmVmUHRyPFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcj4gY2xvbmUoV2ViQ29yZTo6UGxh
dGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPFdlYkNv
cmU6OlBsYXRmb3JtQ0FMYXllcj4gY2xvbmUoV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50
KiBvd25lcikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXll
cj4gY3JlYXRlQ29tcGF0aWJsZUxheWVyKFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJU
eXBlLCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBSZWY8UGxhdGZvcm1DQUxheWVyPiBjcmVhdGVDb21wYXRpYmxlTGF5ZXIoV2ViQ29yZTo6UGxh
dGZvcm1DQUxheWVyOjpMYXllclR5cGUsIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllckNsaWVudCop
IGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBlbnVtZXJhdGVSZWN0c0JlaW5nRHJhd24oQ0dD
b250ZXh0UmVmLCB2b2lkICheYmxvY2spKENHUmVjdCkpIG92ZXJyaWRlOwogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZUN1
c3RvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tLmgJKHJldmlzaW9uIDIxNjQxNykKKysrIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3Rl
Q3VzdG9tLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDcgQEAKICAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAotI2lmbmRlZiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b21faAotI2RlZmluZSBQ
bGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b21faAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJQ
bGF0Zm9ybUNBTGF5ZXJSZW1vdGUuaCIKIApAQCAtMzYsNyArMzUsNyBAQCBjbGFzcyBMYXllckhv
c3RpbmdDb250ZXh0OwogY2xhc3MgUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tIGZpbmFsIDog
cHVibGljIFBsYXRmb3JtQ0FMYXllclJlbW90ZSB7CiAgICAgZnJpZW5kIGNsYXNzIFBsYXRmb3Jt
Q0FMYXllclJlbW90ZTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxQbGF0Zm9ybUNB
TGF5ZXJSZW1vdGU+IGNyZWF0ZShQbGF0Zm9ybUxheWVyICosIFdlYkNvcmU6OlBsYXRmb3JtQ0FM
YXllckNsaWVudCosIFJlbW90ZUxheWVyVHJlZUNvbnRleHQmKTsKKyAgICBzdGF0aWMgUmVmPFBs
YXRmb3JtQ0FMYXllclJlbW90ZT4gY3JlYXRlKFBsYXRmb3JtTGF5ZXIgKiwgV2ViQ29yZTo6UGxh
dGZvcm1DQUxheWVyQ2xpZW50KiwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYpOwogCiAgICAgdmly
dHVhbCB+UGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tKCk7CiAKQEAgLTUwLDcgKzQ5LDcgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20oV2ViQ29y
ZTo6UGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGUsIFBsYXRmb3JtTGF5ZXIgKiwgV2ViQ29yZTo6
UGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lciwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYpOwog
Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI+IGNsb25lKFdlYkNvcmU6
OlBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZjxX
ZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI+IGNsb25lKFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllckNs
aWVudCogb3duZXIpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgYm9vbCBpc1BsYXRmb3JtQ0FMYXll
clJlbW90ZUN1c3RvbSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIApAQCAtNjUs
NSArNjQsMyBAQCBwcml2YXRlOgogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKIFNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfUExBVEZPUk1fQ0FMQVlFUihXZWJLaXQ6OlBsYXRmb3JtQ0FMYXllclJlbW90
ZUN1c3RvbSwgaXNQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUoKSkKLQotI2VuZGlmIC8vIFBsYXRmb3Jt
Q0FMYXllclJlbW90ZUN1c3RvbV9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90
ZUN1c3RvbS5tbQkocmV2aXNpb24gMjE2NDE3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20ubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDExICs0NiwxMCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogc3RhdGljIE5TU3Ry
aW5nICogY29uc3QgcGxhdGZvcm1DQUxheWVyUG9pbnRlciA9IEAiV0tQbGF0Zm9ybUNBTGF5ZXIi
OwogCi1QYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllclJlbW90ZT4gUGxhdGZvcm1DQUxheWVyUmVt
b3RlQ3VzdG9tOjpjcmVhdGUoUGxhdGZvcm1MYXllciAqcGxhdGZvcm1MYXllciwgUGxhdGZvcm1D
QUxheWVyQ2xpZW50KiBvd25lciwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYgY29udGV4dCkKK1Jl
ZjxQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU+IFBsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbTo6Y3Jl
YXRlKFBsYXRmb3JtTGF5ZXIgKnBsYXRmb3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCog
b3duZXIsIFJlbW90ZUxheWVyVHJlZUNvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgYXV0byBsYXll
ciA9IGFkb3B0UmVmKCpuZXcgUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tKFBsYXRmb3JtQ0FM
YXllckNvY29hOjpsYXllclR5cGVGb3JQbGF0Zm9ybUxheWVyKHBsYXRmb3JtTGF5ZXIpLCBwbGF0
Zm9ybUxheWVyLCBvd25lciwgY29udGV4dCkpOwogICAgIGNvbnRleHQubGF5ZXJXYXNDcmVhdGVk
KGxheWVyLmdldCgpLCBsYXllci0+bGF5ZXJUeXBlKCkpOwotCiAgICAgcmV0dXJuIFdURk1vdmUo
bGF5ZXIpOwogfQogCkBAIC0xMDAsNyArOTksNyBAQCB1aW50MzJfdCBQbGF0Zm9ybUNBTGF5ZXJS
ZW1vdGVDdXN0b206OmhvCiAgICAgcmV0dXJuIG1fbGF5ZXJIb3N0aW5nQ29udGV4dC0+Y29udGV4
dElEKCk7CiB9CiAKLVBhc3NSZWZQdHI8V2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9y
bUNBTGF5ZXJSZW1vdGVDdXN0b206OmNsb25lKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIp
IGNvbnN0CitSZWY8V2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJSZW1v
dGVDdXN0b206OmNsb25lKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0CiB7CiAg
ICAgUmV0YWluUHRyPENBTGF5ZXIgKj4gY2xvbmVkTGF5ZXI7CiAgICAgYm9vbCBjb3B5Q29udGVu
dHMgPSB0cnVlOwpAQCAtMTMzLDcgKzEzMiw3IEBAIFBhc3NSZWZQdHI8V2ViQ29yZTo6UGxhdGZv
cm1DQUxheWVyPiBQbGEKICAgICB1cGRhdGVDbG9uZWRMYXllclByb3BlcnRpZXMoY2xvbmUuZ2V0
KCksIGNvcHlDb250ZW50cyk7CiAKICAgICBjbG9uZS0+c2V0Q2xvbmVkTGF5ZXIodGhpcyk7Ci0g
ICAgcmV0dXJuIFdURk1vdmUoY2xvbmUpOworICAgIHJldHVybiBjbG9uZTsKIH0KIAogQ0ZUeXBl
UmVmIFBsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbTo6Y29udGVudHMoKSBjb25zdAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>309392</attachid>
            <date>2017-05-08 12:11:58 -0700</date>
            <delta_ts>2017-05-08 13:11:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-171809-20170508121157.patch</filename>
            <type>text/plain</type>
            <size>49088</size>
            <attacher name="Alex Christensen">achristensen</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI0IEBACisyMDE3LTA1LTA4ICBBbGV4IENo
cmlzdGVuc2VuICA8YWNocmlzdGVuc2VuQHdlYmtpdC5vcmc+CisKKyAgICAgICAgUmVkdWNlIFBh
c3NSZWZQdHIgdXNlCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xNzE4MDkKKworICAgICAgICBSZXZpZXdlZCBieSBDaHJpcyBEdW1lei4KKworICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FMYXllci5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6OmNyZWF0ZUNvbXBhdGlibGVMYXllck9yVGFrZUZyb21Q
b29sKToKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIuaDoK
KyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlQ292ZXJhZ2VNYXAuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6VGlsZUNvdmVyYWdlTWFwOjpUaWxlQ292ZXJhZ2VNYXApOgorICAgICAg
ICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVHcmlkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6
OlRpbGVHcmlkOjpUaWxlR3JpZCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29j
b2EvUGxhdGZvcm1DQUxheWVyQ29jb2EuaDoKKyAgICAgICAgKiBwbGF0Zm9ybS9ncmFwaGljcy9j
YS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5tbToKKyAgICAgICAgKFBsYXRmb3JtQ0FMYXll
ckNvY29hOjpjcmVhdGUpOgorICAgICAgICAoUGxhdGZvcm1DQUxheWVyQ29jb2E6OmNsb25lKToK
KyAgICAgICAgKFBsYXRmb3JtQ0FMYXllckNvY29hOjphbmltYXRpb25Gb3JLZXkpOgorICAgICAg
ICAoUGxhdGZvcm1DQUxheWVyQ29jb2E6OmNyZWF0ZUNvbXBhdGlibGVMYXllcik6CisKIDIwMTct
MDUtMDcgIEJlbiBLZWxseSAgPGJlbkB3YW5kZXJ2aWV3LmNvbT4KIAogICAgICAgICBTZXQgdGhl
IFJlc3BvbnNlLmJsb2IoKSB0eXBlIGJhc2VkIG9uIHRoZSBjb250ZW50LXR5cGUgaGVhZGVyIHZh
bHVlLgpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvR3JhcGhpY3NM
YXllckNBLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCShyZXZpc2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9HcmFwaGljc0xheWVyQ0EuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNTYsNyArMzU2LDcgQEAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IEdyYXBo
aWNzTGF5ZQogICAgIGlmIChyZXN1bHQtPmNhbkhhdmVCYWNraW5nU3RvcmUoKSkKICAgICAgICAg
cmVzdWx0LT5zZXRXYW50c0RlZXBDb2xvckJhY2tpbmdTdG9yZShzY3JlZW5TdXBwb3J0c0V4dGVu
ZGVkQ29sb3IoKSk7CiAgICAgCi0gICAgcmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gV1RGTW92
ZShyZXN1bHQpOwogI2VsaWYgUExBVEZPUk0oV0lOKQogICAgIHJldHVybiBQbGF0Zm9ybUNBTGF5
ZXJXaW46OmNyZWF0ZShsYXllclR5cGUsIG93bmVyKTsKICNlbmRpZgpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBTGF5ZXIu
Y3BwCShyZXZpc2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGlj
cy9jYS9QbGF0Zm9ybUNBTGF5ZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xNjcsMTkgKzE2Nywx
NiBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcjo6ZHJhd1RleHRBdFBvaW50KENHCiAgICAgQ1RMaW5l
RHJhdyhsaW5lLmdldCgpLCBjb250ZXh0KTsKIH0KIAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5
ZXI+IFBsYXRmb3JtQ0FMYXllcjo6Y3JlYXRlQ29tcGF0aWJsZUxheWVyT3JUYWtlRnJvbVBvb2wo
UGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGUgbGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGll
bnQqIGNsaWVudCwgSW50U2l6ZSBzaXplKQorUmVmPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1D
QUxheWVyOjpjcmVhdGVDb21wYXRpYmxlTGF5ZXJPclRha2VGcm9tUG9vbChQbGF0Zm9ybUNBTGF5
ZXI6OkxheWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogY2xpZW50LCBJ
bnRTaXplIHNpemUpCiB7Ci0gICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gbGF5ZXI7Ci0KLSAg
ICBpZiAoKGxheWVyID0gbGF5ZXJQb29sKCkudGFrZUxheWVyV2l0aFNpemUoc2l6ZSkpKSB7Ci0g
ICAgICAgIGxheWVyLT5zZXRPd25lcihjbGllbnQpOwotICAgICAgICByZXR1cm4gV1RGTW92ZShs
YXllcik7CisgICAgaWYgKGF1dG8gbGF5ZXJGcm9tUG9vbCA9IGxheWVyUG9vbCgpLnRha2VMYXll
cldpdGhTaXplKHNpemUpKSB7CisgICAgICAgIGxheWVyRnJvbVBvb2wtPnNldE93bmVyKGNsaWVu
dCk7CisgICAgICAgIHJldHVybiBsYXllckZyb21Qb29sLnJlbGVhc2VOb25OdWxsKCk7CiAgICAg
fQogCi0gICAgbGF5ZXIgPSBjcmVhdGVDb21wYXRpYmxlTGF5ZXIobGF5ZXJUeXBlLCBjbGllbnQp
OworICAgIGF1dG8gbGF5ZXIgPSBjcmVhdGVDb21wYXRpYmxlTGF5ZXIobGF5ZXJUeXBlLCBjbGll
bnQpOwogICAgIGxheWVyLT5zZXRCb3VuZHMoRmxvYXRSZWN0KEZsb2F0UG9pbnQoKSwgc2l6ZSkp
OwotICAgIAotICAgIHJldHVybiBXVEZNb3ZlKGxheWVyKTsKKyAgICByZXR1cm4gbGF5ZXI7CiB9
CiAKIHZvaWQgUGxhdGZvcm1DQUxheWVyOjptb3ZlVG9MYXllclBvb2woKQpJbmRleDogU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVyLmgKPT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUxheWVy
LmgJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL1BsYXRmb3JtQ0FMYXllci5oCSh3b3JraW5nIGNvcHkpCkBAIC0yOSw3ICsyOSw2IEBACiAj
aW5jbHVkZSAiR3JhcGhpY3NMYXllci5oIgogI2luY2x1ZGUgPFF1YXJ0ekNvcmUvQ0FCYXNlLmg+
CiAjaW5jbHVkZSA8d3RmL0N1cnJlbnRUaW1lLmg+Ci0jaW5jbHVkZSA8d3RmL1Bhc3NSZWZQdHIu
aD4KICNpbmNsdWRlIDx3dGYvUmVmQ291bnRlZC5oPgogI2luY2x1ZGUgPHd0Zi9SZXRhaW5QdHIu
aD4KICNpbmNsdWRlIDx3dGYvVHlwZUNhc3RzLmg+CkBAIC04Miw3ICs4MSw3IEBAIHB1YmxpYzoK
ICAgICB9OwogICAgIGVudW0gRmlsdGVyVHlwZSB7IExpbmVhciwgTmVhcmVzdCwgVHJpbGluZWFy
IH07CiAKLSAgICB2aXJ0dWFsIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBjbG9uZShQbGF0
Zm9ybUNBTGF5ZXJDbGllbnQqKSBjb25zdCA9IDA7CisgICAgdmlydHVhbCBSZWY8UGxhdGZvcm1D
QUxheWVyPiBjbG9uZShQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKSBjb25zdCA9IDA7CiAKICAgICB2
aXJ0dWFsIH5QbGF0Zm9ybUNBTGF5ZXIoKTsKIApAQCAtMTMyLDcgKzEzMSw3IEBAIHB1YmxpYzoK
IAogICAgIHZpcnR1YWwgdm9pZCBhZGRBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXks
IFBsYXRmb3JtQ0FBbmltYXRpb24mKSA9IDA7CiAgICAgdmlydHVhbCB2b2lkIHJlbW92ZUFuaW1h
dGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkgPSAwOwotICAgIHZpcnR1YWwgUGFzc1JlZlB0
cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBhbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkp
ID0gMDsKKyAgICB2aXJ0dWFsIFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBhbmltYXRpb25G
b3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpID0gMDsKIAogICAgIHZpcnR1YWwgdm9pZCBzZXRNYXNr
KFBsYXRmb3JtQ0FMYXllciopID0gMDsKIApAQCAtMjYwLDggKzI1OSw4IEBAIHB1YmxpYzoKICAg
ICB2b2lkIHNldEFuY2hvclBvaW50T25NYWluVGhyZWFkKEZsb2F0UG9pbnQzRCk7CiAjZW5kaWYK
IAotICAgIHZpcnR1YWwgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZUNvbXBhdGli
bGVMYXllcihMYXllclR5cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCopIGNvbnN0ID0gMDsKLSAg
ICBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlQ29tcGF0aWJsZUxheWVyT3JUYWtl
RnJvbVBvb2woTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBjbGll
bnQsIEludFNpemUpOworICAgIHZpcnR1YWwgUmVmPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlQ29t
cGF0aWJsZUxheWVyKExheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KikgY29uc3QgPSAw
OworICAgIFJlZjxQbGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZUNvbXBhdGlibGVMYXllck9yVGFrZUZy
b21Qb29sKExheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiwgSW50U2l6ZSk7CiAKICNp
ZiBQTEFURk9STShDT0NPQSkKICAgICB2aXJ0dWFsIHZvaWQgZW51bWVyYXRlUmVjdHNCZWluZ0Ry
YXduKENHQ29udGV4dFJlZiwgdm9pZCAoXmJsb2NrKShDR1JlY3QpKSA9IDA7CkluZGV4OiBTb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9UaWxlQ292ZXJhZ2VNYXAuY3BwCj09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1RpbGVDb3ZlcmFn
ZU1hcC5jcHAJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL1RpbGVDb3ZlcmFnZU1hcC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM1LDEwICsz
NSwxMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBUaWxlQ292ZXJhZ2VNYXA6OlRpbGVDb3ZlcmFn
ZU1hcChjb25zdCBUaWxlQ29udHJvbGxlciYgY29udHJvbGxlcikKICAgICA6IG1fY29udHJvbGxl
cihjb250cm9sbGVyKQogICAgICwgbV91cGRhdGVUaW1lcigqdGhpcywgJlRpbGVDb3ZlcmFnZU1h
cDo6dXBkYXRlVGltZXJGaXJlZCkKLSAgICAsIG1fbGF5ZXIoKmNvbnRyb2xsZXIucm9vdExheWVy
KCkuY3JlYXRlQ29tcGF0aWJsZUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlU2ltcGxl
TGF5ZXIsIHRoaXMpKQotICAgICwgbV92aXNpYmxlVmlld3BvcnRJbmRpY2F0b3JMYXllcigqY29u
dHJvbGxlci5yb290TGF5ZXIoKS5jcmVhdGVDb21wYXRpYmxlTGF5ZXIoUGxhdGZvcm1DQUxheWVy
OjpMYXllclR5cGVMYXllciwgbnVsbHB0cikpCi0gICAgLCBtX2xheW91dFZpZXdwb3J0SW5kaWNh
dG9yTGF5ZXIoKmNvbnRyb2xsZXIucm9vdExheWVyKCkuY3JlYXRlQ29tcGF0aWJsZUxheWVyKFBs
YXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5ZXIsIG51bGxwdHIpKQotICAgICwgbV9jb3ZlcmFn
ZVJlY3RJbmRpY2F0b3JMYXllcigqY29udHJvbGxlci5yb290TGF5ZXIoKS5jcmVhdGVDb21wYXRp
YmxlTGF5ZXIoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVMYXllciwgbnVsbHB0cikpCisgICAg
LCBtX2xheWVyKGNvbnRyb2xsZXIucm9vdExheWVyKCkuY3JlYXRlQ29tcGF0aWJsZUxheWVyKFBs
YXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlU2ltcGxlTGF5ZXIsIHRoaXMpKQorICAgICwgbV92aXNp
YmxlVmlld3BvcnRJbmRpY2F0b3JMYXllcihjb250cm9sbGVyLnJvb3RMYXllcigpLmNyZWF0ZUNv
bXBhdGlibGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxheWVyLCBudWxscHRyKSkK
KyAgICAsIG1fbGF5b3V0Vmlld3BvcnRJbmRpY2F0b3JMYXllcihjb250cm9sbGVyLnJvb3RMYXll
cigpLmNyZWF0ZUNvbXBhdGlibGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxheWVy
LCBudWxscHRyKSkKKyAgICAsIG1fY292ZXJhZ2VSZWN0SW5kaWNhdG9yTGF5ZXIoY29udHJvbGxl
ci5yb290TGF5ZXIoKS5jcmVhdGVDb21wYXRpYmxlTGF5ZXIoUGxhdGZvcm1DQUxheWVyOjpMYXll
clR5cGVMYXllciwgbnVsbHB0cikpCiAgICAgLCBtX3Bvc2l0aW9uKEZsb2F0UG9pbnQoMCwgY29u
dHJvbGxlci50b3BDb250ZW50SW5zZXQoKSkpCiB7CiAgICAgbV9sYXllci5nZXQoKS5zZXRPcGFj
aXR5KDAuNzUpOwpJbmRleDogU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvVGls
ZUdyaWQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL1RpbGVHcmlkLmNwcAkocmV2aXNpb24gMjE2NDE3KQorKysgU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvVGlsZUdyaWQuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02NSw3ICs2
NSw3IEBAIHN0YXRpYyBTdHJpbmcgdmFsaWRhdGlvblBvbGljeUFzU3RyaW5nKFQKIAogVGlsZUdy
aWQ6OlRpbGVHcmlkKFRpbGVDb250cm9sbGVyJiBjb250cm9sbGVyKQogICAgIDogbV9jb250cm9s
bGVyKGNvbnRyb2xsZXIpCi0gICAgLCBtX2NvbnRhaW5lckxheWVyKCpjb250cm9sbGVyLnJvb3RM
YXllcigpLmNyZWF0ZUNvbXBhdGlibGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZUxh
eWVyLCBudWxscHRyKSkKKyAgICAsIG1fY29udGFpbmVyTGF5ZXIoY29udHJvbGxlci5yb290TGF5
ZXIoKS5jcmVhdGVDb21wYXRpYmxlTGF5ZXIoUGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGVMYXll
ciwgbnVsbHB0cikpCiAgICAgLCBtX2NvaG9ydFJlbW92YWxUaW1lcigqdGhpcywgJlRpbGVHcmlk
Ojpjb2hvcnRSZW1vdmFsVGltZXJGaXJlZCkKICAgICAsIG1fdGlsZVNpemUoa0RlZmF1bHRUaWxl
U2l6ZSwga0RlZmF1bHRUaWxlU2l6ZSkKIHsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVy
Q29jb2EuaAkocmV2aXNpb24gMjE2NDE3KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVyQ29jb2EuaAkod29ya2luZyBjb3B5KQpAQCAt
MzMsMTEgKzMzLDExIEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIAogY2xhc3MgUGxhdGZvcm1DQUxh
eWVyQ29jb2EgZmluYWwgOiBwdWJsaWMgUGxhdGZvcm1DQUxheWVyIHsKIHB1YmxpYzoKLSAgICBz
dGF0aWMgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZShMYXllclR5cGUsIFBsYXRm
b3JtQ0FMYXllckNsaWVudCopOworICAgIHN0YXRpYyBSZWY8UGxhdGZvcm1DQUxheWVyPiBjcmVh
dGUoTGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKTsKICAgICAKICAgICAvLyBUaGlz
IGZ1bmN0aW9uIHBhc3NlcyB0aGUgbGF5ZXIgYXMgYSB2b2lkKiByYXRoZXIgdGhhbiBhIFBsYXRm
b3JtTGF5ZXIgYmVjYXVzZSBQbGF0Zm9ybUxheWVyCiAgICAgLy8gaXMgZGVmaW5lZCBkaWZmZXJl
bnRseSBmb3IgT2JqIEMgYW5kIEMrKy4gVGhpcyBhbGxvd3MgY2FsbGVycyBmcm9tIGJvdGggbGFu
Z3VhZ2VzLgotICAgIHN0YXRpYyBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlKHZv
aWQqIHBsYXRmb3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCopOworICAgIHN0YXRpYyBS
ZWY8UGxhdGZvcm1DQUxheWVyPiBjcmVhdGUodm9pZCogcGxhdGZvcm1MYXllciwgUGxhdGZvcm1D
QUxheWVyQ2xpZW50Kik7CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgTGF5ZXJUeXBlIGxh
eWVyVHlwZUZvclBsYXRmb3JtTGF5ZXIoUGxhdGZvcm1MYXllciopOwogCkBAIC02Miw3ICs2Miw3
IEBAIHB1YmxpYzoKIAogICAgIHZvaWQgYWRkQW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYg
a2V5LCBQbGF0Zm9ybUNBQW5pbWF0aW9uJikgb3ZlcnJpZGU7CiAgICAgdm9pZCByZW1vdmVBbmlt
YXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOwotICAgIFBhc3NSZWZQdHI8
UGxhdGZvcm1DQUFuaW1hdGlvbj4gYW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5KSBv
dmVycmlkZTsKKyAgICBSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gYW5pbWF0aW9uRm9yS2V5
KGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKICAgICB2b2lkIGFuaW1hdGlvblN0YXJ0ZWQo
Y29uc3QgU3RyaW5nJiBrZXksIENGVGltZUludGVydmFsIGJlZ2luVGltZSkgb3ZlcnJpZGU7CiAg
ICAgdm9pZCBhbmltYXRpb25FbmRlZChjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7CiAKQEAg
LTE2OSw5ICsxNjksOSBAQCBwdWJsaWM6CiAKICAgICBUaWxlZEJhY2tpbmcqIHRpbGVkQmFja2lu
ZygpIG92ZXJyaWRlOwogCi0gICAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IGNsb25lKFBs
YXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZjxQbGF0
Zm9ybUNBTGF5ZXI+IGNsb25lKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0IG92
ZXJyaWRlOwogCi0gICAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IGNyZWF0ZUNvbXBhdGli
bGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50
KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlQ29tcGF0
aWJsZUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGll
bnQqKSBjb25zdCBvdmVycmlkZTsKIAogICAgIHZvaWQgZW51bWVyYXRlUmVjdHNCZWluZ0RyYXdu
KENHQ29udGV4dFJlZiwgdm9pZCAoXmJsb2NrKShDR1JlY3QpKSBvdmVycmlkZTsKIApJbmRleDog
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVy
Q29jb2EubW0KPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvY29jb2EvUGxhdGZvcm1DQUxheWVyQ29jb2EubW0JKHJldmlzaW9uIDIxNjQxNykKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNv
Y29hLm1tCSh3b3JraW5nIGNvcHkpCkBAIC02OSwxNCArNjksMTQgQEAgU09GVF9MSU5LX0NMQVNT
X09QVElPTkFMKEFWRm91bmRhdGlvbiwgQQogCiB1c2luZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAot
UGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllckNvY29hOjpjcmVhdGUo
TGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikKK1JlZjxQ
bGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllckNvY29hOjpjcmVhdGUoTGF5ZXJUeXBlIGxh
eWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikKIHsKLSAgICByZXR1cm4gYWRv
cHRSZWYobmV3IFBsYXRmb3JtQ0FMYXllckNvY29hKGxheWVyVHlwZSwgb3duZXIpKTsKKyAgICBy
ZXR1cm4gYWRvcHRSZWYoKm5ldyBQbGF0Zm9ybUNBTGF5ZXJDb2NvYShsYXllclR5cGUsIG93bmVy
KSk7CiB9CiAKLVBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJDb2Nv
YTo6Y3JlYXRlKHZvaWQqIHBsYXRmb3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3du
ZXIpCitSZWY8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y3JlYXRlKHZv
aWQqIHBsYXRmb3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpCiB7Ci0gICAg
cmV0dXJuIGFkb3B0UmVmKG5ldyBQbGF0Zm9ybUNBTGF5ZXJDb2NvYShzdGF0aWNfY2FzdDxQbGF0
Zm9ybUxheWVyKj4ocGxhdGZvcm1MYXllciksIG93bmVyKSk7CisgICAgcmV0dXJuIGFkb3B0UmVm
KCpuZXcgUGxhdGZvcm1DQUxheWVyQ29jb2Eoc3RhdGljX2Nhc3Q8UGxhdGZvcm1MYXllcio+KHBs
YXRmb3JtTGF5ZXIpLCBvd25lcikpOwogfQogCiBzdGF0aWMgTlNTdHJpbmcgKiBjb25zdCBwbGF0
Zm9ybUNBTGF5ZXJQb2ludGVyID0gQCJXS1BsYXRmb3JtQ0FMYXllciI7CkBAIC0zMTEsNyArMzEx
LDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y29tbW9uSW5pdCgpCiAgICAgRU5EX0JM
T0NLX09CSkNfRVhDRVBUSU9OUwogfQogCi1QYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxh
dGZvcm1DQUxheWVyQ29jb2E6OmNsb25lKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNv
bnN0CitSZWY8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y2xvbmUoUGxh
dGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikgY29uc3QKIHsKICAgICBMYXllclR5cGUgdHlwZTsK
ICAgICBzd2l0Y2ggKGxheWVyVHlwZSgpKSB7CkBAIC0zMzIsNyArMzMyLDcgQEAgUGFzc1JlZlB0
cjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYQogICAgICAgICB0eXBlID0gTGF5ZXJUeXBl
TGF5ZXI7CiAgICAgICAgIGJyZWFrOwogICAgIH07Ci0gICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXll
cj4gbmV3TGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y3JlYXRlKHR5cGUsIG93bmVyKTsK
KyAgICBhdXRvIG5ld0xheWVyID0gUGxhdGZvcm1DQUxheWVyQ29jb2E6OmNyZWF0ZSh0eXBlLCBv
d25lcik7CiAgICAgCiAgICAgbmV3TGF5ZXItPnNldFBvc2l0aW9uKHBvc2l0aW9uKCkpOwogICAg
IG5ld0xheWVyLT5zZXRCb3VuZHMoYm91bmRzKCkpOwpAQCAtMzUyLDcgKzM1Miw3IEBAIFBhc3NS
ZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGEKICAgICBpZiAodHlwZSA9PSBMYXll
clR5cGVBVlBsYXllckxheWVyKSB7CiAgICAgICAgIEFTU0VSVChbbmV3TGF5ZXItPnBsYXRmb3Jt
TGF5ZXIoKSBpc0tpbmRPZkNsYXNzOmdldEFWUGxheWVyTGF5ZXJDbGFzcygpXSk7CiAKLSAgICAg
ICAgQVZQbGF5ZXJMYXllciAqZGVzdGluYXRpb25QbGF5ZXJMYXllciA9IHN0YXRpY19jYXN0PFBs
YXRmb3JtQ0FMYXllckNvY29hICo+KG5ld0xheWVyLmdldCgpKS0+YXZQbGF5ZXJMYXllcigpOwor
ICAgICAgICBBVlBsYXllckxheWVyICpkZXN0aW5hdGlvblBsYXllckxheWVyID0gc3RhdGljX2Nh
c3Q8UGxhdGZvcm1DQUxheWVyQ29jb2EmPihuZXdMYXllci5nZXQoKSkuYXZQbGF5ZXJMYXllcigp
OwogICAgICAgICBBVlBsYXllckxheWVyICpzb3VyY2VQbGF5ZXJMYXllciA9IGF2UGxheWVyTGF5
ZXIoKTsKICAgICAgICAgQVNTRVJUKHNvdXJjZVBsYXllckxheWVyKTsKIApAQCAtNTA4LDExICs1
MDgsMTEgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6cmVtb3ZlQW5pbWF0aQogICAgIEVO
RF9CTE9DS19PQkpDX0VYQ0VQVElPTlMKIH0KIAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0
aW9uPiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6YW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYg
a2V5KQorUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IFBsYXRmb3JtQ0FMYXllckNvY29hOjph
bmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpCiB7CiAgICAgQ0FQcm9wZXJ0eUFuaW1h
dGlvbiogcHJvcGVydHlBbmltYXRpb24gPSBzdGF0aWNfY2FzdDxDQVByb3BlcnR5QW5pbWF0aW9u
Kj4oW21fbGF5ZXIgYW5pbWF0aW9uRm9yS2V5OmtleV0pOwogICAgIGlmICghcHJvcGVydHlBbmlt
YXRpb24pCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBy
ZXR1cm4gUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpjcmVhdGUocHJvcGVydHlBbmltYXRpb24p
OwogfQogCkBAIC0xMTkwLDcgKzExOTAsNyBAQCBDR1JlY3QgUGxhdGZvcm1DQUxheWVyOjpmcmFt
ZUZvckxheWVyKGNvCiAgICAgcmV0dXJuIFt0aWxlTGF5ZXIgZnJhbWVdOwogfQogCi1QYXNzUmVm
UHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1DQUxheWVyQ29jb2E6OmNyZWF0ZUNvbXBhdGli
bGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3JtQ0FM
YXllckNsaWVudCogY2xpZW50KSBjb25zdAorUmVmPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1D
QUxheWVyQ29jb2E6OmNyZWF0ZUNvbXBhdGlibGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVy
VHlwZSBsYXllclR5cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogY2xpZW50KSBjb25zdAogewog
ICAgIHJldHVybiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6Y3JlYXRlKGxheWVyVHlwZSwgY2xpZW50
KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0
Zm9ybUNBTGF5ZXJXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uY3BwCShyZXZpc2lvbiAyMTY0MTcp
CisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxh
eWVyV2luLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDcsMTQgKzQ3LDE0IEBACiAKIHVzaW5nIG5h
bWVzcGFjZSBXZWJDb3JlOwogCi1QYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZvcm1D
QUxheWVyV2luOjpjcmVhdGUoTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xp
ZW50KiBvd25lcikKK1JlZjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllcldpbjo6Y3Jl
YXRlKExheWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpCiB7
Ci0gICAgcmV0dXJuIGFkb3B0UmVmKG5ldyBQbGF0Zm9ybUNBTGF5ZXJXaW4obGF5ZXJUeXBlLCBu
dWxscHRyLCBvd25lcikpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFBsYXRmb3JtQ0FMYXll
cldpbihsYXllclR5cGUsIG51bGxwdHIsIG93bmVyKSk7CiB9CiAKLVBhc3NSZWZQdHI8UGxhdGZv
cm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJXaW46OmNyZWF0ZShQbGF0Zm9ybUxheWVyKiBwbGF0
Zm9ybUxheWVyLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyKQorUmVmPFBsYXRmb3JtQ0FM
YXllcj4gUGxhdGZvcm1DQUxheWVyV2luOjpjcmVhdGUoUGxhdGZvcm1MYXllciogcGxhdGZvcm1M
YXllciwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikKIHsKLSAgICByZXR1cm4gYWRvcHRS
ZWYobmV3IFBsYXRmb3JtQ0FMYXllcldpbihMYXllclR5cGVDdXN0b20sIHBsYXRmb3JtTGF5ZXIs
IG93bmVyKSk7CisgICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgUGxhdGZvcm1DQUxheWVyV2luKExh
eWVyVHlwZUN1c3RvbSwgcGxhdGZvcm1MYXllciwgb3duZXIpKTsKIH0KIAogc3RhdGljIENGU3Ry
aW5nUmVmIHRvQ0FDRkxheWVyVHlwZShQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSB0eXBlKQpA
QCAtMTgxLDExICsxODEsMTEgQEAgUGxhdGZvcm1DQUxheWVyV2luOjp+UGxhdGZvcm1DQUxheWVy
V2luKAogICAgIGRlbGV0ZSBsYXllckludGVybjsKIH0KIAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNB
TGF5ZXI+IFBsYXRmb3JtQ0FMYXllcldpbjo6Y2xvbmUoUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBv
d25lcikgY29uc3QKK1JlZjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllcldpbjo6Y2xv
bmUoUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikgY29uc3QKIHsKICAgICBQbGF0Zm9ybUNB
TGF5ZXI6OkxheWVyVHlwZSB0eXBlID0gKGxheWVyVHlwZSgpID09IFBsYXRmb3JtQ0FMYXllcjo6
TGF5ZXJUeXBlVHJhbnNmb3JtTGF5ZXIpID8KICAgICAgICAgUGxhdGZvcm1DQUxheWVyOjpMYXll
clR5cGVUcmFuc2Zvcm1MYXllciA6IFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlTGF5ZXI7Ci0g
ICAgUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gbmV3TGF5ZXIgPSBQbGF0Zm9ybUNBTGF5ZXJXaW46
OmNyZWF0ZSh0eXBlLCBvd25lcik7CisgICAgYXV0byBuZXdMYXllciA9IFBsYXRmb3JtQ0FMYXll
cldpbjo6Y3JlYXRlKHR5cGUsIG93bmVyKTsKIAogICAgIG5ld0xheWVyLT5zZXRQb3NpdGlvbihw
b3NpdGlvbigpKTsKICAgICBuZXdMYXllci0+c2V0Qm91bmRzKGJvdW5kcygpKTsKQEAgLTM1Myw3
ICszNTMsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllcldpbjo6cmVtb3ZlQW5pbWF0aW9uCiAgICAg
c2V0TmVlZHNDb21taXQoKTsKIH0KIAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBQ
bGF0Zm9ybUNBTGF5ZXJXaW46OmFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkKK1Jl
ZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBQbGF0Zm9ybUNBTGF5ZXJXaW46OmFuaW1hdGlvbkZv
cktleShjb25zdCBTdHJpbmcmIGtleSkKIHsKICAgICBIYXNoTWFwPFN0cmluZywgUmVmUHRyPFBs
YXRmb3JtQ0FBbmltYXRpb24+ID46Oml0ZXJhdG9yIGl0ID0gbV9hbmltYXRpb25zLmZpbmQoa2V5
KTsKICAgICBpZiAoaXQgPT0gbV9hbmltYXRpb25zLmVuZCgpKQpAQCAtOTM5LDcgKzkzOSw3IEBA
IFN0cmluZyBQbGF0Zm9ybUNBTGF5ZXJXaW46OmxheWVyVHJlZUFzU3QKICAgICByZXR1cm4gYnVp
bGRlci50b1N0cmluZygpOwogfQogCi1QYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllcj4gUGxhdGZv
cm1DQUxheWVyV2luOjpjcmVhdGVDb21wYXRpYmxlTGF5ZXIoUGxhdGZvcm1DQUxheWVyOjpMYXll
clR5cGUgbGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIGNsaWVudCkgY29uc3QKK1Jl
ZjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3JtQ0FMYXllcldpbjo6Y3JlYXRlQ29tcGF0aWJsZUxh
eWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVy
Q2xpZW50KiBjbGllbnQpIGNvbnN0CiB7CiAgICAgcmV0dXJuIFBsYXRmb3JtQ0FMYXllcldpbjo6
Y3JlYXRlKGxheWVyVHlwZSwgY2xpZW50KTsKIH0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUxheWVyV2lu
LmgJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL3dpbi9QbGF0Zm9ybUNBTGF5ZXJXaW4uaAkod29ya2luZyBjb3B5KQpAQCAtMzIsOCArMzIs
OCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKIGNsYXNzIFBsYXRmb3JtQ0FMYXllcldpbiBmaW5h
bCA6IHB1YmxpYyBQbGF0Zm9ybUNBTGF5ZXIgewogcHVibGljOgotICAgIHN0YXRpYyBQYXNzUmVm
UHRyPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlKExheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xp
ZW50Kik7Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBjcmVhdGUoUGxh
dGZvcm1MYXllciosIFBsYXRmb3JtQ0FMYXllckNsaWVudCopOworICAgIHN0YXRpYyBSZWY8UGxh
dGZvcm1DQUxheWVyPiBjcmVhdGUoTGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKTsK
KyAgICBzdGF0aWMgUmVmPFBsYXRmb3JtQ0FMYXllcj4gY3JlYXRlKFBsYXRmb3JtTGF5ZXIqLCBQ
bGF0Zm9ybUNBTGF5ZXJDbGllbnQqKTsKICAgICAKICAgICB+UGxhdGZvcm1DQUxheWVyV2luKCk7
CiAKQEAgLTU0LDcgKzU0LDcgQEAgcHVibGljOgogCiAgICAgdm9pZCBhZGRBbmltYXRpb25Gb3JL
ZXkoY29uc3QgU3RyaW5nJiBrZXksIFBsYXRmb3JtQ0FBbmltYXRpb24mKSBvdmVycmlkZTsKICAg
ICB2b2lkIHJlbW92ZUFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7
Ci0gICAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBhbmltYXRpb25Gb3JLZXkoY29u
c3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOworICAgIFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9u
PiBhbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJyaWRlOwogICAgIHZvaWQg
YW5pbWF0aW9uU3RhcnRlZChjb25zdCBTdHJpbmcmIGtleSwgQ0ZUaW1lSW50ZXJ2YWwgYmVnaW5U
aW1lKSBvdmVycmlkZTsKICAgICB2b2lkIGFuaW1hdGlvbkVuZGVkKGNvbnN0IFN0cmluZyYga2V5
KSBvdmVycmlkZTsKIApAQCAtMTY1LDkgKzE2NSw5IEBAIHB1YmxpYzoKIAogICAgIFN0cmluZyBs
YXllclRyZWVBc1N0cmluZygpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgUGFzc1JlZlB0cjxQbGF0
Zm9ybUNBTGF5ZXI+IGNsb25lKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0IG92
ZXJyaWRlOworICAgIFJlZjxQbGF0Zm9ybUNBTGF5ZXI+IGNsb25lKFBsYXRmb3JtQ0FMYXllckNs
aWVudCogb3duZXIpIGNvbnN0IG92ZXJyaWRlOwogCi0gICAgUGFzc1JlZlB0cjxQbGF0Zm9ybUNB
TGF5ZXI+IGNyZWF0ZUNvbXBhdGlibGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSwg
UGxhdGZvcm1DQUxheWVyQ2xpZW50KikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPFBsYXRmb3Jt
Q0FMYXllcj4gY3JlYXRlQ29tcGF0aWJsZUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJUeXBl
LCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKSBjb25zdCBvdmVycmlkZTsKIAogcHJpdmF0ZToKICAg
ICBQbGF0Zm9ybUNBTGF5ZXJXaW4oTGF5ZXJUeXBlLCBQbGF0Zm9ybUxheWVyKiwgUGxhdGZvcm1D
QUxheWVyQ2xpZW50KiBvd25lcik7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZpc2lvbiAyMTY0MjYpCisr
KyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw1NCBA
QAorMjAxNy0wNS0wOCAgQWxleCBDaHJpc3RlbnNlbiAgPGFjaHJpc3RlbnNlbkB3ZWJraXQub3Jn
PgorCisgICAgICAgIFJlZHVjZSBQYXNzUmVmUHRyIHVzZQorICAgICAgICBodHRwczovL2J1Z3Mu
d2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTcxODA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkg
Q2hyaXMgRHVtZXouCisKKyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQ
cm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OlBsdWdpbkNvbnRyb2xsZXJQcm94eTo6c2V0SW5p
dGlhbGl6YXRpb25SZXBseSk6CisgICAgICAgICogUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9s
bGVyUHJveHkuaDoKKyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9u
LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmRlc3Ryb3lQbHVn
aW4pOgorICAgICAgICAoV2ViS2l0OjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Y3JlYXRlUGx1Z2lu
KToKKyAgICAgICAgKiBQbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uLmg6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3BwOgorICAg
ICAgICAoV2ViS2l0OjpXZWJDaHJvbWVDbGllbnQ6OnJ1bk9wZW5QYW5lbCk6CisgICAgICAgICog
V2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJFZGl0b3JDbGllbnQuY3BwOgorICAgICAgICAo
V2ViS2l0OjpXZWJFZGl0b3JDbGllbnQ6OnJlZ2lzdGVyVW5kb1N0ZXApOgorICAgICAgICAqIFdl
YlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5jcHA6CisgICAgICAg
IChXZWJLaXQ6OlZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyOjpnZXRPckNyZWF0ZSk6CisgICAg
ICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyLmg6Cisg
ICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcDoKKyAgICAgICAgKFdlYktp
dDo6V2ViRnJhbWU6OmhpdFRlc3QpOgorICAgICAgICAoV2ViS2l0OjpXZWJGcmFtZTo6Y3JlYXRl
U2VsZWN0aW9uU25hcHNob3QpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJGcmFt
ZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJPcGVuUGFuZWxSZXN1bHRMaXN0
ZW5lci5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyOjpj
cmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcjo6V2Vi
T3BlblBhbmVsUmVzdWx0TGlzdGVuZXIpOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dW5hcHBseUVkaXRDb21t
YW5kKToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6cmVhcHBseUVkaXRDb21tYW5kKToKKyAg
ICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuY3BwOgorICAgICAg
ICAoV2ViS2l0OjpXZWJQYWdlR3JvdXBQcm94eTo6Y3JlYXRlKToKKyAgICAgICAgKiBXZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dl
YlBhZ2UvV2ViVW5kb1N0ZXAuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJVbmRvU3RlcDo6Y3Jl
YXRlKToKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVW5kb1N0ZXAuaDoKKyAgICAg
ICAgKFdlYktpdDo6V2ViVW5kb1N0ZXA6OnN0ZXApOgorICAgICAgICAoV2ViS2l0OjpXZWJVbmRv
U3RlcDo6V2ViVW5kb1N0ZXApOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxh
dGZvcm1DQUxheWVyUmVtb3RlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6UGxhdGZvcm1DQUxheWVy
UmVtb3RlOjpjcmVhdGUpOgorICAgICAgICAoV2ViS2l0OjpQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6
OmNsb25lKToKKyAgICAgICAgKFdlYktpdDo6UGxhdGZvcm1DQUxheWVyUmVtb3RlOjphbmltYXRp
b25Gb3JLZXkpOgorICAgICAgICAoV2ViS2l0OjpQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNyZWF0
ZUNvbXBhdGlibGVMYXllcik6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL21hYy9QbGF0
Zm9ybUNBTGF5ZXJSZW1vdGUuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1Bs
YXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tLm1tOgorICAgICAgICAoV2ViS2l0OjpQ
bGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b206OmNyZWF0ZSk6CisgICAgICAgIChXZWJLaXQ6OlBs
YXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbTo6Y2xvbmUpOgorCiAyMDE3LTA1LTA4ICBDaHJpcyBE
dW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgTW92ZSAnc3R5bGUnIGZyb20gRWxl
bWVudCB0byBIVE1MRWxlbWVudCAvIFNWR0VsZW1lbnQgYW5kIG1ha2UgaXQgc2V0dGFibGUKSW5k
ZXg6IFNvdXJjZS9XZWJLaXQyL1BsdWdpblByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRy
b2xsZXJQcm94eS5jcHAJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJLaXQyL1BsdWdp
blByb2Nlc3MvUGx1Z2luQ29udHJvbGxlclByb3h5LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTEs
MTAgKzkxLDEwIEBAIFBsdWdpbkNvbnRyb2xsZXJQcm94eTo6flBsdWdpbkNvbnRyb2xsZXIKICAg
ICAgICAgcmVsZWFzZU5QT2JqZWN0KG1fcGx1Z2luRWxlbWVudE5QT2JqZWN0KTsKIH0KIAotdm9p
ZCBQbHVnaW5Db250cm9sbGVyUHJveHk6OnNldEluaXRpYWxpemF0aW9uUmVwbHkoUGFzc1JlZlB0
cjxNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkNyZWF0ZVBsdWdpbjo6RGVsYXllZFJl
cGx5PiByZXBseSkKK3ZvaWQgUGx1Z2luQ29udHJvbGxlclByb3h5OjpzZXRJbml0aWFsaXphdGlv
blJlcGx5KFJlZjxNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkNyZWF0ZVBsdWdpbjo6
RGVsYXllZFJlcGx5PiYmIHJlcGx5KQogewogICAgIEFTU0VSVCghbV9pbml0aWFsaXphdGlvblJl
cGx5KTsKLSAgICBtX2luaXRpYWxpemF0aW9uUmVwbHkgPSByZXBseTsKKyAgICBtX2luaXRpYWxp
emF0aW9uUmVwbHkgPSBXVEZNb3ZlKHJlcGx5KTsKIH0KIAogUmVmUHRyPE1lc3NhZ2VzOjpXZWJQ
cm9jZXNzQ29ubmVjdGlvbjo6Q3JlYXRlUGx1Z2luOjpEZWxheWVkUmVwbHk+IFBsdWdpbkNvbnRy
b2xsZXJQcm94eTo6dGFrZUluaXRpYWxpemF0aW9uUmVwbHkoKQpJbmRleDogU291cmNlL1dlYktp
dDIvUGx1Z2luUHJvY2Vzcy9QbHVnaW5Db250cm9sbGVyUHJveHkuaAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRyb2xsZXJQcm94eS5oCShyZXZp
c2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1BsdWdpbkNvbnRy
b2xsZXJQcm94eS5oCSh3b3JraW5nIGNvcHkpCkBAIC03NSw3ICs3NSw3IEBAIHB1YmxpYzoKIAog
ICAgIGJvb2wgaXNJbml0aWFsaXppbmcoKSBjb25zdCB7IHJldHVybiBtX2lzSW5pdGlhbGl6aW5n
OyB9CiAgICAgCi0gICAgdm9pZCBzZXRJbml0aWFsaXphdGlvblJlcGx5KFBhc3NSZWZQdHI8TWVz
c2FnZXM6OldlYlByb2Nlc3NDb25uZWN0aW9uOjpDcmVhdGVQbHVnaW46OkRlbGF5ZWRSZXBseT4p
OworICAgIHZvaWQgc2V0SW5pdGlhbGl6YXRpb25SZXBseShSZWY8TWVzc2FnZXM6OldlYlByb2Nl
c3NDb25uZWN0aW9uOjpDcmVhdGVQbHVnaW46OkRlbGF5ZWRSZXBseT4mJik7CiAgICAgUmVmUHRy
PE1lc3NhZ2VzOjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Q3JlYXRlUGx1Z2luOjpEZWxheWVkUmVw
bHk+IHRha2VJbml0aWFsaXphdGlvblJlcGx5KCk7CiAKIHByaXZhdGU6CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uLmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uLmNw
cAkocmV2aXNpb24gMjE2NDE3KQorKysgU291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9XZWJQ
cm9jZXNzQ29ubmVjdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3Niw3ICsxNzYsNyBAQCB2
b2lkIFdlYlByb2Nlc3NDb25uZWN0aW9uOjpkaWRDbG9zZShJUEM6CiAgICAgICAgIGRlc3Ryb3lQ
bHVnaW5Db250cm9sbGVyUHJveHkocGx1Z2luQ29udHJvbGxlcnNbaV0pOwogfQogCi12b2lkIFdl
YlByb2Nlc3NDb25uZWN0aW9uOjpkZXN0cm95UGx1Z2luKHVpbnQ2NF90IHBsdWdpbkluc3RhbmNl
SUQsIGJvb2wgYXN5bmNocm9ub3VzQ3JlYXRpb25JbmNvbXBsZXRlLCBQYXNzUmVmUHRyPE1lc3Nh
Z2VzOjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6RGVzdHJveVBsdWdpbjo6RGVsYXllZFJlcGx5PiBy
ZXBseSkKK3ZvaWQgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmRlc3Ryb3lQbHVnaW4odWludDY0X3Qg
cGx1Z2luSW5zdGFuY2VJRCwgYm9vbCBhc3luY2hyb25vdXNDcmVhdGlvbkluY29tcGxldGUsIFJl
ZjxNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkRlc3Ryb3lQbHVnaW46OkRlbGF5ZWRS
ZXBseT4mJiByZXBseSkKIHsKICAgICAvLyBXZSByZXR1cm4gaW1tZWRpYXRlbHkgZnJvbSB0aGlz
IHN5bmNocm9ub3VzIElQQy4gV2Ugd2FudCB0byBtYWtlIHN1cmUgdGhlIHBsdWdpbiBkZXN0cnVj
dGlvbiBpcyBqdXN0IGFib3V0IHRvIHN0YXJ0IHNvIGF1ZGlvIHBsYXliYWNrCiAgICAgLy8gd2ls
bCBmaW5pc2ggc29vbiBhZnRlciByZXR1cm5pbmcuIEhvd2V2ZXIgd2UgZG9uJ3Qgd2FudCB0byB3
YWl0IGZvciBkZXN0cnVjdGlvbiB0byBjb21wbGV0ZSBmdWxseSBhcyB0aGF0IG1heSB0YWtlIGEg
d2hpbGUuCkBAIC0yMjksNyArMjI5LDcgQEAgdm9pZCBXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Y3Jl
YXRlUGx1Z2luSQogI2VuZGlmCiB9CiAKLXZvaWQgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmNyZWF0
ZVBsdWdpbihjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmIGNyZWF0aW9uUGFyYW1ldGVy
cywgUGFzc1JlZlB0cjxNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkNyZWF0ZVBsdWdp
bjo6RGVsYXllZFJlcGx5PiByZXBseSkKK3ZvaWQgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmNyZWF0
ZVBsdWdpbihjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmIGNyZWF0aW9uUGFyYW1ldGVy
cywgUmVmPE1lc3NhZ2VzOjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Q3JlYXRlUGx1Z2luOjpEZWxh
eWVkUmVwbHk+JiYgcmVwbHkpCiB7CiAgICAgLy8gRW5zdXJlIHdlIGRvbid0IGNsYW1wIGFueSB0
aW1lcnMgZHVyaW5nIGluaXRpYWxpemF0aW9uCiAgICAgQWN0aXZpdHlBc3NlcnRpb24gYWN0aXZp
dHlBc3NlcnRpb24oUGx1Z2luUHJvY2Vzczo6c2luZ2xldG9uKCkuY29ubmVjdGlvbkFjdGl2aXR5
KCkpOwpAQCAtMjQwLDcgKzI0MCw3IEBAIHZvaWQgV2ViUHJvY2Vzc0Nvbm5lY3Rpb246OmNyZWF0
ZVBsdWdpbigKICAgICBpZiAocGx1Z2luQ29udHJvbGxlclByb3h5KSB7CiAgICAgICAgIC8vIEl0
IG1pZ2h0IHN0aWxsIGJlIGluIHRoZSBtaWRkbGUgb2YgaW5pdGlhbGl6YXRpb24gaW4gd2hpY2gg
Y2FzZSB3ZSBoYXZlIHRvIGxldCB0aGF0IGluaXRpYWxpemF0aW9uIGNvbXBsZXRlIGFuZCByZXNw
b25kIHRvIHRoaXMgbWVzc2FnZSBsYXRlci4KICAgICAgICAgaWYgKHBsdWdpbkNvbnRyb2xsZXJQ
cm94eS0+aXNJbml0aWFsaXppbmcoKSkgewotICAgICAgICAgICAgcGx1Z2luQ29udHJvbGxlclBy
b3h5LT5zZXRJbml0aWFsaXphdGlvblJlcGx5KHJlcGx5KTsKKyAgICAgICAgICAgIHBsdWdpbkNv
bnRyb2xsZXJQcm94eS0+c2V0SW5pdGlhbGl6YXRpb25SZXBseShXVEZNb3ZlKHJlcGx5KSk7CiAg
ICAgICAgICAgICByZXR1cm47CiAgICAgICAgIH0KICAgICAgICAgCkluZGV4OiBTb3VyY2UvV2Vi
S2l0Mi9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3NDb25uZWN0aW9uLmgKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYktpdDIvUGx1Z2luUHJvY2Vzcy9XZWJQcm9jZXNzQ29ubmVjdGlvbi5oCShyZXZp
c2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9QbHVnaW5Qcm9jZXNzL1dlYlByb2Nlc3ND
b25uZWN0aW9uLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFdlYlByb2Nlc3NDb25uZWN0
aW9uX2gKLSNkZWZpbmUgV2ViUHJvY2Vzc0Nvbm5lY3Rpb25faAorI3ByYWdtYSBvbmNlCiAKICNp
ZiBFTkFCTEUoTkVUU0NBUEVfUExVR0lOX0FQSSkKIApAQCAtNzAsOSArNjksOSBAQCBwcml2YXRl
OgogICAgIC8vIE1lc3NhZ2UgaGFuZGxlcnMuCiAgICAgdm9pZCBkaWRSZWNlaXZlV2ViUHJvY2Vz
c0Nvbm5lY3Rpb25NZXNzYWdlKElQQzo6Q29ubmVjdGlvbiYsIElQQzo6RGVjb2RlciYpOwogICAg
IHZvaWQgZGlkUmVjZWl2ZVN5bmNXZWJQcm9jZXNzQ29ubmVjdGlvbk1lc3NhZ2UoSVBDOjpDb25u
ZWN0aW9uJiwgSVBDOjpEZWNvZGVyJiwgc3RkOjp1bmlxdWVfcHRyPElQQzo6RW5jb2Rlcj4mKTsK
LSAgICB2b2lkIGNyZWF0ZVBsdWdpbihjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmLCBQ
YXNzUmVmUHRyPE1lc3NhZ2VzOjpXZWJQcm9jZXNzQ29ubmVjdGlvbjo6Q3JlYXRlUGx1Z2luOjpE
ZWxheWVkUmVwbHk+KTsKKyAgICB2b2lkIGNyZWF0ZVBsdWdpbihjb25zdCBQbHVnaW5DcmVhdGlv
blBhcmFtZXRlcnMmLCBSZWY8TWVzc2FnZXM6OldlYlByb2Nlc3NDb25uZWN0aW9uOjpDcmVhdGVQ
bHVnaW46OkRlbGF5ZWRSZXBseT4mJik7CiAgICAgdm9pZCBjcmVhdGVQbHVnaW5Bc3luY2hyb25v
dXNseShjb25zdCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmKTsKLSAgICB2b2lkIGRlc3Ryb3lQ
bHVnaW4odWludDY0X3QgcGx1Z2luSW5zdGFuY2VJRCwgYm9vbCBhc3luY2hyb25vdXNDcmVhdGlv
bkluY29tcGxldGUsIFBhc3NSZWZQdHI8TWVzc2FnZXM6OldlYlByb2Nlc3NDb25uZWN0aW9uOjpE
ZXN0cm95UGx1Z2luOjpEZWxheWVkUmVwbHk+KTsKKyAgICB2b2lkIGRlc3Ryb3lQbHVnaW4odWlu
dDY0X3QgcGx1Z2luSW5zdGFuY2VJRCwgYm9vbCBhc3luY2hyb25vdXNDcmVhdGlvbkluY29tcGxl
dGUsIFJlZjxNZXNzYWdlczo6V2ViUHJvY2Vzc0Nvbm5lY3Rpb246OkRlc3Ryb3lQbHVnaW46OkRl
bGF5ZWRSZXBseT4mJik7CiAgICAgCiAgICAgdm9pZCBjcmVhdGVQbHVnaW5JbnRlcm5hbChjb25z
dCBQbHVnaW5DcmVhdGlvblBhcmFtZXRlcnMmLCBib29sJiByZXN1bHQsIGJvb2wmIHdhbnRzV2hl
ZWxFdmVudHMsIHVpbnQzMl90JiByZW1vdGVMYXllckNsaWVudElEKTsKIApAQCAtODYsNiArODUs
MyBAQCBwcml2YXRlOgogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKICNlbmRpZiAvLyBFTkFCTEUo
TkVUU0NBUEVfUExVR0lOX0FQSSkKLQotCi0jZW5kaWYgLy8gV2ViUHJvY2Vzc0Nvbm5lY3Rpb25f
aApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJv
bWVDbGllbnQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViQ2hyb21lQ2xpZW50LmNwcAkocmV2aXNpb24gMjE2NDE3KQorKysgU291
cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJDb3JlU3VwcG9ydC9XZWJDaHJvbWVDbGllbnQuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC03NzMsNyArNzczLDcgQEAgdm9pZCBXZWJDaHJvbWVDbGllbnQ6
OnJ1bk9wZW5QYW5lbChGcmFtZQogICAgIGlmIChtX3BhZ2UuYWN0aXZlT3BlblBhbmVsUmVzdWx0
TGlzdGVuZXIoKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgbV9wYWdlLnNldEFjdGl2ZU9wZW5Q
YW5lbFJlc3VsdExpc3RlbmVyKFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyOjpjcmVhdGUoJm1f
cGFnZSwgJmZpbGVDaG9vc2VyKSk7CisgICAgbV9wYWdlLnNldEFjdGl2ZU9wZW5QYW5lbFJlc3Vs
dExpc3RlbmVyKFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyOjpjcmVhdGUobV9wYWdlLCBmaWxl
Q2hvb3NlcikpOwogCiAgICAgYXV0byogd2ViRnJhbWUgPSBXZWJGcmFtZTo6ZnJvbUNvcmVGcmFt
ZShmcmFtZSk7CiAgICAgQVNTRVJUKHdlYkZyYW1lKTsKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvV2ViQ29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYkNvcmVTdXBwb3J0L1dlYkVkaXRvckNsaWVu
dC5jcHAJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
Q29yZVN1cHBvcnQvV2ViRWRpdG9yQ2xpZW50LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQ1LDgg
KzI0NSw4IEBAIHZvaWQgV2ViRWRpdG9yQ2xpZW50OjpyZWdpc3RlclVuZG9TdGVwKFUKICAgICBp
ZiAobV9wYWdlLT5pc0luUmVkbygpKQogICAgICAgICByZXR1cm47CiAKLSAgICBhdXRvIHdlYlN0
ZXAgPSBXZWJVbmRvU3RlcDo6Y3JlYXRlKCZzdGVwKTsKLSAgICBhdXRvIGVkaXRBY3Rpb24gPSBz
dGF0aWNfY2FzdDx1aW50MzJfdD4od2ViU3RlcC0+c3RlcCgpLT5lZGl0aW5nQWN0aW9uKCkpOwor
ICAgIGF1dG8gd2ViU3RlcCA9IFdlYlVuZG9TdGVwOjpjcmVhdGUoc3RlcCk7CisgICAgYXV0byBl
ZGl0QWN0aW9uID0gc3RhdGljX2Nhc3Q8dWludDMyX3Q+KHdlYlN0ZXAtPnN0ZXAoKS5lZGl0aW5n
QWN0aW9uKCkpOwogCiAgICAgbV9wYWdlLT5hZGRXZWJVbmRvU3RlcCh3ZWJTdGVwLT5zdGVwSUQo
KSwgd2ViU3RlcC5wdHIoKSk7CiAgICAgbV9wYWdlLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJv
eHk6OlJlZ2lzdGVyRWRpdENvbW1hbmRGb3JVbmRvKHdlYlN0ZXAtPnN0ZXBJRCgpLCBlZGl0QWN0
aW9uKSk7CkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExp
bmtUYWJsZUNvbnRyb2xsZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlBy
b2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlci5jcHAJKHJldmlzaW9uIDIx
NjQxNykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9WaXNpdGVkTGlua1Rh
YmxlQ29udHJvbGxlci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTQ0LDE2ICs0NCwxNiBAQCBzdGF0
aWMgSGFzaE1hcDx1aW50NjRfdCwgVmlzaXRlZExpbmtUYWJsCiAgICAgcmV0dXJuIHZpc2l0ZWRM
aW5rVGFibGVDb250cm9sbGVyczsKIH0KIAotUGFzc1JlZlB0cjxWaXNpdGVkTGlua1RhYmxlQ29u
dHJvbGxlcj4gVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXI6OmdldE9yQ3JlYXRlKHVpbnQ2NF90
IGlkZW50aWZpZXIpCitSZWY8VmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXI+IFZpc2l0ZWRMaW5r
VGFibGVDb250cm9sbGVyOjpnZXRPckNyZWF0ZSh1aW50NjRfdCBpZGVudGlmaWVyKQogewogICAg
IGF1dG8mIHZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyUHRyID0gdmlzaXRlZExpbmtUYWJsZUNv
bnRyb2xsZXJzKCkuYWRkKGlkZW50aWZpZXIsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAg
ICBpZiAodmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXJQdHIpCi0gICAgICAgIHJldHVybiB2aXNp
dGVkTGlua1RhYmxlQ29udHJvbGxlclB0cjsKKyAgICAgICAgcmV0dXJuICp2aXNpdGVkTGlua1Rh
YmxlQ29udHJvbGxlclB0cjsKIAogICAgIGF1dG8gdmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIg
PSBhZG9wdFJlZigqbmV3IFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyKGlkZW50aWZpZXIpKTsK
ICAgICB2aXNpdGVkTGlua1RhYmxlQ29udHJvbGxlclB0ciA9IHZpc2l0ZWRMaW5rVGFibGVDb250
cm9sbGVyLnB0cigpOwogCi0gICAgcmV0dXJuIFdURk1vdmUodmlzaXRlZExpbmtUYWJsZUNvbnRy
b2xsZXIpOworICAgIHJldHVybiB2aXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcjsKIH0KIAogVmlz
aXRlZExpbmtUYWJsZUNvbnRyb2xsZXI6OlZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyKHVpbnQ2
NF90IGlkZW50aWZpZXIpCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2Uv
VmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIuaAkocmV2aXNp
b24gMjE2NDE3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1Zpc2l0ZWRM
aW5rVGFibGVDb250cm9sbGVyLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDcgQEAKICAq
IFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERBTUFHRS4KICAqLwogCi0jaWZuZGVmIFZpc2l0ZWRM
aW5rVGFibGVDb250cm9sbGVyX2gKLSNkZWZpbmUgVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXJf
aAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJNZXNzYWdlUmVjZWl2ZXIuaCIKICNpbmNsdWRl
ICJTaGFyZWRNZW1vcnkuaCIKQEAgLTM1LDcgKzM0LDcgQEAgbmFtZXNwYWNlIFdlYktpdCB7CiAK
IGNsYXNzIFZpc2l0ZWRMaW5rVGFibGVDb250cm9sbGVyIGZpbmFsIDogcHVibGljIFdlYkNvcmU6
OlZpc2l0ZWRMaW5rU3RvcmUgLCBwcml2YXRlIElQQzo6TWVzc2FnZVJlY2VpdmVyIHsKIHB1Ymxp
YzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxWaXNpdGVkTGlua1RhYmxlQ29udHJvbGxlcj4gZ2V0
T3JDcmVhdGUodWludDY0X3QgaWRlbnRpZmllcik7CisgICAgc3RhdGljIFJlZjxWaXNpdGVkTGlu
a1RhYmxlQ29udHJvbGxlcj4gZ2V0T3JDcmVhdGUodWludDY0X3QgaWRlbnRpZmllcik7CiAgICAg
dmlydHVhbCB+VmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXIoKTsKIAogcHJpdmF0ZToKQEAgLTU4
LDUgKzU3LDMgQEAgcHJpdmF0ZToKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5k
aWYgLy8gVmlzaXRlZExpbmtUYWJsZUNvbnRyb2xsZXJfaApJbmRleDogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
S2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCShyZXZpc2lvbiAyMTY0MTcpCisr
KyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC02MDMsMTAgKzYwMywxMCBAQCBib29sIFdlYkZyYW1lOjpoYXNWZXJ0aWNhbFNj
cm9sbGJhcigpIGNvCiAgICAgcmV0dXJuIHZpZXctPnZlcnRpY2FsU2Nyb2xsYmFyKCk7CiB9CiAK
LVBhc3NSZWZQdHI8SW5qZWN0ZWRCdW5kbGVIaXRUZXN0UmVzdWx0PiBXZWJGcmFtZTo6aGl0VGVz
dChjb25zdCBJbnRQb2ludCBwb2ludCkgY29uc3QKK1JlZlB0cjxJbmplY3RlZEJ1bmRsZUhpdFRl
c3RSZXN1bHQ+IFdlYkZyYW1lOjpoaXRUZXN0KGNvbnN0IEludFBvaW50IHBvaW50KSBjb25zdAog
ewogICAgIGlmICghbV9jb3JlRnJhbWUpCi0gICAgICAgIHJldHVybiAwOworICAgICAgICByZXR1
cm4gbnVsbHB0cjsKIAogICAgIHJldHVybiBJbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQ6OmNy
ZWF0ZShtX2NvcmVGcmFtZS0+ZXZlbnRIYW5kbGVyKCkuaGl0VGVzdFJlc3VsdEF0UG9pbnQocG9p
bnQsIEhpdFRlc3RSZXF1ZXN0OjpSZWFkT25seSB8IEhpdFRlc3RSZXF1ZXN0OjpBY3RpdmUgfCBI
aXRUZXN0UmVxdWVzdDo6SWdub3JlQ2xpcHBpbmcgfCBIaXRUZXN0UmVxdWVzdDo6RGlzYWxsb3dV
c2VyQWdlbnRTaGFkb3dDb250ZW50KSk7CiB9CkBAIC04MTgsNyArODE4LDcgQEAgUmV0YWluUHRy
PENGRGF0YVJlZj4gV2ViRnJhbWU6OndlYkFyY2hpdgogfQogI2VuZGlmCiAKLVBhc3NSZWZQdHI8
U2hhcmVhYmxlQml0bWFwPiBXZWJGcmFtZTo6Y3JlYXRlU2VsZWN0aW9uU25hcHNob3QoKSBjb25z
dAorUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gV2ViRnJhbWU6OmNyZWF0ZVNlbGVjdGlvblNuYXBz
aG90KCkgY29uc3QKIHsKICAgICBzdGQ6OnVuaXF1ZV9wdHI8SW1hZ2VCdWZmZXI+IHNuYXBzaG90
ID0gc25hcHNob3RTZWxlY3Rpb24oKmNvcmVGcmFtZSgpLCBXZWJDb3JlOjpTbmFwc2hvdE9wdGlv
bnNGb3JjZUJsYWNrVGV4dCk7CiAgICAgaWYgKCFzbmFwc2hvdCkKQEAgLTgzNSw3ICs4MzUsNyBA
QCBQYXNzUmVmUHRyPFNoYXJlYWJsZUJpdG1hcD4gV2ViRnJhbWU6OmNyCiAgICAgZ3JhcGhpY3ND
b250ZXh0LT5zY2FsZShkZXZpY2VTY2FsZUZhY3Rvcik7CiAgICAgZ3JhcGhpY3NDb250ZXh0LT5k
cmF3Q29uc3VtaW5nSW1hZ2VCdWZmZXIoV1RGTW92ZShzbmFwc2hvdCksIEZsb2F0UG9pbnQoKSk7
CiAKLSAgICByZXR1cm4gV1RGTW92ZShzaGFyZWRTbmFwc2hvdCk7CisgICAgcmV0dXJuIHNoYXJl
ZFNuYXBzaG90OwogfQogICAgIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViRnJhbWUuaAkocmV2aXNpb24gMjE2NDE3
KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYkZyYW1lLmgJKHdvcmtp
bmcgY29weSkKQEAgLTIzLDggKzIzLDcgQEAKICAqIFRIRSBQT1NTSUJJTElUWSBPRiBTVUNIIERB
TUFHRS4KICAqLwogCi0jaWZuZGVmIFdlYkZyYW1lX2gKLSNkZWZpbmUgV2ViRnJhbWVfaAorI3By
YWdtYSBvbmNlCiAKICNpbmNsdWRlICJBUElPYmplY3QuaCIKICNpbmNsdWRlICJEb3dubG9hZElE
LmgiCkBAIC0zNiw3ICszNSw2IEBACiAjaW5jbHVkZSA8V2ViQ29yZS9GcmFtZUxvYWRlclR5cGVz
Lmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9Qb2xpY3lDaGVja2VyLmg+CiAjaW5jbHVkZSA8d3RmL0Zv
cndhcmQuaD4KLSNpbmNsdWRlIDx3dGYvUGFzc1JlZlB0ci5oPgogI2luY2x1ZGUgPHd0Zi9SZWZQ
dHIuaD4KICNpbmNsdWRlIDx3dGYvUmV0YWluUHRyLmg+CiAKQEAgLTExMSw3ICsxMDksNyBAQCBw
dWJsaWM6CiAgICAgV2ViQ29yZTo6SW50U2l6ZSBzY3JvbGxPZmZzZXQoKSBjb25zdDsKICAgICBi
b29sIGhhc0hvcml6b250YWxTY3JvbGxiYXIoKSBjb25zdDsKICAgICBib29sIGhhc1ZlcnRpY2Fs
U2Nyb2xsYmFyKCkgY29uc3Q7Ci0gICAgUGFzc1JlZlB0cjxJbmplY3RlZEJ1bmRsZUhpdFRlc3RS
ZXN1bHQ+IGhpdFRlc3QoY29uc3QgV2ViQ29yZTo6SW50UG9pbnQpIGNvbnN0OworICAgIFJlZlB0
cjxJbmplY3RlZEJ1bmRsZUhpdFRlc3RSZXN1bHQ+IGhpdFRlc3QoY29uc3QgV2ViQ29yZTo6SW50
UG9pbnQpIGNvbnN0OwogICAgIGJvb2wgZ2V0RG9jdW1lbnRCYWNrZ3JvdW5kQ29sb3IoZG91Ymxl
KiByZWQsIGRvdWJsZSogZ3JlZW4sIGRvdWJsZSogYmx1ZSwgZG91YmxlKiBhbHBoYSk7CiAgICAg
Ym9vbCBjb250YWluc0FueUZvcm1FbGVtZW50cygpIGNvbnN0OwogICAgIGJvb2wgY29udGFpbnNB
bnlGb3JtQ29udHJvbHMoKSBjb25zdDsKQEAgLTE1OCw3ICsxNTYsNyBAQCBwdWJsaWM6CiAgICAg
UmV0YWluUHRyPENGRGF0YVJlZj4gd2ViQXJjaGl2ZURhdGEoRnJhbWVGaWx0ZXJGdW5jdGlvbiwg
dm9pZCogY29udGV4dCk7CiAjZW5kaWYKIAotICAgIFBhc3NSZWZQdHI8U2hhcmVhYmxlQml0bWFw
PiBjcmVhdGVTZWxlY3Rpb25TbmFwc2hvdCgpIGNvbnN0OworICAgIFJlZlB0cjxTaGFyZWFibGVC
aXRtYXA+IGNyZWF0ZVNlbGVjdGlvblNuYXBzaG90KCkgY29uc3Q7CiAKICNpZiBQTEFURk9STShJ
T1MpCiAgICAgdWludDY0X3QgZmlyc3RMYXllclRyZWVUcmFuc2FjdGlvbklEQWZ0ZXJEaWRDb21t
aXRMb2FkKCkgY29uc3QgeyByZXR1cm4gbV9maXJzdExheWVyVHJlZVRyYW5zYWN0aW9uSURBZnRl
ckRpZENvbW1pdExvYWQ7IH0KQEAgLTE4Niw1ICsxODQsMyBAQCBwcml2YXRlOgogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNlbmRpZiAvLyBXZWJGcmFtZV9oCkluZGV4OiBTb3VyY2Uv
V2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJPcGVu
UGFuZWxSZXN1bHRMaXN0ZW5lci5jcHAJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTI2LDE4ICsyNiwxOSBAQAogI2luY2x1ZGUgImNvbmZpZy5oIgogI2lu
Y2x1ZGUgIldlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyLmgiCiAKKyNpbmNsdWRlIDxXZWJDb3Jl
L0ZpbGVDaG9vc2VyLmg+CiAjaW5jbHVkZSA8V2ViQ29yZS9JY29uLmg+CiAKIG5hbWVzcGFjZSBX
ZWJLaXQgewogCi1SZWY8V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI+IFdlYk9wZW5QYW5lbFJl
c3VsdExpc3RlbmVyOjpjcmVhdGUoV2ViUGFnZSogcGFnZSwgUGFzc1JlZlB0cjxXZWJDb3JlOjpG
aWxlQ2hvb3Nlcj4gZmlsZUNob29zZXIpCitSZWY8V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI+
IFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyOjpjcmVhdGUoV2ViUGFnZSYgcGFnZSwgUmVmPFdl
YkNvcmU6OkZpbGVDaG9vc2VyPiYmIGZpbGVDaG9vc2VyKQogewotICAgIHJldHVybiBhZG9wdFJl
ZigqbmV3IFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyKHBhZ2UsIGZpbGVDaG9vc2VyKSk7Cisg
ICAgcmV0dXJuIGFkb3B0UmVmKCpuZXcgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIocGFnZSwg
V1RGTW92ZShmaWxlQ2hvb3NlcikpKTsKIH0KIAotV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI6
OldlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyKFdlYlBhZ2UqIHBhZ2UsIFBhc3NSZWZQdHI8V2Vi
Q29yZTo6RmlsZUNob29zZXI+IGZpbGVDaG9vc2VyKQotICAgIDogbV9wYWdlKHBhZ2UpCi0gICAg
LCBtX2ZpbGVDaG9vc2VyKGZpbGVDaG9vc2VyKQorV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI6
OldlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyKFdlYlBhZ2UmIHBhZ2UsIFJlZjxXZWJDb3JlOjpG
aWxlQ2hvb3Nlcj4mJiBmaWxlQ2hvb3NlcikKKyAgICA6IG1fcGFnZSgmcGFnZSkKKyAgICAsIG1f
ZmlsZUNob29zZXIoV1RGTW92ZShmaWxlQ2hvb3NlcikpCiB7CiB9CiAKSW5kZXg6IFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lci5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJPcGVuUGFu
ZWxSZXN1bHRMaXN0ZW5lci5oCShyZXZpc2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIuaAkod29ya2luZyBj
b3B5KQpAQCAtMjMsMTMgKzIzLDE1IEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1B
R0UuCiAgKi8KIAotI2lmbmRlZiBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5lcl9oCi0jZGVmaW5l
IFdlYk9wZW5QYW5lbFJlc3VsdExpc3RlbmVyX2gKKyNwcmFnbWEgb25jZQogCisjaW5jbHVkZSA8
d3RmL0ZvcndhcmQuaD4KKyNpbmNsdWRlIDx3dGYvUmVmLmg+CiAjaW5jbHVkZSA8d3RmL1JlZkNv
dW50ZWQuaD4KLSNpbmNsdWRlIDxXZWJDb3JlL0ZpbGVDaG9vc2VyLmg+CisjaW5jbHVkZSA8d3Rm
L1ZlY3Rvci5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CitjbGFzcyBGaWxlQ2hvb3NlcjsKIGNs
YXNzIEljb247CiB9CiAKQEAgLTM5LDcgKzQxLDcgQEAgY2xhc3MgV2ViUGFnZTsKIAogY2xhc3Mg
V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIgOiBwdWJsaWMgUmVmQ291bnRlZDxXZWJPcGVuUGFu
ZWxSZXN1bHRMaXN0ZW5lcj4gewogcHVibGljOgotICAgIHN0YXRpYyBSZWY8V2ViT3BlblBhbmVs
UmVzdWx0TGlzdGVuZXI+IGNyZWF0ZShXZWJQYWdlKiwgUGFzc1JlZlB0cjxXZWJDb3JlOjpGaWxl
Q2hvb3Nlcj4pOworICAgIHN0YXRpYyBSZWY8V2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXI+IGNy
ZWF0ZShXZWJQYWdlJiwgUmVmPFdlYkNvcmU6OkZpbGVDaG9vc2VyPiYmKTsKICAgICB+V2ViT3Bl
blBhbmVsUmVzdWx0TGlzdGVuZXIoKTsKIAogICAgIHZvaWQgZGlzY29ubmVjdEZyb21QYWdlKCkg
eyBtX3BhZ2UgPSAwOyB9CkBAIC00OSwxMyArNTEsMTAgQEAgcHVibGljOgogI2VuZGlmCiAKIHBy
aXZhdGU6Ci0gICAgV2ViT3BlblBhbmVsUmVzdWx0TGlzdGVuZXIoV2ViUGFnZSosIFBhc3NSZWZQ
dHI8V2ViQ29yZTo6RmlsZUNob29zZXI+KTsKKyAgICBXZWJPcGVuUGFuZWxSZXN1bHRMaXN0ZW5l
cihXZWJQYWdlJiwgUmVmPFdlYkNvcmU6OkZpbGVDaG9vc2VyPiYmKTsKIAogICAgIFdlYlBhZ2Uq
IG1fcGFnZTsKLSAgICBSZWZQdHI8V2ViQ29yZTo6RmlsZUNob29zZXI+IG1fZmlsZUNob29zZXI7
CisgICAgUmVmPFdlYkNvcmU6OkZpbGVDaG9vc2VyPiBtX2ZpbGVDaG9vc2VyOwogfTsKIAogfSAv
LyBuYW1lc3BhY2UgV2ViS2l0Ci0KLQotI2VuZGlmIC8vIFdlYk9wZW5QYW5lbFJlc3VsdExpc3Rl
bmVyX2gKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHAJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzcxMCw3ICszNzEwLDcgQEAgdm9p
ZCBXZWJQYWdlOjp1bmFwcGx5RWRpdENvbW1hbmQodWludDY0XwogICAgIGlmICghc3RlcCkKICAg
ICAgICAgcmV0dXJuOwogCi0gICAgc3RlcC0+c3RlcCgpLT51bmFwcGx5KCk7CisgICAgc3RlcC0+
c3RlcCgpLnVuYXBwbHkoKTsKIH0KIAogdm9pZCBXZWJQYWdlOjpyZWFwcGx5RWRpdENvbW1hbmQo
dWludDY0X3Qgc3RlcElEKQpAQCAtMzcyMCw3ICszNzIwLDcgQEAgdm9pZCBXZWJQYWdlOjpyZWFw
cGx5RWRpdENvbW1hbmQodWludDY0XwogICAgICAgICByZXR1cm47CiAKICAgICBtX2lzSW5SZWRv
ID0gdHJ1ZTsKLSAgICBzdGVwLT5zdGVwKCktPnJlYXBwbHkoKTsKKyAgICBzdGVwLT5zdGVwKCku
cmVhcHBseSgpOwogICAgIG1faXNJblJlZG8gPSBmYWxzZTsKIH0KIApJbmRleDogU291cmNlL1dl
YktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2VHcm91cFByb3h5LmNwcAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHku
Y3BwCShyZXZpc2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBh
Z2UvV2ViUGFnZUdyb3VwUHJveHkuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zNSwxNCArMzUsMTQg
QEAKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVBhc3NSZWZQdHI8V2ViUGFnZUdyb3VwUHJveHk+
IFdlYlBhZ2VHcm91cFByb3h5OjpjcmVhdGUoY29uc3QgV2ViUGFnZUdyb3VwRGF0YSYgZGF0YSkK
K1JlZjxXZWJQYWdlR3JvdXBQcm94eT4gV2ViUGFnZUdyb3VwUHJveHk6OmNyZWF0ZShjb25zdCBX
ZWJQYWdlR3JvdXBEYXRhJiBkYXRhKQogewogICAgIGF1dG8gcGFnZUdyb3VwID0gYWRvcHRSZWYo
Km5ldyBXZWJQYWdlR3JvdXBQcm94eShkYXRhKSk7CiAKICAgICBpZiAocGFnZUdyb3VwLT5pc1Zp
c2libGVUb0luamVjdGVkQnVuZGxlKCkgJiYgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuaW5qZWN0
ZWRCdW5kbGUoKSkKICAgICAgICAgV2ViUHJvY2Vzczo6c2luZ2xldG9uKCkuaW5qZWN0ZWRCdW5k
bGUoKS0+ZGlkSW5pdGlhbGl6ZVBhZ2VHcm91cChwYWdlR3JvdXAucHRyKCkpOwogCi0gICAgcmV0
dXJuIFdURk1vdmUocGFnZUdyb3VwKTsKKyAgICByZXR1cm4gcGFnZUdyb3VwOwogfQogCiBXZWJQ
YWdlR3JvdXBQcm94eTo6V2ViUGFnZUdyb3VwUHJveHkoY29uc3QgV2ViUGFnZUdyb3VwRGF0YSYg
ZGF0YSkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlR3Jv
dXBQcm94eS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlR3JvdXBQcm94eS5oCShyZXZpc2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZUdyb3VwUHJveHkuaAkod29ya2luZyBjb3B5KQpA
QCAtMjMsMTIgKzIzLDExIEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAg
Ki8KIAotI2lmbmRlZiBXZWJQYWdlR3JvdXBQcm94eV9oCi0jZGVmaW5lIFdlYlBhZ2VHcm91cFBy
b3h5X2gKKyNwcmFnbWEgb25jZQogCiAjaW5jbHVkZSAiQVBJT2JqZWN0LmgiCiAjaW5jbHVkZSAi
V2ViUGFnZUdyb3VwRGF0YS5oIgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVmUHRyLmg+CisjaW5jbHVk
ZSA8d3RmL1JlZi5oPgogCiBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBQYWdlR3JvdXA7CkBA
IC00MCw3ICszOSw3IEBAIGNsYXNzIFdlYlVzZXJDb250ZW50Q29udHJvbGxlcjsKIAogY2xhc3Mg
V2ViUGFnZUdyb3VwUHJveHkgOiBwdWJsaWMgQVBJOjpPYmplY3RJbXBsPEFQSTo6T2JqZWN0OjpU
eXBlOjpCdW5kbGVQYWdlR3JvdXA+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxX
ZWJQYWdlR3JvdXBQcm94eT4gY3JlYXRlKGNvbnN0IFdlYlBhZ2VHcm91cERhdGEmKTsKKyAgICBz
dGF0aWMgUmVmPFdlYlBhZ2VHcm91cFByb3h5PiBjcmVhdGUoY29uc3QgV2ViUGFnZUdyb3VwRGF0
YSYpOwogICAgIHZpcnR1YWwgfldlYlBhZ2VHcm91cFByb3h5KCk7CiAKICAgICBjb25zdCBTdHJp
bmcmIGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2RhdGEuaWRlbnRpZmllcjsgfQpAQCAt
NjAsNSArNTksMyBAQCBwcml2YXRlOgogfTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViS2l0Ci0KLSNl
bmRpZiAvLyBXZWJQYWdlR3JvdXBQcm94eV9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViVW5kb1N0ZXAuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQy
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJVbmRvU3RlcC5jcHAJKHJldmlzaW9uIDIxNjQxNykKKysr
IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJVbmRvU3RlcC5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM0LDkgKzM0LDkgQEAgc3RhdGljIHVpbnQ2NF90IGdlbmVyYXRlVW5kb1N0
ZXAoKQogICAgIHJldHVybiB1bmlxdWVFbnRyeUlEKys7CiB9CiAKLVJlZjxXZWJVbmRvU3RlcD4g
V2ViVW5kb1N0ZXA6OmNyZWF0ZShQYXNzUmVmUHRyPFdlYkNvcmU6OlVuZG9TdGVwPiBzdGVwKQor
UmVmPFdlYlVuZG9TdGVwPiBXZWJVbmRvU3RlcDo6Y3JlYXRlKFJlZjxXZWJDb3JlOjpVbmRvU3Rl
cD4mJiBzdGVwKQogewotICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlVuZG9TdGVwKHN0ZXAs
IGdlbmVyYXRlVW5kb1N0ZXAoKSkpOworICAgIHJldHVybiBhZG9wdFJlZigqbmV3IFdlYlVuZG9T
dGVwKFdURk1vdmUoc3RlcCksIGdlbmVyYXRlVW5kb1N0ZXAoKSkpOwogfQogCiBXZWJVbmRvU3Rl
cDo6fldlYlVuZG9TdGVwKCkKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJVbmRvU3RlcC5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJVbmRvU3RlcC5oCShyZXZpc2lvbiAyMTY0MTcpCisrKyBTb3VyY2UvV2ViS2l0
Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViVW5kb1N0ZXAuaAkod29ya2luZyBjb3B5KQpAQCAtMjMs
MzQgKzIzLDMwIEBACiAgKiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCiAgKi8KIAot
I2lmbmRlZiBXZWJVbmRvU3RlcF9oCi0jZGVmaW5lIFdlYlVuZG9TdGVwX2gKKyNwcmFnbWEgb25j
ZQogCiAjaW5jbHVkZSA8V2ViQ29yZS9VbmRvU3RlcC5oPgotI2luY2x1ZGUgPHd0Zi9QYXNzUmVm
UHRyLmg+Ci0jaW5jbHVkZSA8d3RmL1JlZlB0ci5oPgorI2luY2x1ZGUgPHd0Zi9SZWYuaD4KIAog
bmFtZXNwYWNlIFdlYktpdCB7CiAKIGNsYXNzIFdlYlVuZG9TdGVwIDogcHVibGljIFJlZkNvdW50
ZWQ8V2ViVW5kb1N0ZXA+IHsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUmVmPFdlYlVuZG9TdGVwPiBj
cmVhdGUoUGFzc1JlZlB0cjxXZWJDb3JlOjpVbmRvU3RlcD4pOworICAgIHN0YXRpYyBSZWY8V2Vi
VW5kb1N0ZXA+IGNyZWF0ZShSZWY8V2ViQ29yZTo6VW5kb1N0ZXA+JiYpOwogICAgIH5XZWJVbmRv
U3RlcCgpOwogCi0gICAgV2ViQ29yZTo6VW5kb1N0ZXAqIHN0ZXAoKSBjb25zdCB7IHJldHVybiBt
X3N0ZXAuZ2V0KCk7IH0KKyAgICBXZWJDb3JlOjpVbmRvU3RlcCYgc3RlcCgpIGNvbnN0IHsgcmV0
dXJuIG1fc3RlcC5nZXQoKTsgfQogICAgIHVpbnQ2NF90IHN0ZXBJRCgpIGNvbnN0IHsgcmV0dXJu
IG1fc3RlcElEOyB9CiAKIHByaXZhdGU6Ci0gICAgV2ViVW5kb1N0ZXAoUGFzc1JlZlB0cjxXZWJD
b3JlOjpVbmRvU3RlcD4gc3RlcCwgdWludDY0X3Qgc3RlcElEKQotICAgICAgICA6IG1fc3RlcChz
dGVwKQorICAgIFdlYlVuZG9TdGVwKFJlZjxXZWJDb3JlOjpVbmRvU3RlcD4mJiBzdGVwLCB1aW50
NjRfdCBzdGVwSUQpCisgICAgICAgIDogbV9zdGVwKFdURk1vdmUoc3RlcCkpCiAgICAgICAgICwg
bV9zdGVwSUQoc3RlcElEKQogICAgIHsKICAgICB9CiAKLSAgICBSZWZQdHI8V2ViQ29yZTo6VW5k
b1N0ZXA+IG1fc3RlcDsKKyAgICBSZWY8V2ViQ29yZTo6VW5kb1N0ZXA+IG1fc3RlcDsKICAgICB1
aW50NjRfdCBtX3N0ZXBJRDsKIH07CiAKIH0gLy8gbmFtZXNwYWNlIFdlYktpdAotCi0jZW5kaWYg
Ly8gV2ViRWRpdENvbW1hbmRfaApJbmRleDogU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQ
YWdlL21hYy9HcmFwaGljc0xheWVyQ0FSZW1vdGUuY3BwCj09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9X
ZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvR3JhcGhpY3NMYXllckNBUmVtb3RlLmNwcAko
cmV2aXNpb24gMjE2NDE3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9XZWJQYWdlL21h
Yy9HcmFwaGljc0xheWVyQ0FSZW1vdGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OSw3ICs0OSw3
IEBAIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyPiBHcmFwaGljc0xheWUKICAgICBpZiAocmVz
dWx0LT5jYW5IYXZlQmFja2luZ1N0b3JlKCkpCiAgICAgICAgIHJlc3VsdC0+c2V0V2FudHNEZWVw
Q29sb3JCYWNraW5nU3RvcmUoc2NyZWVuU3VwcG9ydHNFeHRlbmRlZENvbG9yKCkpOwogCi0gICAg
cmV0dXJuIHJlc3VsdDsKKyAgICByZXR1cm4gV1RGTW92ZShyZXN1bHQpOwogfQogCiBQYXNzUmVm
UHRyPFBsYXRmb3JtQ0FMYXllcj4gR3JhcGhpY3NMYXllckNBUmVtb3RlOjpjcmVhdGVQbGF0Zm9y
bUNBTGF5ZXIoUGxhdGZvcm1MYXllciogcGxhdGZvcm1MYXllciwgUGxhdGZvcm1DQUxheWVyQ2xp
ZW50KiBvd25lcikKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
UGxhdGZvcm1DQUxheWVyUmVtb3RlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZS5jcHAJKHJldmlzaW9u
IDIxNjQxNykKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZv
cm1DQUxheWVyUmVtb3RlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDQsNyArNDQsNyBAQCB1c2lu
ZyBuYW1lc3BhY2UgV2ViQ29yZTsKIAogbmFtZXNwYWNlIFdlYktpdCB7CiAKLVBhc3NSZWZQdHI8
UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNyZWF0ZShMYXll
clR5cGUgbGF5ZXJUeXBlLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyLCBSZW1vdGVMYXll
clRyZWVDb250ZXh0JiBjb250ZXh0KQorUmVmPFBsYXRmb3JtQ0FMYXllclJlbW90ZT4gUGxhdGZv
cm1DQUxheWVyUmVtb3RlOjpjcmVhdGUoTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxh
eWVyQ2xpZW50KiBvd25lciwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYgY29udGV4dCkKIHsKICAg
ICBSZWZQdHI8UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBsYXllcjsKIApAQCAtNTUsMjEgKzU1LDIx
IEBAIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBQbGF0Zm8KIAogICAgIGNvbnRl
eHQubGF5ZXJXYXNDcmVhdGVkKCpsYXllciwgbGF5ZXJUeXBlKTsKIAotICAgIHJldHVybiBXVEZN
b3ZlKGxheWVyKTsKKyAgICByZXR1cm4gbGF5ZXIucmVsZWFzZU5vbk51bGwoKTsKIH0KIAotUGFz
c1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU+IFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6Y3Jl
YXRlKFBsYXRmb3JtTGF5ZXIgKnBsYXRmb3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCog
b3duZXIsIFJlbW90ZUxheWVyVHJlZUNvbnRleHQmIGNvbnRleHQpCitSZWY8UGxhdGZvcm1DQUxh
eWVyUmVtb3RlPiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNyZWF0ZShQbGF0Zm9ybUxheWVyICpw
bGF0Zm9ybUxheWVyLCBQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqIG93bmVyLCBSZW1vdGVMYXllclRy
ZWVDb250ZXh0JiBjb250ZXh0KQogewogICAgIHJldHVybiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVD
dXN0b206OmNyZWF0ZShwbGF0Zm9ybUxheWVyLCBvd25lciwgY29udGV4dCk7CiB9CiAKLVBhc3NS
ZWZQdHI8UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNyZWF0
ZShjb25zdCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUmIG90aGVyLCBXZWJDb3JlOjpQbGF0Zm9ybUNB
TGF5ZXJDbGllbnQqIG93bmVyLCBSZW1vdGVMYXllclRyZWVDb250ZXh0JiBjb250ZXh0KQorUmVm
PFBsYXRmb3JtQ0FMYXllclJlbW90ZT4gUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpjcmVhdGUoY29u
c3QgUGxhdGZvcm1DQUxheWVyUmVtb3RlJiBvdGhlciwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVy
Q2xpZW50KiBvd25lciwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYgY29udGV4dCkKIHsKICAgICBh
dXRvIGxheWVyID0gYWRvcHRSZWYoKm5ldyBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUob3RoZXIsIG93
bmVyLCBjb250ZXh0KSk7CiAKICAgICBjb250ZXh0LmxheWVyV2FzQ3JlYXRlZChsYXllci5nZXQo
KSwgb3RoZXIubGF5ZXJUeXBlKCkpOwogCi0gICAgcmV0dXJuIFdURk1vdmUobGF5ZXIpOworICAg
IHJldHVybiBsYXllcjsKIH0KIAogUGxhdGZvcm1DQUxheWVyUmVtb3RlOjpQbGF0Zm9ybUNBTGF5
ZXJSZW1vdGUoTGF5ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25l
ciwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYgY29udGV4dCkKQEAgLTg5LDExICs4OSwxMSBAQCBQ
bGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OlBsYXRmb3JtQ0FMYXllclJlCiB7CiB9CiAKLVBhc3NSZWZQ
dHI8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNsb25lKFBsYXRmb3Jt
Q0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0CitSZWY8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9y
bUNBTGF5ZXJSZW1vdGU6OmNsb25lKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0
CiB7CiAgICAgYXV0byBjbG9uZSA9IFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6Y3JlYXRlKCp0aGlz
LCBvd25lciwgKm1fY29udGV4dCk7CiAKLSAgICB1cGRhdGVDbG9uZWRMYXllclByb3BlcnRpZXMo
KmNsb25lKTsKKyAgICB1cGRhdGVDbG9uZWRMYXllclByb3BlcnRpZXMoY2xvbmUpOwogCiAgICAg
Y2xvbmUtPnNldENsb25lZExheWVyKHRoaXMpOwogICAgIHJldHVybiBXVEZNb3ZlKGNsb25lKTsK
QEAgLTM1Nyw3ICszNTcsNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6cmVtb3ZlQW5p
bWF0CiAgICAgbV9wcm9wZXJ0aWVzLm5vdGVQcm9wZXJ0aWVzQ2hhbmdlZChSZW1vdGVMYXllclRy
ZWVUcmFuc2FjdGlvbjo6QW5pbWF0aW9uc0NoYW5nZWQpOwogfQogCi1QYXNzUmVmUHRyPFBsYXRm
b3JtQ0FBbmltYXRpb24+IFBsYXRmb3JtQ0FMYXllclJlbW90ZTo6YW5pbWF0aW9uRm9yS2V5KGNv
bnN0IFN0cmluZyYga2V5KQorUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IFBsYXRmb3JtQ0FM
YXllclJlbW90ZTo6YW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5KQogewogICAgIHJl
dHVybiBtX2FuaW1hdGlvbnMuZ2V0KGtleSk7CiB9CkBAIC04MjEsNyArODIxLDcgQEAgdm9pZCBQ
bGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OnVwZGF0ZUN1c3RvbQogICAgIG1fcHJvcGVydGllcy5ub3Rl
UHJvcGVydGllc0NoYW5nZWQoUmVtb3RlTGF5ZXJUcmVlVHJhbnNhY3Rpb246OkN1c3RvbUFwcGVh
cmFuY2VDaGFuZ2VkKTsKIH0KIAotUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXI+IFBsYXRmb3Jt
Q0FMYXllclJlbW90ZTo6Y3JlYXRlQ29tcGF0aWJsZUxheWVyKFBsYXRmb3JtQ0FMYXllcjo6TGF5
ZXJUeXBlIGxheWVyVHlwZSwgUGxhdGZvcm1DQUxheWVyQ2xpZW50KiBjbGllbnQpIGNvbnN0CitS
ZWY8UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU6OmNyZWF0ZUNvbXBhdGli
bGVMYXllcihQbGF0Zm9ybUNBTGF5ZXI6OkxheWVyVHlwZSBsYXllclR5cGUsIFBsYXRmb3JtQ0FM
YXllckNsaWVudCogY2xpZW50KSBjb25zdAogewogICAgIHJldHVybiBQbGF0Zm9ybUNBTGF5ZXJS
ZW1vdGU6OmNyZWF0ZShsYXllclR5cGUsIGNsaWVudCwgKm1fY29udGV4dCk7CiB9CkluZGV4OiBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90
ZS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMv
UGxhdGZvcm1DQUxheWVyUmVtb3RlLmgJKHJldmlzaW9uIDIxNjQxNykKKysrIFNvdXJjZS9XZWJL
aXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlLmgJKHdvcmtp
bmcgY29weSkKQEAgLTM5LDkgKzM5LDkgQEAgY2xhc3MgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dDsK
IAogY2xhc3MgUGxhdGZvcm1DQUxheWVyUmVtb3RlIDogcHVibGljIFdlYkNvcmU6OlBsYXRmb3Jt
Q0FMYXllciB7CiBwdWJsaWM6Ci0gICAgc3RhdGljIFBhc3NSZWZQdHI8UGxhdGZvcm1DQUxheWVy
UmVtb3RlPiBjcmVhdGUoV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGUsIFdlYkNv
cmU6OlBsYXRmb3JtQ0FMYXllckNsaWVudCosIFJlbW90ZUxheWVyVHJlZUNvbnRleHQmKTsKLSAg
ICBzdGF0aWMgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU+IGNyZWF0ZShQbGF0Zm9y
bUxheWVyICosIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllckNsaWVudCosIFJlbW90ZUxheWVyVHJl
ZUNvbnRleHQmKTsKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU+
IGNyZWF0ZShjb25zdCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUmLCBXZWJDb3JlOjpQbGF0Zm9ybUNB
TGF5ZXJDbGllbnQqLCBSZW1vdGVMYXllclRyZWVDb250ZXh0Jik7CisgICAgc3RhdGljIFJlZjxQ
bGF0Zm9ybUNBTGF5ZXJSZW1vdGU+IGNyZWF0ZShXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI6Okxh
eWVyVHlwZSwgV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50KiwgUmVtb3RlTGF5ZXJUcmVl
Q29udGV4dCYpOworICAgIHN0YXRpYyBSZWY8UGxhdGZvcm1DQUxheWVyUmVtb3RlPiBjcmVhdGUo
UGxhdGZvcm1MYXllciAqLCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqLCBSZW1vdGVM
YXllclRyZWVDb250ZXh0Jik7CisgICAgc3RhdGljIFJlZjxQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU+
IGNyZWF0ZShjb25zdCBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUmLCBXZWJDb3JlOjpQbGF0Zm9ybUNB
TGF5ZXJDbGllbnQqLCBSZW1vdGVMYXllclRyZWVDb250ZXh0Jik7CiAKICAgICB2aXJ0dWFsIH5Q
bGF0Zm9ybUNBTGF5ZXJSZW1vdGUoKTsKIApAQCAtNjYsNyArNjYsNyBAQCBwdWJsaWM6CiAKICAg
ICB2b2lkIGFkZEFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSwgV2ViQ29yZTo6UGxh
dGZvcm1DQUFuaW1hdGlvbiYpIG92ZXJyaWRlOwogICAgIHZvaWQgcmVtb3ZlQW5pbWF0aW9uRm9y
S2V5KGNvbnN0IFN0cmluZyYga2V5KSBvdmVycmlkZTsKLSAgICBQYXNzUmVmUHRyPFdlYkNvcmU6
OlBsYXRmb3JtQ0FBbmltYXRpb24+IGFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkg
b3ZlcnJpZGU7CisgICAgUmVmUHRyPFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb24+IGFuaW1h
dGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBhbmltYXRp
b25TdGFydGVkKGNvbnN0IFN0cmluZyYga2V5LCBDRlRpbWVJbnRlcnZhbCBiZWdpblRpbWUpIG92
ZXJyaWRlOwogICAgIHZvaWQgYW5pbWF0aW9uRW5kZWQoY29uc3QgU3RyaW5nJiBrZXkpIG92ZXJy
aWRlOwogCkBAIC0xNzUsOSArMTc1LDkgQEAgcHVibGljOgogCiAgICAgV2ViQ29yZTo6VGlsZWRC
YWNraW5nKiB0aWxlZEJhY2tpbmcoKSBvdmVycmlkZSB7IHJldHVybiBudWxscHRyOyB9CiAKLSAg
ICBQYXNzUmVmUHRyPFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcj4gY2xvbmUoV2ViQ29yZTo6UGxh
dGZvcm1DQUxheWVyQ2xpZW50KiBvd25lcikgY29uc3Qgb3ZlcnJpZGU7CisgICAgUmVmPFdlYkNv
cmU6OlBsYXRmb3JtQ0FMYXllcj4gY2xvbmUoV2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyQ2xpZW50
KiBvd25lcikgY29uc3Qgb3ZlcnJpZGU7CiAKLSAgICBQYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXll
cj4gY3JlYXRlQ29tcGF0aWJsZUxheWVyKFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllcjo6TGF5ZXJU
eXBlLCBXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJDbGllbnQqKSBjb25zdCBvdmVycmlkZTsKKyAg
ICBSZWY8UGxhdGZvcm1DQUxheWVyPiBjcmVhdGVDb21wYXRpYmxlTGF5ZXIoV2ViQ29yZTo6UGxh
dGZvcm1DQUxheWVyOjpMYXllclR5cGUsIFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllckNsaWVudCop
IGNvbnN0IG92ZXJyaWRlOwogCiAgICAgdm9pZCBlbnVtZXJhdGVSZWN0c0JlaW5nRHJhd24oQ0dD
b250ZXh0UmVmLCB2b2lkICheYmxvY2spKENHUmVjdCkpIG92ZXJyaWRlOwogCkluZGV4OiBTb3Vy
Y2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZUN1
c3RvbS5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9t
YWMvUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tLmgJKHJldmlzaW9uIDIxNjQxNykKKysrIFNv
dXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvV2ViUGFnZS9tYWMvUGxhdGZvcm1DQUxheWVyUmVtb3Rl
Q3VzdG9tLmgJKHdvcmtpbmcgY29weSkKQEAgLTIzLDggKzIzLDcgQEAKICAqIE9GIFRISVMgU09G
VFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0Uu
CiAgKi8KIAotI2lmbmRlZiBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b21faAotI2RlZmluZSBQ
bGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b21faAorI3ByYWdtYSBvbmNlCiAKICNpbmNsdWRlICJQ
bGF0Zm9ybUNBTGF5ZXJSZW1vdGUuaCIKIApAQCAtMzYsNyArMzUsNyBAQCBjbGFzcyBMYXllckhv
c3RpbmdDb250ZXh0OwogY2xhc3MgUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tIGZpbmFsIDog
cHVibGljIFBsYXRmb3JtQ0FMYXllclJlbW90ZSB7CiAgICAgZnJpZW5kIGNsYXNzIFBsYXRmb3Jt
Q0FMYXllclJlbW90ZTsKIHB1YmxpYzoKLSAgICBzdGF0aWMgUGFzc1JlZlB0cjxQbGF0Zm9ybUNB
TGF5ZXJSZW1vdGU+IGNyZWF0ZShQbGF0Zm9ybUxheWVyICosIFdlYkNvcmU6OlBsYXRmb3JtQ0FM
YXllckNsaWVudCosIFJlbW90ZUxheWVyVHJlZUNvbnRleHQmKTsKKyAgICBzdGF0aWMgUmVmPFBs
YXRmb3JtQ0FMYXllclJlbW90ZT4gY3JlYXRlKFBsYXRmb3JtTGF5ZXIgKiwgV2ViQ29yZTo6UGxh
dGZvcm1DQUxheWVyQ2xpZW50KiwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYpOwogCiAgICAgdmly
dHVhbCB+UGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tKCk7CiAKQEAgLTUwLDcgKzQ5LDcgQEAg
cHVibGljOgogcHJpdmF0ZToKICAgICBQbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20oV2ViQ29y
ZTo6UGxhdGZvcm1DQUxheWVyOjpMYXllclR5cGUsIFBsYXRmb3JtTGF5ZXIgKiwgV2ViQ29yZTo6
UGxhdGZvcm1DQUxheWVyQ2xpZW50KiBvd25lciwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYpOwog
Ci0gICAgUGFzc1JlZlB0cjxXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI+IGNsb25lKFdlYkNvcmU6
OlBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0IG92ZXJyaWRlOworICAgIFJlZjxX
ZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXI+IGNsb25lKFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllckNs
aWVudCogb3duZXIpIGNvbnN0IG92ZXJyaWRlOwogCiAgICAgYm9vbCBpc1BsYXRmb3JtQ0FMYXll
clJlbW90ZUN1c3RvbSgpIGNvbnN0IG92ZXJyaWRlIHsgcmV0dXJuIHRydWU7IH0KIApAQCAtNjUs
NSArNjQsMyBAQCBwcml2YXRlOgogfSAvLyBuYW1lc3BhY2UgV2ViS2l0CiAKIFNQRUNJQUxJWkVf
VFlQRV9UUkFJVFNfUExBVEZPUk1fQ0FMQVlFUihXZWJLaXQ6OlBsYXRmb3JtQ0FMYXllclJlbW90
ZUN1c3RvbSwgaXNQbGF0Zm9ybUNBTGF5ZXJSZW1vdGUoKSkKLQotI2VuZGlmIC8vIFBsYXRmb3Jt
Q0FMYXllclJlbW90ZUN1c3RvbV9oCkluZGV4OiBTb3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dl
YlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbS5tbQo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViS2l0Mi9XZWJQcm9jZXNzL1dlYlBhZ2UvbWFjL1BsYXRmb3JtQ0FMYXllclJlbW90
ZUN1c3RvbS5tbQkocmV2aXNpb24gMjE2NDE3KQorKysgU291cmNlL1dlYktpdDIvV2ViUHJvY2Vz
cy9XZWJQYWdlL21hYy9QbGF0Zm9ybUNBTGF5ZXJSZW1vdGVDdXN0b20ubW0JKHdvcmtpbmcgY29w
eSkKQEAgLTQ2LDExICs0NiwxMCBAQCBuYW1lc3BhY2UgV2ViS2l0IHsKIAogc3RhdGljIE5TU3Ry
aW5nICogY29uc3QgcGxhdGZvcm1DQUxheWVyUG9pbnRlciA9IEAiV0tQbGF0Zm9ybUNBTGF5ZXIi
OwogCi1QYXNzUmVmUHRyPFBsYXRmb3JtQ0FMYXllclJlbW90ZT4gUGxhdGZvcm1DQUxheWVyUmVt
b3RlQ3VzdG9tOjpjcmVhdGUoUGxhdGZvcm1MYXllciAqcGxhdGZvcm1MYXllciwgUGxhdGZvcm1D
QUxheWVyQ2xpZW50KiBvd25lciwgUmVtb3RlTGF5ZXJUcmVlQ29udGV4dCYgY29udGV4dCkKK1Jl
ZjxQbGF0Zm9ybUNBTGF5ZXJSZW1vdGU+IFBsYXRmb3JtQ0FMYXllclJlbW90ZUN1c3RvbTo6Y3Jl
YXRlKFBsYXRmb3JtTGF5ZXIgKnBsYXRmb3JtTGF5ZXIsIFBsYXRmb3JtQ0FMYXllckNsaWVudCog
b3duZXIsIFJlbW90ZUxheWVyVHJlZUNvbnRleHQmIGNvbnRleHQpCiB7CiAgICAgYXV0byBsYXll
ciA9IGFkb3B0UmVmKCpuZXcgUGxhdGZvcm1DQUxheWVyUmVtb3RlQ3VzdG9tKFBsYXRmb3JtQ0FM
YXllckNvY29hOjpsYXllclR5cGVGb3JQbGF0Zm9ybUxheWVyKHBsYXRmb3JtTGF5ZXIpLCBwbGF0
Zm9ybUxheWVyLCBvd25lciwgY29udGV4dCkpOwogICAgIGNvbnRleHQubGF5ZXJXYXNDcmVhdGVk
KGxheWVyLmdldCgpLCBsYXllci0+bGF5ZXJUeXBlKCkpOwotCiAgICAgcmV0dXJuIFdURk1vdmUo
bGF5ZXIpOwogfQogCkBAIC0xMDAsNyArOTksNyBAQCB1aW50MzJfdCBQbGF0Zm9ybUNBTGF5ZXJS
ZW1vdGVDdXN0b206OmhvCiAgICAgcmV0dXJuIG1fbGF5ZXJIb3N0aW5nQ29udGV4dC0+Y29udGV4
dElEKCk7CiB9CiAKLVBhc3NSZWZQdHI8V2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9y
bUNBTGF5ZXJSZW1vdGVDdXN0b206OmNsb25lKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIp
IGNvbnN0CitSZWY8V2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyPiBQbGF0Zm9ybUNBTGF5ZXJSZW1v
dGVDdXN0b206OmNsb25lKFBsYXRmb3JtQ0FMYXllckNsaWVudCogb3duZXIpIGNvbnN0CiB7CiAg
ICAgUmV0YWluUHRyPENBTGF5ZXIgKj4gY2xvbmVkTGF5ZXI7CiAgICAgYm9vbCBjb3B5Q29udGVu
dHMgPSB0cnVlOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>