<?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>177700</bug_id>
          
          <creation_ts>2017-09-29 20:21:19 -0700</creation_ts>
          <short_desc>Share more pasteboard code between iOS and macOS and remove dependency on Settings</short_desc>
          <delta_ts>2017-09-30 03:34:30 -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>HTML Editing</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>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Ryosuke Niwa">rniwa</reporter>
          <assigned_to name="Ryosuke Niwa">rniwa</assigned_to>
          <cc>buildbot</cc>
    
    <cc>cdumez</cc>
    
    <cc>commit-queue</cc>
    
    <cc>darin</cc>
    
    <cc>dbates</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>kangil.han</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1354833</commentid>
    <comment_count>0</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-09-29 20:21:19 -0700</bug_when>
    <thetext>Now that we&apos;ve added PasteboardCocoa.mm in https://trac.webkit.org/r222656,
we can share more code between iOS and macOS.

Also, we remove the layering violation inadvertently introduced in https://trac.webkit.org/r222595
whereby which Pasteboard code depends on Settings.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354852</commentid>
    <comment_count>1</comment_count>
      <attachid>322277</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-09-29 21:35:54 -0700</bug_when>
    <thetext>Created attachment 322277
Cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354855</commentid>
    <comment_count>2</comment_count>
      <attachid>322279</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-09-29 21:48:00 -0700</bug_when>
    <thetext>Created attachment 322279
Cleanup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354863</commentid>
    <comment_count>3</comment_count>
      <attachid>322279</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-09-29 22:29:11 -0700</bug_when>
    <thetext>Comment on attachment 322279
Cleanup

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

&gt; Source/WebCore/dom/DataTransfer.cpp:146
&gt; +    if (Settings::customPasteboardDataEnabled() &amp;&amp; !Pasteboard::isSafeTypeForDOMToReadAndWrite(type))

Shouldn&apos;t this be !Pasteboard::isSafeTypeForDOMToReadAndWrite(normalizedType) here? (instead of the non-normalized type)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354866</commentid>
    <comment_count>4</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-09-29 23:09:36 -0700</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #3)
&gt; Comment on attachment 322279 [details]
&gt; Cleanup
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=322279&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/dom/DataTransfer.cpp:146
&gt; &gt; +    if (Settings::customPasteboardDataEnabled() &amp;&amp; !Pasteboard::isSafeTypeForDOMToReadAndWrite(type))
&gt; 
&gt; Shouldn&apos;t this be
&gt; !Pasteboard::isSafeTypeForDOMToReadAndWrite(normalizedType) here? (instead
&gt; of the non-normalized type)

Let&apos;s augment editing/pasteboard/data-transfer-get-data-on-drop-custom.html so that instead of writing &quot;text/plain&quot;, we try to write &quot;Text&quot; so that we have test coverage for this codepath where type normalization matters.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354880</commentid>
    <comment_count>5</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-09-30 01:42:58 -0700</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #4)
&gt; (In reply to Wenson Hsieh from comment #3)
&gt; &gt; Comment on attachment 322279 [details]
&gt; &gt; Cleanup
&gt; &gt; 
&gt; &gt; View in context:
&gt; &gt; https://bugs.webkit.org/attachment.cgi?id=322279&amp;action=review
&gt; &gt; 
&gt; &gt; &gt; Source/WebCore/dom/DataTransfer.cpp:146
&gt; &gt; &gt; +    if (Settings::customPasteboardDataEnabled() &amp;&amp; !Pasteboard::isSafeTypeForDOMToReadAndWrite(type))
&gt; &gt; 
&gt; &gt; Shouldn&apos;t this be
&gt; &gt; !Pasteboard::isSafeTypeForDOMToReadAndWrite(normalizedType) here? (instead
&gt; &gt; of the non-normalized type)
&gt; 
&gt; Let&apos;s augment editing/pasteboard/data-transfer-get-data-on-drop-custom.html
&gt; so that instead of writing &quot;text/plain&quot;, we try to write &quot;Text&quot; so that we
&gt; have test coverage for this codepath where type normalization matters.

That&apos;s not going to quite work because this is a bug in getData, not setData. We need to write a new test for this.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354882</commentid>
    <comment_count>6</comment_count>
      <attachid>322288</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-09-30 01:49:39 -0700</bug_when>
    <thetext>Created attachment 322288
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354883</commentid>
    <comment_count>7</comment_count>
      <attachid>322288</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-09-30 01:49:56 -0700</bug_when>
    <thetext>Comment on attachment 322288
Patch for landing

Wait for EWS.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354884</commentid>
    <comment_count>8</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2017-09-30 01:51:09 -0700</bug_when>
    <thetext>(In reply to Ryosuke Niwa from comment #5)
&gt; (In reply to Wenson Hsieh from comment #4)
&gt; &gt; (In reply to Wenson Hsieh from comment #3)
&gt; &gt; &gt; Comment on attachment 322279 [details]
&gt; &gt; &gt; Cleanup
&gt; &gt; &gt; 
&gt; &gt; &gt; View in context:
&gt; &gt; &gt; https://bugs.webkit.org/attachment.cgi?id=322279&amp;action=review
&gt; &gt; &gt; 
&gt; &gt; &gt; &gt; Source/WebCore/dom/DataTransfer.cpp:146
&gt; &gt; &gt; &gt; +    if (Settings::customPasteboardDataEnabled() &amp;&amp; !Pasteboard::isSafeTypeForDOMToReadAndWrite(type))
&gt; &gt; &gt; 
&gt; &gt; &gt; Shouldn&apos;t this be
&gt; &gt; &gt; !Pasteboard::isSafeTypeForDOMToReadAndWrite(normalizedType) here? (instead
&gt; &gt; &gt; of the non-normalized type)
&gt; &gt; 
&gt; &gt; Let&apos;s augment editing/pasteboard/data-transfer-get-data-on-drop-custom.html
&gt; &gt; so that instead of writing &quot;text/plain&quot;, we try to write &quot;Text&quot; so that we
&gt; &gt; have test coverage for this codepath where type normalization matters.
&gt; 
&gt; That&apos;s not going to quite work because this is a bug in getData, not
&gt; setData. We need to write a new test for this.

Oh, true.

I suppose the new test could exercise both setData/getData with non-normalized versions of text/plain, text/html and text/uri-list and make sure that we can write and read these types from DOM (and also use internals.settings.setCustomPasteboardDataEnabled(true)). I can add this in a followup.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354885</commentid>
    <comment_count>9</comment_count>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-09-30 01:52:35 -0700</bug_when>
    <thetext>(In reply to Wenson Hsieh from comment #8)
&gt;
&gt; I suppose the new test could exercise both setData/getData with
&gt; non-normalized versions of text/plain, text/html and text/uri-list and make
&gt; sure that we can write and read these types from DOM (and also use
&gt; internals.settings.setCustomPasteboardDataEnabled(true)). I can add this in
&gt; a followup.

Sure, feel free to write a test if you&apos;d like. If not, I can write one as well.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354886</commentid>
    <comment_count>10</comment_count>
      <attachid>322289</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-09-30 01:58:09 -0700</bug_when>
    <thetext>Created attachment 322289
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354887</commentid>
    <comment_count>11</comment_count>
      <attachid>322289</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-09-30 01:58:26 -0700</bug_when>
    <thetext>Comment on attachment 322289
Patch for landing

Wait for EWS (after WPE builds).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354888</commentid>
    <comment_count>12</comment_count>
      <attachid>322290</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-09-30 02:02:23 -0700</bug_when>
    <thetext>Created attachment 322290
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354889</commentid>
    <comment_count>13</comment_count>
      <attachid>322290</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-09-30 02:02:40 -0700</bug_when>
    <thetext>Comment on attachment 322290
Patch for landing

Wait for WPE EWS again...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354896</commentid>
    <comment_count>14</comment_count>
      <attachid>322293</attachid>
    <who name="Ryosuke Niwa">rniwa</who>
    <bug_when>2017-09-30 02:32:23 -0700</bug_when>
    <thetext>Created attachment 322293
Fixed Mac builds</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354897</commentid>
    <comment_count>15</comment_count>
      <attachid>322293</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-30 03:31:08 -0700</bug_when>
    <thetext>Comment on attachment 322293
Fixed Mac builds

Clearing flags on attachment: 322293

Committed r222680: &lt;http://trac.webkit.org/changeset/222680&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354898</commentid>
    <comment_count>16</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2017-09-30 03:31:10 -0700</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1354899</commentid>
    <comment_count>17</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2017-09-30 03:34:30 -0700</bug_when>
    <thetext>&lt;rdar://problem/34754897&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322277</attachid>
            <date>2017-09-29 21:35:54 -0700</date>
            <delta_ts>2017-09-29 21:47:58 -0700</delta_ts>
            <desc>Cleanup</desc>
            <filename>bug-177700-20170929213553.patch</filename>
            <type>text/plain</type>
            <size>27514</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDIyMjY3NikKKysrIFNvdXJjZS9XZWJDb3JlL0NoYW5n
ZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc0IEBACisyMDE3LTA5LTI5ICBSeW9zdWtl
IE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFNoYXJlIG1vcmUgcGFzdGVib2Fy
ZCBjb2RlIGJldHdlZW4gaU9TIGFuZCBtYWNPUyBhbmQgcmVtb3ZlIGRlcGVuZGVuY3kgb24gU2V0
dGluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE3
NzcwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIE1v
dmVkIG1vcmUgY29kZSBmcm9tIFBhc3RlYm9hcmRJT1MubW0gYW5kIFBhc3RlYm9hcmRNYWMubW0g
aW50byBQYXN0ZWJvYXJkQ29jb2EubW0gdG8gc2hhcmUgY29kZS4KKworICAgICAgICBUaGlzIHBh
dGNoIGFsc28gcmVtb3ZlcyB0aGUgbGF5ZXJpbmcgdmlvbGF0aW9uIGluYWR2ZXJ0ZW50bHkgaW50
cm9kdWNlZCBpbiByMjIyNTk1IHdoZXJlYnkgd2hpY2gKKyAgICAgICAgUGFzdGVib2FyZCBjb2Rl
IGRlcGVuZHMgb24gU2V0dGluZ3MuIFRvIGRvIHRoaXMsIHRoaXMgcGF0Y2ggc3BsaXRzIHJlYWRT
dHJpbmdGb3JCaW5kaW5ncyBpcyBpbnRvCisgICAgICAgIHJlYWRTdHJpbmcgYW5kIHJlYWRTdHJp
bmdJbkN1c3RvbURhdGEgYW5kIHR5cGVzRm9yQmluZGluZ3MgaW50byB0eXBlc1NhZmVGb3JCaW5k
aW5ncyBhbmQKKyAgICAgICAgdHlwZXNGb3JMZWdhY3lVbnNhZmVCaW5kaW5ncywgYW5kIG1vdmVz
IHRoZSBsb2dpYyB0byBkZWNpZGUgd2hldGhlciBhIGdpdmVuIHR5cGUgb3Igc3RyaW5nIGlzIHJl
YWQKKyAgICAgICAgb2ZmIG9mIHRoZSBuYXRpdmUgcGFzdGVib2FyZCBlbnRyeSBvciBvdXIgY3Vz
dG9tIGRhdGEgZW50cnkgaXMgbW92ZWQgdG8gRGF0YVRyYW5zZmVyLgorCisgICAgICAgIE5vIG5l
dyB0ZXN0cyBzaW5jZSB0aGVyZSBzaG91bGQgYmUgbm8gYmVoYXZpb3JhbCBjaGFuZ2UuCisKKyAg
ICAgICAgKiBkb20vRGF0YVRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFUcmFu
c2Zlcjo6Z2V0RGF0YSBjb25zdCk6IE1vdmVkIHRoZSBjb2RlIHRvIGRlY2lkZSB3aGV0aGVyIHN0
cmluZyBpcworICAgICAgICByZWFkIG9mZiBvZiBjdXN0b20gZGF0YSBvciBuYXRpdmUgcGFzdGVi
b2FyZCBmcm9tIHJlYWRTdHJpbmdGb3JCaW5kaW5ncy4KKyAgICAgICAgKFdlYkNvcmU6OkRhdGFU
cmFuc2Zlcjo6dHlwZXMgY29uc3QpOiBEaXR0byBmcm9tIHR5cGVzRm9yQmluZGluZ3MuCisgICAg
ICAgICogcGxhdGZvcm0vUGFzdGVib2FyZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJv
YXJkOjppc1NhZmVUeXBlRm9yRE9NVG9SZWFkQW5kV3JpdGUpOiBNb3ZlZCBpbnRvIFBhc3RlYm9h
cmQuCisgICAgICAgICogcGxhdGZvcm0vUGFzdGVib2FyZC5oOgorICAgICAgICAqIHBsYXRmb3Jt
L1N0YXRpY1Bhc3RlYm9hcmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RhdGljUGFzdGVib2Fy
ZDo6cmVhZFN0cmluZyk6IFJlbmFtZWQgZnJvbSByZWFkU3RyaW5nRm9yQmluZGluZ3MuCisgICAg
ICAgIChXZWJDb3JlOjpTdGF0aWNQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nSW5DdXN0b21EYXRhKTog
QWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTdGF0aWNQYXN0ZWJvYXJkOjp3cml0ZVN0cmluZyk6
CisgICAgICAgICogcGxhdGZvcm0vU3RhdGljUGFzdGVib2FyZC5oOgorICAgICAgICAqIHBsYXRm
b3JtL2NvY29hL1Bhc3RlYm9hcmRDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9h
cmQ6OnR5cGVzU2FmZUZvckJpbmRpbmdzKTogRXh0cmFjdGVkIG91dCBvZiB0eXBlc0ZvckJpbmRp
bmdzIGluIFBhc3RlYm9hcmRJT1MubW0KKyAgICAgICAgYW5kIFBhc3RlYm9hcmRNYWMubW0uCisg
ICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp0eXBlc0ZvckxlZ2FjeVVuc2FmZUJpbmRpbmdz
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nKTogRGl0
dG8uCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nSW5DdXN0b21EYXRh
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZUN1c3RvbURhdGEp
OiBNb3ZlZCBoZXJlIGZyb20gUGFzdGVib2FyZElPUy5tbSBhbmQgUGFzdGVib2FyZENvY29hLm1t
LgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6Y2hhbmdlQ291bnQgY29uc3QpOiBEaXR0
by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHA6CisgICAgICAgIChX
ZWJDb3JlOjpQYXN0ZWJvYXJkOjp0eXBlc0ZvckJpbmRpbmdzKTogQWRkZWQuCisgICAgICAgIChX
ZWJDb3JlOjpQYXN0ZWJvYXJkOjp0eXBlc0ZvckxlZ2FjeVVuc2FmZUJpbmRpbmdzKTogUmVuYW1l
ZCBmcm9tIHJlYWRTdHJpbmdGb3JCaW5kaW5ncy4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9h
cmQ6OnJlYWRTdHJpbmcpOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZFN0cmlu
Z0luQ3VzdG9tRGF0YSk6IEFkZGVkLgorICAgICAgICAqIHBsYXRmb3JtL2lvcy9QYXN0ZWJvYXJk
SU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVDdXN0b21EYXRhKTog
TW92ZWQgdG8gUGFzdGVib2FyZENvY29hLm1tLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2Fy
ZDo6Y2hhbmdlQ291bnQgY29uc3QpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9h
cmQ6OnJlYWRQbGF0Zm9ybVZhbHVlQXNTdHJpbmcpOiBNb3ZlZCBpbnRvIFBhc3RlYm9hcmQuCisg
ICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjphZGRIVE1MQ2xpcGJvYXJkVHlwZXNGb3JDb2Nv
YVR5cGUpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWRTdHJpbmdG
b3JCaW5kaW5ncyk6IE1vdmVkIHRvIFBhc3RlYm9hcmRDb2NvYS5tbS4KKyAgICAgICAgKFdlYkNv
cmU6OlBhc3RlYm9hcmQ6OnR5cGVzRm9yQmluZGluZ3MpOiBEaXR0by4KKyAgICAgICAgKiBwbGF0
Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1QYXN0ZWJvYXJkOjp0eXBlc1NhZmVGb3JET01Ub1JlYWRBbmRXcml0ZSBjb25zdCk6Cisg
ICAgICAgICogcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW06CisgICAgICAgIChXZWJDb3Jl
OjpQYXN0ZWJvYXJkOjpjaGFuZ2VDb3VudCBjb25zdCk6IE1vdmVkIHRvIFBhc3RlYm9hcmRDb2Nv
YS5tbS4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlQ3VzdG9tRGF0YSk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZFBsYXRmb3JtVmFsdWVBc1N0
cmluZyk6IE1vdmVkIGludG8gUGFzdGVib2FyZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9h
cmQ6OnJlYWRTdHJpbmdGb3JCaW5kaW5ncyk6IE1vdmVkIHRvIFBhc3RlYm9hcmRDb2NvYS5tbS4K
KyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmFkZEhUTUxDbGlwYm9hcmRUeXBlc0ZvckNv
Y29hVHlwZSk6IE1vdmVkIGludG8gUGFzdGVib2FyZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3Rl
Ym9hcmQ6OnR5cGVzRm9yQmluZGluZ3MpOiBNb3ZlZCB0byBQYXN0ZWJvYXJkQ29jb2EubW0uCisg
ICAgICAgICogcGxhdGZvcm0vbWFjL1BsYXRmb3JtUGFzdGVib2FyZE1hYy5tbToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtUGFzdGVib2FyZDo6dHlwZXNTYWZlRm9yRE9NVG9SZWFkQW5kV3Jp
dGUgY29uc3QpOgorICAgICAgICAqIHBsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcDoKKyAg
ICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnR5cGVzRm9yQmluZGluZ3MpOiBBZGRlZC4KKyAg
ICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnR5cGVzRm9yTGVnYWN5VW5zYWZlQmluZGluZ3Mp
OiBSZW5hbWVkIGZyb20gcmVhZFN0cmluZ0ZvckJpbmRpbmdzLgorICAgICAgICAoV2ViQ29yZTo6
UGFzdGVib2FyZDo6cmVhZFN0cmluZyk6IFJlbmFtZWQgZnJvbSByZWFkU3RyaW5nRm9yQmluZGlu
Z3MuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nSW5DdXN0b21EYXRh
KTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vd3BlL1Bhc3RlYm9hcmRXUEUuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6dHlwZXNGb3JCaW5kaW5ncyk6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZHR5cGVzRm9yTGVnYWN5VW5zYWZlQmluZGluZ3MpOiBS
ZW5hbWVkIGZyb20gcmVhZFN0cmluZ0ZvckJpbmRpbmdzLgorICAgICAgICAoV2ViQ29yZTo6UGFz
dGVib2FyZDo6cmVhZFN0cmluZyk6IFJlbmFtZWQgZnJvbSByZWFkU3RyaW5nRm9yQmluZGluZ3Mu
CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nSW5DdXN0b21EYXRhKTog
QWRkZWQuCisKIDIwMTctMDktMjkgIENocmlzIER1bWV6ICA8Y2R1bWV6QGFwcGxlLmNvbT4KIAog
ICAgICAgICBodHRwL3Rlc3RzL3ByZWNvbm5lY3QvbGluay1yZWwtcHJlY29ubmVjdC1odHRwcy5o
dG1sIGlzIGZsYWt5CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVyLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVyLmNwcAkocmV2aXNp
b24gMjIyNjU5KQorKysgU291cmNlL1dlYkNvcmUvZG9tL0RhdGFUcmFuc2Zlci5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJIVE1MSW1hZ2VFbGVtZW50Lmgi
CiAjaW5jbHVkZSAiSW1hZ2UuaCIKICNpbmNsdWRlICJQYXN0ZWJvYXJkLmgiCisjaW5jbHVkZSAi
U2V0dGluZ3MuaCIKICNpbmNsdWRlICJTdGF0aWNQYXN0ZWJvYXJkLmgiCiAjaW5jbHVkZSAiV2Vi
Q29yZVBhc3RlYm9hcmRGaWxlUmVhZGVyLmgiCiAKQEAgLTE0MSw3ICsxNDIsMTAgQEAgU3RyaW5n
IERhdGFUcmFuc2Zlcjo6Z2V0RGF0YShjb25zdCBTdHJpbgogICAgICAgICByZXR1cm4geyB9Owog
I2VuZGlmCiAKLSAgICByZXR1cm4gbV9wYXN0ZWJvYXJkLT5yZWFkU3RyaW5nRm9yQmluZGluZ3Mo
bm9ybWFsaXplVHlwZSh0eXBlKSk7CisgICAgYXV0byBub3JtYWxpemVkVHlwZSA9IG5vcm1hbGl6
ZVR5cGUodHlwZSk7CisgICAgaWYgKFNldHRpbmdzOjpjdXN0b21QYXN0ZWJvYXJkRGF0YUVuYWJs
ZWQoKSAmJiAhUGFzdGVib2FyZDo6aXNTYWZlVHlwZUZvckRPTVRvUmVhZEFuZFdyaXRlKHR5cGUp
KQorICAgICAgICByZXR1cm4gbV9wYXN0ZWJvYXJkLT5yZWFkU3RyaW5nSW5DdXN0b21EYXRhKG5v
cm1hbGl6ZWRUeXBlKTsKKyAgICByZXR1cm4gbV9wYXN0ZWJvYXJkLT5yZWFkU3RyaW5nKG5vcm1h
bGl6ZWRUeXBlKTsKIH0KIAogdm9pZCBEYXRhVHJhbnNmZXI6OnNldERhdGEoY29uc3QgU3RyaW5n
JiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpCkBAIC0xNzIsNyArMTc2LDcgQEAgVmVjdG9yPFN0
cmluZz4gRGF0YVRyYW5zZmVyOjp0eXBlcygpIGNvbgogICAgIGlmICghY2FuUmVhZFR5cGVzKCkp
CiAgICAgICAgIHJldHVybiB7IH07CiAKLSAgICByZXR1cm4gbV9wYXN0ZWJvYXJkLT50eXBlc0Zv
ckJpbmRpbmdzKCk7CisgICAgcmV0dXJuIFNldHRpbmdzOjpjdXN0b21QYXN0ZWJvYXJkRGF0YUVu
YWJsZWQoKSA/IG1fcGFzdGVib2FyZC0+dHlwZXNTYWZlRm9yQmluZGluZ3MoKSA6IG1fcGFzdGVi
b2FyZC0+dHlwZXNGb3JMZWdhY3lVbnNhZmVCaW5kaW5ncygpOwogfQogCiBGaWxlTGlzdCYgRGF0
YVRyYW5zZmVyOjpmaWxlcygpIGNvbnN0CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Q
YXN0ZWJvYXJkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0
ZWJvYXJkLmNwcAkocmV2aXNpb24gMjIyNjU5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
UGFzdGVib2FyZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM5LDcgKzM5LDcgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogUGFzdGVib2FyZEltYWdlOjpQYXN0ZWJvYXJkSW1hZ2UoKSA9IGRlZmF1bHQ7
CiBQYXN0ZWJvYXJkSW1hZ2U6On5QYXN0ZWJvYXJkSW1hZ2UoKSA9IGRlZmF1bHQ7CiAKLWJvb2wg
aXNTYWZlVHlwZUZvckRPTVRvUmVhZEFuZFdyaXRlKGNvbnN0IFN0cmluZyYgdHlwZSkKK2Jvb2wg
UGFzdGVib2FyZDo6aXNTYWZlVHlwZUZvckRPTVRvUmVhZEFuZFdyaXRlKGNvbnN0IFN0cmluZyYg
dHlwZSkKIHsKICAgICByZXR1cm4gdHlwZSA9PSAidGV4dC9wbGFpbiIgfHwgdHlwZSA9PSAidGV4
dC9odG1sIiB8fCB0eXBlID09ICJ0ZXh0L3VyaS1saXN0IjsKIH0KSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9QYXN0ZWJvYXJkLmgJKHJldmlzaW9uIDIyMjY1OSkKKysrIFNvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Bhc3RlYm9hcmQuaAkod29ya2luZyBjb3B5KQpAQCAtMjgsNiArMjgsNyBAQAog
I2luY2x1ZGUgIkRyYWdJbWFnZS5oIgogI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgPHd0Zi9I
YXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL05v
bmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0
L1dURlN0cmluZy5oPgpAQCAtMTcxLDggKzE3Miw2IEBAIFdFQkNPUkVfRVhQT1JUIFBhc3RlYm9h
cmRDdXN0b21EYXRhIGN1c3QKIGNvbnN0IGNoYXIgY3VzdG9tV2ViS2l0UGFzdGVib2FyZERhdGFU
eXBlW10gPSAiY29tLmFwcGxlLldlYktpdC5jdXN0b20tcGFzdGVib2FyZC1kYXRhIjsKICNlbmRp
ZgogCi1ib29sIGlzU2FmZVR5cGVGb3JET01Ub1JlYWRBbmRXcml0ZShjb25zdCBTdHJpbmcmIHR5
cGUpOwotCiBjbGFzcyBQYXN0ZWJvYXJkIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQYXN0
ZWJvYXJkKTsgV1RGX01BS0VfRkFTVF9BTExPQ0FURUQ7CiBwdWJsaWM6CkBAIC0xOTIsMTIgKzE5
MSwxNiBAQCBwdWJsaWM6CiAKICAgICBXRUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVf
cHRyPFBhc3RlYm9hcmQ+IGNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpOwogCisgICAgc3RhdGljIGJv
b2wgaXNTYWZlVHlwZUZvckRPTVRvUmVhZEFuZFdyaXRlKGNvbnN0IFN0cmluZyYpOworCiAgICAg
dmlydHVhbCBib29sIGlzU3RhdGljKCkgY29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZp
cnR1YWwgYm9vbCBoYXNEYXRhKCk7Ci0gICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiB0eXBlc0Zv
ckJpbmRpbmdzKCk7CisgICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiB0eXBlc1NhZmVGb3JCaW5k
aW5ncygpOworICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gdHlwZXNGb3JMZWdhY3lVbnNhZmVC
aW5kaW5ncygpOwogICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gdHlwZXNUcmVhdGVkQXNGaWxl
cygpOwotICAgIHZpcnR1YWwgU3RyaW5nIHJlYWRTdHJpbmdGb3JCaW5kaW5ncyhjb25zdCBTdHJp
bmcmIHR5cGUpOworICAgIHZpcnR1YWwgU3RyaW5nIHJlYWRTdHJpbmcoY29uc3QgU3RyaW5nJiB0
eXBlKTsKKyAgICB2aXJ0dWFsIFN0cmluZyByZWFkU3RyaW5nSW5DdXN0b21EYXRhKGNvbnN0IFN0
cmluZyYgdHlwZSk7CiAKICAgICB2aXJ0dWFsIHZvaWQgd3JpdGVTdHJpbmcoY29uc3QgU3RyaW5n
JiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpOwpA
QCAtMjc4LDYgKzI4MSw4IEBAIHByaXZhdGU6CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKENPQ09B
KQorICAgIFN0cmluZyByZWFkUGxhdGZvcm1WYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZyYgZG9t
VHlwZSwgbG9uZyBjaGFuZ2VDb3VudCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSk7Cisg
ICAgc3RhdGljIHZvaWQgYWRkSFRNTENsaXBib2FyZFR5cGVzRm9yQ29jb2FUeXBlKExpc3RIYXNo
U2V0PFN0cmluZz4mIHJlc3VsdFR5cGVzLCBjb25zdCBTdHJpbmcmIGNvY29hVHlwZSwgY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSk7CiAgICAgU3RyaW5nIHJlYWRTdHJpbmdGb3JQbGF0Zm9y
bVR5cGUoY29uc3QgU3RyaW5nJik7CiAjZW5kaWYKIApJbmRleDogU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU3RhdGljUGFzdGVib2FyZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU3RhdGljUGFzdGVib2FyZC5jcHAJKHJldmlzaW9uIDIyMjY1OSkKKysrIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1N0YXRpY1Bhc3RlYm9hcmQuY3BwCSh3b3JraW5nIGNvcHkpCkBA
IC00MCwyMCArNDAsMTkgQEAgYm9vbCBTdGF0aWNQYXN0ZWJvYXJkOjpoYXNEYXRhKCkKICAgICBy
ZXR1cm4gIW1fcGxhdGZvcm1EYXRhLmlzRW1wdHkoKSB8fCAhbV9jdXN0b21EYXRhLmlzRW1wdHko
KTsKIH0KIAotU3RyaW5nIFN0YXRpY1Bhc3RlYm9hcmQ6OnJlYWRTdHJpbmdGb3JCaW5kaW5ncyhj
b25zdCBTdHJpbmcmIHR5cGUpCitTdHJpbmcgU3RhdGljUGFzdGVib2FyZDo6cmVhZFN0cmluZyhj
b25zdCBTdHJpbmcmIHR5cGUpCiB7Ci0gICAgaWYgKG1fcGxhdGZvcm1EYXRhLmNvbnRhaW5zKHR5
cGUpKQotICAgICAgICByZXR1cm4gbV9wbGF0Zm9ybURhdGEuZ2V0KHR5cGUpOwotCi0gICAgaWYg
KG1fY3VzdG9tRGF0YS5jb250YWlucyh0eXBlKSkKLSAgICAgICAgcmV0dXJuIG1fY3VzdG9tRGF0
YS5nZXQodHlwZSk7CisgICAgcmV0dXJuIG1fcGxhdGZvcm1EYXRhLmdldCh0eXBlKTsKK30KIAot
ICAgIHJldHVybiB7IH07CitTdHJpbmcgU3RhdGljUGFzdGVib2FyZDo6cmVhZFN0cmluZ0luQ3Vz
dG9tRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgcmV0dXJuIG1fY3VzdG9tRGF0YS5n
ZXQodHlwZSk7CiB9CiAKIHZvaWQgU3RhdGljUGFzdGVib2FyZDo6d3JpdGVTdHJpbmcoY29uc3Qg
U3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIHZhbHVlKQogewotICAgIGF1dG8mIHBhc3RlYm9h
cmREYXRhID0gaXNTYWZlVHlwZUZvckRPTVRvUmVhZEFuZFdyaXRlKHR5cGUpID8gbV9wbGF0Zm9y
bURhdGEgOiBtX2N1c3RvbURhdGE7CisgICAgYXV0byYgcGFzdGVib2FyZERhdGEgPSBQYXN0ZWJv
YXJkOjppc1NhZmVUeXBlRm9yRE9NVG9SZWFkQW5kV3JpdGUodHlwZSkgPyBtX3BsYXRmb3JtRGF0
YSA6IG1fY3VzdG9tRGF0YTsKICAgICBpZiAocGFzdGVib2FyZERhdGEuc2V0KHR5cGUsIHZhbHVl
KS5pc05ld0VudHJ5KQogICAgICAgICBtX3R5cGVzLmFwcGVuZCh0eXBlKTsKICAgICBlbHNlIHsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N0YXRpY1Bhc3RlYm9hcmQuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TdGF0aWNQYXN0ZWJvYXJkLmgJKHJldmlz
aW9uIDIyMjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N0YXRpY1Bhc3RlYm9hcmQu
aAkod29ya2luZyBjb3B5KQpAQCAtNDEsOSArNDEsMTEgQEAgcHVibGljOgogICAgIGJvb2wgaXNT
dGF0aWMoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9CiAKICAgICBib29sIGhhc0RhdGEo
KSBmaW5hbDsKLSAgICBWZWN0b3I8U3RyaW5nPiB0eXBlc0ZvckJpbmRpbmdzKCkgZmluYWwgeyBy
ZXR1cm4gbV90eXBlczsgfQorICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzU2FmZUZvckJpbmRpbmdz
KCkgZmluYWwgeyByZXR1cm4gbV90eXBlczsgfQorICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzRm9y
TGVnYWN5VW5zYWZlQmluZGluZ3MoKSBmaW5hbCB7IHJldHVybiBtX3R5cGVzOyB9CiAgICAgVmVj
dG9yPFN0cmluZz4gdHlwZXNUcmVhdGVkQXNGaWxlcygpIGZpbmFsIHsgcmV0dXJuIHsgfTsgfQot
ICAgIFN0cmluZyByZWFkU3RyaW5nRm9yQmluZGluZ3MoY29uc3QgU3RyaW5nJiB0eXBlKSBmaW5h
bDsKKyAgICBTdHJpbmcgcmVhZFN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUpIGZpbmFsOworICAg
IFN0cmluZyByZWFkU3RyaW5nSW5DdXN0b21EYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkgZmluYWw7
CiAKICAgICB2b2lkIHdyaXRlU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5n
JiBkYXRhKSBmaW5hbDsKICAgICB2b2lkIGNsZWFyKCkgZmluYWw7CkluZGV4OiBTb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9jb2NvYS9QYXN0ZWJvYXJkQ29jb2EubW0KPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGFzdGVib2FyZENvY29hLm1tCShyZXZpc2lvbiAy
MjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QYXN0ZWJvYXJkQ29jb2Eu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIlBhc3RlYm9h
cmRTdHJhdGVneS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgorI2luY2x1ZGUg
IlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8SW1hZ2VJ
Ty9JbWFnZUlPLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CkBAIC0xNTEsNiArMTUy
LDM2IEBAIFZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnR5cGVzVHJlYXRlZEEKICAgICByZXR1
cm4gdHlwZXM7CiB9CiAKK1ZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnR5cGVzU2FmZUZvckJp
bmRpbmdzKCkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiB0eXBlcyA9IHBsYXRmb3JtU3RyYXRlZ2ll
cygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+dHlwZXNTYWZlRm9yRE9NVG9SZWFkQW5kV3JpdGUo
bV9wYXN0ZWJvYXJkTmFtZSk7CisKKyAgICAvLyBFbmZvcmNlIGNoYW5nZUNvdW50IG91cnNlbHZl
cyBmb3Igc2VjdXJpdHkuIFdlIGNoZWNrIGFmdGVyIHJlYWRpbmcgaW5zdGVhZCBvZiBiZWZvcmUg
dG8gYmUKKyAgICAvLyBzdXJlIGl0IGRvZXNuJ3QgY2hhbmdlIGJldHdlZW4gb3VyIHRlc3Rpbmcg
dGhlIGNoYW5nZSBjb3VudCBhbmQgYWNjZXNzaW5nIHRoZSBkYXRhLgorICAgIGlmIChtX2NoYW5n
ZUNvdW50ICE9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+Y2hh
bmdlQ291bnQobV9wYXN0ZWJvYXJkTmFtZSkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBy
ZXR1cm4gdHlwZXM7Cit9CisKK1ZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnR5cGVzRm9yTGVn
YWN5VW5zYWZlQmluZGluZ3MoKQoreworICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOworICAgIHBs
YXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+Z2V0VHlwZXModHlwZXMs
IG1fcGFzdGVib2FyZE5hbWUpOworCisgICAgLy8gRW5mb3JjZSBjaGFuZ2VDb3VudCBvdXJzZWx2
ZXMgZm9yIHNlY3VyaXR5LiBXZSBjaGVjayBhZnRlciByZWFkaW5nIGluc3RlYWQgb2YgYmVmb3Jl
IHRvIGJlCisgICAgLy8gc3VyZSBpdCBkb2Vzbid0IGNoYW5nZSBiZXR3ZWVuIG91ciB0ZXN0aW5n
IHRoZSBjaGFuZ2UgY291bnQgYW5kIGFjY2Vzc2luZyB0aGUgZGF0YS4KKyAgICBpZiAobV9jaGFu
Z2VDb3VudCAhPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmNo
YW5nZUNvdW50KG1fcGFzdGVib2FyZE5hbWUpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAg
TGlzdEhhc2hTZXQ8U3RyaW5nPiByZXN1bHQ7CisgICAgZm9yIChhdXRvJiBjb2NvYVR5cGUgOiB0
eXBlcykKKyAgICAgICAgYWRkSFRNTENsaXBib2FyZFR5cGVzRm9yQ29jb2FUeXBlKHJlc3VsdCwg
Y29jb2FUeXBlLCBtX3Bhc3RlYm9hcmROYW1lKTsKKworICAgIGNvcHlUb1ZlY3RvcihyZXN1bHQs
IHR5cGVzKTsKKyAgICByZXR1cm4gdHlwZXM7Cit9CisKIHZvaWQgUGFzdGVib2FyZDo6cmVhZChQ
YXN0ZWJvYXJkRmlsZVJlYWRlciYgcmVhZGVyKQogewogICAgIGF1dG8gaW1hZ2VUeXBlID0gbWlt
ZVR5cGVUb0ltYWdlVHlwZShyZWFkZXIudHlwZSk7CkBAIC0xOTQsNSArMjI1LDMyIEBAIHZvaWQg
UGFzdGVib2FyZDo6cmVhZChQYXN0ZWJvYXJkRmlsZVJlYWQKICAgICByZWFkZXIucmVhZChpbWFn
ZVR5cGVUb0Zha2VGaWxlbmFtZShpbWFnZVR5cGUpLCBidWZmZXIucmVsZWFzZU5vbk51bGwoKSk7
CiB9CiAKK1N0cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSkK
K3sKKyAgICByZXR1cm4gcmVhZFBsYXRmb3JtVmFsdWVBc1N0cmluZyh0eXBlLCBtX2NoYW5nZUNv
dW50LCBtX3Bhc3RlYm9hcmROYW1lKTsKK30KKworU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRTdHJp
bmdJbkN1c3RvbURhdGEoY29uc3QgU3RyaW5nJiB0eXBlKQoreworICAgIGF1dG8gYnVmZmVyID0g
cGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5idWZmZXJGb3JUeXBl
KGN1c3RvbVdlYktpdFBhc3RlYm9hcmREYXRhVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSk7CisgICAg
aWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBOU1N0cmluZyAqY3VzdG9t
RGF0YVZhbHVlID0gY3VzdG9tRGF0YUZyb21TaGFyZWRCdWZmZXIoKmJ1ZmZlcikuc2FtZU9yaWdp
bkN1c3RvbURhdGEuZ2V0KHR5cGUpOworICAgIGlmICghY3VzdG9tRGF0YVZhbHVlLmxlbmd0aCkK
KyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4gY3VzdG9tRGF0YVZhbHVlOworfQorCit2
b2lkIFBhc3RlYm9hcmQ6OndyaXRlQ3VzdG9tRGF0YShjb25zdCBQYXN0ZWJvYXJkQ3VzdG9tRGF0
YSYgZGF0YSkKK3sKKyAgICBtX2NoYW5nZUNvdW50ID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBh
c3RlYm9hcmRTdHJhdGVneSgpLT53cml0ZUN1c3RvbURhdGEoZGF0YSwgbV9wYXN0ZWJvYXJkTmFt
ZSk7Cit9CisKK2xvbmcgUGFzdGVib2FyZDo6Y2hhbmdlQ291bnQoKSBjb25zdAoreworICAgIHJl
dHVybiBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmNoYW5nZUNv
dW50KG1fcGFzdGVib2FyZE5hbWUpOworfQorCiB9CiAKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAJKHJldmlzaW9uIDIyMjY1OSkKKysrIFNv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtMjU0LDYgKzI1NCwxMiBAQCBib29sIFBhc3RlYm9hcmQ6Omhhc0RhdGEoKQogCiBWZWN0
b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBlc0ZvckJpbmRpbmdzKCkKIHsKKyAgICBub3RJbXBs
ZW1lbnRlZCgpOyAvLyB3ZWJraXQub3JnL2IvMTc3NjMzOiBbR1RLXSBNb3ZlIHRvIG5ldyBQYXN0
ZWJvYXJkIEFQSQorICAgIHJldHVybiB7IH07Cit9CisKK1ZlY3RvcjxTdHJpbmc+IFBhc3RlYm9h
cmQ6OnR5cGVzRm9yTGVnYWN5VW5zYWZlQmluZGluZ3MoKQorewogICAgIHJlYWRGcm9tQ2xpcGJv
YXJkKCk7CiAKICAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKQEAgLTI4NSw3ICsyOTEsNyBAQCBW
ZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBlc1RyZWF0ZWRBCiAgICAgcmV0dXJuIHsgfTsK
IH0KIAotU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRTdHJpbmdGb3JCaW5kaW5ncyhjb25zdCBTdHJp
bmcmIHR5cGUpCitTdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZyhjb25zdCBTdHJpbmcmIHR5
cGUpCiB7CiAgICAgcmVhZEZyb21DbGlwYm9hcmQoKTsKIApAQCAtMzA3LDYgKzMxMywxMiBAQCBT
dHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZ0ZvckJpbmRpbmdzCiAgICAgcmV0dXJuIFN0cmlu
ZygpOwogfQogCitTdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZ0luQ3VzdG9tRGF0YShjb25z
dCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7IC8vIHdlYmtpdC5vcmcvYi8xNzc2
MzM6IFtHVEtdIE1vdmUgdG8gbmV3IFBhc3RlYm9hcmQgQVBJCisgICAgcmV0dXJuIHsgfTsKK30K
KwogVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6cmVhZEZpbGVuYW1lcygpCiB7CiAgICAgcmVh
ZEZyb21DbGlwYm9hcmQoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QYXN0
ZWJvYXJkSU9TLm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9Q
YXN0ZWJvYXJkSU9TLm1tCShyZXZpc2lvbiAyMjI2NTkpCisrKyBTb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvUGFzdGVib2FyZElPUy5tbQkod29ya2luZyBjb3B5KQpAQCAtNDYsNyArNDYsNiBA
QAogI2ltcG9ydCAiUGxhdGZvcm1TdHJhdGVnaWVzLmgiCiAjaW1wb3J0ICJSZW5kZXJJbWFnZS5o
IgogI2ltcG9ydCAiUnVudGltZUFwcGxpY2F0aW9uQ2hlY2tzLmgiCi0jaW1wb3J0ICJTZXR0aW5n
cy5oIgogI2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCiAjaW1wb3J0ICJUZXh0LmgiCiAjaW1wb3J0
ICJVUkwuaCIKQEAgLTExNywxMSArMTE2LDYgQEAgc3RkOjp1bmlxdWVfcHRyPFBhc3RlYm9hcmQ+
IFBhc3RlYm9hcmQ6OgogICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFBhc3RlYm9hcmQ+KGNo
YW5nZUNvdW50Rm9yUGFzdGVib2FyZCgpKTsKIH0KIAotdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUN1
c3RvbURhdGEoY29uc3QgUGFzdGVib2FyZEN1c3RvbURhdGEmIGRhdGEpCi17Ci0gICAgbV9jaGFu
Z2VDb3VudCA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+d3Jp
dGVDdXN0b21EYXRhKGRhdGEsIG1fcGFzdGVib2FyZE5hbWUpOwotfQotCiB2b2lkIFBhc3RlYm9h
cmQ6OndyaXRlKGNvbnN0IFBhc3RlYm9hcmRXZWJDb250ZW50JiBjb250ZW50KQogewogICAgIHBs
YXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+d3JpdGVUb1Bhc3RlYm9h
cmQoY29udGVudCwgbV9wYXN0ZWJvYXJkTmFtZSk7CkBAIC0yNzksMTEgKzI3Myw2IEBAIHZvaWQg
UGFzdGVib2FyZDo6cmVhZFJlc3BlY3RpbmdVVElGaWRlbGkKICAgICB9CiB9CiAKLWxvbmcgUGFz
dGVib2FyZDo6Y2hhbmdlQ291bnQoKSBjb25zdAotewotICAgIHJldHVybiBwbGF0Zm9ybVN0cmF0
ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmNoYW5nZUNvdW50KG1fcGFzdGVib2FyZE5h
bWUpOwotfQotCiBOU0FycmF5ICpQYXN0ZWJvYXJkOjpzdXBwb3J0ZWRXZWJDb250ZW50UGFzdGVi
b2FyZFR5cGVzKCkKIHsKICAgICByZXR1cm4gQFsoaWQpV2ViQXJjaGl2ZVBib2FyZFR5cGUsIChp
ZClrVVRUeXBlRmxhdFJURkQsIChpZClrVVRUeXBlUlRGLCAoaWQpa1VUVHlwZUhUTUwsIChpZClr
VVRUeXBlUE5HLCAoaWQpa1VUVHlwZVRJRkYsIChpZClrVVRUeXBlSlBFRywgKGlkKWtVVFR5cGVH
SUYsIChpZClrVVRUeXBlVVJMLCAoaWQpa1VUVHlwZVRleHRdOwpAQCAtMzM4LDcgKzMyNyw3IEBA
IHZvaWQgUGFzdGVib2FyZDo6Y2xlYXIoKQogICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0
ZWJvYXJkU3RyYXRlZ3koKS0+d3JpdGVUb1Bhc3RlYm9hcmQoU3RyaW5nKCksIFN0cmluZygpLCBt
X3Bhc3RlYm9hcmROYW1lKTsKIH0KIAotc3RhdGljIFN0cmluZyByZWFkUGxhdGZvcm1WYWx1ZUFz
U3RyaW5nKGNvbnN0IFN0cmluZyYgZG9tVHlwZSwgbG9uZyBjaGFuZ2VDb3VudCwgY29uc3QgU3Ry
aW5nJiBwYXN0ZWJvYXJkTmFtZSkKK1N0cmluZyBQYXN0ZWJvYXJkOjpyZWFkUGxhdGZvcm1WYWx1
ZUFzU3RyaW5nKGNvbnN0IFN0cmluZyYgZG9tVHlwZSwgbG9uZyBjaGFuZ2VDb3VudCwgY29uc3Qg
U3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKICAgICBQYXN0ZWJvYXJkU3RyYXRlZ3kmIHN0cmF0
ZWd5ID0gKnBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKTsKIApAQCAt
MzcyLDIxICszNjEsNyBAQCBzdGF0aWMgU3RyaW5nIHJlYWRQbGF0Zm9ybVZhbHVlQXNTdHJpbmco
CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1TdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmlu
Z0ZvckJpbmRpbmdzKGNvbnN0IFN0cmluZyYgdHlwZSkKLXsKLSAgICBpZiAoIVNldHRpbmdzOjpj
dXN0b21QYXN0ZWJvYXJkRGF0YUVuYWJsZWQoKSB8fCBpc1NhZmVUeXBlRm9yRE9NVG9SZWFkQW5k
V3JpdGUodHlwZSkpCi0gICAgICAgIHJldHVybiByZWFkUGxhdGZvcm1WYWx1ZUFzU3RyaW5nKHR5
cGUsIG1fY2hhbmdlQ291bnQsIG1fcGFzdGVib2FyZE5hbWUpOwotCi0gICAgaWYgKGF1dG8gYnVm
ZmVyID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5idWZmZXJG
b3JUeXBlKGN1c3RvbVdlYktpdFBhc3RlYm9hcmREYXRhVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSkp
IHsKLSAgICAgICAgTlNTdHJpbmcgKmN1c3RvbURhdGFWYWx1ZSA9IGN1c3RvbURhdGFGcm9tU2hh
cmVkQnVmZmVyKCpidWZmZXIpLnNhbWVPcmlnaW5DdXN0b21EYXRhLmdldCh0eXBlKTsKLSAgICAg
ICAgaWYgKGN1c3RvbURhdGFWYWx1ZS5sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gY3VzdG9t
RGF0YVZhbHVlOwotICAgIH0KLQotICAgIHJldHVybiB7IH07Ci19Ci0KLXN0YXRpYyB2b2lkIGFk
ZEhUTUxDbGlwYm9hcmRUeXBlc0ZvckNvY29hVHlwZShMaXN0SGFzaFNldDxTdHJpbmc+JiByZXN1
bHRUeXBlcywgTlNTdHJpbmcgKmNvY29hVHlwZSkKK3ZvaWQgUGFzdGVib2FyZDo6YWRkSFRNTENs
aXBib2FyZFR5cGVzRm9yQ29jb2FUeXBlKExpc3RIYXNoU2V0PFN0cmluZz4mIHJlc3VsdFR5cGVz
LCBjb25zdCBTdHJpbmcmIGNvY29hVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkK
IHsKICAgICAvLyBVVEkgbWF5IG5vdCBkbyB0aGVzZSByaWdodCwgc28gbWFrZSBzdXJlIHdlIGdl
dCB0aGUgcmlnaHQsIHByZWRpY3RhYmxlIHJlc3VsdC4KICAgICBpZiAoW2NvY29hVHlwZSBpc0Vx
dWFsVG9TdHJpbmc6KE5TU3RyaW5nICopa1VUVHlwZVBsYWluVGV4dF0KQEAgLTQyMSwzMiArMzk2
LDYgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVN0cmluZyhjb25zdCBTdHJpbgogICAgIHBsYXRm
b3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+d3JpdGVUb1Bhc3RlYm9hcmQo
Y29jb2FUeXBlLmdldCgpLCBkYXRhLCBtX3Bhc3RlYm9hcmROYW1lKTsKIH0KIAotVmVjdG9yPFN0
cmluZz4gUGFzdGVib2FyZDo6dHlwZXNGb3JCaW5kaW5ncygpCi17Ci0gICAgVmVjdG9yPFN0cmlu
Zz4gdHlwZXM7Ci0gICAgaWYgKFNldHRpbmdzOjpjdXN0b21QYXN0ZWJvYXJkRGF0YUVuYWJsZWQo
KSkKLSAgICAgICAgdHlwZXMgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0
ZWd5KCktPnR5cGVzU2FmZUZvckRPTVRvUmVhZEFuZFdyaXRlKG1fcGFzdGVib2FyZE5hbWUpOwot
ICAgIGVsc2UKLSAgICAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVn
eSgpLT5nZXRUeXBlcyh0eXBlcywgbV9wYXN0ZWJvYXJkTmFtZSk7Ci0KLSAgICAvLyBFbmZvcmNl
IGNoYW5nZUNvdW50IG91cnNlbHZlcyBmb3Igc2VjdXJpdHkuIFdlIGNoZWNrIGFmdGVyIHJlYWRp
bmcgaW5zdGVhZCBvZiBiZWZvcmUgdG8gYmUKLSAgICAvLyBzdXJlIGl0IGRvZXNuJ3QgY2hhbmdl
IGJldHdlZW4gb3VyIHRlc3RpbmcgdGhlIGNoYW5nZSBjb3VudCBhbmQgYWNjZXNzaW5nIHRoZSBk
YXRhLgotICAgIGF1dG8gY2hhbmdlQ291bnQgPSBjaGFuZ2VDb3VudEZvclBhc3RlYm9hcmQobV9w
YXN0ZWJvYXJkTmFtZSk7Ci0gICAgaWYgKG1fY2hhbmdlQ291bnQgIT0gY2hhbmdlQ291bnQpCi0g
ICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBpZiAoU2V0dGluZ3M6OmN1c3RvbVBhc3RlYm9hcmRE
YXRhRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gdHlwZXM7Ci0KLSAgICBMaXN0SGFzaFNldDxT
dHJpbmc+IHJlc3VsdDsKLSAgICBmb3IgKGF1dG8gY29jb2FUeXBlIDogdHlwZXMpCi0gICAgICAg
IGFkZEhUTUxDbGlwYm9hcmRUeXBlc0ZvckNvY29hVHlwZShyZXN1bHQsIGNvY29hVHlwZSk7Ci0K
LSAgICBWZWN0b3I8U3RyaW5nPiB2ZWN0b3I7Ci0gICAgY29weVRvVmVjdG9yKHJlc3VsdCwgdmVj
dG9yKTsKLSAgICByZXR1cm4gdmVjdG9yOwotfQotCiBWZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJk
OjpyZWFkRmlsZW5hbWVzKCkKIHsKICAgICBWZWN0b3I8U3RyaW5nPiBmaWxlbmFtZXM7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9h
cmRJT1MubW0JKHJldmlzaW9uIDIyMjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0JKHdvcmtpbmcgY29weSkKQEAgLTM3NSw3ICszNzUs
NyBAQCBWZWN0b3I8U3RyaW5nPiBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnR5cGVzCiAgICAgICAgIGlm
IChbdHlwZSBpc0VxdWFsVG9TdHJpbmc6QChjdXN0b21XZWJLaXRQYXN0ZWJvYXJkRGF0YVR5cGUp
XSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChpc1NhZmVUeXBlRm9yRE9N
VG9SZWFkQW5kV3JpdGUodHlwZSkpIHsKKyAgICAgICAgaWYgKFBhc3RlYm9hcmQ6OmlzU2FmZVR5
cGVGb3JET01Ub1JlYWRBbmRXcml0ZSh0eXBlKSkgewogICAgICAgICAgICAgZG9tUGFzdGVib2Fy
ZFR5cGVzLmFkZCh0eXBlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB9CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQkocmV2aXNp
b24gMjIyNjU5KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMu
bW0JKHdvcmtpbmcgY29weSkKQEAgLTI2LDE4ICsyNiw3IEBACiAjaW1wb3J0ICJjb25maWcuaCIK
ICNpbXBvcnQgIlBhc3RlYm9hcmQuaCIKIAotI2ltcG9ydCAiQ2FjaGVkSW1hZ2UuaCIKLSNpbXBv
cnQgIkRvY3VtZW50LmgiCi0jaW1wb3J0ICJEb2N1bWVudEZyYWdtZW50LmgiCi0jaW1wb3J0ICJE
b2N1bWVudExvYWRlci5oIgogI2ltcG9ydCAiRHJhZ0RhdGEuaCIKLSNpbXBvcnQgIkVkaXRpbmcu
aCIKLSNpbXBvcnQgIkVkaXRvci5oIgotI2ltcG9ydCAiRWRpdG9yQ2xpZW50LmgiCi0jaW1wb3J0
ICJGcmFtZS5oIgotI2ltcG9ydCAiRnJhbWVMb2FkZXJDbGllbnQuaCIKLSNpbXBvcnQgIkZyYW1l
Vmlldy5oIgotI2ltcG9ydCAiSGl0VGVzdFJlc3VsdC5oIgogI2ltcG9ydCAiSW1hZ2UuaCIKICNp
bXBvcnQgIkxlZ2FjeVdlYkFyY2hpdmUuaCIKICNpbXBvcnQgIkxvYWRlck5TVVJMRXh0cmFzLmgi
CkBAIC00NSwxNSArMzQsMTAgQEAKICNpbXBvcnQgIlBhc3RlYm9hcmRTdHJhdGVneS5oIgogI2lt
cG9ydCAiUGxhdGZvcm1QYXN0ZWJvYXJkLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVN0cmF0ZWdpZXMu
aCIKLSNpbXBvcnQgIlJlbmRlckltYWdlLmgiCi0jaW1wb3J0ICJTZXR0aW5ncy5oIgotI2ltcG9y
dCAiVGV4dC5oIgogI2ltcG9ydCAiVVJMLmgiCiAjaW1wb3J0ICJVVElVdGlsaXRpZXMuaCIKICNp
bXBvcnQgIldlYkNvcmVOU1N0cmluZ0V4dHJhcy5oIgotI2ltcG9ydCAiV2ViQ29yZVN5c3RlbUlu
dGVyZmFjZS5oIgogI2ltcG9ydCAiV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFzLmgiCi0jaW1w
b3J0ICJtYXJrdXAuaCIKICNpbXBvcnQgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNzU1BJLmg+CiAj
aW1wb3J0IDxwYWwvc3BpL21hYy9ISVNlcnZpY2VzU1BJLmg+CiAjaW1wb3J0IDx3dGYvUmV0YWlu
UHRyLmg+CkBAIC05MSwxMSArNzUsNiBAQCBzdGF0aWMgVmVjdG9yPFN0cmluZz4gd3JpdGFibGVU
eXBlc0ZvckltCiAgICAgcmV0dXJuIHR5cGVzOwogfQogCi1sb25nIFBhc3RlYm9hcmQ6OmNoYW5n
ZUNvdW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3Rl
Ym9hcmRTdHJhdGVneSgpLT5jaGFuZ2VDb3VudChtX3Bhc3RlYm9hcmROYW1lKTsKLX0KLQogTlNB
cnJheSAqUGFzdGVib2FyZDo6c3VwcG9ydGVkRmlsZVVwbG9hZFBhc3RlYm9hcmRUeXBlcygpCiB7
CiAgICAgcmV0dXJuIEBbIChOU1N0cmluZyAqKU5TRmlsZXNQcm9taXNlUGJvYXJkVHlwZSwgKE5T
U3RyaW5nICopTlNGaWxlbmFtZXNQYm9hcmRUeXBlIF07CkBAIC0xNzksMTEgKzE1OCw2IEBAIHZv
aWQgUGFzdGVib2FyZDo6d3JpdGUoY29uc3QgUGFzdGVib2FyZFcKICAgICAgICAgbV9jaGFuZ2VD
b3VudCA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0U3Ry
aW5nRm9yVHlwZShjb250ZW50LmRhdGFJblN0cmluZ0Zvcm1hdCwgTlNTdHJpbmdQYm9hcmRUeXBl
LCBtX3Bhc3RlYm9hcmROYW1lKTsKIH0KIAotdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUN1c3RvbURh
dGEoY29uc3QgUGFzdGVib2FyZEN1c3RvbURhdGEmIGRhdGEpCi17Ci0gICAgbV9jaGFuZ2VDb3Vu
dCA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+d3JpdGVDdXN0
b21EYXRhKGRhdGEsIG1fcGFzdGVib2FyZE5hbWUpOwotfQotCiB2b2lkIFBhc3RlYm9hcmQ6Ondy
aXRlUGxhaW5UZXh0KGNvbnN0IFN0cmluZyYgdGV4dCwgU21hcnRSZXBsYWNlT3B0aW9uIHNtYXJ0
UmVwbGFjZU9wdGlvbikKIHsKICAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKQEAgLTQ5Myw3ICs0
NjcsNyBAQCBzdGF0aWMgVmVjdG9yPFN0cmluZz4gYWJzb2x1dGVVUkxzRnJvbVBhCiAgICAgcmV0
dXJuIHVybHM7CiB9CiAKLXN0YXRpYyBTdHJpbmcgcmVhZFBsYXRmb3JtVmFsdWVBc1N0cmluZyhj
b25zdCBTdHJpbmcmIGRvbVR5cGUsIGxvbmcgY2hhbmdlQ291bnQsIGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUpCitTdHJpbmcgUGFzdGVib2FyZDo6cmVhZFBsYXRmb3JtVmFsdWVBc1N0cmlu
Zyhjb25zdCBTdHJpbmcmIGRvbVR5cGUsIGxvbmcgY2hhbmdlQ291bnQsIGNvbnN0IFN0cmluZyYg
cGFzdGVib2FyZE5hbWUpCiB7CiAgICAgY29uc3QgU3RyaW5nJiBjb2NvYVR5cGUgPSBjb2NvYVR5
cGVGcm9tSFRNTENsaXBib2FyZFR5cGUoZG9tVHlwZSk7CiAgICAgU3RyaW5nIGNvY29hVmFsdWU7
CkBAIC01MTEsMjAgKzQ4NSw2IEBAIHN0YXRpYyBTdHJpbmcgcmVhZFBsYXRmb3JtVmFsdWVBc1N0
cmluZygKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLVN0cmluZyBQYXN0ZWJvYXJkOjpyZWFk
U3RyaW5nRm9yQmluZGluZ3MoY29uc3QgU3RyaW5nJiB0eXBlKQotewotICAgIGlmICghU2V0dGlu
Z3M6OmN1c3RvbVBhc3RlYm9hcmREYXRhRW5hYmxlZCgpIHx8IGlzU2FmZVR5cGVGb3JET01Ub1Jl
YWRBbmRXcml0ZSh0eXBlKSkKLSAgICAgICAgcmV0dXJuIHJlYWRQbGF0Zm9ybVZhbHVlQXNTdHJp
bmcodHlwZSwgbV9jaGFuZ2VDb3VudCwgbV9wYXN0ZWJvYXJkTmFtZSk7Ci0KLSAgICBpZiAoYXV0
byBidWZmZXIgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmJ1
ZmZlckZvclR5cGUoY3VzdG9tV2ViS2l0UGFzdGVib2FyZERhdGFUeXBlLCBtX3Bhc3RlYm9hcmRO
YW1lKSkgewotICAgICAgICBOU1N0cmluZyAqY3VzdG9tRGF0YVZhbHVlID0gY3VzdG9tRGF0YUZy
b21TaGFyZWRCdWZmZXIoKmJ1ZmZlcikuc2FtZU9yaWdpbkN1c3RvbURhdGEuZ2V0KHR5cGUpOwot
ICAgICAgICBpZiAoY3VzdG9tRGF0YVZhbHVlLmxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBj
dXN0b21EYXRhVmFsdWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQogc3RhdGljIFN0
cmluZyB1dGlUeXBlRnJvbUNvY29hVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCiB7CiAgICAgaWYg
KFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdXRpVHlwZSA9IGFkb3B0Q0YoVVRUeXBlQ3JlYXRlUHJl
ZmVycmVkSWRlbnRpZmllckZvclRhZyhrVVRUYWdDbGFzc05TUGJvYXJkVHlwZSwgdHlwZS5jcmVh
dGVDRlN0cmluZygpLmdldCgpLCAwKSkpIHsKQEAgLTUzNCw3ICs0OTQsNyBAQCBzdGF0aWMgU3Ry
aW5nIHV0aVR5cGVGcm9tQ29jb2FUeXBlKGNvbnN0CiAgICAgcmV0dXJuIFN0cmluZygpOwogfQog
Ci1zdGF0aWMgdm9pZCBhZGRIVE1MQ2xpcGJvYXJkVHlwZXNGb3JDb2NvYVR5cGUoTGlzdEhhc2hT
ZXQ8U3RyaW5nPiYgcmVzdWx0VHlwZXMsIGNvbnN0IFN0cmluZyYgY29jb2FUeXBlLCBjb25zdCBT
dHJpbmcmIHBhc3RlYm9hcmROYW1lKQordm9pZCBQYXN0ZWJvYXJkOjphZGRIVE1MQ2xpcGJvYXJk
VHlwZXNGb3JDb2NvYVR5cGUoTGlzdEhhc2hTZXQ8U3RyaW5nPiYgcmVzdWx0VHlwZXMsIGNvbnN0
IFN0cmluZyYgY29jb2FUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQogewogICAg
IGlmIChjb2NvYVR5cGUgPT0gIk5lWFQgcGxhaW4gYXNjaWkgcGFzdGVib2FyZCB0eXBlIikKICAg
ICAgICAgcmV0dXJuOyAvLyBTa2lwIHRoaXMgYW5jaWVudCB0eXBlIHRoYXQgZ2V0cyBhdXRvLXN1
cHBsaWVkIGJ5IHNvbWUgc3lzdGVtIGNvbnZlcnNpb24uCkBAIC01OTgsMzAgKzU1OCw2IEBAIHZv
aWQgUGFzdGVib2FyZDo6d3JpdGVTdHJpbmcoY29uc3QgU3RyaW4KICAgICB9CiB9CiAKLVZlY3Rv
cjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnR5cGVzRm9yQmluZGluZ3MoKQotewotICAgIFZlY3RvcjxT
dHJpbmc+IHR5cGVzOwotICAgIGlmIChTZXR0aW5nczo6Y3VzdG9tUGFzdGVib2FyZERhdGFFbmFi
bGVkKCkpCi0gICAgICAgIHR5cGVzID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRT
dHJhdGVneSgpLT50eXBlc1NhZmVGb3JET01Ub1JlYWRBbmRXcml0ZShtX3Bhc3RlYm9hcmROYW1l
KTsKLSAgICBlbHNlCi0gICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3Ry
YXRlZ3koKS0+Z2V0VHlwZXModHlwZXMsIG1fcGFzdGVib2FyZE5hbWUpOwotCi0gICAgLy8gRW5m
b3JjZSBjaGFuZ2VDb3VudCBvdXJzZWx2ZXMgZm9yIHNlY3VyaXR5LiBXZSBjaGVjayBhZnRlciBy
ZWFkaW5nIGluc3RlYWQgb2YgYmVmb3JlIHRvIGJlCi0gICAgLy8gc3VyZSBpdCBkb2Vzbid0IGNo
YW5nZSBiZXR3ZWVuIG91ciB0ZXN0aW5nIHRoZSBjaGFuZ2UgY291bnQgYW5kIGFjY2Vzc2luZyB0
aGUgZGF0YS4KLSAgICBpZiAobV9jaGFuZ2VDb3VudCAhPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+
cGFzdGVib2FyZFN0cmF0ZWd5KCktPmNoYW5nZUNvdW50KG1fcGFzdGVib2FyZE5hbWUpKQotICAg
ICAgICByZXR1cm4geyB9OwotCi0gICAgaWYgKFNldHRpbmdzOjpjdXN0b21QYXN0ZWJvYXJkRGF0
YUVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIHR5cGVzOwotCi0gICAgTGlzdEhhc2hTZXQ8U3Ry
aW5nPiByZXN1bHQ7Ci0gICAgZm9yIChhdXRvJiBjb2NvYVR5cGUgOiB0eXBlcykKLSAgICAgICAg
YWRkSFRNTENsaXBib2FyZFR5cGVzRm9yQ29jb2FUeXBlKHJlc3VsdCwgY29jb2FUeXBlLCBtX3Bh
c3RlYm9hcmROYW1lKTsKLQotICAgIGNvcHlUb1ZlY3RvcihyZXN1bHQsIHR5cGVzKTsKLSAgICBy
ZXR1cm4gdHlwZXM7Ci19Ci0KIFZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnJlYWRGaWxlbmFt
ZXMoKQogewogICAgIC8vIEZJWE1FOiBTZWVtcyBzaWxseSB0byBjb252ZXJ0IHBhdGhzIHRvIFVS
THMgYW5kIHRoZW4gYmFjayB0byBwYXRocy4gRG9lcyB0aGF0IGRvIGFueXRoaW5nIGhlbHBmdWw/
CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1QYXN0ZWJvYXJkTWFj
Lm1tCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybVBh
c3RlYm9hcmRNYWMubW0JKHJldmlzaW9uIDIyMjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9QbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0JKHdvcmtpbmcgY29weSkKQEAgLTI4LDcg
KzI4LDYgQEAKIAogI2ltcG9ydCAiQ29sb3IuaCIKICNpbXBvcnQgIlBhc3RlYm9hcmQuaCIKLSNp
bXBvcnQgIlNldHRpbmdzLmgiCiAjaW1wb3J0ICJVUkwuaCIKICNpbXBvcnQgIlNoYXJlZEJ1ZmZl
ci5oIgogI2ltcG9ydCA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CkBAIC0xMjUsNyArMTI0LDcgQEAg
VmVjdG9yPFN0cmluZz4gUGxhdGZvcm1QYXN0ZWJvYXJkOjp0eXBlcwogICAgICAgICBpZiAoW3R5
cGUgaXNFcXVhbFRvU3RyaW5nOkAoY3VzdG9tV2ViS2l0UGFzdGVib2FyZERhdGFUeXBlKV0pCiAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAoaXNTYWZlVHlwZUZvckRPTVRvUmVh
ZEFuZFdyaXRlKHR5cGUpKQorICAgICAgICBpZiAoUGFzdGVib2FyZDo6aXNTYWZlVHlwZUZvckRP
TVRvUmVhZEFuZFdyaXRlKHR5cGUpKQogICAgICAgICAgICAgZG9tUGFzdGVib2FyZFR5cGVzLmFk
ZCh0eXBlKTsKICAgICAgICAgZWxzZSBpZiAoYXV0byogZG9tVHlwZSA9IHNhZmVUeXBlRm9yRE9N
VG9SZWFkQW5kV3JpdGVGb3JQbGF0Zm9ybVR5cGUodHlwZSkpIHsKICAgICAgICAgICAgIGF1dG8g
Y29lcmNlZFR5cGUgPSBTdHJpbmc6OmZyb21VVEY4KGRvbVR5cGUpOwpJbmRleDogU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCj09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAkocmV2aXNpb24gMjIyNjU5
KQorKysgU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCSh3b3Jr
aW5nIGNvcHkpCkBAIC0yNDUsNiArMjQ1LDEyIEBAIHN0YXRpYyB2b2lkIGFkZE1pbWVUeXBlc0Zv
ckZvcm1hdChMaXN0SGEKIAogVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6dHlwZXNGb3JCaW5k
aW5ncygpCiB7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4geyB9OworfQorCitW
ZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBlc0ZvckxlZ2FjeVVuc2FmZUJpbmRpbmdzKCkK
K3sKICAgICBMaXN0SGFzaFNldDxTdHJpbmc+IHJlc3VsdHM7CiAKICAgICBpZiAoIW1fZGF0YU9i
amVjdCAmJiBtX2RyYWdEYXRhTWFwLmlzRW1wdHkoKSkKQEAgLTI4Miw3ICsyODgsNyBAQCBWZWN0
b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBlc1RyZWF0ZWRBCiAgICAgcmV0dXJuIHsgfTsKIH0K
IAotU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRTdHJpbmdGb3JCaW5kaW5ncyhjb25zdCBTdHJpbmcm
IHR5cGUpCitTdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUp
CiB7CiAgICAgaWYgKCFtX2RhdGFPYmplY3QgJiYgbV9kcmFnRGF0YU1hcC5pc0VtcHR5KCkpCiAg
ICAgICAgIHJldHVybiAiIjsKQEAgLTMwMiw2ICszMDgsMTIgQEAgU3RyaW5nIFBhc3RlYm9hcmQ6
OnJlYWRTdHJpbmdGb3JCaW5kaW5ncwogICAgIHJldHVybiAiIjsKIH0KIAorU3RyaW5nIFBhc3Rl
Ym9hcmQ6OnJlYWRTdHJpbmdJbkN1c3RvbURhdGEoY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJ
bXBsZW1lbnRlZCgpOworICAgIHJldHVybiB7IH07Cit9CisKIFZlY3RvcjxTdHJpbmc+IFBhc3Rl
Ym9hcmQ6OnJlYWRGaWxlbmFtZXMoKQogewogICAgIFZlY3RvcjxTdHJpbmc+IGZpbGVOYW1lczsK
SW5kZXg6IFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9QYXN0ZWJvYXJkV1BFLmNwcAo9PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93cGUvUGFzdGVib2FyZFdQRS5jcHAJ
KHJldmlzaW9uIDIyMjY1OSkKKysrIFNvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9QYXN0ZWJv
YXJkV1BFLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEsNiArNTEsMTIgQEAgYm9vbCBQYXN0ZWJv
YXJkOjpoYXNEYXRhKCkKIAogVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6dHlwZXNGb3JCaW5k
aW5ncygpCiB7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4geyB9OworfQorCitW
ZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkdHlwZXNGb3JMZWdhY3lVbnNhZmVCaW5kaW5ncygpCit7
CiAgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7CiAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBh
c3RlYm9hcmRTdHJhdGVneSgpLT5nZXRUeXBlcyh0eXBlcyk7CiAgICAgcmV0dXJuIHR5cGVzOwpA
QCAtNjEsMTEgKzY3LDE3IEBAIFZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnR5cGVzVHJlYXRl
ZEEKICAgICByZXR1cm4geyB9OwogfQogCi1TdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZ0Zv
ckJpbmRpbmdzKGNvbnN0IFN0cmluZyYgdHlwZSkKK1N0cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKICAgICByZXR1cm4gcGxhdGZvcm1TdHJhdGVnaWVz
KCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5yZWFkU3RyaW5nRnJvbVBhc3RlYm9hcmQoMCwgdHlw
ZSk7CiB9CiAKK1N0cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nSW5DdXN0b21EYXRhKGNvbnN0
IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4geyB9OworfQor
CiB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3Qg
U3RyaW5nJiB0ZXh0KQogewogICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3Ry
YXRlZ3koKS0+d3JpdGVUb1Bhc3RlYm9hcmQodHlwZSwgdGV4dCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322279</attachid>
            <date>2017-09-29 21:48:00 -0700</date>
            <delta_ts>2017-09-30 01:49:37 -0700</delta_ts>
            <desc>Cleanup</desc>
            <filename>bug-177700-20170929214759.patch</filename>
            <type>text/plain</type>
            <size>29044</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyNjc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODkyMzQ5NTAxMGU5NWZk
ZGM1N2UzOTE4NTYxM2FjOWRjMGI0YTRiYS4uYjA2ZTE4ODIwNDhkMDg4ZmNjZDg2MTMzM2Q3MmI2
MWQyY2VmZTM4YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0IEBACisyMDE3LTA5LTI5ICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFNoYXJlIG1vcmUgcGFzdGVi
b2FyZCBjb2RlIGJldHdlZW4gaU9TIGFuZCBtYWNPUyBhbmQgcmVtb3ZlIGRlcGVuZGVuY3kgb24g
U2V0dGluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3NzcwMAorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAg
IE1vdmVkIG1vcmUgY29kZSBmcm9tIFBhc3RlYm9hcmRJT1MubW0gYW5kIFBhc3RlYm9hcmRNYWMu
bW0gaW50byBQYXN0ZWJvYXJkQ29jb2EubW0gdG8gc2hhcmUgY29kZS4KKworICAgICAgICBUaGlz
IHBhdGNoIGFsc28gcmVtb3ZlcyB0aGUgbGF5ZXJpbmcgdmlvbGF0aW9uIGluYWR2ZXJ0ZW50bHkg
aW50cm9kdWNlZCBpbiByMjIyNTk1IHdoZXJlYnkgd2hpY2gKKyAgICAgICAgUGFzdGVib2FyZCBj
b2RlIGRlcGVuZHMgb24gU2V0dGluZ3MuIFRvIGRvIHRoaXMsIHRoaXMgcGF0Y2ggc3BsaXRzIHJl
YWRTdHJpbmdGb3JCaW5kaW5ncyBpcyBpbnRvCisgICAgICAgIHJlYWRTdHJpbmcgYW5kIHJlYWRT
dHJpbmdJbkN1c3RvbURhdGEgYW5kIHR5cGVzRm9yQmluZGluZ3MgaW50byB0eXBlc1NhZmVGb3JC
aW5kaW5ncyBhbmQKKyAgICAgICAgdHlwZXNGb3JMZWdhY3lVbnNhZmVCaW5kaW5ncywgYW5kIG1v
dmVzIHRoZSBsb2dpYyB0byBkZWNpZGUgd2hldGhlciBhIGdpdmVuIHR5cGUgb3Igc3RyaW5nIGlz
IHJlYWQKKyAgICAgICAgb2ZmIG9mIHRoZSBuYXRpdmUgcGFzdGVib2FyZCBlbnRyeSBvciBvdXIg
Y3VzdG9tIGRhdGEgZW50cnkgaXMgbW92ZWQgdG8gRGF0YVRyYW5zZmVyLgorCisgICAgICAgIE5v
IG5ldyB0ZXN0cyBzaW5jZSB0aGVyZSBzaG91bGQgYmUgbm8gYmVoYXZpb3JhbCBjaGFuZ2UuCisK
KyAgICAgICAgKiBkb20vRGF0YVRyYW5zZmVyLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkRhdGFU
cmFuc2Zlcjo6Z2V0RGF0YSBjb25zdCk6IE1vdmVkIHRoZSBjb2RlIHRvIGRlY2lkZSB3aGV0aGVy
IHN0cmluZyBpcworICAgICAgICByZWFkIG9mZiBvZiBjdXN0b20gZGF0YSBvciBuYXRpdmUgcGFz
dGVib2FyZCBmcm9tIHJlYWRTdHJpbmdGb3JCaW5kaW5ncy4KKyAgICAgICAgKFdlYkNvcmU6OkRh
dGFUcmFuc2Zlcjo6dHlwZXMgY29uc3QpOiBEaXR0byBmcm9tIHR5cGVzRm9yQmluZGluZ3MuCisg
ICAgICAgICogcGxhdGZvcm0vUGFzdGVib2FyZC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXN0
ZWJvYXJkOjppc1NhZmVUeXBlRm9yRE9NVG9SZWFkQW5kV3JpdGUpOiBNb3ZlZCBpbnRvIFBhc3Rl
Ym9hcmQuCisgICAgICAgICogcGxhdGZvcm0vUGFzdGVib2FyZC5oOgorICAgICAgICAqIHBsYXRm
b3JtL1N0YXRpY1Bhc3RlYm9hcmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6U3RhdGljUGFzdGVi
b2FyZDo6cmVhZFN0cmluZyk6IFJlbmFtZWQgZnJvbSByZWFkU3RyaW5nRm9yQmluZGluZ3MuCisg
ICAgICAgIChXZWJDb3JlOjpTdGF0aWNQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nSW5DdXN0b21EYXRh
KTogQWRkZWQuCisgICAgICAgIChXZWJDb3JlOjpTdGF0aWNQYXN0ZWJvYXJkOjp3cml0ZVN0cmlu
Zyk6CisgICAgICAgICogcGxhdGZvcm0vU3RhdGljUGFzdGVib2FyZC5oOgorICAgICAgICAqIHBs
YXRmb3JtL2NvY29hL1Bhc3RlYm9hcmRDb2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3Rl
Ym9hcmQ6OnR5cGVzU2FmZUZvckJpbmRpbmdzKTogRXh0cmFjdGVkIG91dCBvZiB0eXBlc0ZvckJp
bmRpbmdzIGluIFBhc3RlYm9hcmRJT1MubW0KKyAgICAgICAgYW5kIFBhc3RlYm9hcmRNYWMubW0u
CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp0eXBlc0ZvckxlZ2FjeVVuc2FmZUJpbmRp
bmdzKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nKTog
RGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nSW5DdXN0b21E
YXRhKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZUN1c3RvbURh
dGEpOiBNb3ZlZCBoZXJlIGZyb20gUGFzdGVib2FyZElPUy5tbSBhbmQgUGFzdGVib2FyZENvY29h
Lm1tLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6Y2hhbmdlQ291bnQgY29uc3QpOiBE
aXR0by4KKyAgICAgICAgKiBwbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp0eXBlc1NhZmVGb3JCaW5kaW5ncyk6IEFkZGVkLgorICAg
ICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6dHlwZXNGb3JMZWdhY3lVbnNhZmVCaW5kaW5ncyk6
IFJlbmFtZWQgZnJvbSByZWFkU3RyaW5nRm9yQmluZGluZ3MuCisgICAgICAgIChXZWJDb3JlOjpQ
YXN0ZWJvYXJkOjpyZWFkU3RyaW5nKToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJl
YWRTdHJpbmdJbkN1c3RvbURhdGEpOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS9pb3MvUGFz
dGVib2FyZElPUy5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OndyaXRlQ3VzdG9t
RGF0YSk6IE1vdmVkIHRvIFBhc3RlYm9hcmRDb2NvYS5tbS4KKyAgICAgICAgKFdlYkNvcmU6OlBh
c3RlYm9hcmQ6OmNoYW5nZUNvdW50IGNvbnN0KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQ
YXN0ZWJvYXJkOjpyZWFkUGxhdGZvcm1WYWx1ZUFzU3RyaW5nKTogTW92ZWQgaW50byBQYXN0ZWJv
YXJkLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6YWRkSFRNTENsaXBib2FyZFR5cGVz
Rm9yQ29jb2FUeXBlKTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFk
U3RyaW5nRm9yQmluZGluZ3MpOiBNb3ZlZCB0byBQYXN0ZWJvYXJkQ29jb2EubW0uCisgICAgICAg
IChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp0eXBlc0ZvckJpbmRpbmdzKTogRGl0dG8uCisgICAgICAg
ICogcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtUGFzdGVib2FyZDo6dHlwZXNTYWZlRm9yRE9NVG9SZWFkQW5kV3JpdGUgY29u
c3QpOgorICAgICAgICAqIHBsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tOgorICAgICAgICAo
V2ViQ29yZTo6UGFzdGVib2FyZDo6Y2hhbmdlQ291bnQgY29uc3QpOiBNb3ZlZCB0byBQYXN0ZWJv
YXJkQ29jb2EubW0uCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZUN1c3RvbURh
dGEpOiBEaXR0by4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWRQbGF0Zm9ybVZh
bHVlQXNTdHJpbmcpOiBNb3ZlZCBpbnRvIFBhc3RlYm9hcmQuCisgICAgICAgIChXZWJDb3JlOjpQ
YXN0ZWJvYXJkOjpyZWFkU3RyaW5nRm9yQmluZGluZ3MpOiBNb3ZlZCB0byBQYXN0ZWJvYXJkQ29j
b2EubW0uCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjphZGRIVE1MQ2xpcGJvYXJkVHlw
ZXNGb3JDb2NvYVR5cGUpOiBNb3ZlZCBpbnRvIFBhc3RlYm9hcmQuCisgICAgICAgIChXZWJDb3Jl
OjpQYXN0ZWJvYXJkOjp0eXBlc0ZvckJpbmRpbmdzKTogTW92ZWQgdG8gUGFzdGVib2FyZENvY29h
Lm1tLgorICAgICAgICAqIHBsYXRmb3JtL21hYy9QbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW06Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OnR5cGVzU2FmZUZvckRPTVRvUmVh
ZEFuZFdyaXRlIGNvbnN0KToKKyAgICAgICAgKiBwbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5j
cHA6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp0eXBlc1NhZmVGb3JCaW5kaW5ncyk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6dHlwZXNGb3JMZWdhY3lVbnNh
ZmVCaW5kaW5ncyk6IFJlbmFtZWQgZnJvbSByZWFkU3RyaW5nRm9yQmluZGluZ3MuCisgICAgICAg
IChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nKTogUmVuYW1lZCBmcm9tIHJlYWRTdHJp
bmdGb3JCaW5kaW5ncy4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWRTdHJpbmdJ
bkN1c3RvbURhdGEpOiBBZGRlZC4KKyAgICAgICAgKiBwbGF0Zm9ybS93cGUvUGFzdGVib2FyZFdQ
RS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp0eXBlc1NhZmVGb3JCaW5kaW5n
cyk6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZHR5cGVzRm9yTGVnYWN5VW5z
YWZlQmluZGluZ3MpOiBSZW5hbWVkIGZyb20gcmVhZFN0cmluZ0ZvckJpbmRpbmdzLgorICAgICAg
ICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZFN0cmluZyk6IFJlbmFtZWQgZnJvbSByZWFkU3Ry
aW5nRm9yQmluZGluZ3MuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFkU3RyaW5n
SW5DdXN0b21EYXRhKTogQWRkZWQuCisKIDIwMTctMDktMjkgIENocmlzIER1bWV6ICA8Y2R1bWV6
QGFwcGxlLmNvbT4KIAogICAgICAgICBodHRwL3Rlc3RzL3ByZWNvbm5lY3QvbGluay1yZWwtcHJl
Y29ubmVjdC1odHRwcy5odG1sIGlzIGZsYWt5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9k
b20vRGF0YVRyYW5zZmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJhbnNmZXIuY3Bw
CmluZGV4IDdiZDg0NGUwNGNmZDZmODcwZjgyNGVlODM4MWFkMjcxMGFmM2FlOGQuLmM5YmQ2NDg2
MWUwNTk4YWRlMGRiZWE4NmQ2NjI3MjYzZGRlY2EwZDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2RvbS9EYXRhVHJhbnNmZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2RvbS9EYXRhVHJh
bnNmZXIuY3BwCkBAIC0zNyw2ICszNyw3IEBACiAjaW5jbHVkZSAiSFRNTEltYWdlRWxlbWVudC5o
IgogI2luY2x1ZGUgIkltYWdlLmgiCiAjaW5jbHVkZSAiUGFzdGVib2FyZC5oIgorI2luY2x1ZGUg
IlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU3RhdGljUGFzdGVib2FyZC5oIgogI2luY2x1ZGUgIldl
YkNvcmVQYXN0ZWJvYXJkRmlsZVJlYWRlci5oIgogCkBAIC0xNDEsNyArMTQyLDEwIEBAIFN0cmlu
ZyBEYXRhVHJhbnNmZXI6OmdldERhdGEoY29uc3QgU3RyaW5nJiB0eXBlKSBjb25zdAogICAgICAg
ICByZXR1cm4geyB9OwogI2VuZGlmCiAKLSAgICByZXR1cm4gbV9wYXN0ZWJvYXJkLT5yZWFkU3Ry
aW5nRm9yQmluZGluZ3Mobm9ybWFsaXplVHlwZSh0eXBlKSk7CisgICAgYXV0byBub3JtYWxpemVk
VHlwZSA9IG5vcm1hbGl6ZVR5cGUodHlwZSk7CisgICAgaWYgKFNldHRpbmdzOjpjdXN0b21QYXN0
ZWJvYXJkRGF0YUVuYWJsZWQoKSAmJiAhUGFzdGVib2FyZDo6aXNTYWZlVHlwZUZvckRPTVRvUmVh
ZEFuZFdyaXRlKHR5cGUpKQorICAgICAgICByZXR1cm4gbV9wYXN0ZWJvYXJkLT5yZWFkU3RyaW5n
SW5DdXN0b21EYXRhKG5vcm1hbGl6ZWRUeXBlKTsKKyAgICByZXR1cm4gbV9wYXN0ZWJvYXJkLT5y
ZWFkU3RyaW5nKG5vcm1hbGl6ZWRUeXBlKTsKIH0KIAogdm9pZCBEYXRhVHJhbnNmZXI6OnNldERh
dGEoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpCkBAIC0xNzIsNyArMTc2
LDcgQEAgVmVjdG9yPFN0cmluZz4gRGF0YVRyYW5zZmVyOjp0eXBlcygpIGNvbnN0CiAgICAgaWYg
KCFjYW5SZWFkVHlwZXMoKSkKICAgICAgICAgcmV0dXJuIHsgfTsKIAotICAgIHJldHVybiBtX3Bh
c3RlYm9hcmQtPnR5cGVzRm9yQmluZGluZ3MoKTsKKyAgICByZXR1cm4gU2V0dGluZ3M6OmN1c3Rv
bVBhc3RlYm9hcmREYXRhRW5hYmxlZCgpID8gbV9wYXN0ZWJvYXJkLT50eXBlc1NhZmVGb3JCaW5k
aW5ncygpIDogbV9wYXN0ZWJvYXJkLT50eXBlc0ZvckxlZ2FjeVVuc2FmZUJpbmRpbmdzKCk7CiB9
CiAKIEZpbGVMaXN0JiBEYXRhVHJhbnNmZXI6OmZpbGVzKCkgY29uc3QKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vUGFzdGVib2FyZC5jcHAKaW5kZXggOGNiZGE2ZmFlM2RiMTQ4ZmJkMDJlNjA4ZTkwYWIy
MWE1NWJjZmIyMC4uNDNjNjY3YTM3ZWIyNTg3MmViMjcyZmJkNzgyNmY0MjVkODQ1MWJkMyAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZC5jcHAKQEAgLTM5LDcgKzM5LDcgQEAgbmFt
ZXNwYWNlIFdlYkNvcmUgewogUGFzdGVib2FyZEltYWdlOjpQYXN0ZWJvYXJkSW1hZ2UoKSA9IGRl
ZmF1bHQ7CiBQYXN0ZWJvYXJkSW1hZ2U6On5QYXN0ZWJvYXJkSW1hZ2UoKSA9IGRlZmF1bHQ7CiAK
LWJvb2wgaXNTYWZlVHlwZUZvckRPTVRvUmVhZEFuZFdyaXRlKGNvbnN0IFN0cmluZyYgdHlwZSkK
K2Jvb2wgUGFzdGVib2FyZDo6aXNTYWZlVHlwZUZvckRPTVRvUmVhZEFuZFdyaXRlKGNvbnN0IFN0
cmluZyYgdHlwZSkKIHsKICAgICByZXR1cm4gdHlwZSA9PSAidGV4dC9wbGFpbiIgfHwgdHlwZSA9
PSAidGV4dC9odG1sIiB8fCB0eXBlID09ICJ0ZXh0L3VyaS1saXN0IjsKIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL1Bhc3RlYm9hcmQuaAppbmRleCBhZDQwMjJkYzViNjc0MzM2YjhlZjdlODM5ZTQ5NzA0
MTJhZmZiNTcyLi44MzkzMTJkNjczZDk0MzFiMjk2N2FjODNmYTA2ZGJiNzE1YjcyNTA3IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZC5oCkBAIC0yOCw2ICsyOCw3IEBACiAjaW5jbHVk
ZSAiRHJhZ0ltYWdlLmgiCiAjaW5jbHVkZSAiVVJMLmgiCiAjaW5jbHVkZSA8d3RmL0hhc2hNYXAu
aD4KKyNpbmNsdWRlIDx3dGYvTGlzdEhhc2hTZXQuaD4KICNpbmNsdWRlIDx3dGYvTm9uY29weWFi
bGUuaD4KICNpbmNsdWRlIDx3dGYvVmVjdG9yLmg+CiAjaW5jbHVkZSA8d3RmL3RleHQvV1RGU3Ry
aW5nLmg+CkBAIC0xNzEsOCArMTcyLDYgQEAgV0VCQ09SRV9FWFBPUlQgUGFzdGVib2FyZEN1c3Rv
bURhdGEgY3VzdG9tRGF0YUZyb21TaGFyZWRCdWZmZXIoY29uc3QgU2hhcmVkQnVmZmUKIGNvbnN0
IGNoYXIgY3VzdG9tV2ViS2l0UGFzdGVib2FyZERhdGFUeXBlW10gPSAiY29tLmFwcGxlLldlYktp
dC5jdXN0b20tcGFzdGVib2FyZC1kYXRhIjsKICNlbmRpZgogCi1ib29sIGlzU2FmZVR5cGVGb3JE
T01Ub1JlYWRBbmRXcml0ZShjb25zdCBTdHJpbmcmIHR5cGUpOwotCiBjbGFzcyBQYXN0ZWJvYXJk
IHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShQYXN0ZWJvYXJkKTsgV1RGX01BS0VfRkFTVF9B
TExPQ0FURUQ7CiBwdWJsaWM6CkBAIC0xOTIsMTIgKzE5MSwxNiBAQCBwdWJsaWM6CiAKICAgICBX
RUJDT1JFX0VYUE9SVCBzdGF0aWMgc3RkOjp1bmlxdWVfcHRyPFBhc3RlYm9hcmQ+IGNyZWF0ZUZv
ckNvcHlBbmRQYXN0ZSgpOwogCisgICAgc3RhdGljIGJvb2wgaXNTYWZlVHlwZUZvckRPTVRvUmVh
ZEFuZFdyaXRlKGNvbnN0IFN0cmluZyYpOworCiAgICAgdmlydHVhbCBib29sIGlzU3RhdGljKCkg
Y29uc3QgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgIHZpcnR1YWwgYm9vbCBoYXNEYXRhKCk7Ci0g
ICAgdmlydHVhbCBWZWN0b3I8U3RyaW5nPiB0eXBlc0ZvckJpbmRpbmdzKCk7CisgICAgdmlydHVh
bCBWZWN0b3I8U3RyaW5nPiB0eXBlc1NhZmVGb3JCaW5kaW5ncygpOworICAgIHZpcnR1YWwgVmVj
dG9yPFN0cmluZz4gdHlwZXNGb3JMZWdhY3lVbnNhZmVCaW5kaW5ncygpOwogICAgIHZpcnR1YWwg
VmVjdG9yPFN0cmluZz4gdHlwZXNUcmVhdGVkQXNGaWxlcygpOwotICAgIHZpcnR1YWwgU3RyaW5n
IHJlYWRTdHJpbmdGb3JCaW5kaW5ncyhjb25zdCBTdHJpbmcmIHR5cGUpOworICAgIHZpcnR1YWwg
U3RyaW5nIHJlYWRTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlKTsKKyAgICB2aXJ0dWFsIFN0cmlu
ZyByZWFkU3RyaW5nSW5DdXN0b21EYXRhKGNvbnN0IFN0cmluZyYgdHlwZSk7CiAKICAgICB2aXJ0
dWFsIHZvaWQgd3JpdGVTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRh
dGEpOwogICAgIHZpcnR1YWwgdm9pZCBjbGVhcigpOwpAQCAtMjc4LDYgKzI4MSw4IEBAIHByaXZh
dGU6CiAjZW5kaWYKIAogI2lmIFBMQVRGT1JNKENPQ09BKQorICAgIFN0cmluZyByZWFkUGxhdGZv
cm1WYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZyYgZG9tVHlwZSwgbG9uZyBjaGFuZ2VDb3VudCwg
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSk7CisgICAgc3RhdGljIHZvaWQgYWRkSFRNTENs
aXBib2FyZFR5cGVzRm9yQ29jb2FUeXBlKExpc3RIYXNoU2V0PFN0cmluZz4mIHJlc3VsdFR5cGVz
LCBjb25zdCBTdHJpbmcmIGNvY29hVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSk7
CiAgICAgU3RyaW5nIHJlYWRTdHJpbmdGb3JQbGF0Zm9ybVR5cGUoY29uc3QgU3RyaW5nJik7CiAj
ZW5kaWYKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3RhdGljUGFzdGVi
b2FyZC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TdGF0aWNQYXN0ZWJvYXJkLmNwcApp
bmRleCA3MTFmYTYzMjI3YmVjZDczY2ViYTQwMGZiNDMxNDMxNDUzNTViYjgyLi5lOGY3ZWY1NTcz
OTJlOTE0M2NlOGQ2MzdmNDZlY2JlMTJhN2VmODdiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9TdGF0aWNQYXN0ZWJvYXJkLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9TdGF0aWNQYXN0ZWJvYXJkLmNwcApAQCAtNDAsMjAgKzQwLDE5IEBAIGJvb2wgU3RhdGlj
UGFzdGVib2FyZDo6aGFzRGF0YSgpCiAgICAgcmV0dXJuICFtX3BsYXRmb3JtRGF0YS5pc0VtcHR5
KCkgfHwgIW1fY3VzdG9tRGF0YS5pc0VtcHR5KCk7CiB9CiAKLVN0cmluZyBTdGF0aWNQYXN0ZWJv
YXJkOjpyZWFkU3RyaW5nRm9yQmluZGluZ3MoY29uc3QgU3RyaW5nJiB0eXBlKQorU3RyaW5nIFN0
YXRpY1Bhc3RlYm9hcmQ6OnJlYWRTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlKQogewotICAgIGlm
IChtX3BsYXRmb3JtRGF0YS5jb250YWlucyh0eXBlKSkKLSAgICAgICAgcmV0dXJuIG1fcGxhdGZv
cm1EYXRhLmdldCh0eXBlKTsKLQotICAgIGlmIChtX2N1c3RvbURhdGEuY29udGFpbnModHlwZSkp
Ci0gICAgICAgIHJldHVybiBtX2N1c3RvbURhdGEuZ2V0KHR5cGUpOworICAgIHJldHVybiBtX3Bs
YXRmb3JtRGF0YS5nZXQodHlwZSk7Cit9CiAKLSAgICByZXR1cm4geyB9OworU3RyaW5nIFN0YXRp
Y1Bhc3RlYm9hcmQ6OnJlYWRTdHJpbmdJbkN1c3RvbURhdGEoY29uc3QgU3RyaW5nJiB0eXBlKQor
eworICAgIHJldHVybiBtX2N1c3RvbURhdGEuZ2V0KHR5cGUpOwogfQogCiB2b2lkIFN0YXRpY1Bh
c3RlYm9hcmQ6OndyaXRlU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiB2
YWx1ZSkKIHsKLSAgICBhdXRvJiBwYXN0ZWJvYXJkRGF0YSA9IGlzU2FmZVR5cGVGb3JET01Ub1Jl
YWRBbmRXcml0ZSh0eXBlKSA/IG1fcGxhdGZvcm1EYXRhIDogbV9jdXN0b21EYXRhOworICAgIGF1
dG8mIHBhc3RlYm9hcmREYXRhID0gUGFzdGVib2FyZDo6aXNTYWZlVHlwZUZvckRPTVRvUmVhZEFu
ZFdyaXRlKHR5cGUpID8gbV9wbGF0Zm9ybURhdGEgOiBtX2N1c3RvbURhdGE7CiAgICAgaWYgKHBh
c3RlYm9hcmREYXRhLnNldCh0eXBlLCB2YWx1ZSkuaXNOZXdFbnRyeSkKICAgICAgICAgbV90eXBl
cy5hcHBlbmQodHlwZSk7CiAgICAgZWxzZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9TdGF0aWNQYXN0ZWJvYXJkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TdGF0
aWNQYXN0ZWJvYXJkLmgKaW5kZXggYmNiNmY3YTQwNmFiZjgxY2I0NWQwMDUzYWNhNzU1OWFiMWRi
OTRkMC4uMjg1MGIzMmNmNzNkZDMzMDAwM2NjMjRiMDI1ZTBlYzAzZDQ3NTc2MyAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3RhdGljUGFzdGVib2FyZC5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1N0YXRpY1Bhc3RlYm9hcmQuaApAQCAtNDEsOSArNDEsMTEgQEAg
cHVibGljOgogICAgIGJvb2wgaXNTdGF0aWMoKSBjb25zdCBmaW5hbCB7IHJldHVybiB0cnVlOyB9
CiAKICAgICBib29sIGhhc0RhdGEoKSBmaW5hbDsKLSAgICBWZWN0b3I8U3RyaW5nPiB0eXBlc0Zv
ckJpbmRpbmdzKCkgZmluYWwgeyByZXR1cm4gbV90eXBlczsgfQorICAgIFZlY3RvcjxTdHJpbmc+
IHR5cGVzU2FmZUZvckJpbmRpbmdzKCkgZmluYWwgeyByZXR1cm4gbV90eXBlczsgfQorICAgIFZl
Y3RvcjxTdHJpbmc+IHR5cGVzRm9yTGVnYWN5VW5zYWZlQmluZGluZ3MoKSBmaW5hbCB7IHJldHVy
biBtX3R5cGVzOyB9CiAgICAgVmVjdG9yPFN0cmluZz4gdHlwZXNUcmVhdGVkQXNGaWxlcygpIGZp
bmFsIHsgcmV0dXJuIHsgfTsgfQotICAgIFN0cmluZyByZWFkU3RyaW5nRm9yQmluZGluZ3MoY29u
c3QgU3RyaW5nJiB0eXBlKSBmaW5hbDsKKyAgICBTdHJpbmcgcmVhZFN0cmluZyhjb25zdCBTdHJp
bmcmIHR5cGUpIGZpbmFsOworICAgIFN0cmluZyByZWFkU3RyaW5nSW5DdXN0b21EYXRhKGNvbnN0
IFN0cmluZyYgdHlwZSkgZmluYWw7CiAKICAgICB2b2lkIHdyaXRlU3RyaW5nKGNvbnN0IFN0cmlu
ZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKSBmaW5hbDsKICAgICB2b2lkIGNsZWFyKCkgZmlu
YWw7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QYXN0ZWJvYXJk
Q29jb2EubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QYXN0ZWJvYXJkQ29jb2Eu
bW0KaW5kZXggZTc1MDlmZTE1YWRlNjdlOGZiMWJkZWQ0ODU1OWM0YWY5N2IzNjY3MC4uZDQzMDNk
OTE4YjgwMjdiNTRlNjk1ZTZjNTg4MWFkNTMwMzlkNjRmZCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vY29jb2EvUGFzdGVib2FyZENvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL1Bhc3RlYm9hcmRDb2NvYS5tbQpAQCAtMjgsNiArMjgsNyBAQAog
CiAjaW5jbHVkZSAiUGFzdGVib2FyZFN0cmF0ZWd5LmgiCiAjaW5jbHVkZSAiUGxhdGZvcm1TdHJh
dGVnaWVzLmgiCisjaW5jbHVkZSAiU2V0dGluZ3MuaCIKICNpbmNsdWRlICJTaGFyZWRCdWZmZXIu
aCIKICNpbmNsdWRlIDxJbWFnZUlPL0ltYWdlSU8uaD4KICNpbmNsdWRlIDx3dGYvTGlzdEhhc2hT
ZXQuaD4KQEAgLTE1MSw2ICsxNTIsMzYgQEAgVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6dHlw
ZXNUcmVhdGVkQXNGaWxlcygpCiAgICAgcmV0dXJuIHR5cGVzOwogfQogCitWZWN0b3I8U3RyaW5n
PiBQYXN0ZWJvYXJkOjp0eXBlc1NhZmVGb3JCaW5kaW5ncygpCit7CisgICAgVmVjdG9yPFN0cmlu
Zz4gdHlwZXMgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnR5
cGVzU2FmZUZvckRPTVRvUmVhZEFuZFdyaXRlKG1fcGFzdGVib2FyZE5hbWUpOworCisgICAgLy8g
RW5mb3JjZSBjaGFuZ2VDb3VudCBvdXJzZWx2ZXMgZm9yIHNlY3VyaXR5LiBXZSBjaGVjayBhZnRl
ciByZWFkaW5nIGluc3RlYWQgb2YgYmVmb3JlIHRvIGJlCisgICAgLy8gc3VyZSBpdCBkb2Vzbid0
IGNoYW5nZSBiZXR3ZWVuIG91ciB0ZXN0aW5nIHRoZSBjaGFuZ2UgY291bnQgYW5kIGFjY2Vzc2lu
ZyB0aGUgZGF0YS4KKyAgICBpZiAobV9jaGFuZ2VDb3VudCAhPSBwbGF0Zm9ybVN0cmF0ZWdpZXMo
KS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmNoYW5nZUNvdW50KG1fcGFzdGVib2FyZE5hbWUpKQor
ICAgICAgICByZXR1cm4geyB9OworCisgICAgcmV0dXJuIHR5cGVzOworfQorCitWZWN0b3I8U3Ry
aW5nPiBQYXN0ZWJvYXJkOjp0eXBlc0ZvckxlZ2FjeVVuc2FmZUJpbmRpbmdzKCkKK3sKKyAgICBW
ZWN0b3I8U3RyaW5nPiB0eXBlczsKKyAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2Fy
ZFN0cmF0ZWd5KCktPmdldFR5cGVzKHR5cGVzLCBtX3Bhc3RlYm9hcmROYW1lKTsKKworICAgIC8v
IEVuZm9yY2UgY2hhbmdlQ291bnQgb3Vyc2VsdmVzIGZvciBzZWN1cml0eS4gV2UgY2hlY2sgYWZ0
ZXIgcmVhZGluZyBpbnN0ZWFkIG9mIGJlZm9yZSB0byBiZQorICAgIC8vIHN1cmUgaXQgZG9lc24n
dCBjaGFuZ2UgYmV0d2VlbiBvdXIgdGVzdGluZyB0aGUgY2hhbmdlIGNvdW50IGFuZCBhY2Nlc3Np
bmcgdGhlIGRhdGEuCisgICAgaWYgKG1fY2hhbmdlQ291bnQgIT0gcGxhdGZvcm1TdHJhdGVnaWVz
KCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5jaGFuZ2VDb3VudChtX3Bhc3RlYm9hcmROYW1lKSkK
KyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIExpc3RIYXNoU2V0PFN0cmluZz4gcmVzdWx0Owor
ICAgIGZvciAoYXV0byYgY29jb2FUeXBlIDogdHlwZXMpCisgICAgICAgIGFkZEhUTUxDbGlwYm9h
cmRUeXBlc0ZvckNvY29hVHlwZShyZXN1bHQsIGNvY29hVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSk7
CisKKyAgICBjb3B5VG9WZWN0b3IocmVzdWx0LCB0eXBlcyk7CisgICAgcmV0dXJuIHR5cGVzOwor
fQorCiB2b2lkIFBhc3RlYm9hcmQ6OnJlYWQoUGFzdGVib2FyZEZpbGVSZWFkZXImIHJlYWRlcikK
IHsKICAgICBhdXRvIGltYWdlVHlwZSA9IG1pbWVUeXBlVG9JbWFnZVR5cGUocmVhZGVyLnR5cGUp
OwpAQCAtMTk0LDUgKzIyNSwzMiBAQCB2b2lkIFBhc3RlYm9hcmQ6OnJlYWQoUGFzdGVib2FyZEZp
bGVSZWFkZXImIHJlYWRlcikKICAgICByZWFkZXIucmVhZChpbWFnZVR5cGVUb0Zha2VGaWxlbmFt
ZShpbWFnZVR5cGUpLCBidWZmZXIucmVsZWFzZU5vbk51bGwoKSk7CiB9CiAKK1N0cmluZyBQYXN0
ZWJvYXJkOjpyZWFkU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICByZXR1cm4gcmVh
ZFBsYXRmb3JtVmFsdWVBc1N0cmluZyh0eXBlLCBtX2NoYW5nZUNvdW50LCBtX3Bhc3RlYm9hcmRO
YW1lKTsKK30KKworU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRTdHJpbmdJbkN1c3RvbURhdGEoY29u
c3QgU3RyaW5nJiB0eXBlKQoreworICAgIGF1dG8gYnVmZmVyID0gcGxhdGZvcm1TdHJhdGVnaWVz
KCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5idWZmZXJGb3JUeXBlKGN1c3RvbVdlYktpdFBhc3Rl
Ym9hcmREYXRhVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSk7CisgICAgaWYgKCFidWZmZXIpCisgICAg
ICAgIHJldHVybiB7IH07CisKKyAgICBOU1N0cmluZyAqY3VzdG9tRGF0YVZhbHVlID0gY3VzdG9t
RGF0YUZyb21TaGFyZWRCdWZmZXIoKmJ1ZmZlcikuc2FtZU9yaWdpbkN1c3RvbURhdGEuZ2V0KHR5
cGUpOworICAgIGlmICghY3VzdG9tRGF0YVZhbHVlLmxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHsg
fTsKKyAgICByZXR1cm4gY3VzdG9tRGF0YVZhbHVlOworfQorCit2b2lkIFBhc3RlYm9hcmQ6Ondy
aXRlQ3VzdG9tRGF0YShjb25zdCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSYgZGF0YSkKK3sKKyAgICBt
X2NoYW5nZUNvdW50ID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgp
LT53cml0ZUN1c3RvbURhdGEoZGF0YSwgbV9wYXN0ZWJvYXJkTmFtZSk7Cit9CisKK2xvbmcgUGFz
dGVib2FyZDo6Y2hhbmdlQ291bnQoKSBjb25zdAoreworICAgIHJldHVybiBwbGF0Zm9ybVN0cmF0
ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmNoYW5nZUNvdW50KG1fcGFzdGVib2FyZE5h
bWUpOworfQorCiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9Q
YXN0ZWJvYXJkR3RrLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJk
R3RrLmNwcAppbmRleCA4NGE1N2RlODQ1Mzg0NjY2MTZmMjhlNzgzYjQ1YWM4NWI5ZjM5MjRmLi5i
ZDU4MDBmYTE0MzZlOWE5Zjk0YTg5YWVkNzY1YWZkZmY5ZGIyN2RhIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCkBAIC0yNTIsNyArMjUyLDEzIEBA
IGJvb2wgUGFzdGVib2FyZDo6aGFzRGF0YSgpCiAgICAgcmV0dXJuIG1fc2VsZWN0aW9uRGF0YS0+
aGFzVGV4dCgpIHx8IG1fc2VsZWN0aW9uRGF0YS0+aGFzTWFya3VwKCkgfHwgbV9zZWxlY3Rpb25E
YXRhLT5oYXNVUklMaXN0KCkgfHwgbV9zZWxlY3Rpb25EYXRhLT5oYXNJbWFnZSgpIHx8IG1fc2Vs
ZWN0aW9uRGF0YS0+aGFzVW5rbm93blR5cGVEYXRhKCk7CiB9CiAKLVZlY3RvcjxTdHJpbmc+IFBh
c3RlYm9hcmQ6OnR5cGVzRm9yQmluZGluZ3MoKQorVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6
dHlwZXNTYWZlRm9yQmluZGluZ3MoKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7IC8vIHdlYmtp
dC5vcmcvYi8xNzc2MzM6IFtHVEtdIE1vdmUgdG8gbmV3IFBhc3RlYm9hcmQgQVBJCisgICAgcmV0
dXJuIHsgfTsKK30KKworVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6dHlwZXNGb3JMZWdhY3lV
bnNhZmVCaW5kaW5ncygpCiB7CiAgICAgcmVhZEZyb21DbGlwYm9hcmQoKTsKIApAQCAtMjg1LDcg
KzI5MSw3IEBAIFZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnR5cGVzVHJlYXRlZEFzRmlsZXMo
KQogICAgIHJldHVybiB7IH07CiB9CiAKLVN0cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nRm9y
QmluZGluZ3MoY29uc3QgU3RyaW5nJiB0eXBlKQorU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRTdHJp
bmcoY29uc3QgU3RyaW5nJiB0eXBlKQogewogICAgIHJlYWRGcm9tQ2xpcGJvYXJkKCk7CiAKQEAg
LTMwNyw2ICszMTMsMTIgQEAgU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRTdHJpbmdGb3JCaW5kaW5n
cyhjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCitTdHJpbmcg
UGFzdGVib2FyZDo6cmVhZFN0cmluZ0luQ3VzdG9tRGF0YShjb25zdCBTdHJpbmcmKQoreworICAg
IG5vdEltcGxlbWVudGVkKCk7IC8vIHdlYmtpdC5vcmcvYi8xNzc2MzM6IFtHVEtdIE1vdmUgdG8g
bmV3IFBhc3RlYm9hcmQgQVBJCisgICAgcmV0dXJuIHsgfTsKK30KKwogVmVjdG9yPFN0cmluZz4g
UGFzdGVib2FyZDo6cmVhZEZpbGVuYW1lcygpCiB7CiAgICAgcmVhZEZyb21DbGlwYm9hcmQoKTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QYXN0ZWJvYXJkSU9TLm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Bhc3RlYm9hcmRJT1MubW0KaW5kZXggM2Uy
ODE1ZDYxZTU2NTEwOTEyMGYzYjZjYmM1MjIwNzYxZDQwNDNjYi4uZTk4YTEyODExNDk0YTk4YTc5
ZmE4YjI2NDJkMGJlM2ZiMTFkMzM5MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vaW9zL1Bhc3RlYm9hcmRJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9z
L1Bhc3RlYm9hcmRJT1MubW0KQEAgLTQ2LDcgKzQ2LDYgQEAKICNpbXBvcnQgIlBsYXRmb3JtU3Ry
YXRlZ2llcy5oIgogI2ltcG9ydCAiUmVuZGVySW1hZ2UuaCIKICNpbXBvcnQgIlJ1bnRpbWVBcHBs
aWNhdGlvbkNoZWNrcy5oIgotI2ltcG9ydCAiU2V0dGluZ3MuaCIKICNpbXBvcnQgIlNoYXJlZEJ1
ZmZlci5oIgogI2ltcG9ydCAiVGV4dC5oIgogI2ltcG9ydCAiVVJMLmgiCkBAIC0xMTcsMTEgKzEx
Niw2IEBAIHN0ZDo6dW5pcXVlX3B0cjxQYXN0ZWJvYXJkPiBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JD
b3B5QW5kUGFzdGUoKQogICAgIHJldHVybiBzdGQ6Om1ha2VfdW5pcXVlPFBhc3RlYm9hcmQ+KGNo
YW5nZUNvdW50Rm9yUGFzdGVib2FyZCgpKTsKIH0KIAotdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUN1
c3RvbURhdGEoY29uc3QgUGFzdGVib2FyZEN1c3RvbURhdGEmIGRhdGEpCi17Ci0gICAgbV9jaGFu
Z2VDb3VudCA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+d3Jp
dGVDdXN0b21EYXRhKGRhdGEsIG1fcGFzdGVib2FyZE5hbWUpOwotfQotCiB2b2lkIFBhc3RlYm9h
cmQ6OndyaXRlKGNvbnN0IFBhc3RlYm9hcmRXZWJDb250ZW50JiBjb250ZW50KQogewogICAgIHBs
YXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+d3JpdGVUb1Bhc3RlYm9h
cmQoY29udGVudCwgbV9wYXN0ZWJvYXJkTmFtZSk7CkBAIC0yNzksMTEgKzI3Myw2IEBAIHZvaWQg
UGFzdGVib2FyZDo6cmVhZFJlc3BlY3RpbmdVVElGaWRlbGl0aWVzKFBhc3RlYm9hcmRXZWJDb250
ZW50UmVhZGVyJiByZWFkZXIpCiAgICAgfQogfQogCi1sb25nIFBhc3RlYm9hcmQ6OmNoYW5nZUNv
dW50KCkgY29uc3QKLXsKLSAgICByZXR1cm4gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9h
cmRTdHJhdGVneSgpLT5jaGFuZ2VDb3VudChtX3Bhc3RlYm9hcmROYW1lKTsKLX0KLQogTlNBcnJh
eSAqUGFzdGVib2FyZDo6c3VwcG9ydGVkV2ViQ29udGVudFBhc3RlYm9hcmRUeXBlcygpCiB7CiAg
ICAgcmV0dXJuIEBbKGlkKVdlYkFyY2hpdmVQYm9hcmRUeXBlLCAoaWQpa1VUVHlwZUZsYXRSVEZE
LCAoaWQpa1VUVHlwZVJURiwgKGlkKWtVVFR5cGVIVE1MLCAoaWQpa1VUVHlwZVBORywgKGlkKWtV
VFR5cGVUSUZGLCAoaWQpa1VUVHlwZUpQRUcsIChpZClrVVRUeXBlR0lGLCAoaWQpa1VUVHlwZVVS
TCwgKGlkKWtVVFR5cGVUZXh0XTsKQEAgLTMzOCw3ICszMjcsNyBAQCB2b2lkIFBhc3RlYm9hcmQ6
OmNsZWFyKCkKICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCkt
PndyaXRlVG9QYXN0ZWJvYXJkKFN0cmluZygpLCBTdHJpbmcoKSwgbV9wYXN0ZWJvYXJkTmFtZSk7
CiB9CiAKLXN0YXRpYyBTdHJpbmcgcmVhZFBsYXRmb3JtVmFsdWVBc1N0cmluZyhjb25zdCBTdHJp
bmcmIGRvbVR5cGUsIGxvbmcgY2hhbmdlQ291bnQsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5h
bWUpCitTdHJpbmcgUGFzdGVib2FyZDo6cmVhZFBsYXRmb3JtVmFsdWVBc1N0cmluZyhjb25zdCBT
dHJpbmcmIGRvbVR5cGUsIGxvbmcgY2hhbmdlQ291bnQsIGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZE5hbWUpCiB7CiAgICAgUGFzdGVib2FyZFN0cmF0ZWd5JiBzdHJhdGVneSA9ICpwbGF0Zm9ybVN0
cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCk7CiAKQEAgLTM3MiwyMSArMzYxLDcgQEAg
c3RhdGljIFN0cmluZyByZWFkUGxhdGZvcm1WYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZyYgZG9t
VHlwZSwgbG9uZyBjaGFuZ2VDb3VudCwKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLVN0cmlu
ZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nRm9yQmluZGluZ3MoY29uc3QgU3RyaW5nJiB0eXBlKQot
ewotICAgIGlmICghU2V0dGluZ3M6OmN1c3RvbVBhc3RlYm9hcmREYXRhRW5hYmxlZCgpIHx8IGlz
U2FmZVR5cGVGb3JET01Ub1JlYWRBbmRXcml0ZSh0eXBlKSkKLSAgICAgICAgcmV0dXJuIHJlYWRQ
bGF0Zm9ybVZhbHVlQXNTdHJpbmcodHlwZSwgbV9jaGFuZ2VDb3VudCwgbV9wYXN0ZWJvYXJkTmFt
ZSk7Ci0KLSAgICBpZiAoYXV0byBidWZmZXIgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVi
b2FyZFN0cmF0ZWd5KCktPmJ1ZmZlckZvclR5cGUoY3VzdG9tV2ViS2l0UGFzdGVib2FyZERhdGFU
eXBlLCBtX3Bhc3RlYm9hcmROYW1lKSkgewotICAgICAgICBOU1N0cmluZyAqY3VzdG9tRGF0YVZh
bHVlID0gY3VzdG9tRGF0YUZyb21TaGFyZWRCdWZmZXIoKmJ1ZmZlcikuc2FtZU9yaWdpbkN1c3Rv
bURhdGEuZ2V0KHR5cGUpOwotICAgICAgICBpZiAoY3VzdG9tRGF0YVZhbHVlLmxlbmd0aCkKLSAg
ICAgICAgICAgIHJldHVybiBjdXN0b21EYXRhVmFsdWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsg
fTsKLX0KLQotc3RhdGljIHZvaWQgYWRkSFRNTENsaXBib2FyZFR5cGVzRm9yQ29jb2FUeXBlKExp
c3RIYXNoU2V0PFN0cmluZz4mIHJlc3VsdFR5cGVzLCBOU1N0cmluZyAqY29jb2FUeXBlKQordm9p
ZCBQYXN0ZWJvYXJkOjphZGRIVE1MQ2xpcGJvYXJkVHlwZXNGb3JDb2NvYVR5cGUoTGlzdEhhc2hT
ZXQ8U3RyaW5nPiYgcmVzdWx0VHlwZXMsIGNvbnN0IFN0cmluZyYgY29jb2FUeXBlLCBjb25zdCBT
dHJpbmcmKQogewogICAgIC8vIFVUSSBtYXkgbm90IGRvIHRoZXNlIHJpZ2h0LCBzbyBtYWtlIHN1
cmUgd2UgZ2V0IHRoZSByaWdodCwgcHJlZGljdGFibGUgcmVzdWx0LgogICAgIGlmIChbY29jb2FU
eXBlIGlzRXF1YWxUb1N0cmluZzooTlNTdHJpbmcgKilrVVRUeXBlUGxhaW5UZXh0XQpAQCAtNDIx
LDMyICszOTYsNiBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlU3RyaW5nKGNvbnN0IFN0cmluZyYg
dHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKQogICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0
ZWJvYXJkU3RyYXRlZ3koKS0+d3JpdGVUb1Bhc3RlYm9hcmQoY29jb2FUeXBlLmdldCgpLCBkYXRh
LCBtX3Bhc3RlYm9hcmROYW1lKTsKIH0KIAotVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6dHlw
ZXNGb3JCaW5kaW5ncygpCi17Ci0gICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7Ci0gICAgaWYgKFNl
dHRpbmdzOjpjdXN0b21QYXN0ZWJvYXJkRGF0YUVuYWJsZWQoKSkKLSAgICAgICAgdHlwZXMgPSBw
bGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnR5cGVzU2FmZUZvckRP
TVRvUmVhZEFuZFdyaXRlKG1fcGFzdGVib2FyZE5hbWUpOwotICAgIGVsc2UKLSAgICAgICAgcGxh
dGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5nZXRUeXBlcyh0eXBlcywg
bV9wYXN0ZWJvYXJkTmFtZSk7Ci0KLSAgICAvLyBFbmZvcmNlIGNoYW5nZUNvdW50IG91cnNlbHZl
cyBmb3Igc2VjdXJpdHkuIFdlIGNoZWNrIGFmdGVyIHJlYWRpbmcgaW5zdGVhZCBvZiBiZWZvcmUg
dG8gYmUKLSAgICAvLyBzdXJlIGl0IGRvZXNuJ3QgY2hhbmdlIGJldHdlZW4gb3VyIHRlc3Rpbmcg
dGhlIGNoYW5nZSBjb3VudCBhbmQgYWNjZXNzaW5nIHRoZSBkYXRhLgotICAgIGF1dG8gY2hhbmdl
Q291bnQgPSBjaGFuZ2VDb3VudEZvclBhc3RlYm9hcmQobV9wYXN0ZWJvYXJkTmFtZSk7Ci0gICAg
aWYgKG1fY2hhbmdlQ291bnQgIT0gY2hhbmdlQ291bnQpCi0gICAgICAgIHJldHVybiB7IH07Ci0K
LSAgICBpZiAoU2V0dGluZ3M6OmN1c3RvbVBhc3RlYm9hcmREYXRhRW5hYmxlZCgpKQotICAgICAg
ICByZXR1cm4gdHlwZXM7Ci0KLSAgICBMaXN0SGFzaFNldDxTdHJpbmc+IHJlc3VsdDsKLSAgICBm
b3IgKGF1dG8gY29jb2FUeXBlIDogdHlwZXMpCi0gICAgICAgIGFkZEhUTUxDbGlwYm9hcmRUeXBl
c0ZvckNvY29hVHlwZShyZXN1bHQsIGNvY29hVHlwZSk7Ci0KLSAgICBWZWN0b3I8U3RyaW5nPiB2
ZWN0b3I7Ci0gICAgY29weVRvVmVjdG9yKHJlc3VsdCwgdmVjdG9yKTsKLSAgICByZXR1cm4gdmVj
dG9yOwotfQotCiBWZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjpyZWFkRmlsZW5hbWVzKCkKIHsK
ICAgICBWZWN0b3I8U3RyaW5nPiBmaWxlbmFtZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbQppbmRleCA2MmE0MGM0ZDk1YTdi
NWY5YjgwMTNhNjU0M2YxYmU1MjMzMTkzN2NjLi4yYjhhNDc3MjljOGFhZWNhZGFkYzY5Y2I3YTMx
NWQ3MzVlNjcwZjc2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxh
dGZvcm1QYXN0ZWJvYXJkSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9Q
bGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0KQEAgLTM3NSw3ICszNzUsNyBAQCBWZWN0b3I8U3RyaW5n
PiBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnR5cGVzU2FmZUZvckRPTVRvUmVhZEFuZFdyaXRlKCkgY29u
c3QKICAgICAgICAgaWYgKFt0eXBlIGlzRXF1YWxUb1N0cmluZzpAKGN1c3RvbVdlYktpdFBhc3Rl
Ym9hcmREYXRhVHlwZSldKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKGlz
U2FmZVR5cGVGb3JET01Ub1JlYWRBbmRXcml0ZSh0eXBlKSkgeworICAgICAgICBpZiAoUGFzdGVi
b2FyZDo6aXNTYWZlVHlwZUZvckRPTVRvUmVhZEFuZFdyaXRlKHR5cGUpKSB7CiAgICAgICAgICAg
ICBkb21QYXN0ZWJvYXJkVHlwZXMuYWRkKHR5cGUpOwogICAgICAgICAgICAgY29udGludWU7CiAg
ICAgICAgIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJv
YXJkTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0K
aW5kZXggMTczMWQ2YTA5ZDg4NzU0NmMyMmRhODc3N2NkOTBjYzJkNjhiZDY1OS4uMjcwZGEwZDA5
ZGJjYzM4MDZkYmUwZGUzZmJjODY0NDM3YjU4YWViOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0KQEAgLTI2LDE4ICsyNiw3IEBACiAjaW1wb3J0ICJj
b25maWcuaCIKICNpbXBvcnQgIlBhc3RlYm9hcmQuaCIKIAotI2ltcG9ydCAiQ2FjaGVkSW1hZ2Uu
aCIKLSNpbXBvcnQgIkRvY3VtZW50LmgiCi0jaW1wb3J0ICJEb2N1bWVudEZyYWdtZW50LmgiCi0j
aW1wb3J0ICJEb2N1bWVudExvYWRlci5oIgogI2ltcG9ydCAiRHJhZ0RhdGEuaCIKLSNpbXBvcnQg
IkVkaXRpbmcuaCIKLSNpbXBvcnQgIkVkaXRvci5oIgotI2ltcG9ydCAiRWRpdG9yQ2xpZW50Lmgi
Ci0jaW1wb3J0ICJGcmFtZS5oIgotI2ltcG9ydCAiRnJhbWVMb2FkZXJDbGllbnQuaCIKLSNpbXBv
cnQgIkZyYW1lVmlldy5oIgotI2ltcG9ydCAiSGl0VGVzdFJlc3VsdC5oIgogI2ltcG9ydCAiSW1h
Z2UuaCIKICNpbXBvcnQgIkxlZ2FjeVdlYkFyY2hpdmUuaCIKICNpbXBvcnQgIkxvYWRlck5TVVJM
RXh0cmFzLmgiCkBAIC00NSwxNSArMzQsMTAgQEAKICNpbXBvcnQgIlBhc3RlYm9hcmRTdHJhdGVn
eS5oIgogI2ltcG9ydCAiUGxhdGZvcm1QYXN0ZWJvYXJkLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVN0
cmF0ZWdpZXMuaCIKLSNpbXBvcnQgIlJlbmRlckltYWdlLmgiCi0jaW1wb3J0ICJTZXR0aW5ncy5o
IgotI2ltcG9ydCAiVGV4dC5oIgogI2ltcG9ydCAiVVJMLmgiCiAjaW1wb3J0ICJVVElVdGlsaXRp
ZXMuaCIKICNpbXBvcnQgIldlYkNvcmVOU1N0cmluZ0V4dHJhcy5oIgotI2ltcG9ydCAiV2ViQ29y
ZVN5c3RlbUludGVyZmFjZS5oIgogI2ltcG9ydCAiV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFz
LmgiCi0jaW1wb3J0ICJtYXJrdXAuaCIKICNpbXBvcnQgPHBhbC9zcGkvY2cvQ29yZUdyYXBoaWNz
U1BJLmg+CiAjaW1wb3J0IDxwYWwvc3BpL21hYy9ISVNlcnZpY2VzU1BJLmg+CiAjaW1wb3J0IDx3
dGYvUmV0YWluUHRyLmg+CkBAIC05MSwxMSArNzUsNiBAQCBzdGF0aWMgVmVjdG9yPFN0cmluZz4g
d3JpdGFibGVUeXBlc0ZvckltYWdlKCkKICAgICByZXR1cm4gdHlwZXM7CiB9CiAKLWxvbmcgUGFz
dGVib2FyZDo6Y2hhbmdlQ291bnQoKSBjb25zdAotewotICAgIHJldHVybiBwbGF0Zm9ybVN0cmF0
ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmNoYW5nZUNvdW50KG1fcGFzdGVib2FyZE5h
bWUpOwotfQotCiBOU0FycmF5ICpQYXN0ZWJvYXJkOjpzdXBwb3J0ZWRGaWxlVXBsb2FkUGFzdGVi
b2FyZFR5cGVzKCkKIHsKICAgICByZXR1cm4gQFsgKE5TU3RyaW5nICopTlNGaWxlc1Byb21pc2VQ
Ym9hcmRUeXBlLCAoTlNTdHJpbmcgKilOU0ZpbGVuYW1lc1Bib2FyZFR5cGUgXTsKQEAgLTE3OSwx
MSArMTU4LDYgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZShjb25zdCBQYXN0ZWJvYXJkV2ViQ29u
dGVudCYgY29udGVudCkKICAgICAgICAgbV9jaGFuZ2VDb3VudCA9IHBsYXRmb3JtU3RyYXRlZ2ll
cygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+c2V0U3RyaW5nRm9yVHlwZShjb250ZW50LmRhdGFJ
blN0cmluZ0Zvcm1hdCwgTlNTdHJpbmdQYm9hcmRUeXBlLCBtX3Bhc3RlYm9hcmROYW1lKTsKIH0K
IAotdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUN1c3RvbURhdGEoY29uc3QgUGFzdGVib2FyZEN1c3Rv
bURhdGEmIGRhdGEpCi17Ci0gICAgbV9jaGFuZ2VDb3VudCA9IHBsYXRmb3JtU3RyYXRlZ2llcygp
LT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+d3JpdGVDdXN0b21EYXRhKGRhdGEsIG1fcGFzdGVib2Fy
ZE5hbWUpOwotfQotCiB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlUGxhaW5UZXh0KGNvbnN0IFN0cmlu
ZyYgdGV4dCwgU21hcnRSZXBsYWNlT3B0aW9uIHNtYXJ0UmVwbGFjZU9wdGlvbikKIHsKICAgICBW
ZWN0b3I8U3RyaW5nPiB0eXBlczsKQEAgLTQ5Myw3ICs0NjcsNyBAQCBzdGF0aWMgVmVjdG9yPFN0
cmluZz4gYWJzb2x1dGVVUkxzRnJvbVBhc3RlYm9hcmRGaWxlbmFtZXMoY29uc3QgU3RyaW5nJiBw
YXN0ZWJvYQogICAgIHJldHVybiB1cmxzOwogfQogCi1zdGF0aWMgU3RyaW5nIHJlYWRQbGF0Zm9y
bVZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nJiBkb21UeXBlLCBsb25nIGNoYW5nZUNvdW50LCBj
b25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQorU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRQbGF0
Zm9ybVZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nJiBkb21UeXBlLCBsb25nIGNoYW5nZUNvdW50
LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQogewogICAgIGNvbnN0IFN0cmluZyYgY29j
b2FUeXBlID0gY29jb2FUeXBlRnJvbUhUTUxDbGlwYm9hcmRUeXBlKGRvbVR5cGUpOwogICAgIFN0
cmluZyBjb2NvYVZhbHVlOwpAQCAtNTExLDIwICs0ODUsNiBAQCBzdGF0aWMgU3RyaW5nIHJlYWRQ
bGF0Zm9ybVZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nJiBkb21UeXBlLCBsb25nIGNoYW5nZUNv
dW50LAogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAotU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRT
dHJpbmdGb3JCaW5kaW5ncyhjb25zdCBTdHJpbmcmIHR5cGUpCi17Ci0gICAgaWYgKCFTZXR0aW5n
czo6Y3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkKCkgfHwgaXNTYWZlVHlwZUZvckRPTVRvUmVh
ZEFuZFdyaXRlKHR5cGUpKQotICAgICAgICByZXR1cm4gcmVhZFBsYXRmb3JtVmFsdWVBc1N0cmlu
Zyh0eXBlLCBtX2NoYW5nZUNvdW50LCBtX3Bhc3RlYm9hcmROYW1lKTsKLQotICAgIGlmIChhdXRv
IGJ1ZmZlciA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+YnVm
ZmVyRm9yVHlwZShjdXN0b21XZWJLaXRQYXN0ZWJvYXJkRGF0YVR5cGUsIG1fcGFzdGVib2FyZE5h
bWUpKSB7Ci0gICAgICAgIE5TU3RyaW5nICpjdXN0b21EYXRhVmFsdWUgPSBjdXN0b21EYXRhRnJv
bVNoYXJlZEJ1ZmZlcigqYnVmZmVyKS5zYW1lT3JpZ2luQ3VzdG9tRGF0YS5nZXQodHlwZSk7Ci0g
ICAgICAgIGlmIChjdXN0b21EYXRhVmFsdWUubGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIGN1
c3RvbURhdGFWYWx1ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4geyB9OwotfQotCiBzdGF0aWMgU3Ry
aW5nIHV0aVR5cGVGcm9tQ29jb2FUeXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKICAgICBpZiAo
UmV0YWluUHRyPENGU3RyaW5nUmVmPiB1dGlUeXBlID0gYWRvcHRDRihVVFR5cGVDcmVhdGVQcmVm
ZXJyZWRJZGVudGlmaWVyRm9yVGFnKGtVVFRhZ0NsYXNzTlNQYm9hcmRUeXBlLCB0eXBlLmNyZWF0
ZUNGU3RyaW5nKCkuZ2V0KCksIDApKSkgewpAQCAtNTM0LDcgKzQ5NCw3IEBAIHN0YXRpYyBTdHJp
bmcgdXRpVHlwZUZyb21Db2NvYVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQogICAgIHJldHVybiBT
dHJpbmcoKTsKIH0KIAotc3RhdGljIHZvaWQgYWRkSFRNTENsaXBib2FyZFR5cGVzRm9yQ29jb2FU
eXBlKExpc3RIYXNoU2V0PFN0cmluZz4mIHJlc3VsdFR5cGVzLCBjb25zdCBTdHJpbmcmIGNvY29h
VHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKK3ZvaWQgUGFzdGVib2FyZDo6YWRk
SFRNTENsaXBib2FyZFR5cGVzRm9yQ29jb2FUeXBlKExpc3RIYXNoU2V0PFN0cmluZz4mIHJlc3Vs
dFR5cGVzLCBjb25zdCBTdHJpbmcmIGNvY29hVHlwZSwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJk
TmFtZSkKIHsKICAgICBpZiAoY29jb2FUeXBlID09ICJOZVhUIHBsYWluIGFzY2lpIHBhc3RlYm9h
cmQgdHlwZSIpCiAgICAgICAgIHJldHVybjsgLy8gU2tpcCB0aGlzIGFuY2llbnQgdHlwZSB0aGF0
IGdldHMgYXV0by1zdXBwbGllZCBieSBzb21lIHN5c3RlbSBjb252ZXJzaW9uLgpAQCAtNTk4LDMw
ICs1NTgsNiBAQCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlw
ZSwgY29uc3QgU3RyaW5nJiBkYXRhKQogICAgIH0KIH0KIAotVmVjdG9yPFN0cmluZz4gUGFzdGVi
b2FyZDo6dHlwZXNGb3JCaW5kaW5ncygpCi17Ci0gICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7Ci0g
ICAgaWYgKFNldHRpbmdzOjpjdXN0b21QYXN0ZWJvYXJkRGF0YUVuYWJsZWQoKSkKLSAgICAgICAg
dHlwZXMgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnR5cGVz
U2FmZUZvckRPTVRvUmVhZEFuZFdyaXRlKG1fcGFzdGVib2FyZE5hbWUpOwotICAgIGVsc2UKLSAg
ICAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5nZXRUeXBl
cyh0eXBlcywgbV9wYXN0ZWJvYXJkTmFtZSk7Ci0KLSAgICAvLyBFbmZvcmNlIGNoYW5nZUNvdW50
IG91cnNlbHZlcyBmb3Igc2VjdXJpdHkuIFdlIGNoZWNrIGFmdGVyIHJlYWRpbmcgaW5zdGVhZCBv
ZiBiZWZvcmUgdG8gYmUKLSAgICAvLyBzdXJlIGl0IGRvZXNuJ3QgY2hhbmdlIGJldHdlZW4gb3Vy
IHRlc3RpbmcgdGhlIGNoYW5nZSBjb3VudCBhbmQgYWNjZXNzaW5nIHRoZSBkYXRhLgotICAgIGlm
IChtX2NoYW5nZUNvdW50ICE9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRl
Z3koKS0+Y2hhbmdlQ291bnQobV9wYXN0ZWJvYXJkTmFtZSkpCi0gICAgICAgIHJldHVybiB7IH07
Ci0KLSAgICBpZiAoU2V0dGluZ3M6OmN1c3RvbVBhc3RlYm9hcmREYXRhRW5hYmxlZCgpKQotICAg
ICAgICByZXR1cm4gdHlwZXM7Ci0KLSAgICBMaXN0SGFzaFNldDxTdHJpbmc+IHJlc3VsdDsKLSAg
ICBmb3IgKGF1dG8mIGNvY29hVHlwZSA6IHR5cGVzKQotICAgICAgICBhZGRIVE1MQ2xpcGJvYXJk
VHlwZXNGb3JDb2NvYVR5cGUocmVzdWx0LCBjb2NvYVR5cGUsIG1fcGFzdGVib2FyZE5hbWUpOwot
Ci0gICAgY29weVRvVmVjdG9yKHJlc3VsdCwgdHlwZXMpOwotICAgIHJldHVybiB0eXBlczsKLX0K
LQogVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6cmVhZEZpbGVuYW1lcygpCiB7CiAgICAgLy8g
RklYTUU6IFNlZW1zIHNpbGx5IHRvIGNvbnZlcnQgcGF0aHMgdG8gVVJMcyBhbmQgdGhlbiBiYWNr
IHRvIHBhdGhzLiBEb2VzIHRoYXQgZG8gYW55dGhpbmcgaGVscGZ1bD8KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0gYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tCmluZGV4IGI1
OTBkNjU1Nzg5NzdiOTQzOTdlOGZjMGFjMjYxMWMyZjM0ZWE3OGIuLmZkNTAwYTM4NDFiNTlmNTBk
M2E1ZjRjZDcwZTRkNTg5YWFlYjdmYjcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL21hYy9QbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vbWFjL1BsYXRmb3JtUGFzdGVib2FyZE1hYy5tbQpAQCAtMjgsNyArMjgsNiBAQAogCiAj
aW1wb3J0ICJDb2xvci5oIgogI2ltcG9ydCAiUGFzdGVib2FyZC5oIgotI2ltcG9ydCAiU2V0dGlu
Z3MuaCIKICNpbXBvcnQgIlVSTC5oIgogI2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgiCiAjaW1wb3J0
IDx3dGYvSGFzaENvdW50ZWRTZXQuaD4KQEAgLTEyNSw3ICsxMjQsNyBAQCBWZWN0b3I8U3RyaW5n
PiBQbGF0Zm9ybVBhc3RlYm9hcmQ6OnR5cGVzU2FmZUZvckRPTVRvUmVhZEFuZFdyaXRlKCkgY29u
c3QKICAgICAgICAgaWYgKFt0eXBlIGlzRXF1YWxUb1N0cmluZzpAKGN1c3RvbVdlYktpdFBhc3Rl
Ym9hcmREYXRhVHlwZSldKQogICAgICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKGlz
U2FmZVR5cGVGb3JET01Ub1JlYWRBbmRXcml0ZSh0eXBlKSkKKyAgICAgICAgaWYgKFBhc3RlYm9h
cmQ6OmlzU2FmZVR5cGVGb3JET01Ub1JlYWRBbmRXcml0ZSh0eXBlKSkKICAgICAgICAgICAgIGRv
bVBhc3RlYm9hcmRUeXBlcy5hZGQodHlwZSk7CiAgICAgICAgIGVsc2UgaWYgKGF1dG8qIGRvbVR5
cGUgPSBzYWZlVHlwZUZvckRPTVRvUmVhZEFuZFdyaXRlRm9yUGxhdGZvcm1UeXBlKHR5cGUpKSB7
CiAgICAgICAgICAgICBhdXRvIGNvZXJjZWRUeXBlID0gU3RyaW5nOjpmcm9tVVRGOChkb21UeXBl
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2lu
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcAppbmRl
eCAwZWM4NzAxZjQxZjYzMDAwOTMxNzYxODI0MGQyMzU4Y2QxNTUxODgxLi44YThjOTQ2MjI2YzU5
N2NhOGMwN2NhM2VmNDhjYmU5MjJhZWRmNTdmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCkBAIC0yNDMsNyArMjQzLDEzIEBAIHN0YXRpYyB2b2lk
IGFkZE1pbWVUeXBlc0ZvckZvcm1hdChMaXN0SGFzaFNldDxTdHJpbmc+JiByZXN1bHRzLCBjb25z
dCBGT1JNQVRFVEMmCiAgICAgfQogfQogCi1WZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBl
c0ZvckJpbmRpbmdzKCkKK1ZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnR5cGVzU2FmZUZvckJp
bmRpbmdzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB7IH07Cit9CisK
K1ZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnR5cGVzRm9yTGVnYWN5VW5zYWZlQmluZGluZ3Mo
KQogewogICAgIExpc3RIYXNoU2V0PFN0cmluZz4gcmVzdWx0czsKIApAQCAtMjgyLDcgKzI4OCw3
IEBAIFZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnR5cGVzVHJlYXRlZEFzRmlsZXMoKQogICAg
IHJldHVybiB7IH07CiB9CiAKLVN0cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nRm9yQmluZGlu
Z3MoY29uc3QgU3RyaW5nJiB0eXBlKQorU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRTdHJpbmcoY29u
c3QgU3RyaW5nJiB0eXBlKQogewogICAgIGlmICghbV9kYXRhT2JqZWN0ICYmIG1fZHJhZ0RhdGFN
YXAuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm4gIiI7CkBAIC0zMDIsNiArMzA4LDEyIEBAIFN0
cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nRm9yQmluZGluZ3MoY29uc3QgU3RyaW5nJiB0eXBl
KQogICAgIHJldHVybiAiIjsKIH0KIAorU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRTdHJpbmdJbkN1
c3RvbURhdGEoY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJl
dHVybiB7IH07Cit9CisKIFZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnJlYWRGaWxlbmFtZXMo
KQogewogICAgIFZlY3RvcjxTdHJpbmc+IGZpbGVOYW1lczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dwZS9QYXN0ZWJvYXJkV1BFLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL3dwZS9QYXN0ZWJvYXJkV1BFLmNwcAppbmRleCAxNzgwMWMyZGFmMWVlMDdlN2UyYzU4
NjFlOGYwNzA3YjI1MGZlNjBmLi5iODQ4MmYyNTllOWY5YTI5NzU2MGI4ZGU4YjkyNmRkNjhiODFl
YTZlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93cGUvUGFzdGVib2FyZFdQ
RS5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3BlL1Bhc3RlYm9hcmRXUEUuY3Bw
CkBAIC00OSw3ICs0OSwxMyBAQCBib29sIFBhc3RlYm9hcmQ6Omhhc0RhdGEoKQogICAgIHJldHVy
biAhdHlwZXMuaXNFbXB0eSgpOwogfQogCi1WZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBl
c0ZvckJpbmRpbmdzKCkKK1ZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnR5cGVzU2FmZUZvckJp
bmRpbmdzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB7IH07Cit9CisK
K1ZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmR0eXBlc0ZvckxlZ2FjeVVuc2FmZUJpbmRpbmdzKCkK
IHsKICAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+
cGFzdGVib2FyZFN0cmF0ZWd5KCktPmdldFR5cGVzKHR5cGVzKTsKQEAgLTYxLDExICs2NywxNyBA
QCBWZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBlc1RyZWF0ZWRBc0ZpbGVzKCkKICAgICBy
ZXR1cm4geyB9OwogfQogCi1TdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZ0ZvckJpbmRpbmdz
KGNvbnN0IFN0cmluZyYgdHlwZSkKK1N0cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nKGNvbnN0
IFN0cmluZyYgdHlwZSkKIHsKICAgICByZXR1cm4gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3Rl
Ym9hcmRTdHJhdGVneSgpLT5yZWFkU3RyaW5nRnJvbVBhc3RlYm9hcmQoMCwgdHlwZSk7CiB9CiAK
K1N0cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nSW5DdXN0b21EYXRhKGNvbnN0IFN0cmluZyYp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4geyB9OworfQorCiB2b2lkIFBh
c3RlYm9hcmQ6OndyaXRlU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiB0
ZXh0KQogewogICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+
d3JpdGVUb1Bhc3RlYm9hcmQodHlwZSwgdGV4dCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322288</attachid>
            <date>2017-09-30 01:49:39 -0700</date>
            <delta_ts>2017-09-30 01:58:06 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-177700-20170930014937.patch</filename>
            <type>text/plain</type>
            <size>29889</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyNjc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODkyMzQ5NTAxMGU5NWZk
ZGM1N2UzOTE4NTYxM2FjOWRjMGI0YTRiYS4uYjBjMzY0M2MzNzZkZjVkMDNlYzk1ZTc4NTQzOGJi
NDQwN2Q5ZDQ3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0IEBACisyMDE3LTA5LTI5ICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFNoYXJlIG1vcmUgcGFzdGVi
b2FyZCBjb2RlIGJldHdlZW4gaU9TIGFuZCBtYWNPUyBhbmQgcmVtb3ZlIGRlcGVuZGVuY3kgb24g
U2V0dGluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3NzcwMAorCisgICAgICAgIFJldmlld2VkIGJ5IFdlbnNvbiBIc2llaC4KKworICAgICAgICBN
b3ZlZCBtb3JlIGNvZGUgZnJvbSBQYXN0ZWJvYXJkSU9TLm1tIGFuZCBQYXN0ZWJvYXJkTWFjLm1t
IGludG8gUGFzdGVib2FyZENvY29hLm1tIHRvIHNoYXJlIGNvZGUuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBhbHNvIHJlbW92ZXMgdGhlIGxheWVyaW5nIHZpb2xhdGlvbiBpbmFkdmVydGVudGx5IGlu
dHJvZHVjZWQgaW4gcjIyMjU5NSB3aGVyZWJ5IHdoaWNoCisgICAgICAgIFBhc3RlYm9hcmQgY29k
ZSBkZXBlbmRzIG9uIFNldHRpbmdzLiBUbyBkbyB0aGlzLCB0aGlzIHBhdGNoIHNwbGl0cyByZWFk
U3RyaW5nRm9yQmluZGluZ3MgaXMgaW50bworICAgICAgICByZWFkU3RyaW5nIGFuZCByZWFkU3Ry
aW5nSW5DdXN0b21EYXRhIGFuZCB0eXBlc0ZvckJpbmRpbmdzIGludG8gdHlwZXNTYWZlRm9yQmlu
ZGluZ3MgYW5kCisgICAgICAgIHR5cGVzRm9yTGVnYWN5VW5zYWZlQmluZGluZ3MsIGFuZCBtb3Zl
cyB0aGUgbG9naWMgdG8gZGVjaWRlIHdoZXRoZXIgYSBnaXZlbiB0eXBlIG9yIHN0cmluZyBpcyBy
ZWFkCisgICAgICAgIG9mZiBvZiB0aGUgbmF0aXZlIHBhc3RlYm9hcmQgZW50cnkgb3Igb3VyIGN1
c3RvbSBkYXRhIGVudHJ5IGlzIG1vdmVkIHRvIERhdGFUcmFuc2Zlci4KKworICAgICAgICBObyBu
ZXcgdGVzdHMgc2luY2UgdGhlcmUgc2hvdWxkIGJlIG5vIGJlaGF2aW9yYWwgY2hhbmdlLgorCisg
ICAgICAgICogZG9tL0RhdGFUcmFuc2Zlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJh
bnNmZXI6OmdldERhdGEgY29uc3QpOiBNb3ZlZCB0aGUgY29kZSB0byBkZWNpZGUgd2hldGhlciBz
dHJpbmcgaXMKKyAgICAgICAgcmVhZCBvZmYgb2YgY3VzdG9tIGRhdGEgb3IgbmF0aXZlIHBhc3Rl
Ym9hcmQgZnJvbSByZWFkU3RyaW5nRm9yQmluZGluZ3MuCisgICAgICAgIChXZWJDb3JlOjpEYXRh
VHJhbnNmZXI6OnR5cGVzIGNvbnN0KTogRGl0dG8gZnJvbSB0eXBlc0ZvckJpbmRpbmdzLgorICAg
ICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVi
b2FyZDo6aXNTYWZlVHlwZUZvckRPTVRvUmVhZEFuZFdyaXRlKTogTW92ZWQgaW50byBQYXN0ZWJv
YXJkLgorICAgICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmQuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9TdGF0aWNQYXN0ZWJvYXJkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0YXRpY1Bhc3RlYm9h
cmQ6OnJlYWRTdHJpbmcpOiBSZW5hbWVkIGZyb20gcmVhZFN0cmluZ0ZvckJpbmRpbmdzLgorICAg
ICAgICAoV2ViQ29yZTo6U3RhdGljUGFzdGVib2FyZDo6cmVhZFN0cmluZ0luQ3VzdG9tRGF0YSk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RhdGljUGFzdGVib2FyZDo6d3JpdGVTdHJpbmcp
OgorICAgICAgICAqIHBsYXRmb3JtL1N0YXRpY1Bhc3RlYm9hcmQuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9jb2NvYS9QYXN0ZWJvYXJkQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJv
YXJkOjp0eXBlc1NhZmVGb3JCaW5kaW5ncyk6IEV4dHJhY3RlZCBvdXQgb2YgdHlwZXNGb3JCaW5k
aW5ncyBpbiBQYXN0ZWJvYXJkSU9TLm1tCisgICAgICAgIGFuZCBQYXN0ZWJvYXJkTWFjLm1tLgor
ICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6dHlwZXNGb3JMZWdhY3lVbnNhZmVCaW5kaW5n
cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZFN0cmluZyk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZFN0cmluZ0luQ3VzdG9tRGF0
YSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVDdXN0b21EYXRh
KTogTW92ZWQgaGVyZSBmcm9tIFBhc3RlYm9hcmRJT1MubW0gYW5kIFBhc3RlYm9hcmRDb2NvYS5t
bS4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmNoYW5nZUNvdW50IGNvbnN0KTogRGl0
dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UGFzdGVib2FyZDo6dHlwZXNTYWZlRm9yQmluZGluZ3MpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnR5cGVzRm9yTGVnYWN5VW5zYWZlQmluZGluZ3MpOiBS
ZW5hbWVkIGZyb20gcmVhZFN0cmluZ0ZvckJpbmRpbmdzLgorICAgICAgICAoV2ViQ29yZTo6UGFz
dGVib2FyZDo6cmVhZFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFk
U3RyaW5nSW5DdXN0b21EYXRhKTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1Bhc3Rl
Ym9hcmRJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZUN1c3RvbURh
dGEpOiBNb3ZlZCB0byBQYXN0ZWJvYXJkQ29jb2EubW0uCisgICAgICAgIChXZWJDb3JlOjpQYXN0
ZWJvYXJkOjpjaGFuZ2VDb3VudCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFz
dGVib2FyZDo6cmVhZFBsYXRmb3JtVmFsdWVBc1N0cmluZyk6IE1vdmVkIGludG8gUGFzdGVib2Fy
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmFkZEhUTUxDbGlwYm9hcmRUeXBlc0Zv
ckNvY29hVHlwZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZFN0
cmluZ0ZvckJpbmRpbmdzKTogTW92ZWQgdG8gUGFzdGVib2FyZENvY29hLm1tLgorICAgICAgICAo
V2ViQ29yZTo6UGFzdGVib2FyZDo6dHlwZXNGb3JCaW5kaW5ncyk6IERpdHRvLgorICAgICAgICAq
IHBsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW06CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OnR5cGVzU2FmZUZvckRPTVRvUmVhZEFuZFdyaXRlIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OlBhc3RlYm9hcmQ6OmNoYW5nZUNvdW50IGNvbnN0KTogTW92ZWQgdG8gUGFzdGVib2Fy
ZENvY29hLm1tLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVDdXN0b21EYXRh
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFkUGxhdGZvcm1WYWx1
ZUFzU3RyaW5nKTogTW92ZWQgaW50byBQYXN0ZWJvYXJkLgorICAgICAgICAoV2ViQ29yZTo6UGFz
dGVib2FyZDo6cmVhZFN0cmluZ0ZvckJpbmRpbmdzKTogTW92ZWQgdG8gUGFzdGVib2FyZENvY29h
Lm1tLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6YWRkSFRNTENsaXBib2FyZFR5cGVz
Rm9yQ29jb2FUeXBlKTogTW92ZWQgaW50byBQYXN0ZWJvYXJkLgorICAgICAgICAoV2ViQ29yZTo6
UGFzdGVib2FyZDo6dHlwZXNGb3JCaW5kaW5ncyk6IE1vdmVkIHRvIFBhc3RlYm9hcmRDb2NvYS5t
bS4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjp0eXBlc1NhZmVGb3JET01Ub1JlYWRB
bmRXcml0ZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6dHlwZXNTYWZlRm9yQmluZGluZ3MpOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnR5cGVzRm9yTGVnYWN5VW5zYWZl
QmluZGluZ3MpOiBSZW5hbWVkIGZyb20gcmVhZFN0cmluZ0ZvckJpbmRpbmdzLgorICAgICAgICAo
V2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZFN0cmluZyk6IFJlbmFtZWQgZnJvbSByZWFkU3RyaW5n
Rm9yQmluZGluZ3MuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nSW5D
dXN0b21EYXRhKTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vd3BlL1Bhc3RlYm9hcmRXUEUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6dHlwZXNTYWZlRm9yQmluZGluZ3Mp
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmR0eXBlc0ZvckxlZ2FjeVVuc2Fm
ZUJpbmRpbmdzKTogUmVuYW1lZCBmcm9tIHJlYWRTdHJpbmdGb3JCaW5kaW5ncy4KKyAgICAgICAg
KFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWRTdHJpbmcpOiBSZW5hbWVkIGZyb20gcmVhZFN0cmlu
Z0ZvckJpbmRpbmdzLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZFN0cmluZ0lu
Q3VzdG9tRGF0YSk6IEFkZGVkLgorCiAyMDE3LTA5LTI5ICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CiAKICAgICAgICAgaHR0cC90ZXN0cy9wcmVjb25uZWN0L2xpbmstcmVsLXByZWNv
bm5lY3QtaHR0cHMuaHRtbCBpcyBmbGFreQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0RhdGFUcmFuc2Zlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVyLmNwcApp
bmRleCA3YmQ4NDRlMDRjZmQ2Zjg3MGY4MjRlZTgzODFhZDI3MTBhZjNhZThkLi4zMjIyMzdhOTEw
YjRlYTY0YzA1NTIyZDNjNmZkZTVkOTg4MTVlZTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRGF0YVRyYW5zZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5z
ZmVyLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIK
ICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKKyNpbmNsdWRlICJT
ZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN0YXRpY1Bhc3RlYm9hcmQuaCIKICNpbmNsdWRlICJXZWJD
b3JlUGFzdGVib2FyZEZpbGVSZWFkZXIuaCIKIApAQCAtMTQxLDcgKzE0MiwxMCBAQCBTdHJpbmcg
RGF0YVRyYW5zZmVyOjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkgY29uc3QKICAgICAgICAg
cmV0dXJuIHsgfTsKICNlbmRpZgogCi0gICAgcmV0dXJuIG1fcGFzdGVib2FyZC0+cmVhZFN0cmlu
Z0ZvckJpbmRpbmdzKG5vcm1hbGl6ZVR5cGUodHlwZSkpOworICAgIGF1dG8gbm9ybWFsaXplZFR5
cGUgPSBub3JtYWxpemVUeXBlKHR5cGUpOworICAgIGlmIChTZXR0aW5nczo6Y3VzdG9tUGFzdGVi
b2FyZERhdGFFbmFibGVkKCkgJiYgIVBhc3RlYm9hcmQ6OmlzU2FmZVR5cGVGb3JET01Ub1JlYWRB
bmRXcml0ZShub3JtYWxpemVkVHlwZSkpCisgICAgICAgIHJldHVybiBtX3Bhc3RlYm9hcmQtPnJl
YWRTdHJpbmdJbkN1c3RvbURhdGEobm9ybWFsaXplZFR5cGUpOworICAgIHJldHVybiBtX3Bhc3Rl
Ym9hcmQtPnJlYWRTdHJpbmcobm9ybWFsaXplZFR5cGUpOwogfQogCiB2b2lkIERhdGFUcmFuc2Zl
cjo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKQEAgLTE3
Miw3ICsxNzYsNyBAQCBWZWN0b3I8U3RyaW5nPiBEYXRhVHJhbnNmZXI6OnR5cGVzKCkgY29uc3QK
ICAgICBpZiAoIWNhblJlYWRUeXBlcygpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0
dXJuIG1fcGFzdGVib2FyZC0+dHlwZXNGb3JCaW5kaW5ncygpOworICAgIHJldHVybiBTZXR0aW5n
czo6Y3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkKCkgPyBtX3Bhc3RlYm9hcmQtPnR5cGVzU2Fm
ZUZvckJpbmRpbmdzKCkgOiBtX3Bhc3RlYm9hcmQtPnR5cGVzRm9yTGVnYWN5VW5zYWZlQmluZGlu
Z3MoKTsKIH0KIAogRmlsZUxpc3QmIERhdGFUcmFuc2Zlcjo6ZmlsZXMoKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZC5jcHAgYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmNwcAppbmRleCA4Y2JkYTZmYWUzZGIxNDhmYmQwMmU2
MDhlOTBhYjIxYTU1YmNmYjIwLi40M2M2NjdhMzdlYjI1ODcyZWIyNzJmYmQ3ODI2ZjQyNWQ4NDUx
YmQzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmNwcApAQCAtMzksNyArMzks
NyBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBQYXN0ZWJvYXJkSW1hZ2U6OlBhc3RlYm9hcmRJbWFn
ZSgpID0gZGVmYXVsdDsKIFBhc3RlYm9hcmRJbWFnZTo6flBhc3RlYm9hcmRJbWFnZSgpID0gZGVm
YXVsdDsKIAotYm9vbCBpc1NhZmVUeXBlRm9yRE9NVG9SZWFkQW5kV3JpdGUoY29uc3QgU3RyaW5n
JiB0eXBlKQorYm9vbCBQYXN0ZWJvYXJkOjppc1NhZmVUeXBlRm9yRE9NVG9SZWFkQW5kV3JpdGUo
Y29uc3QgU3RyaW5nJiB0eXBlKQogewogICAgIHJldHVybiB0eXBlID09ICJ0ZXh0L3BsYWluIiB8
fCB0eXBlID09ICJ0ZXh0L2h0bWwiIHx8IHR5cGUgPT0gInRleHQvdXJpLWxpc3QiOwogfQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZC5oIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZC5oCmluZGV4IGFkNDAyMmRjNWI2NzQzMzZiOGVmN2U4
MzllNDk3MDQxMmFmZmI1NzIuLjgzOTMxMmQ2NzNkOTQzMWIyOTY3YWM4M2ZhMDZkYmI3MTViNzI1
MDcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgKQEAgLTI4LDYgKzI4LDcgQEAK
ICNpbmNsdWRlICJEcmFnSW1hZ2UuaCIKICNpbmNsdWRlICJVUkwuaCIKICNpbmNsdWRlIDx3dGYv
SGFzaE1hcC5oPgorI2luY2x1ZGUgPHd0Zi9MaXN0SGFzaFNldC5oPgogI2luY2x1ZGUgPHd0Zi9O
b25jb3B5YWJsZS5oPgogI2luY2x1ZGUgPHd0Zi9WZWN0b3IuaD4KICNpbmNsdWRlIDx3dGYvdGV4
dC9XVEZTdHJpbmcuaD4KQEAgLTE3MSw4ICsxNzIsNiBAQCBXRUJDT1JFX0VYUE9SVCBQYXN0ZWJv
YXJkQ3VzdG9tRGF0YSBjdXN0b21EYXRhRnJvbVNoYXJlZEJ1ZmZlcihjb25zdCBTaGFyZWRCdWZm
ZQogY29uc3QgY2hhciBjdXN0b21XZWJLaXRQYXN0ZWJvYXJkRGF0YVR5cGVbXSA9ICJjb20uYXBw
bGUuV2ViS2l0LmN1c3RvbS1wYXN0ZWJvYXJkLWRhdGEiOwogI2VuZGlmCiAKLWJvb2wgaXNTYWZl
VHlwZUZvckRPTVRvUmVhZEFuZFdyaXRlKGNvbnN0IFN0cmluZyYgdHlwZSk7Ci0KIGNsYXNzIFBh
c3RlYm9hcmQgewogICAgIFdURl9NQUtFX05PTkNPUFlBQkxFKFBhc3RlYm9hcmQpOyBXVEZfTUFL
RV9GQVNUX0FMTE9DQVRFRDsKIHB1YmxpYzoKQEAgLTE5MiwxMiArMTkxLDE2IEBAIHB1YmxpYzoK
IAogICAgIFdFQkNPUkVfRVhQT1JUIHN0YXRpYyBzdGQ6OnVuaXF1ZV9wdHI8UGFzdGVib2FyZD4g
Y3JlYXRlRm9yQ29weUFuZFBhc3RlKCk7CiAKKyAgICBzdGF0aWMgYm9vbCBpc1NhZmVUeXBlRm9y
RE9NVG9SZWFkQW5kV3JpdGUoY29uc3QgU3RyaW5nJik7CisKICAgICB2aXJ0dWFsIGJvb2wgaXNT
dGF0aWMoKSBjb25zdCB7IHJldHVybiBmYWxzZTsgfQogCiAgICAgdmlydHVhbCBib29sIGhhc0Rh
dGEoKTsKLSAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IHR5cGVzRm9yQmluZGluZ3MoKTsKKyAg
ICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IHR5cGVzU2FmZUZvckJpbmRpbmdzKCk7CisgICAgdmly
dHVhbCBWZWN0b3I8U3RyaW5nPiB0eXBlc0ZvckxlZ2FjeVVuc2FmZUJpbmRpbmdzKCk7CiAgICAg
dmlydHVhbCBWZWN0b3I8U3RyaW5nPiB0eXBlc1RyZWF0ZWRBc0ZpbGVzKCk7Ci0gICAgdmlydHVh
bCBTdHJpbmcgcmVhZFN0cmluZ0ZvckJpbmRpbmdzKGNvbnN0IFN0cmluZyYgdHlwZSk7CisgICAg
dmlydHVhbCBTdHJpbmcgcmVhZFN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUpOworICAgIHZpcnR1
YWwgU3RyaW5nIHJlYWRTdHJpbmdJbkN1c3RvbURhdGEoY29uc3QgU3RyaW5nJiB0eXBlKTsKIAog
ICAgIHZpcnR1YWwgdm9pZCB3cml0ZVN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0
cmluZyYgZGF0YSk7CiAgICAgdmlydHVhbCB2b2lkIGNsZWFyKCk7CkBAIC0yNzgsNiArMjgxLDgg
QEAgcHJpdmF0ZToKICNlbmRpZgogCiAjaWYgUExBVEZPUk0oQ09DT0EpCisgICAgU3RyaW5nIHJl
YWRQbGF0Zm9ybVZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5nJiBkb21UeXBlLCBsb25nIGNoYW5n
ZUNvdW50LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKTsKKyAgICBzdGF0aWMgdm9pZCBh
ZGRIVE1MQ2xpcGJvYXJkVHlwZXNGb3JDb2NvYVR5cGUoTGlzdEhhc2hTZXQ8U3RyaW5nPiYgcmVz
dWx0VHlwZXMsIGNvbnN0IFN0cmluZyYgY29jb2FUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmROYW1lKTsKICAgICBTdHJpbmcgcmVhZFN0cmluZ0ZvclBsYXRmb3JtVHlwZShjb25zdCBTdHJp
bmcmKTsKICNlbmRpZgogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TdGF0
aWNQYXN0ZWJvYXJkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N0YXRpY1Bhc3RlYm9h
cmQuY3BwCmluZGV4IDcxMWZhNjMyMjdiZWNkNzNjZWJhNDAwZmI0MzE0MzE0NTM1NWJiODIuLmU4
ZjdlZjU1NzM5MmU5MTQzY2U4ZDYzN2Y0NmVjYmUxMmE3ZWY4N2IgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1N0YXRpY1Bhc3RlYm9hcmQuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL1N0YXRpY1Bhc3RlYm9hcmQuY3BwCkBAIC00MCwyMCArNDAsMTkgQEAgYm9v
bCBTdGF0aWNQYXN0ZWJvYXJkOjpoYXNEYXRhKCkKICAgICByZXR1cm4gIW1fcGxhdGZvcm1EYXRh
LmlzRW1wdHkoKSB8fCAhbV9jdXN0b21EYXRhLmlzRW1wdHkoKTsKIH0KIAotU3RyaW5nIFN0YXRp
Y1Bhc3RlYm9hcmQ6OnJlYWRTdHJpbmdGb3JCaW5kaW5ncyhjb25zdCBTdHJpbmcmIHR5cGUpCitT
dHJpbmcgU3RhdGljUGFzdGVib2FyZDo6cmVhZFN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUpCiB7
Ci0gICAgaWYgKG1fcGxhdGZvcm1EYXRhLmNvbnRhaW5zKHR5cGUpKQotICAgICAgICByZXR1cm4g
bV9wbGF0Zm9ybURhdGEuZ2V0KHR5cGUpOwotCi0gICAgaWYgKG1fY3VzdG9tRGF0YS5jb250YWlu
cyh0eXBlKSkKLSAgICAgICAgcmV0dXJuIG1fY3VzdG9tRGF0YS5nZXQodHlwZSk7CisgICAgcmV0
dXJuIG1fcGxhdGZvcm1EYXRhLmdldCh0eXBlKTsKK30KIAotICAgIHJldHVybiB7IH07CitTdHJp
bmcgU3RhdGljUGFzdGVib2FyZDo6cmVhZFN0cmluZ0luQ3VzdG9tRGF0YShjb25zdCBTdHJpbmcm
IHR5cGUpCit7CisgICAgcmV0dXJuIG1fY3VzdG9tRGF0YS5nZXQodHlwZSk7CiB9CiAKIHZvaWQg
U3RhdGljUGFzdGVib2FyZDo6d3JpdGVTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBT
dHJpbmcmIHZhbHVlKQogewotICAgIGF1dG8mIHBhc3RlYm9hcmREYXRhID0gaXNTYWZlVHlwZUZv
ckRPTVRvUmVhZEFuZFdyaXRlKHR5cGUpID8gbV9wbGF0Zm9ybURhdGEgOiBtX2N1c3RvbURhdGE7
CisgICAgYXV0byYgcGFzdGVib2FyZERhdGEgPSBQYXN0ZWJvYXJkOjppc1NhZmVUeXBlRm9yRE9N
VG9SZWFkQW5kV3JpdGUodHlwZSkgPyBtX3BsYXRmb3JtRGF0YSA6IG1fY3VzdG9tRGF0YTsKICAg
ICBpZiAocGFzdGVib2FyZERhdGEuc2V0KHR5cGUsIHZhbHVlKS5pc05ld0VudHJ5KQogICAgICAg
ICBtX3R5cGVzLmFwcGVuZCh0eXBlKTsKICAgICBlbHNlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1N0YXRpY1Bhc3RlYm9hcmQuaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1N0YXRpY1Bhc3RlYm9hcmQuaAppbmRleCBiY2I2ZjdhNDA2YWJmODFjYjQ1ZDAwNTNhY2E3
NTU5YWIxZGI5NGQwLi4yODUwYjMyY2Y3M2RkMzMwMDAzY2MyNGIwMjVlMGVjMDNkNDc1NzYzIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TdGF0aWNQYXN0ZWJvYXJkLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3RhdGljUGFzdGVib2FyZC5oCkBAIC00MSw5ICs0
MSwxMSBAQCBwdWJsaWM6CiAgICAgYm9vbCBpc1N0YXRpYygpIGNvbnN0IGZpbmFsIHsgcmV0dXJu
IHRydWU7IH0KIAogICAgIGJvb2wgaGFzRGF0YSgpIGZpbmFsOwotICAgIFZlY3RvcjxTdHJpbmc+
IHR5cGVzRm9yQmluZGluZ3MoKSBmaW5hbCB7IHJldHVybiBtX3R5cGVzOyB9CisgICAgVmVjdG9y
PFN0cmluZz4gdHlwZXNTYWZlRm9yQmluZGluZ3MoKSBmaW5hbCB7IHJldHVybiBtX3R5cGVzOyB9
CisgICAgVmVjdG9yPFN0cmluZz4gdHlwZXNGb3JMZWdhY3lVbnNhZmVCaW5kaW5ncygpIGZpbmFs
IHsgcmV0dXJuIG1fdHlwZXM7IH0KICAgICBWZWN0b3I8U3RyaW5nPiB0eXBlc1RyZWF0ZWRBc0Zp
bGVzKCkgZmluYWwgeyByZXR1cm4geyB9OyB9Ci0gICAgU3RyaW5nIHJlYWRTdHJpbmdGb3JCaW5k
aW5ncyhjb25zdCBTdHJpbmcmIHR5cGUpIGZpbmFsOworICAgIFN0cmluZyByZWFkU3RyaW5nKGNv
bnN0IFN0cmluZyYgdHlwZSkgZmluYWw7CisgICAgU3RyaW5nIHJlYWRTdHJpbmdJbkN1c3RvbURh
dGEoY29uc3QgU3RyaW5nJiB0eXBlKSBmaW5hbDsKIAogICAgIHZvaWQgd3JpdGVTdHJpbmcoY29u
c3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpIGZpbmFsOwogICAgIHZvaWQgY2xl
YXIoKSBmaW5hbDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Bh
c3RlYm9hcmRDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Bhc3RlYm9h
cmRDb2NvYS5tbQppbmRleCBlNzUwOWZlMTVhZGU2N2U4ZmIxYmRlZDQ4NTU5YzRhZjk3YjM2Njcw
Li5kNDMwM2Q5MThiODAyN2I1NGU2OTVlNmM1ODgxYWQ1MzAzOWQ2NGZkIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QYXN0ZWJvYXJkQ29jb2EubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGFzdGVib2FyZENvY29hLm1tCkBAIC0yOCw2ICsy
OCw3IEBACiAKICNpbmNsdWRlICJQYXN0ZWJvYXJkU3RyYXRlZ3kuaCIKICNpbmNsdWRlICJQbGF0
Zm9ybVN0cmF0ZWdpZXMuaCIKKyNpbmNsdWRlICJTZXR0aW5ncy5oIgogI2luY2x1ZGUgIlNoYXJl
ZEJ1ZmZlci5oIgogI2luY2x1ZGUgPEltYWdlSU8vSW1hZ2VJTy5oPgogI2luY2x1ZGUgPHd0Zi9M
aXN0SGFzaFNldC5oPgpAQCAtMTUxLDYgKzE1MiwzNiBAQCBWZWN0b3I8U3RyaW5nPiBQYXN0ZWJv
YXJkOjp0eXBlc1RyZWF0ZWRBc0ZpbGVzKCkKICAgICByZXR1cm4gdHlwZXM7CiB9CiAKK1ZlY3Rv
cjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnR5cGVzU2FmZUZvckJpbmRpbmdzKCkKK3sKKyAgICBWZWN0
b3I8U3RyaW5nPiB0eXBlcyA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRl
Z3koKS0+dHlwZXNTYWZlRm9yRE9NVG9SZWFkQW5kV3JpdGUobV9wYXN0ZWJvYXJkTmFtZSk7CisK
KyAgICAvLyBFbmZvcmNlIGNoYW5nZUNvdW50IG91cnNlbHZlcyBmb3Igc2VjdXJpdHkuIFdlIGNo
ZWNrIGFmdGVyIHJlYWRpbmcgaW5zdGVhZCBvZiBiZWZvcmUgdG8gYmUKKyAgICAvLyBzdXJlIGl0
IGRvZXNuJ3QgY2hhbmdlIGJldHdlZW4gb3VyIHRlc3RpbmcgdGhlIGNoYW5nZSBjb3VudCBhbmQg
YWNjZXNzaW5nIHRoZSBkYXRhLgorICAgIGlmIChtX2NoYW5nZUNvdW50ICE9IHBsYXRmb3JtU3Ry
YXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+Y2hhbmdlQ291bnQobV9wYXN0ZWJvYXJk
TmFtZSkpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICByZXR1cm4gdHlwZXM7Cit9CisKK1Zl
Y3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnR5cGVzRm9yTGVnYWN5VW5zYWZlQmluZGluZ3MoKQor
eworICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOworICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5w
YXN0ZWJvYXJkU3RyYXRlZ3koKS0+Z2V0VHlwZXModHlwZXMsIG1fcGFzdGVib2FyZE5hbWUpOwor
CisgICAgLy8gRW5mb3JjZSBjaGFuZ2VDb3VudCBvdXJzZWx2ZXMgZm9yIHNlY3VyaXR5LiBXZSBj
aGVjayBhZnRlciByZWFkaW5nIGluc3RlYWQgb2YgYmVmb3JlIHRvIGJlCisgICAgLy8gc3VyZSBp
dCBkb2Vzbid0IGNoYW5nZSBiZXR3ZWVuIG91ciB0ZXN0aW5nIHRoZSBjaGFuZ2UgY291bnQgYW5k
IGFjY2Vzc2luZyB0aGUgZGF0YS4KKyAgICBpZiAobV9jaGFuZ2VDb3VudCAhPSBwbGF0Zm9ybVN0
cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmNoYW5nZUNvdW50KG1fcGFzdGVib2Fy
ZE5hbWUpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAgTGlzdEhhc2hTZXQ8U3RyaW5nPiBy
ZXN1bHQ7CisgICAgZm9yIChhdXRvJiBjb2NvYVR5cGUgOiB0eXBlcykKKyAgICAgICAgYWRkSFRN
TENsaXBib2FyZFR5cGVzRm9yQ29jb2FUeXBlKHJlc3VsdCwgY29jb2FUeXBlLCBtX3Bhc3RlYm9h
cmROYW1lKTsKKworICAgIGNvcHlUb1ZlY3RvcihyZXN1bHQsIHR5cGVzKTsKKyAgICByZXR1cm4g
dHlwZXM7Cit9CisKIHZvaWQgUGFzdGVib2FyZDo6cmVhZChQYXN0ZWJvYXJkRmlsZVJlYWRlciYg
cmVhZGVyKQogewogICAgIGF1dG8gaW1hZ2VUeXBlID0gbWltZVR5cGVUb0ltYWdlVHlwZShyZWFk
ZXIudHlwZSk7CkBAIC0xOTQsNSArMjI1LDMyIEBAIHZvaWQgUGFzdGVib2FyZDo6cmVhZChQYXN0
ZWJvYXJkRmlsZVJlYWRlciYgcmVhZGVyKQogICAgIHJlYWRlci5yZWFkKGltYWdlVHlwZVRvRmFr
ZUZpbGVuYW1lKGltYWdlVHlwZSksIGJ1ZmZlci5yZWxlYXNlTm9uTnVsbCgpKTsKIH0KIAorU3Ry
aW5nIFBhc3RlYm9hcmQ6OnJlYWRTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlKQoreworICAgIHJl
dHVybiByZWFkUGxhdGZvcm1WYWx1ZUFzU3RyaW5nKHR5cGUsIG1fY2hhbmdlQ291bnQsIG1fcGFz
dGVib2FyZE5hbWUpOworfQorCitTdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZ0luQ3VzdG9t
RGF0YShjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgYXV0byBidWZmZXIgPSBwbGF0Zm9ybVN0
cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmJ1ZmZlckZvclR5cGUoY3VzdG9tV2Vi
S2l0UGFzdGVib2FyZERhdGFUeXBlLCBtX3Bhc3RlYm9hcmROYW1lKTsKKyAgICBpZiAoIWJ1ZmZl
cikKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAgIE5TU3RyaW5nICpjdXN0b21EYXRhVmFsdWUg
PSBjdXN0b21EYXRhRnJvbVNoYXJlZEJ1ZmZlcigqYnVmZmVyKS5zYW1lT3JpZ2luQ3VzdG9tRGF0
YS5nZXQodHlwZSk7CisgICAgaWYgKCFjdXN0b21EYXRhVmFsdWUubGVuZ3RoKQorICAgICAgICBy
ZXR1cm4geyB9OworICAgIHJldHVybiBjdXN0b21EYXRhVmFsdWU7Cit9CisKK3ZvaWQgUGFzdGVi
b2FyZDo6d3JpdGVDdXN0b21EYXRhKGNvbnN0IFBhc3RlYm9hcmRDdXN0b21EYXRhJiBkYXRhKQor
eworICAgIG1fY2hhbmdlQ291bnQgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0
cmF0ZWd5KCktPndyaXRlQ3VzdG9tRGF0YShkYXRhLCBtX3Bhc3RlYm9hcmROYW1lKTsKK30KKwor
bG9uZyBQYXN0ZWJvYXJkOjpjaGFuZ2VDb3VudCgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHBsYXRm
b3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+Y2hhbmdlQ291bnQobV9wYXN0
ZWJvYXJkTmFtZSk7Cit9CisKIH0KIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bh
c3RlYm9hcmRHdGsuY3BwCmluZGV4IDg0YTU3ZGU4NDUzODQ2NjYxNmYyOGU3ODNiNDVhYzg1Yjlm
MzkyNGYuLmJkNTgwMGZhMTQzNmU5YTlmOTRhODlhZWQ3NjVhZmRmZjlkYjI3ZGEgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcAorKysgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAKQEAgLTI1Miw3ICsy
NTIsMTMgQEAgYm9vbCBQYXN0ZWJvYXJkOjpoYXNEYXRhKCkKICAgICByZXR1cm4gbV9zZWxlY3Rp
b25EYXRhLT5oYXNUZXh0KCkgfHwgbV9zZWxlY3Rpb25EYXRhLT5oYXNNYXJrdXAoKSB8fCBtX3Nl
bGVjdGlvbkRhdGEtPmhhc1VSSUxpc3QoKSB8fCBtX3NlbGVjdGlvbkRhdGEtPmhhc0ltYWdlKCkg
fHwgbV9zZWxlY3Rpb25EYXRhLT5oYXNVbmtub3duVHlwZURhdGEoKTsKIH0KIAotVmVjdG9yPFN0
cmluZz4gUGFzdGVib2FyZDo6dHlwZXNGb3JCaW5kaW5ncygpCitWZWN0b3I8U3RyaW5nPiBQYXN0
ZWJvYXJkOjp0eXBlc1NhZmVGb3JCaW5kaW5ncygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsg
Ly8gd2Via2l0Lm9yZy9iLzE3NzYzMzogW0dUS10gTW92ZSB0byBuZXcgUGFzdGVib2FyZCBBUEkK
KyAgICByZXR1cm4geyB9OworfQorCitWZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBlc0Zv
ckxlZ2FjeVVuc2FmZUJpbmRpbmdzKCkKIHsKICAgICByZWFkRnJvbUNsaXBib2FyZCgpOwogCkBA
IC0yODUsNyArMjkxLDcgQEAgVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6dHlwZXNUcmVhdGVk
QXNGaWxlcygpCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRT
dHJpbmdGb3JCaW5kaW5ncyhjb25zdCBTdHJpbmcmIHR5cGUpCitTdHJpbmcgUGFzdGVib2FyZDo6
cmVhZFN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUpCiB7CiAgICAgcmVhZEZyb21DbGlwYm9hcmQo
KTsKIApAQCAtMzA3LDYgKzMxMywxMiBAQCBTdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZ0Zv
ckJpbmRpbmdzKGNvbnN0IFN0cmluZyYgdHlwZSkKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAK
K1N0cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nSW5DdXN0b21EYXRhKGNvbnN0IFN0cmluZyYp
Cit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsgLy8gd2Via2l0Lm9yZy9iLzE3NzYzMzogW0dUS10g
TW92ZSB0byBuZXcgUGFzdGVib2FyZCBBUEkKKyAgICByZXR1cm4geyB9OworfQorCiBWZWN0b3I8
U3RyaW5nPiBQYXN0ZWJvYXJkOjpyZWFkRmlsZW5hbWVzKCkKIHsKICAgICByZWFkRnJvbUNsaXBi
b2FyZCgpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Bhc3RlYm9h
cmRJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGFzdGVib2FyZElPUy5tbQpp
bmRleCAzZTI4MTVkNjFlNTY1MTA5MTIwZjNiNmNiYzUyMjA3NjFkNDA0M2NiLi4xM2UxZTYxNjE4
Nzk0ZTY1MjNhNzA5Y2I4OTcxZGNkYTI4MTkyNjU2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9pb3MvUGFzdGVib2FyZElPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9pb3MvUGFzdGVib2FyZElPUy5tbQpAQCAtMjUsMzUgKzI1LDE4IEBACiAjaW1wb3J0ICJj
b25maWcuaCIKICNpbXBvcnQgIlBhc3RlYm9hcmQuaCIKIAotI2ltcG9ydCAiQ2FjaGVkSW1hZ2Uu
aCIKLSNpbXBvcnQgIkRvY3VtZW50LmgiCi0jaW1wb3J0ICJEb2N1bWVudEZyYWdtZW50LmgiCi0j
aW1wb3J0ICJEb2N1bWVudExvYWRlci5oIgogI2ltcG9ydCAiRHJhZ0RhdGEuaCIKLSNpbXBvcnQg
IkVkaXRpbmcuaCIKLSNpbXBvcnQgIkVkaXRvci5oIgotI2ltcG9ydCAiRWRpdG9yQ2xpZW50Lmgi
Ci0jaW1wb3J0ICJGcmFtZS5oIgotI2ltcG9ydCAiRnJhbWVMb2FkZXIuaCIKLSNpbXBvcnQgIkZy
YW1lTG9hZGVyQ2xpZW50LmgiCi0jaW1wb3J0ICJIVE1MRWxlbWVudC5oIgotI2ltcG9ydCAiSFRN
TFBhcnNlcklkaW9tcy5oIgogI2ltcG9ydCAiSW1hZ2UuaCIKLSNpbXBvcnQgIkxlZ2FjeVdlYkFy
Y2hpdmUuaCIKICNpbXBvcnQgIk5vdEltcGxlbWVudGVkLmgiCiAjaW1wb3J0ICJQYXN0ZWJvYXJk
U3RyYXRlZ3kuaCIKICNpbXBvcnQgIlBsYXRmb3JtUGFzdGVib2FyZC5oIgogI2ltcG9ydCAiUGxh
dGZvcm1TdHJhdGVnaWVzLmgiCi0jaW1wb3J0ICJSZW5kZXJJbWFnZS5oIgotI2ltcG9ydCAiUnVu
dGltZUFwcGxpY2F0aW9uQ2hlY2tzLmgiCi0jaW1wb3J0ICJTZXR0aW5ncy5oIgogI2ltcG9ydCAi
U2hhcmVkQnVmZmVyLmgiCi0jaW1wb3J0ICJUZXh0LmgiCiAjaW1wb3J0ICJVUkwuaCIKICNpbXBv
cnQgIlVUSVV0aWxpdGllcy5oIgogI2ltcG9ydCAiV2ViTlNBdHRyaWJ1dGVkU3RyaW5nRXh0cmFz
LmgiCi0jaW1wb3J0ICJtYXJrdXAuaCIKICNpbXBvcnQgPE1vYmlsZUNvcmVTZXJ2aWNlcy9Nb2Jp
bGVDb3JlU2VydmljZXMuaD4KKyNpbXBvcnQgPHd0Zi90ZXh0L1N0cmluZ0hhc2guaD4KIAogQGlu
dGVyZmFjZSBOU0F0dHJpYnV0ZWRTdHJpbmcgKE5TQXR0cmlidXRlZFN0cmluZ0tpdEFkZGl0aW9u
cykKIC0gKGlkKWluaXRXaXRoUlRGOihOU0RhdGEgKilkYXRhIGRvY3VtZW50QXR0cmlidXRlczoo
TlNEaWN0aW9uYXJ5ICoqKWRpY3Q7CkBAIC0xMTcsMTEgKzEwMCw2IEBAIHN0ZDo6dW5pcXVlX3B0
cjxQYXN0ZWJvYXJkPiBQYXN0ZWJvYXJkOjpjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKQogICAgIHJl
dHVybiBzdGQ6Om1ha2VfdW5pcXVlPFBhc3RlYm9hcmQ+KGNoYW5nZUNvdW50Rm9yUGFzdGVib2Fy
ZCgpKTsKIH0KIAotdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUN1c3RvbURhdGEoY29uc3QgUGFzdGVi
b2FyZEN1c3RvbURhdGEmIGRhdGEpCi17Ci0gICAgbV9jaGFuZ2VDb3VudCA9IHBsYXRmb3JtU3Ry
YXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+d3JpdGVDdXN0b21EYXRhKGRhdGEsIG1f
cGFzdGVib2FyZE5hbWUpOwotfQotCiB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0IFBhc3Rl
Ym9hcmRXZWJDb250ZW50JiBjb250ZW50KQogewogICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5w
YXN0ZWJvYXJkU3RyYXRlZ3koKS0+d3JpdGVUb1Bhc3RlYm9hcmQoY29udGVudCwgbV9wYXN0ZWJv
YXJkTmFtZSk7CkBAIC0yNzksMTEgKzI1Nyw2IEBAIHZvaWQgUGFzdGVib2FyZDo6cmVhZFJlc3Bl
Y3RpbmdVVElGaWRlbGl0aWVzKFBhc3RlYm9hcmRXZWJDb250ZW50UmVhZGVyJiByZWFkZXIpCiAg
ICAgfQogfQogCi1sb25nIFBhc3RlYm9hcmQ6OmNoYW5nZUNvdW50KCkgY29uc3QKLXsKLSAgICBy
ZXR1cm4gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5jaGFuZ2VD
b3VudChtX3Bhc3RlYm9hcmROYW1lKTsKLX0KLQogTlNBcnJheSAqUGFzdGVib2FyZDo6c3VwcG9y
dGVkV2ViQ29udGVudFBhc3RlYm9hcmRUeXBlcygpCiB7CiAgICAgcmV0dXJuIEBbKGlkKVdlYkFy
Y2hpdmVQYm9hcmRUeXBlLCAoaWQpa1VUVHlwZUZsYXRSVEZELCAoaWQpa1VUVHlwZVJURiwgKGlk
KWtVVFR5cGVIVE1MLCAoaWQpa1VUVHlwZVBORywgKGlkKWtVVFR5cGVUSUZGLCAoaWQpa1VUVHlw
ZUpQRUcsIChpZClrVVRUeXBlR0lGLCAoaWQpa1VUVHlwZVVSTCwgKGlkKWtVVFR5cGVUZXh0XTsK
QEAgLTMzOCw3ICszMTEsNyBAQCB2b2lkIFBhc3RlYm9hcmQ6OmNsZWFyKCkKICAgICBwbGF0Zm9y
bVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPndyaXRlVG9QYXN0ZWJvYXJkKFN0
cmluZygpLCBTdHJpbmcoKSwgbV9wYXN0ZWJvYXJkTmFtZSk7CiB9CiAKLXN0YXRpYyBTdHJpbmcg
cmVhZFBsYXRmb3JtVmFsdWVBc1N0cmluZyhjb25zdCBTdHJpbmcmIGRvbVR5cGUsIGxvbmcgY2hh
bmdlQ291bnQsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCitTdHJpbmcgUGFzdGVib2Fy
ZDo6cmVhZFBsYXRmb3JtVmFsdWVBc1N0cmluZyhjb25zdCBTdHJpbmcmIGRvbVR5cGUsIGxvbmcg
Y2hhbmdlQ291bnQsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7CiAgICAgUGFzdGVi
b2FyZFN0cmF0ZWd5JiBzdHJhdGVneSA9ICpwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2Fy
ZFN0cmF0ZWd5KCk7CiAKQEAgLTM3MiwyMSArMzQ1LDcgQEAgc3RhdGljIFN0cmluZyByZWFkUGxh
dGZvcm1WYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZyYgZG9tVHlwZSwgbG9uZyBjaGFuZ2VDb3Vu
dCwKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLVN0cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3Ry
aW5nRm9yQmluZGluZ3MoY29uc3QgU3RyaW5nJiB0eXBlKQotewotICAgIGlmICghU2V0dGluZ3M6
OmN1c3RvbVBhc3RlYm9hcmREYXRhRW5hYmxlZCgpIHx8IGlzU2FmZVR5cGVGb3JET01Ub1JlYWRB
bmRXcml0ZSh0eXBlKSkKLSAgICAgICAgcmV0dXJuIHJlYWRQbGF0Zm9ybVZhbHVlQXNTdHJpbmco
dHlwZSwgbV9jaGFuZ2VDb3VudCwgbV9wYXN0ZWJvYXJkTmFtZSk7Ci0KLSAgICBpZiAoYXV0byBi
dWZmZXIgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmJ1ZmZl
ckZvclR5cGUoY3VzdG9tV2ViS2l0UGFzdGVib2FyZERhdGFUeXBlLCBtX3Bhc3RlYm9hcmROYW1l
KSkgewotICAgICAgICBOU1N0cmluZyAqY3VzdG9tRGF0YVZhbHVlID0gY3VzdG9tRGF0YUZyb21T
aGFyZWRCdWZmZXIoKmJ1ZmZlcikuc2FtZU9yaWdpbkN1c3RvbURhdGEuZ2V0KHR5cGUpOwotICAg
ICAgICBpZiAoY3VzdG9tRGF0YVZhbHVlLmxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBjdXN0
b21EYXRhVmFsdWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQotc3RhdGljIHZvaWQg
YWRkSFRNTENsaXBib2FyZFR5cGVzRm9yQ29jb2FUeXBlKExpc3RIYXNoU2V0PFN0cmluZz4mIHJl
c3VsdFR5cGVzLCBOU1N0cmluZyAqY29jb2FUeXBlKQordm9pZCBQYXN0ZWJvYXJkOjphZGRIVE1M
Q2xpcGJvYXJkVHlwZXNGb3JDb2NvYVR5cGUoTGlzdEhhc2hTZXQ8U3RyaW5nPiYgcmVzdWx0VHlw
ZXMsIGNvbnN0IFN0cmluZyYgY29jb2FUeXBlLCBjb25zdCBTdHJpbmcmKQogewogICAgIC8vIFVU
SSBtYXkgbm90IGRvIHRoZXNlIHJpZ2h0LCBzbyBtYWtlIHN1cmUgd2UgZ2V0IHRoZSByaWdodCwg
cHJlZGljdGFibGUgcmVzdWx0LgogICAgIGlmIChbY29jb2FUeXBlIGlzRXF1YWxUb1N0cmluZzoo
TlNTdHJpbmcgKilrVVRUeXBlUGxhaW5UZXh0XQpAQCAtNDIxLDMyICszODAsNiBAQCB2b2lkIFBh
c3RlYm9hcmQ6OndyaXRlU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBk
YXRhKQogICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+d3Jp
dGVUb1Bhc3RlYm9hcmQoY29jb2FUeXBlLmdldCgpLCBkYXRhLCBtX3Bhc3RlYm9hcmROYW1lKTsK
IH0KIAotVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6dHlwZXNGb3JCaW5kaW5ncygpCi17Ci0g
ICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7Ci0gICAgaWYgKFNldHRpbmdzOjpjdXN0b21QYXN0ZWJv
YXJkRGF0YUVuYWJsZWQoKSkKLSAgICAgICAgdHlwZXMgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+
cGFzdGVib2FyZFN0cmF0ZWd5KCktPnR5cGVzU2FmZUZvckRPTVRvUmVhZEFuZFdyaXRlKG1fcGFz
dGVib2FyZE5hbWUpOwotICAgIGVsc2UKLSAgICAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBh
c3RlYm9hcmRTdHJhdGVneSgpLT5nZXRUeXBlcyh0eXBlcywgbV9wYXN0ZWJvYXJkTmFtZSk7Ci0K
LSAgICAvLyBFbmZvcmNlIGNoYW5nZUNvdW50IG91cnNlbHZlcyBmb3Igc2VjdXJpdHkuIFdlIGNo
ZWNrIGFmdGVyIHJlYWRpbmcgaW5zdGVhZCBvZiBiZWZvcmUgdG8gYmUKLSAgICAvLyBzdXJlIGl0
IGRvZXNuJ3QgY2hhbmdlIGJldHdlZW4gb3VyIHRlc3RpbmcgdGhlIGNoYW5nZSBjb3VudCBhbmQg
YWNjZXNzaW5nIHRoZSBkYXRhLgotICAgIGF1dG8gY2hhbmdlQ291bnQgPSBjaGFuZ2VDb3VudEZv
clBhc3RlYm9hcmQobV9wYXN0ZWJvYXJkTmFtZSk7Ci0gICAgaWYgKG1fY2hhbmdlQ291bnQgIT0g
Y2hhbmdlQ291bnQpCi0gICAgICAgIHJldHVybiB7IH07Ci0KLSAgICBpZiAoU2V0dGluZ3M6OmN1
c3RvbVBhc3RlYm9hcmREYXRhRW5hYmxlZCgpKQotICAgICAgICByZXR1cm4gdHlwZXM7Ci0KLSAg
ICBMaXN0SGFzaFNldDxTdHJpbmc+IHJlc3VsdDsKLSAgICBmb3IgKGF1dG8gY29jb2FUeXBlIDog
dHlwZXMpCi0gICAgICAgIGFkZEhUTUxDbGlwYm9hcmRUeXBlc0ZvckNvY29hVHlwZShyZXN1bHQs
IGNvY29hVHlwZSk7Ci0KLSAgICBWZWN0b3I8U3RyaW5nPiB2ZWN0b3I7Ci0gICAgY29weVRvVmVj
dG9yKHJlc3VsdCwgdmVjdG9yKTsKLSAgICByZXR1cm4gdmVjdG9yOwotfQotCiBWZWN0b3I8U3Ry
aW5nPiBQYXN0ZWJvYXJkOjpyZWFkRmlsZW5hbWVzKCkKIHsKICAgICBWZWN0b3I8U3RyaW5nPiBm
aWxlbmFtZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZv
cm1QYXN0ZWJvYXJkSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3Jt
UGFzdGVib2FyZElPUy5tbQppbmRleCA2MmE0MGM0ZDk1YTdiNWY5YjgwMTNhNjU0M2YxYmU1MjMz
MTkzN2NjLi4yYjhhNDc3MjljOGFhZWNhZGFkYzY5Y2I3YTMxNWQ3MzVlNjcwZjc2IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1Mu
bW0KQEAgLTM3NSw3ICszNzUsNyBAQCBWZWN0b3I8U3RyaW5nPiBQbGF0Zm9ybVBhc3RlYm9hcmQ6
OnR5cGVzU2FmZUZvckRPTVRvUmVhZEFuZFdyaXRlKCkgY29uc3QKICAgICAgICAgaWYgKFt0eXBl
IGlzRXF1YWxUb1N0cmluZzpAKGN1c3RvbVdlYktpdFBhc3RlYm9hcmREYXRhVHlwZSldKQogICAg
ICAgICAgICAgY29udGludWU7CiAKLSAgICAgICAgaWYgKGlzU2FmZVR5cGVGb3JET01Ub1JlYWRB
bmRXcml0ZSh0eXBlKSkgeworICAgICAgICBpZiAoUGFzdGVib2FyZDo6aXNTYWZlVHlwZUZvckRP
TVRvUmVhZEFuZFdyaXRlKHR5cGUpKSB7CiAgICAgICAgICAgICBkb21QYXN0ZWJvYXJkVHlwZXMu
YWRkKHR5cGUpOwogICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tIGIvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0KaW5kZXggMTczMWQ2YTA5ZDg4NzU0
NmMyMmRhODc3N2NkOTBjYzJkNjhiZDY1OS4uY2ZiYzY5NzU4ZjgyMmZiMTNlYzVjMDA4ZGYxYmU3
MjMzODM4NWM0YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3Rl
Ym9hcmRNYWMubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRN
YWMubW0KQEAgLTI2LDM0ICsyNiwxNyBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJQ
YXN0ZWJvYXJkLmgiCiAKLSNpbXBvcnQgIkNhY2hlZEltYWdlLmgiCi0jaW1wb3J0ICJEb2N1bWVu
dC5oIgotI2ltcG9ydCAiRG9jdW1lbnRGcmFnbWVudC5oIgotI2ltcG9ydCAiRG9jdW1lbnRMb2Fk
ZXIuaCIKICNpbXBvcnQgIkRyYWdEYXRhLmgiCi0jaW1wb3J0ICJFZGl0aW5nLmgiCi0jaW1wb3J0
ICJFZGl0b3IuaCIKLSNpbXBvcnQgIkVkaXRvckNsaWVudC5oIgotI2ltcG9ydCAiRnJhbWUuaCIK
LSNpbXBvcnQgIkZyYW1lTG9hZGVyQ2xpZW50LmgiCi0jaW1wb3J0ICJGcmFtZVZpZXcuaCIKLSNp
bXBvcnQgIkhpdFRlc3RSZXN1bHQuaCIKICNpbXBvcnQgIkltYWdlLmgiCi0jaW1wb3J0ICJMZWdh
Y3lXZWJBcmNoaXZlLmgiCiAjaW1wb3J0ICJMb2FkZXJOU1VSTEV4dHJhcy5oIgogI2ltcG9ydCAi
TUlNRVR5cGVSZWdpc3RyeS5oIgogI2ltcG9ydCAiUGFzdGVib2FyZFN0cmF0ZWd5LmgiCiAjaW1w
b3J0ICJQbGF0Zm9ybVBhc3RlYm9hcmQuaCIKICNpbXBvcnQgIlBsYXRmb3JtU3RyYXRlZ2llcy5o
IgotI2ltcG9ydCAiUmVuZGVySW1hZ2UuaCIKLSNpbXBvcnQgIlNldHRpbmdzLmgiCi0jaW1wb3J0
ICJUZXh0LmgiCiAjaW1wb3J0ICJVUkwuaCIKICNpbXBvcnQgIlVUSVV0aWxpdGllcy5oIgogI2lt
cG9ydCAiV2ViQ29yZU5TU3RyaW5nRXh0cmFzLmgiCi0jaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50
ZXJmYWNlLmgiCiAjaW1wb3J0ICJXZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMuaCIKLSNpbXBv
cnQgIm1hcmt1cC5oIgogI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KICNp
bXBvcnQgPHBhbC9zcGkvbWFjL0hJU2VydmljZXNTUEkuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5Q
dHIuaD4KQEAgLTkxLDExICs3NCw2IEBAIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiB3cml0YWJsZVR5
cGVzRm9ySW1hZ2UoKQogICAgIHJldHVybiB0eXBlczsKIH0KIAotbG9uZyBQYXN0ZWJvYXJkOjpj
aGFuZ2VDb3VudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5w
YXN0ZWJvYXJkU3RyYXRlZ3koKS0+Y2hhbmdlQ291bnQobV9wYXN0ZWJvYXJkTmFtZSk7Ci19Ci0K
IE5TQXJyYXkgKlBhc3RlYm9hcmQ6OnN1cHBvcnRlZEZpbGVVcGxvYWRQYXN0ZWJvYXJkVHlwZXMo
KQogewogICAgIHJldHVybiBAWyAoTlNTdHJpbmcgKilOU0ZpbGVzUHJvbWlzZVBib2FyZFR5cGUs
IChOU1N0cmluZyAqKU5TRmlsZW5hbWVzUGJvYXJkVHlwZSBdOwpAQCAtMTc5LDExICsxNTcsNiBA
QCB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlKGNvbnN0IFBhc3RlYm9hcmRXZWJDb250ZW50JiBjb250
ZW50KQogICAgICAgICBtX2NoYW5nZUNvdW50ID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3Rl
Ym9hcmRTdHJhdGVneSgpLT5zZXRTdHJpbmdGb3JUeXBlKGNvbnRlbnQuZGF0YUluU3RyaW5nRm9y
bWF0LCBOU1N0cmluZ1Bib2FyZFR5cGUsIG1fcGFzdGVib2FyZE5hbWUpOwogfQogCi12b2lkIFBh
c3RlYm9hcmQ6OndyaXRlQ3VzdG9tRGF0YShjb25zdCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSYgZGF0
YSkKLXsKLSAgICBtX2NoYW5nZUNvdW50ID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9h
cmRTdHJhdGVneSgpLT53cml0ZUN1c3RvbURhdGEoZGF0YSwgbV9wYXN0ZWJvYXJkTmFtZSk7Ci19
Ci0KIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBT
bWFydFJlcGxhY2VPcHRpb24gc21hcnRSZXBsYWNlT3B0aW9uKQogewogICAgIFZlY3RvcjxTdHJp
bmc+IHR5cGVzOwpAQCAtNDkzLDcgKzQ2Niw3IEBAIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBhYnNv
bHV0ZVVSTHNGcm9tUGFzdGVib2FyZEZpbGVuYW1lcyhjb25zdCBTdHJpbmcmIHBhc3RlYm9hCiAg
ICAgcmV0dXJuIHVybHM7CiB9CiAKLXN0YXRpYyBTdHJpbmcgcmVhZFBsYXRmb3JtVmFsdWVBc1N0
cmluZyhjb25zdCBTdHJpbmcmIGRvbVR5cGUsIGxvbmcgY2hhbmdlQ291bnQsIGNvbnN0IFN0cmlu
ZyYgcGFzdGVib2FyZE5hbWUpCitTdHJpbmcgUGFzdGVib2FyZDo6cmVhZFBsYXRmb3JtVmFsdWVB
c1N0cmluZyhjb25zdCBTdHJpbmcmIGRvbVR5cGUsIGxvbmcgY2hhbmdlQ291bnQsIGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7CiAgICAgY29uc3QgU3RyaW5nJiBjb2NvYVR5cGUgPSBj
b2NvYVR5cGVGcm9tSFRNTENsaXBib2FyZFR5cGUoZG9tVHlwZSk7CiAgICAgU3RyaW5nIGNvY29h
VmFsdWU7CkBAIC01MTEsMjAgKzQ4NCw2IEBAIHN0YXRpYyBTdHJpbmcgcmVhZFBsYXRmb3JtVmFs
dWVBc1N0cmluZyhjb25zdCBTdHJpbmcmIGRvbVR5cGUsIGxvbmcgY2hhbmdlQ291bnQsCiAgICAg
cmV0dXJuIFN0cmluZygpOwogfQogCi1TdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZ0ZvckJp
bmRpbmdzKGNvbnN0IFN0cmluZyYgdHlwZSkKLXsKLSAgICBpZiAoIVNldHRpbmdzOjpjdXN0b21Q
YXN0ZWJvYXJkRGF0YUVuYWJsZWQoKSB8fCBpc1NhZmVUeXBlRm9yRE9NVG9SZWFkQW5kV3JpdGUo
dHlwZSkpCi0gICAgICAgIHJldHVybiByZWFkUGxhdGZvcm1WYWx1ZUFzU3RyaW5nKHR5cGUsIG1f
Y2hhbmdlQ291bnQsIG1fcGFzdGVib2FyZE5hbWUpOwotCi0gICAgaWYgKGF1dG8gYnVmZmVyID0g
cGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5idWZmZXJGb3JUeXBl
KGN1c3RvbVdlYktpdFBhc3RlYm9hcmREYXRhVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSkpIHsKLSAg
ICAgICAgTlNTdHJpbmcgKmN1c3RvbURhdGFWYWx1ZSA9IGN1c3RvbURhdGFGcm9tU2hhcmVkQnVm
ZmVyKCpidWZmZXIpLnNhbWVPcmlnaW5DdXN0b21EYXRhLmdldCh0eXBlKTsKLSAgICAgICAgaWYg
KGN1c3RvbURhdGFWYWx1ZS5sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gY3VzdG9tRGF0YVZh
bHVlOwotICAgIH0KLQotICAgIHJldHVybiB7IH07Ci19Ci0KIHN0YXRpYyBTdHJpbmcgdXRpVHlw
ZUZyb21Db2NvYVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQogewogICAgIGlmIChSZXRhaW5QdHI8
Q0ZTdHJpbmdSZWY+IHV0aVR5cGUgPSBhZG9wdENGKFVUVHlwZUNyZWF0ZVByZWZlcnJlZElkZW50
aWZpZXJGb3JUYWcoa1VUVGFnQ2xhc3NOU1Bib2FyZFR5cGUsIHR5cGUuY3JlYXRlQ0ZTdHJpbmco
KS5nZXQoKSwgMCkpKSB7CkBAIC01MzQsNyArNDkzLDcgQEAgc3RhdGljIFN0cmluZyB1dGlUeXBl
RnJvbUNvY29hVHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAgcmV0dXJuIFN0cmluZygpOwog
fQogCi1zdGF0aWMgdm9pZCBhZGRIVE1MQ2xpcGJvYXJkVHlwZXNGb3JDb2NvYVR5cGUoTGlzdEhh
c2hTZXQ8U3RyaW5nPiYgcmVzdWx0VHlwZXMsIGNvbnN0IFN0cmluZyYgY29jb2FUeXBlLCBjb25z
dCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQordm9pZCBQYXN0ZWJvYXJkOjphZGRIVE1MQ2xpcGJv
YXJkVHlwZXNGb3JDb2NvYVR5cGUoTGlzdEhhc2hTZXQ8U3RyaW5nPiYgcmVzdWx0VHlwZXMsIGNv
bnN0IFN0cmluZyYgY29jb2FUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQogewog
ICAgIGlmIChjb2NvYVR5cGUgPT0gIk5lWFQgcGxhaW4gYXNjaWkgcGFzdGVib2FyZCB0eXBlIikK
ICAgICAgICAgcmV0dXJuOyAvLyBTa2lwIHRoaXMgYW5jaWVudCB0eXBlIHRoYXQgZ2V0cyBhdXRv
LXN1cHBsaWVkIGJ5IHNvbWUgc3lzdGVtIGNvbnZlcnNpb24uCkBAIC01OTgsMzAgKzU1Nyw2IEBA
IHZvaWQgUGFzdGVib2FyZDo6d3JpdGVTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBT
dHJpbmcmIGRhdGEpCiAgICAgfQogfQogCi1WZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBl
c0ZvckJpbmRpbmdzKCkKLXsKLSAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKLSAgICBpZiAoU2V0
dGluZ3M6OmN1c3RvbVBhc3RlYm9hcmREYXRhRW5hYmxlZCgpKQotICAgICAgICB0eXBlcyA9IHBs
YXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+dHlwZXNTYWZlRm9yRE9N
VG9SZWFkQW5kV3JpdGUobV9wYXN0ZWJvYXJkTmFtZSk7Ci0gICAgZWxzZQotICAgICAgICBwbGF0
Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmdldFR5cGVzKHR5cGVzLCBt
X3Bhc3RlYm9hcmROYW1lKTsKLQotICAgIC8vIEVuZm9yY2UgY2hhbmdlQ291bnQgb3Vyc2VsdmVz
IGZvciBzZWN1cml0eS4gV2UgY2hlY2sgYWZ0ZXIgcmVhZGluZyBpbnN0ZWFkIG9mIGJlZm9yZSB0
byBiZQotICAgIC8vIHN1cmUgaXQgZG9lc24ndCBjaGFuZ2UgYmV0d2VlbiBvdXIgdGVzdGluZyB0
aGUgY2hhbmdlIGNvdW50IGFuZCBhY2Nlc3NpbmcgdGhlIGRhdGEuCi0gICAgaWYgKG1fY2hhbmdl
Q291bnQgIT0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5jaGFu
Z2VDb3VudChtX3Bhc3RlYm9hcmROYW1lKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGlm
IChTZXR0aW5nczo6Y3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkKCkpCi0gICAgICAgIHJldHVy
biB0eXBlczsKLQotICAgIExpc3RIYXNoU2V0PFN0cmluZz4gcmVzdWx0OwotICAgIGZvciAoYXV0
byYgY29jb2FUeXBlIDogdHlwZXMpCi0gICAgICAgIGFkZEhUTUxDbGlwYm9hcmRUeXBlc0ZvckNv
Y29hVHlwZShyZXN1bHQsIGNvY29hVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSk7Ci0KLSAgICBjb3B5
VG9WZWN0b3IocmVzdWx0LCB0eXBlcyk7Ci0gICAgcmV0dXJuIHR5cGVzOwotfQotCiBWZWN0b3I8
U3RyaW5nPiBQYXN0ZWJvYXJkOjpyZWFkRmlsZW5hbWVzKCkKIHsKICAgICAvLyBGSVhNRTogU2Vl
bXMgc2lsbHkgdG8gY29udmVydCBwYXRocyB0byBVUkxzIGFuZCB0aGVuIGJhY2sgdG8gcGF0aHMu
IERvZXMgdGhhdCBkbyBhbnl0aGluZyBoZWxwZnVsPwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtUGFzdGVib2FyZE1hYy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL21hYy9QbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0KaW5kZXggYjU5MGQ2NTU3ODk3
N2I5NDM5N2U4ZmMwYWMyNjExYzJmMzRlYTc4Yi4uZmQ1MDBhMzg0MWI1OWY1MGQzYTVmNGNkNzBl
NGQ1ODlhYWViN2ZiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bs
YXRmb3JtUGFzdGVib2FyZE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMv
UGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpbXBvcnQgIkNv
bG9yLmgiCiAjaW1wb3J0ICJQYXN0ZWJvYXJkLmgiCi0jaW1wb3J0ICJTZXR0aW5ncy5oIgogI2lt
cG9ydCAiVVJMLmgiCiAjaW1wb3J0ICJTaGFyZWRCdWZmZXIuaCIKICNpbXBvcnQgPHd0Zi9IYXNo
Q291bnRlZFNldC5oPgpAQCAtMTI1LDcgKzEyNCw3IEBAIFZlY3RvcjxTdHJpbmc+IFBsYXRmb3Jt
UGFzdGVib2FyZDo6dHlwZXNTYWZlRm9yRE9NVG9SZWFkQW5kV3JpdGUoKSBjb25zdAogICAgICAg
ICBpZiAoW3R5cGUgaXNFcXVhbFRvU3RyaW5nOkAoY3VzdG9tV2ViS2l0UGFzdGVib2FyZERhdGFU
eXBlKV0pCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAoaXNTYWZlVHlwZUZv
ckRPTVRvUmVhZEFuZFdyaXRlKHR5cGUpKQorICAgICAgICBpZiAoUGFzdGVib2FyZDo6aXNTYWZl
VHlwZUZvckRPTVRvUmVhZEFuZFdyaXRlKHR5cGUpKQogICAgICAgICAgICAgZG9tUGFzdGVib2Fy
ZFR5cGVzLmFkZCh0eXBlKTsKICAgICAgICAgZWxzZSBpZiAoYXV0byogZG9tVHlwZSA9IHNhZmVU
eXBlRm9yRE9NVG9SZWFkQW5kV3JpdGVGb3JQbGF0Zm9ybVR5cGUodHlwZSkpIHsKICAgICAgICAg
ICAgIGF1dG8gY29lcmNlZFR5cGUgPSBTdHJpbmc6OmZyb21VVEY4KGRvbVR5cGUpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCmluZGV4IDBlYzg3MDFm
NDFmNjMwMDA5MzE3NjE4MjQwZDIzNThjZDE1NTE4ODEuLjhhOGM5NDYyMjZjNTk3Y2E4YzA3Y2Ez
ZWY0OGNiZTkyMmFlZGY1N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dp
bi9QYXN0ZWJvYXJkV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFz
dGVib2FyZFdpbi5jcHAKQEAgLTI0Myw3ICsyNDMsMTMgQEAgc3RhdGljIHZvaWQgYWRkTWltZVR5
cGVzRm9yRm9ybWF0KExpc3RIYXNoU2V0PFN0cmluZz4mIHJlc3VsdHMsIGNvbnN0IEZPUk1BVEVU
QyYKICAgICB9CiB9CiAKLVZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnR5cGVzRm9yQmluZGlu
Z3MoKQorVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6dHlwZXNTYWZlRm9yQmluZGluZ3MoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworVmVjdG9yPFN0
cmluZz4gUGFzdGVib2FyZDo6dHlwZXNGb3JMZWdhY3lVbnNhZmVCaW5kaW5ncygpCiB7CiAgICAg
TGlzdEhhc2hTZXQ8U3RyaW5nPiByZXN1bHRzOwogCkBAIC0yODIsNyArMjg4LDcgQEAgVmVjdG9y
PFN0cmluZz4gUGFzdGVib2FyZDo6dHlwZXNUcmVhdGVkQXNGaWxlcygpCiAgICAgcmV0dXJuIHsg
fTsKIH0KIAotU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRTdHJpbmdGb3JCaW5kaW5ncyhjb25zdCBT
dHJpbmcmIHR5cGUpCitTdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZyhjb25zdCBTdHJpbmcm
IHR5cGUpCiB7CiAgICAgaWYgKCFtX2RhdGFPYmplY3QgJiYgbV9kcmFnRGF0YU1hcC5pc0VtcHR5
KCkpCiAgICAgICAgIHJldHVybiAiIjsKQEAgLTMwMiw2ICszMDgsMTIgQEAgU3RyaW5nIFBhc3Rl
Ym9hcmQ6OnJlYWRTdHJpbmdGb3JCaW5kaW5ncyhjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAgcmV0
dXJuICIiOwogfQogCitTdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZ0luQ3VzdG9tRGF0YShj
b25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHsgfTsK
K30KKwogVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6cmVhZEZpbGVuYW1lcygpCiB7CiAgICAg
VmVjdG9yPFN0cmluZz4gZmlsZU5hbWVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vd3BlL1Bhc3RlYm9hcmRXUEUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3Bl
L1Bhc3RlYm9hcmRXUEUuY3BwCmluZGV4IDE3ODAxYzJkYWYxZWUwN2U3ZTJjNTg2MWU4ZjA3MDdi
MjUwZmU2MGYuLmI4NDgyZjI1OWU5ZjlhMjk3NTYwYjhkZThiOTI2ZGQ2OGI4MWVhNmUgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9QYXN0ZWJvYXJkV1BFLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93cGUvUGFzdGVib2FyZFdQRS5jcHAKQEAgLTQ5LDcg
KzQ5LDEzIEBAIGJvb2wgUGFzdGVib2FyZDo6aGFzRGF0YSgpCiAgICAgcmV0dXJuICF0eXBlcy5p
c0VtcHR5KCk7CiB9CiAKLVZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnR5cGVzRm9yQmluZGlu
Z3MoKQorVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6dHlwZXNTYWZlRm9yQmluZGluZ3MoKQor
eworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworVmVjdG9yPFN0
cmluZz4gUGFzdGVib2FyZHR5cGVzRm9yTGVnYWN5VW5zYWZlQmluZGluZ3MoKQogewogICAgIFZl
Y3RvcjxTdHJpbmc+IHR5cGVzOwogICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJk
U3RyYXRlZ3koKS0+Z2V0VHlwZXModHlwZXMpOwpAQCAtNjEsMTEgKzY3LDE3IEBAIFZlY3RvcjxT
dHJpbmc+IFBhc3RlYm9hcmQ6OnR5cGVzVHJlYXRlZEFzRmlsZXMoKQogICAgIHJldHVybiB7IH07
CiB9CiAKLVN0cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nRm9yQmluZGluZ3MoY29uc3QgU3Ry
aW5nJiB0eXBlKQorU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRTdHJpbmcoY29uc3QgU3RyaW5nJiB0
eXBlKQogewogICAgIHJldHVybiBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0
ZWd5KCktPnJlYWRTdHJpbmdGcm9tUGFzdGVib2FyZCgwLCB0eXBlKTsKIH0KIAorU3RyaW5nIFBh
c3RlYm9hcmQ6OnJlYWRTdHJpbmdJbkN1c3RvbURhdGEoY29uc3QgU3RyaW5nJikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOworICAgIHJldHVybiB7IH07Cit9CisKIHZvaWQgUGFzdGVib2FyZDo6
d3JpdGVTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIHRleHQpCiB7CiAg
ICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT53cml0ZVRvUGFz
dGVib2FyZCh0eXBlLCB0ZXh0KTsK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322289</attachid>
            <date>2017-09-30 01:58:09 -0700</date>
            <delta_ts>2017-09-30 02:02:21 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-177700-20170930015807.patch</filename>
            <type>text/plain</type>
            <size>31226</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyNjc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODkyMzQ5NTAxMGU5NWZk
ZGM1N2UzOTE4NTYxM2FjOWRjMGI0YTRiYS4uYjBjMzY0M2MzNzZkZjVkMDNlYzk1ZTc4NTQzOGJi
NDQwN2Q5ZDQ3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0IEBACisyMDE3LTA5LTI5ICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFNoYXJlIG1vcmUgcGFzdGVi
b2FyZCBjb2RlIGJldHdlZW4gaU9TIGFuZCBtYWNPUyBhbmQgcmVtb3ZlIGRlcGVuZGVuY3kgb24g
U2V0dGluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3NzcwMAorCisgICAgICAgIFJldmlld2VkIGJ5IFdlbnNvbiBIc2llaC4KKworICAgICAgICBN
b3ZlZCBtb3JlIGNvZGUgZnJvbSBQYXN0ZWJvYXJkSU9TLm1tIGFuZCBQYXN0ZWJvYXJkTWFjLm1t
IGludG8gUGFzdGVib2FyZENvY29hLm1tIHRvIHNoYXJlIGNvZGUuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBhbHNvIHJlbW92ZXMgdGhlIGxheWVyaW5nIHZpb2xhdGlvbiBpbmFkdmVydGVudGx5IGlu
dHJvZHVjZWQgaW4gcjIyMjU5NSB3aGVyZWJ5IHdoaWNoCisgICAgICAgIFBhc3RlYm9hcmQgY29k
ZSBkZXBlbmRzIG9uIFNldHRpbmdzLiBUbyBkbyB0aGlzLCB0aGlzIHBhdGNoIHNwbGl0cyByZWFk
U3RyaW5nRm9yQmluZGluZ3MgaXMgaW50bworICAgICAgICByZWFkU3RyaW5nIGFuZCByZWFkU3Ry
aW5nSW5DdXN0b21EYXRhIGFuZCB0eXBlc0ZvckJpbmRpbmdzIGludG8gdHlwZXNTYWZlRm9yQmlu
ZGluZ3MgYW5kCisgICAgICAgIHR5cGVzRm9yTGVnYWN5VW5zYWZlQmluZGluZ3MsIGFuZCBtb3Zl
cyB0aGUgbG9naWMgdG8gZGVjaWRlIHdoZXRoZXIgYSBnaXZlbiB0eXBlIG9yIHN0cmluZyBpcyBy
ZWFkCisgICAgICAgIG9mZiBvZiB0aGUgbmF0aXZlIHBhc3RlYm9hcmQgZW50cnkgb3Igb3VyIGN1
c3RvbSBkYXRhIGVudHJ5IGlzIG1vdmVkIHRvIERhdGFUcmFuc2Zlci4KKworICAgICAgICBObyBu
ZXcgdGVzdHMgc2luY2UgdGhlcmUgc2hvdWxkIGJlIG5vIGJlaGF2aW9yYWwgY2hhbmdlLgorCisg
ICAgICAgICogZG9tL0RhdGFUcmFuc2Zlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJh
bnNmZXI6OmdldERhdGEgY29uc3QpOiBNb3ZlZCB0aGUgY29kZSB0byBkZWNpZGUgd2hldGhlciBz
dHJpbmcgaXMKKyAgICAgICAgcmVhZCBvZmYgb2YgY3VzdG9tIGRhdGEgb3IgbmF0aXZlIHBhc3Rl
Ym9hcmQgZnJvbSByZWFkU3RyaW5nRm9yQmluZGluZ3MuCisgICAgICAgIChXZWJDb3JlOjpEYXRh
VHJhbnNmZXI6OnR5cGVzIGNvbnN0KTogRGl0dG8gZnJvbSB0eXBlc0ZvckJpbmRpbmdzLgorICAg
ICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVi
b2FyZDo6aXNTYWZlVHlwZUZvckRPTVRvUmVhZEFuZFdyaXRlKTogTW92ZWQgaW50byBQYXN0ZWJv
YXJkLgorICAgICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmQuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9TdGF0aWNQYXN0ZWJvYXJkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0YXRpY1Bhc3RlYm9h
cmQ6OnJlYWRTdHJpbmcpOiBSZW5hbWVkIGZyb20gcmVhZFN0cmluZ0ZvckJpbmRpbmdzLgorICAg
ICAgICAoV2ViQ29yZTo6U3RhdGljUGFzdGVib2FyZDo6cmVhZFN0cmluZ0luQ3VzdG9tRGF0YSk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RhdGljUGFzdGVib2FyZDo6d3JpdGVTdHJpbmcp
OgorICAgICAgICAqIHBsYXRmb3JtL1N0YXRpY1Bhc3RlYm9hcmQuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9jb2NvYS9QYXN0ZWJvYXJkQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJv
YXJkOjp0eXBlc1NhZmVGb3JCaW5kaW5ncyk6IEV4dHJhY3RlZCBvdXQgb2YgdHlwZXNGb3JCaW5k
aW5ncyBpbiBQYXN0ZWJvYXJkSU9TLm1tCisgICAgICAgIGFuZCBQYXN0ZWJvYXJkTWFjLm1tLgor
ICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6dHlwZXNGb3JMZWdhY3lVbnNhZmVCaW5kaW5n
cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZFN0cmluZyk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZFN0cmluZ0luQ3VzdG9tRGF0
YSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVDdXN0b21EYXRh
KTogTW92ZWQgaGVyZSBmcm9tIFBhc3RlYm9hcmRJT1MubW0gYW5kIFBhc3RlYm9hcmRDb2NvYS5t
bS4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmNoYW5nZUNvdW50IGNvbnN0KTogRGl0
dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UGFzdGVib2FyZDo6dHlwZXNTYWZlRm9yQmluZGluZ3MpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnR5cGVzRm9yTGVnYWN5VW5zYWZlQmluZGluZ3MpOiBS
ZW5hbWVkIGZyb20gcmVhZFN0cmluZ0ZvckJpbmRpbmdzLgorICAgICAgICAoV2ViQ29yZTo6UGFz
dGVib2FyZDo6cmVhZFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFk
U3RyaW5nSW5DdXN0b21EYXRhKTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1Bhc3Rl
Ym9hcmRJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZUN1c3RvbURh
dGEpOiBNb3ZlZCB0byBQYXN0ZWJvYXJkQ29jb2EubW0uCisgICAgICAgIChXZWJDb3JlOjpQYXN0
ZWJvYXJkOjpjaGFuZ2VDb3VudCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFz
dGVib2FyZDo6cmVhZFBsYXRmb3JtVmFsdWVBc1N0cmluZyk6IE1vdmVkIGludG8gUGFzdGVib2Fy
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmFkZEhUTUxDbGlwYm9hcmRUeXBlc0Zv
ckNvY29hVHlwZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZFN0
cmluZ0ZvckJpbmRpbmdzKTogTW92ZWQgdG8gUGFzdGVib2FyZENvY29hLm1tLgorICAgICAgICAo
V2ViQ29yZTo6UGFzdGVib2FyZDo6dHlwZXNGb3JCaW5kaW5ncyk6IERpdHRvLgorICAgICAgICAq
IHBsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW06CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OnR5cGVzU2FmZUZvckRPTVRvUmVhZEFuZFdyaXRlIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OlBhc3RlYm9hcmQ6OmNoYW5nZUNvdW50IGNvbnN0KTogTW92ZWQgdG8gUGFzdGVib2Fy
ZENvY29hLm1tLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVDdXN0b21EYXRh
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFkUGxhdGZvcm1WYWx1
ZUFzU3RyaW5nKTogTW92ZWQgaW50byBQYXN0ZWJvYXJkLgorICAgICAgICAoV2ViQ29yZTo6UGFz
dGVib2FyZDo6cmVhZFN0cmluZ0ZvckJpbmRpbmdzKTogTW92ZWQgdG8gUGFzdGVib2FyZENvY29h
Lm1tLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6YWRkSFRNTENsaXBib2FyZFR5cGVz
Rm9yQ29jb2FUeXBlKTogTW92ZWQgaW50byBQYXN0ZWJvYXJkLgorICAgICAgICAoV2ViQ29yZTo6
UGFzdGVib2FyZDo6dHlwZXNGb3JCaW5kaW5ncyk6IE1vdmVkIHRvIFBhc3RlYm9hcmRDb2NvYS5t
bS4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjp0eXBlc1NhZmVGb3JET01Ub1JlYWRB
bmRXcml0ZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6dHlwZXNTYWZlRm9yQmluZGluZ3MpOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnR5cGVzRm9yTGVnYWN5VW5zYWZl
QmluZGluZ3MpOiBSZW5hbWVkIGZyb20gcmVhZFN0cmluZ0ZvckJpbmRpbmdzLgorICAgICAgICAo
V2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZFN0cmluZyk6IFJlbmFtZWQgZnJvbSByZWFkU3RyaW5n
Rm9yQmluZGluZ3MuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nSW5D
dXN0b21EYXRhKTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vd3BlL1Bhc3RlYm9hcmRXUEUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6dHlwZXNTYWZlRm9yQmluZGluZ3Mp
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmR0eXBlc0ZvckxlZ2FjeVVuc2Fm
ZUJpbmRpbmdzKTogUmVuYW1lZCBmcm9tIHJlYWRTdHJpbmdGb3JCaW5kaW5ncy4KKyAgICAgICAg
KFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWRTdHJpbmcpOiBSZW5hbWVkIGZyb20gcmVhZFN0cmlu
Z0ZvckJpbmRpbmdzLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZFN0cmluZ0lu
Q3VzdG9tRGF0YSk6IEFkZGVkLgorCiAyMDE3LTA5LTI5ICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CiAKICAgICAgICAgaHR0cC90ZXN0cy9wcmVjb25uZWN0L2xpbmstcmVsLXByZWNv
bm5lY3QtaHR0cHMuaHRtbCBpcyBmbGFreQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0RhdGFUcmFuc2Zlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVyLmNwcApp
bmRleCA3YmQ4NDRlMDRjZmQ2Zjg3MGY4MjRlZTgzODFhZDI3MTBhZjNhZThkLi4zMjIyMzdhOTEw
YjRlYTY0YzA1NTIyZDNjNmZkZTVkOTg4MTVlZTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRGF0YVRyYW5zZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5z
ZmVyLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIK
ICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKKyNpbmNsdWRlICJT
ZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN0YXRpY1Bhc3RlYm9hcmQuaCIKICNpbmNsdWRlICJXZWJD
b3JlUGFzdGVib2FyZEZpbGVSZWFkZXIuaCIKIApAQCAtMTQxLDcgKzE0MiwxMCBAQCBTdHJpbmcg
RGF0YVRyYW5zZmVyOjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkgY29uc3QKICAgICAgICAg
cmV0dXJuIHsgfTsKICNlbmRpZgogCi0gICAgcmV0dXJuIG1fcGFzdGVib2FyZC0+cmVhZFN0cmlu
Z0ZvckJpbmRpbmdzKG5vcm1hbGl6ZVR5cGUodHlwZSkpOworICAgIGF1dG8gbm9ybWFsaXplZFR5
cGUgPSBub3JtYWxpemVUeXBlKHR5cGUpOworICAgIGlmIChTZXR0aW5nczo6Y3VzdG9tUGFzdGVi
b2FyZERhdGFFbmFibGVkKCkgJiYgIVBhc3RlYm9hcmQ6OmlzU2FmZVR5cGVGb3JET01Ub1JlYWRB
bmRXcml0ZShub3JtYWxpemVkVHlwZSkpCisgICAgICAgIHJldHVybiBtX3Bhc3RlYm9hcmQtPnJl
YWRTdHJpbmdJbkN1c3RvbURhdGEobm9ybWFsaXplZFR5cGUpOworICAgIHJldHVybiBtX3Bhc3Rl
Ym9hcmQtPnJlYWRTdHJpbmcobm9ybWFsaXplZFR5cGUpOwogfQogCiB2b2lkIERhdGFUcmFuc2Zl
cjo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKQEAgLTE3
Miw3ICsxNzYsNyBAQCBWZWN0b3I8U3RyaW5nPiBEYXRhVHJhbnNmZXI6OnR5cGVzKCkgY29uc3QK
ICAgICBpZiAoIWNhblJlYWRUeXBlcygpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0
dXJuIG1fcGFzdGVib2FyZC0+dHlwZXNGb3JCaW5kaW5ncygpOworICAgIHJldHVybiBTZXR0aW5n
czo6Y3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkKCkgPyBtX3Bhc3RlYm9hcmQtPnR5cGVzU2Fm
ZUZvckJpbmRpbmdzKCkgOiBtX3Bhc3RlYm9hcmQtPnR5cGVzRm9yTGVnYWN5VW5zYWZlQmluZGlu
Z3MoKTsKIH0KIAogRmlsZUxpc3QmIERhdGFUcmFuc2Zlcjo6ZmlsZXMoKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy93cGUvRWRpdG9yV1BFLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvd3BlL0VkaXRvcldQRS5jcHAKaW5kZXggYzkzYmFiYTIxYTdmMmM0OTc5
MTA3MTRlNzI1ZWE3MmU2MWIyMjdiMS4uNTliNjUxNmJlNzcxMjVjODgxNjM4NzYzZGQ5ODRhNmIz
M2U5ODFjNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy93cGUvRWRpdG9yV1BF
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3dwZS9FZGl0b3JXUEUuY3BwCkBAIC00
Myw3ICs0Myw3IEBAIHN0YXRpYyBSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gY3JlYXRlRnJhZ21l
bnRGcm9tUGFzdGVib2FyZERhdGEoUGFzdGVib2FyZCYgcGFzCiAgICAgICAgIHJldHVybiBudWxs
cHRyOwogCiAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKCJ0ZXh0L2h0bWw7Y2hhcnNldD11dGYtOCIp
ICYmIGZyYW1lLmRvY3VtZW50KCkpIHsKLSAgICAgICAgU3RyaW5nIG1hcmt1cCA9IHBhc3RlYm9h
cmQucmVhZFN0cmluZ0ZvckJpbmRpbmdzKCJ0ZXh0L2h0bWw7Y2hhcnNldD11dGYtOCIpOworICAg
ICAgICBTdHJpbmcgbWFya3VwID0gcGFzdGVib2FyZC5yZWFkU3RyaW5nKCJ0ZXh0L2h0bWw7Y2hh
cnNldD11dGYtOCIpOwogICAgICAgICBpZiAoUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdt
ZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKCpmcmFtZS5kb2N1bWVudCgpLCBtYXJrdXAs
IGVtcHR5U3RyaW5nKCksIERpc2FsbG93U2NyaXB0aW5nQW5kUGx1Z2luQ29udGVudCkpCiAgICAg
ICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CiAgICAgfQpAQCAtNTMsNyArNTMsNyBAQCBzdGF0aWMg
UmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdtZW50RnJvbVBhc3RlYm9hcmREYXRh
KFBhc3RlYm9hcmQmIHBhcwogCiAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKCJ0ZXh0L3BsYWluO2No
YXJzZXQ9dXRmLTgiKSkgewogICAgICAgICBjaG9zZVBsYWluVGV4dCA9IHRydWU7Ci0gICAgICAg
IGlmIChSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21lbnQgPSBjcmVhdGVGcmFnbWVudEZy
b21UZXh0KHJhbmdlLCBwYXN0ZWJvYXJkLnJlYWRTdHJpbmdGb3JCaW5kaW5ncygidGV4dC9wbGFp
bjtjaGFyc2V0PXV0Zi04IikpKQorICAgICAgICBpZiAoUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+
IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChyYW5nZSwgcGFzdGVib2FyZC5yZWFk
U3RyaW5nKCJ0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgiKSkpCiAgICAgICAgICAgICByZXR1cm4g
ZnJhZ21lbnQ7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9Q
YXN0ZWJvYXJkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuY3BwCmlu
ZGV4IDhjYmRhNmZhZTNkYjE0OGZiZDAyZTYwOGU5MGFiMjFhNTViY2ZiMjAuLjQzYzY2N2EzN2Vi
MjU4NzJlYjI3MmZiZDc4MjZmNDI1ZDg0NTFiZDMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL1Bhc3RlYm9hcmQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bh
c3RlYm9hcmQuY3BwCkBAIC0zOSw3ICszOSw3IEBAIG5hbWVzcGFjZSBXZWJDb3JlIHsKIFBhc3Rl
Ym9hcmRJbWFnZTo6UGFzdGVib2FyZEltYWdlKCkgPSBkZWZhdWx0OwogUGFzdGVib2FyZEltYWdl
Ojp+UGFzdGVib2FyZEltYWdlKCkgPSBkZWZhdWx0OwogCi1ib29sIGlzU2FmZVR5cGVGb3JET01U
b1JlYWRBbmRXcml0ZShjb25zdCBTdHJpbmcmIHR5cGUpCitib29sIFBhc3RlYm9hcmQ6OmlzU2Fm
ZVR5cGVGb3JET01Ub1JlYWRBbmRXcml0ZShjb25zdCBTdHJpbmcmIHR5cGUpCiB7CiAgICAgcmV0
dXJuIHR5cGUgPT0gInRleHQvcGxhaW4iIHx8IHR5cGUgPT0gInRleHQvaHRtbCIgfHwgdHlwZSA9
PSAidGV4dC91cmktbGlzdCI7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9QYXN0ZWJvYXJkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmgKaW5k
ZXggYWQ0MDIyZGM1YjY3NDMzNmI4ZWY3ZTgzOWU0OTcwNDEyYWZmYjU3Mi4uODM5MzEyZDY3M2Q5
NDMxYjI5NjdhYzgzZmEwNmRiYjcxNWI3MjUwNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vUGFzdGVib2FyZC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3Rl
Ym9hcmQuaApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUgIkRyYWdJbWFnZS5oIgogI2luY2x1
ZGUgIlVSTC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+CisjaW5jbHVkZSA8d3RmL0xpc3RI
YXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxlLmg+CiAjaW5jbHVkZSA8d3RmL1Zl
Y3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmluZy5oPgpAQCAtMTcxLDggKzE3Miw2
IEBAIFdFQkNPUkVfRVhQT1JUIFBhc3RlYm9hcmRDdXN0b21EYXRhIGN1c3RvbURhdGFGcm9tU2hh
cmVkQnVmZmVyKGNvbnN0IFNoYXJlZEJ1ZmZlCiBjb25zdCBjaGFyIGN1c3RvbVdlYktpdFBhc3Rl
Ym9hcmREYXRhVHlwZVtdID0gImNvbS5hcHBsZS5XZWJLaXQuY3VzdG9tLXBhc3RlYm9hcmQtZGF0
YSI7CiAjZW5kaWYKIAotYm9vbCBpc1NhZmVUeXBlRm9yRE9NVG9SZWFkQW5kV3JpdGUoY29uc3Qg
U3RyaW5nJiB0eXBlKTsKLQogY2xhc3MgUGFzdGVib2FyZCB7CiAgICAgV1RGX01BS0VfTk9OQ09Q
WUFCTEUoUGFzdGVib2FyZCk7IFdURl9NQUtFX0ZBU1RfQUxMT0NBVEVEOwogcHVibGljOgpAQCAt
MTkyLDEyICsxOTEsMTYgQEAgcHVibGljOgogCiAgICAgV0VCQ09SRV9FWFBPUlQgc3RhdGljIHN0
ZDo6dW5pcXVlX3B0cjxQYXN0ZWJvYXJkPiBjcmVhdGVGb3JDb3B5QW5kUGFzdGUoKTsKIAorICAg
IHN0YXRpYyBib29sIGlzU2FmZVR5cGVGb3JET01Ub1JlYWRBbmRXcml0ZShjb25zdCBTdHJpbmcm
KTsKKwogICAgIHZpcnR1YWwgYm9vbCBpc1N0YXRpYygpIGNvbnN0IHsgcmV0dXJuIGZhbHNlOyB9
CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzRGF0YSgpOwotICAgIHZpcnR1YWwgVmVjdG9yPFN0cmlu
Zz4gdHlwZXNGb3JCaW5kaW5ncygpOworICAgIHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gdHlwZXNT
YWZlRm9yQmluZGluZ3MoKTsKKyAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IHR5cGVzRm9yTGVn
YWN5VW5zYWZlQmluZGluZ3MoKTsKICAgICB2aXJ0dWFsIFZlY3RvcjxTdHJpbmc+IHR5cGVzVHJl
YXRlZEFzRmlsZXMoKTsKLSAgICB2aXJ0dWFsIFN0cmluZyByZWFkU3RyaW5nRm9yQmluZGluZ3Mo
Y29uc3QgU3RyaW5nJiB0eXBlKTsKKyAgICB2aXJ0dWFsIFN0cmluZyByZWFkU3RyaW5nKGNvbnN0
IFN0cmluZyYgdHlwZSk7CisgICAgdmlydHVhbCBTdHJpbmcgcmVhZFN0cmluZ0luQ3VzdG9tRGF0
YShjb25zdCBTdHJpbmcmIHR5cGUpOwogCiAgICAgdmlydHVhbCB2b2lkIHdyaXRlU3RyaW5nKGNv
bnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRhKTsKICAgICB2aXJ0dWFsIHZvaWQg
Y2xlYXIoKTsKQEAgLTI3OCw2ICsyODEsOCBAQCBwcml2YXRlOgogI2VuZGlmCiAKICNpZiBQTEFU
Rk9STShDT0NPQSkKKyAgICBTdHJpbmcgcmVhZFBsYXRmb3JtVmFsdWVBc1N0cmluZyhjb25zdCBT
dHJpbmcmIGRvbVR5cGUsIGxvbmcgY2hhbmdlQ291bnQsIGNvbnN0IFN0cmluZyYgcGFzdGVib2Fy
ZE5hbWUpOworICAgIHN0YXRpYyB2b2lkIGFkZEhUTUxDbGlwYm9hcmRUeXBlc0ZvckNvY29hVHlw
ZShMaXN0SGFzaFNldDxTdHJpbmc+JiByZXN1bHRUeXBlcywgY29uc3QgU3RyaW5nJiBjb2NvYVR5
cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpOwogICAgIFN0cmluZyByZWFkU3RyaW5n
Rm9yUGxhdGZvcm1UeXBlKGNvbnN0IFN0cmluZyYpOwogI2VuZGlmCiAKZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N0YXRpY1Bhc3RlYm9hcmQuY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vU3RhdGljUGFzdGVib2FyZC5jcHAKaW5kZXggNzExZmE2MzIyN2JlY2Q3M2Nl
YmE0MDBmYjQzMTQzMTQ1MzU1YmI4Mi4uZThmN2VmNTU3MzkyZTkxNDNjZThkNjM3ZjQ2ZWNiZTEy
YTdlZjg3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3RhdGljUGFzdGVi
b2FyZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3RhdGljUGFzdGVib2FyZC5j
cHAKQEAgLTQwLDIwICs0MCwxOSBAQCBib29sIFN0YXRpY1Bhc3RlYm9hcmQ6Omhhc0RhdGEoKQog
ICAgIHJldHVybiAhbV9wbGF0Zm9ybURhdGEuaXNFbXB0eSgpIHx8ICFtX2N1c3RvbURhdGEuaXNF
bXB0eSgpOwogfQogCi1TdHJpbmcgU3RhdGljUGFzdGVib2FyZDo6cmVhZFN0cmluZ0ZvckJpbmRp
bmdzKGNvbnN0IFN0cmluZyYgdHlwZSkKK1N0cmluZyBTdGF0aWNQYXN0ZWJvYXJkOjpyZWFkU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKLSAgICBpZiAobV9wbGF0Zm9ybURhdGEuY29udGFp
bnModHlwZSkpCi0gICAgICAgIHJldHVybiBtX3BsYXRmb3JtRGF0YS5nZXQodHlwZSk7Ci0KLSAg
ICBpZiAobV9jdXN0b21EYXRhLmNvbnRhaW5zKHR5cGUpKQotICAgICAgICByZXR1cm4gbV9jdXN0
b21EYXRhLmdldCh0eXBlKTsKKyAgICByZXR1cm4gbV9wbGF0Zm9ybURhdGEuZ2V0KHR5cGUpOwor
fQogCi0gICAgcmV0dXJuIHsgfTsKK1N0cmluZyBTdGF0aWNQYXN0ZWJvYXJkOjpyZWFkU3RyaW5n
SW5DdXN0b21EYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAgICByZXR1cm4gbV9jdXN0b21E
YXRhLmdldCh0eXBlKTsKIH0KIAogdm9pZCBTdGF0aWNQYXN0ZWJvYXJkOjp3cml0ZVN0cmluZyhj
b25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgdmFsdWUpCiB7Ci0gICAgYXV0byYgcGFz
dGVib2FyZERhdGEgPSBpc1NhZmVUeXBlRm9yRE9NVG9SZWFkQW5kV3JpdGUodHlwZSkgPyBtX3Bs
YXRmb3JtRGF0YSA6IG1fY3VzdG9tRGF0YTsKKyAgICBhdXRvJiBwYXN0ZWJvYXJkRGF0YSA9IFBh
c3RlYm9hcmQ6OmlzU2FmZVR5cGVGb3JET01Ub1JlYWRBbmRXcml0ZSh0eXBlKSA/IG1fcGxhdGZv
cm1EYXRhIDogbV9jdXN0b21EYXRhOwogICAgIGlmIChwYXN0ZWJvYXJkRGF0YS5zZXQodHlwZSwg
dmFsdWUpLmlzTmV3RW50cnkpCiAgICAgICAgIG1fdHlwZXMuYXBwZW5kKHR5cGUpOwogICAgIGVs
c2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3RhdGljUGFzdGVib2Fy
ZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3RhdGljUGFzdGVib2FyZC5oCmluZGV4IGJj
YjZmN2E0MDZhYmY4MWNiNDVkMDA1M2FjYTc1NTlhYjFkYjk0ZDAuLjI4NTBiMzJjZjczZGQzMzAw
MDNjYzI0YjAyNWUwZWMwM2Q0NzU3NjMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1N0YXRpY1Bhc3RlYm9hcmQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9TdGF0
aWNQYXN0ZWJvYXJkLmgKQEAgLTQxLDkgKzQxLDExIEBAIHB1YmxpYzoKICAgICBib29sIGlzU3Rh
dGljKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgYm9vbCBoYXNEYXRhKCkg
ZmluYWw7Ci0gICAgVmVjdG9yPFN0cmluZz4gdHlwZXNGb3JCaW5kaW5ncygpIGZpbmFsIHsgcmV0
dXJuIG1fdHlwZXM7IH0KKyAgICBWZWN0b3I8U3RyaW5nPiB0eXBlc1NhZmVGb3JCaW5kaW5ncygp
IGZpbmFsIHsgcmV0dXJuIG1fdHlwZXM7IH0KKyAgICBWZWN0b3I8U3RyaW5nPiB0eXBlc0Zvckxl
Z2FjeVVuc2FmZUJpbmRpbmdzKCkgZmluYWwgeyByZXR1cm4gbV90eXBlczsgfQogICAgIFZlY3Rv
cjxTdHJpbmc+IHR5cGVzVHJlYXRlZEFzRmlsZXMoKSBmaW5hbCB7IHJldHVybiB7IH07IH0KLSAg
ICBTdHJpbmcgcmVhZFN0cmluZ0ZvckJpbmRpbmdzKGNvbnN0IFN0cmluZyYgdHlwZSkgZmluYWw7
CisgICAgU3RyaW5nIHJlYWRTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlKSBmaW5hbDsKKyAgICBT
dHJpbmcgcmVhZFN0cmluZ0luQ3VzdG9tRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpIGZpbmFsOwog
CiAgICAgdm9pZCB3cml0ZVN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYg
ZGF0YSkgZmluYWw7CiAgICAgdm9pZCBjbGVhcigpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGFzdGVib2FyZENvY29hLm1tIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vY29jb2EvUGFzdGVib2FyZENvY29hLm1tCmluZGV4IGU3NTA5ZmUxNWFkZTY3
ZThmYjFiZGVkNDg1NTljNGFmOTdiMzY2NzAuLmQ0MzAzZDkxOGI4MDI3YjU0ZTY5NWU2YzU4ODFh
ZDUzMDM5ZDY0ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2NvY29hL1Bh
c3RlYm9hcmRDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9jb2NvYS9QYXN0
ZWJvYXJkQ29jb2EubW0KQEAgLTI4LDYgKzI4LDcgQEAKIAogI2luY2x1ZGUgIlBhc3RlYm9hcmRT
dHJhdGVneS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgorI2luY2x1ZGUgIlNl
dHRpbmdzLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgiCiAjaW5jbHVkZSA8SW1hZ2VJTy9J
bWFnZUlPLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CkBAIC0xNTEsNiArMTUyLDM2
IEBAIFZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnR5cGVzVHJlYXRlZEFzRmlsZXMoKQogICAg
IHJldHVybiB0eXBlczsKIH0KIAorVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6dHlwZXNTYWZl
Rm9yQmluZGluZ3MoKQoreworICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzID0gcGxhdGZvcm1TdHJh
dGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT50eXBlc1NhZmVGb3JET01Ub1JlYWRBbmRX
cml0ZShtX3Bhc3RlYm9hcmROYW1lKTsKKworICAgIC8vIEVuZm9yY2UgY2hhbmdlQ291bnQgb3Vy
c2VsdmVzIGZvciBzZWN1cml0eS4gV2UgY2hlY2sgYWZ0ZXIgcmVhZGluZyBpbnN0ZWFkIG9mIGJl
Zm9yZSB0byBiZQorICAgIC8vIHN1cmUgaXQgZG9lc24ndCBjaGFuZ2UgYmV0d2VlbiBvdXIgdGVz
dGluZyB0aGUgY2hhbmdlIGNvdW50IGFuZCBhY2Nlc3NpbmcgdGhlIGRhdGEuCisgICAgaWYgKG1f
Y2hhbmdlQ291bnQgIT0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgp
LT5jaGFuZ2VDb3VudChtX3Bhc3RlYm9hcmROYW1lKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKwor
ICAgIHJldHVybiB0eXBlczsKK30KKworVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6dHlwZXNG
b3JMZWdhY3lVbnNhZmVCaW5kaW5ncygpCit7CisgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7Cisg
ICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5nZXRUeXBlcyh0
eXBlcywgbV9wYXN0ZWJvYXJkTmFtZSk7CisKKyAgICAvLyBFbmZvcmNlIGNoYW5nZUNvdW50IG91
cnNlbHZlcyBmb3Igc2VjdXJpdHkuIFdlIGNoZWNrIGFmdGVyIHJlYWRpbmcgaW5zdGVhZCBvZiBi
ZWZvcmUgdG8gYmUKKyAgICAvLyBzdXJlIGl0IGRvZXNuJ3QgY2hhbmdlIGJldHdlZW4gb3VyIHRl
c3RpbmcgdGhlIGNoYW5nZSBjb3VudCBhbmQgYWNjZXNzaW5nIHRoZSBkYXRhLgorICAgIGlmICht
X2NoYW5nZUNvdW50ICE9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3ko
KS0+Y2hhbmdlQ291bnQobV9wYXN0ZWJvYXJkTmFtZSkpCisgICAgICAgIHJldHVybiB7IH07CisK
KyAgICBMaXN0SGFzaFNldDxTdHJpbmc+IHJlc3VsdDsKKyAgICBmb3IgKGF1dG8mIGNvY29hVHlw
ZSA6IHR5cGVzKQorICAgICAgICBhZGRIVE1MQ2xpcGJvYXJkVHlwZXNGb3JDb2NvYVR5cGUocmVz
dWx0LCBjb2NvYVR5cGUsIG1fcGFzdGVib2FyZE5hbWUpOworCisgICAgY29weVRvVmVjdG9yKHJl
c3VsdCwgdHlwZXMpOworICAgIHJldHVybiB0eXBlczsKK30KKwogdm9pZCBQYXN0ZWJvYXJkOjpy
ZWFkKFBhc3RlYm9hcmRGaWxlUmVhZGVyJiByZWFkZXIpCiB7CiAgICAgYXV0byBpbWFnZVR5cGUg
PSBtaW1lVHlwZVRvSW1hZ2VUeXBlKHJlYWRlci50eXBlKTsKQEAgLTE5NCw1ICsyMjUsMzIgQEAg
dm9pZCBQYXN0ZWJvYXJkOjpyZWFkKFBhc3RlYm9hcmRGaWxlUmVhZGVyJiByZWFkZXIpCiAgICAg
cmVhZGVyLnJlYWQoaW1hZ2VUeXBlVG9GYWtlRmlsZW5hbWUoaW1hZ2VUeXBlKSwgYnVmZmVyLnJl
bGVhc2VOb25OdWxsKCkpOwogfQogCitTdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZyhjb25z
dCBTdHJpbmcmIHR5cGUpCit7CisgICAgcmV0dXJuIHJlYWRQbGF0Zm9ybVZhbHVlQXNTdHJpbmco
dHlwZSwgbV9jaGFuZ2VDb3VudCwgbV9wYXN0ZWJvYXJkTmFtZSk7Cit9CisKK1N0cmluZyBQYXN0
ZWJvYXJkOjpyZWFkU3RyaW5nSW5DdXN0b21EYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkKK3sKKyAg
ICBhdXRvIGJ1ZmZlciA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3ko
KS0+YnVmZmVyRm9yVHlwZShjdXN0b21XZWJLaXRQYXN0ZWJvYXJkRGF0YVR5cGUsIG1fcGFzdGVi
b2FyZE5hbWUpOworICAgIGlmICghYnVmZmVyKQorICAgICAgICByZXR1cm4geyB9OworCisgICAg
TlNTdHJpbmcgKmN1c3RvbURhdGFWYWx1ZSA9IGN1c3RvbURhdGFGcm9tU2hhcmVkQnVmZmVyKCpi
dWZmZXIpLnNhbWVPcmlnaW5DdXN0b21EYXRhLmdldCh0eXBlKTsKKyAgICBpZiAoIWN1c3RvbURh
dGFWYWx1ZS5sZW5ndGgpCisgICAgICAgIHJldHVybiB7IH07CisgICAgcmV0dXJuIGN1c3RvbURh
dGFWYWx1ZTsKK30KKwordm9pZCBQYXN0ZWJvYXJkOjp3cml0ZUN1c3RvbURhdGEoY29uc3QgUGFz
dGVib2FyZEN1c3RvbURhdGEmIGRhdGEpCit7CisgICAgbV9jaGFuZ2VDb3VudCA9IHBsYXRmb3Jt
U3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+d3JpdGVDdXN0b21EYXRhKGRhdGEs
IG1fcGFzdGVib2FyZE5hbWUpOworfQorCitsb25nIFBhc3RlYm9hcmQ6OmNoYW5nZUNvdW50KCkg
Y29uc3QKK3sKKyAgICByZXR1cm4gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJh
dGVneSgpLT5jaGFuZ2VDb3VudChtX3Bhc3RlYm9hcmROYW1lKTsKK30KKwogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0ay5jcHAKaW5kZXggODRhNTdkZTg0
NTM4NDY2NjE2ZjI4ZTc4M2I0NWFjODViOWYzOTI0Zi4uYmQ1ODAwZmExNDM2ZTlhOWY5NGE4OWFl
ZDc2NWFmZGZmOWRiMjdkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Rr
L1Bhc3RlYm9hcmRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0
ZWJvYXJkR3RrLmNwcApAQCAtMjUyLDcgKzI1MiwxMyBAQCBib29sIFBhc3RlYm9hcmQ6Omhhc0Rh
dGEoKQogICAgIHJldHVybiBtX3NlbGVjdGlvbkRhdGEtPmhhc1RleHQoKSB8fCBtX3NlbGVjdGlv
bkRhdGEtPmhhc01hcmt1cCgpIHx8IG1fc2VsZWN0aW9uRGF0YS0+aGFzVVJJTGlzdCgpIHx8IG1f
c2VsZWN0aW9uRGF0YS0+aGFzSW1hZ2UoKSB8fCBtX3NlbGVjdGlvbkRhdGEtPmhhc1Vua25vd25U
eXBlRGF0YSgpOwogfQogCi1WZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBlc0ZvckJpbmRp
bmdzKCkKK1ZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnR5cGVzU2FmZUZvckJpbmRpbmdzKCkK
K3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOyAvLyB3ZWJraXQub3JnL2IvMTc3NjMzOiBbR1RLXSBN
b3ZlIHRvIG5ldyBQYXN0ZWJvYXJkIEFQSQorICAgIHJldHVybiB7IH07Cit9CisKK1ZlY3RvcjxT
dHJpbmc+IFBhc3RlYm9hcmQ6OnR5cGVzRm9yTGVnYWN5VW5zYWZlQmluZGluZ3MoKQogewogICAg
IHJlYWRGcm9tQ2xpcGJvYXJkKCk7CiAKQEAgLTI4NSw3ICsyOTEsNyBAQCBWZWN0b3I8U3RyaW5n
PiBQYXN0ZWJvYXJkOjp0eXBlc1RyZWF0ZWRBc0ZpbGVzKCkKICAgICByZXR1cm4geyB9OwogfQog
Ci1TdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZ0ZvckJpbmRpbmdzKGNvbnN0IFN0cmluZyYg
dHlwZSkKK1N0cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSkK
IHsKICAgICByZWFkRnJvbUNsaXBib2FyZCgpOwogCkBAIC0zMDcsNiArMzEzLDEyIEBAIFN0cmlu
ZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nRm9yQmluZGluZ3MoY29uc3QgU3RyaW5nJiB0eXBlKQog
ICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAorU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRTdHJpbmdJ
bkN1c3RvbURhdGEoY29uc3QgU3RyaW5nJikKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOyAvLyB3
ZWJraXQub3JnL2IvMTc3NjMzOiBbR1RLXSBNb3ZlIHRvIG5ldyBQYXN0ZWJvYXJkIEFQSQorICAg
IHJldHVybiB7IH07Cit9CisKIFZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnJlYWRGaWxlbmFt
ZXMoKQogewogICAgIHJlYWRGcm9tQ2xpcGJvYXJkKCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvUGFzdGVib2FyZElPUy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL2lvcy9QYXN0ZWJvYXJkSU9TLm1tCmluZGV4IDNlMjgxNWQ2MWU1NjUxMDkxMjBmM2I2Y2Jj
NTIyMDc2MWQ0MDQzY2IuLjEzZTFlNjE2MTg3OTRlNjUyM2E3MDljYjg5NzFkY2RhMjgxOTI2NTYg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QYXN0ZWJvYXJkSU9TLm1t
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QYXN0ZWJvYXJkSU9TLm1tCkBAIC0y
NSwzNSArMjUsMTggQEAKICNpbXBvcnQgImNvbmZpZy5oIgogI2ltcG9ydCAiUGFzdGVib2FyZC5o
IgogCi0jaW1wb3J0ICJDYWNoZWRJbWFnZS5oIgotI2ltcG9ydCAiRG9jdW1lbnQuaCIKLSNpbXBv
cnQgIkRvY3VtZW50RnJhZ21lbnQuaCIKLSNpbXBvcnQgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW1w
b3J0ICJEcmFnRGF0YS5oIgotI2ltcG9ydCAiRWRpdGluZy5oIgotI2ltcG9ydCAiRWRpdG9yLmgi
Ci0jaW1wb3J0ICJFZGl0b3JDbGllbnQuaCIKLSNpbXBvcnQgIkZyYW1lLmgiCi0jaW1wb3J0ICJG
cmFtZUxvYWRlci5oIgotI2ltcG9ydCAiRnJhbWVMb2FkZXJDbGllbnQuaCIKLSNpbXBvcnQgIkhU
TUxFbGVtZW50LmgiCi0jaW1wb3J0ICJIVE1MUGFyc2VySWRpb21zLmgiCiAjaW1wb3J0ICJJbWFn
ZS5oIgotI2ltcG9ydCAiTGVnYWN5V2ViQXJjaGl2ZS5oIgogI2ltcG9ydCAiTm90SW1wbGVtZW50
ZWQuaCIKICNpbXBvcnQgIlBhc3RlYm9hcmRTdHJhdGVneS5oIgogI2ltcG9ydCAiUGxhdGZvcm1Q
YXN0ZWJvYXJkLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIKLSNpbXBvcnQgIlJl
bmRlckltYWdlLmgiCi0jaW1wb3J0ICJSdW50aW1lQXBwbGljYXRpb25DaGVja3MuaCIKLSNpbXBv
cnQgIlNldHRpbmdzLmgiCiAjaW1wb3J0ICJTaGFyZWRCdWZmZXIuaCIKLSNpbXBvcnQgIlRleHQu
aCIKICNpbXBvcnQgIlVSTC5oIgogI2ltcG9ydCAiVVRJVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJX
ZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMuaCIKLSNpbXBvcnQgIm1hcmt1cC5oIgogI2ltcG9y
dCA8TW9iaWxlQ29yZVNlcnZpY2VzL01vYmlsZUNvcmVTZXJ2aWNlcy5oPgorI2ltcG9ydCA8d3Rm
L3RleHQvU3RyaW5nSGFzaC5oPgogCiBAaW50ZXJmYWNlIE5TQXR0cmlidXRlZFN0cmluZyAoTlNB
dHRyaWJ1dGVkU3RyaW5nS2l0QWRkaXRpb25zKQogLSAoaWQpaW5pdFdpdGhSVEY6KE5TRGF0YSAq
KWRhdGEgZG9jdW1lbnRBdHRyaWJ1dGVzOihOU0RpY3Rpb25hcnkgKiopZGljdDsKQEAgLTExNywx
MSArMTAwLDYgQEAgc3RkOjp1bmlxdWVfcHRyPFBhc3RlYm9hcmQ+IFBhc3RlYm9hcmQ6OmNyZWF0
ZUZvckNvcHlBbmRQYXN0ZSgpCiAgICAgcmV0dXJuIHN0ZDo6bWFrZV91bmlxdWU8UGFzdGVib2Fy
ZD4oY2hhbmdlQ291bnRGb3JQYXN0ZWJvYXJkKCkpOwogfQogCi12b2lkIFBhc3RlYm9hcmQ6Ondy
aXRlQ3VzdG9tRGF0YShjb25zdCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSYgZGF0YSkKLXsKLSAgICBt
X2NoYW5nZUNvdW50ID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgp
LT53cml0ZUN1c3RvbURhdGEoZGF0YSwgbV9wYXN0ZWJvYXJkTmFtZSk7Ci19Ci0KIHZvaWQgUGFz
dGVib2FyZDo6d3JpdGUoY29uc3QgUGFzdGVib2FyZFdlYkNvbnRlbnQmIGNvbnRlbnQpCiB7CiAg
ICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT53cml0ZVRvUGFz
dGVib2FyZChjb250ZW50LCBtX3Bhc3RlYm9hcmROYW1lKTsKQEAgLTI3OSwxMSArMjU3LDYgQEAg
dm9pZCBQYXN0ZWJvYXJkOjpyZWFkUmVzcGVjdGluZ1VUSUZpZGVsaXRpZXMoUGFzdGVib2FyZFdl
YkNvbnRlbnRSZWFkZXImIHJlYWRlcikKICAgICB9CiB9CiAKLWxvbmcgUGFzdGVib2FyZDo6Y2hh
bmdlQ291bnQoKSBjb25zdAotewotICAgIHJldHVybiBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFz
dGVib2FyZFN0cmF0ZWd5KCktPmNoYW5nZUNvdW50KG1fcGFzdGVib2FyZE5hbWUpOwotfQotCiBO
U0FycmF5ICpQYXN0ZWJvYXJkOjpzdXBwb3J0ZWRXZWJDb250ZW50UGFzdGVib2FyZFR5cGVzKCkK
IHsKICAgICByZXR1cm4gQFsoaWQpV2ViQXJjaGl2ZVBib2FyZFR5cGUsIChpZClrVVRUeXBlRmxh
dFJURkQsIChpZClrVVRUeXBlUlRGLCAoaWQpa1VUVHlwZUhUTUwsIChpZClrVVRUeXBlUE5HLCAo
aWQpa1VUVHlwZVRJRkYsIChpZClrVVRUeXBlSlBFRywgKGlkKWtVVFR5cGVHSUYsIChpZClrVVRU
eXBlVVJMLCAoaWQpa1VUVHlwZVRleHRdOwpAQCAtMzM4LDcgKzMxMSw3IEBAIHZvaWQgUGFzdGVi
b2FyZDo6Y2xlYXIoKQogICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRl
Z3koKS0+d3JpdGVUb1Bhc3RlYm9hcmQoU3RyaW5nKCksIFN0cmluZygpLCBtX3Bhc3RlYm9hcmRO
YW1lKTsKIH0KIAotc3RhdGljIFN0cmluZyByZWFkUGxhdGZvcm1WYWx1ZUFzU3RyaW5nKGNvbnN0
IFN0cmluZyYgZG9tVHlwZSwgbG9uZyBjaGFuZ2VDb3VudCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkTmFtZSkKK1N0cmluZyBQYXN0ZWJvYXJkOjpyZWFkUGxhdGZvcm1WYWx1ZUFzU3RyaW5nKGNv
bnN0IFN0cmluZyYgZG9tVHlwZSwgbG9uZyBjaGFuZ2VDb3VudCwgY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkTmFtZSkKIHsKICAgICBQYXN0ZWJvYXJkU3RyYXRlZ3kmIHN0cmF0ZWd5ID0gKnBsYXRm
b3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKTsKIApAQCAtMzcyLDIxICszNDUs
NyBAQCBzdGF0aWMgU3RyaW5nIHJlYWRQbGF0Zm9ybVZhbHVlQXNTdHJpbmcoY29uc3QgU3RyaW5n
JiBkb21UeXBlLCBsb25nIGNoYW5nZUNvdW50LAogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAot
U3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRTdHJpbmdGb3JCaW5kaW5ncyhjb25zdCBTdHJpbmcmIHR5
cGUpCi17Ci0gICAgaWYgKCFTZXR0aW5nczo6Y3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkKCkg
fHwgaXNTYWZlVHlwZUZvckRPTVRvUmVhZEFuZFdyaXRlKHR5cGUpKQotICAgICAgICByZXR1cm4g
cmVhZFBsYXRmb3JtVmFsdWVBc1N0cmluZyh0eXBlLCBtX2NoYW5nZUNvdW50LCBtX3Bhc3RlYm9h
cmROYW1lKTsKLQotICAgIGlmIChhdXRvIGJ1ZmZlciA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5w
YXN0ZWJvYXJkU3RyYXRlZ3koKS0+YnVmZmVyRm9yVHlwZShjdXN0b21XZWJLaXRQYXN0ZWJvYXJk
RGF0YVR5cGUsIG1fcGFzdGVib2FyZE5hbWUpKSB7Ci0gICAgICAgIE5TU3RyaW5nICpjdXN0b21E
YXRhVmFsdWUgPSBjdXN0b21EYXRhRnJvbVNoYXJlZEJ1ZmZlcigqYnVmZmVyKS5zYW1lT3JpZ2lu
Q3VzdG9tRGF0YS5nZXQodHlwZSk7Ci0gICAgICAgIGlmIChjdXN0b21EYXRhVmFsdWUubGVuZ3Ro
KQotICAgICAgICAgICAgcmV0dXJuIGN1c3RvbURhdGFWYWx1ZTsKLSAgICB9Ci0KLSAgICByZXR1
cm4geyB9OwotfQotCi1zdGF0aWMgdm9pZCBhZGRIVE1MQ2xpcGJvYXJkVHlwZXNGb3JDb2NvYVR5
cGUoTGlzdEhhc2hTZXQ8U3RyaW5nPiYgcmVzdWx0VHlwZXMsIE5TU3RyaW5nICpjb2NvYVR5cGUp
Cit2b2lkIFBhc3RlYm9hcmQ6OmFkZEhUTUxDbGlwYm9hcmRUeXBlc0ZvckNvY29hVHlwZShMaXN0
SGFzaFNldDxTdHJpbmc+JiByZXN1bHRUeXBlcywgY29uc3QgU3RyaW5nJiBjb2NvYVR5cGUsIGNv
bnN0IFN0cmluZyYpCiB7CiAgICAgLy8gVVRJIG1heSBub3QgZG8gdGhlc2UgcmlnaHQsIHNvIG1h
a2Ugc3VyZSB3ZSBnZXQgdGhlIHJpZ2h0LCBwcmVkaWN0YWJsZSByZXN1bHQuCiAgICAgaWYgKFtj
b2NvYVR5cGUgaXNFcXVhbFRvU3RyaW5nOihOU1N0cmluZyAqKWtVVFR5cGVQbGFpblRleHRdCkBA
IC00MjEsMzIgKzM4MCw2IEBAIHZvaWQgUGFzdGVib2FyZDo6d3JpdGVTdHJpbmcoY29uc3QgU3Ry
aW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpCiAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCkt
PnBhc3RlYm9hcmRTdHJhdGVneSgpLT53cml0ZVRvUGFzdGVib2FyZChjb2NvYVR5cGUuZ2V0KCks
IGRhdGEsIG1fcGFzdGVib2FyZE5hbWUpOwogfQogCi1WZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJk
Ojp0eXBlc0ZvckJpbmRpbmdzKCkKLXsKLSAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKLSAgICBp
ZiAoU2V0dGluZ3M6OmN1c3RvbVBhc3RlYm9hcmREYXRhRW5hYmxlZCgpKQotICAgICAgICB0eXBl
cyA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+dHlwZXNTYWZl
Rm9yRE9NVG9SZWFkQW5kV3JpdGUobV9wYXN0ZWJvYXJkTmFtZSk7Ci0gICAgZWxzZQotICAgICAg
ICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmdldFR5cGVzKHR5
cGVzLCBtX3Bhc3RlYm9hcmROYW1lKTsKLQotICAgIC8vIEVuZm9yY2UgY2hhbmdlQ291bnQgb3Vy
c2VsdmVzIGZvciBzZWN1cml0eS4gV2UgY2hlY2sgYWZ0ZXIgcmVhZGluZyBpbnN0ZWFkIG9mIGJl
Zm9yZSB0byBiZQotICAgIC8vIHN1cmUgaXQgZG9lc24ndCBjaGFuZ2UgYmV0d2VlbiBvdXIgdGVz
dGluZyB0aGUgY2hhbmdlIGNvdW50IGFuZCBhY2Nlc3NpbmcgdGhlIGRhdGEuCi0gICAgYXV0byBj
aGFuZ2VDb3VudCA9IGNoYW5nZUNvdW50Rm9yUGFzdGVib2FyZChtX3Bhc3RlYm9hcmROYW1lKTsK
LSAgICBpZiAobV9jaGFuZ2VDb3VudCAhPSBjaGFuZ2VDb3VudCkKLSAgICAgICAgcmV0dXJuIHsg
fTsKLQotICAgIGlmIChTZXR0aW5nczo6Y3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkKCkpCi0g
ICAgICAgIHJldHVybiB0eXBlczsKLQotICAgIExpc3RIYXNoU2V0PFN0cmluZz4gcmVzdWx0Owot
ICAgIGZvciAoYXV0byBjb2NvYVR5cGUgOiB0eXBlcykKLSAgICAgICAgYWRkSFRNTENsaXBib2Fy
ZFR5cGVzRm9yQ29jb2FUeXBlKHJlc3VsdCwgY29jb2FUeXBlKTsKLQotICAgIFZlY3RvcjxTdHJp
bmc+IHZlY3RvcjsKLSAgICBjb3B5VG9WZWN0b3IocmVzdWx0LCB2ZWN0b3IpOwotICAgIHJldHVy
biB2ZWN0b3I7Ci19Ci0KIFZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnJlYWRGaWxlbmFtZXMo
KQogewogICAgIFZlY3RvcjxTdHJpbmc+IGZpbGVuYW1lczsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0gYi9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tCmluZGV4IDYyYTQwYzRk
OTVhN2I1ZjliODAxM2E2NTQzZjFiZTUyMzMxOTM3Y2MuLjJiOGE0NzcyOWM4YWFlY2FkYWRjNjlj
YjdhMzE1ZDczNWU2NzBmNzYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lv
cy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbQpAQCAtMzc1LDcgKzM3NSw3IEBAIFZlY3RvcjxT
dHJpbmc+IFBsYXRmb3JtUGFzdGVib2FyZDo6dHlwZXNTYWZlRm9yRE9NVG9SZWFkQW5kV3JpdGUo
KSBjb25zdAogICAgICAgICBpZiAoW3R5cGUgaXNFcXVhbFRvU3RyaW5nOkAoY3VzdG9tV2ViS2l0
UGFzdGVib2FyZERhdGFUeXBlKV0pCiAgICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBp
ZiAoaXNTYWZlVHlwZUZvckRPTVRvUmVhZEFuZFdyaXRlKHR5cGUpKSB7CisgICAgICAgIGlmIChQ
YXN0ZWJvYXJkOjppc1NhZmVUeXBlRm9yRE9NVG9SZWFkQW5kV3JpdGUodHlwZSkpIHsKICAgICAg
ICAgICAgIGRvbVBhc3RlYm9hcmRUeXBlcy5hZGQodHlwZSk7CiAgICAgICAgICAgICBjb250aW51
ZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1Bh
c3RlYm9hcmRNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1h
Yy5tbQppbmRleCAxNzMxZDZhMDlkODg3NTQ2YzIyZGE4Nzc3Y2Q5MGNjMmQ2OGJkNjU5Li5jZmJj
Njk3NThmODIyZmIxM2VjNWMwMDhkZjFiZTcyMzM4Mzg1YzRiIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQpAQCAtMjYsMzQgKzI2LDE3IEBACiAjaW1w
b3J0ICJjb25maWcuaCIKICNpbXBvcnQgIlBhc3RlYm9hcmQuaCIKIAotI2ltcG9ydCAiQ2FjaGVk
SW1hZ2UuaCIKLSNpbXBvcnQgIkRvY3VtZW50LmgiCi0jaW1wb3J0ICJEb2N1bWVudEZyYWdtZW50
LmgiCi0jaW1wb3J0ICJEb2N1bWVudExvYWRlci5oIgogI2ltcG9ydCAiRHJhZ0RhdGEuaCIKLSNp
bXBvcnQgIkVkaXRpbmcuaCIKLSNpbXBvcnQgIkVkaXRvci5oIgotI2ltcG9ydCAiRWRpdG9yQ2xp
ZW50LmgiCi0jaW1wb3J0ICJGcmFtZS5oIgotI2ltcG9ydCAiRnJhbWVMb2FkZXJDbGllbnQuaCIK
LSNpbXBvcnQgIkZyYW1lVmlldy5oIgotI2ltcG9ydCAiSGl0VGVzdFJlc3VsdC5oIgogI2ltcG9y
dCAiSW1hZ2UuaCIKLSNpbXBvcnQgIkxlZ2FjeVdlYkFyY2hpdmUuaCIKICNpbXBvcnQgIkxvYWRl
ck5TVVJMRXh0cmFzLmgiCiAjaW1wb3J0ICJNSU1FVHlwZVJlZ2lzdHJ5LmgiCiAjaW1wb3J0ICJQ
YXN0ZWJvYXJkU3RyYXRlZ3kuaCIKICNpbXBvcnQgIlBsYXRmb3JtUGFzdGVib2FyZC5oIgogI2lt
cG9ydCAiUGxhdGZvcm1TdHJhdGVnaWVzLmgiCi0jaW1wb3J0ICJSZW5kZXJJbWFnZS5oIgotI2lt
cG9ydCAiU2V0dGluZ3MuaCIKLSNpbXBvcnQgIlRleHQuaCIKICNpbXBvcnQgIlVSTC5oIgogI2lt
cG9ydCAiVVRJVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJXZWJDb3JlTlNTdHJpbmdFeHRyYXMuaCIK
LSNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIKICNpbXBvcnQgIldlYk5TQXR0cmli
dXRlZFN0cmluZ0V4dHJhcy5oIgotI2ltcG9ydCAibWFya3VwLmgiCiAjaW1wb3J0IDxwYWwvc3Bp
L2NnL0NvcmVHcmFwaGljc1NQSS5oPgogI2ltcG9ydCA8cGFsL3NwaS9tYWMvSElTZXJ2aWNlc1NQ
SS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgpAQCAtOTEsMTEgKzc0LDYgQEAgc3RhdGlj
IFZlY3RvcjxTdHJpbmc+IHdyaXRhYmxlVHlwZXNGb3JJbWFnZSgpCiAgICAgcmV0dXJuIHR5cGVz
OwogfQogCi1sb25nIFBhc3RlYm9hcmQ6OmNoYW5nZUNvdW50KCkgY29uc3QKLXsKLSAgICByZXR1
cm4gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5jaGFuZ2VDb3Vu
dChtX3Bhc3RlYm9hcmROYW1lKTsKLX0KLQogTlNBcnJheSAqUGFzdGVib2FyZDo6c3VwcG9ydGVk
RmlsZVVwbG9hZFBhc3RlYm9hcmRUeXBlcygpCiB7CiAgICAgcmV0dXJuIEBbIChOU1N0cmluZyAq
KU5TRmlsZXNQcm9taXNlUGJvYXJkVHlwZSwgKE5TU3RyaW5nICopTlNGaWxlbmFtZXNQYm9hcmRU
eXBlIF07CkBAIC0xNzksMTEgKzE1Nyw2IEBAIHZvaWQgUGFzdGVib2FyZDo6d3JpdGUoY29uc3Qg
UGFzdGVib2FyZFdlYkNvbnRlbnQmIGNvbnRlbnQpCiAgICAgICAgIG1fY2hhbmdlQ291bnQgPSBw
bGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnNldFN0cmluZ0ZvclR5
cGUoY29udGVudC5kYXRhSW5TdHJpbmdGb3JtYXQsIE5TU3RyaW5nUGJvYXJkVHlwZSwgbV9wYXN0
ZWJvYXJkTmFtZSk7CiB9CiAKLXZvaWQgUGFzdGVib2FyZDo6d3JpdGVDdXN0b21EYXRhKGNvbnN0
IFBhc3RlYm9hcmRDdXN0b21EYXRhJiBkYXRhKQotewotICAgIG1fY2hhbmdlQ291bnQgPSBwbGF0
Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPndyaXRlQ3VzdG9tRGF0YShk
YXRhLCBtX3Bhc3RlYm9hcmROYW1lKTsKLX0KLQogdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVBsYWlu
VGV4dChjb25zdCBTdHJpbmcmIHRleHQsIFNtYXJ0UmVwbGFjZU9wdGlvbiBzbWFydFJlcGxhY2VP
cHRpb24pCiB7CiAgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7CkBAIC00OTMsNyArNDY2LDcgQEAg
c3RhdGljIFZlY3RvcjxTdHJpbmc+IGFic29sdXRlVVJMc0Zyb21QYXN0ZWJvYXJkRmlsZW5hbWVz
KGNvbnN0IFN0cmluZyYgcGFzdGVib2EKICAgICByZXR1cm4gdXJsczsKIH0KIAotc3RhdGljIFN0
cmluZyByZWFkUGxhdGZvcm1WYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZyYgZG9tVHlwZSwgbG9u
ZyBjaGFuZ2VDb3VudCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKK1N0cmluZyBQYXN0
ZWJvYXJkOjpyZWFkUGxhdGZvcm1WYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZyYgZG9tVHlwZSwg
bG9uZyBjaGFuZ2VDb3VudCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKICAgICBj
b25zdCBTdHJpbmcmIGNvY29hVHlwZSA9IGNvY29hVHlwZUZyb21IVE1MQ2xpcGJvYXJkVHlwZShk
b21UeXBlKTsKICAgICBTdHJpbmcgY29jb2FWYWx1ZTsKQEAgLTUxMSwyMCArNDg0LDYgQEAgc3Rh
dGljIFN0cmluZyByZWFkUGxhdGZvcm1WYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZyYgZG9tVHlw
ZSwgbG9uZyBjaGFuZ2VDb3VudCwKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLVN0cmluZyBQ
YXN0ZWJvYXJkOjpyZWFkU3RyaW5nRm9yQmluZGluZ3MoY29uc3QgU3RyaW5nJiB0eXBlKQotewot
ICAgIGlmICghU2V0dGluZ3M6OmN1c3RvbVBhc3RlYm9hcmREYXRhRW5hYmxlZCgpIHx8IGlzU2Fm
ZVR5cGVGb3JET01Ub1JlYWRBbmRXcml0ZSh0eXBlKSkKLSAgICAgICAgcmV0dXJuIHJlYWRQbGF0
Zm9ybVZhbHVlQXNTdHJpbmcodHlwZSwgbV9jaGFuZ2VDb3VudCwgbV9wYXN0ZWJvYXJkTmFtZSk7
Ci0KLSAgICBpZiAoYXV0byBidWZmZXIgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2Fy
ZFN0cmF0ZWd5KCktPmJ1ZmZlckZvclR5cGUoY3VzdG9tV2ViS2l0UGFzdGVib2FyZERhdGFUeXBl
LCBtX3Bhc3RlYm9hcmROYW1lKSkgewotICAgICAgICBOU1N0cmluZyAqY3VzdG9tRGF0YVZhbHVl
ID0gY3VzdG9tRGF0YUZyb21TaGFyZWRCdWZmZXIoKmJ1ZmZlcikuc2FtZU9yaWdpbkN1c3RvbURh
dGEuZ2V0KHR5cGUpOwotICAgICAgICBpZiAoY3VzdG9tRGF0YVZhbHVlLmxlbmd0aCkKLSAgICAg
ICAgICAgIHJldHVybiBjdXN0b21EYXRhVmFsdWU7Ci0gICAgfQotCi0gICAgcmV0dXJuIHsgfTsK
LX0KLQogc3RhdGljIFN0cmluZyB1dGlUeXBlRnJvbUNvY29hVHlwZShjb25zdCBTdHJpbmcmIHR5
cGUpCiB7CiAgICAgaWYgKFJldGFpblB0cjxDRlN0cmluZ1JlZj4gdXRpVHlwZSA9IGFkb3B0Q0Yo
VVRUeXBlQ3JlYXRlUHJlZmVycmVkSWRlbnRpZmllckZvclRhZyhrVVRUYWdDbGFzc05TUGJvYXJk
VHlwZSwgdHlwZS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCAwKSkpIHsKQEAgLTUzNCw3ICs0OTMs
NyBAQCBzdGF0aWMgU3RyaW5nIHV0aVR5cGVGcm9tQ29jb2FUeXBlKGNvbnN0IFN0cmluZyYgdHlw
ZSkKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXN0YXRpYyB2b2lkIGFkZEhUTUxDbGlwYm9h
cmRUeXBlc0ZvckNvY29hVHlwZShMaXN0SGFzaFNldDxTdHJpbmc+JiByZXN1bHRUeXBlcywgY29u
c3QgU3RyaW5nJiBjb2NvYVR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCit2b2lk
IFBhc3RlYm9hcmQ6OmFkZEhUTUxDbGlwYm9hcmRUeXBlc0ZvckNvY29hVHlwZShMaXN0SGFzaFNl
dDxTdHJpbmc+JiByZXN1bHRUeXBlcywgY29uc3QgU3RyaW5nJiBjb2NvYVR5cGUsIGNvbnN0IFN0
cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7CiAgICAgaWYgKGNvY29hVHlwZSA9PSAiTmVYVCBwbGFp
biBhc2NpaSBwYXN0ZWJvYXJkIHR5cGUiKQogICAgICAgICByZXR1cm47IC8vIFNraXAgdGhpcyBh
bmNpZW50IHR5cGUgdGhhdCBnZXRzIGF1dG8tc3VwcGxpZWQgYnkgc29tZSBzeXN0ZW0gY29udmVy
c2lvbi4KQEAgLTU5OCwzMCArNTU3LDYgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVN0cmluZyhj
b25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKICAgICB9CiB9CiAKLVZlY3Rv
cjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnR5cGVzRm9yQmluZGluZ3MoKQotewotICAgIFZlY3RvcjxT
dHJpbmc+IHR5cGVzOwotICAgIGlmIChTZXR0aW5nczo6Y3VzdG9tUGFzdGVib2FyZERhdGFFbmFi
bGVkKCkpCi0gICAgICAgIHR5cGVzID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRT
dHJhdGVneSgpLT50eXBlc1NhZmVGb3JET01Ub1JlYWRBbmRXcml0ZShtX3Bhc3RlYm9hcmROYW1l
KTsKLSAgICBlbHNlCi0gICAgICAgIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3Ry
YXRlZ3koKS0+Z2V0VHlwZXModHlwZXMsIG1fcGFzdGVib2FyZE5hbWUpOwotCi0gICAgLy8gRW5m
b3JjZSBjaGFuZ2VDb3VudCBvdXJzZWx2ZXMgZm9yIHNlY3VyaXR5LiBXZSBjaGVjayBhZnRlciBy
ZWFkaW5nIGluc3RlYWQgb2YgYmVmb3JlIHRvIGJlCi0gICAgLy8gc3VyZSBpdCBkb2Vzbid0IGNo
YW5nZSBiZXR3ZWVuIG91ciB0ZXN0aW5nIHRoZSBjaGFuZ2UgY291bnQgYW5kIGFjY2Vzc2luZyB0
aGUgZGF0YS4KLSAgICBpZiAobV9jaGFuZ2VDb3VudCAhPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+
cGFzdGVib2FyZFN0cmF0ZWd5KCktPmNoYW5nZUNvdW50KG1fcGFzdGVib2FyZE5hbWUpKQotICAg
ICAgICByZXR1cm4geyB9OwotCi0gICAgaWYgKFNldHRpbmdzOjpjdXN0b21QYXN0ZWJvYXJkRGF0
YUVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIHR5cGVzOwotCi0gICAgTGlzdEhhc2hTZXQ8U3Ry
aW5nPiByZXN1bHQ7Ci0gICAgZm9yIChhdXRvJiBjb2NvYVR5cGUgOiB0eXBlcykKLSAgICAgICAg
YWRkSFRNTENsaXBib2FyZFR5cGVzRm9yQ29jb2FUeXBlKHJlc3VsdCwgY29jb2FUeXBlLCBtX3Bh
c3RlYm9hcmROYW1lKTsKLQotICAgIGNvcHlUb1ZlY3RvcihyZXN1bHQsIHR5cGVzKTsKLSAgICBy
ZXR1cm4gdHlwZXM7Ci19Ci0KIFZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnJlYWRGaWxlbmFt
ZXMoKQogewogICAgIC8vIEZJWE1FOiBTZWVtcyBzaWxseSB0byBjb252ZXJ0IHBhdGhzIHRvIFVS
THMgYW5kIHRoZW4gYmFjayB0byBwYXRocy4gRG9lcyB0aGF0IGRvIGFueXRoaW5nIGhlbHBmdWw/
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1QYXN0ZWJv
YXJkTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtUGFzdGVib2Fy
ZE1hYy5tbQppbmRleCBiNTkwZDY1NTc4OTc3Yjk0Mzk3ZThmYzBhYzI2MTFjMmYzNGVhNzhiLi5m
ZDUwMGEzODQxYjU5ZjUwZDNhNWY0Y2Q3MGU0ZDU4OWFhZWI3ZmI3IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0KQEAgLTI4
LDcgKzI4LDYgQEAKIAogI2ltcG9ydCAiQ29sb3IuaCIKICNpbXBvcnQgIlBhc3RlYm9hcmQuaCIK
LSNpbXBvcnQgIlNldHRpbmdzLmgiCiAjaW1wb3J0ICJVUkwuaCIKICNpbXBvcnQgIlNoYXJlZEJ1
ZmZlci5oIgogI2ltcG9ydCA8d3RmL0hhc2hDb3VudGVkU2V0Lmg+CkBAIC0xMjUsNyArMTI0LDcg
QEAgVmVjdG9yPFN0cmluZz4gUGxhdGZvcm1QYXN0ZWJvYXJkOjp0eXBlc1NhZmVGb3JET01Ub1Jl
YWRBbmRXcml0ZSgpIGNvbnN0CiAgICAgICAgIGlmIChbdHlwZSBpc0VxdWFsVG9TdHJpbmc6QChj
dXN0b21XZWJLaXRQYXN0ZWJvYXJkRGF0YVR5cGUpXSkKICAgICAgICAgICAgIGNvbnRpbnVlOwog
Ci0gICAgICAgIGlmIChpc1NhZmVUeXBlRm9yRE9NVG9SZWFkQW5kV3JpdGUodHlwZSkpCisgICAg
ICAgIGlmIChQYXN0ZWJvYXJkOjppc1NhZmVUeXBlRm9yRE9NVG9SZWFkQW5kV3JpdGUodHlwZSkp
CiAgICAgICAgICAgICBkb21QYXN0ZWJvYXJkVHlwZXMuYWRkKHR5cGUpOwogICAgICAgICBlbHNl
IGlmIChhdXRvKiBkb21UeXBlID0gc2FmZVR5cGVGb3JET01Ub1JlYWRBbmRXcml0ZUZvclBsYXRm
b3JtVHlwZSh0eXBlKSkgewogICAgICAgICAgICAgYXV0byBjb2VyY2VkVHlwZSA9IFN0cmluZzo6
ZnJvbVVURjgoZG9tVHlwZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93
aW4vUGFzdGVib2FyZFdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVi
b2FyZFdpbi5jcHAKaW5kZXggMGVjODcwMWY0MWY2MzAwMDkzMTc2MTgyNDBkMjM1OGNkMTU1MTg4
MS4uOGE4Yzk0NjIyNmM1OTdjYThjMDdjYTNlZjQ4Y2JlOTIyYWVkZjU3ZiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2luLmNwcApAQCAtMjQzLDcgKzI0Mywx
MyBAQCBzdGF0aWMgdm9pZCBhZGRNaW1lVHlwZXNGb3JGb3JtYXQoTGlzdEhhc2hTZXQ8U3RyaW5n
PiYgcmVzdWx0cywgY29uc3QgRk9STUFURVRDJgogICAgIH0KIH0KIAotVmVjdG9yPFN0cmluZz4g
UGFzdGVib2FyZDo6dHlwZXNGb3JCaW5kaW5ncygpCitWZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJk
Ojp0eXBlc1NhZmVGb3JCaW5kaW5ncygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4geyB9OworfQorCitWZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBlc0ZvckxlZ2Fj
eVVuc2FmZUJpbmRpbmdzKCkKIHsKICAgICBMaXN0SGFzaFNldDxTdHJpbmc+IHJlc3VsdHM7CiAK
QEAgLTI4Miw3ICsyODgsNyBAQCBWZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBlc1RyZWF0
ZWRBc0ZpbGVzKCkKICAgICByZXR1cm4geyB9OwogfQogCi1TdHJpbmcgUGFzdGVib2FyZDo6cmVh
ZFN0cmluZ0ZvckJpbmRpbmdzKGNvbnN0IFN0cmluZyYgdHlwZSkKK1N0cmluZyBQYXN0ZWJvYXJk
OjpyZWFkU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKICAgICBpZiAoIW1fZGF0YU9iamVj
dCAmJiBtX2RyYWdEYXRhTWFwLmlzRW1wdHkoKSkKICAgICAgICAgcmV0dXJuICIiOwpAQCAtMzAy
LDYgKzMwOCwxMiBAQCBTdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZ0ZvckJpbmRpbmdzKGNv
bnN0IFN0cmluZyYgdHlwZSkKICAgICByZXR1cm4gIiI7CiB9CiAKK1N0cmluZyBQYXN0ZWJvYXJk
OjpyZWFkU3RyaW5nSW5DdXN0b21EYXRhKGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4geyB9OworfQorCiBWZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJk
OjpyZWFkRmlsZW5hbWVzKCkKIHsKICAgICBWZWN0b3I8U3RyaW5nPiBmaWxlTmFtZXM7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93cGUvUGFzdGVib2FyZFdQRS5jcHAgYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93cGUvUGFzdGVib2FyZFdQRS5jcHAKaW5kZXggMTc4MDFj
MmRhZjFlZTA3ZTdlMmM1ODYxZThmMDcwN2IyNTBmZTYwZi4uYjg0ODJmMjU5ZTlmOWEyOTc1NjBi
OGRlOGI5MjZkZDY4YjgxZWE2ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
d3BlL1Bhc3RlYm9hcmRXUEUuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9Q
YXN0ZWJvYXJkV1BFLmNwcApAQCAtNDksNyArNDksMTMgQEAgYm9vbCBQYXN0ZWJvYXJkOjpoYXNE
YXRhKCkKICAgICByZXR1cm4gIXR5cGVzLmlzRW1wdHkoKTsKIH0KIAotVmVjdG9yPFN0cmluZz4g
UGFzdGVib2FyZDo6dHlwZXNGb3JCaW5kaW5ncygpCitWZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJk
Ojp0eXBlc1NhZmVGb3JCaW5kaW5ncygpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICBy
ZXR1cm4geyB9OworfQorCitWZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkdHlwZXNGb3JMZWdhY3lV
bnNhZmVCaW5kaW5ncygpCiB7CiAgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7CiAgICAgcGxhdGZv
cm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5nZXRUeXBlcyh0eXBlcyk7CkBA
IC02MSwxMSArNjcsMTcgQEAgVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6dHlwZXNUcmVhdGVk
QXNGaWxlcygpCiAgICAgcmV0dXJuIHsgfTsKIH0KIAotU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRT
dHJpbmdGb3JCaW5kaW5ncyhjb25zdCBTdHJpbmcmIHR5cGUpCitTdHJpbmcgUGFzdGVib2FyZDo6
cmVhZFN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUpCiB7CiAgICAgcmV0dXJuIHBsYXRmb3JtU3Ry
YXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+cmVhZFN0cmluZ0Zyb21QYXN0ZWJvYXJk
KDAsIHR5cGUpOwogfQogCitTdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZ0luQ3VzdG9tRGF0
YShjb25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHsg
fTsKK30KKwogdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUs
IGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVi
b2FyZFN0cmF0ZWd5KCktPndyaXRlVG9QYXN0ZWJvYXJkKHR5cGUsIHRleHQpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322290</attachid>
            <date>2017-09-30 02:02:23 -0700</date>
            <delta_ts>2017-09-30 02:32:22 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-177700-20170930020221.patch</filename>
            <type>text/plain</type>
            <size>31420</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyNjc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODkyMzQ5NTAxMGU5NWZk
ZGM1N2UzOTE4NTYxM2FjOWRjMGI0YTRiYS4uYjBjMzY0M2MzNzZkZjVkMDNlYzk1ZTc4NTQzOGJi
NDQwN2Q5ZDQ3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0IEBACisyMDE3LTA5LTI5ICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFNoYXJlIG1vcmUgcGFzdGVi
b2FyZCBjb2RlIGJldHdlZW4gaU9TIGFuZCBtYWNPUyBhbmQgcmVtb3ZlIGRlcGVuZGVuY3kgb24g
U2V0dGluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3NzcwMAorCisgICAgICAgIFJldmlld2VkIGJ5IFdlbnNvbiBIc2llaC4KKworICAgICAgICBN
b3ZlZCBtb3JlIGNvZGUgZnJvbSBQYXN0ZWJvYXJkSU9TLm1tIGFuZCBQYXN0ZWJvYXJkTWFjLm1t
IGludG8gUGFzdGVib2FyZENvY29hLm1tIHRvIHNoYXJlIGNvZGUuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBhbHNvIHJlbW92ZXMgdGhlIGxheWVyaW5nIHZpb2xhdGlvbiBpbmFkdmVydGVudGx5IGlu
dHJvZHVjZWQgaW4gcjIyMjU5NSB3aGVyZWJ5IHdoaWNoCisgICAgICAgIFBhc3RlYm9hcmQgY29k
ZSBkZXBlbmRzIG9uIFNldHRpbmdzLiBUbyBkbyB0aGlzLCB0aGlzIHBhdGNoIHNwbGl0cyByZWFk
U3RyaW5nRm9yQmluZGluZ3MgaXMgaW50bworICAgICAgICByZWFkU3RyaW5nIGFuZCByZWFkU3Ry
aW5nSW5DdXN0b21EYXRhIGFuZCB0eXBlc0ZvckJpbmRpbmdzIGludG8gdHlwZXNTYWZlRm9yQmlu
ZGluZ3MgYW5kCisgICAgICAgIHR5cGVzRm9yTGVnYWN5VW5zYWZlQmluZGluZ3MsIGFuZCBtb3Zl
cyB0aGUgbG9naWMgdG8gZGVjaWRlIHdoZXRoZXIgYSBnaXZlbiB0eXBlIG9yIHN0cmluZyBpcyBy
ZWFkCisgICAgICAgIG9mZiBvZiB0aGUgbmF0aXZlIHBhc3RlYm9hcmQgZW50cnkgb3Igb3VyIGN1
c3RvbSBkYXRhIGVudHJ5IGlzIG1vdmVkIHRvIERhdGFUcmFuc2Zlci4KKworICAgICAgICBObyBu
ZXcgdGVzdHMgc2luY2UgdGhlcmUgc2hvdWxkIGJlIG5vIGJlaGF2aW9yYWwgY2hhbmdlLgorCisg
ICAgICAgICogZG9tL0RhdGFUcmFuc2Zlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJh
bnNmZXI6OmdldERhdGEgY29uc3QpOiBNb3ZlZCB0aGUgY29kZSB0byBkZWNpZGUgd2hldGhlciBz
dHJpbmcgaXMKKyAgICAgICAgcmVhZCBvZmYgb2YgY3VzdG9tIGRhdGEgb3IgbmF0aXZlIHBhc3Rl
Ym9hcmQgZnJvbSByZWFkU3RyaW5nRm9yQmluZGluZ3MuCisgICAgICAgIChXZWJDb3JlOjpEYXRh
VHJhbnNmZXI6OnR5cGVzIGNvbnN0KTogRGl0dG8gZnJvbSB0eXBlc0ZvckJpbmRpbmdzLgorICAg
ICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVi
b2FyZDo6aXNTYWZlVHlwZUZvckRPTVRvUmVhZEFuZFdyaXRlKTogTW92ZWQgaW50byBQYXN0ZWJv
YXJkLgorICAgICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmQuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9TdGF0aWNQYXN0ZWJvYXJkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0YXRpY1Bhc3RlYm9h
cmQ6OnJlYWRTdHJpbmcpOiBSZW5hbWVkIGZyb20gcmVhZFN0cmluZ0ZvckJpbmRpbmdzLgorICAg
ICAgICAoV2ViQ29yZTo6U3RhdGljUGFzdGVib2FyZDo6cmVhZFN0cmluZ0luQ3VzdG9tRGF0YSk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RhdGljUGFzdGVib2FyZDo6d3JpdGVTdHJpbmcp
OgorICAgICAgICAqIHBsYXRmb3JtL1N0YXRpY1Bhc3RlYm9hcmQuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9jb2NvYS9QYXN0ZWJvYXJkQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJv
YXJkOjp0eXBlc1NhZmVGb3JCaW5kaW5ncyk6IEV4dHJhY3RlZCBvdXQgb2YgdHlwZXNGb3JCaW5k
aW5ncyBpbiBQYXN0ZWJvYXJkSU9TLm1tCisgICAgICAgIGFuZCBQYXN0ZWJvYXJkTWFjLm1tLgor
ICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6dHlwZXNGb3JMZWdhY3lVbnNhZmVCaW5kaW5n
cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZFN0cmluZyk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZFN0cmluZ0luQ3VzdG9tRGF0
YSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVDdXN0b21EYXRh
KTogTW92ZWQgaGVyZSBmcm9tIFBhc3RlYm9hcmRJT1MubW0gYW5kIFBhc3RlYm9hcmRDb2NvYS5t
bS4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmNoYW5nZUNvdW50IGNvbnN0KTogRGl0
dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UGFzdGVib2FyZDo6dHlwZXNTYWZlRm9yQmluZGluZ3MpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnR5cGVzRm9yTGVnYWN5VW5zYWZlQmluZGluZ3MpOiBS
ZW5hbWVkIGZyb20gcmVhZFN0cmluZ0ZvckJpbmRpbmdzLgorICAgICAgICAoV2ViQ29yZTo6UGFz
dGVib2FyZDo6cmVhZFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFk
U3RyaW5nSW5DdXN0b21EYXRhKTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1Bhc3Rl
Ym9hcmRJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZUN1c3RvbURh
dGEpOiBNb3ZlZCB0byBQYXN0ZWJvYXJkQ29jb2EubW0uCisgICAgICAgIChXZWJDb3JlOjpQYXN0
ZWJvYXJkOjpjaGFuZ2VDb3VudCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFz
dGVib2FyZDo6cmVhZFBsYXRmb3JtVmFsdWVBc1N0cmluZyk6IE1vdmVkIGludG8gUGFzdGVib2Fy
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmFkZEhUTUxDbGlwYm9hcmRUeXBlc0Zv
ckNvY29hVHlwZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZFN0
cmluZ0ZvckJpbmRpbmdzKTogTW92ZWQgdG8gUGFzdGVib2FyZENvY29hLm1tLgorICAgICAgICAo
V2ViQ29yZTo6UGFzdGVib2FyZDo6dHlwZXNGb3JCaW5kaW5ncyk6IERpdHRvLgorICAgICAgICAq
IHBsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW06CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OnR5cGVzU2FmZUZvckRPTVRvUmVhZEFuZFdyaXRlIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OlBhc3RlYm9hcmQ6OmNoYW5nZUNvdW50IGNvbnN0KTogTW92ZWQgdG8gUGFzdGVib2Fy
ZENvY29hLm1tLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVDdXN0b21EYXRh
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFkUGxhdGZvcm1WYWx1
ZUFzU3RyaW5nKTogTW92ZWQgaW50byBQYXN0ZWJvYXJkLgorICAgICAgICAoV2ViQ29yZTo6UGFz
dGVib2FyZDo6cmVhZFN0cmluZ0ZvckJpbmRpbmdzKTogTW92ZWQgdG8gUGFzdGVib2FyZENvY29h
Lm1tLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6YWRkSFRNTENsaXBib2FyZFR5cGVz
Rm9yQ29jb2FUeXBlKTogTW92ZWQgaW50byBQYXN0ZWJvYXJkLgorICAgICAgICAoV2ViQ29yZTo6
UGFzdGVib2FyZDo6dHlwZXNGb3JCaW5kaW5ncyk6IE1vdmVkIHRvIFBhc3RlYm9hcmRDb2NvYS5t
bS4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjp0eXBlc1NhZmVGb3JET01Ub1JlYWRB
bmRXcml0ZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6dHlwZXNTYWZlRm9yQmluZGluZ3MpOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnR5cGVzRm9yTGVnYWN5VW5zYWZl
QmluZGluZ3MpOiBSZW5hbWVkIGZyb20gcmVhZFN0cmluZ0ZvckJpbmRpbmdzLgorICAgICAgICAo
V2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZFN0cmluZyk6IFJlbmFtZWQgZnJvbSByZWFkU3RyaW5n
Rm9yQmluZGluZ3MuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nSW5D
dXN0b21EYXRhKTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vd3BlL1Bhc3RlYm9hcmRXUEUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6dHlwZXNTYWZlRm9yQmluZGluZ3Mp
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmR0eXBlc0ZvckxlZ2FjeVVuc2Fm
ZUJpbmRpbmdzKTogUmVuYW1lZCBmcm9tIHJlYWRTdHJpbmdGb3JCaW5kaW5ncy4KKyAgICAgICAg
KFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWRTdHJpbmcpOiBSZW5hbWVkIGZyb20gcmVhZFN0cmlu
Z0ZvckJpbmRpbmdzLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZFN0cmluZ0lu
Q3VzdG9tRGF0YSk6IEFkZGVkLgorCiAyMDE3LTA5LTI5ICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CiAKICAgICAgICAgaHR0cC90ZXN0cy9wcmVjb25uZWN0L2xpbmstcmVsLXByZWNv
bm5lY3QtaHR0cHMuaHRtbCBpcyBmbGFreQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0RhdGFUcmFuc2Zlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVyLmNwcApp
bmRleCA3YmQ4NDRlMDRjZmQ2Zjg3MGY4MjRlZTgzODFhZDI3MTBhZjNhZThkLi4zMjIyMzdhOTEw
YjRlYTY0YzA1NTIyZDNjNmZkZTVkOTg4MTVlZTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRGF0YVRyYW5zZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5z
ZmVyLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIK
ICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKKyNpbmNsdWRlICJT
ZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN0YXRpY1Bhc3RlYm9hcmQuaCIKICNpbmNsdWRlICJXZWJD
b3JlUGFzdGVib2FyZEZpbGVSZWFkZXIuaCIKIApAQCAtMTQxLDcgKzE0MiwxMCBAQCBTdHJpbmcg
RGF0YVRyYW5zZmVyOjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkgY29uc3QKICAgICAgICAg
cmV0dXJuIHsgfTsKICNlbmRpZgogCi0gICAgcmV0dXJuIG1fcGFzdGVib2FyZC0+cmVhZFN0cmlu
Z0ZvckJpbmRpbmdzKG5vcm1hbGl6ZVR5cGUodHlwZSkpOworICAgIGF1dG8gbm9ybWFsaXplZFR5
cGUgPSBub3JtYWxpemVUeXBlKHR5cGUpOworICAgIGlmIChTZXR0aW5nczo6Y3VzdG9tUGFzdGVi
b2FyZERhdGFFbmFibGVkKCkgJiYgIVBhc3RlYm9hcmQ6OmlzU2FmZVR5cGVGb3JET01Ub1JlYWRB
bmRXcml0ZShub3JtYWxpemVkVHlwZSkpCisgICAgICAgIHJldHVybiBtX3Bhc3RlYm9hcmQtPnJl
YWRTdHJpbmdJbkN1c3RvbURhdGEobm9ybWFsaXplZFR5cGUpOworICAgIHJldHVybiBtX3Bhc3Rl
Ym9hcmQtPnJlYWRTdHJpbmcobm9ybWFsaXplZFR5cGUpOwogfQogCiB2b2lkIERhdGFUcmFuc2Zl
cjo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKQEAgLTE3
Miw3ICsxNzYsNyBAQCBWZWN0b3I8U3RyaW5nPiBEYXRhVHJhbnNmZXI6OnR5cGVzKCkgY29uc3QK
ICAgICBpZiAoIWNhblJlYWRUeXBlcygpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0
dXJuIG1fcGFzdGVib2FyZC0+dHlwZXNGb3JCaW5kaW5ncygpOworICAgIHJldHVybiBTZXR0aW5n
czo6Y3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkKCkgPyBtX3Bhc3RlYm9hcmQtPnR5cGVzU2Fm
ZUZvckJpbmRpbmdzKCkgOiBtX3Bhc3RlYm9hcmQtPnR5cGVzRm9yTGVnYWN5VW5zYWZlQmluZGlu
Z3MoKTsKIH0KIAogRmlsZUxpc3QmIERhdGFUcmFuc2Zlcjo6ZmlsZXMoKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy93cGUvRWRpdG9yV1BFLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvd3BlL0VkaXRvcldQRS5jcHAKaW5kZXggYzkzYmFiYTIxYTdmMmM0OTc5
MTA3MTRlNzI1ZWE3MmU2MWIyMjdiMS4uYmIwY2ZjOTRlN2QyYzZiOWZjZTRhNzVkNTY1OGMwNGVh
YjJkN2I1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy93cGUvRWRpdG9yV1BF
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3dwZS9FZGl0b3JXUEUuY3BwCkBAIC0z
OCwxMiArMzgsMTIgQEAgc3RhdGljIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFn
bWVudEZyb21QYXN0ZWJvYXJkRGF0YShQYXN0ZWJvYXJkJiBwYXMKIHsKICAgICBjaG9zZVBsYWlu
VGV4dCA9IGZhbHNlOwogCi0gICAgVmVjdG9yPFN0cmluZz4gdHlwZXMgPSBwYXN0ZWJvYXJkLnR5
cGVzRm9yQmluZGluZ3MoKTsKKyAgICBWZWN0b3I8U3RyaW5nPiB0eXBlcyA9IHBhc3RlYm9hcmQu
dHlwZXNGb3JMZWdhY3lVbnNhZmVCaW5kaW5ncygpOwogICAgIGlmICh0eXBlcy5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKCJ0ZXh0
L2h0bWw7Y2hhcnNldD11dGYtOCIpICYmIGZyYW1lLmRvY3VtZW50KCkpIHsKLSAgICAgICAgU3Ry
aW5nIG1hcmt1cCA9IHBhc3RlYm9hcmQucmVhZFN0cmluZ0ZvckJpbmRpbmdzKCJ0ZXh0L2h0bWw7
Y2hhcnNldD11dGYtOCIpOworICAgICAgICBTdHJpbmcgbWFya3VwID0gcGFzdGVib2FyZC5yZWFk
U3RyaW5nKCJ0ZXh0L2h0bWw7Y2hhcnNldD11dGYtOCIpOwogICAgICAgICBpZiAoUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKCpmcmFt
ZS5kb2N1bWVudCgpLCBtYXJrdXAsIGVtcHR5U3RyaW5nKCksIERpc2FsbG93U2NyaXB0aW5nQW5k
UGx1Z2luQ29udGVudCkpCiAgICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CiAgICAgfQpAQCAt
NTMsNyArNTMsNyBAQCBzdGF0aWMgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdt
ZW50RnJvbVBhc3RlYm9hcmREYXRhKFBhc3RlYm9hcmQmIHBhcwogCiAgICAgaWYgKHR5cGVzLmNv
bnRhaW5zKCJ0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgiKSkgewogICAgICAgICBjaG9zZVBsYWlu
VGV4dCA9IHRydWU7Ci0gICAgICAgIGlmIChSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21l
bnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KHJhbmdlLCBwYXN0ZWJvYXJkLnJlYWRTdHJpbmdG
b3JCaW5kaW5ncygidGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04IikpKQorICAgICAgICBpZiAoUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChy
YW5nZSwgcGFzdGVib2FyZC5yZWFkU3RyaW5nKCJ0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgiKSkp
CiAgICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Bhc3RlYm9hcmQuY3BwCmluZGV4IDhjYmRhNmZhZTNkYjE0OGZiZDAyZTYwOGU5MGFiMjFh
NTViY2ZiMjAuLjQzYzY2N2EzN2ViMjU4NzJlYjI3MmZiZDc4MjZmNDI1ZDg0NTFiZDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuY3BwCkBAIC0zOSw3ICszOSw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIFBhc3RlYm9hcmRJbWFnZTo6UGFzdGVib2FyZEltYWdlKCkgPSBkZWZh
dWx0OwogUGFzdGVib2FyZEltYWdlOjp+UGFzdGVib2FyZEltYWdlKCkgPSBkZWZhdWx0OwogCi1i
b29sIGlzU2FmZVR5cGVGb3JET01Ub1JlYWRBbmRXcml0ZShjb25zdCBTdHJpbmcmIHR5cGUpCiti
b29sIFBhc3RlYm9hcmQ6OmlzU2FmZVR5cGVGb3JET01Ub1JlYWRBbmRXcml0ZShjb25zdCBTdHJp
bmcmIHR5cGUpCiB7CiAgICAgcmV0dXJuIHR5cGUgPT0gInRleHQvcGxhaW4iIHx8IHR5cGUgPT0g
InRleHQvaHRtbCIgfHwgdHlwZSA9PSAidGV4dC91cmktbGlzdCI7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9QYXN0ZWJvYXJkLmgKaW5kZXggYWQ0MDIyZGM1YjY3NDMzNmI4ZWY3ZTgzOWU0OTcwNDEy
YWZmYjU3Mi4uODM5MzEyZDY3M2Q5NDMxYjI5NjdhYzgzZmEwNmRiYjcxNWI3MjUwNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUg
IkRyYWdJbWFnZS5oIgogI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgpAQCAtMTcxLDggKzE3Miw2IEBAIFdFQkNPUkVfRVhQT1JUIFBhc3RlYm9hcmRDdXN0b21E
YXRhIGN1c3RvbURhdGFGcm9tU2hhcmVkQnVmZmVyKGNvbnN0IFNoYXJlZEJ1ZmZlCiBjb25zdCBj
aGFyIGN1c3RvbVdlYktpdFBhc3RlYm9hcmREYXRhVHlwZVtdID0gImNvbS5hcHBsZS5XZWJLaXQu
Y3VzdG9tLXBhc3RlYm9hcmQtZGF0YSI7CiAjZW5kaWYKIAotYm9vbCBpc1NhZmVUeXBlRm9yRE9N
VG9SZWFkQW5kV3JpdGUoY29uc3QgU3RyaW5nJiB0eXBlKTsKLQogY2xhc3MgUGFzdGVib2FyZCB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGFzdGVib2FyZCk7IFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgpAQCAtMTkyLDEyICsxOTEsMTYgQEAgcHVibGljOgogCiAgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxQYXN0ZWJvYXJkPiBjcmVhdGVGb3JD
b3B5QW5kUGFzdGUoKTsKIAorICAgIHN0YXRpYyBib29sIGlzU2FmZVR5cGVGb3JET01Ub1JlYWRB
bmRXcml0ZShjb25zdCBTdHJpbmcmKTsKKwogICAgIHZpcnR1YWwgYm9vbCBpc1N0YXRpYygpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzRGF0YSgpOwotICAg
IHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gdHlwZXNGb3JCaW5kaW5ncygpOworICAgIHZpcnR1YWwg
VmVjdG9yPFN0cmluZz4gdHlwZXNTYWZlRm9yQmluZGluZ3MoKTsKKyAgICB2aXJ0dWFsIFZlY3Rv
cjxTdHJpbmc+IHR5cGVzRm9yTGVnYWN5VW5zYWZlQmluZGluZ3MoKTsKICAgICB2aXJ0dWFsIFZl
Y3RvcjxTdHJpbmc+IHR5cGVzVHJlYXRlZEFzRmlsZXMoKTsKLSAgICB2aXJ0dWFsIFN0cmluZyBy
ZWFkU3RyaW5nRm9yQmluZGluZ3MoY29uc3QgU3RyaW5nJiB0eXBlKTsKKyAgICB2aXJ0dWFsIFN0
cmluZyByZWFkU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSk7CisgICAgdmlydHVhbCBTdHJpbmcg
cmVhZFN0cmluZ0luQ3VzdG9tRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpOwogCiAgICAgdmlydHVh
bCB2b2lkIHdyaXRlU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRh
KTsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKTsKQEAgLTI3OCw2ICsyODEsOCBAQCBwcml2YXRl
OgogI2VuZGlmCiAKICNpZiBQTEFURk9STShDT0NPQSkKKyAgICBTdHJpbmcgcmVhZFBsYXRmb3Jt
VmFsdWVBc1N0cmluZyhjb25zdCBTdHJpbmcmIGRvbVR5cGUsIGxvbmcgY2hhbmdlQ291bnQsIGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpOworICAgIHN0YXRpYyB2b2lkIGFkZEhUTUxDbGlw
Ym9hcmRUeXBlc0ZvckNvY29hVHlwZShMaXN0SGFzaFNldDxTdHJpbmc+JiByZXN1bHRUeXBlcywg
Y29uc3QgU3RyaW5nJiBjb2NvYVR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpOwog
ICAgIFN0cmluZyByZWFkU3RyaW5nRm9yUGxhdGZvcm1UeXBlKGNvbnN0IFN0cmluZyYpOwogI2Vu
ZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N0YXRpY1Bhc3RlYm9h
cmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3RhdGljUGFzdGVib2FyZC5jcHAKaW5k
ZXggNzExZmE2MzIyN2JlY2Q3M2NlYmE0MDBmYjQzMTQzMTQ1MzU1YmI4Mi4uZThmN2VmNTU3Mzky
ZTkxNDNjZThkNjM3ZjQ2ZWNiZTEyYTdlZjg3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU3RhdGljUGFzdGVib2FyZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU3RhdGljUGFzdGVib2FyZC5jcHAKQEAgLTQwLDIwICs0MCwxOSBAQCBib29sIFN0YXRpY1Bh
c3RlYm9hcmQ6Omhhc0RhdGEoKQogICAgIHJldHVybiAhbV9wbGF0Zm9ybURhdGEuaXNFbXB0eSgp
IHx8ICFtX2N1c3RvbURhdGEuaXNFbXB0eSgpOwogfQogCi1TdHJpbmcgU3RhdGljUGFzdGVib2Fy
ZDo6cmVhZFN0cmluZ0ZvckJpbmRpbmdzKGNvbnN0IFN0cmluZyYgdHlwZSkKK1N0cmluZyBTdGF0
aWNQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKLSAgICBpZiAo
bV9wbGF0Zm9ybURhdGEuY29udGFpbnModHlwZSkpCi0gICAgICAgIHJldHVybiBtX3BsYXRmb3Jt
RGF0YS5nZXQodHlwZSk7Ci0KLSAgICBpZiAobV9jdXN0b21EYXRhLmNvbnRhaW5zKHR5cGUpKQot
ICAgICAgICByZXR1cm4gbV9jdXN0b21EYXRhLmdldCh0eXBlKTsKKyAgICByZXR1cm4gbV9wbGF0
Zm9ybURhdGEuZ2V0KHR5cGUpOworfQogCi0gICAgcmV0dXJuIHsgfTsKK1N0cmluZyBTdGF0aWNQ
YXN0ZWJvYXJkOjpyZWFkU3RyaW5nSW5DdXN0b21EYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkKK3sK
KyAgICByZXR1cm4gbV9jdXN0b21EYXRhLmdldCh0eXBlKTsKIH0KIAogdm9pZCBTdGF0aWNQYXN0
ZWJvYXJkOjp3cml0ZVN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgdmFs
dWUpCiB7Ci0gICAgYXV0byYgcGFzdGVib2FyZERhdGEgPSBpc1NhZmVUeXBlRm9yRE9NVG9SZWFk
QW5kV3JpdGUodHlwZSkgPyBtX3BsYXRmb3JtRGF0YSA6IG1fY3VzdG9tRGF0YTsKKyAgICBhdXRv
JiBwYXN0ZWJvYXJkRGF0YSA9IFBhc3RlYm9hcmQ6OmlzU2FmZVR5cGVGb3JET01Ub1JlYWRBbmRX
cml0ZSh0eXBlKSA/IG1fcGxhdGZvcm1EYXRhIDogbV9jdXN0b21EYXRhOwogICAgIGlmIChwYXN0
ZWJvYXJkRGF0YS5zZXQodHlwZSwgdmFsdWUpLmlzTmV3RW50cnkpCiAgICAgICAgIG1fdHlwZXMu
YXBwZW5kKHR5cGUpOwogICAgIGVsc2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU3RhdGljUGFzdGVib2FyZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3RhdGlj
UGFzdGVib2FyZC5oCmluZGV4IGJjYjZmN2E0MDZhYmY4MWNiNDVkMDA1M2FjYTc1NTlhYjFkYjk0
ZDAuLjI4NTBiMzJjZjczZGQzMzAwMDNjYzI0YjAyNWUwZWMwM2Q0NzU3NjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N0YXRpY1Bhc3RlYm9hcmQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TdGF0aWNQYXN0ZWJvYXJkLmgKQEAgLTQxLDkgKzQxLDExIEBAIHB1
YmxpYzoKICAgICBib29sIGlzU3RhdGljKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQog
CiAgICAgYm9vbCBoYXNEYXRhKCkgZmluYWw7Ci0gICAgVmVjdG9yPFN0cmluZz4gdHlwZXNGb3JC
aW5kaW5ncygpIGZpbmFsIHsgcmV0dXJuIG1fdHlwZXM7IH0KKyAgICBWZWN0b3I8U3RyaW5nPiB0
eXBlc1NhZmVGb3JCaW5kaW5ncygpIGZpbmFsIHsgcmV0dXJuIG1fdHlwZXM7IH0KKyAgICBWZWN0
b3I8U3RyaW5nPiB0eXBlc0ZvckxlZ2FjeVVuc2FmZUJpbmRpbmdzKCkgZmluYWwgeyByZXR1cm4g
bV90eXBlczsgfQogICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzVHJlYXRlZEFzRmlsZXMoKSBmaW5h
bCB7IHJldHVybiB7IH07IH0KLSAgICBTdHJpbmcgcmVhZFN0cmluZ0ZvckJpbmRpbmdzKGNvbnN0
IFN0cmluZyYgdHlwZSkgZmluYWw7CisgICAgU3RyaW5nIHJlYWRTdHJpbmcoY29uc3QgU3RyaW5n
JiB0eXBlKSBmaW5hbDsKKyAgICBTdHJpbmcgcmVhZFN0cmluZ0luQ3VzdG9tRGF0YShjb25zdCBT
dHJpbmcmIHR5cGUpIGZpbmFsOwogCiAgICAgdm9pZCB3cml0ZVN0cmluZyhjb25zdCBTdHJpbmcm
IHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkgZmluYWw7CiAgICAgdm9pZCBjbGVhcigpIGZpbmFs
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGFzdGVib2FyZENv
Y29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGFzdGVib2FyZENvY29hLm1t
CmluZGV4IGU3NTA5ZmUxNWFkZTY3ZThmYjFiZGVkNDg1NTljNGFmOTdiMzY2NzAuLmQ0MzAzZDkx
OGI4MDI3YjU0ZTY5NWU2YzU4ODFhZDUzMDM5ZDY0ZmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL1Bhc3RlYm9hcmRDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jb2NvYS9QYXN0ZWJvYXJkQ29jb2EubW0KQEAgLTI4LDYgKzI4LDcgQEAKIAog
I2luY2x1ZGUgIlBhc3RlYm9hcmRTdHJhdGVneS5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyYXRl
Z2llcy5oIgorI2luY2x1ZGUgIlNldHRpbmdzLmgiCiAjaW5jbHVkZSAiU2hhcmVkQnVmZmVyLmgi
CiAjaW5jbHVkZSA8SW1hZ2VJTy9JbWFnZUlPLmg+CiAjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0
Lmg+CkBAIC0xNTEsNiArMTUyLDM2IEBAIFZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnR5cGVz
VHJlYXRlZEFzRmlsZXMoKQogICAgIHJldHVybiB0eXBlczsKIH0KIAorVmVjdG9yPFN0cmluZz4g
UGFzdGVib2FyZDo6dHlwZXNTYWZlRm9yQmluZGluZ3MoKQoreworICAgIFZlY3RvcjxTdHJpbmc+
IHR5cGVzID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT50eXBl
c1NhZmVGb3JET01Ub1JlYWRBbmRXcml0ZShtX3Bhc3RlYm9hcmROYW1lKTsKKworICAgIC8vIEVu
Zm9yY2UgY2hhbmdlQ291bnQgb3Vyc2VsdmVzIGZvciBzZWN1cml0eS4gV2UgY2hlY2sgYWZ0ZXIg
cmVhZGluZyBpbnN0ZWFkIG9mIGJlZm9yZSB0byBiZQorICAgIC8vIHN1cmUgaXQgZG9lc24ndCBj
aGFuZ2UgYmV0d2VlbiBvdXIgdGVzdGluZyB0aGUgY2hhbmdlIGNvdW50IGFuZCBhY2Nlc3Npbmcg
dGhlIGRhdGEuCisgICAgaWYgKG1fY2hhbmdlQ291bnQgIT0gcGxhdGZvcm1TdHJhdGVnaWVzKCkt
PnBhc3RlYm9hcmRTdHJhdGVneSgpLT5jaGFuZ2VDb3VudChtX3Bhc3RlYm9hcmROYW1lKSkKKyAg
ICAgICAgcmV0dXJuIHsgfTsKKworICAgIHJldHVybiB0eXBlczsKK30KKworVmVjdG9yPFN0cmlu
Zz4gUGFzdGVib2FyZDo6dHlwZXNGb3JMZWdhY3lVbnNhZmVCaW5kaW5ncygpCit7CisgICAgVmVj
dG9yPFN0cmluZz4gdHlwZXM7CisgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRT
dHJhdGVneSgpLT5nZXRUeXBlcyh0eXBlcywgbV9wYXN0ZWJvYXJkTmFtZSk7CisKKyAgICAvLyBF
bmZvcmNlIGNoYW5nZUNvdW50IG91cnNlbHZlcyBmb3Igc2VjdXJpdHkuIFdlIGNoZWNrIGFmdGVy
IHJlYWRpbmcgaW5zdGVhZCBvZiBiZWZvcmUgdG8gYmUKKyAgICAvLyBzdXJlIGl0IGRvZXNuJ3Qg
Y2hhbmdlIGJldHdlZW4gb3VyIHRlc3RpbmcgdGhlIGNoYW5nZSBjb3VudCBhbmQgYWNjZXNzaW5n
IHRoZSBkYXRhLgorICAgIGlmIChtX2NoYW5nZUNvdW50ICE9IHBsYXRmb3JtU3RyYXRlZ2llcygp
LT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+Y2hhbmdlQ291bnQobV9wYXN0ZWJvYXJkTmFtZSkpCisg
ICAgICAgIHJldHVybiB7IH07CisKKyAgICBMaXN0SGFzaFNldDxTdHJpbmc+IHJlc3VsdDsKKyAg
ICBmb3IgKGF1dG8mIGNvY29hVHlwZSA6IHR5cGVzKQorICAgICAgICBhZGRIVE1MQ2xpcGJvYXJk
VHlwZXNGb3JDb2NvYVR5cGUocmVzdWx0LCBjb2NvYVR5cGUsIG1fcGFzdGVib2FyZE5hbWUpOwor
CisgICAgY29weVRvVmVjdG9yKHJlc3VsdCwgdHlwZXMpOworICAgIHJldHVybiB0eXBlczsKK30K
Kwogdm9pZCBQYXN0ZWJvYXJkOjpyZWFkKFBhc3RlYm9hcmRGaWxlUmVhZGVyJiByZWFkZXIpCiB7
CiAgICAgYXV0byBpbWFnZVR5cGUgPSBtaW1lVHlwZVRvSW1hZ2VUeXBlKHJlYWRlci50eXBlKTsK
QEAgLTE5NCw1ICsyMjUsMzIgQEAgdm9pZCBQYXN0ZWJvYXJkOjpyZWFkKFBhc3RlYm9hcmRGaWxl
UmVhZGVyJiByZWFkZXIpCiAgICAgcmVhZGVyLnJlYWQoaW1hZ2VUeXBlVG9GYWtlRmlsZW5hbWUo
aW1hZ2VUeXBlKSwgYnVmZmVyLnJlbGVhc2VOb25OdWxsKCkpOwogfQogCitTdHJpbmcgUGFzdGVi
b2FyZDo6cmVhZFN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUpCit7CisgICAgcmV0dXJuIHJlYWRQ
bGF0Zm9ybVZhbHVlQXNTdHJpbmcodHlwZSwgbV9jaGFuZ2VDb3VudCwgbV9wYXN0ZWJvYXJkTmFt
ZSk7Cit9CisKK1N0cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nSW5DdXN0b21EYXRhKGNvbnN0
IFN0cmluZyYgdHlwZSkKK3sKKyAgICBhdXRvIGJ1ZmZlciA9IHBsYXRmb3JtU3RyYXRlZ2llcygp
LT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+YnVmZmVyRm9yVHlwZShjdXN0b21XZWJLaXRQYXN0ZWJv
YXJkRGF0YVR5cGUsIG1fcGFzdGVib2FyZE5hbWUpOworICAgIGlmICghYnVmZmVyKQorICAgICAg
ICByZXR1cm4geyB9OworCisgICAgTlNTdHJpbmcgKmN1c3RvbURhdGFWYWx1ZSA9IGN1c3RvbURh
dGFGcm9tU2hhcmVkQnVmZmVyKCpidWZmZXIpLnNhbWVPcmlnaW5DdXN0b21EYXRhLmdldCh0eXBl
KTsKKyAgICBpZiAoIWN1c3RvbURhdGFWYWx1ZS5sZW5ndGgpCisgICAgICAgIHJldHVybiB7IH07
CisgICAgcmV0dXJuIGN1c3RvbURhdGFWYWx1ZTsKK30KKwordm9pZCBQYXN0ZWJvYXJkOjp3cml0
ZUN1c3RvbURhdGEoY29uc3QgUGFzdGVib2FyZEN1c3RvbURhdGEmIGRhdGEpCit7CisgICAgbV9j
aGFuZ2VDb3VudCA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+
d3JpdGVDdXN0b21EYXRhKGRhdGEsIG1fcGFzdGVib2FyZE5hbWUpOworfQorCitsb25nIFBhc3Rl
Ym9hcmQ6OmNoYW5nZUNvdW50KCkgY29uc3QKK3sKKyAgICByZXR1cm4gcGxhdGZvcm1TdHJhdGVn
aWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5jaGFuZ2VDb3VudChtX3Bhc3RlYm9hcmROYW1l
KTsKK30KKwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFz
dGVib2FyZEd0ay5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFzdGVib2FyZEd0
ay5jcHAKaW5kZXggODRhNTdkZTg0NTM4NDY2NjE2ZjI4ZTc4M2I0NWFjODViOWYzOTI0Zi4uYmQ1
ODAwZmExNDM2ZTlhOWY5NGE4OWFlZDc2NWFmZGZmOWRiMjdkYSAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcApAQCAtMjUyLDcgKzI1MiwxMyBAQCBi
b29sIFBhc3RlYm9hcmQ6Omhhc0RhdGEoKQogICAgIHJldHVybiBtX3NlbGVjdGlvbkRhdGEtPmhh
c1RleHQoKSB8fCBtX3NlbGVjdGlvbkRhdGEtPmhhc01hcmt1cCgpIHx8IG1fc2VsZWN0aW9uRGF0
YS0+aGFzVVJJTGlzdCgpIHx8IG1fc2VsZWN0aW9uRGF0YS0+aGFzSW1hZ2UoKSB8fCBtX3NlbGVj
dGlvbkRhdGEtPmhhc1Vua25vd25UeXBlRGF0YSgpOwogfQogCi1WZWN0b3I8U3RyaW5nPiBQYXN0
ZWJvYXJkOjp0eXBlc0ZvckJpbmRpbmdzKCkKK1ZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnR5
cGVzU2FmZUZvckJpbmRpbmdzKCkKK3sKKyAgICBub3RJbXBsZW1lbnRlZCgpOyAvLyB3ZWJraXQu
b3JnL2IvMTc3NjMzOiBbR1RLXSBNb3ZlIHRvIG5ldyBQYXN0ZWJvYXJkIEFQSQorICAgIHJldHVy
biB7IH07Cit9CisKK1ZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnR5cGVzRm9yTGVnYWN5VW5z
YWZlQmluZGluZ3MoKQogewogICAgIHJlYWRGcm9tQ2xpcGJvYXJkKCk7CiAKQEAgLTI4NSw3ICsy
OTEsNyBAQCBWZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBlc1RyZWF0ZWRBc0ZpbGVzKCkK
ICAgICByZXR1cm4geyB9OwogfQogCi1TdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZ0ZvckJp
bmRpbmdzKGNvbnN0IFN0cmluZyYgdHlwZSkKK1N0cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5n
KGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKICAgICByZWFkRnJvbUNsaXBib2FyZCgpOwogCkBAIC0z
MDcsNiArMzEzLDEyIEBAIFN0cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nRm9yQmluZGluZ3Mo
Y29uc3QgU3RyaW5nJiB0eXBlKQogICAgIHJldHVybiBTdHJpbmcoKTsKIH0KIAorU3RyaW5nIFBh
c3RlYm9hcmQ6OnJlYWRTdHJpbmdJbkN1c3RvbURhdGEoY29uc3QgU3RyaW5nJikKK3sKKyAgICBu
b3RJbXBsZW1lbnRlZCgpOyAvLyB3ZWJraXQub3JnL2IvMTc3NjMzOiBbR1RLXSBNb3ZlIHRvIG5l
dyBQYXN0ZWJvYXJkIEFQSQorICAgIHJldHVybiB7IH07Cit9CisKIFZlY3RvcjxTdHJpbmc+IFBh
c3RlYm9hcmQ6OnJlYWRGaWxlbmFtZXMoKQogewogICAgIHJlYWRGcm9tQ2xpcGJvYXJkKCk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGFzdGVib2FyZElPUy5tbSBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QYXN0ZWJvYXJkSU9TLm1tCmluZGV4IDNlMjgx
NWQ2MWU1NjUxMDkxMjBmM2I2Y2JjNTIyMDc2MWQ0MDQzY2IuLjEzZTFlNjE2MTg3OTRlNjUyM2E3
MDljYjg5NzFkY2RhMjgxOTI2NTYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2lvcy9QYXN0ZWJvYXJkSU9TLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9Q
YXN0ZWJvYXJkSU9TLm1tCkBAIC0yNSwzNSArMjUsMTggQEAKICNpbXBvcnQgImNvbmZpZy5oIgog
I2ltcG9ydCAiUGFzdGVib2FyZC5oIgogCi0jaW1wb3J0ICJDYWNoZWRJbWFnZS5oIgotI2ltcG9y
dCAiRG9jdW1lbnQuaCIKLSNpbXBvcnQgIkRvY3VtZW50RnJhZ21lbnQuaCIKLSNpbXBvcnQgIkRv
Y3VtZW50TG9hZGVyLmgiCiAjaW1wb3J0ICJEcmFnRGF0YS5oIgotI2ltcG9ydCAiRWRpdGluZy5o
IgotI2ltcG9ydCAiRWRpdG9yLmgiCi0jaW1wb3J0ICJFZGl0b3JDbGllbnQuaCIKLSNpbXBvcnQg
IkZyYW1lLmgiCi0jaW1wb3J0ICJGcmFtZUxvYWRlci5oIgotI2ltcG9ydCAiRnJhbWVMb2FkZXJD
bGllbnQuaCIKLSNpbXBvcnQgIkhUTUxFbGVtZW50LmgiCi0jaW1wb3J0ICJIVE1MUGFyc2VySWRp
b21zLmgiCiAjaW1wb3J0ICJJbWFnZS5oIgotI2ltcG9ydCAiTGVnYWN5V2ViQXJjaGl2ZS5oIgog
I2ltcG9ydCAiTm90SW1wbGVtZW50ZWQuaCIKICNpbXBvcnQgIlBhc3RlYm9hcmRTdHJhdGVneS5o
IgogI2ltcG9ydCAiUGxhdGZvcm1QYXN0ZWJvYXJkLmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVN0cmF0
ZWdpZXMuaCIKLSNpbXBvcnQgIlJlbmRlckltYWdlLmgiCi0jaW1wb3J0ICJSdW50aW1lQXBwbGlj
YXRpb25DaGVja3MuaCIKLSNpbXBvcnQgIlNldHRpbmdzLmgiCiAjaW1wb3J0ICJTaGFyZWRCdWZm
ZXIuaCIKLSNpbXBvcnQgIlRleHQuaCIKICNpbXBvcnQgIlVSTC5oIgogI2ltcG9ydCAiVVRJVXRp
bGl0aWVzLmgiCiAjaW1wb3J0ICJXZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMuaCIKLSNpbXBv
cnQgIm1hcmt1cC5oIgogI2ltcG9ydCA8TW9iaWxlQ29yZVNlcnZpY2VzL01vYmlsZUNvcmVTZXJ2
aWNlcy5oPgorI2ltcG9ydCA8d3RmL3RleHQvU3RyaW5nSGFzaC5oPgogCiBAaW50ZXJmYWNlIE5T
QXR0cmlidXRlZFN0cmluZyAoTlNBdHRyaWJ1dGVkU3RyaW5nS2l0QWRkaXRpb25zKQogLSAoaWQp
aW5pdFdpdGhSVEY6KE5TRGF0YSAqKWRhdGEgZG9jdW1lbnRBdHRyaWJ1dGVzOihOU0RpY3Rpb25h
cnkgKiopZGljdDsKQEAgLTExNywxMSArMTAwLDYgQEAgc3RkOjp1bmlxdWVfcHRyPFBhc3RlYm9h
cmQ+IFBhc3RlYm9hcmQ6OmNyZWF0ZUZvckNvcHlBbmRQYXN0ZSgpCiAgICAgcmV0dXJuIHN0ZDo6
bWFrZV91bmlxdWU8UGFzdGVib2FyZD4oY2hhbmdlQ291bnRGb3JQYXN0ZWJvYXJkKCkpOwogfQog
Ci12b2lkIFBhc3RlYm9hcmQ6OndyaXRlQ3VzdG9tRGF0YShjb25zdCBQYXN0ZWJvYXJkQ3VzdG9t
RGF0YSYgZGF0YSkKLXsKLSAgICBtX2NoYW5nZUNvdW50ID0gcGxhdGZvcm1TdHJhdGVnaWVzKCkt
PnBhc3RlYm9hcmRTdHJhdGVneSgpLT53cml0ZUN1c3RvbURhdGEoZGF0YSwgbV9wYXN0ZWJvYXJk
TmFtZSk7Ci19Ci0KIHZvaWQgUGFzdGVib2FyZDo6d3JpdGUoY29uc3QgUGFzdGVib2FyZFdlYkNv
bnRlbnQmIGNvbnRlbnQpCiB7CiAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRT
dHJhdGVneSgpLT53cml0ZVRvUGFzdGVib2FyZChjb250ZW50LCBtX3Bhc3RlYm9hcmROYW1lKTsK
QEAgLTI3OSwxMSArMjU3LDYgQEAgdm9pZCBQYXN0ZWJvYXJkOjpyZWFkUmVzcGVjdGluZ1VUSUZp
ZGVsaXRpZXMoUGFzdGVib2FyZFdlYkNvbnRlbnRSZWFkZXImIHJlYWRlcikKICAgICB9CiB9CiAK
LWxvbmcgUGFzdGVib2FyZDo6Y2hhbmdlQ291bnQoKSBjb25zdAotewotICAgIHJldHVybiBwbGF0
Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmNoYW5nZUNvdW50KG1fcGFz
dGVib2FyZE5hbWUpOwotfQotCiBOU0FycmF5ICpQYXN0ZWJvYXJkOjpzdXBwb3J0ZWRXZWJDb250
ZW50UGFzdGVib2FyZFR5cGVzKCkKIHsKICAgICByZXR1cm4gQFsoaWQpV2ViQXJjaGl2ZVBib2Fy
ZFR5cGUsIChpZClrVVRUeXBlRmxhdFJURkQsIChpZClrVVRUeXBlUlRGLCAoaWQpa1VUVHlwZUhU
TUwsIChpZClrVVRUeXBlUE5HLCAoaWQpa1VUVHlwZVRJRkYsIChpZClrVVRUeXBlSlBFRywgKGlk
KWtVVFR5cGVHSUYsIChpZClrVVRUeXBlVVJMLCAoaWQpa1VUVHlwZVRleHRdOwpAQCAtMzM4LDcg
KzMxMSw3IEBAIHZvaWQgUGFzdGVib2FyZDo6Y2xlYXIoKQogICAgIHBsYXRmb3JtU3RyYXRlZ2ll
cygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+d3JpdGVUb1Bhc3RlYm9hcmQoU3RyaW5nKCksIFN0
cmluZygpLCBtX3Bhc3RlYm9hcmROYW1lKTsKIH0KIAotc3RhdGljIFN0cmluZyByZWFkUGxhdGZv
cm1WYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZyYgZG9tVHlwZSwgbG9uZyBjaGFuZ2VDb3VudCwg
Y29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKK1N0cmluZyBQYXN0ZWJvYXJkOjpyZWFkUGxh
dGZvcm1WYWx1ZUFzU3RyaW5nKGNvbnN0IFN0cmluZyYgZG9tVHlwZSwgbG9uZyBjaGFuZ2VDb3Vu
dCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJvYXJkTmFtZSkKIHsKICAgICBQYXN0ZWJvYXJkU3RyYXRl
Z3kmIHN0cmF0ZWd5ID0gKnBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3ko
KTsKIApAQCAtMzcyLDIxICszNDUsNyBAQCBzdGF0aWMgU3RyaW5nIHJlYWRQbGF0Zm9ybVZhbHVl
QXNTdHJpbmcoY29uc3QgU3RyaW5nJiBkb21UeXBlLCBsb25nIGNoYW5nZUNvdW50LAogICAgIHJl
dHVybiBTdHJpbmcoKTsKIH0KIAotU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRTdHJpbmdGb3JCaW5k
aW5ncyhjb25zdCBTdHJpbmcmIHR5cGUpCi17Ci0gICAgaWYgKCFTZXR0aW5nczo6Y3VzdG9tUGFz
dGVib2FyZERhdGFFbmFibGVkKCkgfHwgaXNTYWZlVHlwZUZvckRPTVRvUmVhZEFuZFdyaXRlKHR5
cGUpKQotICAgICAgICByZXR1cm4gcmVhZFBsYXRmb3JtVmFsdWVBc1N0cmluZyh0eXBlLCBtX2No
YW5nZUNvdW50LCBtX3Bhc3RlYm9hcmROYW1lKTsKLQotICAgIGlmIChhdXRvIGJ1ZmZlciA9IHBs
YXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+YnVmZmVyRm9yVHlwZShj
dXN0b21XZWJLaXRQYXN0ZWJvYXJkRGF0YVR5cGUsIG1fcGFzdGVib2FyZE5hbWUpKSB7Ci0gICAg
ICAgIE5TU3RyaW5nICpjdXN0b21EYXRhVmFsdWUgPSBjdXN0b21EYXRhRnJvbVNoYXJlZEJ1ZmZl
cigqYnVmZmVyKS5zYW1lT3JpZ2luQ3VzdG9tRGF0YS5nZXQodHlwZSk7Ci0gICAgICAgIGlmIChj
dXN0b21EYXRhVmFsdWUubGVuZ3RoKQotICAgICAgICAgICAgcmV0dXJuIGN1c3RvbURhdGFWYWx1
ZTsKLSAgICB9Ci0KLSAgICByZXR1cm4geyB9OwotfQotCi1zdGF0aWMgdm9pZCBhZGRIVE1MQ2xp
cGJvYXJkVHlwZXNGb3JDb2NvYVR5cGUoTGlzdEhhc2hTZXQ8U3RyaW5nPiYgcmVzdWx0VHlwZXMs
IE5TU3RyaW5nICpjb2NvYVR5cGUpCit2b2lkIFBhc3RlYm9hcmQ6OmFkZEhUTUxDbGlwYm9hcmRU
eXBlc0ZvckNvY29hVHlwZShMaXN0SGFzaFNldDxTdHJpbmc+JiByZXN1bHRUeXBlcywgY29uc3Qg
U3RyaW5nJiBjb2NvYVR5cGUsIGNvbnN0IFN0cmluZyYpCiB7CiAgICAgLy8gVVRJIG1heSBub3Qg
ZG8gdGhlc2UgcmlnaHQsIHNvIG1ha2Ugc3VyZSB3ZSBnZXQgdGhlIHJpZ2h0LCBwcmVkaWN0YWJs
ZSByZXN1bHQuCiAgICAgaWYgKFtjb2NvYVR5cGUgaXNFcXVhbFRvU3RyaW5nOihOU1N0cmluZyAq
KWtVVFR5cGVQbGFpblRleHRdCkBAIC00MjEsMzIgKzM4MCw2IEBAIHZvaWQgUGFzdGVib2FyZDo6
d3JpdGVTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRhdGEpCiAgICAg
cGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT53cml0ZVRvUGFzdGVi
b2FyZChjb2NvYVR5cGUuZ2V0KCksIGRhdGEsIG1fcGFzdGVib2FyZE5hbWUpOwogfQogCi1WZWN0
b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBlc0ZvckJpbmRpbmdzKCkKLXsKLSAgICBWZWN0b3I8
U3RyaW5nPiB0eXBlczsKLSAgICBpZiAoU2V0dGluZ3M6OmN1c3RvbVBhc3RlYm9hcmREYXRhRW5h
YmxlZCgpKQotICAgICAgICB0eXBlcyA9IHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJk
U3RyYXRlZ3koKS0+dHlwZXNTYWZlRm9yRE9NVG9SZWFkQW5kV3JpdGUobV9wYXN0ZWJvYXJkTmFt
ZSk7Ci0gICAgZWxzZQotICAgICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0
cmF0ZWd5KCktPmdldFR5cGVzKHR5cGVzLCBtX3Bhc3RlYm9hcmROYW1lKTsKLQotICAgIC8vIEVu
Zm9yY2UgY2hhbmdlQ291bnQgb3Vyc2VsdmVzIGZvciBzZWN1cml0eS4gV2UgY2hlY2sgYWZ0ZXIg
cmVhZGluZyBpbnN0ZWFkIG9mIGJlZm9yZSB0byBiZQotICAgIC8vIHN1cmUgaXQgZG9lc24ndCBj
aGFuZ2UgYmV0d2VlbiBvdXIgdGVzdGluZyB0aGUgY2hhbmdlIGNvdW50IGFuZCBhY2Nlc3Npbmcg
dGhlIGRhdGEuCi0gICAgYXV0byBjaGFuZ2VDb3VudCA9IGNoYW5nZUNvdW50Rm9yUGFzdGVib2Fy
ZChtX3Bhc3RlYm9hcmROYW1lKTsKLSAgICBpZiAobV9jaGFuZ2VDb3VudCAhPSBjaGFuZ2VDb3Vu
dCkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGlmIChTZXR0aW5nczo6Y3VzdG9tUGFzdGVi
b2FyZERhdGFFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiB0eXBlczsKLQotICAgIExpc3RIYXNo
U2V0PFN0cmluZz4gcmVzdWx0OwotICAgIGZvciAoYXV0byBjb2NvYVR5cGUgOiB0eXBlcykKLSAg
ICAgICAgYWRkSFRNTENsaXBib2FyZFR5cGVzRm9yQ29jb2FUeXBlKHJlc3VsdCwgY29jb2FUeXBl
KTsKLQotICAgIFZlY3RvcjxTdHJpbmc+IHZlY3RvcjsKLSAgICBjb3B5VG9WZWN0b3IocmVzdWx0
LCB2ZWN0b3IpOwotICAgIHJldHVybiB2ZWN0b3I7Ci19Ci0KIFZlY3RvcjxTdHJpbmc+IFBhc3Rl
Ym9hcmQ6OnJlYWRGaWxlbmFtZXMoKQogewogICAgIFZlY3RvcjxTdHJpbmc+IGZpbGVuYW1lczsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9h
cmRJT1MubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3MvUGxhdGZvcm1QYXN0ZWJvYXJk
SU9TLm1tCmluZGV4IDYyYTQwYzRkOTVhN2I1ZjliODAxM2E2NTQzZjFiZTUyMzMxOTM3Y2MuLjJi
OGE0NzcyOWM4YWFlY2FkYWRjNjljYjdhMzE1ZDczNWU2NzBmNzYgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0KKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbQpAQCAtMzc1
LDcgKzM3NSw3IEBAIFZlY3RvcjxTdHJpbmc+IFBsYXRmb3JtUGFzdGVib2FyZDo6dHlwZXNTYWZl
Rm9yRE9NVG9SZWFkQW5kV3JpdGUoKSBjb25zdAogICAgICAgICBpZiAoW3R5cGUgaXNFcXVhbFRv
U3RyaW5nOkAoY3VzdG9tV2ViS2l0UGFzdGVib2FyZERhdGFUeXBlKV0pCiAgICAgICAgICAgICBj
b250aW51ZTsKIAotICAgICAgICBpZiAoaXNTYWZlVHlwZUZvckRPTVRvUmVhZEFuZFdyaXRlKHR5
cGUpKSB7CisgICAgICAgIGlmIChQYXN0ZWJvYXJkOjppc1NhZmVUeXBlRm9yRE9NVG9SZWFkQW5k
V3JpdGUodHlwZSkpIHsKICAgICAgICAgICAgIGRvbVBhc3RlYm9hcmRUeXBlcy5hZGQodHlwZSk7
CiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvcGxhdGZvcm0vbWFjL1Bhc3RlYm9hcmRNYWMubW0gYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQppbmRleCAxNzMxZDZhMDlkODg3NTQ2YzIyZGE4Nzc3
Y2Q5MGNjMmQ2OGJkNjU5Li5jZmJjNjk3NThmODIyZmIxM2VjNWMwMDhkZjFiZTcyMzM4Mzg1YzRi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5t
bQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbQpAQCAt
MjYsMzQgKzI2LDE3IEBACiAjaW1wb3J0ICJjb25maWcuaCIKICNpbXBvcnQgIlBhc3RlYm9hcmQu
aCIKIAotI2ltcG9ydCAiQ2FjaGVkSW1hZ2UuaCIKLSNpbXBvcnQgIkRvY3VtZW50LmgiCi0jaW1w
b3J0ICJEb2N1bWVudEZyYWdtZW50LmgiCi0jaW1wb3J0ICJEb2N1bWVudExvYWRlci5oIgogI2lt
cG9ydCAiRHJhZ0RhdGEuaCIKLSNpbXBvcnQgIkVkaXRpbmcuaCIKLSNpbXBvcnQgIkVkaXRvci5o
IgotI2ltcG9ydCAiRWRpdG9yQ2xpZW50LmgiCi0jaW1wb3J0ICJGcmFtZS5oIgotI2ltcG9ydCAi
RnJhbWVMb2FkZXJDbGllbnQuaCIKLSNpbXBvcnQgIkZyYW1lVmlldy5oIgotI2ltcG9ydCAiSGl0
VGVzdFJlc3VsdC5oIgogI2ltcG9ydCAiSW1hZ2UuaCIKLSNpbXBvcnQgIkxlZ2FjeVdlYkFyY2hp
dmUuaCIKICNpbXBvcnQgIkxvYWRlck5TVVJMRXh0cmFzLmgiCiAjaW1wb3J0ICJNSU1FVHlwZVJl
Z2lzdHJ5LmgiCiAjaW1wb3J0ICJQYXN0ZWJvYXJkU3RyYXRlZ3kuaCIKICNpbXBvcnQgIlBsYXRm
b3JtUGFzdGVib2FyZC5oIgogI2ltcG9ydCAiUGxhdGZvcm1TdHJhdGVnaWVzLmgiCi0jaW1wb3J0
ICJSZW5kZXJJbWFnZS5oIgotI2ltcG9ydCAiU2V0dGluZ3MuaCIKLSNpbXBvcnQgIlRleHQuaCIK
ICNpbXBvcnQgIlVSTC5oIgogI2ltcG9ydCAiVVRJVXRpbGl0aWVzLmgiCiAjaW1wb3J0ICJXZWJD
b3JlTlNTdHJpbmdFeHRyYXMuaCIKLSNpbXBvcnQgIldlYkNvcmVTeXN0ZW1JbnRlcmZhY2UuaCIK
ICNpbXBvcnQgIldlYk5TQXR0cmlidXRlZFN0cmluZ0V4dHJhcy5oIgotI2ltcG9ydCAibWFya3Vw
LmgiCiAjaW1wb3J0IDxwYWwvc3BpL2NnL0NvcmVHcmFwaGljc1NQSS5oPgogI2ltcG9ydCA8cGFs
L3NwaS9tYWMvSElTZXJ2aWNlc1NQSS5oPgogI2ltcG9ydCA8d3RmL1JldGFpblB0ci5oPgpAQCAt
OTEsMTEgKzc0LDYgQEAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IHdyaXRhYmxlVHlwZXNGb3JJbWFn
ZSgpCiAgICAgcmV0dXJuIHR5cGVzOwogfQogCi1sb25nIFBhc3RlYm9hcmQ6OmNoYW5nZUNvdW50
KCkgY29uc3QKLXsKLSAgICByZXR1cm4gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRT
dHJhdGVneSgpLT5jaGFuZ2VDb3VudChtX3Bhc3RlYm9hcmROYW1lKTsKLX0KLQogTlNBcnJheSAq
UGFzdGVib2FyZDo6c3VwcG9ydGVkRmlsZVVwbG9hZFBhc3RlYm9hcmRUeXBlcygpCiB7CiAgICAg
cmV0dXJuIEBbIChOU1N0cmluZyAqKU5TRmlsZXNQcm9taXNlUGJvYXJkVHlwZSwgKE5TU3RyaW5n
ICopTlNGaWxlbmFtZXNQYm9hcmRUeXBlIF07CkBAIC0xNzksMTEgKzE1Nyw2IEBAIHZvaWQgUGFz
dGVib2FyZDo6d3JpdGUoY29uc3QgUGFzdGVib2FyZFdlYkNvbnRlbnQmIGNvbnRlbnQpCiAgICAg
ICAgIG1fY2hhbmdlQ291bnQgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0
ZWd5KCktPnNldFN0cmluZ0ZvclR5cGUoY29udGVudC5kYXRhSW5TdHJpbmdGb3JtYXQsIE5TU3Ry
aW5nUGJvYXJkVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSk7CiB9CiAKLXZvaWQgUGFzdGVib2FyZDo6
d3JpdGVDdXN0b21EYXRhKGNvbnN0IFBhc3RlYm9hcmRDdXN0b21EYXRhJiBkYXRhKQotewotICAg
IG1fY2hhbmdlQ291bnQgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5
KCktPndyaXRlQ3VzdG9tRGF0YShkYXRhLCBtX3Bhc3RlYm9hcmROYW1lKTsKLX0KLQogdm9pZCBQ
YXN0ZWJvYXJkOjp3cml0ZVBsYWluVGV4dChjb25zdCBTdHJpbmcmIHRleHQsIFNtYXJ0UmVwbGFj
ZU9wdGlvbiBzbWFydFJlcGxhY2VPcHRpb24pCiB7CiAgICAgVmVjdG9yPFN0cmluZz4gdHlwZXM7
CkBAIC00OTMsNyArNDY2LDcgQEAgc3RhdGljIFZlY3RvcjxTdHJpbmc+IGFic29sdXRlVVJMc0Zy
b21QYXN0ZWJvYXJkRmlsZW5hbWVzKGNvbnN0IFN0cmluZyYgcGFzdGVib2EKICAgICByZXR1cm4g
dXJsczsKIH0KIAotc3RhdGljIFN0cmluZyByZWFkUGxhdGZvcm1WYWx1ZUFzU3RyaW5nKGNvbnN0
IFN0cmluZyYgZG9tVHlwZSwgbG9uZyBjaGFuZ2VDb3VudCwgY29uc3QgU3RyaW5nJiBwYXN0ZWJv
YXJkTmFtZSkKK1N0cmluZyBQYXN0ZWJvYXJkOjpyZWFkUGxhdGZvcm1WYWx1ZUFzU3RyaW5nKGNv
bnN0IFN0cmluZyYgZG9tVHlwZSwgbG9uZyBjaGFuZ2VDb3VudCwgY29uc3QgU3RyaW5nJiBwYXN0
ZWJvYXJkTmFtZSkKIHsKICAgICBjb25zdCBTdHJpbmcmIGNvY29hVHlwZSA9IGNvY29hVHlwZUZy
b21IVE1MQ2xpcGJvYXJkVHlwZShkb21UeXBlKTsKICAgICBTdHJpbmcgY29jb2FWYWx1ZTsKQEAg
LTUxMSwyMCArNDg0LDYgQEAgc3RhdGljIFN0cmluZyByZWFkUGxhdGZvcm1WYWx1ZUFzU3RyaW5n
KGNvbnN0IFN0cmluZyYgZG9tVHlwZSwgbG9uZyBjaGFuZ2VDb3VudCwKICAgICByZXR1cm4gU3Ry
aW5nKCk7CiB9CiAKLVN0cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nRm9yQmluZGluZ3MoY29u
c3QgU3RyaW5nJiB0eXBlKQotewotICAgIGlmICghU2V0dGluZ3M6OmN1c3RvbVBhc3RlYm9hcmRE
YXRhRW5hYmxlZCgpIHx8IGlzU2FmZVR5cGVGb3JET01Ub1JlYWRBbmRXcml0ZSh0eXBlKSkKLSAg
ICAgICAgcmV0dXJuIHJlYWRQbGF0Zm9ybVZhbHVlQXNTdHJpbmcodHlwZSwgbV9jaGFuZ2VDb3Vu
dCwgbV9wYXN0ZWJvYXJkTmFtZSk7Ci0KLSAgICBpZiAoYXV0byBidWZmZXIgPSBwbGF0Zm9ybVN0
cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmJ1ZmZlckZvclR5cGUoY3VzdG9tV2Vi
S2l0UGFzdGVib2FyZERhdGFUeXBlLCBtX3Bhc3RlYm9hcmROYW1lKSkgewotICAgICAgICBOU1N0
cmluZyAqY3VzdG9tRGF0YVZhbHVlID0gY3VzdG9tRGF0YUZyb21TaGFyZWRCdWZmZXIoKmJ1ZmZl
cikuc2FtZU9yaWdpbkN1c3RvbURhdGEuZ2V0KHR5cGUpOwotICAgICAgICBpZiAoY3VzdG9tRGF0
YVZhbHVlLmxlbmd0aCkKLSAgICAgICAgICAgIHJldHVybiBjdXN0b21EYXRhVmFsdWU7Ci0gICAg
fQotCi0gICAgcmV0dXJuIHsgfTsKLX0KLQogc3RhdGljIFN0cmluZyB1dGlUeXBlRnJvbUNvY29h
VHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCiB7CiAgICAgaWYgKFJldGFpblB0cjxDRlN0cmluZ1Jl
Zj4gdXRpVHlwZSA9IGFkb3B0Q0YoVVRUeXBlQ3JlYXRlUHJlZmVycmVkSWRlbnRpZmllckZvclRh
ZyhrVVRUYWdDbGFzc05TUGJvYXJkVHlwZSwgdHlwZS5jcmVhdGVDRlN0cmluZygpLmdldCgpLCAw
KSkpIHsKQEAgLTUzNCw3ICs0OTMsNyBAQCBzdGF0aWMgU3RyaW5nIHV0aVR5cGVGcm9tQ29jb2FU
eXBlKGNvbnN0IFN0cmluZyYgdHlwZSkKICAgICByZXR1cm4gU3RyaW5nKCk7CiB9CiAKLXN0YXRp
YyB2b2lkIGFkZEhUTUxDbGlwYm9hcmRUeXBlc0ZvckNvY29hVHlwZShMaXN0SGFzaFNldDxTdHJp
bmc+JiByZXN1bHRUeXBlcywgY29uc3QgU3RyaW5nJiBjb2NvYVR5cGUsIGNvbnN0IFN0cmluZyYg
cGFzdGVib2FyZE5hbWUpCit2b2lkIFBhc3RlYm9hcmQ6OmFkZEhUTUxDbGlwYm9hcmRUeXBlc0Zv
ckNvY29hVHlwZShMaXN0SGFzaFNldDxTdHJpbmc+JiByZXN1bHRUeXBlcywgY29uc3QgU3RyaW5n
JiBjb2NvYVR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpCiB7CiAgICAgaWYgKGNv
Y29hVHlwZSA9PSAiTmVYVCBwbGFpbiBhc2NpaSBwYXN0ZWJvYXJkIHR5cGUiKQogICAgICAgICBy
ZXR1cm47IC8vIFNraXAgdGhpcyBhbmNpZW50IHR5cGUgdGhhdCBnZXRzIGF1dG8tc3VwcGxpZWQg
Ynkgc29tZSBzeXN0ZW0gY29udmVyc2lvbi4KQEAgLTU5OCwzMCArNTU3LDYgQEAgdm9pZCBQYXN0
ZWJvYXJkOjp3cml0ZVN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0
YSkKICAgICB9CiB9CiAKLVZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnR5cGVzRm9yQmluZGlu
Z3MoKQotewotICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOwotICAgIGlmIChTZXR0aW5nczo6Y3Vz
dG9tUGFzdGVib2FyZERhdGFFbmFibGVkKCkpCi0gICAgICAgIHR5cGVzID0gcGxhdGZvcm1TdHJh
dGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT50eXBlc1NhZmVGb3JET01Ub1JlYWRBbmRX
cml0ZShtX3Bhc3RlYm9hcmROYW1lKTsKLSAgICBlbHNlCi0gICAgICAgIHBsYXRmb3JtU3RyYXRl
Z2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+Z2V0VHlwZXModHlwZXMsIG1fcGFzdGVib2Fy
ZE5hbWUpOwotCi0gICAgLy8gRW5mb3JjZSBjaGFuZ2VDb3VudCBvdXJzZWx2ZXMgZm9yIHNlY3Vy
aXR5LiBXZSBjaGVjayBhZnRlciByZWFkaW5nIGluc3RlYWQgb2YgYmVmb3JlIHRvIGJlCi0gICAg
Ly8gc3VyZSBpdCBkb2Vzbid0IGNoYW5nZSBiZXR3ZWVuIG91ciB0ZXN0aW5nIHRoZSBjaGFuZ2Ug
Y291bnQgYW5kIGFjY2Vzc2luZyB0aGUgZGF0YS4KLSAgICBpZiAobV9jaGFuZ2VDb3VudCAhPSBw
bGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmNoYW5nZUNvdW50KG1f
cGFzdGVib2FyZE5hbWUpKQotICAgICAgICByZXR1cm4geyB9OwotCi0gICAgaWYgKFNldHRpbmdz
OjpjdXN0b21QYXN0ZWJvYXJkRGF0YUVuYWJsZWQoKSkKLSAgICAgICAgcmV0dXJuIHR5cGVzOwot
Ci0gICAgTGlzdEhhc2hTZXQ8U3RyaW5nPiByZXN1bHQ7Ci0gICAgZm9yIChhdXRvJiBjb2NvYVR5
cGUgOiB0eXBlcykKLSAgICAgICAgYWRkSFRNTENsaXBib2FyZFR5cGVzRm9yQ29jb2FUeXBlKHJl
c3VsdCwgY29jb2FUeXBlLCBtX3Bhc3RlYm9hcmROYW1lKTsKLQotICAgIGNvcHlUb1ZlY3Rvcihy
ZXN1bHQsIHR5cGVzKTsKLSAgICByZXR1cm4gdHlwZXM7Ci19Ci0KIFZlY3RvcjxTdHJpbmc+IFBh
c3RlYm9hcmQ6OnJlYWRGaWxlbmFtZXMoKQogewogICAgIC8vIEZJWE1FOiBTZWVtcyBzaWxseSB0
byBjb252ZXJ0IHBhdGhzIHRvIFVSTHMgYW5kIHRoZW4gYmFjayB0byBwYXRocy4gRG9lcyB0aGF0
IGRvIGFueXRoaW5nIGhlbHBmdWw/CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9y
bS9tYWMvUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
bWFjL1BsYXRmb3JtUGFzdGVib2FyZE1hYy5tbQppbmRleCBiNTkwZDY1NTc4OTc3Yjk0Mzk3ZThm
YzBhYzI2MTFjMmYzNGVhNzhiLi5mZDUwMGEzODQxYjU5ZjUwZDNhNWY0Y2Q3MGU0ZDU4OWFhZWI3
ZmI3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1QYXN0
ZWJvYXJkTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QbGF0Zm9ybVBh
c3RlYm9hcmRNYWMubW0KQEAgLTI4LDcgKzI4LDYgQEAKIAogI2ltcG9ydCAiQ29sb3IuaCIKICNp
bXBvcnQgIlBhc3RlYm9hcmQuaCIKLSNpbXBvcnQgIlNldHRpbmdzLmgiCiAjaW1wb3J0ICJVUkwu
aCIKICNpbXBvcnQgIlNoYXJlZEJ1ZmZlci5oIgogI2ltcG9ydCA8d3RmL0hhc2hDb3VudGVkU2V0
Lmg+CkBAIC0xMjUsNyArMTI0LDcgQEAgVmVjdG9yPFN0cmluZz4gUGxhdGZvcm1QYXN0ZWJvYXJk
Ojp0eXBlc1NhZmVGb3JET01Ub1JlYWRBbmRXcml0ZSgpIGNvbnN0CiAgICAgICAgIGlmIChbdHlw
ZSBpc0VxdWFsVG9TdHJpbmc6QChjdXN0b21XZWJLaXRQYXN0ZWJvYXJkRGF0YVR5cGUpXSkKICAg
ICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChpc1NhZmVUeXBlRm9yRE9NVG9SZWFk
QW5kV3JpdGUodHlwZSkpCisgICAgICAgIGlmIChQYXN0ZWJvYXJkOjppc1NhZmVUeXBlRm9yRE9N
VG9SZWFkQW5kV3JpdGUodHlwZSkpCiAgICAgICAgICAgICBkb21QYXN0ZWJvYXJkVHlwZXMuYWRk
KHR5cGUpOwogICAgICAgICBlbHNlIGlmIChhdXRvKiBkb21UeXBlID0gc2FmZVR5cGVGb3JET01U
b1JlYWRBbmRXcml0ZUZvclBsYXRmb3JtVHlwZSh0eXBlKSkgewogICAgICAgICAgICAgYXV0byBj
b2VyY2VkVHlwZSA9IFN0cmluZzo6ZnJvbVVURjgoZG9tVHlwZSk7CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdpbi5jcHAKaW5kZXggMGVjODcwMWY0MWY2MzAwMDkz
MTc2MTgyNDBkMjM1OGNkMTU1MTg4MS4uOGE4Yzk0NjIyNmM1OTdjYThjMDdjYTNlZjQ4Y2JlOTIy
YWVkZjU3ZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9h
cmRXaW4uY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJvYXJkV2lu
LmNwcApAQCAtMjQzLDcgKzI0MywxMyBAQCBzdGF0aWMgdm9pZCBhZGRNaW1lVHlwZXNGb3JGb3Jt
YXQoTGlzdEhhc2hTZXQ8U3RyaW5nPiYgcmVzdWx0cywgY29uc3QgRk9STUFURVRDJgogICAgIH0K
IH0KIAotVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6dHlwZXNGb3JCaW5kaW5ncygpCitWZWN0
b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBlc1NhZmVGb3JCaW5kaW5ncygpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4geyB9OworfQorCitWZWN0b3I8U3RyaW5nPiBQYXN0
ZWJvYXJkOjp0eXBlc0ZvckxlZ2FjeVVuc2FmZUJpbmRpbmdzKCkKIHsKICAgICBMaXN0SGFzaFNl
dDxTdHJpbmc+IHJlc3VsdHM7CiAKQEAgLTI4Miw3ICsyODgsNyBAQCBWZWN0b3I8U3RyaW5nPiBQ
YXN0ZWJvYXJkOjp0eXBlc1RyZWF0ZWRBc0ZpbGVzKCkKICAgICByZXR1cm4geyB9OwogfQogCi1T
dHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZ0ZvckJpbmRpbmdzKGNvbnN0IFN0cmluZyYgdHlw
ZSkKK1N0cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsK
ICAgICBpZiAoIW1fZGF0YU9iamVjdCAmJiBtX2RyYWdEYXRhTWFwLmlzRW1wdHkoKSkKICAgICAg
ICAgcmV0dXJuICIiOwpAQCAtMzAyLDYgKzMwOCwxMiBAQCBTdHJpbmcgUGFzdGVib2FyZDo6cmVh
ZFN0cmluZ0ZvckJpbmRpbmdzKGNvbnN0IFN0cmluZyYgdHlwZSkKICAgICByZXR1cm4gIiI7CiB9
CiAKK1N0cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nSW5DdXN0b21EYXRhKGNvbnN0IFN0cmlu
ZyYpCit7CisgICAgbm90SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4geyB9OworfQorCiBWZWN0
b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjpyZWFkRmlsZW5hbWVzKCkKIHsKICAgICBWZWN0b3I8U3Ry
aW5nPiBmaWxlTmFtZXM7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93cGUv
UGFzdGVib2FyZFdQRS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93cGUvUGFzdGVib2Fy
ZFdQRS5jcHAKaW5kZXggMTc4MDFjMmRhZjFlZTA3ZTdlMmM1ODYxZThmMDcwN2IyNTBmZTYwZi4u
NWUwYWVmOWUzZDUxNjA1YjcyNjFiNWU5N2UyY2EwNzM5YjRjNDIxMiAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3BlL1Bhc3RlYm9hcmRXUEUuY3BwCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL3dwZS9QYXN0ZWJvYXJkV1BFLmNwcApAQCAtNDksNyArNDksMTMgQEAg
Ym9vbCBQYXN0ZWJvYXJkOjpoYXNEYXRhKCkKICAgICByZXR1cm4gIXR5cGVzLmlzRW1wdHkoKTsK
IH0KIAotVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6dHlwZXNGb3JCaW5kaW5ncygpCitWZWN0
b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBlc1NhZmVGb3JCaW5kaW5ncygpCit7CisgICAgbm90
SW1wbGVtZW50ZWQoKTsKKyAgICByZXR1cm4geyB9OworfQorCitWZWN0b3I8U3RyaW5nPiBQYXN0
ZWJvYXJkOjp0eXBlc0ZvckxlZ2FjeVVuc2FmZUJpbmRpbmdzKCkKIHsKICAgICBWZWN0b3I8U3Ry
aW5nPiB0eXBlczsKICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5
KCktPmdldFR5cGVzKHR5cGVzKTsKQEAgLTYxLDExICs2NywxNyBAQCBWZWN0b3I8U3RyaW5nPiBQ
YXN0ZWJvYXJkOjp0eXBlc1RyZWF0ZWRBc0ZpbGVzKCkKICAgICByZXR1cm4geyB9OwogfQogCi1T
dHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZ0ZvckJpbmRpbmdzKGNvbnN0IFN0cmluZyYgdHlw
ZSkKK1N0cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsK
ICAgICByZXR1cm4gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5y
ZWFkU3RyaW5nRnJvbVBhc3RlYm9hcmQoMCwgdHlwZSk7CiB9CiAKK1N0cmluZyBQYXN0ZWJvYXJk
OjpyZWFkU3RyaW5nSW5DdXN0b21EYXRhKGNvbnN0IFN0cmluZyYpCit7CisgICAgbm90SW1wbGVt
ZW50ZWQoKTsKKyAgICByZXR1cm4geyB9OworfQorCiB2b2lkIFBhc3RlYm9hcmQ6OndyaXRlU3Ry
aW5nKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiB0ZXh0KQogewogICAgIHBsYXRm
b3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+d3JpdGVUb1Bhc3RlYm9hcmQo
dHlwZSwgdGV4dCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>322293</attachid>
            <date>2017-09-30 02:32:23 -0700</date>
            <delta_ts>2017-09-30 03:31:08 -0700</delta_ts>
            <desc>Fixed Mac builds</desc>
            <filename>bug-177700-20170930023221.patch</filename>
            <type>text/plain</type>
            <size>31250</size>
            <attacher name="Ryosuke Niwa">rniwa</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjIyNjc2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggODkyMzQ5NTAxMGU5NWZk
ZGM1N2UzOTE4NTYxM2FjOWRjMGI0YTRiYS4uYjBjMzY0M2MzNzZkZjVkMDNlYzk1ZTc4NTQzOGJi
NDQwN2Q5ZDQ3MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDc0IEBACisyMDE3LTA5LTI5ICBSeW9z
dWtlIE5pd2EgIDxybml3YUB3ZWJraXQub3JnPgorCisgICAgICAgIFNoYXJlIG1vcmUgcGFzdGVi
b2FyZCBjb2RlIGJldHdlZW4gaU9TIGFuZCBtYWNPUyBhbmQgcmVtb3ZlIGRlcGVuZGVuY3kgb24g
U2V0dGluZ3MKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE3NzcwMAorCisgICAgICAgIFJldmlld2VkIGJ5IFdlbnNvbiBIc2llaC4KKworICAgICAgICBN
b3ZlZCBtb3JlIGNvZGUgZnJvbSBQYXN0ZWJvYXJkSU9TLm1tIGFuZCBQYXN0ZWJvYXJkTWFjLm1t
IGludG8gUGFzdGVib2FyZENvY29hLm1tIHRvIHNoYXJlIGNvZGUuCisKKyAgICAgICAgVGhpcyBw
YXRjaCBhbHNvIHJlbW92ZXMgdGhlIGxheWVyaW5nIHZpb2xhdGlvbiBpbmFkdmVydGVudGx5IGlu
dHJvZHVjZWQgaW4gcjIyMjU5NSB3aGVyZWJ5IHdoaWNoCisgICAgICAgIFBhc3RlYm9hcmQgY29k
ZSBkZXBlbmRzIG9uIFNldHRpbmdzLiBUbyBkbyB0aGlzLCB0aGlzIHBhdGNoIHNwbGl0cyByZWFk
U3RyaW5nRm9yQmluZGluZ3MgaXMgaW50bworICAgICAgICByZWFkU3RyaW5nIGFuZCByZWFkU3Ry
aW5nSW5DdXN0b21EYXRhIGFuZCB0eXBlc0ZvckJpbmRpbmdzIGludG8gdHlwZXNTYWZlRm9yQmlu
ZGluZ3MgYW5kCisgICAgICAgIHR5cGVzRm9yTGVnYWN5VW5zYWZlQmluZGluZ3MsIGFuZCBtb3Zl
cyB0aGUgbG9naWMgdG8gZGVjaWRlIHdoZXRoZXIgYSBnaXZlbiB0eXBlIG9yIHN0cmluZyBpcyBy
ZWFkCisgICAgICAgIG9mZiBvZiB0aGUgbmF0aXZlIHBhc3RlYm9hcmQgZW50cnkgb3Igb3VyIGN1
c3RvbSBkYXRhIGVudHJ5IGlzIG1vdmVkIHRvIERhdGFUcmFuc2Zlci4KKworICAgICAgICBObyBu
ZXcgdGVzdHMgc2luY2UgdGhlcmUgc2hvdWxkIGJlIG5vIGJlaGF2aW9yYWwgY2hhbmdlLgorCisg
ICAgICAgICogZG9tL0RhdGFUcmFuc2Zlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpEYXRhVHJh
bnNmZXI6OmdldERhdGEgY29uc3QpOiBNb3ZlZCB0aGUgY29kZSB0byBkZWNpZGUgd2hldGhlciBz
dHJpbmcgaXMKKyAgICAgICAgcmVhZCBvZmYgb2YgY3VzdG9tIGRhdGEgb3IgbmF0aXZlIHBhc3Rl
Ym9hcmQgZnJvbSByZWFkU3RyaW5nRm9yQmluZGluZ3MuCisgICAgICAgIChXZWJDb3JlOjpEYXRh
VHJhbnNmZXI6OnR5cGVzIGNvbnN0KTogRGl0dG8gZnJvbSB0eXBlc0ZvckJpbmRpbmdzLgorICAg
ICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVi
b2FyZDo6aXNTYWZlVHlwZUZvckRPTVRvUmVhZEFuZFdyaXRlKTogTW92ZWQgaW50byBQYXN0ZWJv
YXJkLgorICAgICAgICAqIHBsYXRmb3JtL1Bhc3RlYm9hcmQuaDoKKyAgICAgICAgKiBwbGF0Zm9y
bS9TdGF0aWNQYXN0ZWJvYXJkLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OlN0YXRpY1Bhc3RlYm9h
cmQ6OnJlYWRTdHJpbmcpOiBSZW5hbWVkIGZyb20gcmVhZFN0cmluZ0ZvckJpbmRpbmdzLgorICAg
ICAgICAoV2ViQ29yZTo6U3RhdGljUGFzdGVib2FyZDo6cmVhZFN0cmluZ0luQ3VzdG9tRGF0YSk6
IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6U3RhdGljUGFzdGVib2FyZDo6d3JpdGVTdHJpbmcp
OgorICAgICAgICAqIHBsYXRmb3JtL1N0YXRpY1Bhc3RlYm9hcmQuaDoKKyAgICAgICAgKiBwbGF0
Zm9ybS9jb2NvYS9QYXN0ZWJvYXJkQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJv
YXJkOjp0eXBlc1NhZmVGb3JCaW5kaW5ncyk6IEV4dHJhY3RlZCBvdXQgb2YgdHlwZXNGb3JCaW5k
aW5ncyBpbiBQYXN0ZWJvYXJkSU9TLm1tCisgICAgICAgIGFuZCBQYXN0ZWJvYXJkTWFjLm1tLgor
ICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6dHlwZXNGb3JMZWdhY3lVbnNhZmVCaW5kaW5n
cyk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZFN0cmluZyk6IERp
dHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZFN0cmluZ0luQ3VzdG9tRGF0
YSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVDdXN0b21EYXRh
KTogTW92ZWQgaGVyZSBmcm9tIFBhc3RlYm9hcmRJT1MubW0gYW5kIFBhc3RlYm9hcmRDb2NvYS5t
bS4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmNoYW5nZUNvdW50IGNvbnN0KTogRGl0
dG8uCisgICAgICAgICogcGxhdGZvcm0vZ3RrL1Bhc3RlYm9hcmRHdGsuY3BwOgorICAgICAgICAo
V2ViQ29yZTo6UGFzdGVib2FyZDo6dHlwZXNTYWZlRm9yQmluZGluZ3MpOiBBZGRlZC4KKyAgICAg
ICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnR5cGVzRm9yTGVnYWN5VW5zYWZlQmluZGluZ3MpOiBS
ZW5hbWVkIGZyb20gcmVhZFN0cmluZ0ZvckJpbmRpbmdzLgorICAgICAgICAoV2ViQ29yZTo6UGFz
dGVib2FyZDo6cmVhZFN0cmluZyk6CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFk
U3RyaW5nSW5DdXN0b21EYXRhKTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vaW9zL1Bhc3Rl
Ym9hcmRJT1MubW06CisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjp3cml0ZUN1c3RvbURh
dGEpOiBNb3ZlZCB0byBQYXN0ZWJvYXJkQ29jb2EubW0uCisgICAgICAgIChXZWJDb3JlOjpQYXN0
ZWJvYXJkOjpjaGFuZ2VDb3VudCBjb25zdCk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFz
dGVib2FyZDo6cmVhZFBsYXRmb3JtVmFsdWVBc1N0cmluZyk6IE1vdmVkIGludG8gUGFzdGVib2Fy
ZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OmFkZEhUTUxDbGlwYm9hcmRUeXBlc0Zv
ckNvY29hVHlwZSk6IERpdHRvLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZFN0
cmluZ0ZvckJpbmRpbmdzKTogTW92ZWQgdG8gUGFzdGVib2FyZENvY29hLm1tLgorICAgICAgICAo
V2ViQ29yZTo6UGFzdGVib2FyZDo6dHlwZXNGb3JCaW5kaW5ncyk6IERpdHRvLgorICAgICAgICAq
IHBsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW06CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybVBhc3RlYm9hcmQ6OnR5cGVzU2FmZUZvckRPTVRvUmVhZEFuZFdyaXRlIGNvbnN0
KToKKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUGFzdGVib2FyZE1hYy5tbToKKyAgICAgICAgKFdl
YkNvcmU6OlBhc3RlYm9hcmQ6OmNoYW5nZUNvdW50IGNvbnN0KTogTW92ZWQgdG8gUGFzdGVib2Fy
ZENvY29hLm1tLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6d3JpdGVDdXN0b21EYXRh
KTogRGl0dG8uCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFkUGxhdGZvcm1WYWx1
ZUFzU3RyaW5nKTogTW92ZWQgaW50byBQYXN0ZWJvYXJkLgorICAgICAgICAoV2ViQ29yZTo6UGFz
dGVib2FyZDo6cmVhZFN0cmluZ0ZvckJpbmRpbmdzKTogTW92ZWQgdG8gUGFzdGVib2FyZENvY29h
Lm1tLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6YWRkSFRNTENsaXBib2FyZFR5cGVz
Rm9yQ29jb2FUeXBlKTogTW92ZWQgaW50byBQYXN0ZWJvYXJkLgorICAgICAgICAoV2ViQ29yZTo6
UGFzdGVib2FyZDo6dHlwZXNGb3JCaW5kaW5ncyk6IE1vdmVkIHRvIFBhc3RlYm9hcmRDb2NvYS5t
bS4KKyAgICAgICAgKiBwbGF0Zm9ybS9tYWMvUGxhdGZvcm1QYXN0ZWJvYXJkTWFjLm1tOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1QYXN0ZWJvYXJkOjp0eXBlc1NhZmVGb3JET01Ub1JlYWRB
bmRXcml0ZSBjb25zdCk6CisgICAgICAgICogcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6dHlwZXNTYWZlRm9yQmluZGluZ3MpOiBB
ZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnR5cGVzRm9yTGVnYWN5VW5zYWZl
QmluZGluZ3MpOiBSZW5hbWVkIGZyb20gcmVhZFN0cmluZ0ZvckJpbmRpbmdzLgorICAgICAgICAo
V2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZFN0cmluZyk6IFJlbmFtZWQgZnJvbSByZWFkU3RyaW5n
Rm9yQmluZGluZ3MuCisgICAgICAgIChXZWJDb3JlOjpQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nSW5D
dXN0b21EYXRhKTogQWRkZWQuCisgICAgICAgICogcGxhdGZvcm0vd3BlL1Bhc3RlYm9hcmRXUEUu
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6dHlwZXNTYWZlRm9yQmluZGluZ3Mp
OiBBZGRlZC4KKyAgICAgICAgKFdlYkNvcmU6OlBhc3RlYm9hcmR0eXBlc0ZvckxlZ2FjeVVuc2Fm
ZUJpbmRpbmdzKTogUmVuYW1lZCBmcm9tIHJlYWRTdHJpbmdGb3JCaW5kaW5ncy4KKyAgICAgICAg
KFdlYkNvcmU6OlBhc3RlYm9hcmQ6OnJlYWRTdHJpbmcpOiBSZW5hbWVkIGZyb20gcmVhZFN0cmlu
Z0ZvckJpbmRpbmdzLgorICAgICAgICAoV2ViQ29yZTo6UGFzdGVib2FyZDo6cmVhZFN0cmluZ0lu
Q3VzdG9tRGF0YSk6IEFkZGVkLgorCiAyMDE3LTA5LTI5ICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CiAKICAgICAgICAgaHR0cC90ZXN0cy9wcmVjb25uZWN0L2xpbmstcmVsLXByZWNv
bm5lY3QtaHR0cHMuaHRtbCBpcyBmbGFreQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZG9t
L0RhdGFUcmFuc2Zlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5zZmVyLmNwcApp
bmRleCA3YmQ4NDRlMDRjZmQ2Zjg3MGY4MjRlZTgzODFhZDI3MTBhZjNhZThkLi4zMjIyMzdhOTEw
YjRlYTY0YzA1NTIyZDNjNmZkZTVkOTg4MTVlZTU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9kb20vRGF0YVRyYW5zZmVyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9kb20vRGF0YVRyYW5z
ZmVyLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkhUTUxJbWFnZUVsZW1lbnQuaCIK
ICNpbmNsdWRlICJJbWFnZS5oIgogI2luY2x1ZGUgIlBhc3RlYm9hcmQuaCIKKyNpbmNsdWRlICJT
ZXR0aW5ncy5oIgogI2luY2x1ZGUgIlN0YXRpY1Bhc3RlYm9hcmQuaCIKICNpbmNsdWRlICJXZWJD
b3JlUGFzdGVib2FyZEZpbGVSZWFkZXIuaCIKIApAQCAtMTQxLDcgKzE0MiwxMCBAQCBTdHJpbmcg
RGF0YVRyYW5zZmVyOjpnZXREYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkgY29uc3QKICAgICAgICAg
cmV0dXJuIHsgfTsKICNlbmRpZgogCi0gICAgcmV0dXJuIG1fcGFzdGVib2FyZC0+cmVhZFN0cmlu
Z0ZvckJpbmRpbmdzKG5vcm1hbGl6ZVR5cGUodHlwZSkpOworICAgIGF1dG8gbm9ybWFsaXplZFR5
cGUgPSBub3JtYWxpemVUeXBlKHR5cGUpOworICAgIGlmIChTZXR0aW5nczo6Y3VzdG9tUGFzdGVi
b2FyZERhdGFFbmFibGVkKCkgJiYgIVBhc3RlYm9hcmQ6OmlzU2FmZVR5cGVGb3JET01Ub1JlYWRB
bmRXcml0ZShub3JtYWxpemVkVHlwZSkpCisgICAgICAgIHJldHVybiBtX3Bhc3RlYm9hcmQtPnJl
YWRTdHJpbmdJbkN1c3RvbURhdGEobm9ybWFsaXplZFR5cGUpOworICAgIHJldHVybiBtX3Bhc3Rl
Ym9hcmQtPnJlYWRTdHJpbmcobm9ybWFsaXplZFR5cGUpOwogfQogCiB2b2lkIERhdGFUcmFuc2Zl
cjo6c2V0RGF0YShjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKQEAgLTE3
Miw3ICsxNzYsNyBAQCBWZWN0b3I8U3RyaW5nPiBEYXRhVHJhbnNmZXI6OnR5cGVzKCkgY29uc3QK
ICAgICBpZiAoIWNhblJlYWRUeXBlcygpKQogICAgICAgICByZXR1cm4geyB9OwogCi0gICAgcmV0
dXJuIG1fcGFzdGVib2FyZC0+dHlwZXNGb3JCaW5kaW5ncygpOworICAgIHJldHVybiBTZXR0aW5n
czo6Y3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkKCkgPyBtX3Bhc3RlYm9hcmQtPnR5cGVzU2Fm
ZUZvckJpbmRpbmdzKCkgOiBtX3Bhc3RlYm9hcmQtPnR5cGVzRm9yTGVnYWN5VW5zYWZlQmluZGlu
Z3MoKTsKIH0KIAogRmlsZUxpc3QmIERhdGFUcmFuc2Zlcjo6ZmlsZXMoKSBjb25zdApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy93cGUvRWRpdG9yV1BFLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvd3BlL0VkaXRvcldQRS5jcHAKaW5kZXggYzkzYmFiYTIxYTdmMmM0OTc5
MTA3MTRlNzI1ZWE3MmU2MWIyMjdiMS4uYmIwY2ZjOTRlN2QyYzZiOWZjZTRhNzVkNTY1OGMwNGVh
YjJkN2I1YSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy93cGUvRWRpdG9yV1BF
LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL3dwZS9FZGl0b3JXUEUuY3BwCkBAIC0z
OCwxMiArMzgsMTIgQEAgc3RhdGljIFJlZlB0cjxEb2N1bWVudEZyYWdtZW50PiBjcmVhdGVGcmFn
bWVudEZyb21QYXN0ZWJvYXJkRGF0YShQYXN0ZWJvYXJkJiBwYXMKIHsKICAgICBjaG9zZVBsYWlu
VGV4dCA9IGZhbHNlOwogCi0gICAgVmVjdG9yPFN0cmluZz4gdHlwZXMgPSBwYXN0ZWJvYXJkLnR5
cGVzRm9yQmluZGluZ3MoKTsKKyAgICBWZWN0b3I8U3RyaW5nPiB0eXBlcyA9IHBhc3RlYm9hcmQu
dHlwZXNGb3JMZWdhY3lVbnNhZmVCaW5kaW5ncygpOwogICAgIGlmICh0eXBlcy5pc0VtcHR5KCkp
CiAgICAgICAgIHJldHVybiBudWxscHRyOwogCiAgICAgaWYgKHR5cGVzLmNvbnRhaW5zKCJ0ZXh0
L2h0bWw7Y2hhcnNldD11dGYtOCIpICYmIGZyYW1lLmRvY3VtZW50KCkpIHsKLSAgICAgICAgU3Ry
aW5nIG1hcmt1cCA9IHBhc3RlYm9hcmQucmVhZFN0cmluZ0ZvckJpbmRpbmdzKCJ0ZXh0L2h0bWw7
Y2hhcnNldD11dGYtOCIpOworICAgICAgICBTdHJpbmcgbWFya3VwID0gcGFzdGVib2FyZC5yZWFk
U3RyaW5nKCJ0ZXh0L2h0bWw7Y2hhcnNldD11dGYtOCIpOwogICAgICAgICBpZiAoUmVmUHRyPERv
Y3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tTWFya3VwKCpmcmFt
ZS5kb2N1bWVudCgpLCBtYXJrdXAsIGVtcHR5U3RyaW5nKCksIERpc2FsbG93U2NyaXB0aW5nQW5k
UGx1Z2luQ29udGVudCkpCiAgICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CiAgICAgfQpAQCAt
NTMsNyArNTMsNyBAQCBzdGF0aWMgUmVmUHRyPERvY3VtZW50RnJhZ21lbnQ+IGNyZWF0ZUZyYWdt
ZW50RnJvbVBhc3RlYm9hcmREYXRhKFBhc3RlYm9hcmQmIHBhcwogCiAgICAgaWYgKHR5cGVzLmNv
bnRhaW5zKCJ0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgiKSkgewogICAgICAgICBjaG9zZVBsYWlu
VGV4dCA9IHRydWU7Ci0gICAgICAgIGlmIChSZWZQdHI8RG9jdW1lbnRGcmFnbWVudD4gZnJhZ21l
bnQgPSBjcmVhdGVGcmFnbWVudEZyb21UZXh0KHJhbmdlLCBwYXN0ZWJvYXJkLnJlYWRTdHJpbmdG
b3JCaW5kaW5ncygidGV4dC9wbGFpbjtjaGFyc2V0PXV0Zi04IikpKQorICAgICAgICBpZiAoUmVm
UHRyPERvY3VtZW50RnJhZ21lbnQ+IGZyYWdtZW50ID0gY3JlYXRlRnJhZ21lbnRGcm9tVGV4dChy
YW5nZSwgcGFzdGVib2FyZC5yZWFkU3RyaW5nKCJ0ZXh0L3BsYWluO2NoYXJzZXQ9dXRmLTgiKSkp
CiAgICAgICAgICAgICByZXR1cm4gZnJhZ21lbnQ7CiAgICAgfQogCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRm
b3JtL1Bhc3RlYm9hcmQuY3BwCmluZGV4IDhjYmRhNmZhZTNkYjE0OGZiZDAyZTYwOGU5MGFiMjFh
NTViY2ZiMjAuLjQzYzY2N2EzN2ViMjU4NzJlYjI3MmZiZDc4MjZmNDI1ZDg0NTFiZDMgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuY3BwCkBAIC0zOSw3ICszOSw3IEBAIG5hbWVz
cGFjZSBXZWJDb3JlIHsKIFBhc3RlYm9hcmRJbWFnZTo6UGFzdGVib2FyZEltYWdlKCkgPSBkZWZh
dWx0OwogUGFzdGVib2FyZEltYWdlOjp+UGFzdGVib2FyZEltYWdlKCkgPSBkZWZhdWx0OwogCi1i
b29sIGlzU2FmZVR5cGVGb3JET01Ub1JlYWRBbmRXcml0ZShjb25zdCBTdHJpbmcmIHR5cGUpCiti
b29sIFBhc3RlYm9hcmQ6OmlzU2FmZVR5cGVGb3JET01Ub1JlYWRBbmRXcml0ZShjb25zdCBTdHJp
bmcmIHR5cGUpCiB7CiAgICAgcmV0dXJuIHR5cGUgPT0gInRleHQvcGxhaW4iIHx8IHR5cGUgPT0g
InRleHQvaHRtbCIgfHwgdHlwZSA9PSAidGV4dC91cmktbGlzdCI7CiB9CmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9QYXN0ZWJvYXJkLmggYi9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9QYXN0ZWJvYXJkLmgKaW5kZXggYWQ0MDIyZGM1YjY3NDMzNmI4ZWY3ZTgzOWU0OTcwNDEy
YWZmYjU3Mi4uODM5MzEyZDY3M2Q5NDMxYjI5NjdhYzgzZmEwNmRiYjcxNWI3MjUwNyAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vUGFzdGVib2FyZC5oCisrKyBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL1Bhc3RlYm9hcmQuaApAQCAtMjgsNiArMjgsNyBAQAogI2luY2x1ZGUg
IkRyYWdJbWFnZS5oIgogI2luY2x1ZGUgIlVSTC5oIgogI2luY2x1ZGUgPHd0Zi9IYXNoTWFwLmg+
CisjaW5jbHVkZSA8d3RmL0xpc3RIYXNoU2V0Lmg+CiAjaW5jbHVkZSA8d3RmL05vbmNvcHlhYmxl
Lmg+CiAjaW5jbHVkZSA8d3RmL1ZlY3Rvci5oPgogI2luY2x1ZGUgPHd0Zi90ZXh0L1dURlN0cmlu
Zy5oPgpAQCAtMTcxLDggKzE3Miw2IEBAIFdFQkNPUkVfRVhQT1JUIFBhc3RlYm9hcmRDdXN0b21E
YXRhIGN1c3RvbURhdGFGcm9tU2hhcmVkQnVmZmVyKGNvbnN0IFNoYXJlZEJ1ZmZlCiBjb25zdCBj
aGFyIGN1c3RvbVdlYktpdFBhc3RlYm9hcmREYXRhVHlwZVtdID0gImNvbS5hcHBsZS5XZWJLaXQu
Y3VzdG9tLXBhc3RlYm9hcmQtZGF0YSI7CiAjZW5kaWYKIAotYm9vbCBpc1NhZmVUeXBlRm9yRE9N
VG9SZWFkQW5kV3JpdGUoY29uc3QgU3RyaW5nJiB0eXBlKTsKLQogY2xhc3MgUGFzdGVib2FyZCB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoUGFzdGVib2FyZCk7IFdURl9NQUtFX0ZBU1RfQUxM
T0NBVEVEOwogcHVibGljOgpAQCAtMTkyLDEyICsxOTEsMTYgQEAgcHVibGljOgogCiAgICAgV0VC
Q09SRV9FWFBPUlQgc3RhdGljIHN0ZDo6dW5pcXVlX3B0cjxQYXN0ZWJvYXJkPiBjcmVhdGVGb3JD
b3B5QW5kUGFzdGUoKTsKIAorICAgIHN0YXRpYyBib29sIGlzU2FmZVR5cGVGb3JET01Ub1JlYWRB
bmRXcml0ZShjb25zdCBTdHJpbmcmKTsKKwogICAgIHZpcnR1YWwgYm9vbCBpc1N0YXRpYygpIGNv
bnN0IHsgcmV0dXJuIGZhbHNlOyB9CiAKICAgICB2aXJ0dWFsIGJvb2wgaGFzRGF0YSgpOwotICAg
IHZpcnR1YWwgVmVjdG9yPFN0cmluZz4gdHlwZXNGb3JCaW5kaW5ncygpOworICAgIHZpcnR1YWwg
VmVjdG9yPFN0cmluZz4gdHlwZXNTYWZlRm9yQmluZGluZ3MoKTsKKyAgICB2aXJ0dWFsIFZlY3Rv
cjxTdHJpbmc+IHR5cGVzRm9yTGVnYWN5VW5zYWZlQmluZGluZ3MoKTsKICAgICB2aXJ0dWFsIFZl
Y3RvcjxTdHJpbmc+IHR5cGVzVHJlYXRlZEFzRmlsZXMoKTsKLSAgICB2aXJ0dWFsIFN0cmluZyBy
ZWFkU3RyaW5nRm9yQmluZGluZ3MoY29uc3QgU3RyaW5nJiB0eXBlKTsKKyAgICB2aXJ0dWFsIFN0
cmluZyByZWFkU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSk7CisgICAgdmlydHVhbCBTdHJpbmcg
cmVhZFN0cmluZ0luQ3VzdG9tRGF0YShjb25zdCBTdHJpbmcmIHR5cGUpOwogCiAgICAgdmlydHVh
bCB2b2lkIHdyaXRlU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSwgY29uc3QgU3RyaW5nJiBkYXRh
KTsKICAgICB2aXJ0dWFsIHZvaWQgY2xlYXIoKTsKQEAgLTI3OCw2ICsyODEsOCBAQCBwcml2YXRl
OgogI2VuZGlmCiAKICNpZiBQTEFURk9STShDT0NPQSkKKyAgICBTdHJpbmcgcmVhZFBsYXRmb3Jt
VmFsdWVBc1N0cmluZyhjb25zdCBTdHJpbmcmIGRvbVR5cGUsIGxvbmcgY2hhbmdlQ291bnQsIGNv
bnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpOworICAgIHN0YXRpYyB2b2lkIGFkZEhUTUxDbGlw
Ym9hcmRUeXBlc0ZvckNvY29hVHlwZShMaXN0SGFzaFNldDxTdHJpbmc+JiByZXN1bHRUeXBlcywg
Y29uc3QgU3RyaW5nJiBjb2NvYVR5cGUsIGNvbnN0IFN0cmluZyYgcGFzdGVib2FyZE5hbWUpOwog
ICAgIFN0cmluZyByZWFkU3RyaW5nRm9yUGxhdGZvcm1UeXBlKGNvbnN0IFN0cmluZyYpOwogI2Vu
ZGlmCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N0YXRpY1Bhc3RlYm9h
cmQuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3RhdGljUGFzdGVib2FyZC5jcHAKaW5k
ZXggNzExZmE2MzIyN2JlY2Q3M2NlYmE0MDBmYjQzMTQzMTQ1MzU1YmI4Mi4uZThmN2VmNTU3Mzky
ZTkxNDNjZThkNjM3ZjQ2ZWNiZTEyYTdlZjg3YiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vU3RhdGljUGFzdGVib2FyZC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vU3RhdGljUGFzdGVib2FyZC5jcHAKQEAgLTQwLDIwICs0MCwxOSBAQCBib29sIFN0YXRpY1Bh
c3RlYm9hcmQ6Omhhc0RhdGEoKQogICAgIHJldHVybiAhbV9wbGF0Zm9ybURhdGEuaXNFbXB0eSgp
IHx8ICFtX2N1c3RvbURhdGEuaXNFbXB0eSgpOwogfQogCi1TdHJpbmcgU3RhdGljUGFzdGVib2Fy
ZDo6cmVhZFN0cmluZ0ZvckJpbmRpbmdzKGNvbnN0IFN0cmluZyYgdHlwZSkKK1N0cmluZyBTdGF0
aWNQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nKGNvbnN0IFN0cmluZyYgdHlwZSkKIHsKLSAgICBpZiAo
bV9wbGF0Zm9ybURhdGEuY29udGFpbnModHlwZSkpCi0gICAgICAgIHJldHVybiBtX3BsYXRmb3Jt
RGF0YS5nZXQodHlwZSk7Ci0KLSAgICBpZiAobV9jdXN0b21EYXRhLmNvbnRhaW5zKHR5cGUpKQot
ICAgICAgICByZXR1cm4gbV9jdXN0b21EYXRhLmdldCh0eXBlKTsKKyAgICByZXR1cm4gbV9wbGF0
Zm9ybURhdGEuZ2V0KHR5cGUpOworfQogCi0gICAgcmV0dXJuIHsgfTsKK1N0cmluZyBTdGF0aWNQ
YXN0ZWJvYXJkOjpyZWFkU3RyaW5nSW5DdXN0b21EYXRhKGNvbnN0IFN0cmluZyYgdHlwZSkKK3sK
KyAgICByZXR1cm4gbV9jdXN0b21EYXRhLmdldCh0eXBlKTsKIH0KIAogdm9pZCBTdGF0aWNQYXN0
ZWJvYXJkOjp3cml0ZVN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgdmFs
dWUpCiB7Ci0gICAgYXV0byYgcGFzdGVib2FyZERhdGEgPSBpc1NhZmVUeXBlRm9yRE9NVG9SZWFk
QW5kV3JpdGUodHlwZSkgPyBtX3BsYXRmb3JtRGF0YSA6IG1fY3VzdG9tRGF0YTsKKyAgICBhdXRv
JiBwYXN0ZWJvYXJkRGF0YSA9IFBhc3RlYm9hcmQ6OmlzU2FmZVR5cGVGb3JET01Ub1JlYWRBbmRX
cml0ZSh0eXBlKSA/IG1fcGxhdGZvcm1EYXRhIDogbV9jdXN0b21EYXRhOwogICAgIGlmIChwYXN0
ZWJvYXJkRGF0YS5zZXQodHlwZSwgdmFsdWUpLmlzTmV3RW50cnkpCiAgICAgICAgIG1fdHlwZXMu
YXBwZW5kKHR5cGUpOwogICAgIGVsc2UgewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vU3RhdGljUGFzdGVib2FyZC5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vU3RhdGlj
UGFzdGVib2FyZC5oCmluZGV4IGJjYjZmN2E0MDZhYmY4MWNiNDVkMDA1M2FjYTc1NTlhYjFkYjk0
ZDAuLjI4NTBiMzJjZjczZGQzMzAwMDNjYzI0YjAyNWUwZWMwM2Q0NzU3NjMgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL1N0YXRpY1Bhc3RlYm9hcmQuaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9TdGF0aWNQYXN0ZWJvYXJkLmgKQEAgLTQxLDkgKzQxLDExIEBAIHB1
YmxpYzoKICAgICBib29sIGlzU3RhdGljKCkgY29uc3QgZmluYWwgeyByZXR1cm4gdHJ1ZTsgfQog
CiAgICAgYm9vbCBoYXNEYXRhKCkgZmluYWw7Ci0gICAgVmVjdG9yPFN0cmluZz4gdHlwZXNGb3JC
aW5kaW5ncygpIGZpbmFsIHsgcmV0dXJuIG1fdHlwZXM7IH0KKyAgICBWZWN0b3I8U3RyaW5nPiB0
eXBlc1NhZmVGb3JCaW5kaW5ncygpIGZpbmFsIHsgcmV0dXJuIG1fdHlwZXM7IH0KKyAgICBWZWN0
b3I8U3RyaW5nPiB0eXBlc0ZvckxlZ2FjeVVuc2FmZUJpbmRpbmdzKCkgZmluYWwgeyByZXR1cm4g
bV90eXBlczsgfQogICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzVHJlYXRlZEFzRmlsZXMoKSBmaW5h
bCB7IHJldHVybiB7IH07IH0KLSAgICBTdHJpbmcgcmVhZFN0cmluZ0ZvckJpbmRpbmdzKGNvbnN0
IFN0cmluZyYgdHlwZSkgZmluYWw7CisgICAgU3RyaW5nIHJlYWRTdHJpbmcoY29uc3QgU3RyaW5n
JiB0eXBlKSBmaW5hbDsKKyAgICBTdHJpbmcgcmVhZFN0cmluZ0luQ3VzdG9tRGF0YShjb25zdCBT
dHJpbmcmIHR5cGUpIGZpbmFsOwogCiAgICAgdm9pZCB3cml0ZVN0cmluZyhjb25zdCBTdHJpbmcm
IHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkgZmluYWw7CiAgICAgdm9pZCBjbGVhcigpIGZpbmFs
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGFzdGVib2FyZENv
Y29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vY29jb2EvUGFzdGVib2FyZENvY29hLm1t
CmluZGV4IGU3NTA5ZmUxNWFkZTY3ZThmYjFiZGVkNDg1NTljNGFmOTdiMzY2NzAuLjlkNGI5M2Zi
Y2FlNjIzOGQwM2EyYmRmMTNmMzUxYjIwYjY2ODY4MGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2NvY29hL1Bhc3RlYm9hcmRDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9jb2NvYS9QYXN0ZWJvYXJkQ29jb2EubW0KQEAgLTE1MSw2ICsxNTEsMzYgQEAg
VmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6dHlwZXNUcmVhdGVkQXNGaWxlcygpCiAgICAgcmV0
dXJuIHR5cGVzOwogfQogCitWZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBlc1NhZmVGb3JC
aW5kaW5ncygpCit7CisgICAgVmVjdG9yPFN0cmluZz4gdHlwZXMgPSBwbGF0Zm9ybVN0cmF0ZWdp
ZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPnR5cGVzU2FmZUZvckRPTVRvUmVhZEFuZFdyaXRl
KG1fcGFzdGVib2FyZE5hbWUpOworCisgICAgLy8gRW5mb3JjZSBjaGFuZ2VDb3VudCBvdXJzZWx2
ZXMgZm9yIHNlY3VyaXR5LiBXZSBjaGVjayBhZnRlciByZWFkaW5nIGluc3RlYWQgb2YgYmVmb3Jl
IHRvIGJlCisgICAgLy8gc3VyZSBpdCBkb2Vzbid0IGNoYW5nZSBiZXR3ZWVuIG91ciB0ZXN0aW5n
IHRoZSBjaGFuZ2UgY291bnQgYW5kIGFjY2Vzc2luZyB0aGUgZGF0YS4KKyAgICBpZiAobV9jaGFu
Z2VDb3VudCAhPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmNo
YW5nZUNvdW50KG1fcGFzdGVib2FyZE5hbWUpKQorICAgICAgICByZXR1cm4geyB9OworCisgICAg
cmV0dXJuIHR5cGVzOworfQorCitWZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBlc0Zvckxl
Z2FjeVVuc2FmZUJpbmRpbmdzKCkKK3sKKyAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKKyAgICBw
bGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmdldFR5cGVzKHR5cGVz
LCBtX3Bhc3RlYm9hcmROYW1lKTsKKworICAgIC8vIEVuZm9yY2UgY2hhbmdlQ291bnQgb3Vyc2Vs
dmVzIGZvciBzZWN1cml0eS4gV2UgY2hlY2sgYWZ0ZXIgcmVhZGluZyBpbnN0ZWFkIG9mIGJlZm9y
ZSB0byBiZQorICAgIC8vIHN1cmUgaXQgZG9lc24ndCBjaGFuZ2UgYmV0d2VlbiBvdXIgdGVzdGlu
ZyB0aGUgY2hhbmdlIGNvdW50IGFuZCBhY2Nlc3NpbmcgdGhlIGRhdGEuCisgICAgaWYgKG1fY2hh
bmdlQ291bnQgIT0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5j
aGFuZ2VDb3VudChtX3Bhc3RlYm9hcmROYW1lKSkKKyAgICAgICAgcmV0dXJuIHsgfTsKKworICAg
IExpc3RIYXNoU2V0PFN0cmluZz4gcmVzdWx0OworICAgIGZvciAoYXV0byYgY29jb2FUeXBlIDog
dHlwZXMpCisgICAgICAgIGFkZEhUTUxDbGlwYm9hcmRUeXBlc0ZvckNvY29hVHlwZShyZXN1bHQs
IGNvY29hVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSk7CisKKyAgICBjb3B5VG9WZWN0b3IocmVzdWx0
LCB0eXBlcyk7CisgICAgcmV0dXJuIHR5cGVzOworfQorCiB2b2lkIFBhc3RlYm9hcmQ6OnJlYWQo
UGFzdGVib2FyZEZpbGVSZWFkZXImIHJlYWRlcikKIHsKICAgICBhdXRvIGltYWdlVHlwZSA9IG1p
bWVUeXBlVG9JbWFnZVR5cGUocmVhZGVyLnR5cGUpOwpAQCAtMTk0LDUgKzIyNCwzMiBAQCB2b2lk
IFBhc3RlYm9hcmQ6OnJlYWQoUGFzdGVib2FyZEZpbGVSZWFkZXImIHJlYWRlcikKICAgICByZWFk
ZXIucmVhZChpbWFnZVR5cGVUb0Zha2VGaWxlbmFtZShpbWFnZVR5cGUpLCBidWZmZXIucmVsZWFz
ZU5vbk51bGwoKSk7CiB9CiAKK1N0cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nKGNvbnN0IFN0
cmluZyYgdHlwZSkKK3sKKyAgICByZXR1cm4gcmVhZFBsYXRmb3JtVmFsdWVBc1N0cmluZyh0eXBl
LCBtX2NoYW5nZUNvdW50LCBtX3Bhc3RlYm9hcmROYW1lKTsKK30KKworU3RyaW5nIFBhc3RlYm9h
cmQ6OnJlYWRTdHJpbmdJbkN1c3RvbURhdGEoY29uc3QgU3RyaW5nJiB0eXBlKQoreworICAgIGF1
dG8gYnVmZmVyID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5i
dWZmZXJGb3JUeXBlKGN1c3RvbVdlYktpdFBhc3RlYm9hcmREYXRhVHlwZSwgbV9wYXN0ZWJvYXJk
TmFtZSk7CisgICAgaWYgKCFidWZmZXIpCisgICAgICAgIHJldHVybiB7IH07CisKKyAgICBOU1N0
cmluZyAqY3VzdG9tRGF0YVZhbHVlID0gY3VzdG9tRGF0YUZyb21TaGFyZWRCdWZmZXIoKmJ1ZmZl
cikuc2FtZU9yaWdpbkN1c3RvbURhdGEuZ2V0KHR5cGUpOworICAgIGlmICghY3VzdG9tRGF0YVZh
bHVlLmxlbmd0aCkKKyAgICAgICAgcmV0dXJuIHsgfTsKKyAgICByZXR1cm4gY3VzdG9tRGF0YVZh
bHVlOworfQorCit2b2lkIFBhc3RlYm9hcmQ6OndyaXRlQ3VzdG9tRGF0YShjb25zdCBQYXN0ZWJv
YXJkQ3VzdG9tRGF0YSYgZGF0YSkKK3sKKyAgICBtX2NoYW5nZUNvdW50ID0gcGxhdGZvcm1TdHJh
dGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT53cml0ZUN1c3RvbURhdGEoZGF0YSwgbV9w
YXN0ZWJvYXJkTmFtZSk7Cit9CisKK2xvbmcgUGFzdGVib2FyZDo6Y2hhbmdlQ291bnQoKSBjb25z
dAoreworICAgIHJldHVybiBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5
KCktPmNoYW5nZUNvdW50KG1fcGFzdGVib2FyZE5hbWUpOworfQorCiB9CiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcCBiL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2d0ay9QYXN0ZWJvYXJkR3RrLmNwcAppbmRleCA4NGE1N2RlODQ1Mzg0
NjY2MTZmMjhlNzgzYjQ1YWM4NWI5ZjM5MjRmLi5iZDU4MDBmYTE0MzZlOWE5Zjk0YTg5YWVkNzY1
YWZkZmY5ZGIyN2RhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ndGsvUGFz
dGVib2FyZEd0ay5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3RrL1Bhc3RlYm9h
cmRHdGsuY3BwCkBAIC0yNTIsNyArMjUyLDEzIEBAIGJvb2wgUGFzdGVib2FyZDo6aGFzRGF0YSgp
CiAgICAgcmV0dXJuIG1fc2VsZWN0aW9uRGF0YS0+aGFzVGV4dCgpIHx8IG1fc2VsZWN0aW9uRGF0
YS0+aGFzTWFya3VwKCkgfHwgbV9zZWxlY3Rpb25EYXRhLT5oYXNVUklMaXN0KCkgfHwgbV9zZWxl
Y3Rpb25EYXRhLT5oYXNJbWFnZSgpIHx8IG1fc2VsZWN0aW9uRGF0YS0+aGFzVW5rbm93blR5cGVE
YXRhKCk7CiB9CiAKLVZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnR5cGVzRm9yQmluZGluZ3Mo
KQorVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6dHlwZXNTYWZlRm9yQmluZGluZ3MoKQorewor
ICAgIG5vdEltcGxlbWVudGVkKCk7IC8vIHdlYmtpdC5vcmcvYi8xNzc2MzM6IFtHVEtdIE1vdmUg
dG8gbmV3IFBhc3RlYm9hcmQgQVBJCisgICAgcmV0dXJuIHsgfTsKK30KKworVmVjdG9yPFN0cmlu
Zz4gUGFzdGVib2FyZDo6dHlwZXNGb3JMZWdhY3lVbnNhZmVCaW5kaW5ncygpCiB7CiAgICAgcmVh
ZEZyb21DbGlwYm9hcmQoKTsKIApAQCAtMjg1LDcgKzI5MSw3IEBAIFZlY3RvcjxTdHJpbmc+IFBh
c3RlYm9hcmQ6OnR5cGVzVHJlYXRlZEFzRmlsZXMoKQogICAgIHJldHVybiB7IH07CiB9CiAKLVN0
cmluZyBQYXN0ZWJvYXJkOjpyZWFkU3RyaW5nRm9yQmluZGluZ3MoY29uc3QgU3RyaW5nJiB0eXBl
KQorU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlKQogewog
ICAgIHJlYWRGcm9tQ2xpcGJvYXJkKCk7CiAKQEAgLTMwNyw2ICszMTMsMTIgQEAgU3RyaW5nIFBh
c3RlYm9hcmQ6OnJlYWRTdHJpbmdGb3JCaW5kaW5ncyhjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAg
cmV0dXJuIFN0cmluZygpOwogfQogCitTdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZ0luQ3Vz
dG9tRGF0YShjb25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7IC8vIHdlYmtp
dC5vcmcvYi8xNzc2MzM6IFtHVEtdIE1vdmUgdG8gbmV3IFBhc3RlYm9hcmQgQVBJCisgICAgcmV0
dXJuIHsgfTsKK30KKwogVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6cmVhZEZpbGVuYW1lcygp
CiB7CiAgICAgcmVhZEZyb21DbGlwYm9hcmQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9QYXN0ZWJvYXJkSU9TLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
aW9zL1Bhc3RlYm9hcmRJT1MubW0KaW5kZXggM2UyODE1ZDYxZTU2NTEwOTEyMGYzYjZjYmM1MjIw
NzYxZDQwNDNjYi4uMTNlMWU2MTYxODc5NGU2NTIzYTcwOWNiODk3MWRjZGEyODE5MjY1NiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Bhc3RlYm9hcmRJT1MubW0KKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Bhc3RlYm9hcmRJT1MubW0KQEAgLTI1LDM1
ICsyNSwxOCBAQAogI2ltcG9ydCAiY29uZmlnLmgiCiAjaW1wb3J0ICJQYXN0ZWJvYXJkLmgiCiAK
LSNpbXBvcnQgIkNhY2hlZEltYWdlLmgiCi0jaW1wb3J0ICJEb2N1bWVudC5oIgotI2ltcG9ydCAi
RG9jdW1lbnRGcmFnbWVudC5oIgotI2ltcG9ydCAiRG9jdW1lbnRMb2FkZXIuaCIKICNpbXBvcnQg
IkRyYWdEYXRhLmgiCi0jaW1wb3J0ICJFZGl0aW5nLmgiCi0jaW1wb3J0ICJFZGl0b3IuaCIKLSNp
bXBvcnQgIkVkaXRvckNsaWVudC5oIgotI2ltcG9ydCAiRnJhbWUuaCIKLSNpbXBvcnQgIkZyYW1l
TG9hZGVyLmgiCi0jaW1wb3J0ICJGcmFtZUxvYWRlckNsaWVudC5oIgotI2ltcG9ydCAiSFRNTEVs
ZW1lbnQuaCIKLSNpbXBvcnQgIkhUTUxQYXJzZXJJZGlvbXMuaCIKICNpbXBvcnQgIkltYWdlLmgi
Ci0jaW1wb3J0ICJMZWdhY3lXZWJBcmNoaXZlLmgiCiAjaW1wb3J0ICJOb3RJbXBsZW1lbnRlZC5o
IgogI2ltcG9ydCAiUGFzdGVib2FyZFN0cmF0ZWd5LmgiCiAjaW1wb3J0ICJQbGF0Zm9ybVBhc3Rl
Ym9hcmQuaCIKICNpbXBvcnQgIlBsYXRmb3JtU3RyYXRlZ2llcy5oIgotI2ltcG9ydCAiUmVuZGVy
SW1hZ2UuaCIKLSNpbXBvcnQgIlJ1bnRpbWVBcHBsaWNhdGlvbkNoZWNrcy5oIgotI2ltcG9ydCAi
U2V0dGluZ3MuaCIKICNpbXBvcnQgIlNoYXJlZEJ1ZmZlci5oIgotI2ltcG9ydCAiVGV4dC5oIgog
I2ltcG9ydCAiVVJMLmgiCiAjaW1wb3J0ICJVVElVdGlsaXRpZXMuaCIKICNpbXBvcnQgIldlYk5T
QXR0cmlidXRlZFN0cmluZ0V4dHJhcy5oIgotI2ltcG9ydCAibWFya3VwLmgiCiAjaW1wb3J0IDxN
b2JpbGVDb3JlU2VydmljZXMvTW9iaWxlQ29yZVNlcnZpY2VzLmg+CisjaW1wb3J0IDx3dGYvdGV4
dC9TdHJpbmdIYXNoLmg+CiAKIEBpbnRlcmZhY2UgTlNBdHRyaWJ1dGVkU3RyaW5nIChOU0F0dHJp
YnV0ZWRTdHJpbmdLaXRBZGRpdGlvbnMpCiAtIChpZClpbml0V2l0aFJURjooTlNEYXRhICopZGF0
YSBkb2N1bWVudEF0dHJpYnV0ZXM6KE5TRGljdGlvbmFyeSAqKilkaWN0OwpAQCAtMTE3LDExICsx
MDAsNiBAQCBzdGQ6OnVuaXF1ZV9wdHI8UGFzdGVib2FyZD4gUGFzdGVib2FyZDo6Y3JlYXRlRm9y
Q29weUFuZFBhc3RlKCkKICAgICByZXR1cm4gc3RkOjptYWtlX3VuaXF1ZTxQYXN0ZWJvYXJkPihj
aGFuZ2VDb3VudEZvclBhc3RlYm9hcmQoKSk7CiB9CiAKLXZvaWQgUGFzdGVib2FyZDo6d3JpdGVD
dXN0b21EYXRhKGNvbnN0IFBhc3RlYm9hcmRDdXN0b21EYXRhJiBkYXRhKQotewotICAgIG1fY2hh
bmdlQ291bnQgPSBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPndy
aXRlQ3VzdG9tRGF0YShkYXRhLCBtX3Bhc3RlYm9hcmROYW1lKTsKLX0KLQogdm9pZCBQYXN0ZWJv
YXJkOjp3cml0ZShjb25zdCBQYXN0ZWJvYXJkV2ViQ29udGVudCYgY29udGVudCkKIHsKICAgICBw
bGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPndyaXRlVG9QYXN0ZWJv
YXJkKGNvbnRlbnQsIG1fcGFzdGVib2FyZE5hbWUpOwpAQCAtMjc5LDExICsyNTcsNiBAQCB2b2lk
IFBhc3RlYm9hcmQ6OnJlYWRSZXNwZWN0aW5nVVRJRmlkZWxpdGllcyhQYXN0ZWJvYXJkV2ViQ29u
dGVudFJlYWRlciYgcmVhZGVyKQogICAgIH0KIH0KIAotbG9uZyBQYXN0ZWJvYXJkOjpjaGFuZ2VD
b3VudCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJv
YXJkU3RyYXRlZ3koKS0+Y2hhbmdlQ291bnQobV9wYXN0ZWJvYXJkTmFtZSk7Ci19Ci0KIE5TQXJy
YXkgKlBhc3RlYm9hcmQ6OnN1cHBvcnRlZFdlYkNvbnRlbnRQYXN0ZWJvYXJkVHlwZXMoKQogewog
ICAgIHJldHVybiBAWyhpZClXZWJBcmNoaXZlUGJvYXJkVHlwZSwgKGlkKWtVVFR5cGVGbGF0UlRG
RCwgKGlkKWtVVFR5cGVSVEYsIChpZClrVVRUeXBlSFRNTCwgKGlkKWtVVFR5cGVQTkcsIChpZClr
VVRUeXBlVElGRiwgKGlkKWtVVFR5cGVKUEVHLCAoaWQpa1VUVHlwZUdJRiwgKGlkKWtVVFR5cGVV
UkwsIChpZClrVVRUeXBlVGV4dF07CkBAIC0zMzgsNyArMzExLDcgQEAgdm9pZCBQYXN0ZWJvYXJk
OjpjbGVhcigpCiAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgp
LT53cml0ZVRvUGFzdGVib2FyZChTdHJpbmcoKSwgU3RyaW5nKCksIG1fcGFzdGVib2FyZE5hbWUp
OwogfQogCi1zdGF0aWMgU3RyaW5nIHJlYWRQbGF0Zm9ybVZhbHVlQXNTdHJpbmcoY29uc3QgU3Ry
aW5nJiBkb21UeXBlLCBsb25nIGNoYW5nZUNvdW50LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmRO
YW1lKQorU3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRQbGF0Zm9ybVZhbHVlQXNTdHJpbmcoY29uc3Qg
U3RyaW5nJiBkb21UeXBlLCBsb25nIGNoYW5nZUNvdW50LCBjb25zdCBTdHJpbmcmIHBhc3RlYm9h
cmROYW1lKQogewogICAgIFBhc3RlYm9hcmRTdHJhdGVneSYgc3RyYXRlZ3kgPSAqcGxhdGZvcm1T
dHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpOwogCkBAIC0zNzIsMjEgKzM0NSw3IEBA
IHN0YXRpYyBTdHJpbmcgcmVhZFBsYXRmb3JtVmFsdWVBc1N0cmluZyhjb25zdCBTdHJpbmcmIGRv
bVR5cGUsIGxvbmcgY2hhbmdlQ291bnQsCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1TdHJp
bmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZ0ZvckJpbmRpbmdzKGNvbnN0IFN0cmluZyYgdHlwZSkK
LXsKLSAgICBpZiAoIVNldHRpbmdzOjpjdXN0b21QYXN0ZWJvYXJkRGF0YUVuYWJsZWQoKSB8fCBp
c1NhZmVUeXBlRm9yRE9NVG9SZWFkQW5kV3JpdGUodHlwZSkpCi0gICAgICAgIHJldHVybiByZWFk
UGxhdGZvcm1WYWx1ZUFzU3RyaW5nKHR5cGUsIG1fY2hhbmdlQ291bnQsIG1fcGFzdGVib2FyZE5h
bWUpOwotCi0gICAgaWYgKGF1dG8gYnVmZmVyID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3Rl
Ym9hcmRTdHJhdGVneSgpLT5idWZmZXJGb3JUeXBlKGN1c3RvbVdlYktpdFBhc3RlYm9hcmREYXRh
VHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSkpIHsKLSAgICAgICAgTlNTdHJpbmcgKmN1c3RvbURhdGFW
YWx1ZSA9IGN1c3RvbURhdGFGcm9tU2hhcmVkQnVmZmVyKCpidWZmZXIpLnNhbWVPcmlnaW5DdXN0
b21EYXRhLmdldCh0eXBlKTsKLSAgICAgICAgaWYgKGN1c3RvbURhdGFWYWx1ZS5sZW5ndGgpCi0g
ICAgICAgICAgICByZXR1cm4gY3VzdG9tRGF0YVZhbHVlOwotICAgIH0KLQotICAgIHJldHVybiB7
IH07Ci19Ci0KLXN0YXRpYyB2b2lkIGFkZEhUTUxDbGlwYm9hcmRUeXBlc0ZvckNvY29hVHlwZShM
aXN0SGFzaFNldDxTdHJpbmc+JiByZXN1bHRUeXBlcywgTlNTdHJpbmcgKmNvY29hVHlwZSkKK3Zv
aWQgUGFzdGVib2FyZDo6YWRkSFRNTENsaXBib2FyZFR5cGVzRm9yQ29jb2FUeXBlKExpc3RIYXNo
U2V0PFN0cmluZz4mIHJlc3VsdFR5cGVzLCBjb25zdCBTdHJpbmcmIGNvY29hVHlwZSwgY29uc3Qg
U3RyaW5nJikKIHsKICAgICAvLyBVVEkgbWF5IG5vdCBkbyB0aGVzZSByaWdodCwgc28gbWFrZSBz
dXJlIHdlIGdldCB0aGUgcmlnaHQsIHByZWRpY3RhYmxlIHJlc3VsdC4KICAgICBpZiAoW2NvY29h
VHlwZSBpc0VxdWFsVG9TdHJpbmc6KE5TU3RyaW5nICopa1VUVHlwZVBsYWluVGV4dF0KQEAgLTQy
MSwzMiArMzgwLDYgQEAgdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVN0cmluZyhjb25zdCBTdHJpbmcm
IHR5cGUsIGNvbnN0IFN0cmluZyYgZGF0YSkKICAgICBwbGF0Zm9ybVN0cmF0ZWdpZXMoKS0+cGFz
dGVib2FyZFN0cmF0ZWd5KCktPndyaXRlVG9QYXN0ZWJvYXJkKGNvY29hVHlwZS5nZXQoKSwgZGF0
YSwgbV9wYXN0ZWJvYXJkTmFtZSk7CiB9CiAKLVZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnR5
cGVzRm9yQmluZGluZ3MoKQotewotICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVzOwotICAgIGlmIChT
ZXR0aW5nczo6Y3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkKCkpCi0gICAgICAgIHR5cGVzID0g
cGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT50eXBlc1NhZmVGb3JE
T01Ub1JlYWRBbmRXcml0ZShtX3Bhc3RlYm9hcmROYW1lKTsKLSAgICBlbHNlCi0gICAgICAgIHBs
YXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+Z2V0VHlwZXModHlwZXMs
IG1fcGFzdGVib2FyZE5hbWUpOwotCi0gICAgLy8gRW5mb3JjZSBjaGFuZ2VDb3VudCBvdXJzZWx2
ZXMgZm9yIHNlY3VyaXR5LiBXZSBjaGVjayBhZnRlciByZWFkaW5nIGluc3RlYWQgb2YgYmVmb3Jl
IHRvIGJlCi0gICAgLy8gc3VyZSBpdCBkb2Vzbid0IGNoYW5nZSBiZXR3ZWVuIG91ciB0ZXN0aW5n
IHRoZSBjaGFuZ2UgY291bnQgYW5kIGFjY2Vzc2luZyB0aGUgZGF0YS4KLSAgICBhdXRvIGNoYW5n
ZUNvdW50ID0gY2hhbmdlQ291bnRGb3JQYXN0ZWJvYXJkKG1fcGFzdGVib2FyZE5hbWUpOwotICAg
IGlmIChtX2NoYW5nZUNvdW50ICE9IGNoYW5nZUNvdW50KQotICAgICAgICByZXR1cm4geyB9Owot
Ci0gICAgaWYgKFNldHRpbmdzOjpjdXN0b21QYXN0ZWJvYXJkRGF0YUVuYWJsZWQoKSkKLSAgICAg
ICAgcmV0dXJuIHR5cGVzOwotCi0gICAgTGlzdEhhc2hTZXQ8U3RyaW5nPiByZXN1bHQ7Ci0gICAg
Zm9yIChhdXRvIGNvY29hVHlwZSA6IHR5cGVzKQotICAgICAgICBhZGRIVE1MQ2xpcGJvYXJkVHlw
ZXNGb3JDb2NvYVR5cGUocmVzdWx0LCBjb2NvYVR5cGUpOwotCi0gICAgVmVjdG9yPFN0cmluZz4g
dmVjdG9yOwotICAgIGNvcHlUb1ZlY3RvcihyZXN1bHQsIHZlY3Rvcik7Ci0gICAgcmV0dXJuIHZl
Y3RvcjsKLX0KLQogVmVjdG9yPFN0cmluZz4gUGFzdGVib2FyZDo6cmVhZEZpbGVuYW1lcygpCiB7
CiAgICAgVmVjdG9yPFN0cmluZz4gZmlsZW5hbWVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vaW9zL1BsYXRmb3JtUGFzdGVib2FyZElPUy5tbSBiL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2lvcy9QbGF0Zm9ybVBhc3RlYm9hcmRJT1MubW0KaW5kZXggNjJhNDBjNGQ5NWE3
YjVmOWI4MDEzYTY1NDNmMWJlNTIzMzE5MzdjYy4uMmI4YTQ3NzI5YzhhYWVjYWRhZGM2OWNiN2Ez
MTVkNzM1ZTY3MGY3NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vaW9zL1Bs
YXRmb3JtUGFzdGVib2FyZElPUy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9pb3Mv
UGxhdGZvcm1QYXN0ZWJvYXJkSU9TLm1tCkBAIC0zNzUsNyArMzc1LDcgQEAgVmVjdG9yPFN0cmlu
Zz4gUGxhdGZvcm1QYXN0ZWJvYXJkOjp0eXBlc1NhZmVGb3JET01Ub1JlYWRBbmRXcml0ZSgpIGNv
bnN0CiAgICAgICAgIGlmIChbdHlwZSBpc0VxdWFsVG9TdHJpbmc6QChjdXN0b21XZWJLaXRQYXN0
ZWJvYXJkRGF0YVR5cGUpXSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogCi0gICAgICAgIGlmIChp
c1NhZmVUeXBlRm9yRE9NVG9SZWFkQW5kV3JpdGUodHlwZSkpIHsKKyAgICAgICAgaWYgKFBhc3Rl
Ym9hcmQ6OmlzU2FmZVR5cGVGb3JET01Ub1JlYWRBbmRXcml0ZSh0eXBlKSkgewogICAgICAgICAg
ICAgZG9tUGFzdGVib2FyZFR5cGVzLmFkZCh0eXBlKTsKICAgICAgICAgICAgIGNvbnRpbnVlOwog
ICAgICAgICB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGFzdGVi
b2FyZE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1t
CmluZGV4IDE3MzFkNmEwOWQ4ODc1NDZjMjJkYTg3NzdjZDkwY2MyZDY4YmQ2NTkuLjJmMGM1YmY5
ZWJkZDg4M2I0ZWJlNzI3MGI3OGM2ZTQwZmE3MjY5M2UgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL21hYy9QYXN0ZWJvYXJkTWFjLm1tCkBAIC0yNiwzNCArMjYsMTggQEAKICNpbXBvcnQg
ImNvbmZpZy5oIgogI2ltcG9ydCAiUGFzdGVib2FyZC5oIgogCi0jaW1wb3J0ICJDYWNoZWRJbWFn
ZS5oIgotI2ltcG9ydCAiRG9jdW1lbnQuaCIKLSNpbXBvcnQgIkRvY3VtZW50RnJhZ21lbnQuaCIK
LSNpbXBvcnQgIkRvY3VtZW50TG9hZGVyLmgiCiAjaW1wb3J0ICJEcmFnRGF0YS5oIgotI2ltcG9y
dCAiRWRpdGluZy5oIgotI2ltcG9ydCAiRWRpdG9yLmgiCi0jaW1wb3J0ICJFZGl0b3JDbGllbnQu
aCIKLSNpbXBvcnQgIkZyYW1lLmgiCi0jaW1wb3J0ICJGcmFtZUxvYWRlckNsaWVudC5oIgotI2lt
cG9ydCAiRnJhbWVWaWV3LmgiCi0jaW1wb3J0ICJIaXRUZXN0UmVzdWx0LmgiCiAjaW1wb3J0ICJJ
bWFnZS5oIgotI2ltcG9ydCAiTGVnYWN5V2ViQXJjaGl2ZS5oIgogI2ltcG9ydCAiTG9hZGVyTlNV
UkxFeHRyYXMuaCIKICNpbXBvcnQgIk1JTUVUeXBlUmVnaXN0cnkuaCIKICNpbXBvcnQgIlBhc3Rl
Ym9hcmRTdHJhdGVneS5oIgogI2ltcG9ydCAiUGxhdGZvcm1QYXN0ZWJvYXJkLmgiCiAjaW1wb3J0
ICJQbGF0Zm9ybVN0cmF0ZWdpZXMuaCIKLSNpbXBvcnQgIlJlbmRlckltYWdlLmgiCi0jaW1wb3J0
ICJTZXR0aW5ncy5oIgotI2ltcG9ydCAiVGV4dC5oIgorI2ltcG9ydCAiU2hhcmVkQnVmZmVyLmgi
CiAjaW1wb3J0ICJVUkwuaCIKICNpbXBvcnQgIlVUSVV0aWxpdGllcy5oIgogI2ltcG9ydCAiV2Vi
Q29yZU5TU3RyaW5nRXh0cmFzLmgiCi0jaW1wb3J0ICJXZWJDb3JlU3lzdGVtSW50ZXJmYWNlLmgi
CiAjaW1wb3J0ICJXZWJOU0F0dHJpYnV0ZWRTdHJpbmdFeHRyYXMuaCIKLSNpbXBvcnQgIm1hcmt1
cC5oIgogI2ltcG9ydCA8cGFsL3NwaS9jZy9Db3JlR3JhcGhpY3NTUEkuaD4KICNpbXBvcnQgPHBh
bC9zcGkvbWFjL0hJU2VydmljZXNTUEkuaD4KICNpbXBvcnQgPHd0Zi9SZXRhaW5QdHIuaD4KQEAg
LTkxLDExICs3NSw2IEBAIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiB3cml0YWJsZVR5cGVzRm9ySW1h
Z2UoKQogICAgIHJldHVybiB0eXBlczsKIH0KIAotbG9uZyBQYXN0ZWJvYXJkOjpjaGFuZ2VDb3Vu
dCgpIGNvbnN0Ci17Ci0gICAgcmV0dXJuIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJk
U3RyYXRlZ3koKS0+Y2hhbmdlQ291bnQobV9wYXN0ZWJvYXJkTmFtZSk7Ci19Ci0KIE5TQXJyYXkg
KlBhc3RlYm9hcmQ6OnN1cHBvcnRlZEZpbGVVcGxvYWRQYXN0ZWJvYXJkVHlwZXMoKQogewogICAg
IHJldHVybiBAWyAoTlNTdHJpbmcgKilOU0ZpbGVzUHJvbWlzZVBib2FyZFR5cGUsIChOU1N0cmlu
ZyAqKU5TRmlsZW5hbWVzUGJvYXJkVHlwZSBdOwpAQCAtMTc5LDExICsxNTgsNiBAQCB2b2lkIFBh
c3RlYm9hcmQ6OndyaXRlKGNvbnN0IFBhc3RlYm9hcmRXZWJDb250ZW50JiBjb250ZW50KQogICAg
ICAgICBtX2NoYW5nZUNvdW50ID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJh
dGVneSgpLT5zZXRTdHJpbmdGb3JUeXBlKGNvbnRlbnQuZGF0YUluU3RyaW5nRm9ybWF0LCBOU1N0
cmluZ1Bib2FyZFR5cGUsIG1fcGFzdGVib2FyZE5hbWUpOwogfQogCi12b2lkIFBhc3RlYm9hcmQ6
OndyaXRlQ3VzdG9tRGF0YShjb25zdCBQYXN0ZWJvYXJkQ3VzdG9tRGF0YSYgZGF0YSkKLXsKLSAg
ICBtX2NoYW5nZUNvdW50ID0gcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVn
eSgpLT53cml0ZUN1c3RvbURhdGEoZGF0YSwgbV9wYXN0ZWJvYXJkTmFtZSk7Ci19Ci0KIHZvaWQg
UGFzdGVib2FyZDo6d3JpdGVQbGFpblRleHQoY29uc3QgU3RyaW5nJiB0ZXh0LCBTbWFydFJlcGxh
Y2VPcHRpb24gc21hcnRSZXBsYWNlT3B0aW9uKQogewogICAgIFZlY3RvcjxTdHJpbmc+IHR5cGVz
OwpAQCAtNDkzLDcgKzQ2Nyw3IEBAIHN0YXRpYyBWZWN0b3I8U3RyaW5nPiBhYnNvbHV0ZVVSTHNG
cm9tUGFzdGVib2FyZEZpbGVuYW1lcyhjb25zdCBTdHJpbmcmIHBhc3RlYm9hCiAgICAgcmV0dXJu
IHVybHM7CiB9CiAKLXN0YXRpYyBTdHJpbmcgcmVhZFBsYXRmb3JtVmFsdWVBc1N0cmluZyhjb25z
dCBTdHJpbmcmIGRvbVR5cGUsIGxvbmcgY2hhbmdlQ291bnQsIGNvbnN0IFN0cmluZyYgcGFzdGVi
b2FyZE5hbWUpCitTdHJpbmcgUGFzdGVib2FyZDo6cmVhZFBsYXRmb3JtVmFsdWVBc1N0cmluZyhj
b25zdCBTdHJpbmcmIGRvbVR5cGUsIGxvbmcgY2hhbmdlQ291bnQsIGNvbnN0IFN0cmluZyYgcGFz
dGVib2FyZE5hbWUpCiB7CiAgICAgY29uc3QgU3RyaW5nJiBjb2NvYVR5cGUgPSBjb2NvYVR5cGVG
cm9tSFRNTENsaXBib2FyZFR5cGUoZG9tVHlwZSk7CiAgICAgU3RyaW5nIGNvY29hVmFsdWU7CkBA
IC01MTEsMjAgKzQ4NSw2IEBAIHN0YXRpYyBTdHJpbmcgcmVhZFBsYXRmb3JtVmFsdWVBc1N0cmlu
Zyhjb25zdCBTdHJpbmcmIGRvbVR5cGUsIGxvbmcgY2hhbmdlQ291bnQsCiAgICAgcmV0dXJuIFN0
cmluZygpOwogfQogCi1TdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZ0ZvckJpbmRpbmdzKGNv
bnN0IFN0cmluZyYgdHlwZSkKLXsKLSAgICBpZiAoIVNldHRpbmdzOjpjdXN0b21QYXN0ZWJvYXJk
RGF0YUVuYWJsZWQoKSB8fCBpc1NhZmVUeXBlRm9yRE9NVG9SZWFkQW5kV3JpdGUodHlwZSkpCi0g
ICAgICAgIHJldHVybiByZWFkUGxhdGZvcm1WYWx1ZUFzU3RyaW5nKHR5cGUsIG1fY2hhbmdlQ291
bnQsIG1fcGFzdGVib2FyZE5hbWUpOwotCi0gICAgaWYgKGF1dG8gYnVmZmVyID0gcGxhdGZvcm1T
dHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5idWZmZXJGb3JUeXBlKGN1c3RvbVdl
YktpdFBhc3RlYm9hcmREYXRhVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSkpIHsKLSAgICAgICAgTlNT
dHJpbmcgKmN1c3RvbURhdGFWYWx1ZSA9IGN1c3RvbURhdGFGcm9tU2hhcmVkQnVmZmVyKCpidWZm
ZXIpLnNhbWVPcmlnaW5DdXN0b21EYXRhLmdldCh0eXBlKTsKLSAgICAgICAgaWYgKGN1c3RvbURh
dGFWYWx1ZS5sZW5ndGgpCi0gICAgICAgICAgICByZXR1cm4gY3VzdG9tRGF0YVZhbHVlOwotICAg
IH0KLQotICAgIHJldHVybiB7IH07Ci19Ci0KIHN0YXRpYyBTdHJpbmcgdXRpVHlwZUZyb21Db2Nv
YVR5cGUoY29uc3QgU3RyaW5nJiB0eXBlKQogewogICAgIGlmIChSZXRhaW5QdHI8Q0ZTdHJpbmdS
ZWY+IHV0aVR5cGUgPSBhZG9wdENGKFVUVHlwZUNyZWF0ZVByZWZlcnJlZElkZW50aWZpZXJGb3JU
YWcoa1VUVGFnQ2xhc3NOU1Bib2FyZFR5cGUsIHR5cGUuY3JlYXRlQ0ZTdHJpbmcoKS5nZXQoKSwg
MCkpKSB7CkBAIC01MzQsNyArNDk0LDcgQEAgc3RhdGljIFN0cmluZyB1dGlUeXBlRnJvbUNvY29h
VHlwZShjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAgcmV0dXJuIFN0cmluZygpOwogfQogCi1zdGF0
aWMgdm9pZCBhZGRIVE1MQ2xpcGJvYXJkVHlwZXNGb3JDb2NvYVR5cGUoTGlzdEhhc2hTZXQ8U3Ry
aW5nPiYgcmVzdWx0VHlwZXMsIGNvbnN0IFN0cmluZyYgY29jb2FUeXBlLCBjb25zdCBTdHJpbmcm
IHBhc3RlYm9hcmROYW1lKQordm9pZCBQYXN0ZWJvYXJkOjphZGRIVE1MQ2xpcGJvYXJkVHlwZXNG
b3JDb2NvYVR5cGUoTGlzdEhhc2hTZXQ8U3RyaW5nPiYgcmVzdWx0VHlwZXMsIGNvbnN0IFN0cmlu
ZyYgY29jb2FUeXBlLCBjb25zdCBTdHJpbmcmIHBhc3RlYm9hcmROYW1lKQogewogICAgIGlmIChj
b2NvYVR5cGUgPT0gIk5lWFQgcGxhaW4gYXNjaWkgcGFzdGVib2FyZCB0eXBlIikKICAgICAgICAg
cmV0dXJuOyAvLyBTa2lwIHRoaXMgYW5jaWVudCB0eXBlIHRoYXQgZ2V0cyBhdXRvLXN1cHBsaWVk
IGJ5IHNvbWUgc3lzdGVtIGNvbnZlcnNpb24uCkBAIC01OTgsMzAgKzU1OCw2IEBAIHZvaWQgUGFz
dGVib2FyZDo6d3JpdGVTdHJpbmcoY29uc3QgU3RyaW5nJiB0eXBlLCBjb25zdCBTdHJpbmcmIGRh
dGEpCiAgICAgfQogfQogCi1WZWN0b3I8U3RyaW5nPiBQYXN0ZWJvYXJkOjp0eXBlc0ZvckJpbmRp
bmdzKCkKLXsKLSAgICBWZWN0b3I8U3RyaW5nPiB0eXBlczsKLSAgICBpZiAoU2V0dGluZ3M6OmN1
c3RvbVBhc3RlYm9hcmREYXRhRW5hYmxlZCgpKQotICAgICAgICB0eXBlcyA9IHBsYXRmb3JtU3Ry
YXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+dHlwZXNTYWZlRm9yRE9NVG9SZWFkQW5k
V3JpdGUobV9wYXN0ZWJvYXJkTmFtZSk7Ci0gICAgZWxzZQotICAgICAgICBwbGF0Zm9ybVN0cmF0
ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPmdldFR5cGVzKHR5cGVzLCBtX3Bhc3RlYm9h
cmROYW1lKTsKLQotICAgIC8vIEVuZm9yY2UgY2hhbmdlQ291bnQgb3Vyc2VsdmVzIGZvciBzZWN1
cml0eS4gV2UgY2hlY2sgYWZ0ZXIgcmVhZGluZyBpbnN0ZWFkIG9mIGJlZm9yZSB0byBiZQotICAg
IC8vIHN1cmUgaXQgZG9lc24ndCBjaGFuZ2UgYmV0d2VlbiBvdXIgdGVzdGluZyB0aGUgY2hhbmdl
IGNvdW50IGFuZCBhY2Nlc3NpbmcgdGhlIGRhdGEuCi0gICAgaWYgKG1fY2hhbmdlQ291bnQgIT0g
cGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVneSgpLT5jaGFuZ2VDb3VudCht
X3Bhc3RlYm9hcmROYW1lKSkKLSAgICAgICAgcmV0dXJuIHsgfTsKLQotICAgIGlmIChTZXR0aW5n
czo6Y3VzdG9tUGFzdGVib2FyZERhdGFFbmFibGVkKCkpCi0gICAgICAgIHJldHVybiB0eXBlczsK
LQotICAgIExpc3RIYXNoU2V0PFN0cmluZz4gcmVzdWx0OwotICAgIGZvciAoYXV0byYgY29jb2FU
eXBlIDogdHlwZXMpCi0gICAgICAgIGFkZEhUTUxDbGlwYm9hcmRUeXBlc0ZvckNvY29hVHlwZShy
ZXN1bHQsIGNvY29hVHlwZSwgbV9wYXN0ZWJvYXJkTmFtZSk7Ci0KLSAgICBjb3B5VG9WZWN0b3Io
cmVzdWx0LCB0eXBlcyk7Ci0gICAgcmV0dXJuIHR5cGVzOwotfQotCiBWZWN0b3I8U3RyaW5nPiBQ
YXN0ZWJvYXJkOjpyZWFkRmlsZW5hbWVzKCkKIHsKICAgICAvLyBGSVhNRTogU2VlbXMgc2lsbHkg
dG8gY29udmVydCBwYXRocyB0byBVUkxzIGFuZCB0aGVuIGJhY2sgdG8gcGF0aHMuIERvZXMgdGhh
dCBkbyBhbnl0aGluZyBoZWxwZnVsPwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZv
cm0vbWFjL1BsYXRmb3JtUGFzdGVib2FyZE1hYy5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L21hYy9QbGF0Zm9ybVBhc3RlYm9hcmRNYWMubW0KaW5kZXggYjU5MGQ2NTU3ODk3N2I5NDM5N2U4
ZmMwYWMyNjExYzJmMzRlYTc4Yi4uZmQ1MDBhMzg0MWI1OWY1MGQzYTVmNGNkNzBlNGQ1ODlhYWVi
N2ZiNyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vbWFjL1BsYXRmb3JtUGFz
dGVib2FyZE1hYy5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9tYWMvUGxhdGZvcm1Q
YXN0ZWJvYXJkTWFjLm1tCkBAIC0yOCw3ICsyOCw2IEBACiAKICNpbXBvcnQgIkNvbG9yLmgiCiAj
aW1wb3J0ICJQYXN0ZWJvYXJkLmgiCi0jaW1wb3J0ICJTZXR0aW5ncy5oIgogI2ltcG9ydCAiVVJM
LmgiCiAjaW1wb3J0ICJTaGFyZWRCdWZmZXIuaCIKICNpbXBvcnQgPHd0Zi9IYXNoQ291bnRlZFNl
dC5oPgpAQCAtMTI1LDcgKzEyNCw3IEBAIFZlY3RvcjxTdHJpbmc+IFBsYXRmb3JtUGFzdGVib2Fy
ZDo6dHlwZXNTYWZlRm9yRE9NVG9SZWFkQW5kV3JpdGUoKSBjb25zdAogICAgICAgICBpZiAoW3R5
cGUgaXNFcXVhbFRvU3RyaW5nOkAoY3VzdG9tV2ViS2l0UGFzdGVib2FyZERhdGFUeXBlKV0pCiAg
ICAgICAgICAgICBjb250aW51ZTsKIAotICAgICAgICBpZiAoaXNTYWZlVHlwZUZvckRPTVRvUmVh
ZEFuZFdyaXRlKHR5cGUpKQorICAgICAgICBpZiAoUGFzdGVib2FyZDo6aXNTYWZlVHlwZUZvckRP
TVRvUmVhZEFuZFdyaXRlKHR5cGUpKQogICAgICAgICAgICAgZG9tUGFzdGVib2FyZFR5cGVzLmFk
ZCh0eXBlKTsKICAgICAgICAgZWxzZSBpZiAoYXV0byogZG9tVHlwZSA9IHNhZmVUeXBlRm9yRE9N
VG9SZWFkQW5kV3JpdGVGb3JQbGF0Zm9ybVR5cGUodHlwZSkpIHsKICAgICAgICAgICAgIGF1dG8g
Y29lcmNlZFR5cGUgPSBTdHJpbmc6OmZyb21VVEY4KGRvbVR5cGUpOwpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vd2luL1Bhc3RlYm9hcmRXaW4uY3BwCmluZGV4IDBlYzg3MDFmNDFmNjMwMDA5
MzE3NjE4MjQwZDIzNThjZDE1NTE4ODEuLjhhOGM5NDYyMjZjNTk3Y2E4YzA3Y2EzZWY0OGNiZTky
MmFlZGY1N2YgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dpbi9QYXN0ZWJv
YXJkV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS93aW4vUGFzdGVib2FyZFdp
bi5jcHAKQEAgLTI0Myw3ICsyNDMsMTMgQEAgc3RhdGljIHZvaWQgYWRkTWltZVR5cGVzRm9yRm9y
bWF0KExpc3RIYXNoU2V0PFN0cmluZz4mIHJlc3VsdHMsIGNvbnN0IEZPUk1BVEVUQyYKICAgICB9
CiB9CiAKLVZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnR5cGVzRm9yQmluZGluZ3MoKQorVmVj
dG9yPFN0cmluZz4gUGFzdGVib2FyZDo6dHlwZXNTYWZlRm9yQmluZGluZ3MoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworVmVjdG9yPFN0cmluZz4gUGFz
dGVib2FyZDo6dHlwZXNGb3JMZWdhY3lVbnNhZmVCaW5kaW5ncygpCiB7CiAgICAgTGlzdEhhc2hT
ZXQ8U3RyaW5nPiByZXN1bHRzOwogCkBAIC0yODIsNyArMjg4LDcgQEAgVmVjdG9yPFN0cmluZz4g
UGFzdGVib2FyZDo6dHlwZXNUcmVhdGVkQXNGaWxlcygpCiAgICAgcmV0dXJuIHsgfTsKIH0KIAot
U3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRTdHJpbmdGb3JCaW5kaW5ncyhjb25zdCBTdHJpbmcmIHR5
cGUpCitTdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUpCiB7
CiAgICAgaWYgKCFtX2RhdGFPYmplY3QgJiYgbV9kcmFnRGF0YU1hcC5pc0VtcHR5KCkpCiAgICAg
ICAgIHJldHVybiAiIjsKQEAgLTMwMiw2ICszMDgsMTIgQEAgU3RyaW5nIFBhc3RlYm9hcmQ6OnJl
YWRTdHJpbmdGb3JCaW5kaW5ncyhjb25zdCBTdHJpbmcmIHR5cGUpCiAgICAgcmV0dXJuICIiOwog
fQogCitTdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZ0luQ3VzdG9tRGF0YShjb25zdCBTdHJp
bmcmKQoreworICAgIG5vdEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwogVmVj
dG9yPFN0cmluZz4gUGFzdGVib2FyZDo6cmVhZEZpbGVuYW1lcygpCiB7CiAgICAgVmVjdG9yPFN0
cmluZz4gZmlsZU5hbWVzOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3Bl
L1Bhc3RlYm9hcmRXUEUuY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vd3BlL1Bhc3RlYm9h
cmRXUEUuY3BwCmluZGV4IDE3ODAxYzJkYWYxZWUwN2U3ZTJjNTg2MWU4ZjA3MDdiMjUwZmU2MGYu
LjVlMGFlZjllM2Q1MTYwNWI3MjYxYjVlOTdlMmNhMDczOWI0YzQyMTIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL3dwZS9QYXN0ZWJvYXJkV1BFLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS93cGUvUGFzdGVib2FyZFdQRS5jcHAKQEAgLTQ5LDcgKzQ5LDEzIEBA
IGJvb2wgUGFzdGVib2FyZDo6aGFzRGF0YSgpCiAgICAgcmV0dXJuICF0eXBlcy5pc0VtcHR5KCk7
CiB9CiAKLVZlY3RvcjxTdHJpbmc+IFBhc3RlYm9hcmQ6OnR5cGVzRm9yQmluZGluZ3MoKQorVmVj
dG9yPFN0cmluZz4gUGFzdGVib2FyZDo6dHlwZXNTYWZlRm9yQmluZGluZ3MoKQoreworICAgIG5v
dEltcGxlbWVudGVkKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKworVmVjdG9yPFN0cmluZz4gUGFz
dGVib2FyZDo6dHlwZXNGb3JMZWdhY3lVbnNhZmVCaW5kaW5ncygpCiB7CiAgICAgVmVjdG9yPFN0
cmluZz4gdHlwZXM7CiAgICAgcGxhdGZvcm1TdHJhdGVnaWVzKCktPnBhc3RlYm9hcmRTdHJhdGVn
eSgpLT5nZXRUeXBlcyh0eXBlcyk7CkBAIC02MSwxMSArNjcsMTcgQEAgVmVjdG9yPFN0cmluZz4g
UGFzdGVib2FyZDo6dHlwZXNUcmVhdGVkQXNGaWxlcygpCiAgICAgcmV0dXJuIHsgfTsKIH0KIAot
U3RyaW5nIFBhc3RlYm9hcmQ6OnJlYWRTdHJpbmdGb3JCaW5kaW5ncyhjb25zdCBTdHJpbmcmIHR5
cGUpCitTdHJpbmcgUGFzdGVib2FyZDo6cmVhZFN0cmluZyhjb25zdCBTdHJpbmcmIHR5cGUpCiB7
CiAgICAgcmV0dXJuIHBsYXRmb3JtU3RyYXRlZ2llcygpLT5wYXN0ZWJvYXJkU3RyYXRlZ3koKS0+
cmVhZFN0cmluZ0Zyb21QYXN0ZWJvYXJkKDAsIHR5cGUpOwogfQogCitTdHJpbmcgUGFzdGVib2Fy
ZDo6cmVhZFN0cmluZ0luQ3VzdG9tRGF0YShjb25zdCBTdHJpbmcmKQoreworICAgIG5vdEltcGxl
bWVudGVkKCk7CisgICAgcmV0dXJuIHsgfTsKK30KKwogdm9pZCBQYXN0ZWJvYXJkOjp3cml0ZVN0
cmluZyhjb25zdCBTdHJpbmcmIHR5cGUsIGNvbnN0IFN0cmluZyYgdGV4dCkKIHsKICAgICBwbGF0
Zm9ybVN0cmF0ZWdpZXMoKS0+cGFzdGVib2FyZFN0cmF0ZWd5KCktPndyaXRlVG9QYXN0ZWJvYXJk
KHR5cGUsIHRleHQpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>