<?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>108698</bug_id>
          
          <creation_ts>2013-02-01 14:45:23 -0800</creation_ts>
          <short_desc>Continue making XSSAuditor thread safe: Remove dependency on parser&apos;s sourceForToken and TextResourceDecoder</short_desc>
          <delta_ts>2013-02-05 09:57:30 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>New Bugs</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>106127</blocked>
    
    <blocked>107603</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Tony Gentilcore">tonyg</reporter>
          <assigned_to name="Tony Gentilcore">tonyg</assigned_to>
          <cc>abarth</cc>
    
    <cc>dbates</cc>
    
    <cc>ojan.autocc</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>823288</commentid>
    <comment_count>0</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2013-02-01 14:45:23 -0800</bug_when>
    <thetext>Continue making XSSAuditor thread safe: Remove dependency on parser&apos;s sourceForToken and TextResourceDecoder</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823291</commentid>
    <comment_count>1</comment_count>
      <attachid>186143</attachid>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2013-02-01 14:46:51 -0800</bug_when>
    <thetext>Created attachment 186143
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823309</commentid>
    <comment_count>2</comment_count>
      <attachid>186151</attachid>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2013-02-01 14:55:44 -0800</bug_when>
    <thetext>Created attachment 186151
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823584</commentid>
    <comment_count>3</comment_count>
      <attachid>186151</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-02 00:10:13 -0800</bug_when>
    <thetext>Comment on attachment 186151
Patch

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

&gt; Source/WebCore/html/parser/HTMLDocumentParser.h:-78
&gt; -    String sourceForToken(const HTMLToken&amp;);

Nice!

&gt; Source/WebCore/html/parser/XSSAuditor.cpp:275
&gt; -PassOwnPtr&lt;DidBlockScriptRequest&gt; XSSAuditor::filterToken(HTMLToken&amp; token)
&gt; +PassOwnPtr&lt;DidBlockScriptRequest&gt; XSSAuditor::filterToken(HTMLToken&amp; token, HTMLSourceTracker&amp; sourceTracker, const TextResourceDecoder* decoder)

Can we put these things in a struct so that we don&apos;t need to pass all 3x the parameters to all these functions?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823730</commentid>
    <comment_count>4</comment_count>
      <attachid>186240</attachid>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2013-02-02 16:31:32 -0800</bug_when>
    <thetext>Created attachment 186240
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823731</commentid>
    <comment_count>5</comment_count>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2013-02-02 16:33:37 -0800</bug_when>
    <thetext>
&gt; &gt; Source/WebCore/html/parser/XSSAuditor.cpp:275
&gt; &gt; -PassOwnPtr&lt;DidBlockScriptRequest&gt; XSSAuditor::filterToken(HTMLToken&amp; token)
&gt; &gt; +PassOwnPtr&lt;DidBlockScriptRequest&gt; XSSAuditor::filterToken(HTMLToken&amp; token, HTMLSourceTracker&amp; sourceTracker, const TextResourceDecoder* decoder)
&gt; 
&gt; Can we put these things in a struct so that we don&apos;t need to pass all 3x the parameters to all these functions?

Thank you, that struct is much cleaner! Especially since bug 108666 will add another member.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823736</commentid>
    <comment_count>6</comment_count>
      <attachid>186240</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2013-02-02 16:58:34 -0800</bug_when>
    <thetext>Comment on attachment 186240
Patch

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

&gt; Source/WebCore/ChangeLog:35
&gt; +        * html/parser/HTMLDocumentParser.cpp:
&gt; +        (WebCore::HTMLDocumentParser::pumpTokenizer):
&gt; +        * html/parser/HTMLDocumentParser.h:
&gt; +        * html/parser/XSSAuditor.cpp:
&gt; +        (WebCore::XSSAuditor::filterToken):
&gt; +        (WebCore::XSSAuditor::filterStartToken):
&gt; +        (WebCore::XSSAuditor::filterCharacterToken):
&gt; +        (WebCore::XSSAuditor::filterScriptToken):
&gt; +        (WebCore::XSSAuditor::filterObjectToken):
&gt; +        (WebCore::XSSAuditor::filterParamToken):
&gt; +        (WebCore::XSSAuditor::filterEmbedToken):
&gt; +        (WebCore::XSSAuditor::filterAppletToken):
&gt; +        (WebCore::XSSAuditor::filterIframeToken):
&gt; +        (WebCore::XSSAuditor::filterMetaToken):
&gt; +        (WebCore::XSSAuditor::filterBaseToken):
&gt; +        (WebCore::XSSAuditor::filterFormToken):
&gt; +        (WebCore::XSSAuditor::eraseDangerousAttributesIfInjected):
&gt; +        (WebCore::XSSAuditor::eraseAttributeIfInjected):
&gt; +        (WebCore::XSSAuditor::decodedSnippetForName):
&gt; +        (WebCore::XSSAuditor::decodedSnippetForAttribute):
&gt; +        (WebCore::XSSAuditor::decodedSnippetForJavaScript):
&gt; +        * html/parser/XSSAuditor.h:
&gt; +        (WebCore):
&gt; +        (WebCore::FilterTokenRequest::FilterTokenRequest):
&gt; +        (FilterTokenRequest):
&gt; +        (XSSAuditor):

It would be nice to have some more detailed explanation here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823743</commentid>
    <comment_count>7</comment_count>
      <attachid>186240</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-02 17:35:40 -0800</bug_when>
    <thetext>Comment on attachment 186240
Patch

Attachment 186240 did not pass win-ews (win):
Output: http://queues.webkit.org/results/16356126</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823746</commentid>
    <comment_count>8</comment_count>
      <attachid>186240</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-02 18:39:56 -0800</bug_when>
    <thetext>Comment on attachment 186240
Patch

Attachment 186240 did not pass win-ews (win):
Output: http://queues.webkit.org/results/16353165</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823867</commentid>
    <comment_count>9</comment_count>
      <attachid>186266</attachid>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2013-02-03 12:35:35 -0800</bug_when>
    <thetext>Created attachment 186266
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823868</commentid>
    <comment_count>10</comment_count>
      <attachid>186240</attachid>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2013-02-03 12:35:58 -0800</bug_when>
    <thetext>Comment on attachment 186240
Patch

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

&gt;&gt; Source/WebCore/ChangeLog:35
&gt;&gt; +        (XSSAuditor):
&gt; 
&gt; It would be nice to have some more detailed explanation here.

Good idea. I beefed up the ChangeLog a bit.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823871</commentid>
    <comment_count>11</comment_count>
      <attachid>186266</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-03 13:37:59 -0800</bug_when>
    <thetext>Comment on attachment 186266
Patch

Attachment 186266 did not pass win-ews (win):
Output: http://queues.webkit.org/results/16358673</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>823889</commentid>
    <comment_count>12</comment_count>
      <attachid>186266</attachid>
    <who name="Build Bot">buildbot</who>
    <bug_when>2013-02-03 14:39:45 -0800</bug_when>
    <thetext>Comment on attachment 186266
Patch

Attachment 186266 did not pass win-ews (win):
Output: http://queues.webkit.org/results/16352772</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>824494</commentid>
    <comment_count>13</comment_count>
      <attachid>186266</attachid>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2013-02-04 10:10:48 -0800</bug_when>
    <thetext>Comment on attachment 186266
Patch

The win-ews failure looks unrelated to this patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825114</commentid>
    <comment_count>14</comment_count>
      <attachid>186266</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2013-02-04 21:29:16 -0800</bug_when>
    <thetext>Comment on attachment 186266
Patch

Great!  Thanks.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825117</commentid>
    <comment_count>15</comment_count>
      <attachid>186266</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-04 21:33:33 -0800</bug_when>
    <thetext>Comment on attachment 186266
Patch

Rejecting attachment 186266 from commit-queue.

Failed to run &quot;[&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/webkit-patch&apos;, &apos;--status-host=queues.webkit.org&apos;, &apos;--bot-id=gce-cq-01&apos;, &apos;apply-attachment&apos;, &apos;--no-update&apos;, &apos;--non-interactive&apos;, 186266, &apos;--port=chromium-xvfb&apos;]&quot; exit_code: 2 cwd: /mnt/git/webkit-commit-queue

Last 500 characters of output:
e/WebCore/html/parser/XSSAuditor.cpp
Hunk #1 succeeded at 278 (offset 6 lines).
Hunk #2 FAILED at 338.
Hunk #3 succeeded at 573 (offset 9 lines).
Hunk #4 succeeded at 630 (offset 9 lines).
1 out of 4 hunks FAILED -- saving rejects to file Source/WebCore/html/parser/XSSAuditor.cpp.rej
patching file Source/WebCore/html/parser/XSSAuditor.h

Failed to run &quot;[u&apos;/mnt/git/webkit-commit-queue/Tools/Scripts/svn-apply&apos;, &apos;--force&apos;, &apos;--reviewer&apos;, &apos;Adam Barth&apos;]&quot; exit_code: 1 cwd: /mnt/git/webkit-commit-queue

Full output: http://queues.webkit.org/results/16375537</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825561</commentid>
    <comment_count>16</comment_count>
      <attachid>186647</attachid>
    <who name="Tony Gentilcore">tonyg</who>
    <bug_when>2013-02-05 09:40:13 -0800</bug_when>
    <thetext>Created attachment 186647
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825573</commentid>
    <comment_count>17</comment_count>
      <attachid>186647</attachid>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-05 09:57:26 -0800</bug_when>
    <thetext>Comment on attachment 186647
Patch for landing

Clearing flags on attachment: 186647

Committed r141897: &lt;http://trac.webkit.org/changeset/141897&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>825574</commentid>
    <comment_count>18</comment_count>
    <who name="WebKit Review Bot">webkit.review.bot</who>
    <bug_when>2013-02-05 09:57:30 -0800</bug_when>
    <thetext>All reviewed patches have been landed.  Closing bug.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186143</attachid>
            <date>2013-02-01 14:46:51 -0800</date>
            <delta_ts>2013-02-01 14:55:43 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108698-20130201144334.patch</filename>
            <type>text/plain</type>
            <size>23216</size>
            <attacher name="Tony Gentilcore">tonyg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxNjM5CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggN2JkZDM5NWFmYmZjYjFm
NTIwNDg1Mjg0ZjUyNmMzNDBiZDFlYWE1NS4uYmFiM2I0ODFiYmI3YzEyNzQ4ZWNjMWZjNjE1MTg0
NjE4ZDQyYzE3OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEzLTAyLTAxICBUb255
IEdlbnRpbGNvcmUgIDx0b255Z0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ29udGludWUgbWFr
aW5nIFhTU0F1ZGl0b3IgdGhyZWFkIHNhZmU6IFJlbW92ZSBkZXBlbmRlbmN5IG9uIHBhcnNlcidz
IHNvdXJjZUZvclRva2VuIGFuZCBUZXh0UmVzb3VyY2VEZWNvZGVyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDg2OTgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSBubyBu
ZXcgZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBh
cnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OnB1bXBUb2tl
bml6ZXIpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oOgorICAg
ICAgICAqIGh0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFNT
QXVkaXRvcjo6ZmlsdGVyVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6Zmls
dGVyU3RhcnRUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0ZXJDaGFy
YWN0ZXJUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0ZXJTY3JpcHRU
b2tlbik6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0ZXJPYmplY3RUb2tlbik6
CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0ZXJQYXJhbVRva2VuKToKKyAgICAg
ICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmZpbHRlckVtYmVkVG9rZW4pOgorICAgICAgICAoV2Vi
Q29yZTo6WFNTQXVkaXRvcjo6ZmlsdGVyQXBwbGV0VG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6
WFNTQXVkaXRvcjo6ZmlsdGVySWZyYW1lVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVk
aXRvcjo6ZmlsdGVyTWV0YVRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmZp
bHRlckJhc2VUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0ZXJGb3Jt
VG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6ZXJhc2VEYW5nZXJvdXNBdHRy
aWJ1dGVzSWZJbmplY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjplcmFzZUF0
dHJpYnV0ZUlmSW5qZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6ZGVjb2Rl
ZFNuaXBwZXRGb3JOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmRlY29kZWRT
bmlwcGV0Rm9yQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmRlY29k
ZWRTbmlwcGV0Rm9ySmF2YVNjcmlwdCk6CisgICAgICAgICogaHRtbC9wYXJzZXIvWFNTQXVkaXRv
ci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChYU1NBdWRpdG9yKToKKwogMjAxMy0w
Mi0wMSAgUGhpbGlwIFJvZ2VycyAgPHBkckBnb29nbGUuY29tPgogCiAgICAgICAgIENoYW5nZSBo
YXNBbHBoYSB0byBpc0tub3duVG9CZU9wYXF1ZSBhbmQgY29ycmVjdCB0aGUgcmV0dXJuIHZhbHVl
IGZvciBTVkcgaW1hZ2VzLgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTERvY3VtZW50UGFyc2VyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxE
b2N1bWVudFBhcnNlci5jcHAKaW5kZXggNzJmZWJlYmI4YTVhZDRmZmQ2MDZmOGUwYzc1ZjIyNzhj
ZDFhY2ViMC4uNmE1MzRjZmUzNzRhNGNhNGE2MGNhN2I2YzM4YjE5YmY3MjUzNTg2MCAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCkBA
IC0zNzgsNyArMzc4LDcgQEAgdm9pZCBIVE1MRG9jdW1lbnRQYXJzZXI6OnB1bXBUb2tlbml6ZXIo
U3luY2hyb25vdXNNb2RlIG1vZGUpCiAKICAgICAgICAgICAgIC8vIFdlIGRvIG5vdCBYU1MgZmls
dGVyIGlubmVySFRNTCwgd2hpY2ggbWVhbnMgd2UgKGludGVudGlvbmFsbHkpIGZhaWwKICAgICAg
ICAgICAgIC8vIGh0dHAvdGVzdHMvc2VjdXJpdHkveHNzQXVkaXRvci9kb20td3JpdGUtaW5uZXJI
VE1MLmh0bWwKLSAgICAgICAgICAgIE93blB0cjxEaWRCbG9ja1NjcmlwdFJlcXVlc3Q+IHJlcXVl
c3QgPSBtX3hzc0F1ZGl0b3IuZmlsdGVyVG9rZW4odG9rZW4oKSk7CisgICAgICAgICAgICBPd25Q
dHI8RGlkQmxvY2tTY3JpcHRSZXF1ZXN0PiByZXF1ZXN0ID0gbV94c3NBdWRpdG9yLmZpbHRlclRv
a2VuKHRva2VuKCksIG1fc291cmNlVHJhY2tlciwgZG9jdW1lbnQoKS0+ZGVjb2RlcigpKTsKICAg
ICAgICAgICAgIGlmIChyZXF1ZXN0KQogICAgICAgICAgICAgICAgIG1feHNzQXVkaXRvckRlbGVn
YXRlLmRpZEJsb2NrU2NyaXB0KHJlcXVlc3QucmVsZWFzZSgpKTsKICAgICAgICAgfQpAQCAtNjY1
LDExICs2NjUsNiBAQCBib29sIEhUTUxEb2N1bWVudFBhcnNlcjo6aXNFeGVjdXRpbmdTY3JpcHQo
KSBjb25zdAogICAgIHJldHVybiBtX3NjcmlwdFJ1bm5lci0+aXNFeGVjdXRpbmdTY3JpcHQoKTsK
IH0KIAotU3RyaW5nIEhUTUxEb2N1bWVudFBhcnNlcjo6c291cmNlRm9yVG9rZW4oY29uc3QgSFRN
TFRva2VuJiB0b2tlbikKLXsKLSAgICByZXR1cm4gbV9zb3VyY2VUcmFja2VyLnNvdXJjZUZvclRv
a2VuKHRva2VuKTsKLX0KLQogT3JkaW5hbE51bWJlciBIVE1MRG9jdW1lbnRQYXJzZXI6OmxpbmVO
dW1iZXIoKSBjb25zdAogewogI2lmIEVOQUJMRShUSFJFQURFRF9IVE1MX1BBUlNFUikKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmgKaW5kZXggZjcy
MGY0YzAxYTM5NzAwYmY1MDE2YTcyYjM2MmFjYTM3MjEzMWUyYS4uYWU4NjIzMzA3MDFiNDFlMGZk
M2QwNTgzOTZmZTY2NWYxYWJjYmFkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9w
YXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTERvY3VtZW50UGFyc2VyLmgKQEAgLTc1LDcgKzc1LDYgQEAgcHVibGljOgogICAgIHN0
YXRpYyB2b2lkIHBhcnNlRG9jdW1lbnRGcmFnbWVudChjb25zdCBTdHJpbmcmLCBEb2N1bWVudEZy
YWdtZW50KiwgRWxlbWVudCogY29udGV4dEVsZW1lbnQsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlz
c2lvbiA9IEFsbG93U2NyaXB0aW5nQ29udGVudCk7CiAKICAgICBIVE1MVG9rZW5pemVyKiB0b2tl
bml6ZXIoKSBjb25zdCB7IHJldHVybiBtX3Rva2VuaXplci5nZXQoKTsgfQotICAgIFN0cmluZyBz
b3VyY2VGb3JUb2tlbihjb25zdCBIVE1MVG9rZW4mKTsKIAogICAgIHZpcnR1YWwgVGV4dFBvc2l0
aW9uIHRleHRQb3NpdGlvbigpIGNvbnN0OwogICAgIHZpcnR1YWwgT3JkaW5hbE51bWJlciBsaW5l
TnVtYmVyKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9Y
U1NBdWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuY3Bw
CmluZGV4IDRiMmQ1ZTg0ZDAzMjI1ODIwYWI4NmQ5M2M1NjdiNzIxOTBmYThmYjAuLmRlZTMzMWZl
N2VkYTVjY2ZiZjM4ZmI3ZTQxNGUyOWVlMzI3ZGQ5MjggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL1hTU0F1ZGl0b3IuY3BwCkBAIC0yNzIsNyArMjcyLDcgQEAgdm9pZCBYU1NBdWRpdG9y
Ojppbml0KERvY3VtZW50KiBkb2N1bWVudCkKICAgICB9CiB9CiAKLVBhc3NPd25QdHI8RGlkQmxv
Y2tTY3JpcHRSZXF1ZXN0PiBYU1NBdWRpdG9yOjpmaWx0ZXJUb2tlbihIVE1MVG9rZW4mIHRva2Vu
KQorUGFzc093blB0cjxEaWRCbG9ja1NjcmlwdFJlcXVlc3Q+IFhTU0F1ZGl0b3I6OmZpbHRlclRv
a2VuKEhUTUxUb2tlbiYgdG9rZW4sIEhUTUxTb3VyY2VUcmFja2VyJiBzb3VyY2VUcmFja2VyLCBj
b25zdCBUZXh0UmVzb3VyY2VEZWNvZGVyKiBkZWNvZGVyKQogewogICAgIEFTU0VSVChtX3N0YXRl
ID09IEluaXRpYWxpemVkKTsKICAgICBpZiAoIW1faXNFbmFibGVkIHx8IG1feHNzUHJvdGVjdGlv
biA9PSBYU1NQcm90ZWN0aW9uRGlzYWJsZWQpCkBAIC0yODAsMTAgKzI4MCwxMCBAQCBQYXNzT3du
UHRyPERpZEJsb2NrU2NyaXB0UmVxdWVzdD4gWFNTQXVkaXRvcjo6ZmlsdGVyVG9rZW4oSFRNTFRv
a2VuJiB0b2tlbikKIAogICAgIGJvb2wgZGlkQmxvY2tTY3JpcHQgPSBmYWxzZTsKICAgICBpZiAo
dG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZykKLSAgICAgICAgZGlkQmxv
Y2tTY3JpcHQgPSBmaWx0ZXJTdGFydFRva2VuKHRva2VuKTsKKyAgICAgICAgZGlkQmxvY2tTY3Jp
cHQgPSBmaWx0ZXJTdGFydFRva2VuKHRva2VuLCBzb3VyY2VUcmFja2VyLCBkZWNvZGVyKTsKICAg
ICBlbHNlIGlmIChtX3NjcmlwdFRhZ05lc3RpbmdMZXZlbCkgewogICAgICAgICBpZiAodG9rZW4u
dHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpDaGFyYWN0ZXIpCi0gICAgICAgICAgICBkaWRCbG9j
a1NjcmlwdCA9IGZpbHRlckNoYXJhY3RlclRva2VuKHRva2VuKTsKKyAgICAgICAgICAgIGRpZEJs
b2NrU2NyaXB0ID0gZmlsdGVyQ2hhcmFjdGVyVG9rZW4odG9rZW4sIHNvdXJjZVRyYWNrZXIpOwog
ICAgICAgICBlbHNlIGlmICh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OkVuZFRhZykK
ICAgICAgICAgICAgIGZpbHRlckVuZFRva2VuKHRva2VuKTsKICAgICB9CkBAIC0zMDEsMzAgKzMw
MSwzMCBAQCBQYXNzT3duUHRyPERpZEJsb2NrU2NyaXB0UmVxdWVzdD4gWFNTQXVkaXRvcjo6Zmls
dGVyVG9rZW4oSFRNTFRva2VuJiB0b2tlbikKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotYm9v
bCBYU1NBdWRpdG9yOjpmaWx0ZXJTdGFydFRva2VuKEhUTUxUb2tlbiYgdG9rZW4pCitib29sIFhT
U0F1ZGl0b3I6OmZpbHRlclN0YXJ0VG9rZW4oSFRNTFRva2VuJiB0b2tlbiwgSFRNTFNvdXJjZVRy
YWNrZXImIHNvdXJjZVRyYWNrZXIsIGNvbnN0IFRleHRSZXNvdXJjZURlY29kZXIqIGRlY29kZXIp
CiB7Ci0gICAgYm9vbCBkaWRCbG9ja1NjcmlwdCA9IGVyYXNlRGFuZ2Vyb3VzQXR0cmlidXRlc0lm
SW5qZWN0ZWQodG9rZW4pOworICAgIGJvb2wgZGlkQmxvY2tTY3JpcHQgPSBlcmFzZURhbmdlcm91
c0F0dHJpYnV0ZXNJZkluamVjdGVkKHRva2VuLCBzb3VyY2VUcmFja2VyLCBkZWNvZGVyKTsKIAog
ICAgIGlmIChoYXNOYW1lKHRva2VuLCBzY3JpcHRUYWcpKSB7Ci0gICAgICAgIGRpZEJsb2NrU2Ny
aXB0IHw9IGZpbHRlclNjcmlwdFRva2VuKHRva2VuKTsKKyAgICAgICAgZGlkQmxvY2tTY3JpcHQg
fD0gZmlsdGVyU2NyaXB0VG9rZW4odG9rZW4sIHNvdXJjZVRyYWNrZXIsIGRlY29kZXIpOwogICAg
ICAgICBBU1NFUlQobV9zaG91bGRBbGxvd0NEQVRBIHx8ICFtX3NjcmlwdFRhZ05lc3RpbmdMZXZl
bCk7CiAgICAgICAgIG1fc2NyaXB0VGFnTmVzdGluZ0xldmVsKys7CiAgICAgfSBlbHNlIGlmICho
YXNOYW1lKHRva2VuLCBvYmplY3RUYWcpKQotICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBmaWx0
ZXJPYmplY3RUb2tlbih0b2tlbik7CisgICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGZpbHRlck9i
amVjdFRva2VuKHRva2VuLCBzb3VyY2VUcmFja2VyLCBkZWNvZGVyKTsKICAgICBlbHNlIGlmICho
YXNOYW1lKHRva2VuLCBwYXJhbVRhZykpCi0gICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGZpbHRl
clBhcmFtVG9rZW4odG9rZW4pOworICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBmaWx0ZXJQYXJh
bVRva2VuKHRva2VuLCBzb3VyY2VUcmFja2VyLCBkZWNvZGVyKTsKICAgICBlbHNlIGlmIChoYXNO
YW1lKHRva2VuLCBlbWJlZFRhZykpCi0gICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGZpbHRlckVt
YmVkVG9rZW4odG9rZW4pOworICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBmaWx0ZXJFbWJlZFRv
a2VuKHRva2VuLCBzb3VyY2VUcmFja2VyLCBkZWNvZGVyKTsKICAgICBlbHNlIGlmIChoYXNOYW1l
KHRva2VuLCBhcHBsZXRUYWcpKQotICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBmaWx0ZXJBcHBs
ZXRUb2tlbih0b2tlbik7CisgICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGZpbHRlckFwcGxldFRv
a2VuKHRva2VuLCBzb3VyY2VUcmFja2VyLCBkZWNvZGVyKTsKICAgICBlbHNlIGlmIChoYXNOYW1l
KHRva2VuLCBpZnJhbWVUYWcpKQotICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBmaWx0ZXJJZnJh
bWVUb2tlbih0b2tlbik7CisgICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGZpbHRlcklmcmFtZVRv
a2VuKHRva2VuLCBzb3VyY2VUcmFja2VyLCBkZWNvZGVyKTsKICAgICBlbHNlIGlmIChoYXNOYW1l
KHRva2VuLCBtZXRhVGFnKSkKLSAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZmlsdGVyTWV0YVRv
a2VuKHRva2VuKTsKKyAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZmlsdGVyTWV0YVRva2VuKHRv
a2VuLCBzb3VyY2VUcmFja2VyLCBkZWNvZGVyKTsKICAgICBlbHNlIGlmIChoYXNOYW1lKHRva2Vu
LCBiYXNlVGFnKSkKLSAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZmlsdGVyQmFzZVRva2VuKHRv
a2VuKTsKKyAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZmlsdGVyQmFzZVRva2VuKHRva2VuLCBz
b3VyY2VUcmFja2VyLCBkZWNvZGVyKTsKICAgICBlbHNlIGlmIChoYXNOYW1lKHRva2VuLCBmb3Jt
VGFnKSkKLSAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZmlsdGVyRm9ybVRva2VuKHRva2VuKTsK
KyAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZmlsdGVyRm9ybVRva2VuKHRva2VuLCBzb3VyY2VU
cmFja2VyLCBkZWNvZGVyKTsKIAogICAgIHJldHVybiBkaWRCbG9ja1NjcmlwdDsKIH0KQEAgLTMz
OCwxMCArMzM4LDEwIEBAIHZvaWQgWFNTQXVkaXRvcjo6ZmlsdGVyRW5kVG9rZW4oSFRNTFRva2Vu
JiB0b2tlbikKICAgICB9CiB9CiAKLWJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyQ2hhcmFjdGVyVG9r
ZW4oSFRNTFRva2VuJiB0b2tlbikKK2Jvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyQ2hhcmFjdGVyVG9r
ZW4oSFRNTFRva2VuJiB0b2tlbiwgSFRNTFNvdXJjZVRyYWNrZXImIHNvdXJjZVRyYWNrZXIpCiB7
CiAgICAgQVNTRVJUKG1fc2NyaXB0VGFnTmVzdGluZ0xldmVsKTsKLSAgICBpZiAoaXNDb250YWlu
ZWRJblJlcXVlc3QobV9jYWNoZWREZWNvZGVkU25pcHBldCkgJiYgaXNDb250YWluZWRJblJlcXVl
c3QoZGVjb2RlZFNuaXBwZXRGb3JKYXZhU2NyaXB0KHRva2VuKSkpIHsKKyAgICBpZiAoaXNDb250
YWluZWRJblJlcXVlc3QobV9jYWNoZWREZWNvZGVkU25pcHBldCkgJiYgaXNDb250YWluZWRJblJl
cXVlc3QoZGVjb2RlZFNuaXBwZXRGb3JKYXZhU2NyaXB0KHRva2VuLCBzb3VyY2VUcmFja2VyKSkp
IHsKICAgICAgICAgdG9rZW4uZXJhc2VDaGFyYWN0ZXJzKCk7CiAgICAgICAgIHRva2VuLmFwcGVu
ZFRvQ2hhcmFjdGVyKCcgJyk7IC8vIFRlY2huaWNhbGx5LCBjaGFyYWN0ZXIgdG9rZW5zIGNhbid0
IGJlIGVtcHR5LgogICAgICAgICByZXR1cm4gdHJ1ZTsKQEAgLTM0OSwzNSArMzQ5LDM1IEBAIGJv
b2wgWFNTQXVkaXRvcjo6ZmlsdGVyQ2hhcmFjdGVyVG9rZW4oSFRNTFRva2VuJiB0b2tlbikKICAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyU2NyaXB0VG9rZW4o
SFRNTFRva2VuJiB0b2tlbikKK2Jvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyU2NyaXB0VG9rZW4oSFRN
TFRva2VuJiB0b2tlbiwgSFRNTFNvdXJjZVRyYWNrZXImIHNvdXJjZVRyYWNrZXIsIGNvbnN0IFRl
eHRSZXNvdXJjZURlY29kZXIqIGRlY29kZXIpCiB7CiAgICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9
PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpOwogICAgIEFTU0VSVChoYXNOYW1lKHRva2VuLCBz
Y3JpcHRUYWcpKTsKIAotICAgIG1fY2FjaGVkRGVjb2RlZFNuaXBwZXQgPSBkZWNvZGVkU25pcHBl
dEZvck5hbWUodG9rZW4pOworICAgIG1fY2FjaGVkRGVjb2RlZFNuaXBwZXQgPSBkZWNvZGVkU25p
cHBldEZvck5hbWUodG9rZW4sIHNvdXJjZVRyYWNrZXIsIGRlY29kZXIpOwogICAgIG1fc2hvdWxk
QWxsb3dDREFUQSA9IG1fcGFyc2VyLT50b2tlbml6ZXIoKS0+c2hvdWxkQWxsb3dDREFUQSgpOwog
Ci0gICAgaWYgKGlzQ29udGFpbmVkSW5SZXF1ZXN0KGRlY29kZWRTbmlwcGV0Rm9yTmFtZSh0b2tl
bikpKQotICAgICAgICByZXR1cm4gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHRva2VuLCBzcmNB
dHRyLCBibGFua1VSTCgpLnN0cmluZygpLCBTcmNMaWtlQXR0cmlidXRlKTsKKyAgICBpZiAoaXND
b250YWluZWRJblJlcXVlc3QoZGVjb2RlZFNuaXBwZXRGb3JOYW1lKHRva2VuLCBzb3VyY2VUcmFj
a2VyLCBkZWNvZGVyKSkpCisgICAgICAgIHJldHVybiBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQo
dG9rZW4sIHNvdXJjZVRyYWNrZXIsIGRlY29kZXIsIHNyY0F0dHIsIGJsYW5rVVJMKCkuc3RyaW5n
KCksIFNyY0xpa2VBdHRyaWJ1dGUpOwogCiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1ib29sIFhT
U0F1ZGl0b3I6OmZpbHRlck9iamVjdFRva2VuKEhUTUxUb2tlbiYgdG9rZW4pCitib29sIFhTU0F1
ZGl0b3I6OmZpbHRlck9iamVjdFRva2VuKEhUTUxUb2tlbiYgdG9rZW4sIEhUTUxTb3VyY2VUcmFj
a2VyJiBzb3VyY2VUcmFja2VyLCBjb25zdCBUZXh0UmVzb3VyY2VEZWNvZGVyKiBkZWNvZGVyKQog
ewogICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsK
ICAgICBBU1NFUlQoaGFzTmFtZSh0b2tlbiwgb2JqZWN0VGFnKSk7CiAKICAgICBib29sIGRpZEJs
b2NrU2NyaXB0ID0gZmFsc2U7Ci0gICAgaWYgKGlzQ29udGFpbmVkSW5SZXF1ZXN0KGRlY29kZWRT
bmlwcGV0Rm9yTmFtZSh0b2tlbikpKSB7Ci0gICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNl
QXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgZGF0YUF0dHIsIGJsYW5rVVJMKCkuc3RyaW5nKCks
IFNyY0xpa2VBdHRyaWJ1dGUpOwotICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJp
YnV0ZUlmSW5qZWN0ZWQodG9rZW4sIHR5cGVBdHRyKTsKLSAgICAgICAgZGlkQmxvY2tTY3JpcHQg
fD0gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHRva2VuLCBjbGFzc2lkQXR0cik7CisgICAgaWYg
KGlzQ29udGFpbmVkSW5SZXF1ZXN0KGRlY29kZWRTbmlwcGV0Rm9yTmFtZSh0b2tlbiwgc291cmNl
VHJhY2tlciwgZGVjb2RlcikpKSB7CisgICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0
cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgc291cmNlVHJhY2tlciwgZGVjb2RlciwgZGF0YUF0dHIs
IGJsYW5rVVJMKCkuc3RyaW5nKCksIFNyY0xpa2VBdHRyaWJ1dGUpOworICAgICAgICBkaWRCbG9j
a1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIHNvdXJjZVRyYWNrZXIs
IGRlY29kZXIsIHR5cGVBdHRyKTsKKyAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRy
aWJ1dGVJZkluamVjdGVkKHRva2VuLCBzb3VyY2VUcmFja2VyLCBkZWNvZGVyLCBjbGFzc2lkQXR0
cik7CiAgICAgfQogICAgIHJldHVybiBkaWRCbG9ja1NjcmlwdDsKIH0KIAotYm9vbCBYU1NBdWRp
dG9yOjpmaWx0ZXJQYXJhbVRva2VuKEhUTUxUb2tlbiYgdG9rZW4pCitib29sIFhTU0F1ZGl0b3I6
OmZpbHRlclBhcmFtVG9rZW4oSFRNTFRva2VuJiB0b2tlbiwgSFRNTFNvdXJjZVRyYWNrZXImIHNv
dXJjZVRyYWNrZXIsIGNvbnN0IFRleHRSZXNvdXJjZURlY29kZXIqIGRlY29kZXIpCiB7CiAgICAg
QVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpOwogICAgIEFT
U0VSVChoYXNOYW1lKHRva2VuLCBwYXJhbVRhZykpOwpAQCAtMzkyLDc0ICszOTIsNzQgQEAgYm9v
bCBYU1NBdWRpdG9yOjpmaWx0ZXJQYXJhbVRva2VuKEhUTUxUb2tlbiYgdG9rZW4pCiAgICAgaWYg
KCFIVE1MUGFyYW1FbGVtZW50Ojppc1VSTFBhcmFtZXRlcihuYW1lKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgcmV0dXJuIGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgdmFs
dWVBdHRyLCBibGFua1VSTCgpLnN0cmluZygpLCBTcmNMaWtlQXR0cmlidXRlKTsKKyAgICByZXR1
cm4gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHRva2VuLCBzb3VyY2VUcmFja2VyLCBkZWNvZGVy
LCB2YWx1ZUF0dHIsIGJsYW5rVVJMKCkuc3RyaW5nKCksIFNyY0xpa2VBdHRyaWJ1dGUpOwogfQog
Ci1ib29sIFhTU0F1ZGl0b3I6OmZpbHRlckVtYmVkVG9rZW4oSFRNTFRva2VuJiB0b2tlbikKK2Jv
b2wgWFNTQXVkaXRvcjo6ZmlsdGVyRW1iZWRUb2tlbihIVE1MVG9rZW4mIHRva2VuLCBIVE1MU291
cmNlVHJhY2tlciYgc291cmNlVHJhY2tlciwgY29uc3QgVGV4dFJlc291cmNlRGVjb2RlciogZGVj
b2RlcikKIHsKICAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFy
dFRhZyk7CiAgICAgQVNTRVJUKGhhc05hbWUodG9rZW4sIGVtYmVkVGFnKSk7CiAKICAgICBib29s
IGRpZEJsb2NrU2NyaXB0ID0gZmFsc2U7Ci0gICAgaWYgKGlzQ29udGFpbmVkSW5SZXF1ZXN0KGRl
Y29kZWRTbmlwcGV0Rm9yTmFtZSh0b2tlbikpKSB7Ci0gICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9
IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgY29kZUF0dHIsIFN0cmluZygpLCBTcmNM
aWtlQXR0cmlidXRlKTsKLSAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRyaWJ1dGVJ
ZkluamVjdGVkKHRva2VuLCBzcmNBdHRyLCBibGFua1VSTCgpLnN0cmluZygpLCBTcmNMaWtlQXR0
cmlidXRlKTsKLSAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRyaWJ1dGVJZkluamVj
dGVkKHRva2VuLCB0eXBlQXR0cik7CisgICAgaWYgKGlzQ29udGFpbmVkSW5SZXF1ZXN0KGRlY29k
ZWRTbmlwcGV0Rm9yTmFtZSh0b2tlbiwgc291cmNlVHJhY2tlciwgZGVjb2RlcikpKSB7CisgICAg
ICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgc291
cmNlVHJhY2tlciwgZGVjb2RlciwgY29kZUF0dHIsIFN0cmluZygpLCBTcmNMaWtlQXR0cmlidXRl
KTsKKyAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHRv
a2VuLCBzb3VyY2VUcmFja2VyLCBkZWNvZGVyLCBzcmNBdHRyLCBibGFua1VSTCgpLnN0cmluZygp
LCBTcmNMaWtlQXR0cmlidXRlKTsKKyAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRy
aWJ1dGVJZkluamVjdGVkKHRva2VuLCBzb3VyY2VUcmFja2VyLCBkZWNvZGVyLCB0eXBlQXR0cik7
CiAgICAgfQogICAgIHJldHVybiBkaWRCbG9ja1NjcmlwdDsKIH0KIAotYm9vbCBYU1NBdWRpdG9y
OjpmaWx0ZXJBcHBsZXRUb2tlbihIVE1MVG9rZW4mIHRva2VuKQorYm9vbCBYU1NBdWRpdG9yOjpm
aWx0ZXJBcHBsZXRUb2tlbihIVE1MVG9rZW4mIHRva2VuLCBIVE1MU291cmNlVHJhY2tlciYgc291
cmNlVHJhY2tlciwgY29uc3QgVGV4dFJlc291cmNlRGVjb2RlciogZGVjb2RlcikKIHsKICAgICBB
U1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZyk7CiAgICAgQVNT
RVJUKGhhc05hbWUodG9rZW4sIGFwcGxldFRhZykpOwogCiAgICAgYm9vbCBkaWRCbG9ja1Njcmlw
dCA9IGZhbHNlOwotICAgIGlmIChpc0NvbnRhaW5lZEluUmVxdWVzdChkZWNvZGVkU25pcHBldEZv
ck5hbWUodG9rZW4pKSkgewotICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0
ZUlmSW5qZWN0ZWQodG9rZW4sIGNvZGVBdHRyLCBTdHJpbmcoKSwgU3JjTGlrZUF0dHJpYnV0ZSk7
Ci0gICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tl
biwgb2JqZWN0QXR0cik7CisgICAgaWYgKGlzQ29udGFpbmVkSW5SZXF1ZXN0KGRlY29kZWRTbmlw
cGV0Rm9yTmFtZSh0b2tlbiwgc291cmNlVHJhY2tlciwgZGVjb2RlcikpKSB7CisgICAgICAgIGRp
ZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgc291cmNlVHJh
Y2tlciwgZGVjb2RlciwgY29kZUF0dHIsIFN0cmluZygpLCBTcmNMaWtlQXR0cmlidXRlKTsKKyAg
ICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHRva2VuLCBz
b3VyY2VUcmFja2VyLCBkZWNvZGVyLCBvYmplY3RBdHRyKTsKICAgICB9CiAgICAgcmV0dXJuIGRp
ZEJsb2NrU2NyaXB0OwogfQogCi1ib29sIFhTU0F1ZGl0b3I6OmZpbHRlcklmcmFtZVRva2VuKEhU
TUxUb2tlbiYgdG9rZW4pCitib29sIFhTU0F1ZGl0b3I6OmZpbHRlcklmcmFtZVRva2VuKEhUTUxU
b2tlbiYgdG9rZW4sIEhUTUxTb3VyY2VUcmFja2VyJiBzb3VyY2VUcmFja2VyLCBjb25zdCBUZXh0
UmVzb3VyY2VEZWNvZGVyKiBkZWNvZGVyKQogewogICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0g
SFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKICAgICBBU1NFUlQoaGFzTmFtZSh0b2tlbiwgaWZy
YW1lVGFnKSk7CiAKICAgICBib29sIGRpZEJsb2NrU2NyaXB0ID0gZmFsc2U7Ci0gICAgaWYgKGlz
Q29udGFpbmVkSW5SZXF1ZXN0KGRlY29kZWRTbmlwcGV0Rm9yTmFtZSh0b2tlbikpKSB7Ci0gICAg
ICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgc3Jj
QXR0ciwgU3RyaW5nKCksIFNyY0xpa2VBdHRyaWJ1dGUpOwotICAgICAgICBkaWRCbG9ja1Njcmlw
dCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIHNyY2RvY0F0dHIsIFN0cmluZygp
LCBTY3JpcHRMaWtlQXR0cmlidXRlKTsKKyAgICBpZiAoaXNDb250YWluZWRJblJlcXVlc3QoZGVj
b2RlZFNuaXBwZXRGb3JOYW1lKHRva2VuLCBzb3VyY2VUcmFja2VyLCBkZWNvZGVyKSkpIHsKKyAg
ICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHRva2VuLCBz
b3VyY2VUcmFja2VyLCBkZWNvZGVyLCBzcmNBdHRyLCBTdHJpbmcoKSwgU3JjTGlrZUF0dHJpYnV0
ZSk7CisgICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0
b2tlbiwgc291cmNlVHJhY2tlciwgZGVjb2Rlciwgc3JjZG9jQXR0ciwgU3RyaW5nKCksIFNjcmlw
dExpa2VBdHRyaWJ1dGUpOwogICAgIH0KICAgICByZXR1cm4gZGlkQmxvY2tTY3JpcHQ7CiB9CiAK
LWJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyTWV0YVRva2VuKEhUTUxUb2tlbiYgdG9rZW4pCitib29s
IFhTU0F1ZGl0b3I6OmZpbHRlck1ldGFUb2tlbihIVE1MVG9rZW4mIHRva2VuLCBIVE1MU291cmNl
VHJhY2tlciYgc291cmNlVHJhY2tlciwgY29uc3QgVGV4dFJlc291cmNlRGVjb2RlciogZGVjb2Rl
cikKIHsKICAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRh
Zyk7CiAgICAgQVNTRVJUKGhhc05hbWUodG9rZW4sIG1ldGFUYWcpKTsKIAotICAgIHJldHVybiBl
cmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIGh0dHBfZXF1aXZBdHRyKTsKKyAgICByZXR1
cm4gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHRva2VuLCBzb3VyY2VUcmFja2VyLCBkZWNvZGVy
LCBodHRwX2VxdWl2QXR0cik7CiB9CiAKLWJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyQmFzZVRva2Vu
KEhUTUxUb2tlbiYgdG9rZW4pCitib29sIFhTU0F1ZGl0b3I6OmZpbHRlckJhc2VUb2tlbihIVE1M
VG9rZW4mIHRva2VuLCBIVE1MU291cmNlVHJhY2tlciYgc291cmNlVHJhY2tlciwgY29uc3QgVGV4
dFJlc291cmNlRGVjb2RlciogZGVjb2RlcikKIHsKICAgICBBU1NFUlQodG9rZW4udHlwZSgpID09
IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZyk7CiAgICAgQVNTRVJUKGhhc05hbWUodG9rZW4sIGJh
c2VUYWcpKTsKIAotICAgIHJldHVybiBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIGhy
ZWZBdHRyKTsKKyAgICByZXR1cm4gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHRva2VuLCBzb3Vy
Y2VUcmFja2VyLCBkZWNvZGVyLCBocmVmQXR0cik7CiB9CiAKLWJvb2wgWFNTQXVkaXRvcjo6Zmls
dGVyRm9ybVRva2VuKEhUTUxUb2tlbiYgdG9rZW4pCitib29sIFhTU0F1ZGl0b3I6OmZpbHRlckZv
cm1Ub2tlbihIVE1MVG9rZW4mIHRva2VuLCBIVE1MU291cmNlVHJhY2tlciYgc291cmNlVHJhY2tl
ciwgY29uc3QgVGV4dFJlc291cmNlRGVjb2RlciogZGVjb2RlcikKIHsKICAgICBBU1NFUlQodG9r
ZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZyk7CiAgICAgQVNTRVJUKGhhc05h
bWUodG9rZW4sIGZvcm1UYWcpKTsKIAotICAgIHJldHVybiBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0
ZWQodG9rZW4sIGFjdGlvbkF0dHIsIGJsYW5rVVJMKCkuc3RyaW5nKCkpOworICAgIHJldHVybiBl
cmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIHNvdXJjZVRyYWNrZXIsIGRlY29kZXIsIGFj
dGlvbkF0dHIsIGJsYW5rVVJMKCkuc3RyaW5nKCkpOwogfQogCi1ib29sIFhTU0F1ZGl0b3I6OmVy
YXNlRGFuZ2Vyb3VzQXR0cmlidXRlc0lmSW5qZWN0ZWQoSFRNTFRva2VuJiB0b2tlbikKK2Jvb2wg
WFNTQXVkaXRvcjo6ZXJhc2VEYW5nZXJvdXNBdHRyaWJ1dGVzSWZJbmplY3RlZChIVE1MVG9rZW4m
IHRva2VuLCBIVE1MU291cmNlVHJhY2tlciYgc291cmNlVHJhY2tlciwgY29uc3QgVGV4dFJlc291
cmNlRGVjb2RlciogZGVjb2RlcikKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywg
c2FmZUphdmFTY3JpcHRVUkwsIChBU0NJSUxpdGVyYWwoImphdmFzY3JpcHQ6dm9pZCgwKSIpKSk7
CiAKQEAgLTQ3MCw3ICs0NzAsNyBAQCBib29sIFhTU0F1ZGl0b3I6OmVyYXNlRGFuZ2Vyb3VzQXR0
cmlidXRlc0lmSW5qZWN0ZWQoSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgYm9vbCB2YWx1ZUNv
bnRhaW5zSmF2YVNjcmlwdFVSTCA9ICFpc0lubGluZUV2ZW50SGFuZGxlciAmJiBwcm90b2NvbElz
SmF2YVNjcmlwdChzdHJpcExlYWRpbmdBbmRUcmFpbGluZ0hUTUxTcGFjZXMoU3RyaW5nKGF0dHJp
YnV0ZS5tX3ZhbHVlLmRhdGEoKSwgYXR0cmlidXRlLm1fdmFsdWUuc2l6ZSgpKSkpOwogICAgICAg
ICBpZiAoIWlzSW5saW5lRXZlbnRIYW5kbGVyICYmICF2YWx1ZUNvbnRhaW5zSmF2YVNjcmlwdFVS
TCkKICAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBpZiAoIWlzQ29udGFpbmVkSW5SZXF1
ZXN0KGRlY29kZWRTbmlwcGV0Rm9yQXR0cmlidXRlKHRva2VuLCBhdHRyaWJ1dGUsIFNjcmlwdExp
a2VBdHRyaWJ1dGUpKSkKKyAgICAgICAgaWYgKCFpc0NvbnRhaW5lZEluUmVxdWVzdChkZWNvZGVk
U25pcHBldEZvckF0dHJpYnV0ZSh0b2tlbiwgc291cmNlVHJhY2tlciwgZGVjb2RlciwgYXR0cmli
dXRlLCBTY3JpcHRMaWtlQXR0cmlidXRlKSkpCiAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgdG9rZW4uZXJhc2VWYWx1ZU9mQXR0cmlidXRlKGkpOwogICAgICAgICBpZiAodmFsdWVDb250
YWluc0phdmFTY3JpcHRVUkwpCkBAIC00ODAsMTIgKzQ4MCwxMiBAQCBib29sIFhTU0F1ZGl0b3I6
OmVyYXNlRGFuZ2Vyb3VzQXR0cmlidXRlc0lmSW5qZWN0ZWQoSFRNTFRva2VuJiB0b2tlbikKICAg
ICByZXR1cm4gZGlkQmxvY2tTY3JpcHQ7CiB9CiAKLWJvb2wgWFNTQXVkaXRvcjo6ZXJhc2VBdHRy
aWJ1dGVJZkluamVjdGVkKEhUTUxUb2tlbiYgdG9rZW4sIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0
dHJpYnV0ZU5hbWUsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRWYWx1ZSwgQXR0cmlidXRlS2lu
ZCB0cmVhdG1lbnQpCitib29sIFhTU0F1ZGl0b3I6OmVyYXNlQXR0cmlidXRlSWZJbmplY3RlZChI
VE1MVG9rZW4mIHRva2VuLCBIVE1MU291cmNlVHJhY2tlciYgc291cmNlVHJhY2tlciwgY29uc3Qg
VGV4dFJlc291cmNlRGVjb2RlciogZGVjb2RlciwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmli
dXRlTmFtZSwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFZhbHVlLCBBdHRyaWJ1dGVLaW5kIHRy
ZWF0bWVudCkKIHsKICAgICBzaXplX3QgaW5kZXhPZkF0dHJpYnV0ZSA9IDA7CiAgICAgaWYgKGZp
bmRBdHRyaWJ1dGVXaXRoTmFtZSh0b2tlbiwgYXR0cmlidXRlTmFtZSwgaW5kZXhPZkF0dHJpYnV0
ZSkpIHsKICAgICAgICAgY29uc3QgSFRNTFRva2VuOjpBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA9IHRv
a2VuLmF0dHJpYnV0ZXMoKS5hdChpbmRleE9mQXR0cmlidXRlKTsKLSAgICAgICAgaWYgKGlzQ29u
dGFpbmVkSW5SZXF1ZXN0KGRlY29kZWRTbmlwcGV0Rm9yQXR0cmlidXRlKHRva2VuLCBhdHRyaWJ1
dGUsIHRyZWF0bWVudCkpKSB7CisgICAgICAgIGlmIChpc0NvbnRhaW5lZEluUmVxdWVzdChkZWNv
ZGVkU25pcHBldEZvckF0dHJpYnV0ZSh0b2tlbiwgc291cmNlVHJhY2tlciwgZGVjb2RlciwgYXR0
cmlidXRlLCB0cmVhdG1lbnQpKSkgewogICAgICAgICAgICAgaWYgKGF0dHJpYnV0ZU5hbWUgPT0g
c3JjQXR0ciAmJiBpc0xpa2VseVNhZmVSZXNvdXJjZShTdHJpbmcoYXR0cmlidXRlLm1fdmFsdWUu
ZGF0YSgpLCBhdHRyaWJ1dGUubV92YWx1ZS5zaXplKCkpKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICBpZiAoYXR0cmlidXRlTmFtZSA9PSBodHRwX2VxdWl2QXR0
ciAmJiAhaXNEYW5nZXJvdXNIVFRQRXF1aXYoU3RyaW5nKGF0dHJpYnV0ZS5tX3ZhbHVlLmRhdGEo
KSwgYXR0cmlidXRlLm1fdmFsdWUuc2l6ZSgpKSkpCkBAIC00OTksMTMgKzQ5OSwxMyBAQCBib29s
IFhTU0F1ZGl0b3I6OmVyYXNlQXR0cmlidXRlSWZJbmplY3RlZChIVE1MVG9rZW4mIHRva2VuLCBj
b25zdCBRdWFsaWZpZWROYW1lJgogICAgIHJldHVybiBmYWxzZTsKIH0KIAotU3RyaW5nIFhTU0F1
ZGl0b3I6OmRlY29kZWRTbmlwcGV0Rm9yTmFtZShjb25zdCBIVE1MVG9rZW4mIHRva2VuKQorU3Ry
aW5nIFhTU0F1ZGl0b3I6OmRlY29kZWRTbmlwcGV0Rm9yTmFtZShjb25zdCBIVE1MVG9rZW4mIHRv
a2VuLCBIVE1MU291cmNlVHJhY2tlciYgc291cmNlVHJhY2tlciwgY29uc3QgVGV4dFJlc291cmNl
RGVjb2RlciogZGVjb2RlcikKIHsKICAgICAvLyBHcmFiIGEgZml4ZWQgbnVtYmVyIG9mIGNoYXJh
Y3RlcnMgZXF1YWwgdG8gdGhlIGxlbmd0aCBvZiB0aGUgdG9rZW4ncyBuYW1lIHBsdXMgb25lICh0
byBhY2NvdW50IGZvciB0aGUgIjwiKS4KLSAgICByZXR1cm4gZnVsbHlEZWNvZGVTdHJpbmcobV9w
YXJzZXItPnNvdXJjZUZvclRva2VuKHRva2VuKSwgbV9wYXJzZXItPmRvY3VtZW50KCktPmRlY29k
ZXIoKSkuc3Vic3RyaW5nKDAsIHRva2VuLm5hbWUoKS5zaXplKCkgKyAxKTsKKyAgICByZXR1cm4g
ZnVsbHlEZWNvZGVTdHJpbmcoc291cmNlVHJhY2tlci5zb3VyY2VGb3JUb2tlbih0b2tlbiksIGRl
Y29kZXIpLnN1YnN0cmluZygwLCB0b2tlbi5uYW1lKCkuc2l6ZSgpICsgMSk7CiB9CiAKLVN0cmlu
ZyBYU1NBdWRpdG9yOjpkZWNvZGVkU25pcHBldEZvckF0dHJpYnV0ZShjb25zdCBIVE1MVG9rZW4m
IHRva2VuLCBjb25zdCBIVE1MVG9rZW46OkF0dHJpYnV0ZSYgYXR0cmlidXRlLCBBdHRyaWJ1dGVL
aW5kIHRyZWF0bWVudCkKK1N0cmluZyBYU1NBdWRpdG9yOjpkZWNvZGVkU25pcHBldEZvckF0dHJp
YnV0ZShjb25zdCBIVE1MVG9rZW4mIHRva2VuLCBIVE1MU291cmNlVHJhY2tlciYgc291cmNlVHJh
Y2tlciwgY29uc3QgVGV4dFJlc291cmNlRGVjb2RlciogZGVjb2RlciwgY29uc3QgSFRNTFRva2Vu
OjpBdHRyaWJ1dGUmIGF0dHJpYnV0ZSwgQXR0cmlidXRlS2luZCB0cmVhdG1lbnQpCiB7CiAgICAg
Ly8gVGhlIHJhbmdlIGRvZXNuJ3QgaW5sY3VkZSB0aGUgY2hhcmFjdGVyIHdoaWNoIHRlcm1pbmF0
ZXMgdGhlIHZhbHVlLiBTbywKICAgICAvLyBmb3IgYW4gaW5wdXQgb2YgfG5hbWU9InZhbHVlInws
IHRoZSBzbmlwcGV0IGlzIHxuYW1lPSJ2YWx1ZXwuIEZvciBhbgpAQCAtNTEzLDcgKzUxMyw3IEBA
IFN0cmluZyBYU1NBdWRpdG9yOjpkZWNvZGVkU25pcHBldEZvckF0dHJpYnV0ZShjb25zdCBIVE1M
VG9rZW4mIHRva2VuLCBjb25zdCBIVE1MCiAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBncmFiIG9u
ZSBjaGFyYWN0ZXIgYmVmb3JlIHRoZSBuYW1lIGFsc28uCiAgICAgaW50IHN0YXJ0ID0gYXR0cmli
dXRlLm1fbmFtZVJhbmdlLm1fc3RhcnQgLSB0b2tlbi5zdGFydEluZGV4KCk7CiAgICAgaW50IGVu
ZCA9IGF0dHJpYnV0ZS5tX3ZhbHVlUmFuZ2UubV9lbmQgLSB0b2tlbi5zdGFydEluZGV4KCk7Ci0g
ICAgU3RyaW5nIGRlY29kZWRTbmlwcGV0ID0gZnVsbHlEZWNvZGVTdHJpbmcobV9wYXJzZXItPnNv
dXJjZUZvclRva2VuKHRva2VuKS5zdWJzdHJpbmcoc3RhcnQsIGVuZCAtIHN0YXJ0KSwgbV9wYXJz
ZXItPmRvY3VtZW50KCktPmRlY29kZXIoKSk7CisgICAgU3RyaW5nIGRlY29kZWRTbmlwcGV0ID0g
ZnVsbHlEZWNvZGVTdHJpbmcoc291cmNlVHJhY2tlci5zb3VyY2VGb3JUb2tlbih0b2tlbikuc3Vi
c3RyaW5nKHN0YXJ0LCBlbmQgLSBzdGFydCksIGRlY29kZXIpOwogICAgIGRlY29kZWRTbmlwcGV0
LnRydW5jYXRlKGtNYXhpbXVtRnJhZ21lbnRMZW5ndGhUYXJnZXQpOwogICAgIGlmICh0cmVhdG1l
bnQgPT0gU3JjTGlrZUF0dHJpYnV0ZSkgewogICAgICAgICBpbnQgc2xhc2hDb3VudCA9IDA7CkBA
IC01NjQsOSArNTY0LDkgQEAgU3RyaW5nIFhTU0F1ZGl0b3I6OmRlY29kZWRTbmlwcGV0Rm9yQXR0
cmlidXRlKGNvbnN0IEhUTUxUb2tlbiYgdG9rZW4sIGNvbnN0IEhUTUwKICAgICByZXR1cm4gZGVj
b2RlZFNuaXBwZXQ7CiB9CiAKLVN0cmluZyBYU1NBdWRpdG9yOjpkZWNvZGVkU25pcHBldEZvckph
dmFTY3JpcHQoY29uc3QgSFRNTFRva2VuJiB0b2tlbikKK1N0cmluZyBYU1NBdWRpdG9yOjpkZWNv
ZGVkU25pcHBldEZvckphdmFTY3JpcHQoY29uc3QgSFRNTFRva2VuJiB0b2tlbiwgSFRNTFNvdXJj
ZVRyYWNrZXImIHNvdXJjZVRyYWNrZXIpCiB7Ci0gICAgU3RyaW5nIHN0cmluZyA9IG1fcGFyc2Vy
LT5zb3VyY2VGb3JUb2tlbih0b2tlbik7CisgICAgU3RyaW5nIHN0cmluZyA9IHNvdXJjZVRyYWNr
ZXIuc291cmNlRm9yVG9rZW4odG9rZW4pOwogICAgIHNpemVfdCBzdGFydFBvc2l0aW9uID0gMDsK
ICAgICBzaXplX3QgZW5kUG9zaXRpb24gPSBzdHJpbmcubGVuZ3RoKCk7CiAgICAgc2l6ZV90IGZv
dW5kUG9zaXRpb24gPSBub3RGb3VuZDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
cGFyc2VyL1hTU0F1ZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0
b3IuaAppbmRleCAyYmQxN2I1NWNmMzFjOTVhOGE2ZTQ4ZGIwNzgzMTY0MWRjODhjNmE4Li41MDZi
MDVmZTAzZWQxYmRmMGM1MjhmZDVmOTE5Yjk1ZGQ5MTgyNmFhIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL3BhcnNlci9YU1NBdWRpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvWFNTQXVkaXRvci5oCkBAIC0zNiw2ICszNiw4IEBAIG5hbWVzcGFjZSBXZWJDb3Jl
IHsKIGNsYXNzIERpZEJsb2NrU2NyaXB0UmVxdWVzdDsKIGNsYXNzIERvY3VtZW50OwogY2xhc3Mg
SFRNTERvY3VtZW50UGFyc2VyOworY2xhc3MgSFRNTFNvdXJjZVRyYWNrZXI7CitjbGFzcyBUZXh0
UmVzb3VyY2VEZWNvZGVyOwogCiBjbGFzcyBYU1NBdWRpdG9yIHsKICAgICBXVEZfTUFLRV9OT05D
T1BZQUJMRShYU1NBdWRpdG9yKTsKQEAgLTQzLDcgKzQ1LDcgQEAgcHVibGljOgogICAgIGV4cGxp
Y2l0IFhTU0F1ZGl0b3IoSFRNTERvY3VtZW50UGFyc2VyKik7CiAKICAgICB2b2lkIGluaXQoRG9j
dW1lbnQqKTsKLSAgICBQYXNzT3duUHRyPERpZEJsb2NrU2NyaXB0UmVxdWVzdD4gZmlsdGVyVG9r
ZW4oSFRNTFRva2VuJik7CisgICAgUGFzc093blB0cjxEaWRCbG9ja1NjcmlwdFJlcXVlc3Q+IGZp
bHRlclRva2VuKEhUTUxUb2tlbiYsIEhUTUxTb3VyY2VUcmFja2VyJiwgY29uc3QgVGV4dFJlc291
cmNlRGVjb2RlciopOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBzaXplX3Qga01heGlt
dW1GcmFnbWVudExlbmd0aFRhcmdldCA9IDEwMDsKQEAgLTU5LDI2ICs2MSwyNiBAQCBwcml2YXRl
OgogICAgICAgICBTY3JpcHRMaWtlQXR0cmlidXRlCiAgICAgfTsKIAotICAgIGJvb2wgZmlsdGVy
U3RhcnRUb2tlbihIVE1MVG9rZW4mKTsKKyAgICBib29sIGZpbHRlclN0YXJ0VG9rZW4oSFRNTFRv
a2VuJiwgSFRNTFNvdXJjZVRyYWNrZXImLCBjb25zdCBUZXh0UmVzb3VyY2VEZWNvZGVyKik7CiAg
ICAgdm9pZCBmaWx0ZXJFbmRUb2tlbihIVE1MVG9rZW4mKTsKLSAgICBib29sIGZpbHRlckNoYXJh
Y3RlclRva2VuKEhUTUxUb2tlbiYpOwotICAgIGJvb2wgZmlsdGVyU2NyaXB0VG9rZW4oSFRNTFRv
a2VuJik7Ci0gICAgYm9vbCBmaWx0ZXJPYmplY3RUb2tlbihIVE1MVG9rZW4mKTsKLSAgICBib29s
IGZpbHRlclBhcmFtVG9rZW4oSFRNTFRva2VuJik7Ci0gICAgYm9vbCBmaWx0ZXJFbWJlZFRva2Vu
KEhUTUxUb2tlbiYpOwotICAgIGJvb2wgZmlsdGVyQXBwbGV0VG9rZW4oSFRNTFRva2VuJik7Ci0g
ICAgYm9vbCBmaWx0ZXJJZnJhbWVUb2tlbihIVE1MVG9rZW4mKTsKLSAgICBib29sIGZpbHRlck1l
dGFUb2tlbihIVE1MVG9rZW4mKTsKLSAgICBib29sIGZpbHRlckJhc2VUb2tlbihIVE1MVG9rZW4m
KTsKLSAgICBib29sIGZpbHRlckZvcm1Ub2tlbihIVE1MVG9rZW4mKTsKLQotICAgIGJvb2wgZXJh
c2VEYW5nZXJvdXNBdHRyaWJ1dGVzSWZJbmplY3RlZChIVE1MVG9rZW4mKTsKLSAgICBib29sIGVy
YXNlQXR0cmlidXRlSWZJbmplY3RlZChIVE1MVG9rZW4mLCBjb25zdCBRdWFsaWZpZWROYW1lJiwg
Y29uc3QgU3RyaW5nJiByZXBsYWNlbWVudFZhbHVlID0gU3RyaW5nKCksIEF0dHJpYnV0ZUtpbmQg
dHJlYXRtZW50ID0gTm9ybWFsQXR0cmlidXRlKTsKKyAgICBib29sIGZpbHRlckNoYXJhY3RlclRv
a2VuKEhUTUxUb2tlbiYsIEhUTUxTb3VyY2VUcmFja2VyJik7CisgICAgYm9vbCBmaWx0ZXJTY3Jp
cHRUb2tlbihIVE1MVG9rZW4mLCBIVE1MU291cmNlVHJhY2tlciYsIGNvbnN0IFRleHRSZXNvdXJj
ZURlY29kZXIqKTsKKyAgICBib29sIGZpbHRlck9iamVjdFRva2VuKEhUTUxUb2tlbiYsIEhUTUxT
b3VyY2VUcmFja2VyJiwgY29uc3QgVGV4dFJlc291cmNlRGVjb2RlciopOworICAgIGJvb2wgZmls
dGVyUGFyYW1Ub2tlbihIVE1MVG9rZW4mLCBIVE1MU291cmNlVHJhY2tlciYsIGNvbnN0IFRleHRS
ZXNvdXJjZURlY29kZXIqKTsKKyAgICBib29sIGZpbHRlckVtYmVkVG9rZW4oSFRNTFRva2VuJiwg
SFRNTFNvdXJjZVRyYWNrZXImLCBjb25zdCBUZXh0UmVzb3VyY2VEZWNvZGVyKik7CisgICAgYm9v
bCBmaWx0ZXJBcHBsZXRUb2tlbihIVE1MVG9rZW4mLCBIVE1MU291cmNlVHJhY2tlciYsIGNvbnN0
IFRleHRSZXNvdXJjZURlY29kZXIqKTsKKyAgICBib29sIGZpbHRlcklmcmFtZVRva2VuKEhUTUxU
b2tlbiYsIEhUTUxTb3VyY2VUcmFja2VyJiwgY29uc3QgVGV4dFJlc291cmNlRGVjb2RlciopOwor
ICAgIGJvb2wgZmlsdGVyTWV0YVRva2VuKEhUTUxUb2tlbiYsIEhUTUxTb3VyY2VUcmFja2VyJiwg
Y29uc3QgVGV4dFJlc291cmNlRGVjb2RlciopOworICAgIGJvb2wgZmlsdGVyQmFzZVRva2VuKEhU
TUxUb2tlbiYsIEhUTUxTb3VyY2VUcmFja2VyJiwgY29uc3QgVGV4dFJlc291cmNlRGVjb2Rlciop
OworICAgIGJvb2wgZmlsdGVyRm9ybVRva2VuKEhUTUxUb2tlbiYsIEhUTUxTb3VyY2VUcmFja2Vy
JiwgY29uc3QgVGV4dFJlc291cmNlRGVjb2RlciopOworCisgICAgYm9vbCBlcmFzZURhbmdlcm91
c0F0dHJpYnV0ZXNJZkluamVjdGVkKEhUTUxUb2tlbiYsIEhUTUxTb3VyY2VUcmFja2VyJiwgY29u
c3QgVGV4dFJlc291cmNlRGVjb2RlciopOworICAgIGJvb2wgZXJhc2VBdHRyaWJ1dGVJZkluamVj
dGVkKEhUTUxUb2tlbiYsIEhUTUxTb3VyY2VUcmFja2VyJiwgY29uc3QgVGV4dFJlc291cmNlRGVj
b2RlciosIGNvbnN0IFF1YWxpZmllZE5hbWUmLCBjb25zdCBTdHJpbmcmIHJlcGxhY2VtZW50VmFs
dWUgPSBTdHJpbmcoKSwgQXR0cmlidXRlS2luZCB0cmVhdG1lbnQgPSBOb3JtYWxBdHRyaWJ1dGUp
OwogCiAgICAgU3RyaW5nIGRlY29kZWRTbmlwcGV0Rm9yVG9rZW4oY29uc3QgSFRNTFRva2VuJik7
Ci0gICAgU3RyaW5nIGRlY29kZWRTbmlwcGV0Rm9yTmFtZShjb25zdCBIVE1MVG9rZW4mKTsKLSAg
ICBTdHJpbmcgZGVjb2RlZFNuaXBwZXRGb3JBdHRyaWJ1dGUoY29uc3QgSFRNTFRva2VuJiwgY29u
c3QgSFRNTFRva2VuOjpBdHRyaWJ1dGUmLCBBdHRyaWJ1dGVLaW5kIHRyZWF0bWVudCA9IE5vcm1h
bEF0dHJpYnV0ZSk7Ci0gICAgU3RyaW5nIGRlY29kZWRTbmlwcGV0Rm9ySmF2YVNjcmlwdChjb25z
dCBIVE1MVG9rZW4mKTsKKyAgICBTdHJpbmcgZGVjb2RlZFNuaXBwZXRGb3JOYW1lKGNvbnN0IEhU
TUxUb2tlbiYsIEhUTUxTb3VyY2VUcmFja2VyJiwgY29uc3QgVGV4dFJlc291cmNlRGVjb2Rlciop
OworICAgIFN0cmluZyBkZWNvZGVkU25pcHBldEZvckF0dHJpYnV0ZShjb25zdCBIVE1MVG9rZW4m
LCBIVE1MU291cmNlVHJhY2tlciYsIGNvbnN0IFRleHRSZXNvdXJjZURlY29kZXIqLCBjb25zdCBI
VE1MVG9rZW46OkF0dHJpYnV0ZSYsIEF0dHJpYnV0ZUtpbmQgdHJlYXRtZW50ID0gTm9ybWFsQXR0
cmlidXRlKTsKKyAgICBTdHJpbmcgZGVjb2RlZFNuaXBwZXRGb3JKYXZhU2NyaXB0KGNvbnN0IEhU
TUxUb2tlbiYsIEhUTUxTb3VyY2VUcmFja2VyJik7CiAKICAgICBib29sIGlzQ29udGFpbmVkSW5S
ZXF1ZXN0KGNvbnN0IFN0cmluZyYpOwogICAgIGJvb2wgaXNMaWtlbHlTYWZlUmVzb3VyY2UoY29u
c3QgU3RyaW5nJiB1cmwpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186151</attachid>
            <date>2013-02-01 14:55:44 -0800</date>
            <delta_ts>2013-02-02 16:31:31 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108698-20130201145227.patch</filename>
            <type>text/plain</type>
            <size>23774</size>
            <attacher name="Tony Gentilcore">tonyg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxNjQ2CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggM2NjYzdhODBlZWI1ODA3
ZDQ1NzA1OTcyNTMzODc1Zjc3NGFjNDIwYS4uZGQ5MGJkN2JjZTUzMjY5NWVmYjg1NTQ1MTA3ZTg3
ZTVlNDg3YjBiYiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDEzLTAyLTAxICBUb255
IEdlbnRpbGNvcmUgIDx0b255Z0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ29udGludWUgbWFr
aW5nIFhTU0F1ZGl0b3IgdGhyZWFkIHNhZmU6IFJlbW92ZSBkZXBlbmRlbmN5IG9uIHBhcnNlcidz
IHNvdXJjZUZvclRva2VuIGFuZCBUZXh0UmVzb3VyY2VEZWNvZGVyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDg2OTgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSBubyBu
ZXcgZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBh
cnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OnB1bXBUb2tl
bml6ZXIpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oOgorICAg
ICAgICAqIGh0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFNT
QXVkaXRvcjo6ZmlsdGVyVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6Zmls
dGVyU3RhcnRUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0ZXJDaGFy
YWN0ZXJUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0ZXJTY3JpcHRU
b2tlbik6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0ZXJPYmplY3RUb2tlbik6
CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0ZXJQYXJhbVRva2VuKToKKyAgICAg
ICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmZpbHRlckVtYmVkVG9rZW4pOgorICAgICAgICAoV2Vi
Q29yZTo6WFNTQXVkaXRvcjo6ZmlsdGVyQXBwbGV0VG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6
WFNTQXVkaXRvcjo6ZmlsdGVySWZyYW1lVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVk
aXRvcjo6ZmlsdGVyTWV0YVRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmZp
bHRlckJhc2VUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0ZXJGb3Jt
VG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6ZXJhc2VEYW5nZXJvdXNBdHRy
aWJ1dGVzSWZJbmplY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjplcmFzZUF0
dHJpYnV0ZUlmSW5qZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6ZGVjb2Rl
ZFNuaXBwZXRGb3JOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmRlY29kZWRT
bmlwcGV0Rm9yQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmRlY29k
ZWRTbmlwcGV0Rm9ySmF2YVNjcmlwdCk6CisgICAgICAgICogaHRtbC9wYXJzZXIvWFNTQXVkaXRv
ci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChYU1NBdWRpdG9yKToKKwogMjAxMy0w
Mi0wMSAgUGhpbGlwIFJvZ2VycyAgPHBkckBnb29nbGUuY29tPgogCiAgICAgICAgIFByZXZlbnQg
c2tpcHBlZCByZXBhaW50cyBmb3IgY2hpbGRyZW4gb2YgaW5uZXIgU1ZHIGVsZW1lbnRzCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcAppbmRl
eCA3MmZlYmViYjhhNWFkNGZmZDYwNmY4ZTBjNzVmMjI3OGNkMWFjZWIwLi42YTUzNGNmZTM3NGE0
Y2E0YTYwY2E3YjZjMzhiMTliZjcyNTM1ODYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAKQEAgLTM3OCw3ICszNzgsNyBAQCB2b2lk
IEhUTUxEb2N1bWVudFBhcnNlcjo6cHVtcFRva2VuaXplcihTeW5jaHJvbm91c01vZGUgbW9kZSkK
IAogICAgICAgICAgICAgLy8gV2UgZG8gbm90IFhTUyBmaWx0ZXIgaW5uZXJIVE1MLCB3aGljaCBt
ZWFucyB3ZSAoaW50ZW50aW9uYWxseSkgZmFpbAogICAgICAgICAgICAgLy8gaHR0cC90ZXN0cy9z
ZWN1cml0eS94c3NBdWRpdG9yL2RvbS13cml0ZS1pbm5lckhUTUwuaHRtbAotICAgICAgICAgICAg
T3duUHRyPERpZEJsb2NrU2NyaXB0UmVxdWVzdD4gcmVxdWVzdCA9IG1feHNzQXVkaXRvci5maWx0
ZXJUb2tlbih0b2tlbigpKTsKKyAgICAgICAgICAgIE93blB0cjxEaWRCbG9ja1NjcmlwdFJlcXVl
c3Q+IHJlcXVlc3QgPSBtX3hzc0F1ZGl0b3IuZmlsdGVyVG9rZW4odG9rZW4oKSwgbV9zb3VyY2VU
cmFja2VyLCBkb2N1bWVudCgpLT5kZWNvZGVyKCkpOwogICAgICAgICAgICAgaWYgKHJlcXVlc3Qp
CiAgICAgICAgICAgICAgICAgbV94c3NBdWRpdG9yRGVsZWdhdGUuZGlkQmxvY2tTY3JpcHQocmVx
dWVzdC5yZWxlYXNlKCkpOwogICAgICAgICB9CkBAIC02NjUsMTEgKzY2NSw2IEBAIGJvb2wgSFRN
TERvY3VtZW50UGFyc2VyOjppc0V4ZWN1dGluZ1NjcmlwdCgpIGNvbnN0CiAgICAgcmV0dXJuIG1f
c2NyaXB0UnVubmVyLT5pc0V4ZWN1dGluZ1NjcmlwdCgpOwogfQogCi1TdHJpbmcgSFRNTERvY3Vt
ZW50UGFyc2VyOjpzb3VyY2VGb3JUb2tlbihjb25zdCBIVE1MVG9rZW4mIHRva2VuKQotewotICAg
IHJldHVybiBtX3NvdXJjZVRyYWNrZXIuc291cmNlRm9yVG9rZW4odG9rZW4pOwotfQotCiBPcmRp
bmFsTnVtYmVyIEhUTUxEb2N1bWVudFBhcnNlcjo6bGluZU51bWJlcigpIGNvbnN0CiB7CiAjaWYg
RU5BQkxFKFRIUkVBREVEX0hUTUxfUEFSU0VSKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3Bh
cnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaAppbmRleCBmNzIwZjRjMDFhMzk3MDBiZjUwMTZhNzJi
MzYyYWNhMzcyMTMxZTJhLi5hZTg2MjMzMDcwMWI0MWUwZmQzZDA1ODM5NmZlNjY1ZjFhYmNiYWRj
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJz
ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIu
aApAQCAtNzUsNyArNzUsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIHZvaWQgcGFyc2VEb2N1bWVu
dEZyYWdtZW50KGNvbnN0IFN0cmluZyYsIERvY3VtZW50RnJhZ21lbnQqLCBFbGVtZW50KiBjb250
ZXh0RWxlbWVudCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9uID0gQWxsb3dTY3JpcHRpbmdD
b250ZW50KTsKIAogICAgIEhUTUxUb2tlbml6ZXIqIHRva2VuaXplcigpIGNvbnN0IHsgcmV0dXJu
IG1fdG9rZW5pemVyLmdldCgpOyB9Ci0gICAgU3RyaW5nIHNvdXJjZUZvclRva2VuKGNvbnN0IEhU
TUxUb2tlbiYpOwogCiAgICAgdmlydHVhbCBUZXh0UG9zaXRpb24gdGV4dFBvc2l0aW9uKCkgY29u
c3Q7CiAgICAgdmlydHVhbCBPcmRpbmFsTnVtYmVyIGxpbmVOdW1iZXIoKSBjb25zdDsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuY3BwIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5jcHAKaW5kZXggNGIyZDVlODRkMDMyMjU4
MjBhYjg2ZDkzYzU2N2I3MjE5MGZhOGZiMC4uOTVjOGFjMWRlMTcwYzc3Nzg5ZGVmOThiMWViMzhi
ZmYwNjQ2MzllNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVk
aXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5jcHAK
QEAgLTI3Miw3ICsyNzIsNyBAQCB2b2lkIFhTU0F1ZGl0b3I6OmluaXQoRG9jdW1lbnQqIGRvY3Vt
ZW50KQogICAgIH0KIH0KIAotUGFzc093blB0cjxEaWRCbG9ja1NjcmlwdFJlcXVlc3Q+IFhTU0F1
ZGl0b3I6OmZpbHRlclRva2VuKEhUTUxUb2tlbiYgdG9rZW4pCitQYXNzT3duUHRyPERpZEJsb2Nr
U2NyaXB0UmVxdWVzdD4gWFNTQXVkaXRvcjo6ZmlsdGVyVG9rZW4oSFRNTFRva2VuJiB0b2tlbiwg
SFRNTFNvdXJjZVRyYWNrZXImIHNvdXJjZVRyYWNrZXIsIGNvbnN0IFRleHRSZXNvdXJjZURlY29k
ZXIqIGRlY29kZXIpCiB7CiAgICAgQVNTRVJUKG1fc3RhdGUgPT0gSW5pdGlhbGl6ZWQpOwogICAg
IGlmICghbV9pc0VuYWJsZWQgfHwgbV94c3NQcm90ZWN0aW9uID09IFhTU1Byb3RlY3Rpb25EaXNh
YmxlZCkKQEAgLTI4MCwxMCArMjgwLDEwIEBAIFBhc3NPd25QdHI8RGlkQmxvY2tTY3JpcHRSZXF1
ZXN0PiBYU1NBdWRpdG9yOjpmaWx0ZXJUb2tlbihIVE1MVG9rZW4mIHRva2VuKQogCiAgICAgYm9v
bCBkaWRCbG9ja1NjcmlwdCA9IGZhbHNlOwogICAgIGlmICh0b2tlbi50eXBlKCkgPT0gSFRNTFRv
a2VuVHlwZXM6OlN0YXJ0VGFnKQotICAgICAgICBkaWRCbG9ja1NjcmlwdCA9IGZpbHRlclN0YXJ0
VG9rZW4odG9rZW4pOworICAgICAgICBkaWRCbG9ja1NjcmlwdCA9IGZpbHRlclN0YXJ0VG9rZW4o
dG9rZW4sIHNvdXJjZVRyYWNrZXIsIGRlY29kZXIpOwogICAgIGVsc2UgaWYgKG1fc2NyaXB0VGFn
TmVzdGluZ0xldmVsKSB7CiAgICAgICAgIGlmICh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlw
ZXM6OkNoYXJhY3RlcikKLSAgICAgICAgICAgIGRpZEJsb2NrU2NyaXB0ID0gZmlsdGVyQ2hhcmFj
dGVyVG9rZW4odG9rZW4pOworICAgICAgICAgICAgZGlkQmxvY2tTY3JpcHQgPSBmaWx0ZXJDaGFy
YWN0ZXJUb2tlbih0b2tlbiwgc291cmNlVHJhY2tlciwgZGVjb2Rlcik7CiAgICAgICAgIGVsc2Ug
aWYgKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6RW5kVGFnKQogICAgICAgICAgICAg
ZmlsdGVyRW5kVG9rZW4odG9rZW4pOwogICAgIH0KQEAgLTMwMSwzMCArMzAxLDMwIEBAIFBhc3NP
d25QdHI8RGlkQmxvY2tTY3JpcHRSZXF1ZXN0PiBYU1NBdWRpdG9yOjpmaWx0ZXJUb2tlbihIVE1M
VG9rZW4mIHRva2VuKQogICAgIHJldHVybiBudWxscHRyOwogfQogCi1ib29sIFhTU0F1ZGl0b3I6
OmZpbHRlclN0YXJ0VG9rZW4oSFRNTFRva2VuJiB0b2tlbikKK2Jvb2wgWFNTQXVkaXRvcjo6Zmls
dGVyU3RhcnRUb2tlbihIVE1MVG9rZW4mIHRva2VuLCBIVE1MU291cmNlVHJhY2tlciYgc291cmNl
VHJhY2tlciwgY29uc3QgVGV4dFJlc291cmNlRGVjb2RlciogZGVjb2RlcikKIHsKLSAgICBib29s
IGRpZEJsb2NrU2NyaXB0ID0gZXJhc2VEYW5nZXJvdXNBdHRyaWJ1dGVzSWZJbmplY3RlZCh0b2tl
bik7CisgICAgYm9vbCBkaWRCbG9ja1NjcmlwdCA9IGVyYXNlRGFuZ2Vyb3VzQXR0cmlidXRlc0lm
SW5qZWN0ZWQodG9rZW4sIHNvdXJjZVRyYWNrZXIsIGRlY29kZXIpOwogCiAgICAgaWYgKGhhc05h
bWUodG9rZW4sIHNjcmlwdFRhZykpIHsKLSAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZmlsdGVy
U2NyaXB0VG9rZW4odG9rZW4pOworICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBmaWx0ZXJTY3Jp
cHRUb2tlbih0b2tlbiwgc291cmNlVHJhY2tlciwgZGVjb2Rlcik7CiAgICAgICAgIEFTU0VSVCht
X3Nob3VsZEFsbG93Q0RBVEEgfHwgIW1fc2NyaXB0VGFnTmVzdGluZ0xldmVsKTsKICAgICAgICAg
bV9zY3JpcHRUYWdOZXN0aW5nTGV2ZWwrKzsKICAgICB9IGVsc2UgaWYgKGhhc05hbWUodG9rZW4s
IG9iamVjdFRhZykpCi0gICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGZpbHRlck9iamVjdFRva2Vu
KHRva2VuKTsKKyAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZmlsdGVyT2JqZWN0VG9rZW4odG9r
ZW4sIHNvdXJjZVRyYWNrZXIsIGRlY29kZXIpOwogICAgIGVsc2UgaWYgKGhhc05hbWUodG9rZW4s
IHBhcmFtVGFnKSkKLSAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZmlsdGVyUGFyYW1Ub2tlbih0
b2tlbik7CisgICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGZpbHRlclBhcmFtVG9rZW4odG9rZW4s
IHNvdXJjZVRyYWNrZXIsIGRlY29kZXIpOwogICAgIGVsc2UgaWYgKGhhc05hbWUodG9rZW4sIGVt
YmVkVGFnKSkKLSAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZmlsdGVyRW1iZWRUb2tlbih0b2tl
bik7CisgICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGZpbHRlckVtYmVkVG9rZW4odG9rZW4sIHNv
dXJjZVRyYWNrZXIsIGRlY29kZXIpOwogICAgIGVsc2UgaWYgKGhhc05hbWUodG9rZW4sIGFwcGxl
dFRhZykpCi0gICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGZpbHRlckFwcGxldFRva2VuKHRva2Vu
KTsKKyAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZmlsdGVyQXBwbGV0VG9rZW4odG9rZW4sIHNv
dXJjZVRyYWNrZXIsIGRlY29kZXIpOwogICAgIGVsc2UgaWYgKGhhc05hbWUodG9rZW4sIGlmcmFt
ZVRhZykpCi0gICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGZpbHRlcklmcmFtZVRva2VuKHRva2Vu
KTsKKyAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZmlsdGVySWZyYW1lVG9rZW4odG9rZW4sIHNv
dXJjZVRyYWNrZXIsIGRlY29kZXIpOwogICAgIGVsc2UgaWYgKGhhc05hbWUodG9rZW4sIG1ldGFU
YWcpKQotICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBmaWx0ZXJNZXRhVG9rZW4odG9rZW4pOwor
ICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBmaWx0ZXJNZXRhVG9rZW4odG9rZW4sIHNvdXJjZVRy
YWNrZXIsIGRlY29kZXIpOwogICAgIGVsc2UgaWYgKGhhc05hbWUodG9rZW4sIGJhc2VUYWcpKQot
ICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBmaWx0ZXJCYXNlVG9rZW4odG9rZW4pOworICAgICAg
ICBkaWRCbG9ja1NjcmlwdCB8PSBmaWx0ZXJCYXNlVG9rZW4odG9rZW4sIHNvdXJjZVRyYWNrZXIs
IGRlY29kZXIpOwogICAgIGVsc2UgaWYgKGhhc05hbWUodG9rZW4sIGZvcm1UYWcpKQotICAgICAg
ICBkaWRCbG9ja1NjcmlwdCB8PSBmaWx0ZXJGb3JtVG9rZW4odG9rZW4pOworICAgICAgICBkaWRC
bG9ja1NjcmlwdCB8PSBmaWx0ZXJGb3JtVG9rZW4odG9rZW4sIHNvdXJjZVRyYWNrZXIsIGRlY29k
ZXIpOwogCiAgICAgcmV0dXJuIGRpZEJsb2NrU2NyaXB0OwogfQpAQCAtMzM4LDEwICszMzgsMTAg
QEAgdm9pZCBYU1NBdWRpdG9yOjpmaWx0ZXJFbmRUb2tlbihIVE1MVG9rZW4mIHRva2VuKQogICAg
IH0KIH0KIAotYm9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJDaGFyYWN0ZXJUb2tlbihIVE1MVG9rZW4m
IHRva2VuKQorYm9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJDaGFyYWN0ZXJUb2tlbihIVE1MVG9rZW4m
IHRva2VuLCBIVE1MU291cmNlVHJhY2tlciYgc291cmNlVHJhY2tlciwgY29uc3QgVGV4dFJlc291
cmNlRGVjb2RlciogZGVjb2RlcikKIHsKICAgICBBU1NFUlQobV9zY3JpcHRUYWdOZXN0aW5nTGV2
ZWwpOwotICAgIGlmIChpc0NvbnRhaW5lZEluUmVxdWVzdChtX2NhY2hlZERlY29kZWRTbmlwcGV0
KSAmJiBpc0NvbnRhaW5lZEluUmVxdWVzdChkZWNvZGVkU25pcHBldEZvckphdmFTY3JpcHQodG9r
ZW4pKSkgeworICAgIGlmIChpc0NvbnRhaW5lZEluUmVxdWVzdChtX2NhY2hlZERlY29kZWRTbmlw
cGV0KSAmJiBpc0NvbnRhaW5lZEluUmVxdWVzdChkZWNvZGVkU25pcHBldEZvckphdmFTY3JpcHQo
dG9rZW4sIHNvdXJjZVRyYWNrZXIsIGRlY29kZXIpKSkgewogICAgICAgICB0b2tlbi5lcmFzZUNo
YXJhY3RlcnMoKTsKICAgICAgICAgdG9rZW4uYXBwZW5kVG9DaGFyYWN0ZXIoJyAnKTsgLy8gVGVj
aG5pY2FsbHksIGNoYXJhY3RlciB0b2tlbnMgY2FuJ3QgYmUgZW1wdHkuCiAgICAgICAgIHJldHVy
biB0cnVlOwpAQCAtMzQ5LDM1ICszNDksMzUgQEAgYm9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJDaGFy
YWN0ZXJUb2tlbihIVE1MVG9rZW4mIHRva2VuKQogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9v
bCBYU1NBdWRpdG9yOjpmaWx0ZXJTY3JpcHRUb2tlbihIVE1MVG9rZW4mIHRva2VuKQorYm9vbCBY
U1NBdWRpdG9yOjpmaWx0ZXJTY3JpcHRUb2tlbihIVE1MVG9rZW4mIHRva2VuLCBIVE1MU291cmNl
VHJhY2tlciYgc291cmNlVHJhY2tlciwgY29uc3QgVGV4dFJlc291cmNlRGVjb2RlciogZGVjb2Rl
cikKIHsKICAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRh
Zyk7CiAgICAgQVNTRVJUKGhhc05hbWUodG9rZW4sIHNjcmlwdFRhZykpOwogCi0gICAgbV9jYWNo
ZWREZWNvZGVkU25pcHBldCA9IGRlY29kZWRTbmlwcGV0Rm9yTmFtZSh0b2tlbik7CisgICAgbV9j
YWNoZWREZWNvZGVkU25pcHBldCA9IGRlY29kZWRTbmlwcGV0Rm9yTmFtZSh0b2tlbiwgc291cmNl
VHJhY2tlciwgZGVjb2Rlcik7CiAgICAgbV9zaG91bGRBbGxvd0NEQVRBID0gbV9wYXJzZXItPnRv
a2VuaXplcigpLT5zaG91bGRBbGxvd0NEQVRBKCk7CiAKLSAgICBpZiAoaXNDb250YWluZWRJblJl
cXVlc3QoZGVjb2RlZFNuaXBwZXRGb3JOYW1lKHRva2VuKSkpCi0gICAgICAgIHJldHVybiBlcmFz
ZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIHNyY0F0dHIsIGJsYW5rVVJMKCkuc3RyaW5nKCks
IFNyY0xpa2VBdHRyaWJ1dGUpOworICAgIGlmIChpc0NvbnRhaW5lZEluUmVxdWVzdChkZWNvZGVk
U25pcHBldEZvck5hbWUodG9rZW4sIHNvdXJjZVRyYWNrZXIsIGRlY29kZXIpKSkKKyAgICAgICAg
cmV0dXJuIGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgc291cmNlVHJhY2tlciwgZGVj
b2Rlciwgc3JjQXR0ciwgYmxhbmtVUkwoKS5zdHJpbmcoKSwgU3JjTGlrZUF0dHJpYnV0ZSk7CiAK
ICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyT2JqZWN0VG9r
ZW4oSFRNTFRva2VuJiB0b2tlbikKK2Jvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyT2JqZWN0VG9rZW4o
SFRNTFRva2VuJiB0b2tlbiwgSFRNTFNvdXJjZVRyYWNrZXImIHNvdXJjZVRyYWNrZXIsIGNvbnN0
IFRleHRSZXNvdXJjZURlY29kZXIqIGRlY29kZXIpCiB7CiAgICAgQVNTRVJUKHRva2VuLnR5cGUo
KSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpOwogICAgIEFTU0VSVChoYXNOYW1lKHRva2Vu
LCBvYmplY3RUYWcpKTsKIAogICAgIGJvb2wgZGlkQmxvY2tTY3JpcHQgPSBmYWxzZTsKLSAgICBp
ZiAoaXNDb250YWluZWRJblJlcXVlc3QoZGVjb2RlZFNuaXBwZXRGb3JOYW1lKHRva2VuKSkpIHsK
LSAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHRva2Vu
LCBkYXRhQXR0ciwgYmxhbmtVUkwoKS5zdHJpbmcoKSwgU3JjTGlrZUF0dHJpYnV0ZSk7Ci0gICAg
ICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgdHlw
ZUF0dHIpOwotICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0
ZWQodG9rZW4sIGNsYXNzaWRBdHRyKTsKKyAgICBpZiAoaXNDb250YWluZWRJblJlcXVlc3QoZGVj
b2RlZFNuaXBwZXRGb3JOYW1lKHRva2VuLCBzb3VyY2VUcmFja2VyLCBkZWNvZGVyKSkpIHsKKyAg
ICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHRva2VuLCBz
b3VyY2VUcmFja2VyLCBkZWNvZGVyLCBkYXRhQXR0ciwgYmxhbmtVUkwoKS5zdHJpbmcoKSwgU3Jj
TGlrZUF0dHJpYnV0ZSk7CisgICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRl
SWZJbmplY3RlZCh0b2tlbiwgc291cmNlVHJhY2tlciwgZGVjb2RlciwgdHlwZUF0dHIpOworICAg
ICAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIHNv
dXJjZVRyYWNrZXIsIGRlY29kZXIsIGNsYXNzaWRBdHRyKTsKICAgICB9CiAgICAgcmV0dXJuIGRp
ZEJsb2NrU2NyaXB0OwogfQogCi1ib29sIFhTU0F1ZGl0b3I6OmZpbHRlclBhcmFtVG9rZW4oSFRN
TFRva2VuJiB0b2tlbikKK2Jvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyUGFyYW1Ub2tlbihIVE1MVG9r
ZW4mIHRva2VuLCBIVE1MU291cmNlVHJhY2tlciYgc291cmNlVHJhY2tlciwgY29uc3QgVGV4dFJl
c291cmNlRGVjb2RlciogZGVjb2RlcikKIHsKICAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhU
TUxUb2tlblR5cGVzOjpTdGFydFRhZyk7CiAgICAgQVNTRVJUKGhhc05hbWUodG9rZW4sIHBhcmFt
VGFnKSk7CkBAIC0zOTIsNzQgKzM5Miw3NCBAQCBib29sIFhTU0F1ZGl0b3I6OmZpbHRlclBhcmFt
VG9rZW4oSFRNTFRva2VuJiB0b2tlbikKICAgICBpZiAoIUhUTUxQYXJhbUVsZW1lbnQ6OmlzVVJM
UGFyYW1ldGVyKG5hbWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gZXJh
c2VBdHRyaWJ1dGVJZkluamVjdGVkKHRva2VuLCB2YWx1ZUF0dHIsIGJsYW5rVVJMKCkuc3RyaW5n
KCksIFNyY0xpa2VBdHRyaWJ1dGUpOworICAgIHJldHVybiBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0
ZWQodG9rZW4sIHNvdXJjZVRyYWNrZXIsIGRlY29kZXIsIHZhbHVlQXR0ciwgYmxhbmtVUkwoKS5z
dHJpbmcoKSwgU3JjTGlrZUF0dHJpYnV0ZSk7CiB9CiAKLWJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVy
RW1iZWRUb2tlbihIVE1MVG9rZW4mIHRva2VuKQorYm9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJFbWJl
ZFRva2VuKEhUTUxUb2tlbiYgdG9rZW4sIEhUTUxTb3VyY2VUcmFja2VyJiBzb3VyY2VUcmFja2Vy
LCBjb25zdCBUZXh0UmVzb3VyY2VEZWNvZGVyKiBkZWNvZGVyKQogewogICAgIEFTU0VSVCh0b2tl
bi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKICAgICBBU1NFUlQoaGFzTmFt
ZSh0b2tlbiwgZW1iZWRUYWcpKTsKIAogICAgIGJvb2wgZGlkQmxvY2tTY3JpcHQgPSBmYWxzZTsK
LSAgICBpZiAoaXNDb250YWluZWRJblJlcXVlc3QoZGVjb2RlZFNuaXBwZXRGb3JOYW1lKHRva2Vu
KSkpIHsKLSAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVk
KHRva2VuLCBjb2RlQXR0ciwgU3RyaW5nKCksIFNyY0xpa2VBdHRyaWJ1dGUpOwotICAgICAgICBk
aWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIHNyY0F0dHIs
IGJsYW5rVVJMKCkuc3RyaW5nKCksIFNyY0xpa2VBdHRyaWJ1dGUpOwotICAgICAgICBkaWRCbG9j
a1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIHR5cGVBdHRyKTsKKyAg
ICBpZiAoaXNDb250YWluZWRJblJlcXVlc3QoZGVjb2RlZFNuaXBwZXRGb3JOYW1lKHRva2VuLCBz
b3VyY2VUcmFja2VyLCBkZWNvZGVyKSkpIHsKKyAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJh
c2VBdHRyaWJ1dGVJZkluamVjdGVkKHRva2VuLCBzb3VyY2VUcmFja2VyLCBkZWNvZGVyLCBjb2Rl
QXR0ciwgU3RyaW5nKCksIFNyY0xpa2VBdHRyaWJ1dGUpOworICAgICAgICBkaWRCbG9ja1Njcmlw
dCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIHNvdXJjZVRyYWNrZXIsIGRlY29k
ZXIsIHNyY0F0dHIsIGJsYW5rVVJMKCkuc3RyaW5nKCksIFNyY0xpa2VBdHRyaWJ1dGUpOworICAg
ICAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIHNv
dXJjZVRyYWNrZXIsIGRlY29kZXIsIHR5cGVBdHRyKTsKICAgICB9CiAgICAgcmV0dXJuIGRpZEJs
b2NrU2NyaXB0OwogfQogCi1ib29sIFhTU0F1ZGl0b3I6OmZpbHRlckFwcGxldFRva2VuKEhUTUxU
b2tlbiYgdG9rZW4pCitib29sIFhTU0F1ZGl0b3I6OmZpbHRlckFwcGxldFRva2VuKEhUTUxUb2tl
biYgdG9rZW4sIEhUTUxTb3VyY2VUcmFja2VyJiBzb3VyY2VUcmFja2VyLCBjb25zdCBUZXh0UmVz
b3VyY2VEZWNvZGVyKiBkZWNvZGVyKQogewogICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRN
TFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKICAgICBBU1NFUlQoaGFzTmFtZSh0b2tlbiwgYXBwbGV0
VGFnKSk7CiAKICAgICBib29sIGRpZEJsb2NrU2NyaXB0ID0gZmFsc2U7Ci0gICAgaWYgKGlzQ29u
dGFpbmVkSW5SZXF1ZXN0KGRlY29kZWRTbmlwcGV0Rm9yTmFtZSh0b2tlbikpKSB7Ci0gICAgICAg
IGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgY29kZUF0
dHIsIFN0cmluZygpLCBTcmNMaWtlQXR0cmlidXRlKTsKLSAgICAgICAgZGlkQmxvY2tTY3JpcHQg
fD0gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHRva2VuLCBvYmplY3RBdHRyKTsKKyAgICBpZiAo
aXNDb250YWluZWRJblJlcXVlc3QoZGVjb2RlZFNuaXBwZXRGb3JOYW1lKHRva2VuLCBzb3VyY2VU
cmFja2VyLCBkZWNvZGVyKSkpIHsKKyAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRy
aWJ1dGVJZkluamVjdGVkKHRva2VuLCBzb3VyY2VUcmFja2VyLCBkZWNvZGVyLCBjb2RlQXR0ciwg
U3RyaW5nKCksIFNyY0xpa2VBdHRyaWJ1dGUpOworICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBl
cmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIHNvdXJjZVRyYWNrZXIsIGRlY29kZXIsIG9i
amVjdEF0dHIpOwogICAgIH0KICAgICByZXR1cm4gZGlkQmxvY2tTY3JpcHQ7CiB9CiAKLWJvb2wg
WFNTQXVkaXRvcjo6ZmlsdGVySWZyYW1lVG9rZW4oSFRNTFRva2VuJiB0b2tlbikKK2Jvb2wgWFNT
QXVkaXRvcjo6ZmlsdGVySWZyYW1lVG9rZW4oSFRNTFRva2VuJiB0b2tlbiwgSFRNTFNvdXJjZVRy
YWNrZXImIHNvdXJjZVRyYWNrZXIsIGNvbnN0IFRleHRSZXNvdXJjZURlY29kZXIqIGRlY29kZXIp
CiB7CiAgICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcp
OwogICAgIEFTU0VSVChoYXNOYW1lKHRva2VuLCBpZnJhbWVUYWcpKTsKIAogICAgIGJvb2wgZGlk
QmxvY2tTY3JpcHQgPSBmYWxzZTsKLSAgICBpZiAoaXNDb250YWluZWRJblJlcXVlc3QoZGVjb2Rl
ZFNuaXBwZXRGb3JOYW1lKHRva2VuKSkpIHsKLSAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJh
c2VBdHRyaWJ1dGVJZkluamVjdGVkKHRva2VuLCBzcmNBdHRyLCBTdHJpbmcoKSwgU3JjTGlrZUF0
dHJpYnV0ZSk7Ci0gICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmpl
Y3RlZCh0b2tlbiwgc3JjZG9jQXR0ciwgU3RyaW5nKCksIFNjcmlwdExpa2VBdHRyaWJ1dGUpOwor
ICAgIGlmIChpc0NvbnRhaW5lZEluUmVxdWVzdChkZWNvZGVkU25pcHBldEZvck5hbWUodG9rZW4s
IHNvdXJjZVRyYWNrZXIsIGRlY29kZXIpKSkgeworICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBl
cmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIHNvdXJjZVRyYWNrZXIsIGRlY29kZXIsIHNy
Y0F0dHIsIFN0cmluZygpLCBTcmNMaWtlQXR0cmlidXRlKTsKKyAgICAgICAgZGlkQmxvY2tTY3Jp
cHQgfD0gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHRva2VuLCBzb3VyY2VUcmFja2VyLCBkZWNv
ZGVyLCBzcmNkb2NBdHRyLCBTdHJpbmcoKSwgU2NyaXB0TGlrZUF0dHJpYnV0ZSk7CiAgICAgfQog
ICAgIHJldHVybiBkaWRCbG9ja1NjcmlwdDsKIH0KIAotYm9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJN
ZXRhVG9rZW4oSFRNTFRva2VuJiB0b2tlbikKK2Jvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyTWV0YVRv
a2VuKEhUTUxUb2tlbiYgdG9rZW4sIEhUTUxTb3VyY2VUcmFja2VyJiBzb3VyY2VUcmFja2VyLCBj
b25zdCBUZXh0UmVzb3VyY2VEZWNvZGVyKiBkZWNvZGVyKQogewogICAgIEFTU0VSVCh0b2tlbi50
eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKICAgICBBU1NFUlQoaGFzTmFtZSh0
b2tlbiwgbWV0YVRhZykpOwogCi0gICAgcmV0dXJuIGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0
b2tlbiwgaHR0cF9lcXVpdkF0dHIpOworICAgIHJldHVybiBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0
ZWQodG9rZW4sIHNvdXJjZVRyYWNrZXIsIGRlY29kZXIsIGh0dHBfZXF1aXZBdHRyKTsKIH0KIAot
Ym9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJCYXNlVG9rZW4oSFRNTFRva2VuJiB0b2tlbikKK2Jvb2wg
WFNTQXVkaXRvcjo6ZmlsdGVyQmFzZVRva2VuKEhUTUxUb2tlbiYgdG9rZW4sIEhUTUxTb3VyY2VU
cmFja2VyJiBzb3VyY2VUcmFja2VyLCBjb25zdCBUZXh0UmVzb3VyY2VEZWNvZGVyKiBkZWNvZGVy
KQogewogICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFn
KTsKICAgICBBU1NFUlQoaGFzTmFtZSh0b2tlbiwgYmFzZVRhZykpOwogCi0gICAgcmV0dXJuIGVy
YXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgaHJlZkF0dHIpOworICAgIHJldHVybiBlcmFz
ZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIHNvdXJjZVRyYWNrZXIsIGRlY29kZXIsIGhyZWZB
dHRyKTsKIH0KIAotYm9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJGb3JtVG9rZW4oSFRNTFRva2VuJiB0
b2tlbikKK2Jvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyRm9ybVRva2VuKEhUTUxUb2tlbiYgdG9rZW4s
IEhUTUxTb3VyY2VUcmFja2VyJiBzb3VyY2VUcmFja2VyLCBjb25zdCBUZXh0UmVzb3VyY2VEZWNv
ZGVyKiBkZWNvZGVyKQogewogICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlw
ZXM6OlN0YXJ0VGFnKTsKICAgICBBU1NFUlQoaGFzTmFtZSh0b2tlbiwgZm9ybVRhZykpOwogCi0g
ICAgcmV0dXJuIGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgYWN0aW9uQXR0ciwgYmxh
bmtVUkwoKS5zdHJpbmcoKSk7CisgICAgcmV0dXJuIGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0
b2tlbiwgc291cmNlVHJhY2tlciwgZGVjb2RlciwgYWN0aW9uQXR0ciwgYmxhbmtVUkwoKS5zdHJp
bmcoKSk7CiB9CiAKLWJvb2wgWFNTQXVkaXRvcjo6ZXJhc2VEYW5nZXJvdXNBdHRyaWJ1dGVzSWZJ
bmplY3RlZChIVE1MVG9rZW4mIHRva2VuKQorYm9vbCBYU1NBdWRpdG9yOjplcmFzZURhbmdlcm91
c0F0dHJpYnV0ZXNJZkluamVjdGVkKEhUTUxUb2tlbiYgdG9rZW4sIEhUTUxTb3VyY2VUcmFja2Vy
JiBzb3VyY2VUcmFja2VyLCBjb25zdCBUZXh0UmVzb3VyY2VEZWNvZGVyKiBkZWNvZGVyKQogewog
ICAgIERFRklORV9TVEFUSUNfTE9DQUwoU3RyaW5nLCBzYWZlSmF2YVNjcmlwdFVSTCwgKEFTQ0lJ
TGl0ZXJhbCgiamF2YXNjcmlwdDp2b2lkKDApIikpKTsKIApAQCAtNDcwLDcgKzQ3MCw3IEBAIGJv
b2wgWFNTQXVkaXRvcjo6ZXJhc2VEYW5nZXJvdXNBdHRyaWJ1dGVzSWZJbmplY3RlZChIVE1MVG9r
ZW4mIHRva2VuKQogICAgICAgICBib29sIHZhbHVlQ29udGFpbnNKYXZhU2NyaXB0VVJMID0gIWlz
SW5saW5lRXZlbnRIYW5kbGVyICYmIHByb3RvY29sSXNKYXZhU2NyaXB0KHN0cmlwTGVhZGluZ0Fu
ZFRyYWlsaW5nSFRNTFNwYWNlcyhTdHJpbmcoYXR0cmlidXRlLm1fdmFsdWUuZGF0YSgpLCBhdHRy
aWJ1dGUubV92YWx1ZS5zaXplKCkpKSk7CiAgICAgICAgIGlmICghaXNJbmxpbmVFdmVudEhhbmRs
ZXIgJiYgIXZhbHVlQ29udGFpbnNKYXZhU2NyaXB0VVJMKQogICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIGlmICghaXNDb250YWluZWRJblJlcXVlc3QoZGVjb2RlZFNuaXBwZXRGb3JBdHRy
aWJ1dGUodG9rZW4sIGF0dHJpYnV0ZSwgU2NyaXB0TGlrZUF0dHJpYnV0ZSkpKQorICAgICAgICBp
ZiAoIWlzQ29udGFpbmVkSW5SZXF1ZXN0KGRlY29kZWRTbmlwcGV0Rm9yQXR0cmlidXRlKHRva2Vu
LCBzb3VyY2VUcmFja2VyLCBkZWNvZGVyLCBhdHRyaWJ1dGUsIFNjcmlwdExpa2VBdHRyaWJ1dGUp
KSkKICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICB0b2tlbi5lcmFzZVZhbHVlT2ZBdHRy
aWJ1dGUoaSk7CiAgICAgICAgIGlmICh2YWx1ZUNvbnRhaW5zSmF2YVNjcmlwdFVSTCkKQEAgLTQ4
MCwxMiArNDgwLDEyIEBAIGJvb2wgWFNTQXVkaXRvcjo6ZXJhc2VEYW5nZXJvdXNBdHRyaWJ1dGVz
SWZJbmplY3RlZChIVE1MVG9rZW4mIHRva2VuKQogICAgIHJldHVybiBkaWRCbG9ja1NjcmlwdDsK
IH0KIAotYm9vbCBYU1NBdWRpdG9yOjplcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQoSFRNTFRva2Vu
JiB0b2tlbiwgY29uc3QgUXVhbGlmaWVkTmFtZSYgYXR0cmlidXRlTmFtZSwgY29uc3QgU3RyaW5n
JiByZXBsYWNlbWVudFZhbHVlLCBBdHRyaWJ1dGVLaW5kIHRyZWF0bWVudCkKK2Jvb2wgWFNTQXVk
aXRvcjo6ZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKEhUTUxUb2tlbiYgdG9rZW4sIEhUTUxTb3Vy
Y2VUcmFja2VyJiBzb3VyY2VUcmFja2VyLCBjb25zdCBUZXh0UmVzb3VyY2VEZWNvZGVyKiBkZWNv
ZGVyLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBTdHJpbmcmIHJl
cGxhY2VtZW50VmFsdWUsIEF0dHJpYnV0ZUtpbmQgdHJlYXRtZW50KQogewogICAgIHNpemVfdCBp
bmRleE9mQXR0cmlidXRlID0gMDsKICAgICBpZiAoZmluZEF0dHJpYnV0ZVdpdGhOYW1lKHRva2Vu
LCBhdHRyaWJ1dGVOYW1lLCBpbmRleE9mQXR0cmlidXRlKSkgewogICAgICAgICBjb25zdCBIVE1M
VG9rZW46OkF0dHJpYnV0ZSYgYXR0cmlidXRlID0gdG9rZW4uYXR0cmlidXRlcygpLmF0KGluZGV4
T2ZBdHRyaWJ1dGUpOwotICAgICAgICBpZiAoaXNDb250YWluZWRJblJlcXVlc3QoZGVjb2RlZFNu
aXBwZXRGb3JBdHRyaWJ1dGUodG9rZW4sIGF0dHJpYnV0ZSwgdHJlYXRtZW50KSkpIHsKKyAgICAg
ICAgaWYgKGlzQ29udGFpbmVkSW5SZXF1ZXN0KGRlY29kZWRTbmlwcGV0Rm9yQXR0cmlidXRlKHRv
a2VuLCBzb3VyY2VUcmFja2VyLCBkZWNvZGVyLCBhdHRyaWJ1dGUsIHRyZWF0bWVudCkpKSB7CiAg
ICAgICAgICAgICBpZiAoYXR0cmlidXRlTmFtZSA9PSBzcmNBdHRyICYmIGlzTGlrZWx5U2FmZVJl
c291cmNlKFN0cmluZyhhdHRyaWJ1dGUubV92YWx1ZS5kYXRhKCksIGF0dHJpYnV0ZS5tX3ZhbHVl
LnNpemUoKSkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgIGlm
IChhdHRyaWJ1dGVOYW1lID09IGh0dHBfZXF1aXZBdHRyICYmICFpc0Rhbmdlcm91c0hUVFBFcXVp
dihTdHJpbmcoYXR0cmlidXRlLm1fdmFsdWUuZGF0YSgpLCBhdHRyaWJ1dGUubV92YWx1ZS5zaXpl
KCkpKSkKQEAgLTQ5OSwxMyArNDk5LDEzIEBAIGJvb2wgWFNTQXVkaXRvcjo6ZXJhc2VBdHRyaWJ1
dGVJZkluamVjdGVkKEhUTUxUb2tlbiYgdG9rZW4sIGNvbnN0IFF1YWxpZmllZE5hbWUmCiAgICAg
cmV0dXJuIGZhbHNlOwogfQogCi1TdHJpbmcgWFNTQXVkaXRvcjo6ZGVjb2RlZFNuaXBwZXRGb3JO
YW1lKGNvbnN0IEhUTUxUb2tlbiYgdG9rZW4pCitTdHJpbmcgWFNTQXVkaXRvcjo6ZGVjb2RlZFNu
aXBwZXRGb3JOYW1lKGNvbnN0IEhUTUxUb2tlbiYgdG9rZW4sIEhUTUxTb3VyY2VUcmFja2VyJiBz
b3VyY2VUcmFja2VyLCBjb25zdCBUZXh0UmVzb3VyY2VEZWNvZGVyKiBkZWNvZGVyKQogewogICAg
IC8vIEdyYWIgYSBmaXhlZCBudW1iZXIgb2YgY2hhcmFjdGVycyBlcXVhbCB0byB0aGUgbGVuZ3Ro
IG9mIHRoZSB0b2tlbidzIG5hbWUgcGx1cyBvbmUgKHRvIGFjY291bnQgZm9yIHRoZSAiPCIpLgot
ICAgIHJldHVybiBmdWxseURlY29kZVN0cmluZyhtX3BhcnNlci0+c291cmNlRm9yVG9rZW4odG9r
ZW4pLCBtX3BhcnNlci0+ZG9jdW1lbnQoKS0+ZGVjb2RlcigpKS5zdWJzdHJpbmcoMCwgdG9rZW4u
bmFtZSgpLnNpemUoKSArIDEpOworICAgIHJldHVybiBmdWxseURlY29kZVN0cmluZyhzb3VyY2VU
cmFja2VyLnNvdXJjZUZvclRva2VuKHRva2VuKSwgZGVjb2Rlcikuc3Vic3RyaW5nKDAsIHRva2Vu
Lm5hbWUoKS5zaXplKCkgKyAxKTsKIH0KIAotU3RyaW5nIFhTU0F1ZGl0b3I6OmRlY29kZWRTbmlw
cGV0Rm9yQXR0cmlidXRlKGNvbnN0IEhUTUxUb2tlbiYgdG9rZW4sIGNvbnN0IEhUTUxUb2tlbjo6
QXR0cmlidXRlJiBhdHRyaWJ1dGUsIEF0dHJpYnV0ZUtpbmQgdHJlYXRtZW50KQorU3RyaW5nIFhT
U0F1ZGl0b3I6OmRlY29kZWRTbmlwcGV0Rm9yQXR0cmlidXRlKGNvbnN0IEhUTUxUb2tlbiYgdG9r
ZW4sIEhUTUxTb3VyY2VUcmFja2VyJiBzb3VyY2VUcmFja2VyLCBjb25zdCBUZXh0UmVzb3VyY2VE
ZWNvZGVyKiBkZWNvZGVyLCBjb25zdCBIVE1MVG9rZW46OkF0dHJpYnV0ZSYgYXR0cmlidXRlLCBB
dHRyaWJ1dGVLaW5kIHRyZWF0bWVudCkKIHsKICAgICAvLyBUaGUgcmFuZ2UgZG9lc24ndCBpbmxj
dWRlIHRoZSBjaGFyYWN0ZXIgd2hpY2ggdGVybWluYXRlcyB0aGUgdmFsdWUuIFNvLAogICAgIC8v
IGZvciBhbiBpbnB1dCBvZiB8bmFtZT0idmFsdWUifCwgdGhlIHNuaXBwZXQgaXMgfG5hbWU9InZh
bHVlfC4gRm9yIGFuCkBAIC01MTMsNyArNTEzLDcgQEAgU3RyaW5nIFhTU0F1ZGl0b3I6OmRlY29k
ZWRTbmlwcGV0Rm9yQXR0cmlidXRlKGNvbnN0IEhUTUxUb2tlbiYgdG9rZW4sIGNvbnN0IEhUTUwK
ICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGdyYWIgb25lIGNoYXJhY3RlciBiZWZvcmUgdGhlIG5h
bWUgYWxzby4KICAgICBpbnQgc3RhcnQgPSBhdHRyaWJ1dGUubV9uYW1lUmFuZ2UubV9zdGFydCAt
IHRva2VuLnN0YXJ0SW5kZXgoKTsKICAgICBpbnQgZW5kID0gYXR0cmlidXRlLm1fdmFsdWVSYW5n
ZS5tX2VuZCAtIHRva2VuLnN0YXJ0SW5kZXgoKTsKLSAgICBTdHJpbmcgZGVjb2RlZFNuaXBwZXQg
PSBmdWxseURlY29kZVN0cmluZyhtX3BhcnNlci0+c291cmNlRm9yVG9rZW4odG9rZW4pLnN1YnN0
cmluZyhzdGFydCwgZW5kIC0gc3RhcnQpLCBtX3BhcnNlci0+ZG9jdW1lbnQoKS0+ZGVjb2Rlcigp
KTsKKyAgICBTdHJpbmcgZGVjb2RlZFNuaXBwZXQgPSBmdWxseURlY29kZVN0cmluZyhzb3VyY2VU
cmFja2VyLnNvdXJjZUZvclRva2VuKHRva2VuKS5zdWJzdHJpbmcoc3RhcnQsIGVuZCAtIHN0YXJ0
KSwgZGVjb2Rlcik7CiAgICAgZGVjb2RlZFNuaXBwZXQudHJ1bmNhdGUoa01heGltdW1GcmFnbWVu
dExlbmd0aFRhcmdldCk7CiAgICAgaWYgKHRyZWF0bWVudCA9PSBTcmNMaWtlQXR0cmlidXRlKSB7
CiAgICAgICAgIGludCBzbGFzaENvdW50ID0gMDsKQEAgLTU2NCw5ICs1NjQsOSBAQCBTdHJpbmcg
WFNTQXVkaXRvcjo6ZGVjb2RlZFNuaXBwZXRGb3JBdHRyaWJ1dGUoY29uc3QgSFRNTFRva2VuJiB0
b2tlbiwgY29uc3QgSFRNTAogICAgIHJldHVybiBkZWNvZGVkU25pcHBldDsKIH0KIAotU3RyaW5n
IFhTU0F1ZGl0b3I6OmRlY29kZWRTbmlwcGV0Rm9ySmF2YVNjcmlwdChjb25zdCBIVE1MVG9rZW4m
IHRva2VuKQorU3RyaW5nIFhTU0F1ZGl0b3I6OmRlY29kZWRTbmlwcGV0Rm9ySmF2YVNjcmlwdChj
b25zdCBIVE1MVG9rZW4mIHRva2VuLCBIVE1MU291cmNlVHJhY2tlciYgc291cmNlVHJhY2tlciwg
Y29uc3QgVGV4dFJlc291cmNlRGVjb2RlciogZGVjb2RlcikKIHsKLSAgICBTdHJpbmcgc3RyaW5n
ID0gbV9wYXJzZXItPnNvdXJjZUZvclRva2VuKHRva2VuKTsKKyAgICBTdHJpbmcgc3RyaW5nID0g
c291cmNlVHJhY2tlci5zb3VyY2VGb3JUb2tlbih0b2tlbik7CiAgICAgc2l6ZV90IHN0YXJ0UG9z
aXRpb24gPSAwOwogICAgIHNpemVfdCBlbmRQb3NpdGlvbiA9IHN0cmluZy5sZW5ndGgoKTsKICAg
ICBzaXplX3QgZm91bmRQb3NpdGlvbiA9IG5vdEZvdW5kOwpAQCAtNjIxLDcgKzYyMSw3IEBAIFN0
cmluZyBYU1NBdWRpdG9yOjpkZWNvZGVkU25pcHBldEZvckphdmFTY3JpcHQoY29uc3QgSFRNTFRv
a2VuJiB0b2tlbikKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHJlc3VsdCA9
IGZ1bGx5RGVjb2RlU3RyaW5nKHN0cmluZy5zdWJzdHJpbmcoc3RhcnRQb3NpdGlvbiwgZm91bmRQ
b3NpdGlvbiAtIHN0YXJ0UG9zaXRpb24pLCBtX3BhcnNlci0+ZG9jdW1lbnQoKS0+ZGVjb2Rlcigp
KTsKKyAgICAgICAgcmVzdWx0ID0gZnVsbHlEZWNvZGVTdHJpbmcoc3RyaW5nLnN1YnN0cmluZyhz
dGFydFBvc2l0aW9uLCBmb3VuZFBvc2l0aW9uIC0gc3RhcnRQb3NpdGlvbiksIGRlY29kZXIpOwog
ICAgICAgICBzdGFydFBvc2l0aW9uID0gZm91bmRQb3NpdGlvbiArIDE7CiAgICAgfQogICAgIHJl
dHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9YU1NB
dWRpdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9YU1NBdWRpdG9yLmgKaW5kZXgg
MmJkMTdiNTVjZjMxYzk1YThhNmU0OGRiMDc4MzE2NDFkYzg4YzZhOC4uY2I5N2I1NzZlNDU4NjM2
YzdhOWI0MDljY2Y2NDk1OTc2ZGM5Mjg3OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvWFNTQXVkaXRvci5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hT
U0F1ZGl0b3IuaApAQCAtMzYsNiArMzYsOCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBE
aWRCbG9ja1NjcmlwdFJlcXVlc3Q7CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEhUTUxEb2N1bWVu
dFBhcnNlcjsKK2NsYXNzIEhUTUxTb3VyY2VUcmFja2VyOworY2xhc3MgVGV4dFJlc291cmNlRGVj
b2RlcjsKIAogY2xhc3MgWFNTQXVkaXRvciB7CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoWFNT
QXVkaXRvcik7CkBAIC00Myw3ICs0NSw3IEBAIHB1YmxpYzoKICAgICBleHBsaWNpdCBYU1NBdWRp
dG9yKEhUTUxEb2N1bWVudFBhcnNlciopOwogCiAgICAgdm9pZCBpbml0KERvY3VtZW50Kik7Ci0g
ICAgUGFzc093blB0cjxEaWRCbG9ja1NjcmlwdFJlcXVlc3Q+IGZpbHRlclRva2VuKEhUTUxUb2tl
biYpOworICAgIFBhc3NPd25QdHI8RGlkQmxvY2tTY3JpcHRSZXF1ZXN0PiBmaWx0ZXJUb2tlbihI
VE1MVG9rZW4mLCBIVE1MU291cmNlVHJhY2tlciYsIGNvbnN0IFRleHRSZXNvdXJjZURlY29kZXIq
KTsKIAogcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtNYXhpbXVtRnJhZ21lbnRM
ZW5ndGhUYXJnZXQgPSAxMDA7CkBAIC01OSwyNiArNjEsMjYgQEAgcHJpdmF0ZToKICAgICAgICAg
U2NyaXB0TGlrZUF0dHJpYnV0ZQogICAgIH07CiAKLSAgICBib29sIGZpbHRlclN0YXJ0VG9rZW4o
SFRNTFRva2VuJik7CisgICAgYm9vbCBmaWx0ZXJTdGFydFRva2VuKEhUTUxUb2tlbiYsIEhUTUxT
b3VyY2VUcmFja2VyJiwgY29uc3QgVGV4dFJlc291cmNlRGVjb2RlciopOwogICAgIHZvaWQgZmls
dGVyRW5kVG9rZW4oSFRNTFRva2VuJik7Ci0gICAgYm9vbCBmaWx0ZXJDaGFyYWN0ZXJUb2tlbihI
VE1MVG9rZW4mKTsKLSAgICBib29sIGZpbHRlclNjcmlwdFRva2VuKEhUTUxUb2tlbiYpOwotICAg
IGJvb2wgZmlsdGVyT2JqZWN0VG9rZW4oSFRNTFRva2VuJik7Ci0gICAgYm9vbCBmaWx0ZXJQYXJh
bVRva2VuKEhUTUxUb2tlbiYpOwotICAgIGJvb2wgZmlsdGVyRW1iZWRUb2tlbihIVE1MVG9rZW4m
KTsKLSAgICBib29sIGZpbHRlckFwcGxldFRva2VuKEhUTUxUb2tlbiYpOwotICAgIGJvb2wgZmls
dGVySWZyYW1lVG9rZW4oSFRNTFRva2VuJik7Ci0gICAgYm9vbCBmaWx0ZXJNZXRhVG9rZW4oSFRN
TFRva2VuJik7Ci0gICAgYm9vbCBmaWx0ZXJCYXNlVG9rZW4oSFRNTFRva2VuJik7Ci0gICAgYm9v
bCBmaWx0ZXJGb3JtVG9rZW4oSFRNTFRva2VuJik7Ci0KLSAgICBib29sIGVyYXNlRGFuZ2Vyb3Vz
QXR0cmlidXRlc0lmSW5qZWN0ZWQoSFRNTFRva2VuJik7Ci0gICAgYm9vbCBlcmFzZUF0dHJpYnV0
ZUlmSW5qZWN0ZWQoSFRNTFRva2VuJiwgY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZW1lbnRWYWx1ZSA9IFN0cmluZygpLCBBdHRyaWJ1dGVLaW5kIHRyZWF0bWVudCA9
IE5vcm1hbEF0dHJpYnV0ZSk7CisgICAgYm9vbCBmaWx0ZXJDaGFyYWN0ZXJUb2tlbihIVE1MVG9r
ZW4mLCBIVE1MU291cmNlVHJhY2tlciYsIGNvbnN0IFRleHRSZXNvdXJjZURlY29kZXIqKTsKKyAg
ICBib29sIGZpbHRlclNjcmlwdFRva2VuKEhUTUxUb2tlbiYsIEhUTUxTb3VyY2VUcmFja2VyJiwg
Y29uc3QgVGV4dFJlc291cmNlRGVjb2RlciopOworICAgIGJvb2wgZmlsdGVyT2JqZWN0VG9rZW4o
SFRNTFRva2VuJiwgSFRNTFNvdXJjZVRyYWNrZXImLCBjb25zdCBUZXh0UmVzb3VyY2VEZWNvZGVy
Kik7CisgICAgYm9vbCBmaWx0ZXJQYXJhbVRva2VuKEhUTUxUb2tlbiYsIEhUTUxTb3VyY2VUcmFj
a2VyJiwgY29uc3QgVGV4dFJlc291cmNlRGVjb2RlciopOworICAgIGJvb2wgZmlsdGVyRW1iZWRU
b2tlbihIVE1MVG9rZW4mLCBIVE1MU291cmNlVHJhY2tlciYsIGNvbnN0IFRleHRSZXNvdXJjZURl
Y29kZXIqKTsKKyAgICBib29sIGZpbHRlckFwcGxldFRva2VuKEhUTUxUb2tlbiYsIEhUTUxTb3Vy
Y2VUcmFja2VyJiwgY29uc3QgVGV4dFJlc291cmNlRGVjb2RlciopOworICAgIGJvb2wgZmlsdGVy
SWZyYW1lVG9rZW4oSFRNTFRva2VuJiwgSFRNTFNvdXJjZVRyYWNrZXImLCBjb25zdCBUZXh0UmVz
b3VyY2VEZWNvZGVyKik7CisgICAgYm9vbCBmaWx0ZXJNZXRhVG9rZW4oSFRNTFRva2VuJiwgSFRN
TFNvdXJjZVRyYWNrZXImLCBjb25zdCBUZXh0UmVzb3VyY2VEZWNvZGVyKik7CisgICAgYm9vbCBm
aWx0ZXJCYXNlVG9rZW4oSFRNTFRva2VuJiwgSFRNTFNvdXJjZVRyYWNrZXImLCBjb25zdCBUZXh0
UmVzb3VyY2VEZWNvZGVyKik7CisgICAgYm9vbCBmaWx0ZXJGb3JtVG9rZW4oSFRNTFRva2VuJiwg
SFRNTFNvdXJjZVRyYWNrZXImLCBjb25zdCBUZXh0UmVzb3VyY2VEZWNvZGVyKik7CisKKyAgICBi
b29sIGVyYXNlRGFuZ2Vyb3VzQXR0cmlidXRlc0lmSW5qZWN0ZWQoSFRNTFRva2VuJiwgSFRNTFNv
dXJjZVRyYWNrZXImLCBjb25zdCBUZXh0UmVzb3VyY2VEZWNvZGVyKik7CisgICAgYm9vbCBlcmFz
ZUF0dHJpYnV0ZUlmSW5qZWN0ZWQoSFRNTFRva2VuJiwgSFRNTFNvdXJjZVRyYWNrZXImLCBjb25z
dCBUZXh0UmVzb3VyY2VEZWNvZGVyKiwgY29uc3QgUXVhbGlmaWVkTmFtZSYsIGNvbnN0IFN0cmlu
ZyYgcmVwbGFjZW1lbnRWYWx1ZSA9IFN0cmluZygpLCBBdHRyaWJ1dGVLaW5kIHRyZWF0bWVudCA9
IE5vcm1hbEF0dHJpYnV0ZSk7CiAKICAgICBTdHJpbmcgZGVjb2RlZFNuaXBwZXRGb3JUb2tlbihj
b25zdCBIVE1MVG9rZW4mKTsKLSAgICBTdHJpbmcgZGVjb2RlZFNuaXBwZXRGb3JOYW1lKGNvbnN0
IEhUTUxUb2tlbiYpOwotICAgIFN0cmluZyBkZWNvZGVkU25pcHBldEZvckF0dHJpYnV0ZShjb25z
dCBIVE1MVG9rZW4mLCBjb25zdCBIVE1MVG9rZW46OkF0dHJpYnV0ZSYsIEF0dHJpYnV0ZUtpbmQg
dHJlYXRtZW50ID0gTm9ybWFsQXR0cmlidXRlKTsKLSAgICBTdHJpbmcgZGVjb2RlZFNuaXBwZXRG
b3JKYXZhU2NyaXB0KGNvbnN0IEhUTUxUb2tlbiYpOworICAgIFN0cmluZyBkZWNvZGVkU25pcHBl
dEZvck5hbWUoY29uc3QgSFRNTFRva2VuJiwgSFRNTFNvdXJjZVRyYWNrZXImLCBjb25zdCBUZXh0
UmVzb3VyY2VEZWNvZGVyKik7CisgICAgU3RyaW5nIGRlY29kZWRTbmlwcGV0Rm9yQXR0cmlidXRl
KGNvbnN0IEhUTUxUb2tlbiYsIEhUTUxTb3VyY2VUcmFja2VyJiwgY29uc3QgVGV4dFJlc291cmNl
RGVjb2RlciosIGNvbnN0IEhUTUxUb2tlbjo6QXR0cmlidXRlJiwgQXR0cmlidXRlS2luZCB0cmVh
dG1lbnQgPSBOb3JtYWxBdHRyaWJ1dGUpOworICAgIFN0cmluZyBkZWNvZGVkU25pcHBldEZvckph
dmFTY3JpcHQoY29uc3QgSFRNTFRva2VuJiwgSFRNTFNvdXJjZVRyYWNrZXImLCBjb25zdCBUZXh0
UmVzb3VyY2VEZWNvZGVyKik7CiAKICAgICBib29sIGlzQ29udGFpbmVkSW5SZXF1ZXN0KGNvbnN0
IFN0cmluZyYpOwogICAgIGJvb2wgaXNMaWtlbHlTYWZlUmVzb3VyY2UoY29uc3QgU3RyaW5nJiB1
cmwpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186240</attachid>
            <date>2013-02-02 16:31:32 -0800</date>
            <delta_ts>2013-02-03 12:36:59 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108698-20130202162814.patch</filename>
            <type>text/plain</type>
            <size>25813</size>
            <attacher name="Tony Gentilcore">tonyg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxNzA4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGZkYTM0ODc2YjI1ZTcw
MmFlYWY1ZGQxMmI2MDA2NWEzYmZjYWE1YS4uYmQ1Y2Y1Yzc0NTU2YjI3NTZjN2Y2NjgyMjA5NzRm
NWY5ZmQyNTA2OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM5IEBACisyMDEzLTAyLTAyICBUb255
IEdlbnRpbGNvcmUgIDx0b255Z0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ29udGludWUgbWFr
aW5nIFhTU0F1ZGl0b3IgdGhyZWFkIHNhZmU6IFJlbW92ZSBkZXBlbmRlbmN5IG9uIHBhcnNlcidz
IHNvdXJjZUZvclRva2VuIGFuZCBUZXh0UmVzb3VyY2VEZWNvZGVyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDg2OTgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSBubyBu
ZXcgZnVuY3Rpb25hbGl0eS4KKworICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBh
cnNlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OnB1bXBUb2tl
bml6ZXIpOgorICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oOgorICAg
ICAgICAqIGh0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFNT
QXVkaXRvcjo6ZmlsdGVyVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6Zmls
dGVyU3RhcnRUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0ZXJDaGFy
YWN0ZXJUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0ZXJTY3JpcHRU
b2tlbik6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0ZXJPYmplY3RUb2tlbik6
CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0ZXJQYXJhbVRva2VuKToKKyAgICAg
ICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmZpbHRlckVtYmVkVG9rZW4pOgorICAgICAgICAoV2Vi
Q29yZTo6WFNTQXVkaXRvcjo6ZmlsdGVyQXBwbGV0VG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6
WFNTQXVkaXRvcjo6ZmlsdGVySWZyYW1lVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVk
aXRvcjo6ZmlsdGVyTWV0YVRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmZp
bHRlckJhc2VUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0ZXJGb3Jt
VG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6ZXJhc2VEYW5nZXJvdXNBdHRy
aWJ1dGVzSWZJbmplY3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjplcmFzZUF0
dHJpYnV0ZUlmSW5qZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6ZGVjb2Rl
ZFNuaXBwZXRGb3JOYW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmRlY29kZWRT
bmlwcGV0Rm9yQXR0cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmRlY29k
ZWRTbmlwcGV0Rm9ySmF2YVNjcmlwdCk6CisgICAgICAgICogaHRtbC9wYXJzZXIvWFNTQXVkaXRv
ci5oOgorICAgICAgICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJUb2tlblJl
cXVlc3Q6OkZpbHRlclRva2VuUmVxdWVzdCk6CisgICAgICAgIChGaWx0ZXJUb2tlblJlcXVlc3Qp
OgorICAgICAgICAoWFNTQXVkaXRvcik6CisKIDIwMTMtMDItMDIgIEp1biBKaWFuZyAgPGp1bi5h
LmppYW5nQGludGVsLmNvbT4KIAogICAgICAgICBPcHRpbWl6ZSBzb21lIG9wZXJhdGlvbnMgZm9y
IGZsb2F0IHR5cGUgaW4gdGV4dHVyZSBmb3JtYXQgY29udmVyc2lvbnMgb2YgV2ViR0wKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAg
Yi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCmluZGV4
IDcyZmViZWJiOGE1YWQ0ZmZkNjA2ZjhlMGM3NWYyMjc4Y2QxYWNlYjAuLjYxMDYxMTMzOTY1MGVl
YzlkMmMyNzA3YmYzYzc1NjZhN2Q1ZDQxZjEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcApAQCAtMzc4LDcgKzM3OCw3IEBAIHZvaWQg
SFRNTERvY3VtZW50UGFyc2VyOjpwdW1wVG9rZW5pemVyKFN5bmNocm9ub3VzTW9kZSBtb2RlKQog
CiAgICAgICAgICAgICAvLyBXZSBkbyBub3QgWFNTIGZpbHRlciBpbm5lckhUTUwsIHdoaWNoIG1l
YW5zIHdlIChpbnRlbnRpb25hbGx5KSBmYWlsCiAgICAgICAgICAgICAvLyBodHRwL3Rlc3RzL3Nl
Y3VyaXR5L3hzc0F1ZGl0b3IvZG9tLXdyaXRlLWlubmVySFRNTC5odG1sCi0gICAgICAgICAgICBP
d25QdHI8RGlkQmxvY2tTY3JpcHRSZXF1ZXN0PiByZXF1ZXN0ID0gbV94c3NBdWRpdG9yLmZpbHRl
clRva2VuKHRva2VuKCkpOworICAgICAgICAgICAgT3duUHRyPERpZEJsb2NrU2NyaXB0UmVxdWVz
dD4gcmVxdWVzdCA9IG1feHNzQXVkaXRvci5maWx0ZXJUb2tlbihGaWx0ZXJUb2tlblJlcXVlc3Qo
dG9rZW4oKSwgbV9zb3VyY2VUcmFja2VyLCBkb2N1bWVudCgpLT5kZWNvZGVyKCkpKTsKICAgICAg
ICAgICAgIGlmIChyZXF1ZXN0KQogICAgICAgICAgICAgICAgIG1feHNzQXVkaXRvckRlbGVnYXRl
LmRpZEJsb2NrU2NyaXB0KHJlcXVlc3QucmVsZWFzZSgpKTsKICAgICAgICAgfQpAQCAtNjY1LDEx
ICs2NjUsNiBAQCBib29sIEhUTUxEb2N1bWVudFBhcnNlcjo6aXNFeGVjdXRpbmdTY3JpcHQoKSBj
b25zdAogICAgIHJldHVybiBtX3NjcmlwdFJ1bm5lci0+aXNFeGVjdXRpbmdTY3JpcHQoKTsKIH0K
IAotU3RyaW5nIEhUTUxEb2N1bWVudFBhcnNlcjo6c291cmNlRm9yVG9rZW4oY29uc3QgSFRNTFRv
a2VuJiB0b2tlbikKLXsKLSAgICByZXR1cm4gbV9zb3VyY2VUcmFja2VyLnNvdXJjZUZvclRva2Vu
KHRva2VuKTsKLX0KLQogT3JkaW5hbE51bWJlciBIVE1MRG9jdW1lbnRQYXJzZXI6OmxpbmVOdW1i
ZXIoKSBjb25zdAogewogI2lmIEVOQUJMRShUSFJFQURFRF9IVE1MX1BBUlNFUikKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmgKaW5kZXggZjcyMGY0
YzAxYTM5NzAwYmY1MDE2YTcyYjM2MmFjYTM3MjEzMWUyYS4uYWU4NjIzMzA3MDFiNDFlMGZkM2Qw
NTgzOTZmZTY2NWYxYWJjYmFkYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvSFRNTERvY3VtZW50UGFyc2VyLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
SFRNTERvY3VtZW50UGFyc2VyLmgKQEAgLTc1LDcgKzc1LDYgQEAgcHVibGljOgogICAgIHN0YXRp
YyB2b2lkIHBhcnNlRG9jdW1lbnRGcmFnbWVudChjb25zdCBTdHJpbmcmLCBEb2N1bWVudEZyYWdt
ZW50KiwgRWxlbWVudCogY29udGV4dEVsZW1lbnQsIEZyYWdtZW50U2NyaXB0aW5nUGVybWlzc2lv
biA9IEFsbG93U2NyaXB0aW5nQ29udGVudCk7CiAKICAgICBIVE1MVG9rZW5pemVyKiB0b2tlbml6
ZXIoKSBjb25zdCB7IHJldHVybiBtX3Rva2VuaXplci5nZXQoKTsgfQotICAgIFN0cmluZyBzb3Vy
Y2VGb3JUb2tlbihjb25zdCBIVE1MVG9rZW4mKTsKIAogICAgIHZpcnR1YWwgVGV4dFBvc2l0aW9u
IHRleHRQb3NpdGlvbigpIGNvbnN0OwogICAgIHZpcnR1YWwgT3JkaW5hbE51bWJlciBsaW5lTnVt
YmVyKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9YU1NB
dWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuY3BwCmlu
ZGV4IDllZmEyODI4ZTQ5ZmRkNWM0YzlhM2QwYWUzZjliZjM1Y2EyMjA2YTQuLmRhYjMyZGFlMjY1
ZmFlYTFkN2Y3YzNjOGQ3MDgwNWE2YTA3NGFmZGYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFy
c2VyL1hTU0F1ZGl0b3IuY3BwCkBAIC0yNzIsNTkgKzI3Miw1OSBAQCB2b2lkIFhTU0F1ZGl0b3I6
OmluaXQoRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIH0KIH0KIAotUGFzc093blB0cjxEaWRCbG9j
a1NjcmlwdFJlcXVlc3Q+IFhTU0F1ZGl0b3I6OmZpbHRlclRva2VuKEhUTUxUb2tlbiYgdG9rZW4p
CitQYXNzT3duUHRyPERpZEJsb2NrU2NyaXB0UmVxdWVzdD4gWFNTQXVkaXRvcjo6ZmlsdGVyVG9r
ZW4oY29uc3QgRmlsdGVyVG9rZW5SZXF1ZXN0JiByZXF1ZXN0KQogewogICAgIEFTU0VSVChtX3N0
YXRlID09IEluaXRpYWxpemVkKTsKICAgICBpZiAoIW1faXNFbmFibGVkIHx8IG1feHNzUHJvdGVj
dGlvbiA9PSBYU1NQcm90ZWN0aW9uRGlzYWJsZWQpCiAgICAgICAgIHJldHVybiBudWxscHRyOwog
CiAgICAgYm9vbCBkaWRCbG9ja1NjcmlwdCA9IGZhbHNlOwotICAgIGlmICh0b2tlbi50eXBlKCkg
PT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKQotICAgICAgICBkaWRCbG9ja1NjcmlwdCA9IGZp
bHRlclN0YXJ0VG9rZW4odG9rZW4pOworICAgIGlmIChyZXF1ZXN0LnRva2VuLnR5cGUoKSA9PSBI
VE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpCisgICAgICAgIGRpZEJsb2NrU2NyaXB0ID0gZmlsdGVy
U3RhcnRUb2tlbihyZXF1ZXN0KTsKICAgICBlbHNlIGlmIChtX3NjcmlwdFRhZ05lc3RpbmdMZXZl
bCkgewotICAgICAgICBpZiAodG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpDaGFyYWN0
ZXIpCi0gICAgICAgICAgICBkaWRCbG9ja1NjcmlwdCA9IGZpbHRlckNoYXJhY3RlclRva2VuKHRv
a2VuKTsKLSAgICAgICAgZWxzZSBpZiAodG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpF
bmRUYWcpCi0gICAgICAgICAgICBmaWx0ZXJFbmRUb2tlbih0b2tlbik7CisgICAgICAgIGlmIChy
ZXF1ZXN0LnRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6Q2hhcmFjdGVyKQorICAgICAg
ICAgICAgZGlkQmxvY2tTY3JpcHQgPSBmaWx0ZXJDaGFyYWN0ZXJUb2tlbihyZXF1ZXN0KTsKKyAg
ICAgICAgZWxzZSBpZiAocmVxdWVzdC50b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OkVu
ZFRhZykKKyAgICAgICAgICAgIGZpbHRlckVuZFRva2VuKHJlcXVlc3QudG9rZW4pOwogICAgIH0K
IAogICAgIGlmIChkaWRCbG9ja1NjcmlwdCkgewogICAgICAgICBib29sIGRpZEJsb2NrRW50aXJl
UGFnZSA9IChtX3hzc1Byb3RlY3Rpb24gPT0gWFNTUHJvdGVjdGlvbkJsb2NrRW5hYmxlZCk7Ci0g
ICAgICAgIE93blB0cjxEaWRCbG9ja1NjcmlwdFJlcXVlc3Q+IHJlcXVlc3QgPSBEaWRCbG9ja1Nj
cmlwdFJlcXVlc3Q6OmNyZWF0ZShtX3JlcG9ydFVSTCwgbV9vcmlnaW5hbFVSTCwgbV9vcmlnaW5h
bEhUVFBCb2R5LCBkaWRCbG9ja0VudGlyZVBhZ2UpOworICAgICAgICBPd25QdHI8RGlkQmxvY2tT
Y3JpcHRSZXF1ZXN0PiBkaWRCbG9ja1NjcmlwdFJlcXVlc3QgPSBEaWRCbG9ja1NjcmlwdFJlcXVl
c3Q6OmNyZWF0ZShtX3JlcG9ydFVSTCwgbV9vcmlnaW5hbFVSTCwgbV9vcmlnaW5hbEhUVFBCb2R5
LCBkaWRCbG9ja0VudGlyZVBhZ2UpOwogICAgICAgICBpZiAoIW1fcmVwb3J0VVJMLmlzRW1wdHko
KSkgewogICAgICAgICAgICAgbV9yZXBvcnRVUkwgPSBLVVJMKCk7CiAgICAgICAgICAgICBtX29y
aWdpbmFsVVJMID0gU3RyaW5nKCk7CiAgICAgICAgICAgICBtX29yaWdpbmFsSFRUUEJvZHkgPSBT
dHJpbmcoKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVxdWVzdC5yZWxlYXNlKCk7Cisg
ICAgICAgIHJldHVybiBkaWRCbG9ja1NjcmlwdFJlcXVlc3QucmVsZWFzZSgpOwogICAgIH0KICAg
ICByZXR1cm4gbnVsbHB0cjsKIH0KIAotYm9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJTdGFydFRva2Vu
KEhUTUxUb2tlbiYgdG9rZW4pCitib29sIFhTU0F1ZGl0b3I6OmZpbHRlclN0YXJ0VG9rZW4oY29u
c3QgRmlsdGVyVG9rZW5SZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIGJvb2wgZGlkQmxvY2tTY3Jp
cHQgPSBlcmFzZURhbmdlcm91c0F0dHJpYnV0ZXNJZkluamVjdGVkKHRva2VuKTsKKyAgICBib29s
IGRpZEJsb2NrU2NyaXB0ID0gZXJhc2VEYW5nZXJvdXNBdHRyaWJ1dGVzSWZJbmplY3RlZChyZXF1
ZXN0KTsKIAotICAgIGlmIChoYXNOYW1lKHRva2VuLCBzY3JpcHRUYWcpKSB7Ci0gICAgICAgIGRp
ZEJsb2NrU2NyaXB0IHw9IGZpbHRlclNjcmlwdFRva2VuKHRva2VuKTsKKyAgICBpZiAoaGFzTmFt
ZShyZXF1ZXN0LnRva2VuLCBzY3JpcHRUYWcpKSB7CisgICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9
IGZpbHRlclNjcmlwdFRva2VuKHJlcXVlc3QpOwogICAgICAgICBBU1NFUlQobV9zaG91bGRBbGxv
d0NEQVRBIHx8ICFtX3NjcmlwdFRhZ05lc3RpbmdMZXZlbCk7CiAgICAgICAgIG1fc2NyaXB0VGFn
TmVzdGluZ0xldmVsKys7Ci0gICAgfSBlbHNlIGlmIChoYXNOYW1lKHRva2VuLCBvYmplY3RUYWcp
KQotICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBmaWx0ZXJPYmplY3RUb2tlbih0b2tlbik7Ci0g
ICAgZWxzZSBpZiAoaGFzTmFtZSh0b2tlbiwgcGFyYW1UYWcpKQotICAgICAgICBkaWRCbG9ja1Nj
cmlwdCB8PSBmaWx0ZXJQYXJhbVRva2VuKHRva2VuKTsKLSAgICBlbHNlIGlmIChoYXNOYW1lKHRv
a2VuLCBlbWJlZFRhZykpCi0gICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGZpbHRlckVtYmVkVG9r
ZW4odG9rZW4pOwotICAgIGVsc2UgaWYgKGhhc05hbWUodG9rZW4sIGFwcGxldFRhZykpCi0gICAg
ICAgIGRpZEJsb2NrU2NyaXB0IHw9IGZpbHRlckFwcGxldFRva2VuKHRva2VuKTsKLSAgICBlbHNl
IGlmIChoYXNOYW1lKHRva2VuLCBpZnJhbWVUYWcpKQotICAgICAgICBkaWRCbG9ja1NjcmlwdCB8
PSBmaWx0ZXJJZnJhbWVUb2tlbih0b2tlbik7Ci0gICAgZWxzZSBpZiAoaGFzTmFtZSh0b2tlbiwg
bWV0YVRhZykpCi0gICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGZpbHRlck1ldGFUb2tlbih0b2tl
bik7Ci0gICAgZWxzZSBpZiAoaGFzTmFtZSh0b2tlbiwgYmFzZVRhZykpCi0gICAgICAgIGRpZEJs
b2NrU2NyaXB0IHw9IGZpbHRlckJhc2VUb2tlbih0b2tlbik7Ci0gICAgZWxzZSBpZiAoaGFzTmFt
ZSh0b2tlbiwgZm9ybVRhZykpCi0gICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGZpbHRlckZvcm1U
b2tlbih0b2tlbik7CisgICAgfSBlbHNlIGlmIChoYXNOYW1lKHJlcXVlc3QudG9rZW4sIG9iamVj
dFRhZykpCisgICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGZpbHRlck9iamVjdFRva2VuKHJlcXVl
c3QpOworICAgIGVsc2UgaWYgKGhhc05hbWUocmVxdWVzdC50b2tlbiwgcGFyYW1UYWcpKQorICAg
ICAgICBkaWRCbG9ja1NjcmlwdCB8PSBmaWx0ZXJQYXJhbVRva2VuKHJlcXVlc3QpOworICAgIGVs
c2UgaWYgKGhhc05hbWUocmVxdWVzdC50b2tlbiwgZW1iZWRUYWcpKQorICAgICAgICBkaWRCbG9j
a1NjcmlwdCB8PSBmaWx0ZXJFbWJlZFRva2VuKHJlcXVlc3QpOworICAgIGVsc2UgaWYgKGhhc05h
bWUocmVxdWVzdC50b2tlbiwgYXBwbGV0VGFnKSkKKyAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0g
ZmlsdGVyQXBwbGV0VG9rZW4ocmVxdWVzdCk7CisgICAgZWxzZSBpZiAoaGFzTmFtZShyZXF1ZXN0
LnRva2VuLCBpZnJhbWVUYWcpKQorICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBmaWx0ZXJJZnJh
bWVUb2tlbihyZXF1ZXN0KTsKKyAgICBlbHNlIGlmIChoYXNOYW1lKHJlcXVlc3QudG9rZW4sIG1l
dGFUYWcpKQorICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBmaWx0ZXJNZXRhVG9rZW4ocmVxdWVz
dCk7CisgICAgZWxzZSBpZiAoaGFzTmFtZShyZXF1ZXN0LnRva2VuLCBiYXNlVGFnKSkKKyAgICAg
ICAgZGlkQmxvY2tTY3JpcHQgfD0gZmlsdGVyQmFzZVRva2VuKHJlcXVlc3QpOworICAgIGVsc2Ug
aWYgKGhhc05hbWUocmVxdWVzdC50b2tlbiwgZm9ybVRhZykpCisgICAgICAgIGRpZEJsb2NrU2Ny
aXB0IHw9IGZpbHRlckZvcm1Ub2tlbihyZXF1ZXN0KTsKIAogICAgIHJldHVybiBkaWRCbG9ja1Nj
cmlwdDsKIH0KQEAgLTMzOCwxODIgKzMzOCwxODIgQEAgdm9pZCBYU1NBdWRpdG9yOjpmaWx0ZXJF
bmRUb2tlbihIVE1MVG9rZW4mIHRva2VuKQogICAgIH0KIH0KIAotYm9vbCBYU1NBdWRpdG9yOjpm
aWx0ZXJDaGFyYWN0ZXJUb2tlbihIVE1MVG9rZW4mIHRva2VuKQorYm9vbCBYU1NBdWRpdG9yOjpm
aWx0ZXJDaGFyYWN0ZXJUb2tlbihjb25zdCBGaWx0ZXJUb2tlblJlcXVlc3QmIHJlcXVlc3QpCiB7
CiAgICAgQVNTRVJUKG1fc2NyaXB0VGFnTmVzdGluZ0xldmVsKTsKLSAgICBpZiAoaXNDb250YWlu
ZWRJblJlcXVlc3QobV9jYWNoZWREZWNvZGVkU25pcHBldCkgJiYgaXNDb250YWluZWRJblJlcXVl
c3QoZGVjb2RlZFNuaXBwZXRGb3JKYXZhU2NyaXB0KHRva2VuKSkpIHsKLSAgICAgICAgdG9rZW4u
ZXJhc2VDaGFyYWN0ZXJzKCk7Ci0gICAgICAgIHRva2VuLmFwcGVuZFRvQ2hhcmFjdGVyKCcgJyk7
IC8vIFRlY2huaWNhbGx5LCBjaGFyYWN0ZXIgdG9rZW5zIGNhbid0IGJlIGVtcHR5LgorICAgIGlm
IChpc0NvbnRhaW5lZEluUmVxdWVzdChtX2NhY2hlZERlY29kZWRTbmlwcGV0KSAmJiBpc0NvbnRh
aW5lZEluUmVxdWVzdChkZWNvZGVkU25pcHBldEZvckphdmFTY3JpcHQocmVxdWVzdCkpKSB7Cisg
ICAgICAgIHJlcXVlc3QudG9rZW4uZXJhc2VDaGFyYWN0ZXJzKCk7CisgICAgICAgIHJlcXVlc3Qu
dG9rZW4uYXBwZW5kVG9DaGFyYWN0ZXIoJyAnKTsgLy8gVGVjaG5pY2FsbHksIGNoYXJhY3RlciB0
b2tlbnMgY2FuJ3QgYmUgZW1wdHkuCiAgICAgICAgIHJldHVybiB0cnVlOwogICAgIH0KICAgICBy
ZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyU2NyaXB0VG9rZW4oSFRN
TFRva2VuJiB0b2tlbikKK2Jvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyU2NyaXB0VG9rZW4oY29uc3Qg
RmlsdGVyVG9rZW5SZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIEFTU0VSVCh0b2tlbi50eXBlKCkg
PT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKLSAgICBBU1NFUlQoaGFzTmFtZSh0b2tlbiwg
c2NyaXB0VGFnKSk7CisgICAgQVNTRVJUKHJlcXVlc3QudG9rZW4udHlwZSgpID09IEhUTUxUb2tl
blR5cGVzOjpTdGFydFRhZyk7CisgICAgQVNTRVJUKGhhc05hbWUocmVxdWVzdC50b2tlbiwgc2Ny
aXB0VGFnKSk7CiAKLSAgICBtX2NhY2hlZERlY29kZWRTbmlwcGV0ID0gZGVjb2RlZFNuaXBwZXRG
b3JOYW1lKHRva2VuKTsKKyAgICBtX2NhY2hlZERlY29kZWRTbmlwcGV0ID0gZGVjb2RlZFNuaXBw
ZXRGb3JOYW1lKHJlcXVlc3QpOwogICAgIG1fc2hvdWxkQWxsb3dDREFUQSA9IG1fcGFyc2VyLT50
b2tlbml6ZXIoKS0+c2hvdWxkQWxsb3dDREFUQSgpOwogCi0gICAgaWYgKGlzQ29udGFpbmVkSW5S
ZXF1ZXN0KGRlY29kZWRTbmlwcGV0Rm9yTmFtZSh0b2tlbikpKQotICAgICAgICByZXR1cm4gZXJh
c2VBdHRyaWJ1dGVJZkluamVjdGVkKHRva2VuLCBzcmNBdHRyLCBibGFua1VSTCgpLnN0cmluZygp
LCBTcmNMaWtlQXR0cmlidXRlKTsKKyAgICBpZiAoaXNDb250YWluZWRJblJlcXVlc3QoZGVjb2Rl
ZFNuaXBwZXRGb3JOYW1lKHJlcXVlc3QpKSkKKyAgICAgICAgcmV0dXJuIGVyYXNlQXR0cmlidXRl
SWZJbmplY3RlZChyZXF1ZXN0LCBzcmNBdHRyLCBibGFua1VSTCgpLnN0cmluZygpLCBTcmNMaWtl
QXR0cmlidXRlKTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KIAotYm9vbCBYU1NBdWRpdG9yOjpm
aWx0ZXJPYmplY3RUb2tlbihIVE1MVG9rZW4mIHRva2VuKQorYm9vbCBYU1NBdWRpdG9yOjpmaWx0
ZXJPYmplY3RUb2tlbihjb25zdCBGaWx0ZXJUb2tlblJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAg
QVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpOwotICAgIEFT
U0VSVChoYXNOYW1lKHRva2VuLCBvYmplY3RUYWcpKTsKKyAgICBBU1NFUlQocmVxdWVzdC50b2tl
bi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKKyAgICBBU1NFUlQoaGFzTmFt
ZShyZXF1ZXN0LnRva2VuLCBvYmplY3RUYWcpKTsKIAogICAgIGJvb2wgZGlkQmxvY2tTY3JpcHQg
PSBmYWxzZTsKLSAgICBpZiAoaXNDb250YWluZWRJblJlcXVlc3QoZGVjb2RlZFNuaXBwZXRGb3JO
YW1lKHRva2VuKSkpIHsKLSAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRyaWJ1dGVJ
ZkluamVjdGVkKHRva2VuLCBkYXRhQXR0ciwgYmxhbmtVUkwoKS5zdHJpbmcoKSwgU3JjTGlrZUF0
dHJpYnV0ZSk7Ci0gICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmpl
Y3RlZCh0b2tlbiwgdHlwZUF0dHIpOwotICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0
dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIGNsYXNzaWRBdHRyKTsKKyAgICBpZiAoaXNDb250YWlu
ZWRJblJlcXVlc3QoZGVjb2RlZFNuaXBwZXRGb3JOYW1lKHJlcXVlc3QpKSkgeworICAgICAgICBk
aWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQocmVxdWVzdCwgZGF0YUF0
dHIsIGJsYW5rVVJMKCkuc3RyaW5nKCksIFNyY0xpa2VBdHRyaWJ1dGUpOworICAgICAgICBkaWRC
bG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQocmVxdWVzdCwgdHlwZUF0dHIp
OworICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQocmVx
dWVzdCwgY2xhc3NpZEF0dHIpOwogICAgIH0KICAgICByZXR1cm4gZGlkQmxvY2tTY3JpcHQ7CiB9
CiAKLWJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyUGFyYW1Ub2tlbihIVE1MVG9rZW4mIHRva2VuKQor
Ym9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJQYXJhbVRva2VuKGNvbnN0IEZpbHRlclRva2VuUmVxdWVz
dCYgcmVxdWVzdCkKIHsKLSAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVz
OjpTdGFydFRhZyk7Ci0gICAgQVNTRVJUKGhhc05hbWUodG9rZW4sIHBhcmFtVGFnKSk7CisgICAg
QVNTRVJUKHJlcXVlc3QudG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZyk7
CisgICAgQVNTRVJUKGhhc05hbWUocmVxdWVzdC50b2tlbiwgcGFyYW1UYWcpKTsKIAogICAgIHNp
emVfdCBpbmRleE9mTmFtZUF0dHJpYnV0ZTsKLSAgICBpZiAoIWZpbmRBdHRyaWJ1dGVXaXRoTmFt
ZSh0b2tlbiwgbmFtZUF0dHIsIGluZGV4T2ZOYW1lQXR0cmlidXRlKSkKKyAgICBpZiAoIWZpbmRB
dHRyaWJ1dGVXaXRoTmFtZShyZXF1ZXN0LnRva2VuLCBuYW1lQXR0ciwgaW5kZXhPZk5hbWVBdHRy
aWJ1dGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBjb25zdCBIVE1MVG9rZW46OkF0
dHJpYnV0ZSYgbmFtZUF0dHJpYnV0ZSA9IHRva2VuLmF0dHJpYnV0ZXMoKS5hdChpbmRleE9mTmFt
ZUF0dHJpYnV0ZSk7CisgICAgY29uc3QgSFRNTFRva2VuOjpBdHRyaWJ1dGUmIG5hbWVBdHRyaWJ1
dGUgPSByZXF1ZXN0LnRva2VuLmF0dHJpYnV0ZXMoKS5hdChpbmRleE9mTmFtZUF0dHJpYnV0ZSk7
CiAgICAgU3RyaW5nIG5hbWUgPSBTdHJpbmcobmFtZUF0dHJpYnV0ZS5tX3ZhbHVlLmRhdGEoKSwg
bmFtZUF0dHJpYnV0ZS5tX3ZhbHVlLnNpemUoKSk7CiAKICAgICBpZiAoIUhUTUxQYXJhbUVsZW1l
bnQ6OmlzVVJMUGFyYW1ldGVyKG5hbWUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBy
ZXR1cm4gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHRva2VuLCB2YWx1ZUF0dHIsIGJsYW5rVVJM
KCkuc3RyaW5nKCksIFNyY0xpa2VBdHRyaWJ1dGUpOworICAgIHJldHVybiBlcmFzZUF0dHJpYnV0
ZUlmSW5qZWN0ZWQocmVxdWVzdCwgdmFsdWVBdHRyLCBibGFua1VSTCgpLnN0cmluZygpLCBTcmNM
aWtlQXR0cmlidXRlKTsKIH0KIAotYm9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJFbWJlZFRva2VuKEhU
TUxUb2tlbiYgdG9rZW4pCitib29sIFhTU0F1ZGl0b3I6OmZpbHRlckVtYmVkVG9rZW4oY29uc3Qg
RmlsdGVyVG9rZW5SZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIEFTU0VSVCh0b2tlbi50eXBlKCkg
PT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKLSAgICBBU1NFUlQoaGFzTmFtZSh0b2tlbiwg
ZW1iZWRUYWcpKTsKKyAgICBBU1NFUlQocmVxdWVzdC50b2tlbi50eXBlKCkgPT0gSFRNTFRva2Vu
VHlwZXM6OlN0YXJ0VGFnKTsKKyAgICBBU1NFUlQoaGFzTmFtZShyZXF1ZXN0LnRva2VuLCBlbWJl
ZFRhZykpOwogCiAgICAgYm9vbCBkaWRCbG9ja1NjcmlwdCA9IGZhbHNlOwotICAgIGlmIChpc0Nv
bnRhaW5lZEluUmVxdWVzdChkZWNvZGVkU25pcHBldEZvck5hbWUodG9rZW4pKSkgewotICAgICAg
ICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIGNvZGVB
dHRyLCBTdHJpbmcoKSwgU3JjTGlrZUF0dHJpYnV0ZSk7Ci0gICAgICAgIGRpZEJsb2NrU2NyaXB0
IHw9IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgc3JjQXR0ciwgYmxhbmtVUkwoKS5z
dHJpbmcoKSwgU3JjTGlrZUF0dHJpYnV0ZSk7Ci0gICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVy
YXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgdHlwZUF0dHIpOworICAgIGlmIChpc0NvbnRh
aW5lZEluUmVxdWVzdChkZWNvZGVkU25pcHBldEZvck5hbWUocmVxdWVzdCkpKSB7CisgICAgICAg
IGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZChyZXF1ZXN0LCBjb2Rl
QXR0ciwgU3RyaW5nKCksIFNyY0xpa2VBdHRyaWJ1dGUpOworICAgICAgICBkaWRCbG9ja1Njcmlw
dCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQocmVxdWVzdCwgc3JjQXR0ciwgYmxhbmtVUkwo
KS5zdHJpbmcoKSwgU3JjTGlrZUF0dHJpYnV0ZSk7CisgICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9
IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZChyZXF1ZXN0LCB0eXBlQXR0cik7CiAgICAgfQogICAg
IHJldHVybiBkaWRCbG9ja1NjcmlwdDsKIH0KIAotYm9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJBcHBs
ZXRUb2tlbihIVE1MVG9rZW4mIHRva2VuKQorYm9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJBcHBsZXRU
b2tlbihjb25zdCBGaWx0ZXJUb2tlblJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgQVNTRVJUKHRv
a2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpOwotICAgIEFTU0VSVChoYXNO
YW1lKHRva2VuLCBhcHBsZXRUYWcpKTsKKyAgICBBU1NFUlQocmVxdWVzdC50b2tlbi50eXBlKCkg
PT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKKyAgICBBU1NFUlQoaGFzTmFtZShyZXF1ZXN0
LnRva2VuLCBhcHBsZXRUYWcpKTsKIAogICAgIGJvb2wgZGlkQmxvY2tTY3JpcHQgPSBmYWxzZTsK
LSAgICBpZiAoaXNDb250YWluZWRJblJlcXVlc3QoZGVjb2RlZFNuaXBwZXRGb3JOYW1lKHRva2Vu
KSkpIHsKLSAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVk
KHRva2VuLCBjb2RlQXR0ciwgU3RyaW5nKCksIFNyY0xpa2VBdHRyaWJ1dGUpOwotICAgICAgICBk
aWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIG9iamVjdEF0
dHIpOworICAgIGlmIChpc0NvbnRhaW5lZEluUmVxdWVzdChkZWNvZGVkU25pcHBldEZvck5hbWUo
cmVxdWVzdCkpKSB7CisgICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJ
bmplY3RlZChyZXF1ZXN0LCBjb2RlQXR0ciwgU3RyaW5nKCksIFNyY0xpa2VBdHRyaWJ1dGUpOwor
ICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQocmVxdWVz
dCwgb2JqZWN0QXR0cik7CiAgICAgfQogICAgIHJldHVybiBkaWRCbG9ja1NjcmlwdDsKIH0KIAot
Ym9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJJZnJhbWVUb2tlbihIVE1MVG9rZW4mIHRva2VuKQorYm9v
bCBYU1NBdWRpdG9yOjpmaWx0ZXJJZnJhbWVUb2tlbihjb25zdCBGaWx0ZXJUb2tlblJlcXVlc3Qm
IHJlcXVlc3QpCiB7Ci0gICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6
U3RhcnRUYWcpOwotICAgIEFTU0VSVChoYXNOYW1lKHRva2VuLCBpZnJhbWVUYWcpKTsKKyAgICBB
U1NFUlQocmVxdWVzdC50b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsK
KyAgICBBU1NFUlQoaGFzTmFtZShyZXF1ZXN0LnRva2VuLCBpZnJhbWVUYWcpKTsKIAogICAgIGJv
b2wgZGlkQmxvY2tTY3JpcHQgPSBmYWxzZTsKLSAgICBpZiAoaXNDb250YWluZWRJblJlcXVlc3Qo
ZGVjb2RlZFNuaXBwZXRGb3JOYW1lKHRva2VuKSkpIHsKLSAgICAgICAgZGlkQmxvY2tTY3JpcHQg
fD0gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHRva2VuLCBzcmNBdHRyLCBTdHJpbmcoKSwgU3Jj
TGlrZUF0dHJpYnV0ZSk7Ci0gICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRl
SWZJbmplY3RlZCh0b2tlbiwgc3JjZG9jQXR0ciwgU3RyaW5nKCksIFNjcmlwdExpa2VBdHRyaWJ1
dGUpOworICAgIGlmIChpc0NvbnRhaW5lZEluUmVxdWVzdChkZWNvZGVkU25pcHBldEZvck5hbWUo
cmVxdWVzdCkpKSB7CisgICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJ
bmplY3RlZChyZXF1ZXN0LCBzcmNBdHRyLCBTdHJpbmcoKSwgU3JjTGlrZUF0dHJpYnV0ZSk7Cisg
ICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZChyZXF1ZXN0
LCBzcmNkb2NBdHRyLCBTdHJpbmcoKSwgU2NyaXB0TGlrZUF0dHJpYnV0ZSk7CiAgICAgfQogICAg
IHJldHVybiBkaWRCbG9ja1NjcmlwdDsKIH0KIAotYm9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJNZXRh
VG9rZW4oSFRNTFRva2VuJiB0b2tlbikKK2Jvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyTWV0YVRva2Vu
KGNvbnN0IEZpbHRlclRva2VuUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICBBU1NFUlQodG9rZW4u
dHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZyk7Ci0gICAgQVNTRVJUKGhhc05hbWUo
dG9rZW4sIG1ldGFUYWcpKTsKKyAgICBBU1NFUlQocmVxdWVzdC50b2tlbi50eXBlKCkgPT0gSFRN
TFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKKyAgICBBU1NFUlQoaGFzTmFtZShyZXF1ZXN0LnRva2Vu
LCBtZXRhVGFnKSk7CiAKLSAgICByZXR1cm4gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHRva2Vu
LCBodHRwX2VxdWl2QXR0cik7CisgICAgcmV0dXJuIGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZChy
ZXF1ZXN0LCBodHRwX2VxdWl2QXR0cik7CiB9CiAKLWJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyQmFz
ZVRva2VuKEhUTUxUb2tlbiYgdG9rZW4pCitib29sIFhTU0F1ZGl0b3I6OmZpbHRlckJhc2VUb2tl
bihjb25zdCBGaWx0ZXJUb2tlblJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgQVNTRVJUKHRva2Vu
LnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpOwotICAgIEFTU0VSVChoYXNOYW1l
KHRva2VuLCBiYXNlVGFnKSk7CisgICAgQVNTRVJUKHJlcXVlc3QudG9rZW4udHlwZSgpID09IEhU
TUxUb2tlblR5cGVzOjpTdGFydFRhZyk7CisgICAgQVNTRVJUKGhhc05hbWUocmVxdWVzdC50b2tl
biwgYmFzZVRhZykpOwogCi0gICAgcmV0dXJuIGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tl
biwgaHJlZkF0dHIpOworICAgIHJldHVybiBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQocmVxdWVz
dCwgaHJlZkF0dHIpOwogfQogCi1ib29sIFhTU0F1ZGl0b3I6OmZpbHRlckZvcm1Ub2tlbihIVE1M
VG9rZW4mIHRva2VuKQorYm9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJGb3JtVG9rZW4oY29uc3QgRmls
dGVyVG9rZW5SZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0g
SFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKLSAgICBBU1NFUlQoaGFzTmFtZSh0b2tlbiwgZm9y
bVRhZykpOworICAgIEFTU0VSVChyZXF1ZXN0LnRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBl
czo6U3RhcnRUYWcpOworICAgIEFTU0VSVChoYXNOYW1lKHJlcXVlc3QudG9rZW4sIGZvcm1UYWcp
KTsKIAotICAgIHJldHVybiBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIGFjdGlvbkF0
dHIsIGJsYW5rVVJMKCkuc3RyaW5nKCkpOworICAgIHJldHVybiBlcmFzZUF0dHJpYnV0ZUlmSW5q
ZWN0ZWQocmVxdWVzdCwgYWN0aW9uQXR0ciwgYmxhbmtVUkwoKS5zdHJpbmcoKSk7CiB9CiAKLWJv
b2wgWFNTQXVkaXRvcjo6ZXJhc2VEYW5nZXJvdXNBdHRyaWJ1dGVzSWZJbmplY3RlZChIVE1MVG9r
ZW4mIHRva2VuKQorYm9vbCBYU1NBdWRpdG9yOjplcmFzZURhbmdlcm91c0F0dHJpYnV0ZXNJZklu
amVjdGVkKGNvbnN0IEZpbHRlclRva2VuUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICBERUZJTkVf
U1RBVElDX0xPQ0FMKFN0cmluZywgc2FmZUphdmFTY3JpcHRVUkwsIChBU0NJSUxpdGVyYWwoImph
dmFzY3JpcHQ6dm9pZCgwKSIpKSk7CiAKICAgICBib29sIGRpZEJsb2NrU2NyaXB0ID0gZmFsc2U7
Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0b2tlbi5hdHRyaWJ1dGVzKCkuc2l6ZSgpOyAr
K2kpIHsKLSAgICAgICAgY29uc3QgSFRNTFRva2VuOjpBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA9IHRv
a2VuLmF0dHJpYnV0ZXMoKS5hdChpKTsKKyAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHJlcXVl
c3QudG9rZW4uYXR0cmlidXRlcygpLnNpemUoKTsgKytpKSB7CisgICAgICAgIGNvbnN0IEhUTUxU
b2tlbjo6QXR0cmlidXRlJiBhdHRyaWJ1dGUgPSByZXF1ZXN0LnRva2VuLmF0dHJpYnV0ZXMoKS5h
dChpKTsKICAgICAgICAgYm9vbCBpc0lubGluZUV2ZW50SGFuZGxlciA9IGlzTmFtZU9mSW5saW5l
RXZlbnRIYW5kbGVyKGF0dHJpYnV0ZS5tX25hbWUpOwogICAgICAgICBib29sIHZhbHVlQ29udGFp
bnNKYXZhU2NyaXB0VVJMID0gIWlzSW5saW5lRXZlbnRIYW5kbGVyICYmIHByb3RvY29sSXNKYXZh
U2NyaXB0KHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNlcyhTdHJpbmcoYXR0cmlidXRl
Lm1fdmFsdWUuZGF0YSgpLCBhdHRyaWJ1dGUubV92YWx1ZS5zaXplKCkpKSk7CiAgICAgICAgIGlm
ICghaXNJbmxpbmVFdmVudEhhbmRsZXIgJiYgIXZhbHVlQ29udGFpbnNKYXZhU2NyaXB0VVJMKQog
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghaXNDb250YWluZWRJblJlcXVlc3Qo
ZGVjb2RlZFNuaXBwZXRGb3JBdHRyaWJ1dGUodG9rZW4sIGF0dHJpYnV0ZSwgU2NyaXB0TGlrZUF0
dHJpYnV0ZSkpKQorICAgICAgICBpZiAoIWlzQ29udGFpbmVkSW5SZXF1ZXN0KGRlY29kZWRTbmlw
cGV0Rm9yQXR0cmlidXRlKHJlcXVlc3QsIGF0dHJpYnV0ZSwgU2NyaXB0TGlrZUF0dHJpYnV0ZSkp
KQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHRva2VuLmVyYXNlVmFsdWVPZkF0dHJp
YnV0ZShpKTsKKyAgICAgICAgcmVxdWVzdC50b2tlbi5lcmFzZVZhbHVlT2ZBdHRyaWJ1dGUoaSk7
CiAgICAgICAgIGlmICh2YWx1ZUNvbnRhaW5zSmF2YVNjcmlwdFVSTCkKLSAgICAgICAgICAgIHRv
a2VuLmFwcGVuZFRvQXR0cmlidXRlVmFsdWUoaSwgc2FmZUphdmFTY3JpcHRVUkwpOworICAgICAg
ICAgICAgcmVxdWVzdC50b2tlbi5hcHBlbmRUb0F0dHJpYnV0ZVZhbHVlKGksIHNhZmVKYXZhU2Ny
aXB0VVJMKTsKICAgICAgICAgZGlkQmxvY2tTY3JpcHQgPSB0cnVlOwogICAgIH0KICAgICByZXR1
cm4gZGlkQmxvY2tTY3JpcHQ7CiB9CiAKLWJvb2wgWFNTQXVkaXRvcjo6ZXJhc2VBdHRyaWJ1dGVJ
ZkluamVjdGVkKEhUTUxUb2tlbiYgdG9rZW4sIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0
ZU5hbWUsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRWYWx1ZSwgQXR0cmlidXRlS2luZCB0cmVh
dG1lbnQpCitib29sIFhTU0F1ZGl0b3I6OmVyYXNlQXR0cmlidXRlSWZJbmplY3RlZChjb25zdCBG
aWx0ZXJUb2tlblJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFF1YWxpZmllZE5hbWUmIGF0dHJpYnV0
ZU5hbWUsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRWYWx1ZSwgQXR0cmlidXRlS2luZCB0cmVh
dG1lbnQpCiB7CiAgICAgc2l6ZV90IGluZGV4T2ZBdHRyaWJ1dGUgPSAwOwotICAgIGlmIChmaW5k
QXR0cmlidXRlV2l0aE5hbWUodG9rZW4sIGF0dHJpYnV0ZU5hbWUsIGluZGV4T2ZBdHRyaWJ1dGUp
KSB7Ci0gICAgICAgIGNvbnN0IEhUTUxUb2tlbjo6QXR0cmlidXRlJiBhdHRyaWJ1dGUgPSB0b2tl
bi5hdHRyaWJ1dGVzKCkuYXQoaW5kZXhPZkF0dHJpYnV0ZSk7Ci0gICAgICAgIGlmIChpc0NvbnRh
aW5lZEluUmVxdWVzdChkZWNvZGVkU25pcHBldEZvckF0dHJpYnV0ZSh0b2tlbiwgYXR0cmlidXRl
LCB0cmVhdG1lbnQpKSkgeworICAgIGlmIChmaW5kQXR0cmlidXRlV2l0aE5hbWUocmVxdWVzdC50
b2tlbiwgYXR0cmlidXRlTmFtZSwgaW5kZXhPZkF0dHJpYnV0ZSkpIHsKKyAgICAgICAgY29uc3Qg
SFRNTFRva2VuOjpBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA9IHJlcXVlc3QudG9rZW4uYXR0cmlidXRl
cygpLmF0KGluZGV4T2ZBdHRyaWJ1dGUpOworICAgICAgICBpZiAoaXNDb250YWluZWRJblJlcXVl
c3QoZGVjb2RlZFNuaXBwZXRGb3JBdHRyaWJ1dGUocmVxdWVzdCwgYXR0cmlidXRlLCB0cmVhdG1l
bnQpKSkgewogICAgICAgICAgICAgaWYgKHRocmVhZFNhZmVNYXRjaChhdHRyaWJ1dGVOYW1lLCBz
cmNBdHRyKSAmJiBpc0xpa2VseVNhZmVSZXNvdXJjZShTdHJpbmcoYXR0cmlidXRlLm1fdmFsdWUu
ZGF0YSgpLCBhdHRyaWJ1dGUubV92YWx1ZS5zaXplKCkpKSkKICAgICAgICAgICAgICAgICByZXR1
cm4gZmFsc2U7CiAgICAgICAgICAgICBpZiAodGhyZWFkU2FmZU1hdGNoKGF0dHJpYnV0ZU5hbWUs
IGh0dHBfZXF1aXZBdHRyKSAmJiAhaXNEYW5nZXJvdXNIVFRQRXF1aXYoU3RyaW5nKGF0dHJpYnV0
ZS5tX3ZhbHVlLmRhdGEoKSwgYXR0cmlidXRlLm1fdmFsdWUuc2l6ZSgpKSkpCiAgICAgICAgICAg
ICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgdG9rZW4uZXJhc2VWYWx1ZU9mQXR0cmli
dXRlKGluZGV4T2ZBdHRyaWJ1dGUpOworICAgICAgICAgICAgcmVxdWVzdC50b2tlbi5lcmFzZVZh
bHVlT2ZBdHRyaWJ1dGUoaW5kZXhPZkF0dHJpYnV0ZSk7CiAgICAgICAgICAgICBpZiAoIXJlcGxh
Y2VtZW50VmFsdWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAgIHRva2VuLmFwcGVuZFRvQXR0
cmlidXRlVmFsdWUoaW5kZXhPZkF0dHJpYnV0ZSwgcmVwbGFjZW1lbnRWYWx1ZSk7CisgICAgICAg
ICAgICAgICAgcmVxdWVzdC50b2tlbi5hcHBlbmRUb0F0dHJpYnV0ZVZhbHVlKGluZGV4T2ZBdHRy
aWJ1dGUsIHJlcGxhY2VtZW50VmFsdWUpOwogICAgICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAg
ICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1TdHJpbmcgWFNTQXVkaXRvcjo6
ZGVjb2RlZFNuaXBwZXRGb3JOYW1lKGNvbnN0IEhUTUxUb2tlbiYgdG9rZW4pCitTdHJpbmcgWFNT
QXVkaXRvcjo6ZGVjb2RlZFNuaXBwZXRGb3JOYW1lKGNvbnN0IEZpbHRlclRva2VuUmVxdWVzdCYg
cmVxdWVzdCkKIHsKICAgICAvLyBHcmFiIGEgZml4ZWQgbnVtYmVyIG9mIGNoYXJhY3RlcnMgZXF1
YWwgdG8gdGhlIGxlbmd0aCBvZiB0aGUgdG9rZW4ncyBuYW1lIHBsdXMgb25lICh0byBhY2NvdW50
IGZvciB0aGUgIjwiKS4KLSAgICByZXR1cm4gZnVsbHlEZWNvZGVTdHJpbmcobV9wYXJzZXItPnNv
dXJjZUZvclRva2VuKHRva2VuKSwgbV9wYXJzZXItPmRvY3VtZW50KCktPmRlY29kZXIoKSkuc3Vi
c3RyaW5nKDAsIHRva2VuLm5hbWUoKS5zaXplKCkgKyAxKTsKKyAgICByZXR1cm4gZnVsbHlEZWNv
ZGVTdHJpbmcocmVxdWVzdC5zb3VyY2VUcmFja2VyLnNvdXJjZUZvclRva2VuKHJlcXVlc3QudG9r
ZW4pLCByZXF1ZXN0LmRlY29kZXIpLnN1YnN0cmluZygwLCByZXF1ZXN0LnRva2VuLm5hbWUoKS5z
aXplKCkgKyAxKTsKIH0KIAotU3RyaW5nIFhTU0F1ZGl0b3I6OmRlY29kZWRTbmlwcGV0Rm9yQXR0
cmlidXRlKGNvbnN0IEhUTUxUb2tlbiYgdG9rZW4sIGNvbnN0IEhUTUxUb2tlbjo6QXR0cmlidXRl
JiBhdHRyaWJ1dGUsIEF0dHJpYnV0ZUtpbmQgdHJlYXRtZW50KQorU3RyaW5nIFhTU0F1ZGl0b3I6
OmRlY29kZWRTbmlwcGV0Rm9yQXR0cmlidXRlKGNvbnN0IEZpbHRlclRva2VuUmVxdWVzdCYgcmVx
dWVzdCwgY29uc3QgSFRNTFRva2VuOjpBdHRyaWJ1dGUmIGF0dHJpYnV0ZSwgQXR0cmlidXRlS2lu
ZCB0cmVhdG1lbnQpCiB7CiAgICAgLy8gVGhlIHJhbmdlIGRvZXNuJ3QgaW5sY3VkZSB0aGUgY2hh
cmFjdGVyIHdoaWNoIHRlcm1pbmF0ZXMgdGhlIHZhbHVlLiBTbywKICAgICAvLyBmb3IgYW4gaW5w
dXQgb2YgfG5hbWU9InZhbHVlInwsIHRoZSBzbmlwcGV0IGlzIHxuYW1lPSJ2YWx1ZXwuIEZvciBh
bgogICAgIC8vIHVucXVvdGVkIGlucHV0IG9mIHxuYW1lPXZhbHVlIHwsIHRoZSBzbmlwcGV0IGlz
IHxuYW1lPXZhbHVlfC4KICAgICAvLyBGSVhNRTogV2Ugc2hvdWxkIGdyYWIgb25lIGNoYXJhY3Rl
ciBiZWZvcmUgdGhlIG5hbWUgYWxzby4KLSAgICBpbnQgc3RhcnQgPSBhdHRyaWJ1dGUubV9uYW1l
UmFuZ2UubV9zdGFydCAtIHRva2VuLnN0YXJ0SW5kZXgoKTsKLSAgICBpbnQgZW5kID0gYXR0cmli
dXRlLm1fdmFsdWVSYW5nZS5tX2VuZCAtIHRva2VuLnN0YXJ0SW5kZXgoKTsKLSAgICBTdHJpbmcg
ZGVjb2RlZFNuaXBwZXQgPSBmdWxseURlY29kZVN0cmluZyhtX3BhcnNlci0+c291cmNlRm9yVG9r
ZW4odG9rZW4pLnN1YnN0cmluZyhzdGFydCwgZW5kIC0gc3RhcnQpLCBtX3BhcnNlci0+ZG9jdW1l
bnQoKS0+ZGVjb2RlcigpKTsKKyAgICBpbnQgc3RhcnQgPSBhdHRyaWJ1dGUubV9uYW1lUmFuZ2Uu
bV9zdGFydCAtIHJlcXVlc3QudG9rZW4uc3RhcnRJbmRleCgpOworICAgIGludCBlbmQgPSBhdHRy
aWJ1dGUubV92YWx1ZVJhbmdlLm1fZW5kIC0gcmVxdWVzdC50b2tlbi5zdGFydEluZGV4KCk7Cisg
ICAgU3RyaW5nIGRlY29kZWRTbmlwcGV0ID0gZnVsbHlEZWNvZGVTdHJpbmcocmVxdWVzdC5zb3Vy
Y2VUcmFja2VyLnNvdXJjZUZvclRva2VuKHJlcXVlc3QudG9rZW4pLnN1YnN0cmluZyhzdGFydCwg
ZW5kIC0gc3RhcnQpLCByZXF1ZXN0LmRlY29kZXIpOwogICAgIGRlY29kZWRTbmlwcGV0LnRydW5j
YXRlKGtNYXhpbXVtRnJhZ21lbnRMZW5ndGhUYXJnZXQpOwogICAgIGlmICh0cmVhdG1lbnQgPT0g
U3JjTGlrZUF0dHJpYnV0ZSkgewogICAgICAgICBpbnQgc2xhc2hDb3VudCA9IDA7CkBAIC01NjQs
OSArNTY0LDkgQEAgU3RyaW5nIFhTU0F1ZGl0b3I6OmRlY29kZWRTbmlwcGV0Rm9yQXR0cmlidXRl
KGNvbnN0IEhUTUxUb2tlbiYgdG9rZW4sIGNvbnN0IEhUTUwKICAgICByZXR1cm4gZGVjb2RlZFNu
aXBwZXQ7CiB9CiAKLVN0cmluZyBYU1NBdWRpdG9yOjpkZWNvZGVkU25pcHBldEZvckphdmFTY3Jp
cHQoY29uc3QgSFRNTFRva2VuJiB0b2tlbikKK1N0cmluZyBYU1NBdWRpdG9yOjpkZWNvZGVkU25p
cHBldEZvckphdmFTY3JpcHQoY29uc3QgRmlsdGVyVG9rZW5SZXF1ZXN0JiByZXF1ZXN0KQogewot
ICAgIFN0cmluZyBzdHJpbmcgPSBtX3BhcnNlci0+c291cmNlRm9yVG9rZW4odG9rZW4pOworICAg
IFN0cmluZyBzdHJpbmcgPSByZXF1ZXN0LnNvdXJjZVRyYWNrZXIuc291cmNlRm9yVG9rZW4ocmVx
dWVzdC50b2tlbik7CiAgICAgc2l6ZV90IHN0YXJ0UG9zaXRpb24gPSAwOwogICAgIHNpemVfdCBl
bmRQb3NpdGlvbiA9IHN0cmluZy5sZW5ndGgoKTsKICAgICBzaXplX3QgZm91bmRQb3NpdGlvbiA9
IG5vdEZvdW5kOwpAQCAtNjIxLDcgKzYyMSw3IEBAIFN0cmluZyBYU1NBdWRpdG9yOjpkZWNvZGVk
U25pcHBldEZvckphdmFTY3JpcHQoY29uc3QgSFRNTFRva2VuJiB0b2tlbikKICAgICAgICAgICAg
IH0KICAgICAgICAgfQogCi0gICAgICAgIHJlc3VsdCA9IGZ1bGx5RGVjb2RlU3RyaW5nKHN0cmlu
Zy5zdWJzdHJpbmcoc3RhcnRQb3NpdGlvbiwgZm91bmRQb3NpdGlvbiAtIHN0YXJ0UG9zaXRpb24p
LCBtX3BhcnNlci0+ZG9jdW1lbnQoKS0+ZGVjb2RlcigpKTsKKyAgICAgICAgcmVzdWx0ID0gZnVs
bHlEZWNvZGVTdHJpbmcoc3RyaW5nLnN1YnN0cmluZyhzdGFydFBvc2l0aW9uLCBmb3VuZFBvc2l0
aW9uIC0gc3RhcnRQb3NpdGlvbiksIHJlcXVlc3QuZGVjb2Rlcik7CiAgICAgICAgIHN0YXJ0UG9z
aXRpb24gPSBmb3VuZFBvc2l0aW9uICsgMTsKICAgICB9CiAgICAgcmV0dXJuIHJlc3VsdDsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuaCBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuaAppbmRleCAyYmQxN2I1NWNmMzFjOTVh
OGE2ZTQ4ZGIwNzgzMTY0MWRjODhjNmE4Li5mYTIzNGQzN2NkNjUzMDAwMGIxNjhiZGY4M2Y0OGVm
MDkyYzM1Zjk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9YU1NBdWRp
dG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5oCkBAIC0z
Niw2ICszNiwyMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFzcyBEaWRCbG9ja1NjcmlwdFJl
cXVlc3Q7CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEhUTUxEb2N1bWVudFBhcnNlcjsKK2NsYXNz
IEhUTUxTb3VyY2VUcmFja2VyOworY2xhc3MgVGV4dFJlc291cmNlRGVjb2RlcjsKKworc3RydWN0
IEZpbHRlclRva2VuUmVxdWVzdCB7CisgICAgRmlsdGVyVG9rZW5SZXF1ZXN0KEhUTUxUb2tlbiYg
dG9rZW4sIEhUTUxTb3VyY2VUcmFja2VyJiBzb3VyY2VUcmFja2VyLCBjb25zdCBUZXh0UmVzb3Vy
Y2VEZWNvZGVyKiBkZWNvZGVyKQorICAgICAgICA6IHRva2VuKHRva2VuKQorICAgICAgICAsIHNv
dXJjZVRyYWNrZXIoc291cmNlVHJhY2tlcikKKyAgICAgICAgLCBkZWNvZGVyKGRlY29kZXIpCisg
ICAgeyB9CisKKyAgICBIVE1MVG9rZW4mIHRva2VuOworICAgIEhUTUxTb3VyY2VUcmFja2VyJiBz
b3VyY2VUcmFja2VyOworICAgIGNvbnN0IFRleHRSZXNvdXJjZURlY29kZXIqIGRlY29kZXI7Cit9
OwogCiBjbGFzcyBYU1NBdWRpdG9yIHsKICAgICBXVEZfTUFLRV9OT05DT1BZQUJMRShYU1NBdWRp
dG9yKTsKQEAgLTQzLDcgKzU3LDcgQEAgcHVibGljOgogICAgIGV4cGxpY2l0IFhTU0F1ZGl0b3Io
SFRNTERvY3VtZW50UGFyc2VyKik7CiAKICAgICB2b2lkIGluaXQoRG9jdW1lbnQqKTsKLSAgICBQ
YXNzT3duUHRyPERpZEJsb2NrU2NyaXB0UmVxdWVzdD4gZmlsdGVyVG9rZW4oSFRNTFRva2VuJik7
CisgICAgUGFzc093blB0cjxEaWRCbG9ja1NjcmlwdFJlcXVlc3Q+IGZpbHRlclRva2VuKGNvbnN0
IEZpbHRlclRva2VuUmVxdWVzdCYpOwogCiBwcml2YXRlOgogICAgIHN0YXRpYyBjb25zdCBzaXpl
X3Qga01heGltdW1GcmFnbWVudExlbmd0aFRhcmdldCA9IDEwMDsKQEAgLTU5LDI2ICs3MywyNiBA
QCBwcml2YXRlOgogICAgICAgICBTY3JpcHRMaWtlQXR0cmlidXRlCiAgICAgfTsKIAotICAgIGJv
b2wgZmlsdGVyU3RhcnRUb2tlbihIVE1MVG9rZW4mKTsKKyAgICBib29sIGZpbHRlclN0YXJ0VG9r
ZW4oY29uc3QgRmlsdGVyVG9rZW5SZXF1ZXN0Jik7CiAgICAgdm9pZCBmaWx0ZXJFbmRUb2tlbihI
VE1MVG9rZW4mKTsKLSAgICBib29sIGZpbHRlckNoYXJhY3RlclRva2VuKEhUTUxUb2tlbiYpOwot
ICAgIGJvb2wgZmlsdGVyU2NyaXB0VG9rZW4oSFRNTFRva2VuJik7Ci0gICAgYm9vbCBmaWx0ZXJP
YmplY3RUb2tlbihIVE1MVG9rZW4mKTsKLSAgICBib29sIGZpbHRlclBhcmFtVG9rZW4oSFRNTFRv
a2VuJik7Ci0gICAgYm9vbCBmaWx0ZXJFbWJlZFRva2VuKEhUTUxUb2tlbiYpOwotICAgIGJvb2wg
ZmlsdGVyQXBwbGV0VG9rZW4oSFRNTFRva2VuJik7Ci0gICAgYm9vbCBmaWx0ZXJJZnJhbWVUb2tl
bihIVE1MVG9rZW4mKTsKLSAgICBib29sIGZpbHRlck1ldGFUb2tlbihIVE1MVG9rZW4mKTsKLSAg
ICBib29sIGZpbHRlckJhc2VUb2tlbihIVE1MVG9rZW4mKTsKLSAgICBib29sIGZpbHRlckZvcm1U
b2tlbihIVE1MVG9rZW4mKTsKLQotICAgIGJvb2wgZXJhc2VEYW5nZXJvdXNBdHRyaWJ1dGVzSWZJ
bmplY3RlZChIVE1MVG9rZW4mKTsKLSAgICBib29sIGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZChI
VE1MVG9rZW4mLCBjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgU3RyaW5nJiByZXBsYWNlbWVu
dFZhbHVlID0gU3RyaW5nKCksIEF0dHJpYnV0ZUtpbmQgdHJlYXRtZW50ID0gTm9ybWFsQXR0cmli
dXRlKTsKKyAgICBib29sIGZpbHRlckNoYXJhY3RlclRva2VuKGNvbnN0IEZpbHRlclRva2VuUmVx
dWVzdCYpOworICAgIGJvb2wgZmlsdGVyU2NyaXB0VG9rZW4oY29uc3QgRmlsdGVyVG9rZW5SZXF1
ZXN0Jik7CisgICAgYm9vbCBmaWx0ZXJPYmplY3RUb2tlbihjb25zdCBGaWx0ZXJUb2tlblJlcXVl
c3QmKTsKKyAgICBib29sIGZpbHRlclBhcmFtVG9rZW4oY29uc3QgRmlsdGVyVG9rZW5SZXF1ZXN0
Jik7CisgICAgYm9vbCBmaWx0ZXJFbWJlZFRva2VuKGNvbnN0IEZpbHRlclRva2VuUmVxdWVzdCYp
OworICAgIGJvb2wgZmlsdGVyQXBwbGV0VG9rZW4oY29uc3QgRmlsdGVyVG9rZW5SZXF1ZXN0Jik7
CisgICAgYm9vbCBmaWx0ZXJJZnJhbWVUb2tlbihjb25zdCBGaWx0ZXJUb2tlblJlcXVlc3QmKTsK
KyAgICBib29sIGZpbHRlck1ldGFUb2tlbihjb25zdCBGaWx0ZXJUb2tlblJlcXVlc3QmKTsKKyAg
ICBib29sIGZpbHRlckJhc2VUb2tlbihjb25zdCBGaWx0ZXJUb2tlblJlcXVlc3QmKTsKKyAgICBi
b29sIGZpbHRlckZvcm1Ub2tlbihjb25zdCBGaWx0ZXJUb2tlblJlcXVlc3QmKTsKKworICAgIGJv
b2wgZXJhc2VEYW5nZXJvdXNBdHRyaWJ1dGVzSWZJbmplY3RlZChjb25zdCBGaWx0ZXJUb2tlblJl
cXVlc3QmKTsKKyAgICBib29sIGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZChjb25zdCBGaWx0ZXJU
b2tlblJlcXVlc3QmLCBjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3QgU3RyaW5nJiByZXBsYWNl
bWVudFZhbHVlID0gU3RyaW5nKCksIEF0dHJpYnV0ZUtpbmQgdHJlYXRtZW50ID0gTm9ybWFsQXR0
cmlidXRlKTsKIAogICAgIFN0cmluZyBkZWNvZGVkU25pcHBldEZvclRva2VuKGNvbnN0IEhUTUxU
b2tlbiYpOwotICAgIFN0cmluZyBkZWNvZGVkU25pcHBldEZvck5hbWUoY29uc3QgSFRNTFRva2Vu
Jik7Ci0gICAgU3RyaW5nIGRlY29kZWRTbmlwcGV0Rm9yQXR0cmlidXRlKGNvbnN0IEhUTUxUb2tl
biYsIGNvbnN0IEhUTUxUb2tlbjo6QXR0cmlidXRlJiwgQXR0cmlidXRlS2luZCB0cmVhdG1lbnQg
PSBOb3JtYWxBdHRyaWJ1dGUpOwotICAgIFN0cmluZyBkZWNvZGVkU25pcHBldEZvckphdmFTY3Jp
cHQoY29uc3QgSFRNTFRva2VuJik7CisgICAgU3RyaW5nIGRlY29kZWRTbmlwcGV0Rm9yTmFtZShj
b25zdCBGaWx0ZXJUb2tlblJlcXVlc3QmKTsKKyAgICBTdHJpbmcgZGVjb2RlZFNuaXBwZXRGb3JB
dHRyaWJ1dGUoY29uc3QgRmlsdGVyVG9rZW5SZXF1ZXN0JiwgY29uc3QgSFRNTFRva2VuOjpBdHRy
aWJ1dGUmLCBBdHRyaWJ1dGVLaW5kIHRyZWF0bWVudCA9IE5vcm1hbEF0dHJpYnV0ZSk7CisgICAg
U3RyaW5nIGRlY29kZWRTbmlwcGV0Rm9ySmF2YVNjcmlwdChjb25zdCBGaWx0ZXJUb2tlblJlcXVl
c3QmKTsKIAogICAgIGJvb2wgaXNDb250YWluZWRJblJlcXVlc3QoY29uc3QgU3RyaW5nJik7CiAg
ICAgYm9vbCBpc0xpa2VseVNhZmVSZXNvdXJjZShjb25zdCBTdHJpbmcmIHVybCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186266</attachid>
            <date>2013-02-03 12:35:35 -0800</date>
            <delta_ts>2013-02-05 09:40:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-108698-20130203123215.patch</filename>
            <type>text/plain</type>
            <size>26344</size>
            <attacher name="Tony Gentilcore">tonyg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxNzE3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggMTc5ZmE3ZWFiMDBiZjNj
YmVmMjViYTU0Yzg1Y2RiYjA5OGE2N2M3Yy4uMjY5YjAxNTJlMmQ2ZTcyNTYxOWE0NjBlZGUyODkx
MTBjZmFkMTRiZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDEzLTAyLTAzICBUb255
IEdlbnRpbGNvcmUgIDx0b255Z0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ29udGludWUgbWFr
aW5nIFhTU0F1ZGl0b3IgdGhyZWFkIHNhZmU6IFJlbW92ZSBkZXBlbmRlbmN5IG9uIHBhcnNlcidz
IHNvdXJjZUZvclRva2VuIGFuZCBUZXh0UmVzb3VyY2VEZWNvZGVyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDg2OTgKKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZSdkIGxpa2UgdG8gYmUgYWJsZSB0byBj
YWxsIGZpbHRlclRva2VuKCkgZnJvbSB0aGUgQmFja2dyb3VuZEhUTUxQYXJzZXIgd2hlcmUgdGhl
cmUgaXMgbm8gSFRNTERvY3VtZW50UGFyc2VyLiBTbyB3ZSBhcmUgcmVtb3ZpbmcgdGhlIGRlcGVu
ZGVuY2llcyBvZgorICAgICAgICBmaWx0ZXJUb2tlbigpIG9uIHRoZSBIVE1MRG9jdW1lbnRQYXJz
ZXIuIFRoaXMgcGF0Y2ggYnJpbmdzIHVzIG9uZSBzdGVwIGNsb3NlciB0byByZW1vdmluZyB0aGUg
bV9wYXJzZXIgbWVtYmVyIGZyb20gWFNTQXVkaXRvciBieSBwYXNzaW5nIGluIHRoZQorICAgICAg
ICBUZXh0UmVzb3VyY2VEZWNvZGVyIGFuZCBIVE1MU291cmNlVHJhY2tlciB0byBmaWx0ZXJUb2tl
bi4gVG8ga2VlcCB0aGUgbnVtYmVyIG9mIHBhcmFtZXRlcnMgZnJvbSBibG93aW5nIHVwLCB0aGlz
IGludHJvZHVjZXMgYSBGaWx0ZXJUb2tlblJlcXVlc3Qgc3RydWN0CisgICAgICAgIHRvIGhvbGQg
aXRzIGFyZ3VtZW50cy4gV2UgZXhwZWN0IHRvIGFkZCBvbmUgbW9yZSBtZW1iZXIgdG8gdGhpcyBz
dHJ1Y3QuCisKKworICAgICAgICBObyBuZXcgdGVzdHMgYmVjYXVzZSBubyBuZXcgZnVuY3Rpb25h
bGl0eS4KKworICAgICAgICAqIGh0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHA6Cisg
ICAgICAgIChXZWJDb3JlOjpIVE1MRG9jdW1lbnRQYXJzZXI6OnB1bXBUb2tlbml6ZXIpOgorICAg
ICAgICAqIGh0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5oOgorICAgICAgICAqIGh0bWwv
cGFyc2VyL1hTU0F1ZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6Zmls
dGVyVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6ZmlsdGVyU3RhcnRUb2tl
bik6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0ZXJDaGFyYWN0ZXJUb2tlbik6
CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0ZXJTY3JpcHRUb2tlbik6CisgICAg
ICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0ZXJPYmplY3RUb2tlbik6CisgICAgICAgIChX
ZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0ZXJQYXJhbVRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6
OlhTU0F1ZGl0b3I6OmZpbHRlckVtYmVkVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVk
aXRvcjo6ZmlsdGVyQXBwbGV0VG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6
ZmlsdGVySWZyYW1lVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6ZmlsdGVy
TWV0YVRva2VuKToKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmZpbHRlckJhc2VUb2tl
bik6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0ZXJGb3JtVG9rZW4pOgorICAg
ICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6ZXJhc2VEYW5nZXJvdXNBdHRyaWJ1dGVzSWZJbmpl
Y3RlZCk6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjplcmFzZUF0dHJpYnV0ZUlmSW5q
ZWN0ZWQpOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6ZGVjb2RlZFNuaXBwZXRGb3JO
YW1lKToKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmRlY29kZWRTbmlwcGV0Rm9yQXR0
cmlidXRlKToKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmRlY29kZWRTbmlwcGV0Rm9y
SmF2YVNjcmlwdCk6CisgICAgICAgICogaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5oOgorICAgICAg
ICAoV2ViQ29yZSk6CisgICAgICAgIChXZWJDb3JlOjpGaWx0ZXJUb2tlblJlcXVlc3Q6OkZpbHRl
clRva2VuUmVxdWVzdCk6CisgICAgICAgIChGaWx0ZXJUb2tlblJlcXVlc3QpOgorICAgICAgICAo
WFNTQXVkaXRvcik6CisKIDIwMTMtMDItMDMgIE1pa2UgV2VzdCAgPG1rd3N0QGNocm9taXVtLm9y
Zz4KIAogICAgICAgICBDbGVhbnVwOiAnRXhjZXB0aW9uQ29kZSYgZWMnLCBub3QgJ0V4Y2VwdGlv
bkNvZGUgJmVjJy4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxE
b2N1bWVudFBhcnNlci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1l
bnRQYXJzZXIuY3BwCmluZGV4IDcyZmViZWJiOGE1YWQ0ZmZkNjA2ZjhlMGM3NWYyMjc4Y2QxYWNl
YjAuLjYxMDYxMTMzOTY1MGVlYzlkMmMyNzA3YmYzYzc1NjZhN2Q1ZDQxZjEgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcApAQCAtMzc4
LDcgKzM3OCw3IEBAIHZvaWQgSFRNTERvY3VtZW50UGFyc2VyOjpwdW1wVG9rZW5pemVyKFN5bmNo
cm9ub3VzTW9kZSBtb2RlKQogCiAgICAgICAgICAgICAvLyBXZSBkbyBub3QgWFNTIGZpbHRlciBp
bm5lckhUTUwsIHdoaWNoIG1lYW5zIHdlIChpbnRlbnRpb25hbGx5KSBmYWlsCiAgICAgICAgICAg
ICAvLyBodHRwL3Rlc3RzL3NlY3VyaXR5L3hzc0F1ZGl0b3IvZG9tLXdyaXRlLWlubmVySFRNTC5o
dG1sCi0gICAgICAgICAgICBPd25QdHI8RGlkQmxvY2tTY3JpcHRSZXF1ZXN0PiByZXF1ZXN0ID0g
bV94c3NBdWRpdG9yLmZpbHRlclRva2VuKHRva2VuKCkpOworICAgICAgICAgICAgT3duUHRyPERp
ZEJsb2NrU2NyaXB0UmVxdWVzdD4gcmVxdWVzdCA9IG1feHNzQXVkaXRvci5maWx0ZXJUb2tlbihG
aWx0ZXJUb2tlblJlcXVlc3QodG9rZW4oKSwgbV9zb3VyY2VUcmFja2VyLCBkb2N1bWVudCgpLT5k
ZWNvZGVyKCkpKTsKICAgICAgICAgICAgIGlmIChyZXF1ZXN0KQogICAgICAgICAgICAgICAgIG1f
eHNzQXVkaXRvckRlbGVnYXRlLmRpZEJsb2NrU2NyaXB0KHJlcXVlc3QucmVsZWFzZSgpKTsKICAg
ICAgICAgfQpAQCAtNjY1LDExICs2NjUsNiBAQCBib29sIEhUTUxEb2N1bWVudFBhcnNlcjo6aXNF
eGVjdXRpbmdTY3JpcHQoKSBjb25zdAogICAgIHJldHVybiBtX3NjcmlwdFJ1bm5lci0+aXNFeGVj
dXRpbmdTY3JpcHQoKTsKIH0KIAotU3RyaW5nIEhUTUxEb2N1bWVudFBhcnNlcjo6c291cmNlRm9y
VG9rZW4oY29uc3QgSFRNTFRva2VuJiB0b2tlbikKLXsKLSAgICByZXR1cm4gbV9zb3VyY2VUcmFj
a2VyLnNvdXJjZUZvclRva2VuKHRva2VuKTsKLX0KLQogT3JkaW5hbE51bWJlciBIVE1MRG9jdW1l
bnRQYXJzZXI6OmxpbmVOdW1iZXIoKSBjb25zdAogewogI2lmIEVOQUJMRShUSFJFQURFRF9IVE1M
X1BBUlNFUikKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1
bWVudFBhcnNlci5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFy
c2VyLmgKaW5kZXggZjcyMGY0YzAxYTM5NzAwYmY1MDE2YTcyYjM2MmFjYTM3MjEzMWUyYS4uYWU4
NjIzMzA3MDFiNDFlMGZkM2QwNTgzOTZmZTY2NWYxYWJjYmFkYyAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmgKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmgKQEAgLTc1LDcgKzc1LDYgQEAg
cHVibGljOgogICAgIHN0YXRpYyB2b2lkIHBhcnNlRG9jdW1lbnRGcmFnbWVudChjb25zdCBTdHJp
bmcmLCBEb2N1bWVudEZyYWdtZW50KiwgRWxlbWVudCogY29udGV4dEVsZW1lbnQsIEZyYWdtZW50
U2NyaXB0aW5nUGVybWlzc2lvbiA9IEFsbG93U2NyaXB0aW5nQ29udGVudCk7CiAKICAgICBIVE1M
VG9rZW5pemVyKiB0b2tlbml6ZXIoKSBjb25zdCB7IHJldHVybiBtX3Rva2VuaXplci5nZXQoKTsg
fQotICAgIFN0cmluZyBzb3VyY2VGb3JUb2tlbihjb25zdCBIVE1MVG9rZW4mKTsKIAogICAgIHZp
cnR1YWwgVGV4dFBvc2l0aW9uIHRleHRQb3NpdGlvbigpIGNvbnN0OwogICAgIHZpcnR1YWwgT3Jk
aW5hbE51bWJlciBsaW5lTnVtYmVyKCkgY29uc3Q7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9YU1NBdWRpdG9yLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2Vy
L1hTU0F1ZGl0b3IuY3BwCmluZGV4IDllZmEyODI4ZTQ5ZmRkNWM0YzlhM2QwYWUzZjliZjM1Y2Ey
MjA2YTQuLmRhYjMyZGFlMjY1ZmFlYTFkN2Y3YzNjOGQ3MDgwNWE2YTA3NGFmZGYgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuY3BwCkBAIC0yNzIsNTkgKzI3Miw1OSBA
QCB2b2lkIFhTU0F1ZGl0b3I6OmluaXQoRG9jdW1lbnQqIGRvY3VtZW50KQogICAgIH0KIH0KIAot
UGFzc093blB0cjxEaWRCbG9ja1NjcmlwdFJlcXVlc3Q+IFhTU0F1ZGl0b3I6OmZpbHRlclRva2Vu
KEhUTUxUb2tlbiYgdG9rZW4pCitQYXNzT3duUHRyPERpZEJsb2NrU2NyaXB0UmVxdWVzdD4gWFNT
QXVkaXRvcjo6ZmlsdGVyVG9rZW4oY29uc3QgRmlsdGVyVG9rZW5SZXF1ZXN0JiByZXF1ZXN0KQog
ewogICAgIEFTU0VSVChtX3N0YXRlID09IEluaXRpYWxpemVkKTsKICAgICBpZiAoIW1faXNFbmFi
bGVkIHx8IG1feHNzUHJvdGVjdGlvbiA9PSBYU1NQcm90ZWN0aW9uRGlzYWJsZWQpCiAgICAgICAg
IHJldHVybiBudWxscHRyOwogCiAgICAgYm9vbCBkaWRCbG9ja1NjcmlwdCA9IGZhbHNlOwotICAg
IGlmICh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKQotICAgICAgICBk
aWRCbG9ja1NjcmlwdCA9IGZpbHRlclN0YXJ0VG9rZW4odG9rZW4pOworICAgIGlmIChyZXF1ZXN0
LnRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpCisgICAgICAgIGRpZEJs
b2NrU2NyaXB0ID0gZmlsdGVyU3RhcnRUb2tlbihyZXF1ZXN0KTsKICAgICBlbHNlIGlmIChtX3Nj
cmlwdFRhZ05lc3RpbmdMZXZlbCkgewotICAgICAgICBpZiAodG9rZW4udHlwZSgpID09IEhUTUxU
b2tlblR5cGVzOjpDaGFyYWN0ZXIpCi0gICAgICAgICAgICBkaWRCbG9ja1NjcmlwdCA9IGZpbHRl
ckNoYXJhY3RlclRva2VuKHRva2VuKTsKLSAgICAgICAgZWxzZSBpZiAodG9rZW4udHlwZSgpID09
IEhUTUxUb2tlblR5cGVzOjpFbmRUYWcpCi0gICAgICAgICAgICBmaWx0ZXJFbmRUb2tlbih0b2tl
bik7CisgICAgICAgIGlmIChyZXF1ZXN0LnRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6
Q2hhcmFjdGVyKQorICAgICAgICAgICAgZGlkQmxvY2tTY3JpcHQgPSBmaWx0ZXJDaGFyYWN0ZXJU
b2tlbihyZXF1ZXN0KTsKKyAgICAgICAgZWxzZSBpZiAocmVxdWVzdC50b2tlbi50eXBlKCkgPT0g
SFRNTFRva2VuVHlwZXM6OkVuZFRhZykKKyAgICAgICAgICAgIGZpbHRlckVuZFRva2VuKHJlcXVl
c3QudG9rZW4pOwogICAgIH0KIAogICAgIGlmIChkaWRCbG9ja1NjcmlwdCkgewogICAgICAgICBi
b29sIGRpZEJsb2NrRW50aXJlUGFnZSA9IChtX3hzc1Byb3RlY3Rpb24gPT0gWFNTUHJvdGVjdGlv
bkJsb2NrRW5hYmxlZCk7Ci0gICAgICAgIE93blB0cjxEaWRCbG9ja1NjcmlwdFJlcXVlc3Q+IHJl
cXVlc3QgPSBEaWRCbG9ja1NjcmlwdFJlcXVlc3Q6OmNyZWF0ZShtX3JlcG9ydFVSTCwgbV9vcmln
aW5hbFVSTCwgbV9vcmlnaW5hbEhUVFBCb2R5LCBkaWRCbG9ja0VudGlyZVBhZ2UpOworICAgICAg
ICBPd25QdHI8RGlkQmxvY2tTY3JpcHRSZXF1ZXN0PiBkaWRCbG9ja1NjcmlwdFJlcXVlc3QgPSBE
aWRCbG9ja1NjcmlwdFJlcXVlc3Q6OmNyZWF0ZShtX3JlcG9ydFVSTCwgbV9vcmlnaW5hbFVSTCwg
bV9vcmlnaW5hbEhUVFBCb2R5LCBkaWRCbG9ja0VudGlyZVBhZ2UpOwogICAgICAgICBpZiAoIW1f
cmVwb3J0VVJMLmlzRW1wdHkoKSkgewogICAgICAgICAgICAgbV9yZXBvcnRVUkwgPSBLVVJMKCk7
CiAgICAgICAgICAgICBtX29yaWdpbmFsVVJMID0gU3RyaW5nKCk7CiAgICAgICAgICAgICBtX29y
aWdpbmFsSFRUUEJvZHkgPSBTdHJpbmcoKTsKICAgICAgICAgfQotICAgICAgICByZXR1cm4gcmVx
dWVzdC5yZWxlYXNlKCk7CisgICAgICAgIHJldHVybiBkaWRCbG9ja1NjcmlwdFJlcXVlc3QucmVs
ZWFzZSgpOwogICAgIH0KICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIAotYm9vbCBYU1NBdWRpdG9y
OjpmaWx0ZXJTdGFydFRva2VuKEhUTUxUb2tlbiYgdG9rZW4pCitib29sIFhTU0F1ZGl0b3I6OmZp
bHRlclN0YXJ0VG9rZW4oY29uc3QgRmlsdGVyVG9rZW5SZXF1ZXN0JiByZXF1ZXN0KQogewotICAg
IGJvb2wgZGlkQmxvY2tTY3JpcHQgPSBlcmFzZURhbmdlcm91c0F0dHJpYnV0ZXNJZkluamVjdGVk
KHRva2VuKTsKKyAgICBib29sIGRpZEJsb2NrU2NyaXB0ID0gZXJhc2VEYW5nZXJvdXNBdHRyaWJ1
dGVzSWZJbmplY3RlZChyZXF1ZXN0KTsKIAotICAgIGlmIChoYXNOYW1lKHRva2VuLCBzY3JpcHRU
YWcpKSB7Ci0gICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGZpbHRlclNjcmlwdFRva2VuKHRva2Vu
KTsKKyAgICBpZiAoaGFzTmFtZShyZXF1ZXN0LnRva2VuLCBzY3JpcHRUYWcpKSB7CisgICAgICAg
IGRpZEJsb2NrU2NyaXB0IHw9IGZpbHRlclNjcmlwdFRva2VuKHJlcXVlc3QpOwogICAgICAgICBB
U1NFUlQobV9zaG91bGRBbGxvd0NEQVRBIHx8ICFtX3NjcmlwdFRhZ05lc3RpbmdMZXZlbCk7CiAg
ICAgICAgIG1fc2NyaXB0VGFnTmVzdGluZ0xldmVsKys7Ci0gICAgfSBlbHNlIGlmIChoYXNOYW1l
KHRva2VuLCBvYmplY3RUYWcpKQotICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBmaWx0ZXJPYmpl
Y3RUb2tlbih0b2tlbik7Ci0gICAgZWxzZSBpZiAoaGFzTmFtZSh0b2tlbiwgcGFyYW1UYWcpKQot
ICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBmaWx0ZXJQYXJhbVRva2VuKHRva2VuKTsKLSAgICBl
bHNlIGlmIChoYXNOYW1lKHRva2VuLCBlbWJlZFRhZykpCi0gICAgICAgIGRpZEJsb2NrU2NyaXB0
IHw9IGZpbHRlckVtYmVkVG9rZW4odG9rZW4pOwotICAgIGVsc2UgaWYgKGhhc05hbWUodG9rZW4s
IGFwcGxldFRhZykpCi0gICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGZpbHRlckFwcGxldFRva2Vu
KHRva2VuKTsKLSAgICBlbHNlIGlmIChoYXNOYW1lKHRva2VuLCBpZnJhbWVUYWcpKQotICAgICAg
ICBkaWRCbG9ja1NjcmlwdCB8PSBmaWx0ZXJJZnJhbWVUb2tlbih0b2tlbik7Ci0gICAgZWxzZSBp
ZiAoaGFzTmFtZSh0b2tlbiwgbWV0YVRhZykpCi0gICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGZp
bHRlck1ldGFUb2tlbih0b2tlbik7Ci0gICAgZWxzZSBpZiAoaGFzTmFtZSh0b2tlbiwgYmFzZVRh
ZykpCi0gICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGZpbHRlckJhc2VUb2tlbih0b2tlbik7Ci0g
ICAgZWxzZSBpZiAoaGFzTmFtZSh0b2tlbiwgZm9ybVRhZykpCi0gICAgICAgIGRpZEJsb2NrU2Ny
aXB0IHw9IGZpbHRlckZvcm1Ub2tlbih0b2tlbik7CisgICAgfSBlbHNlIGlmIChoYXNOYW1lKHJl
cXVlc3QudG9rZW4sIG9iamVjdFRhZykpCisgICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGZpbHRl
ck9iamVjdFRva2VuKHJlcXVlc3QpOworICAgIGVsc2UgaWYgKGhhc05hbWUocmVxdWVzdC50b2tl
biwgcGFyYW1UYWcpKQorICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBmaWx0ZXJQYXJhbVRva2Vu
KHJlcXVlc3QpOworICAgIGVsc2UgaWYgKGhhc05hbWUocmVxdWVzdC50b2tlbiwgZW1iZWRUYWcp
KQorICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBmaWx0ZXJFbWJlZFRva2VuKHJlcXVlc3QpOwor
ICAgIGVsc2UgaWYgKGhhc05hbWUocmVxdWVzdC50b2tlbiwgYXBwbGV0VGFnKSkKKyAgICAgICAg
ZGlkQmxvY2tTY3JpcHQgfD0gZmlsdGVyQXBwbGV0VG9rZW4ocmVxdWVzdCk7CisgICAgZWxzZSBp
ZiAoaGFzTmFtZShyZXF1ZXN0LnRva2VuLCBpZnJhbWVUYWcpKQorICAgICAgICBkaWRCbG9ja1Nj
cmlwdCB8PSBmaWx0ZXJJZnJhbWVUb2tlbihyZXF1ZXN0KTsKKyAgICBlbHNlIGlmIChoYXNOYW1l
KHJlcXVlc3QudG9rZW4sIG1ldGFUYWcpKQorICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBmaWx0
ZXJNZXRhVG9rZW4ocmVxdWVzdCk7CisgICAgZWxzZSBpZiAoaGFzTmFtZShyZXF1ZXN0LnRva2Vu
LCBiYXNlVGFnKSkKKyAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZmlsdGVyQmFzZVRva2VuKHJl
cXVlc3QpOworICAgIGVsc2UgaWYgKGhhc05hbWUocmVxdWVzdC50b2tlbiwgZm9ybVRhZykpCisg
ICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGZpbHRlckZvcm1Ub2tlbihyZXF1ZXN0KTsKIAogICAg
IHJldHVybiBkaWRCbG9ja1NjcmlwdDsKIH0KQEAgLTMzOCwxODIgKzMzOCwxODIgQEAgdm9pZCBY
U1NBdWRpdG9yOjpmaWx0ZXJFbmRUb2tlbihIVE1MVG9rZW4mIHRva2VuKQogICAgIH0KIH0KIAot
Ym9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJDaGFyYWN0ZXJUb2tlbihIVE1MVG9rZW4mIHRva2VuKQor
Ym9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJDaGFyYWN0ZXJUb2tlbihjb25zdCBGaWx0ZXJUb2tlblJl
cXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgQVNTRVJUKG1fc2NyaXB0VGFnTmVzdGluZ0xldmVsKTsK
LSAgICBpZiAoaXNDb250YWluZWRJblJlcXVlc3QobV9jYWNoZWREZWNvZGVkU25pcHBldCkgJiYg
aXNDb250YWluZWRJblJlcXVlc3QoZGVjb2RlZFNuaXBwZXRGb3JKYXZhU2NyaXB0KHRva2VuKSkp
IHsKLSAgICAgICAgdG9rZW4uZXJhc2VDaGFyYWN0ZXJzKCk7Ci0gICAgICAgIHRva2VuLmFwcGVu
ZFRvQ2hhcmFjdGVyKCcgJyk7IC8vIFRlY2huaWNhbGx5LCBjaGFyYWN0ZXIgdG9rZW5zIGNhbid0
IGJlIGVtcHR5LgorICAgIGlmIChpc0NvbnRhaW5lZEluUmVxdWVzdChtX2NhY2hlZERlY29kZWRT
bmlwcGV0KSAmJiBpc0NvbnRhaW5lZEluUmVxdWVzdChkZWNvZGVkU25pcHBldEZvckphdmFTY3Jp
cHQocmVxdWVzdCkpKSB7CisgICAgICAgIHJlcXVlc3QudG9rZW4uZXJhc2VDaGFyYWN0ZXJzKCk7
CisgICAgICAgIHJlcXVlc3QudG9rZW4uYXBwZW5kVG9DaGFyYWN0ZXIoJyAnKTsgLy8gVGVjaG5p
Y2FsbHksIGNoYXJhY3RlciB0b2tlbnMgY2FuJ3QgYmUgZW1wdHkuCiAgICAgICAgIHJldHVybiB0
cnVlOwogICAgIH0KICAgICByZXR1cm4gZmFsc2U7CiB9CiAKLWJvb2wgWFNTQXVkaXRvcjo6Zmls
dGVyU2NyaXB0VG9rZW4oSFRNTFRva2VuJiB0b2tlbikKK2Jvb2wgWFNTQXVkaXRvcjo6ZmlsdGVy
U2NyaXB0VG9rZW4oY29uc3QgRmlsdGVyVG9rZW5SZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIEFT
U0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKLSAgICBBU1NF
UlQoaGFzTmFtZSh0b2tlbiwgc2NyaXB0VGFnKSk7CisgICAgQVNTRVJUKHJlcXVlc3QudG9rZW4u
dHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZyk7CisgICAgQVNTRVJUKGhhc05hbWUo
cmVxdWVzdC50b2tlbiwgc2NyaXB0VGFnKSk7CiAKLSAgICBtX2NhY2hlZERlY29kZWRTbmlwcGV0
ID0gZGVjb2RlZFNuaXBwZXRGb3JOYW1lKHRva2VuKTsKKyAgICBtX2NhY2hlZERlY29kZWRTbmlw
cGV0ID0gZGVjb2RlZFNuaXBwZXRGb3JOYW1lKHJlcXVlc3QpOwogICAgIG1fc2hvdWxkQWxsb3dD
REFUQSA9IG1fcGFyc2VyLT50b2tlbml6ZXIoKS0+c2hvdWxkQWxsb3dDREFUQSgpOwogCi0gICAg
aWYgKGlzQ29udGFpbmVkSW5SZXF1ZXN0KGRlY29kZWRTbmlwcGV0Rm9yTmFtZSh0b2tlbikpKQot
ICAgICAgICByZXR1cm4gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHRva2VuLCBzcmNBdHRyLCBi
bGFua1VSTCgpLnN0cmluZygpLCBTcmNMaWtlQXR0cmlidXRlKTsKKyAgICBpZiAoaXNDb250YWlu
ZWRJblJlcXVlc3QoZGVjb2RlZFNuaXBwZXRGb3JOYW1lKHJlcXVlc3QpKSkKKyAgICAgICAgcmV0
dXJuIGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZChyZXF1ZXN0LCBzcmNBdHRyLCBibGFua1VSTCgp
LnN0cmluZygpLCBTcmNMaWtlQXR0cmlidXRlKTsKIAogICAgIHJldHVybiBmYWxzZTsKIH0KIAot
Ym9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJPYmplY3RUb2tlbihIVE1MVG9rZW4mIHRva2VuKQorYm9v
bCBYU1NBdWRpdG9yOjpmaWx0ZXJPYmplY3RUb2tlbihjb25zdCBGaWx0ZXJUb2tlblJlcXVlc3Qm
IHJlcXVlc3QpCiB7Ci0gICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6
U3RhcnRUYWcpOwotICAgIEFTU0VSVChoYXNOYW1lKHRva2VuLCBvYmplY3RUYWcpKTsKKyAgICBB
U1NFUlQocmVxdWVzdC50b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsK
KyAgICBBU1NFUlQoaGFzTmFtZShyZXF1ZXN0LnRva2VuLCBvYmplY3RUYWcpKTsKIAogICAgIGJv
b2wgZGlkQmxvY2tTY3JpcHQgPSBmYWxzZTsKLSAgICBpZiAoaXNDb250YWluZWRJblJlcXVlc3Qo
ZGVjb2RlZFNuaXBwZXRGb3JOYW1lKHRva2VuKSkpIHsKLSAgICAgICAgZGlkQmxvY2tTY3JpcHQg
fD0gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHRva2VuLCBkYXRhQXR0ciwgYmxhbmtVUkwoKS5z
dHJpbmcoKSwgU3JjTGlrZUF0dHJpYnV0ZSk7Ci0gICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVy
YXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgdHlwZUF0dHIpOwotICAgICAgICBkaWRCbG9j
a1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIGNsYXNzaWRBdHRyKTsK
KyAgICBpZiAoaXNDb250YWluZWRJblJlcXVlc3QoZGVjb2RlZFNuaXBwZXRGb3JOYW1lKHJlcXVl
c3QpKSkgeworICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0
ZWQocmVxdWVzdCwgZGF0YUF0dHIsIGJsYW5rVVJMKCkuc3RyaW5nKCksIFNyY0xpa2VBdHRyaWJ1
dGUpOworICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQo
cmVxdWVzdCwgdHlwZUF0dHIpOworICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJp
YnV0ZUlmSW5qZWN0ZWQocmVxdWVzdCwgY2xhc3NpZEF0dHIpOwogICAgIH0KICAgICByZXR1cm4g
ZGlkQmxvY2tTY3JpcHQ7CiB9CiAKLWJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyUGFyYW1Ub2tlbihI
VE1MVG9rZW4mIHRva2VuKQorYm9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJQYXJhbVRva2VuKGNvbnN0
IEZpbHRlclRva2VuUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICBBU1NFUlQodG9rZW4udHlwZSgp
ID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZyk7Ci0gICAgQVNTRVJUKGhhc05hbWUodG9rZW4s
IHBhcmFtVGFnKSk7CisgICAgQVNTRVJUKHJlcXVlc3QudG9rZW4udHlwZSgpID09IEhUTUxUb2tl
blR5cGVzOjpTdGFydFRhZyk7CisgICAgQVNTRVJUKGhhc05hbWUocmVxdWVzdC50b2tlbiwgcGFy
YW1UYWcpKTsKIAogICAgIHNpemVfdCBpbmRleE9mTmFtZUF0dHJpYnV0ZTsKLSAgICBpZiAoIWZp
bmRBdHRyaWJ1dGVXaXRoTmFtZSh0b2tlbiwgbmFtZUF0dHIsIGluZGV4T2ZOYW1lQXR0cmlidXRl
KSkKKyAgICBpZiAoIWZpbmRBdHRyaWJ1dGVXaXRoTmFtZShyZXF1ZXN0LnRva2VuLCBuYW1lQXR0
ciwgaW5kZXhPZk5hbWVBdHRyaWJ1dGUpKQogICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICBj
b25zdCBIVE1MVG9rZW46OkF0dHJpYnV0ZSYgbmFtZUF0dHJpYnV0ZSA9IHRva2VuLmF0dHJpYnV0
ZXMoKS5hdChpbmRleE9mTmFtZUF0dHJpYnV0ZSk7CisgICAgY29uc3QgSFRNTFRva2VuOjpBdHRy
aWJ1dGUmIG5hbWVBdHRyaWJ1dGUgPSByZXF1ZXN0LnRva2VuLmF0dHJpYnV0ZXMoKS5hdChpbmRl
eE9mTmFtZUF0dHJpYnV0ZSk7CiAgICAgU3RyaW5nIG5hbWUgPSBTdHJpbmcobmFtZUF0dHJpYnV0
ZS5tX3ZhbHVlLmRhdGEoKSwgbmFtZUF0dHJpYnV0ZS5tX3ZhbHVlLnNpemUoKSk7CiAKICAgICBp
ZiAoIUhUTUxQYXJhbUVsZW1lbnQ6OmlzVVJMUGFyYW1ldGVyKG5hbWUpKQogICAgICAgICByZXR1
cm4gZmFsc2U7CiAKLSAgICByZXR1cm4gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHRva2VuLCB2
YWx1ZUF0dHIsIGJsYW5rVVJMKCkuc3RyaW5nKCksIFNyY0xpa2VBdHRyaWJ1dGUpOworICAgIHJl
dHVybiBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQocmVxdWVzdCwgdmFsdWVBdHRyLCBibGFua1VS
TCgpLnN0cmluZygpLCBTcmNMaWtlQXR0cmlidXRlKTsKIH0KIAotYm9vbCBYU1NBdWRpdG9yOjpm
aWx0ZXJFbWJlZFRva2VuKEhUTUxUb2tlbiYgdG9rZW4pCitib29sIFhTU0F1ZGl0b3I6OmZpbHRl
ckVtYmVkVG9rZW4oY29uc3QgRmlsdGVyVG9rZW5SZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIEFT
U0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKLSAgICBBU1NF
UlQoaGFzTmFtZSh0b2tlbiwgZW1iZWRUYWcpKTsKKyAgICBBU1NFUlQocmVxdWVzdC50b2tlbi50
eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKKyAgICBBU1NFUlQoaGFzTmFtZShy
ZXF1ZXN0LnRva2VuLCBlbWJlZFRhZykpOwogCiAgICAgYm9vbCBkaWRCbG9ja1NjcmlwdCA9IGZh
bHNlOwotICAgIGlmIChpc0NvbnRhaW5lZEluUmVxdWVzdChkZWNvZGVkU25pcHBldEZvck5hbWUo
dG9rZW4pKSkgewotICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5q
ZWN0ZWQodG9rZW4sIGNvZGVBdHRyLCBTdHJpbmcoKSwgU3JjTGlrZUF0dHJpYnV0ZSk7Ci0gICAg
ICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgc3Jj
QXR0ciwgYmxhbmtVUkwoKS5zdHJpbmcoKSwgU3JjTGlrZUF0dHJpYnV0ZSk7Ci0gICAgICAgIGRp
ZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgdHlwZUF0dHIp
OworICAgIGlmIChpc0NvbnRhaW5lZEluUmVxdWVzdChkZWNvZGVkU25pcHBldEZvck5hbWUocmVx
dWVzdCkpKSB7CisgICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmpl
Y3RlZChyZXF1ZXN0LCBjb2RlQXR0ciwgU3RyaW5nKCksIFNyY0xpa2VBdHRyaWJ1dGUpOworICAg
ICAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQocmVxdWVzdCwg
c3JjQXR0ciwgYmxhbmtVUkwoKS5zdHJpbmcoKSwgU3JjTGlrZUF0dHJpYnV0ZSk7CisgICAgICAg
IGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZChyZXF1ZXN0LCB0eXBl
QXR0cik7CiAgICAgfQogICAgIHJldHVybiBkaWRCbG9ja1NjcmlwdDsKIH0KIAotYm9vbCBYU1NB
dWRpdG9yOjpmaWx0ZXJBcHBsZXRUb2tlbihIVE1MVG9rZW4mIHRva2VuKQorYm9vbCBYU1NBdWRp
dG9yOjpmaWx0ZXJBcHBsZXRUb2tlbihjb25zdCBGaWx0ZXJUb2tlblJlcXVlc3QmIHJlcXVlc3Qp
CiB7Ci0gICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcp
OwotICAgIEFTU0VSVChoYXNOYW1lKHRva2VuLCBhcHBsZXRUYWcpKTsKKyAgICBBU1NFUlQocmVx
dWVzdC50b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKKyAgICBBU1NF
UlQoaGFzTmFtZShyZXF1ZXN0LnRva2VuLCBhcHBsZXRUYWcpKTsKIAogICAgIGJvb2wgZGlkQmxv
Y2tTY3JpcHQgPSBmYWxzZTsKLSAgICBpZiAoaXNDb250YWluZWRJblJlcXVlc3QoZGVjb2RlZFNu
aXBwZXRGb3JOYW1lKHRva2VuKSkpIHsKLSAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VB
dHRyaWJ1dGVJZkluamVjdGVkKHRva2VuLCBjb2RlQXR0ciwgU3RyaW5nKCksIFNyY0xpa2VBdHRy
aWJ1dGUpOwotICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0
ZWQodG9rZW4sIG9iamVjdEF0dHIpOworICAgIGlmIChpc0NvbnRhaW5lZEluUmVxdWVzdChkZWNv
ZGVkU25pcHBldEZvck5hbWUocmVxdWVzdCkpKSB7CisgICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9
IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZChyZXF1ZXN0LCBjb2RlQXR0ciwgU3RyaW5nKCksIFNy
Y0xpa2VBdHRyaWJ1dGUpOworICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0
ZUlmSW5qZWN0ZWQocmVxdWVzdCwgb2JqZWN0QXR0cik7CiAgICAgfQogICAgIHJldHVybiBkaWRC
bG9ja1NjcmlwdDsKIH0KIAotYm9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJJZnJhbWVUb2tlbihIVE1M
VG9rZW4mIHRva2VuKQorYm9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJJZnJhbWVUb2tlbihjb25zdCBG
aWx0ZXJUb2tlblJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9
PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpOwotICAgIEFTU0VSVChoYXNOYW1lKHRva2VuLCBp
ZnJhbWVUYWcpKTsKKyAgICBBU1NFUlQocmVxdWVzdC50b2tlbi50eXBlKCkgPT0gSFRNTFRva2Vu
VHlwZXM6OlN0YXJ0VGFnKTsKKyAgICBBU1NFUlQoaGFzTmFtZShyZXF1ZXN0LnRva2VuLCBpZnJh
bWVUYWcpKTsKIAogICAgIGJvb2wgZGlkQmxvY2tTY3JpcHQgPSBmYWxzZTsKLSAgICBpZiAoaXND
b250YWluZWRJblJlcXVlc3QoZGVjb2RlZFNuaXBwZXRGb3JOYW1lKHRva2VuKSkpIHsKLSAgICAg
ICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHRva2VuLCBzcmNB
dHRyLCBTdHJpbmcoKSwgU3JjTGlrZUF0dHJpYnV0ZSk7Ci0gICAgICAgIGRpZEJsb2NrU2NyaXB0
IHw9IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgc3JjZG9jQXR0ciwgU3RyaW5nKCks
IFNjcmlwdExpa2VBdHRyaWJ1dGUpOworICAgIGlmIChpc0NvbnRhaW5lZEluUmVxdWVzdChkZWNv
ZGVkU25pcHBldEZvck5hbWUocmVxdWVzdCkpKSB7CisgICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9
IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZChyZXF1ZXN0LCBzcmNBdHRyLCBTdHJpbmcoKSwgU3Jj
TGlrZUF0dHJpYnV0ZSk7CisgICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRl
SWZJbmplY3RlZChyZXF1ZXN0LCBzcmNkb2NBdHRyLCBTdHJpbmcoKSwgU2NyaXB0TGlrZUF0dHJp
YnV0ZSk7CiAgICAgfQogICAgIHJldHVybiBkaWRCbG9ja1NjcmlwdDsKIH0KIAotYm9vbCBYU1NB
dWRpdG9yOjpmaWx0ZXJNZXRhVG9rZW4oSFRNTFRva2VuJiB0b2tlbikKK2Jvb2wgWFNTQXVkaXRv
cjo6ZmlsdGVyTWV0YVRva2VuKGNvbnN0IEZpbHRlclRva2VuUmVxdWVzdCYgcmVxdWVzdCkKIHsK
LSAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZyk7Ci0g
ICAgQVNTRVJUKGhhc05hbWUodG9rZW4sIG1ldGFUYWcpKTsKKyAgICBBU1NFUlQocmVxdWVzdC50
b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKKyAgICBBU1NFUlQoaGFz
TmFtZShyZXF1ZXN0LnRva2VuLCBtZXRhVGFnKSk7CiAKLSAgICByZXR1cm4gZXJhc2VBdHRyaWJ1
dGVJZkluamVjdGVkKHRva2VuLCBodHRwX2VxdWl2QXR0cik7CisgICAgcmV0dXJuIGVyYXNlQXR0
cmlidXRlSWZJbmplY3RlZChyZXF1ZXN0LCBodHRwX2VxdWl2QXR0cik7CiB9CiAKLWJvb2wgWFNT
QXVkaXRvcjo6ZmlsdGVyQmFzZVRva2VuKEhUTUxUb2tlbiYgdG9rZW4pCitib29sIFhTU0F1ZGl0
b3I6OmZpbHRlckJhc2VUb2tlbihjb25zdCBGaWx0ZXJUb2tlblJlcXVlc3QmIHJlcXVlc3QpCiB7
Ci0gICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpOwot
ICAgIEFTU0VSVChoYXNOYW1lKHRva2VuLCBiYXNlVGFnKSk7CisgICAgQVNTRVJUKHJlcXVlc3Qu
dG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZyk7CisgICAgQVNTRVJUKGhh
c05hbWUocmVxdWVzdC50b2tlbiwgYmFzZVRhZykpOwogCi0gICAgcmV0dXJuIGVyYXNlQXR0cmli
dXRlSWZJbmplY3RlZCh0b2tlbiwgaHJlZkF0dHIpOworICAgIHJldHVybiBlcmFzZUF0dHJpYnV0
ZUlmSW5qZWN0ZWQocmVxdWVzdCwgaHJlZkF0dHIpOwogfQogCi1ib29sIFhTU0F1ZGl0b3I6OmZp
bHRlckZvcm1Ub2tlbihIVE1MVG9rZW4mIHRva2VuKQorYm9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJG
b3JtVG9rZW4oY29uc3QgRmlsdGVyVG9rZW5SZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIEFTU0VS
VCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKLSAgICBBU1NFUlQo
aGFzTmFtZSh0b2tlbiwgZm9ybVRhZykpOworICAgIEFTU0VSVChyZXF1ZXN0LnRva2VuLnR5cGUo
KSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpOworICAgIEFTU0VSVChoYXNOYW1lKHJlcXVl
c3QudG9rZW4sIGZvcm1UYWcpKTsKIAotICAgIHJldHVybiBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0
ZWQodG9rZW4sIGFjdGlvbkF0dHIsIGJsYW5rVVJMKCkuc3RyaW5nKCkpOworICAgIHJldHVybiBl
cmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQocmVxdWVzdCwgYWN0aW9uQXR0ciwgYmxhbmtVUkwoKS5z
dHJpbmcoKSk7CiB9CiAKLWJvb2wgWFNTQXVkaXRvcjo6ZXJhc2VEYW5nZXJvdXNBdHRyaWJ1dGVz
SWZJbmplY3RlZChIVE1MVG9rZW4mIHRva2VuKQorYm9vbCBYU1NBdWRpdG9yOjplcmFzZURhbmdl
cm91c0F0dHJpYnV0ZXNJZkluamVjdGVkKGNvbnN0IEZpbHRlclRva2VuUmVxdWVzdCYgcmVxdWVz
dCkKIHsKICAgICBERUZJTkVfU1RBVElDX0xPQ0FMKFN0cmluZywgc2FmZUphdmFTY3JpcHRVUkws
IChBU0NJSUxpdGVyYWwoImphdmFzY3JpcHQ6dm9pZCgwKSIpKSk7CiAKICAgICBib29sIGRpZEJs
b2NrU2NyaXB0ID0gZmFsc2U7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCB0b2tlbi5hdHRy
aWJ1dGVzKCkuc2l6ZSgpOyArK2kpIHsKLSAgICAgICAgY29uc3QgSFRNTFRva2VuOjpBdHRyaWJ1
dGUmIGF0dHJpYnV0ZSA9IHRva2VuLmF0dHJpYnV0ZXMoKS5hdChpKTsKKyAgICBmb3IgKHNpemVf
dCBpID0gMDsgaSA8IHJlcXVlc3QudG9rZW4uYXR0cmlidXRlcygpLnNpemUoKTsgKytpKSB7Cisg
ICAgICAgIGNvbnN0IEhUTUxUb2tlbjo6QXR0cmlidXRlJiBhdHRyaWJ1dGUgPSByZXF1ZXN0LnRv
a2VuLmF0dHJpYnV0ZXMoKS5hdChpKTsKICAgICAgICAgYm9vbCBpc0lubGluZUV2ZW50SGFuZGxl
ciA9IGlzTmFtZU9mSW5saW5lRXZlbnRIYW5kbGVyKGF0dHJpYnV0ZS5tX25hbWUpOwogICAgICAg
ICBib29sIHZhbHVlQ29udGFpbnNKYXZhU2NyaXB0VVJMID0gIWlzSW5saW5lRXZlbnRIYW5kbGVy
ICYmIHByb3RvY29sSXNKYXZhU2NyaXB0KHN0cmlwTGVhZGluZ0FuZFRyYWlsaW5nSFRNTFNwYWNl
cyhTdHJpbmcoYXR0cmlidXRlLm1fdmFsdWUuZGF0YSgpLCBhdHRyaWJ1dGUubV92YWx1ZS5zaXpl
KCkpKSk7CiAgICAgICAgIGlmICghaXNJbmxpbmVFdmVudEhhbmRsZXIgJiYgIXZhbHVlQ29udGFp
bnNKYXZhU2NyaXB0VVJMKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGlmICghaXND
b250YWluZWRJblJlcXVlc3QoZGVjb2RlZFNuaXBwZXRGb3JBdHRyaWJ1dGUodG9rZW4sIGF0dHJp
YnV0ZSwgU2NyaXB0TGlrZUF0dHJpYnV0ZSkpKQorICAgICAgICBpZiAoIWlzQ29udGFpbmVkSW5S
ZXF1ZXN0KGRlY29kZWRTbmlwcGV0Rm9yQXR0cmlidXRlKHJlcXVlc3QsIGF0dHJpYnV0ZSwgU2Ny
aXB0TGlrZUF0dHJpYnV0ZSkpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIHRva2Vu
LmVyYXNlVmFsdWVPZkF0dHJpYnV0ZShpKTsKKyAgICAgICAgcmVxdWVzdC50b2tlbi5lcmFzZVZh
bHVlT2ZBdHRyaWJ1dGUoaSk7CiAgICAgICAgIGlmICh2YWx1ZUNvbnRhaW5zSmF2YVNjcmlwdFVS
TCkKLSAgICAgICAgICAgIHRva2VuLmFwcGVuZFRvQXR0cmlidXRlVmFsdWUoaSwgc2FmZUphdmFT
Y3JpcHRVUkwpOworICAgICAgICAgICAgcmVxdWVzdC50b2tlbi5hcHBlbmRUb0F0dHJpYnV0ZVZh
bHVlKGksIHNhZmVKYXZhU2NyaXB0VVJMKTsKICAgICAgICAgZGlkQmxvY2tTY3JpcHQgPSB0cnVl
OwogICAgIH0KICAgICByZXR1cm4gZGlkQmxvY2tTY3JpcHQ7CiB9CiAKLWJvb2wgWFNTQXVkaXRv
cjo6ZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKEhUTUxUb2tlbiYgdG9rZW4sIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRWYWx1ZSwg
QXR0cmlidXRlS2luZCB0cmVhdG1lbnQpCitib29sIFhTU0F1ZGl0b3I6OmVyYXNlQXR0cmlidXRl
SWZJbmplY3RlZChjb25zdCBGaWx0ZXJUb2tlblJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IFF1YWxp
ZmllZE5hbWUmIGF0dHJpYnV0ZU5hbWUsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRWYWx1ZSwg
QXR0cmlidXRlS2luZCB0cmVhdG1lbnQpCiB7CiAgICAgc2l6ZV90IGluZGV4T2ZBdHRyaWJ1dGUg
PSAwOwotICAgIGlmIChmaW5kQXR0cmlidXRlV2l0aE5hbWUodG9rZW4sIGF0dHJpYnV0ZU5hbWUs
IGluZGV4T2ZBdHRyaWJ1dGUpKSB7Ci0gICAgICAgIGNvbnN0IEhUTUxUb2tlbjo6QXR0cmlidXRl
JiBhdHRyaWJ1dGUgPSB0b2tlbi5hdHRyaWJ1dGVzKCkuYXQoaW5kZXhPZkF0dHJpYnV0ZSk7Ci0g
ICAgICAgIGlmIChpc0NvbnRhaW5lZEluUmVxdWVzdChkZWNvZGVkU25pcHBldEZvckF0dHJpYnV0
ZSh0b2tlbiwgYXR0cmlidXRlLCB0cmVhdG1lbnQpKSkgeworICAgIGlmIChmaW5kQXR0cmlidXRl
V2l0aE5hbWUocmVxdWVzdC50b2tlbiwgYXR0cmlidXRlTmFtZSwgaW5kZXhPZkF0dHJpYnV0ZSkp
IHsKKyAgICAgICAgY29uc3QgSFRNTFRva2VuOjpBdHRyaWJ1dGUmIGF0dHJpYnV0ZSA9IHJlcXVl
c3QudG9rZW4uYXR0cmlidXRlcygpLmF0KGluZGV4T2ZBdHRyaWJ1dGUpOworICAgICAgICBpZiAo
aXNDb250YWluZWRJblJlcXVlc3QoZGVjb2RlZFNuaXBwZXRGb3JBdHRyaWJ1dGUocmVxdWVzdCwg
YXR0cmlidXRlLCB0cmVhdG1lbnQpKSkgewogICAgICAgICAgICAgaWYgKHRocmVhZFNhZmVNYXRj
aChhdHRyaWJ1dGVOYW1lLCBzcmNBdHRyKSAmJiBpc0xpa2VseVNhZmVSZXNvdXJjZShTdHJpbmco
YXR0cmlidXRlLm1fdmFsdWUuZGF0YSgpLCBhdHRyaWJ1dGUubV92YWx1ZS5zaXplKCkpKSkKICAg
ICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgICAgICAgICBpZiAodGhyZWFkU2FmZU1h
dGNoKGF0dHJpYnV0ZU5hbWUsIGh0dHBfZXF1aXZBdHRyKSAmJiAhaXNEYW5nZXJvdXNIVFRQRXF1
aXYoU3RyaW5nKGF0dHJpYnV0ZS5tX3ZhbHVlLmRhdGEoKSwgYXR0cmlidXRlLm1fdmFsdWUuc2l6
ZSgpKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwotICAgICAgICAgICAgdG9rZW4u
ZXJhc2VWYWx1ZU9mQXR0cmlidXRlKGluZGV4T2ZBdHRyaWJ1dGUpOworICAgICAgICAgICAgcmVx
dWVzdC50b2tlbi5lcmFzZVZhbHVlT2ZBdHRyaWJ1dGUoaW5kZXhPZkF0dHJpYnV0ZSk7CiAgICAg
ICAgICAgICBpZiAoIXJlcGxhY2VtZW50VmFsdWUuaXNFbXB0eSgpKQotICAgICAgICAgICAgICAg
IHRva2VuLmFwcGVuZFRvQXR0cmlidXRlVmFsdWUoaW5kZXhPZkF0dHJpYnV0ZSwgcmVwbGFjZW1l
bnRWYWx1ZSk7CisgICAgICAgICAgICAgICAgcmVxdWVzdC50b2tlbi5hcHBlbmRUb0F0dHJpYnV0
ZVZhbHVlKGluZGV4T2ZBdHRyaWJ1dGUsIHJlcGxhY2VtZW50VmFsdWUpOwogICAgICAgICAgICAg
cmV0dXJuIHRydWU7CiAgICAgICAgIH0KICAgICB9CiAgICAgcmV0dXJuIGZhbHNlOwogfQogCi1T
dHJpbmcgWFNTQXVkaXRvcjo6ZGVjb2RlZFNuaXBwZXRGb3JOYW1lKGNvbnN0IEhUTUxUb2tlbiYg
dG9rZW4pCitTdHJpbmcgWFNTQXVkaXRvcjo6ZGVjb2RlZFNuaXBwZXRGb3JOYW1lKGNvbnN0IEZp
bHRlclRva2VuUmVxdWVzdCYgcmVxdWVzdCkKIHsKICAgICAvLyBHcmFiIGEgZml4ZWQgbnVtYmVy
IG9mIGNoYXJhY3RlcnMgZXF1YWwgdG8gdGhlIGxlbmd0aCBvZiB0aGUgdG9rZW4ncyBuYW1lIHBs
dXMgb25lICh0byBhY2NvdW50IGZvciB0aGUgIjwiKS4KLSAgICByZXR1cm4gZnVsbHlEZWNvZGVT
dHJpbmcobV9wYXJzZXItPnNvdXJjZUZvclRva2VuKHRva2VuKSwgbV9wYXJzZXItPmRvY3VtZW50
KCktPmRlY29kZXIoKSkuc3Vic3RyaW5nKDAsIHRva2VuLm5hbWUoKS5zaXplKCkgKyAxKTsKKyAg
ICByZXR1cm4gZnVsbHlEZWNvZGVTdHJpbmcocmVxdWVzdC5zb3VyY2VUcmFja2VyLnNvdXJjZUZv
clRva2VuKHJlcXVlc3QudG9rZW4pLCByZXF1ZXN0LmRlY29kZXIpLnN1YnN0cmluZygwLCByZXF1
ZXN0LnRva2VuLm5hbWUoKS5zaXplKCkgKyAxKTsKIH0KIAotU3RyaW5nIFhTU0F1ZGl0b3I6OmRl
Y29kZWRTbmlwcGV0Rm9yQXR0cmlidXRlKGNvbnN0IEhUTUxUb2tlbiYgdG9rZW4sIGNvbnN0IEhU
TUxUb2tlbjo6QXR0cmlidXRlJiBhdHRyaWJ1dGUsIEF0dHJpYnV0ZUtpbmQgdHJlYXRtZW50KQor
U3RyaW5nIFhTU0F1ZGl0b3I6OmRlY29kZWRTbmlwcGV0Rm9yQXR0cmlidXRlKGNvbnN0IEZpbHRl
clRva2VuUmVxdWVzdCYgcmVxdWVzdCwgY29uc3QgSFRNTFRva2VuOjpBdHRyaWJ1dGUmIGF0dHJp
YnV0ZSwgQXR0cmlidXRlS2luZCB0cmVhdG1lbnQpCiB7CiAgICAgLy8gVGhlIHJhbmdlIGRvZXNu
J3QgaW5sY3VkZSB0aGUgY2hhcmFjdGVyIHdoaWNoIHRlcm1pbmF0ZXMgdGhlIHZhbHVlLiBTbywK
ICAgICAvLyBmb3IgYW4gaW5wdXQgb2YgfG5hbWU9InZhbHVlInwsIHRoZSBzbmlwcGV0IGlzIHxu
YW1lPSJ2YWx1ZXwuIEZvciBhbgogICAgIC8vIHVucXVvdGVkIGlucHV0IG9mIHxuYW1lPXZhbHVl
IHwsIHRoZSBzbmlwcGV0IGlzIHxuYW1lPXZhbHVlfC4KICAgICAvLyBGSVhNRTogV2Ugc2hvdWxk
IGdyYWIgb25lIGNoYXJhY3RlciBiZWZvcmUgdGhlIG5hbWUgYWxzby4KLSAgICBpbnQgc3RhcnQg
PSBhdHRyaWJ1dGUubV9uYW1lUmFuZ2UubV9zdGFydCAtIHRva2VuLnN0YXJ0SW5kZXgoKTsKLSAg
ICBpbnQgZW5kID0gYXR0cmlidXRlLm1fdmFsdWVSYW5nZS5tX2VuZCAtIHRva2VuLnN0YXJ0SW5k
ZXgoKTsKLSAgICBTdHJpbmcgZGVjb2RlZFNuaXBwZXQgPSBmdWxseURlY29kZVN0cmluZyhtX3Bh
cnNlci0+c291cmNlRm9yVG9rZW4odG9rZW4pLnN1YnN0cmluZyhzdGFydCwgZW5kIC0gc3RhcnQp
LCBtX3BhcnNlci0+ZG9jdW1lbnQoKS0+ZGVjb2RlcigpKTsKKyAgICBpbnQgc3RhcnQgPSBhdHRy
aWJ1dGUubV9uYW1lUmFuZ2UubV9zdGFydCAtIHJlcXVlc3QudG9rZW4uc3RhcnRJbmRleCgpOwor
ICAgIGludCBlbmQgPSBhdHRyaWJ1dGUubV92YWx1ZVJhbmdlLm1fZW5kIC0gcmVxdWVzdC50b2tl
bi5zdGFydEluZGV4KCk7CisgICAgU3RyaW5nIGRlY29kZWRTbmlwcGV0ID0gZnVsbHlEZWNvZGVT
dHJpbmcocmVxdWVzdC5zb3VyY2VUcmFja2VyLnNvdXJjZUZvclRva2VuKHJlcXVlc3QudG9rZW4p
LnN1YnN0cmluZyhzdGFydCwgZW5kIC0gc3RhcnQpLCByZXF1ZXN0LmRlY29kZXIpOwogICAgIGRl
Y29kZWRTbmlwcGV0LnRydW5jYXRlKGtNYXhpbXVtRnJhZ21lbnRMZW5ndGhUYXJnZXQpOwogICAg
IGlmICh0cmVhdG1lbnQgPT0gU3JjTGlrZUF0dHJpYnV0ZSkgewogICAgICAgICBpbnQgc2xhc2hD
b3VudCA9IDA7CkBAIC01NjQsOSArNTY0LDkgQEAgU3RyaW5nIFhTU0F1ZGl0b3I6OmRlY29kZWRT
bmlwcGV0Rm9yQXR0cmlidXRlKGNvbnN0IEhUTUxUb2tlbiYgdG9rZW4sIGNvbnN0IEhUTUwKICAg
ICByZXR1cm4gZGVjb2RlZFNuaXBwZXQ7CiB9CiAKLVN0cmluZyBYU1NBdWRpdG9yOjpkZWNvZGVk
U25pcHBldEZvckphdmFTY3JpcHQoY29uc3QgSFRNTFRva2VuJiB0b2tlbikKK1N0cmluZyBYU1NB
dWRpdG9yOjpkZWNvZGVkU25pcHBldEZvckphdmFTY3JpcHQoY29uc3QgRmlsdGVyVG9rZW5SZXF1
ZXN0JiByZXF1ZXN0KQogewotICAgIFN0cmluZyBzdHJpbmcgPSBtX3BhcnNlci0+c291cmNlRm9y
VG9rZW4odG9rZW4pOworICAgIFN0cmluZyBzdHJpbmcgPSByZXF1ZXN0LnNvdXJjZVRyYWNrZXIu
c291cmNlRm9yVG9rZW4ocmVxdWVzdC50b2tlbik7CiAgICAgc2l6ZV90IHN0YXJ0UG9zaXRpb24g
PSAwOwogICAgIHNpemVfdCBlbmRQb3NpdGlvbiA9IHN0cmluZy5sZW5ndGgoKTsKICAgICBzaXpl
X3QgZm91bmRQb3NpdGlvbiA9IG5vdEZvdW5kOwpAQCAtNjIxLDcgKzYyMSw3IEBAIFN0cmluZyBY
U1NBdWRpdG9yOjpkZWNvZGVkU25pcHBldEZvckphdmFTY3JpcHQoY29uc3QgSFRNTFRva2VuJiB0
b2tlbikKICAgICAgICAgICAgIH0KICAgICAgICAgfQogCi0gICAgICAgIHJlc3VsdCA9IGZ1bGx5
RGVjb2RlU3RyaW5nKHN0cmluZy5zdWJzdHJpbmcoc3RhcnRQb3NpdGlvbiwgZm91bmRQb3NpdGlv
biAtIHN0YXJ0UG9zaXRpb24pLCBtX3BhcnNlci0+ZG9jdW1lbnQoKS0+ZGVjb2RlcigpKTsKKyAg
ICAgICAgcmVzdWx0ID0gZnVsbHlEZWNvZGVTdHJpbmcoc3RyaW5nLnN1YnN0cmluZyhzdGFydFBv
c2l0aW9uLCBmb3VuZFBvc2l0aW9uIC0gc3RhcnRQb3NpdGlvbiksIHJlcXVlc3QuZGVjb2Rlcik7
CiAgICAgICAgIHN0YXJ0UG9zaXRpb24gPSBmb3VuZFBvc2l0aW9uICsgMTsKICAgICB9CiAgICAg
cmV0dXJuIHJlc3VsdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hT
U0F1ZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuaAppbmRl
eCAyYmQxN2I1NWNmMzFjOTVhOGE2ZTQ4ZGIwNzgzMTY0MWRjODhjNmE4Li5mYTIzNGQzN2NkNjUz
MDAwMGIxNjhiZGY4M2Y0OGVmMDkyYzM1Zjk5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9o
dG1sL3BhcnNlci9YU1NBdWRpdG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIv
WFNTQXVkaXRvci5oCkBAIC0zNiw2ICszNiwyMCBAQCBuYW1lc3BhY2UgV2ViQ29yZSB7CiBjbGFz
cyBEaWRCbG9ja1NjcmlwdFJlcXVlc3Q7CiBjbGFzcyBEb2N1bWVudDsKIGNsYXNzIEhUTUxEb2N1
bWVudFBhcnNlcjsKK2NsYXNzIEhUTUxTb3VyY2VUcmFja2VyOworY2xhc3MgVGV4dFJlc291cmNl
RGVjb2RlcjsKKworc3RydWN0IEZpbHRlclRva2VuUmVxdWVzdCB7CisgICAgRmlsdGVyVG9rZW5S
ZXF1ZXN0KEhUTUxUb2tlbiYgdG9rZW4sIEhUTUxTb3VyY2VUcmFja2VyJiBzb3VyY2VUcmFja2Vy
LCBjb25zdCBUZXh0UmVzb3VyY2VEZWNvZGVyKiBkZWNvZGVyKQorICAgICAgICA6IHRva2VuKHRv
a2VuKQorICAgICAgICAsIHNvdXJjZVRyYWNrZXIoc291cmNlVHJhY2tlcikKKyAgICAgICAgLCBk
ZWNvZGVyKGRlY29kZXIpCisgICAgeyB9CisKKyAgICBIVE1MVG9rZW4mIHRva2VuOworICAgIEhU
TUxTb3VyY2VUcmFja2VyJiBzb3VyY2VUcmFja2VyOworICAgIGNvbnN0IFRleHRSZXNvdXJjZURl
Y29kZXIqIGRlY29kZXI7Cit9OwogCiBjbGFzcyBYU1NBdWRpdG9yIHsKICAgICBXVEZfTUFLRV9O
T05DT1BZQUJMRShYU1NBdWRpdG9yKTsKQEAgLTQzLDcgKzU3LDcgQEAgcHVibGljOgogICAgIGV4
cGxpY2l0IFhTU0F1ZGl0b3IoSFRNTERvY3VtZW50UGFyc2VyKik7CiAKICAgICB2b2lkIGluaXQo
RG9jdW1lbnQqKTsKLSAgICBQYXNzT3duUHRyPERpZEJsb2NrU2NyaXB0UmVxdWVzdD4gZmlsdGVy
VG9rZW4oSFRNTFRva2VuJik7CisgICAgUGFzc093blB0cjxEaWRCbG9ja1NjcmlwdFJlcXVlc3Q+
IGZpbHRlclRva2VuKGNvbnN0IEZpbHRlclRva2VuUmVxdWVzdCYpOwogCiBwcml2YXRlOgogICAg
IHN0YXRpYyBjb25zdCBzaXplX3Qga01heGltdW1GcmFnbWVudExlbmd0aFRhcmdldCA9IDEwMDsK
QEAgLTU5LDI2ICs3MywyNiBAQCBwcml2YXRlOgogICAgICAgICBTY3JpcHRMaWtlQXR0cmlidXRl
CiAgICAgfTsKIAotICAgIGJvb2wgZmlsdGVyU3RhcnRUb2tlbihIVE1MVG9rZW4mKTsKKyAgICBi
b29sIGZpbHRlclN0YXJ0VG9rZW4oY29uc3QgRmlsdGVyVG9rZW5SZXF1ZXN0Jik7CiAgICAgdm9p
ZCBmaWx0ZXJFbmRUb2tlbihIVE1MVG9rZW4mKTsKLSAgICBib29sIGZpbHRlckNoYXJhY3RlclRv
a2VuKEhUTUxUb2tlbiYpOwotICAgIGJvb2wgZmlsdGVyU2NyaXB0VG9rZW4oSFRNTFRva2VuJik7
Ci0gICAgYm9vbCBmaWx0ZXJPYmplY3RUb2tlbihIVE1MVG9rZW4mKTsKLSAgICBib29sIGZpbHRl
clBhcmFtVG9rZW4oSFRNTFRva2VuJik7Ci0gICAgYm9vbCBmaWx0ZXJFbWJlZFRva2VuKEhUTUxU
b2tlbiYpOwotICAgIGJvb2wgZmlsdGVyQXBwbGV0VG9rZW4oSFRNTFRva2VuJik7Ci0gICAgYm9v
bCBmaWx0ZXJJZnJhbWVUb2tlbihIVE1MVG9rZW4mKTsKLSAgICBib29sIGZpbHRlck1ldGFUb2tl
bihIVE1MVG9rZW4mKTsKLSAgICBib29sIGZpbHRlckJhc2VUb2tlbihIVE1MVG9rZW4mKTsKLSAg
ICBib29sIGZpbHRlckZvcm1Ub2tlbihIVE1MVG9rZW4mKTsKLQotICAgIGJvb2wgZXJhc2VEYW5n
ZXJvdXNBdHRyaWJ1dGVzSWZJbmplY3RlZChIVE1MVG9rZW4mKTsKLSAgICBib29sIGVyYXNlQXR0
cmlidXRlSWZJbmplY3RlZChIVE1MVG9rZW4mLCBjb25zdCBRdWFsaWZpZWROYW1lJiwgY29uc3Qg
U3RyaW5nJiByZXBsYWNlbWVudFZhbHVlID0gU3RyaW5nKCksIEF0dHJpYnV0ZUtpbmQgdHJlYXRt
ZW50ID0gTm9ybWFsQXR0cmlidXRlKTsKKyAgICBib29sIGZpbHRlckNoYXJhY3RlclRva2VuKGNv
bnN0IEZpbHRlclRva2VuUmVxdWVzdCYpOworICAgIGJvb2wgZmlsdGVyU2NyaXB0VG9rZW4oY29u
c3QgRmlsdGVyVG9rZW5SZXF1ZXN0Jik7CisgICAgYm9vbCBmaWx0ZXJPYmplY3RUb2tlbihjb25z
dCBGaWx0ZXJUb2tlblJlcXVlc3QmKTsKKyAgICBib29sIGZpbHRlclBhcmFtVG9rZW4oY29uc3Qg
RmlsdGVyVG9rZW5SZXF1ZXN0Jik7CisgICAgYm9vbCBmaWx0ZXJFbWJlZFRva2VuKGNvbnN0IEZp
bHRlclRva2VuUmVxdWVzdCYpOworICAgIGJvb2wgZmlsdGVyQXBwbGV0VG9rZW4oY29uc3QgRmls
dGVyVG9rZW5SZXF1ZXN0Jik7CisgICAgYm9vbCBmaWx0ZXJJZnJhbWVUb2tlbihjb25zdCBGaWx0
ZXJUb2tlblJlcXVlc3QmKTsKKyAgICBib29sIGZpbHRlck1ldGFUb2tlbihjb25zdCBGaWx0ZXJU
b2tlblJlcXVlc3QmKTsKKyAgICBib29sIGZpbHRlckJhc2VUb2tlbihjb25zdCBGaWx0ZXJUb2tl
blJlcXVlc3QmKTsKKyAgICBib29sIGZpbHRlckZvcm1Ub2tlbihjb25zdCBGaWx0ZXJUb2tlblJl
cXVlc3QmKTsKKworICAgIGJvb2wgZXJhc2VEYW5nZXJvdXNBdHRyaWJ1dGVzSWZJbmplY3RlZChj
b25zdCBGaWx0ZXJUb2tlblJlcXVlc3QmKTsKKyAgICBib29sIGVyYXNlQXR0cmlidXRlSWZJbmpl
Y3RlZChjb25zdCBGaWx0ZXJUb2tlblJlcXVlc3QmLCBjb25zdCBRdWFsaWZpZWROYW1lJiwgY29u
c3QgU3RyaW5nJiByZXBsYWNlbWVudFZhbHVlID0gU3RyaW5nKCksIEF0dHJpYnV0ZUtpbmQgdHJl
YXRtZW50ID0gTm9ybWFsQXR0cmlidXRlKTsKIAogICAgIFN0cmluZyBkZWNvZGVkU25pcHBldEZv
clRva2VuKGNvbnN0IEhUTUxUb2tlbiYpOwotICAgIFN0cmluZyBkZWNvZGVkU25pcHBldEZvck5h
bWUoY29uc3QgSFRNTFRva2VuJik7Ci0gICAgU3RyaW5nIGRlY29kZWRTbmlwcGV0Rm9yQXR0cmli
dXRlKGNvbnN0IEhUTUxUb2tlbiYsIGNvbnN0IEhUTUxUb2tlbjo6QXR0cmlidXRlJiwgQXR0cmli
dXRlS2luZCB0cmVhdG1lbnQgPSBOb3JtYWxBdHRyaWJ1dGUpOwotICAgIFN0cmluZyBkZWNvZGVk
U25pcHBldEZvckphdmFTY3JpcHQoY29uc3QgSFRNTFRva2VuJik7CisgICAgU3RyaW5nIGRlY29k
ZWRTbmlwcGV0Rm9yTmFtZShjb25zdCBGaWx0ZXJUb2tlblJlcXVlc3QmKTsKKyAgICBTdHJpbmcg
ZGVjb2RlZFNuaXBwZXRGb3JBdHRyaWJ1dGUoY29uc3QgRmlsdGVyVG9rZW5SZXF1ZXN0JiwgY29u
c3QgSFRNTFRva2VuOjpBdHRyaWJ1dGUmLCBBdHRyaWJ1dGVLaW5kIHRyZWF0bWVudCA9IE5vcm1h
bEF0dHJpYnV0ZSk7CisgICAgU3RyaW5nIGRlY29kZWRTbmlwcGV0Rm9ySmF2YVNjcmlwdChjb25z
dCBGaWx0ZXJUb2tlblJlcXVlc3QmKTsKIAogICAgIGJvb2wgaXNDb250YWluZWRJblJlcXVlc3Qo
Y29uc3QgU3RyaW5nJik7CiAgICAgYm9vbCBpc0xpa2VseVNhZmVSZXNvdXJjZShjb25zdCBTdHJp
bmcmIHVybCk7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>186647</attachid>
            <date>2013-02-05 09:40:13 -0800</date>
            <delta_ts>2013-02-05 09:57:26 -0800</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-108698-20130205093651.patch</filename>
            <type>text/plain</type>
            <size>26702</size>
            <attacher name="Tony Gentilcore">tonyg</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMTQxODk0CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZDgwYzQ5YTIzMmI0MGRm
YjQ5MGNkZjRmMWE2ZDY5NGZlNTlkMGEzZS4uNTA2MmU2ZGJkZDJkY2UwMWUzYTlmYWFlNjA0MmUx
NWJkYmU2Y2U0ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDEzLTAyLTA1ICBUb255
IEdlbnRpbGNvcmUgIDx0b255Z0BjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgQ29udGludWUgbWFr
aW5nIFhTU0F1ZGl0b3IgdGhyZWFkIHNhZmU6IFJlbW92ZSBkZXBlbmRlbmN5IG9uIHBhcnNlcidz
IHNvdXJjZUZvclRva2VuIGFuZCBUZXh0UmVzb3VyY2VEZWNvZGVyCisgICAgICAgIGh0dHBzOi8v
YnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xMDg2OTgKKworICAgICAgICBSZXZpZXdl
ZCBieSBBZGFtIEJhcnRoLgorCisgICAgICAgIFdlJ2QgbGlrZSB0byBiZSBhYmxlIHRvIGNhbGwg
ZmlsdGVyVG9rZW4oKSBmcm9tIHRoZSBCYWNrZ3JvdW5kSFRNTFBhcnNlciB3aGVyZSB0aGVyZSBp
cyBubyBIVE1MRG9jdW1lbnRQYXJzZXIuIFNvIHdlIGFyZSByZW1vdmluZyB0aGUgZGVwZW5kZW5j
aWVzIG9mCisgICAgICAgIGZpbHRlclRva2VuKCkgb24gdGhlIEhUTUxEb2N1bWVudFBhcnNlci4g
VGhpcyBwYXRjaCBicmluZ3MgdXMgb25lIHN0ZXAgY2xvc2VyIHRvIHJlbW92aW5nIHRoZSBtX3Bh
cnNlciBtZW1iZXIgZnJvbSBYU1NBdWRpdG9yIGJ5IHBhc3NpbmcgaW4gdGhlCisgICAgICAgIFRl
eHRSZXNvdXJjZURlY29kZXIgYW5kIEhUTUxTb3VyY2VUcmFja2VyIHRvIGZpbHRlclRva2VuLiBU
byBrZWVwIHRoZSBudW1iZXIgb2YgcGFyYW1ldGVycyBmcm9tIGJsb3dpbmcgdXAsIHRoaXMgaW50
cm9kdWNlcyBhIEZpbHRlclRva2VuUmVxdWVzdCBzdHJ1Y3QKKyAgICAgICAgdG8gaG9sZCBpdHMg
YXJndW1lbnRzLiBXZSBleHBlY3QgdG8gYWRkIG9uZSBtb3JlIG1lbWJlciB0byB0aGlzIHN0cnVj
dC4KKworCisgICAgICAgIE5vIG5ldyB0ZXN0cyBiZWNhdXNlIG5vIG5ldyBmdW5jdGlvbmFsaXR5
LgorCisgICAgICAgICogaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkhUTUxEb2N1bWVudFBhcnNlcjo6cHVtcFRva2VuaXplcik6CisgICAgICAg
ICogaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmg6CisgICAgICAgICogaHRtbC9wYXJz
ZXIvWFNTQXVkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0ZXJU
b2tlbik6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0ZXJTdGFydFRva2VuKToK
KyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmZpbHRlckNoYXJhY3RlclRva2VuKToKKyAg
ICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmZpbHRlclNjcmlwdFRva2VuKToKKyAgICAgICAg
KFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmZpbHRlck9iamVjdFRva2VuKToKKyAgICAgICAgKFdlYkNv
cmU6OlhTU0F1ZGl0b3I6OmZpbHRlclBhcmFtVG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6WFNT
QXVkaXRvcjo6ZmlsdGVyRW1iZWRUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9y
OjpmaWx0ZXJBcHBsZXRUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0
ZXJJZnJhbWVUb2tlbik6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpmaWx0ZXJNZXRh
VG9rZW4pOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6ZmlsdGVyQmFzZVRva2VuKToK
KyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmZpbHRlckZvcm1Ub2tlbik6CisgICAgICAg
IChXZWJDb3JlOjpYU1NBdWRpdG9yOjplcmFzZURhbmdlcm91c0F0dHJpYnV0ZXNJZkluamVjdGVk
KToKKyAgICAgICAgKFdlYkNvcmU6OlhTU0F1ZGl0b3I6OmVyYXNlQXR0cmlidXRlSWZJbmplY3Rl
ZCk6CisgICAgICAgIChXZWJDb3JlOjpYU1NBdWRpdG9yOjpkZWNvZGVkU25pcHBldEZvck5hbWUp
OgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6ZGVjb2RlZFNuaXBwZXRGb3JBdHRyaWJ1
dGUpOgorICAgICAgICAoV2ViQ29yZTo6WFNTQXVkaXRvcjo6ZGVjb2RlZFNuaXBwZXRGb3JKYXZh
U2NyaXB0KToKKyAgICAgICAgKiBodG1sL3BhcnNlci9YU1NBdWRpdG9yLmg6CisgICAgICAgIChX
ZWJDb3JlKToKKyAgICAgICAgKFdlYkNvcmU6OkZpbHRlclRva2VuUmVxdWVzdDo6RmlsdGVyVG9r
ZW5SZXF1ZXN0KToKKyAgICAgICAgKEZpbHRlclRva2VuUmVxdWVzdCk6CisgICAgICAgIChYU1NB
dWRpdG9yKToKKwogMjAxMy0wMi0wNSAgSm9jZWx5biBUdXJjb3R0ZSAgPGpvY2VseW4udHVyY290
dGVAZGlnaWEuY29tPgogCiAgICAgICAgIFtRdF0gUkVHUkVTU0lPTihyMTM3NDM2KTogSXQgbWFk
ZSBhbGwgaW5zcGVjdG9yIHRlc3RzIHRpbWVvdXQgb24gZGV2ZWxvcGVyIGJ1aWxkcwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcCBi
L1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL0hUTUxEb2N1bWVudFBhcnNlci5jcHAKaW5kZXgg
NzJmZWJlYmI4YTVhZDRmZmQ2MDZmOGUwYzc1ZjIyNzhjZDFhY2ViMC4uNjEwNjExMzM5NjUwZWVj
OWQyYzI3MDdiZjNjNzU2NmE3ZDVkNDFmMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRt
bC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuY3BwCkBAIC0zNzgsNyArMzc4LDcgQEAgdm9pZCBI
VE1MRG9jdW1lbnRQYXJzZXI6OnB1bXBUb2tlbml6ZXIoU3luY2hyb25vdXNNb2RlIG1vZGUpCiAK
ICAgICAgICAgICAgIC8vIFdlIGRvIG5vdCBYU1MgZmlsdGVyIGlubmVySFRNTCwgd2hpY2ggbWVh
bnMgd2UgKGludGVudGlvbmFsbHkpIGZhaWwKICAgICAgICAgICAgIC8vIGh0dHAvdGVzdHMvc2Vj
dXJpdHkveHNzQXVkaXRvci9kb20td3JpdGUtaW5uZXJIVE1MLmh0bWwKLSAgICAgICAgICAgIE93
blB0cjxEaWRCbG9ja1NjcmlwdFJlcXVlc3Q+IHJlcXVlc3QgPSBtX3hzc0F1ZGl0b3IuZmlsdGVy
VG9rZW4odG9rZW4oKSk7CisgICAgICAgICAgICBPd25QdHI8RGlkQmxvY2tTY3JpcHRSZXF1ZXN0
PiByZXF1ZXN0ID0gbV94c3NBdWRpdG9yLmZpbHRlclRva2VuKEZpbHRlclRva2VuUmVxdWVzdCh0
b2tlbigpLCBtX3NvdXJjZVRyYWNrZXIsIGRvY3VtZW50KCktPmRlY29kZXIoKSkpOwogICAgICAg
ICAgICAgaWYgKHJlcXVlc3QpCiAgICAgICAgICAgICAgICAgbV94c3NBdWRpdG9yRGVsZWdhdGUu
ZGlkQmxvY2tTY3JpcHQocmVxdWVzdC5yZWxlYXNlKCkpOwogICAgICAgICB9CkBAIC02NjUsMTEg
KzY2NSw2IEBAIGJvb2wgSFRNTERvY3VtZW50UGFyc2VyOjppc0V4ZWN1dGluZ1NjcmlwdCgpIGNv
bnN0CiAgICAgcmV0dXJuIG1fc2NyaXB0UnVubmVyLT5pc0V4ZWN1dGluZ1NjcmlwdCgpOwogfQog
Ci1TdHJpbmcgSFRNTERvY3VtZW50UGFyc2VyOjpzb3VyY2VGb3JUb2tlbihjb25zdCBIVE1MVG9r
ZW4mIHRva2VuKQotewotICAgIHJldHVybiBtX3NvdXJjZVRyYWNrZXIuc291cmNlRm9yVG9rZW4o
dG9rZW4pOwotfQotCiBPcmRpbmFsTnVtYmVyIEhUTUxEb2N1bWVudFBhcnNlcjo6bGluZU51bWJl
cigpIGNvbnN0CiB7CiAjaWYgRU5BQkxFKFRIUkVBREVEX0hUTUxfUEFSU0VSKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvSFRNTERvY3VtZW50UGFyc2VyLmggYi9Tb3Vy
Y2UvV2ViQ29yZS9odG1sL3BhcnNlci9IVE1MRG9jdW1lbnRQYXJzZXIuaAppbmRleCBmNzIwZjRj
MDFhMzk3MDBiZjUwMTZhNzJiMzYyYWNhMzcyMTMxZTJhLi5hZTg2MjMzMDcwMWI0MWUwZmQzZDA1
ODM5NmZlNjY1ZjFhYmNiYWRjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNl
ci9IVE1MRG9jdW1lbnRQYXJzZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9I
VE1MRG9jdW1lbnRQYXJzZXIuaApAQCAtNzUsNyArNzUsNiBAQCBwdWJsaWM6CiAgICAgc3RhdGlj
IHZvaWQgcGFyc2VEb2N1bWVudEZyYWdtZW50KGNvbnN0IFN0cmluZyYsIERvY3VtZW50RnJhZ21l
bnQqLCBFbGVtZW50KiBjb250ZXh0RWxlbWVudCwgRnJhZ21lbnRTY3JpcHRpbmdQZXJtaXNzaW9u
ID0gQWxsb3dTY3JpcHRpbmdDb250ZW50KTsKIAogICAgIEhUTUxUb2tlbml6ZXIqIHRva2VuaXpl
cigpIGNvbnN0IHsgcmV0dXJuIG1fdG9rZW5pemVyLmdldCgpOyB9Ci0gICAgU3RyaW5nIHNvdXJj
ZUZvclRva2VuKGNvbnN0IEhUTUxUb2tlbiYpOwogCiAgICAgdmlydHVhbCBUZXh0UG9zaXRpb24g
dGV4dFBvc2l0aW9uKCkgY29uc3Q7CiAgICAgdmlydHVhbCBPcmRpbmFsTnVtYmVyIGxpbmVOdW1i
ZXIoKSBjb25zdDsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvcGFyc2VyL1hTU0F1
ZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5jcHAKaW5k
ZXggN2Q2YTdmYjM2ZTMxZmEzYzk2YjYwOTlhMGU5ZDg4ZmI0NGI5YTBjYS4uMmUwODAzYTQzYTgz
ODAwMmM5ZTEzYTAzZjA0OWIwNmM0ZDA4M2M5ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
aHRtbC9wYXJzZXIvWFNTQXVkaXRvci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9wYXJz
ZXIvWFNTQXVkaXRvci5jcHAKQEAgLTI3OCw1OSArMjc4LDU5IEBAIHZvaWQgWFNTQXVkaXRvcjo6
aW5pdChEb2N1bWVudCogZG9jdW1lbnQpCiAgICAgfQogfQogCi1QYXNzT3duUHRyPERpZEJsb2Nr
U2NyaXB0UmVxdWVzdD4gWFNTQXVkaXRvcjo6ZmlsdGVyVG9rZW4oSFRNTFRva2VuJiB0b2tlbikK
K1Bhc3NPd25QdHI8RGlkQmxvY2tTY3JpcHRSZXF1ZXN0PiBYU1NBdWRpdG9yOjpmaWx0ZXJUb2tl
bihjb25zdCBGaWx0ZXJUb2tlblJlcXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgQVNTRVJUKG1fc3Rh
dGUgPT0gSW5pdGlhbGl6ZWQpOwogICAgIGlmICghbV9pc0VuYWJsZWQgfHwgbV94c3NQcm90ZWN0
aW9uID09IFhTU1Byb3RlY3Rpb25EaXNhYmxlZCkKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAK
ICAgICBib29sIGRpZEJsb2NrU2NyaXB0ID0gZmFsc2U7Ci0gICAgaWYgKHRva2VuLnR5cGUoKSA9
PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpCi0gICAgICAgIGRpZEJsb2NrU2NyaXB0ID0gZmls
dGVyU3RhcnRUb2tlbih0b2tlbik7CisgICAgaWYgKHJlcXVlc3QudG9rZW4udHlwZSgpID09IEhU
TUxUb2tlblR5cGVzOjpTdGFydFRhZykKKyAgICAgICAgZGlkQmxvY2tTY3JpcHQgPSBmaWx0ZXJT
dGFydFRva2VuKHJlcXVlc3QpOwogICAgIGVsc2UgaWYgKG1fc2NyaXB0VGFnTmVzdGluZ0xldmVs
KSB7Ci0gICAgICAgIGlmICh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OkNoYXJhY3Rl
cikKLSAgICAgICAgICAgIGRpZEJsb2NrU2NyaXB0ID0gZmlsdGVyQ2hhcmFjdGVyVG9rZW4odG9r
ZW4pOwotICAgICAgICBlbHNlIGlmICh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OkVu
ZFRhZykKLSAgICAgICAgICAgIGZpbHRlckVuZFRva2VuKHRva2VuKTsKKyAgICAgICAgaWYgKHJl
cXVlc3QudG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpDaGFyYWN0ZXIpCisgICAgICAg
ICAgICBkaWRCbG9ja1NjcmlwdCA9IGZpbHRlckNoYXJhY3RlclRva2VuKHJlcXVlc3QpOworICAg
ICAgICBlbHNlIGlmIChyZXF1ZXN0LnRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6RW5k
VGFnKQorICAgICAgICAgICAgZmlsdGVyRW5kVG9rZW4ocmVxdWVzdC50b2tlbik7CiAgICAgfQog
CiAgICAgaWYgKGRpZEJsb2NrU2NyaXB0KSB7CiAgICAgICAgIGJvb2wgZGlkQmxvY2tFbnRpcmVQ
YWdlID0gKG1feHNzUHJvdGVjdGlvbiA9PSBYU1NQcm90ZWN0aW9uQmxvY2tFbmFibGVkKTsKLSAg
ICAgICAgT3duUHRyPERpZEJsb2NrU2NyaXB0UmVxdWVzdD4gcmVxdWVzdCA9IERpZEJsb2NrU2Ny
aXB0UmVxdWVzdDo6Y3JlYXRlKG1fcmVwb3J0VVJMLCBtX29yaWdpbmFsVVJMLCBtX29yaWdpbmFs
SFRUUEJvZHksIGRpZEJsb2NrRW50aXJlUGFnZSk7CisgICAgICAgIE93blB0cjxEaWRCbG9ja1Nj
cmlwdFJlcXVlc3Q+IGRpZEJsb2NrU2NyaXB0UmVxdWVzdCA9IERpZEJsb2NrU2NyaXB0UmVxdWVz
dDo6Y3JlYXRlKG1fcmVwb3J0VVJMLCBtX29yaWdpbmFsVVJMLCBtX29yaWdpbmFsSFRUUEJvZHks
IGRpZEJsb2NrRW50aXJlUGFnZSk7CiAgICAgICAgIGlmICghbV9yZXBvcnRVUkwuaXNFbXB0eSgp
KSB7CiAgICAgICAgICAgICBtX3JlcG9ydFVSTCA9IEtVUkwoKTsKICAgICAgICAgICAgIG1fb3Jp
Z2luYWxVUkwgPSBTdHJpbmcoKTsKICAgICAgICAgICAgIG1fb3JpZ2luYWxIVFRQQm9keSA9IFN0
cmluZygpOwogICAgICAgICB9Ci0gICAgICAgIHJldHVybiByZXF1ZXN0LnJlbGVhc2UoKTsKKyAg
ICAgICAgcmV0dXJuIGRpZEJsb2NrU2NyaXB0UmVxdWVzdC5yZWxlYXNlKCk7CiAgICAgfQogICAg
IHJldHVybiBudWxscHRyOwogfQogCi1ib29sIFhTU0F1ZGl0b3I6OmZpbHRlclN0YXJ0VG9rZW4o
SFRNTFRva2VuJiB0b2tlbikKK2Jvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyU3RhcnRUb2tlbihjb25z
dCBGaWx0ZXJUb2tlblJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgYm9vbCBkaWRCbG9ja1Njcmlw
dCA9IGVyYXNlRGFuZ2Vyb3VzQXR0cmlidXRlc0lmSW5qZWN0ZWQodG9rZW4pOworICAgIGJvb2wg
ZGlkQmxvY2tTY3JpcHQgPSBlcmFzZURhbmdlcm91c0F0dHJpYnV0ZXNJZkluamVjdGVkKHJlcXVl
c3QpOwogCi0gICAgaWYgKGhhc05hbWUodG9rZW4sIHNjcmlwdFRhZykpIHsKLSAgICAgICAgZGlk
QmxvY2tTY3JpcHQgfD0gZmlsdGVyU2NyaXB0VG9rZW4odG9rZW4pOworICAgIGlmIChoYXNOYW1l
KHJlcXVlc3QudG9rZW4sIHNjcmlwdFRhZykpIHsKKyAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0g
ZmlsdGVyU2NyaXB0VG9rZW4ocmVxdWVzdCk7CiAgICAgICAgIEFTU0VSVChtX3Nob3VsZEFsbG93
Q0RBVEEgfHwgIW1fc2NyaXB0VGFnTmVzdGluZ0xldmVsKTsKICAgICAgICAgbV9zY3JpcHRUYWdO
ZXN0aW5nTGV2ZWwrKzsKLSAgICB9IGVsc2UgaWYgKGhhc05hbWUodG9rZW4sIG9iamVjdFRhZykp
Ci0gICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGZpbHRlck9iamVjdFRva2VuKHRva2VuKTsKLSAg
ICBlbHNlIGlmIChoYXNOYW1lKHRva2VuLCBwYXJhbVRhZykpCi0gICAgICAgIGRpZEJsb2NrU2Ny
aXB0IHw9IGZpbHRlclBhcmFtVG9rZW4odG9rZW4pOwotICAgIGVsc2UgaWYgKGhhc05hbWUodG9r
ZW4sIGVtYmVkVGFnKSkKLSAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZmlsdGVyRW1iZWRUb2tl
bih0b2tlbik7Ci0gICAgZWxzZSBpZiAoaGFzTmFtZSh0b2tlbiwgYXBwbGV0VGFnKSkKLSAgICAg
ICAgZGlkQmxvY2tTY3JpcHQgfD0gZmlsdGVyQXBwbGV0VG9rZW4odG9rZW4pOwotICAgIGVsc2Ug
aWYgKGhhc05hbWUodG9rZW4sIGlmcmFtZVRhZykpCi0gICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9
IGZpbHRlcklmcmFtZVRva2VuKHRva2VuKTsKLSAgICBlbHNlIGlmIChoYXNOYW1lKHRva2VuLCBt
ZXRhVGFnKSkKLSAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZmlsdGVyTWV0YVRva2VuKHRva2Vu
KTsKLSAgICBlbHNlIGlmIChoYXNOYW1lKHRva2VuLCBiYXNlVGFnKSkKLSAgICAgICAgZGlkQmxv
Y2tTY3JpcHQgfD0gZmlsdGVyQmFzZVRva2VuKHRva2VuKTsKLSAgICBlbHNlIGlmIChoYXNOYW1l
KHRva2VuLCBmb3JtVGFnKSkKLSAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZmlsdGVyRm9ybVRv
a2VuKHRva2VuKTsKKyAgICB9IGVsc2UgaWYgKGhhc05hbWUocmVxdWVzdC50b2tlbiwgb2JqZWN0
VGFnKSkKKyAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZmlsdGVyT2JqZWN0VG9rZW4ocmVxdWVz
dCk7CisgICAgZWxzZSBpZiAoaGFzTmFtZShyZXF1ZXN0LnRva2VuLCBwYXJhbVRhZykpCisgICAg
ICAgIGRpZEJsb2NrU2NyaXB0IHw9IGZpbHRlclBhcmFtVG9rZW4ocmVxdWVzdCk7CisgICAgZWxz
ZSBpZiAoaGFzTmFtZShyZXF1ZXN0LnRva2VuLCBlbWJlZFRhZykpCisgICAgICAgIGRpZEJsb2Nr
U2NyaXB0IHw9IGZpbHRlckVtYmVkVG9rZW4ocmVxdWVzdCk7CisgICAgZWxzZSBpZiAoaGFzTmFt
ZShyZXF1ZXN0LnRva2VuLCBhcHBsZXRUYWcpKQorICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBm
aWx0ZXJBcHBsZXRUb2tlbihyZXF1ZXN0KTsKKyAgICBlbHNlIGlmIChoYXNOYW1lKHJlcXVlc3Qu
dG9rZW4sIGlmcmFtZVRhZykpCisgICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGZpbHRlcklmcmFt
ZVRva2VuKHJlcXVlc3QpOworICAgIGVsc2UgaWYgKGhhc05hbWUocmVxdWVzdC50b2tlbiwgbWV0
YVRhZykpCisgICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGZpbHRlck1ldGFUb2tlbihyZXF1ZXN0
KTsKKyAgICBlbHNlIGlmIChoYXNOYW1lKHJlcXVlc3QudG9rZW4sIGJhc2VUYWcpKQorICAgICAg
ICBkaWRCbG9ja1NjcmlwdCB8PSBmaWx0ZXJCYXNlVG9rZW4ocmVxdWVzdCk7CisgICAgZWxzZSBp
ZiAoaGFzTmFtZShyZXF1ZXN0LnRva2VuLCBmb3JtVGFnKSkKKyAgICAgICAgZGlkQmxvY2tTY3Jp
cHQgfD0gZmlsdGVyRm9ybVRva2VuKHJlcXVlc3QpOwogCiAgICAgcmV0dXJuIGRpZEJsb2NrU2Ny
aXB0OwogfQpAQCAtMzQ0LDE4NSArMzQ0LDE4NSBAQCB2b2lkIFhTU0F1ZGl0b3I6OmZpbHRlckVu
ZFRva2VuKEhUTUxUb2tlbiYgdG9rZW4pCiAgICAgfQogfQogCi1ib29sIFhTU0F1ZGl0b3I6OmZp
bHRlckNoYXJhY3RlclRva2VuKEhUTUxUb2tlbiYgdG9rZW4pCitib29sIFhTU0F1ZGl0b3I6OmZp
bHRlckNoYXJhY3RlclRva2VuKGNvbnN0IEZpbHRlclRva2VuUmVxdWVzdCYgcmVxdWVzdCkKIHsK
ICAgICBBU1NFUlQobV9zY3JpcHRUYWdOZXN0aW5nTGV2ZWwpOwotICAgIGlmIChpc0NvbnRhaW5l
ZEluUmVxdWVzdChtX2NhY2hlZERlY29kZWRTbmlwcGV0KSAmJiBpc0NvbnRhaW5lZEluUmVxdWVz
dChkZWNvZGVkU25pcHBldEZvckphdmFTY3JpcHQodG9rZW4pKSkgewotICAgICAgICB0b2tlbi5l
cmFzZUNoYXJhY3RlcnMoKTsKLSAgICAgICAgdG9rZW4uYXBwZW5kVG9DaGFyYWN0ZXIoJyAnKTsg
Ly8gVGVjaG5pY2FsbHksIGNoYXJhY3RlciB0b2tlbnMgY2FuJ3QgYmUgZW1wdHkuCisgICAgaWYg
KGlzQ29udGFpbmVkSW5SZXF1ZXN0KG1fY2FjaGVkRGVjb2RlZFNuaXBwZXQpICYmIGlzQ29udGFp
bmVkSW5SZXF1ZXN0KGRlY29kZWRTbmlwcGV0Rm9ySmF2YVNjcmlwdChyZXF1ZXN0KSkpIHsKKyAg
ICAgICAgcmVxdWVzdC50b2tlbi5lcmFzZUNoYXJhY3RlcnMoKTsKKyAgICAgICAgcmVxdWVzdC50
b2tlbi5hcHBlbmRUb0NoYXJhY3RlcignICcpOyAvLyBUZWNobmljYWxseSwgY2hhcmFjdGVyIHRv
a2VucyBjYW4ndCBiZSBlbXB0eS4KICAgICAgICAgcmV0dXJuIHRydWU7CiAgICAgfQogICAgIHJl
dHVybiBmYWxzZTsKIH0KIAotYm9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJTY3JpcHRUb2tlbihIVE1M
VG9rZW4mIHRva2VuKQorYm9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJTY3JpcHRUb2tlbihjb25zdCBG
aWx0ZXJUb2tlblJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9
PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpOwotICAgIEFTU0VSVChoYXNOYW1lKHRva2VuLCBz
Y3JpcHRUYWcpKTsKKyAgICBBU1NFUlQocmVxdWVzdC50b2tlbi50eXBlKCkgPT0gSFRNTFRva2Vu
VHlwZXM6OlN0YXJ0VGFnKTsKKyAgICBBU1NFUlQoaGFzTmFtZShyZXF1ZXN0LnRva2VuLCBzY3Jp
cHRUYWcpKTsKIAotICAgIG1fY2FjaGVkRGVjb2RlZFNuaXBwZXQgPSBkZWNvZGVkU25pcHBldEZv
ck5hbWUodG9rZW4pOworICAgIG1fY2FjaGVkRGVjb2RlZFNuaXBwZXQgPSBkZWNvZGVkU25pcHBl
dEZvck5hbWUocmVxdWVzdCk7CiAgICAgbV9zaG91bGRBbGxvd0NEQVRBID0gbV9wYXJzZXItPnRv
a2VuaXplcigpLT5zaG91bGRBbGxvd0NEQVRBKCk7CiAKICAgICBib29sIGRpZEJsb2NrU2NyaXB0
ID0gZmFsc2U7Ci0gICAgaWYgKGlzQ29udGFpbmVkSW5SZXF1ZXN0KGRlY29kZWRTbmlwcGV0Rm9y
TmFtZSh0b2tlbikpKSB7Ci0gICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRl
SWZJbmplY3RlZCh0b2tlbiwgc3JjQXR0ciwgYmxhbmtVUkwoKS5zdHJpbmcoKSwgU3JjTGlrZUF0
dHJpYnV0ZSk7Ci0gICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmpl
Y3RlZCh0b2tlbiwgWExpbmtOYW1lczo6aHJlZkF0dHIsIGJsYW5rVVJMKCkuc3RyaW5nKCksIFNy
Y0xpa2VBdHRyaWJ1dGUpOworICAgIGlmIChpc0NvbnRhaW5lZEluUmVxdWVzdChkZWNvZGVkU25p
cHBldEZvck5hbWUocmVxdWVzdCkpKSB7CisgICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNl
QXR0cmlidXRlSWZJbmplY3RlZChyZXF1ZXN0LCBzcmNBdHRyLCBibGFua1VSTCgpLnN0cmluZygp
LCBTcmNMaWtlQXR0cmlidXRlKTsKKyAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRy
aWJ1dGVJZkluamVjdGVkKHJlcXVlc3QsIFhMaW5rTmFtZXM6OmhyZWZBdHRyLCBibGFua1VSTCgp
LnN0cmluZygpLCBTcmNMaWtlQXR0cmlidXRlKTsKICAgICB9CiAKICAgICByZXR1cm4gZGlkQmxv
Y2tTY3JpcHQ7CiB9CiAKLWJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyT2JqZWN0VG9rZW4oSFRNTFRv
a2VuJiB0b2tlbikKK2Jvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyT2JqZWN0VG9rZW4oY29uc3QgRmls
dGVyVG9rZW5SZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0g
SFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKLSAgICBBU1NFUlQoaGFzTmFtZSh0b2tlbiwgb2Jq
ZWN0VGFnKSk7CisgICAgQVNTRVJUKHJlcXVlc3QudG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5
cGVzOjpTdGFydFRhZyk7CisgICAgQVNTRVJUKGhhc05hbWUocmVxdWVzdC50b2tlbiwgb2JqZWN0
VGFnKSk7CiAKICAgICBib29sIGRpZEJsb2NrU2NyaXB0ID0gZmFsc2U7Ci0gICAgaWYgKGlzQ29u
dGFpbmVkSW5SZXF1ZXN0KGRlY29kZWRTbmlwcGV0Rm9yTmFtZSh0b2tlbikpKSB7Ci0gICAgICAg
IGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgZGF0YUF0
dHIsIGJsYW5rVVJMKCkuc3RyaW5nKCksIFNyY0xpa2VBdHRyaWJ1dGUpOwotICAgICAgICBkaWRC
bG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIHR5cGVBdHRyKTsK
LSAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHRva2Vu
LCBjbGFzc2lkQXR0cik7CisgICAgaWYgKGlzQ29udGFpbmVkSW5SZXF1ZXN0KGRlY29kZWRTbmlw
cGV0Rm9yTmFtZShyZXF1ZXN0KSkpIHsKKyAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VB
dHRyaWJ1dGVJZkluamVjdGVkKHJlcXVlc3QsIGRhdGFBdHRyLCBibGFua1VSTCgpLnN0cmluZygp
LCBTcmNMaWtlQXR0cmlidXRlKTsKKyAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRy
aWJ1dGVJZkluamVjdGVkKHJlcXVlc3QsIHR5cGVBdHRyKTsKKyAgICAgICAgZGlkQmxvY2tTY3Jp
cHQgfD0gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHJlcXVlc3QsIGNsYXNzaWRBdHRyKTsKICAg
ICB9CiAgICAgcmV0dXJuIGRpZEJsb2NrU2NyaXB0OwogfQogCi1ib29sIFhTU0F1ZGl0b3I6OmZp
bHRlclBhcmFtVG9rZW4oSFRNTFRva2VuJiB0b2tlbikKK2Jvb2wgWFNTQXVkaXRvcjo6ZmlsdGVy
UGFyYW1Ub2tlbihjb25zdCBGaWx0ZXJUb2tlblJlcXVlc3QmIHJlcXVlc3QpCiB7Ci0gICAgQVNT
RVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpOwotICAgIEFTU0VS
VChoYXNOYW1lKHRva2VuLCBwYXJhbVRhZykpOworICAgIEFTU0VSVChyZXF1ZXN0LnRva2VuLnR5
cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcpOworICAgIEFTU0VSVChoYXNOYW1lKHJl
cXVlc3QudG9rZW4sIHBhcmFtVGFnKSk7CiAKICAgICBzaXplX3QgaW5kZXhPZk5hbWVBdHRyaWJ1
dGU7Ci0gICAgaWYgKCFmaW5kQXR0cmlidXRlV2l0aE5hbWUodG9rZW4sIG5hbWVBdHRyLCBpbmRl
eE9mTmFtZUF0dHJpYnV0ZSkpCisgICAgaWYgKCFmaW5kQXR0cmlidXRlV2l0aE5hbWUocmVxdWVz
dC50b2tlbiwgbmFtZUF0dHIsIGluZGV4T2ZOYW1lQXR0cmlidXRlKSkKICAgICAgICAgcmV0dXJu
IGZhbHNlOwogCi0gICAgY29uc3QgSFRNTFRva2VuOjpBdHRyaWJ1dGUmIG5hbWVBdHRyaWJ1dGUg
PSB0b2tlbi5hdHRyaWJ1dGVzKCkuYXQoaW5kZXhPZk5hbWVBdHRyaWJ1dGUpOworICAgIGNvbnN0
IEhUTUxUb2tlbjo6QXR0cmlidXRlJiBuYW1lQXR0cmlidXRlID0gcmVxdWVzdC50b2tlbi5hdHRy
aWJ1dGVzKCkuYXQoaW5kZXhPZk5hbWVBdHRyaWJ1dGUpOwogICAgIFN0cmluZyBuYW1lID0gU3Ry
aW5nKG5hbWVBdHRyaWJ1dGUubV92YWx1ZS5kYXRhKCksIG5hbWVBdHRyaWJ1dGUubV92YWx1ZS5z
aXplKCkpOwogCiAgICAgaWYgKCFIVE1MUGFyYW1FbGVtZW50Ojppc1VSTFBhcmFtZXRlcihuYW1l
KSkKICAgICAgICAgcmV0dXJuIGZhbHNlOwogCi0gICAgcmV0dXJuIGVyYXNlQXR0cmlidXRlSWZJ
bmplY3RlZCh0b2tlbiwgdmFsdWVBdHRyLCBibGFua1VSTCgpLnN0cmluZygpLCBTcmNMaWtlQXR0
cmlidXRlKTsKKyAgICByZXR1cm4gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHJlcXVlc3QsIHZh
bHVlQXR0ciwgYmxhbmtVUkwoKS5zdHJpbmcoKSwgU3JjTGlrZUF0dHJpYnV0ZSk7CiB9CiAKLWJv
b2wgWFNTQXVkaXRvcjo6ZmlsdGVyRW1iZWRUb2tlbihIVE1MVG9rZW4mIHRva2VuKQorYm9vbCBY
U1NBdWRpdG9yOjpmaWx0ZXJFbWJlZFRva2VuKGNvbnN0IEZpbHRlclRva2VuUmVxdWVzdCYgcmVx
dWVzdCkKIHsKLSAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFy
dFRhZyk7Ci0gICAgQVNTRVJUKGhhc05hbWUodG9rZW4sIGVtYmVkVGFnKSk7CisgICAgQVNTRVJU
KHJlcXVlc3QudG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZyk7CisgICAg
QVNTRVJUKGhhc05hbWUocmVxdWVzdC50b2tlbiwgZW1iZWRUYWcpKTsKIAogICAgIGJvb2wgZGlk
QmxvY2tTY3JpcHQgPSBmYWxzZTsKLSAgICBpZiAoaXNDb250YWluZWRJblJlcXVlc3QoZGVjb2Rl
ZFNuaXBwZXRGb3JOYW1lKHRva2VuKSkpIHsKLSAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJh
c2VBdHRyaWJ1dGVJZkluamVjdGVkKHRva2VuLCBjb2RlQXR0ciwgU3RyaW5nKCksIFNyY0xpa2VB
dHRyaWJ1dGUpOwotICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5q
ZWN0ZWQodG9rZW4sIHNyY0F0dHIsIGJsYW5rVVJMKCkuc3RyaW5nKCksIFNyY0xpa2VBdHRyaWJ1
dGUpOwotICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQo
dG9rZW4sIHR5cGVBdHRyKTsKKyAgICBpZiAoaXNDb250YWluZWRJblJlcXVlc3QoZGVjb2RlZFNu
aXBwZXRGb3JOYW1lKHJlcXVlc3QpKSkgeworICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFz
ZUF0dHJpYnV0ZUlmSW5qZWN0ZWQocmVxdWVzdCwgY29kZUF0dHIsIFN0cmluZygpLCBTcmNMaWtl
QXR0cmlidXRlKTsKKyAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VBdHRyaWJ1dGVJZklu
amVjdGVkKHJlcXVlc3QsIHNyY0F0dHIsIGJsYW5rVVJMKCkuc3RyaW5nKCksIFNyY0xpa2VBdHRy
aWJ1dGUpOworICAgICAgICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0
ZWQocmVxdWVzdCwgdHlwZUF0dHIpOwogICAgIH0KICAgICByZXR1cm4gZGlkQmxvY2tTY3JpcHQ7
CiB9CiAKLWJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyQXBwbGV0VG9rZW4oSFRNTFRva2VuJiB0b2tl
bikKK2Jvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyQXBwbGV0VG9rZW4oY29uc3QgRmlsdGVyVG9rZW5S
ZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2Vu
VHlwZXM6OlN0YXJ0VGFnKTsKLSAgICBBU1NFUlQoaGFzTmFtZSh0b2tlbiwgYXBwbGV0VGFnKSk7
CisgICAgQVNTRVJUKHJlcXVlc3QudG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFy
dFRhZyk7CisgICAgQVNTRVJUKGhhc05hbWUocmVxdWVzdC50b2tlbiwgYXBwbGV0VGFnKSk7CiAK
ICAgICBib29sIGRpZEJsb2NrU2NyaXB0ID0gZmFsc2U7Ci0gICAgaWYgKGlzQ29udGFpbmVkSW5S
ZXF1ZXN0KGRlY29kZWRTbmlwcGV0Rm9yTmFtZSh0b2tlbikpKSB7Ci0gICAgICAgIGRpZEJsb2Nr
U2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgY29kZUF0dHIsIFN0cmlu
ZygpLCBTcmNMaWtlQXR0cmlidXRlKTsKLSAgICAgICAgZGlkQmxvY2tTY3JpcHQgfD0gZXJhc2VB
dHRyaWJ1dGVJZkluamVjdGVkKHRva2VuLCBvYmplY3RBdHRyKTsKKyAgICBpZiAoaXNDb250YWlu
ZWRJblJlcXVlc3QoZGVjb2RlZFNuaXBwZXRGb3JOYW1lKHJlcXVlc3QpKSkgeworICAgICAgICBk
aWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQocmVxdWVzdCwgY29kZUF0
dHIsIFN0cmluZygpLCBTcmNMaWtlQXR0cmlidXRlKTsKKyAgICAgICAgZGlkQmxvY2tTY3JpcHQg
fD0gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHJlcXVlc3QsIG9iamVjdEF0dHIpOwogICAgIH0K
ICAgICByZXR1cm4gZGlkQmxvY2tTY3JpcHQ7CiB9CiAKLWJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVy
SWZyYW1lVG9rZW4oSFRNTFRva2VuJiB0b2tlbikKK2Jvb2wgWFNTQXVkaXRvcjo6ZmlsdGVySWZy
YW1lVG9rZW4oY29uc3QgRmlsdGVyVG9rZW5SZXF1ZXN0JiByZXF1ZXN0KQogewotICAgIEFTU0VS
VCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKLSAgICBBU1NFUlQo
aGFzTmFtZSh0b2tlbiwgaWZyYW1lVGFnKSk7CisgICAgQVNTRVJUKHJlcXVlc3QudG9rZW4udHlw
ZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZyk7CisgICAgQVNTRVJUKGhhc05hbWUocmVx
dWVzdC50b2tlbiwgaWZyYW1lVGFnKSk7CiAKICAgICBib29sIGRpZEJsb2NrU2NyaXB0ID0gZmFs
c2U7Ci0gICAgaWYgKGlzQ29udGFpbmVkSW5SZXF1ZXN0KGRlY29kZWRTbmlwcGV0Rm9yTmFtZSh0
b2tlbikpKSB7Ci0gICAgICAgIGRpZEJsb2NrU2NyaXB0IHw9IGVyYXNlQXR0cmlidXRlSWZJbmpl
Y3RlZCh0b2tlbiwgc3JjQXR0ciwgU3RyaW5nKCksIFNyY0xpa2VBdHRyaWJ1dGUpOwotICAgICAg
ICBkaWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIHNyY2Rv
Y0F0dHIsIFN0cmluZygpLCBTY3JpcHRMaWtlQXR0cmlidXRlKTsKKyAgICBpZiAoaXNDb250YWlu
ZWRJblJlcXVlc3QoZGVjb2RlZFNuaXBwZXRGb3JOYW1lKHJlcXVlc3QpKSkgeworICAgICAgICBk
aWRCbG9ja1NjcmlwdCB8PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQocmVxdWVzdCwgc3JjQXR0
ciwgU3RyaW5nKCksIFNyY0xpa2VBdHRyaWJ1dGUpOworICAgICAgICBkaWRCbG9ja1NjcmlwdCB8
PSBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQocmVxdWVzdCwgc3JjZG9jQXR0ciwgU3RyaW5nKCks
IFNjcmlwdExpa2VBdHRyaWJ1dGUpOwogICAgIH0KICAgICByZXR1cm4gZGlkQmxvY2tTY3JpcHQ7
CiB9CiAKLWJvb2wgWFNTQXVkaXRvcjo6ZmlsdGVyTWV0YVRva2VuKEhUTUxUb2tlbiYgdG9rZW4p
Citib29sIFhTU0F1ZGl0b3I6OmZpbHRlck1ldGFUb2tlbihjb25zdCBGaWx0ZXJUb2tlblJlcXVl
c3QmIHJlcXVlc3QpCiB7Ci0gICAgQVNTRVJUKHRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBl
czo6U3RhcnRUYWcpOwotICAgIEFTU0VSVChoYXNOYW1lKHRva2VuLCBtZXRhVGFnKSk7CisgICAg
QVNTRVJUKHJlcXVlc3QudG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRhZyk7
CisgICAgQVNTRVJUKGhhc05hbWUocmVxdWVzdC50b2tlbiwgbWV0YVRhZykpOwogCi0gICAgcmV0
dXJuIGVyYXNlQXR0cmlidXRlSWZJbmplY3RlZCh0b2tlbiwgaHR0cF9lcXVpdkF0dHIpOworICAg
IHJldHVybiBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQocmVxdWVzdCwgaHR0cF9lcXVpdkF0dHIp
OwogfQogCi1ib29sIFhTU0F1ZGl0b3I6OmZpbHRlckJhc2VUb2tlbihIVE1MVG9rZW4mIHRva2Vu
KQorYm9vbCBYU1NBdWRpdG9yOjpmaWx0ZXJCYXNlVG9rZW4oY29uc3QgRmlsdGVyVG9rZW5SZXF1
ZXN0JiByZXF1ZXN0KQogewotICAgIEFTU0VSVCh0b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlw
ZXM6OlN0YXJ0VGFnKTsKLSAgICBBU1NFUlQoaGFzTmFtZSh0b2tlbiwgYmFzZVRhZykpOworICAg
IEFTU0VSVChyZXF1ZXN0LnRva2VuLnR5cGUoKSA9PSBIVE1MVG9rZW5UeXBlczo6U3RhcnRUYWcp
OworICAgIEFTU0VSVChoYXNOYW1lKHJlcXVlc3QudG9rZW4sIGJhc2VUYWcpKTsKIAotICAgIHJl
dHVybiBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQodG9rZW4sIGhyZWZBdHRyKTsKKyAgICByZXR1
cm4gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHJlcXVlc3QsIGhyZWZBdHRyKTsKIH0KIAotYm9v
bCBYU1NBdWRpdG9yOjpmaWx0ZXJGb3JtVG9rZW4oSFRNTFRva2VuJiB0b2tlbikKK2Jvb2wgWFNT
QXVkaXRvcjo6ZmlsdGVyRm9ybVRva2VuKGNvbnN0IEZpbHRlclRva2VuUmVxdWVzdCYgcmVxdWVz
dCkKIHsKLSAgICBBU1NFUlQodG9rZW4udHlwZSgpID09IEhUTUxUb2tlblR5cGVzOjpTdGFydFRh
Zyk7Ci0gICAgQVNTRVJUKGhhc05hbWUodG9rZW4sIGZvcm1UYWcpKTsKKyAgICBBU1NFUlQocmVx
dWVzdC50b2tlbi50eXBlKCkgPT0gSFRNTFRva2VuVHlwZXM6OlN0YXJ0VGFnKTsKKyAgICBBU1NF
UlQoaGFzTmFtZShyZXF1ZXN0LnRva2VuLCBmb3JtVGFnKSk7CiAKLSAgICByZXR1cm4gZXJhc2VB
dHRyaWJ1dGVJZkluamVjdGVkKHRva2VuLCBhY3Rpb25BdHRyLCBibGFua1VSTCgpLnN0cmluZygp
KTsKKyAgICByZXR1cm4gZXJhc2VBdHRyaWJ1dGVJZkluamVjdGVkKHJlcXVlc3QsIGFjdGlvbkF0
dHIsIGJsYW5rVVJMKCkuc3RyaW5nKCkpOwogfQogCi1ib29sIFhTU0F1ZGl0b3I6OmVyYXNlRGFu
Z2Vyb3VzQXR0cmlidXRlc0lmSW5qZWN0ZWQoSFRNTFRva2VuJiB0b2tlbikKK2Jvb2wgWFNTQXVk
aXRvcjo6ZXJhc2VEYW5nZXJvdXNBdHRyaWJ1dGVzSWZJbmplY3RlZChjb25zdCBGaWx0ZXJUb2tl
blJlcXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgREVGSU5FX1NUQVRJQ19MT0NBTChTdHJpbmcsIHNh
ZmVKYXZhU2NyaXB0VVJMLCAoQVNDSUlMaXRlcmFsKCJqYXZhc2NyaXB0OnZvaWQoMCkiKSkpOwog
CiAgICAgYm9vbCBkaWRCbG9ja1NjcmlwdCA9IGZhbHNlOwotICAgIGZvciAoc2l6ZV90IGkgPSAw
OyBpIDwgdG9rZW4uYXR0cmlidXRlcygpLnNpemUoKTsgKytpKSB7Ci0gICAgICAgIGNvbnN0IEhU
TUxUb2tlbjo6QXR0cmlidXRlJiBhdHRyaWJ1dGUgPSB0b2tlbi5hdHRyaWJ1dGVzKCkuYXQoaSk7
CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCByZXF1ZXN0LnRva2VuLmF0dHJpYnV0ZXMoKS5z
aXplKCk7ICsraSkgeworICAgICAgICBjb25zdCBIVE1MVG9rZW46OkF0dHJpYnV0ZSYgYXR0cmli
dXRlID0gcmVxdWVzdC50b2tlbi5hdHRyaWJ1dGVzKCkuYXQoaSk7CiAgICAgICAgIGJvb2wgaXNJ
bmxpbmVFdmVudEhhbmRsZXIgPSBpc05hbWVPZklubGluZUV2ZW50SGFuZGxlcihhdHRyaWJ1dGUu
bV9uYW1lKTsKICAgICAgICAgYm9vbCB2YWx1ZUNvbnRhaW5zSmF2YVNjcmlwdFVSTCA9ICFpc0lu
bGluZUV2ZW50SGFuZGxlciAmJiBwcm90b2NvbElzSmF2YVNjcmlwdChzdHJpcExlYWRpbmdBbmRU
cmFpbGluZ0hUTUxTcGFjZXMoU3RyaW5nKGF0dHJpYnV0ZS5tX3ZhbHVlLmRhdGEoKSwgYXR0cmli
dXRlLm1fdmFsdWUuc2l6ZSgpKSkpOwogICAgICAgICBpZiAoIWlzSW5saW5lRXZlbnRIYW5kbGVy
ICYmICF2YWx1ZUNvbnRhaW5zSmF2YVNjcmlwdFVSTCkKICAgICAgICAgICAgIGNvbnRpbnVlOwot
ICAgICAgICBpZiAoIWlzQ29udGFpbmVkSW5SZXF1ZXN0KGRlY29kZWRTbmlwcGV0Rm9yQXR0cmli
dXRlKHRva2VuLCBhdHRyaWJ1dGUsIFNjcmlwdExpa2VBdHRyaWJ1dGUpKSkKKyAgICAgICAgaWYg
KCFpc0NvbnRhaW5lZEluUmVxdWVzdChkZWNvZGVkU25pcHBldEZvckF0dHJpYnV0ZShyZXF1ZXN0
LCBhdHRyaWJ1dGUsIFNjcmlwdExpa2VBdHRyaWJ1dGUpKSkKICAgICAgICAgICAgIGNvbnRpbnVl
OwotICAgICAgICB0b2tlbi5lcmFzZVZhbHVlT2ZBdHRyaWJ1dGUoaSk7CisgICAgICAgIHJlcXVl
c3QudG9rZW4uZXJhc2VWYWx1ZU9mQXR0cmlidXRlKGkpOwogICAgICAgICBpZiAodmFsdWVDb250
YWluc0phdmFTY3JpcHRVUkwpCi0gICAgICAgICAgICB0b2tlbi5hcHBlbmRUb0F0dHJpYnV0ZVZh
bHVlKGksIHNhZmVKYXZhU2NyaXB0VVJMKTsKKyAgICAgICAgICAgIHJlcXVlc3QudG9rZW4uYXBw
ZW5kVG9BdHRyaWJ1dGVWYWx1ZShpLCBzYWZlSmF2YVNjcmlwdFVSTCk7CiAgICAgICAgIGRpZEJs
b2NrU2NyaXB0ID0gdHJ1ZTsKICAgICB9CiAgICAgcmV0dXJuIGRpZEJsb2NrU2NyaXB0OwogfQog
Ci1ib29sIFhTU0F1ZGl0b3I6OmVyYXNlQXR0cmlidXRlSWZJbmplY3RlZChIVE1MVG9rZW4mIHRv
a2VuLCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBTdHJpbmcmIHJl
cGxhY2VtZW50VmFsdWUsIEF0dHJpYnV0ZUtpbmQgdHJlYXRtZW50KQorYm9vbCBYU1NBdWRpdG9y
OjplcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQoY29uc3QgRmlsdGVyVG9rZW5SZXF1ZXN0JiByZXF1
ZXN0LCBjb25zdCBRdWFsaWZpZWROYW1lJiBhdHRyaWJ1dGVOYW1lLCBjb25zdCBTdHJpbmcmIHJl
cGxhY2VtZW50VmFsdWUsIEF0dHJpYnV0ZUtpbmQgdHJlYXRtZW50KQogewogICAgIHNpemVfdCBp
bmRleE9mQXR0cmlidXRlID0gMDsKLSAgICBpZiAoZmluZEF0dHJpYnV0ZVdpdGhOYW1lKHRva2Vu
LCBhdHRyaWJ1dGVOYW1lLCBpbmRleE9mQXR0cmlidXRlKSkgewotICAgICAgICBjb25zdCBIVE1M
VG9rZW46OkF0dHJpYnV0ZSYgYXR0cmlidXRlID0gdG9rZW4uYXR0cmlidXRlcygpLmF0KGluZGV4
T2ZBdHRyaWJ1dGUpOwotICAgICAgICBpZiAoaXNDb250YWluZWRJblJlcXVlc3QoZGVjb2RlZFNu
aXBwZXRGb3JBdHRyaWJ1dGUodG9rZW4sIGF0dHJpYnV0ZSwgdHJlYXRtZW50KSkpIHsKKyAgICBp
ZiAoZmluZEF0dHJpYnV0ZVdpdGhOYW1lKHJlcXVlc3QudG9rZW4sIGF0dHJpYnV0ZU5hbWUsIGlu
ZGV4T2ZBdHRyaWJ1dGUpKSB7CisgICAgICAgIGNvbnN0IEhUTUxUb2tlbjo6QXR0cmlidXRlJiBh
dHRyaWJ1dGUgPSByZXF1ZXN0LnRva2VuLmF0dHJpYnV0ZXMoKS5hdChpbmRleE9mQXR0cmlidXRl
KTsKKyAgICAgICAgaWYgKGlzQ29udGFpbmVkSW5SZXF1ZXN0KGRlY29kZWRTbmlwcGV0Rm9yQXR0
cmlidXRlKHJlcXVlc3QsIGF0dHJpYnV0ZSwgdHJlYXRtZW50KSkpIHsKICAgICAgICAgICAgIGlm
ICh0aHJlYWRTYWZlTWF0Y2goYXR0cmlidXRlTmFtZSwgc3JjQXR0cikgJiYgaXNMaWtlbHlTYWZl
UmVzb3VyY2UoU3RyaW5nKGF0dHJpYnV0ZS5tX3ZhbHVlLmRhdGEoKSwgYXR0cmlidXRlLm1fdmFs
dWUuc2l6ZSgpKSkpCiAgICAgICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICAgICAg
aWYgKHRocmVhZFNhZmVNYXRjaChhdHRyaWJ1dGVOYW1lLCBodHRwX2VxdWl2QXR0cikgJiYgIWlz
RGFuZ2Vyb3VzSFRUUEVxdWl2KFN0cmluZyhhdHRyaWJ1dGUubV92YWx1ZS5kYXRhKCksIGF0dHJp
YnV0ZS5tX3ZhbHVlLnNpemUoKSkpKQogICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKLSAg
ICAgICAgICAgIHRva2VuLmVyYXNlVmFsdWVPZkF0dHJpYnV0ZShpbmRleE9mQXR0cmlidXRlKTsK
KyAgICAgICAgICAgIHJlcXVlc3QudG9rZW4uZXJhc2VWYWx1ZU9mQXR0cmlidXRlKGluZGV4T2ZB
dHRyaWJ1dGUpOwogICAgICAgICAgICAgaWYgKCFyZXBsYWNlbWVudFZhbHVlLmlzRW1wdHkoKSkK
LSAgICAgICAgICAgICAgICB0b2tlbi5hcHBlbmRUb0F0dHJpYnV0ZVZhbHVlKGluZGV4T2ZBdHRy
aWJ1dGUsIHJlcGxhY2VtZW50VmFsdWUpOworICAgICAgICAgICAgICAgIHJlcXVlc3QudG9rZW4u
YXBwZW5kVG9BdHRyaWJ1dGVWYWx1ZShpbmRleE9mQXR0cmlidXRlLCByZXBsYWNlbWVudFZhbHVl
KTsKICAgICAgICAgICAgIHJldHVybiB0cnVlOwogICAgICAgICB9CiAgICAgfQogICAgIHJldHVy
biBmYWxzZTsKIH0KIAotU3RyaW5nIFhTU0F1ZGl0b3I6OmRlY29kZWRTbmlwcGV0Rm9yTmFtZShj
b25zdCBIVE1MVG9rZW4mIHRva2VuKQorU3RyaW5nIFhTU0F1ZGl0b3I6OmRlY29kZWRTbmlwcGV0
Rm9yTmFtZShjb25zdCBGaWx0ZXJUb2tlblJlcXVlc3QmIHJlcXVlc3QpCiB7CiAgICAgLy8gR3Jh
YiBhIGZpeGVkIG51bWJlciBvZiBjaGFyYWN0ZXJzIGVxdWFsIHRvIHRoZSBsZW5ndGggb2YgdGhl
IHRva2VuJ3MgbmFtZSBwbHVzIG9uZSAodG8gYWNjb3VudCBmb3IgdGhlICI8IikuCi0gICAgcmV0
dXJuIGZ1bGx5RGVjb2RlU3RyaW5nKG1fcGFyc2VyLT5zb3VyY2VGb3JUb2tlbih0b2tlbiksIG1f
cGFyc2VyLT5kb2N1bWVudCgpLT5kZWNvZGVyKCkpLnN1YnN0cmluZygwLCB0b2tlbi5uYW1lKCku
c2l6ZSgpICsgMSk7CisgICAgcmV0dXJuIGZ1bGx5RGVjb2RlU3RyaW5nKHJlcXVlc3Quc291cmNl
VHJhY2tlci5zb3VyY2VGb3JUb2tlbihyZXF1ZXN0LnRva2VuKSwgcmVxdWVzdC5kZWNvZGVyKS5z
dWJzdHJpbmcoMCwgcmVxdWVzdC50b2tlbi5uYW1lKCkuc2l6ZSgpICsgMSk7CiB9CiAKLVN0cmlu
ZyBYU1NBdWRpdG9yOjpkZWNvZGVkU25pcHBldEZvckF0dHJpYnV0ZShjb25zdCBIVE1MVG9rZW4m
IHRva2VuLCBjb25zdCBIVE1MVG9rZW46OkF0dHJpYnV0ZSYgYXR0cmlidXRlLCBBdHRyaWJ1dGVL
aW5kIHRyZWF0bWVudCkKK1N0cmluZyBYU1NBdWRpdG9yOjpkZWNvZGVkU25pcHBldEZvckF0dHJp
YnV0ZShjb25zdCBGaWx0ZXJUb2tlblJlcXVlc3QmIHJlcXVlc3QsIGNvbnN0IEhUTUxUb2tlbjo6
QXR0cmlidXRlJiBhdHRyaWJ1dGUsIEF0dHJpYnV0ZUtpbmQgdHJlYXRtZW50KQogewogICAgIC8v
IFRoZSByYW5nZSBkb2Vzbid0IGlubGN1ZGUgdGhlIGNoYXJhY3RlciB3aGljaCB0ZXJtaW5hdGVz
IHRoZSB2YWx1ZS4gU28sCiAgICAgLy8gZm9yIGFuIGlucHV0IG9mIHxuYW1lPSJ2YWx1ZSJ8LCB0
aGUgc25pcHBldCBpcyB8bmFtZT0idmFsdWV8LiBGb3IgYW4KICAgICAvLyB1bnF1b3RlZCBpbnB1
dCBvZiB8bmFtZT12YWx1ZSB8LCB0aGUgc25pcHBldCBpcyB8bmFtZT12YWx1ZXwuCiAgICAgLy8g
RklYTUU6IFdlIHNob3VsZCBncmFiIG9uZSBjaGFyYWN0ZXIgYmVmb3JlIHRoZSBuYW1lIGFsc28u
Ci0gICAgaW50IHN0YXJ0ID0gYXR0cmlidXRlLm1fbmFtZVJhbmdlLm1fc3RhcnQgLSB0b2tlbi5z
dGFydEluZGV4KCk7Ci0gICAgaW50IGVuZCA9IGF0dHJpYnV0ZS5tX3ZhbHVlUmFuZ2UubV9lbmQg
LSB0b2tlbi5zdGFydEluZGV4KCk7Ci0gICAgU3RyaW5nIGRlY29kZWRTbmlwcGV0ID0gZnVsbHlE
ZWNvZGVTdHJpbmcobV9wYXJzZXItPnNvdXJjZUZvclRva2VuKHRva2VuKS5zdWJzdHJpbmcoc3Rh
cnQsIGVuZCAtIHN0YXJ0KSwgbV9wYXJzZXItPmRvY3VtZW50KCktPmRlY29kZXIoKSk7CisgICAg
aW50IHN0YXJ0ID0gYXR0cmlidXRlLm1fbmFtZVJhbmdlLm1fc3RhcnQgLSByZXF1ZXN0LnRva2Vu
LnN0YXJ0SW5kZXgoKTsKKyAgICBpbnQgZW5kID0gYXR0cmlidXRlLm1fdmFsdWVSYW5nZS5tX2Vu
ZCAtIHJlcXVlc3QudG9rZW4uc3RhcnRJbmRleCgpOworICAgIFN0cmluZyBkZWNvZGVkU25pcHBl
dCA9IGZ1bGx5RGVjb2RlU3RyaW5nKHJlcXVlc3Quc291cmNlVHJhY2tlci5zb3VyY2VGb3JUb2tl
bihyZXF1ZXN0LnRva2VuKS5zdWJzdHJpbmcoc3RhcnQsIGVuZCAtIHN0YXJ0KSwgcmVxdWVzdC5k
ZWNvZGVyKTsKICAgICBkZWNvZGVkU25pcHBldC50cnVuY2F0ZShrTWF4aW11bUZyYWdtZW50TGVu
Z3RoVGFyZ2V0KTsKICAgICBpZiAodHJlYXRtZW50ID09IFNyY0xpa2VBdHRyaWJ1dGUpIHsKICAg
ICAgICAgaW50IHNsYXNoQ291bnQgPSAwOwpAQCAtNTczLDkgKzU3Myw5IEBAIFN0cmluZyBYU1NB
dWRpdG9yOjpkZWNvZGVkU25pcHBldEZvckF0dHJpYnV0ZShjb25zdCBIVE1MVG9rZW4mIHRva2Vu
LCBjb25zdCBIVE1MCiAgICAgcmV0dXJuIGRlY29kZWRTbmlwcGV0OwogfQogCi1TdHJpbmcgWFNT
QXVkaXRvcjo6ZGVjb2RlZFNuaXBwZXRGb3JKYXZhU2NyaXB0KGNvbnN0IEhUTUxUb2tlbiYgdG9r
ZW4pCitTdHJpbmcgWFNTQXVkaXRvcjo6ZGVjb2RlZFNuaXBwZXRGb3JKYXZhU2NyaXB0KGNvbnN0
IEZpbHRlclRva2VuUmVxdWVzdCYgcmVxdWVzdCkKIHsKLSAgICBTdHJpbmcgc3RyaW5nID0gbV9w
YXJzZXItPnNvdXJjZUZvclRva2VuKHRva2VuKTsKKyAgICBTdHJpbmcgc3RyaW5nID0gcmVxdWVz
dC5zb3VyY2VUcmFja2VyLnNvdXJjZUZvclRva2VuKHJlcXVlc3QudG9rZW4pOwogICAgIHNpemVf
dCBzdGFydFBvc2l0aW9uID0gMDsKICAgICBzaXplX3QgZW5kUG9zaXRpb24gPSBzdHJpbmcubGVu
Z3RoKCk7CiAgICAgc2l6ZV90IGZvdW5kUG9zaXRpb24gPSBub3RGb3VuZDsKQEAgLTYzMCw3ICs2
MzAsNyBAQCBTdHJpbmcgWFNTQXVkaXRvcjo6ZGVjb2RlZFNuaXBwZXRGb3JKYXZhU2NyaXB0KGNv
bnN0IEhUTUxUb2tlbiYgdG9rZW4pCiAgICAgICAgICAgICB9CiAgICAgICAgIH0KIAotICAgICAg
ICByZXN1bHQgPSBmdWxseURlY29kZVN0cmluZyhzdHJpbmcuc3Vic3RyaW5nKHN0YXJ0UG9zaXRp
b24sIGZvdW5kUG9zaXRpb24gLSBzdGFydFBvc2l0aW9uKSwgbV9wYXJzZXItPmRvY3VtZW50KCkt
PmRlY29kZXIoKSk7CisgICAgICAgIHJlc3VsdCA9IGZ1bGx5RGVjb2RlU3RyaW5nKHN0cmluZy5z
dWJzdHJpbmcoc3RhcnRQb3NpdGlvbiwgZm91bmRQb3NpdGlvbiAtIHN0YXJ0UG9zaXRpb24pLCBy
ZXF1ZXN0LmRlY29kZXIpOwogICAgICAgICBzdGFydFBvc2l0aW9uID0gZm91bmRQb3NpdGlvbiAr
IDE7CiAgICAgfQogICAgIHJldHVybiByZXN1bHQ7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9odG1sL3BhcnNlci9YU1NBdWRpdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL3BhcnNlci9Y
U1NBdWRpdG9yLmgKaW5kZXggMmJkMTdiNTVjZjMxYzk1YThhNmU0OGRiMDc4MzE2NDFkYzg4YzZh
OC4uZmEyMzRkMzdjZDY1MzAwMDBiMTY4YmRmODNmNDhlZjA5MmMzNWY5OSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9wYXJzZXIvWFNTQXVkaXRvci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvcGFyc2VyL1hTU0F1ZGl0b3IuaApAQCAtMzYsNiArMzYsMjAgQEAgbmFtZXNwYWNl
IFdlYkNvcmUgewogY2xhc3MgRGlkQmxvY2tTY3JpcHRSZXF1ZXN0OwogY2xhc3MgRG9jdW1lbnQ7
CiBjbGFzcyBIVE1MRG9jdW1lbnRQYXJzZXI7CitjbGFzcyBIVE1MU291cmNlVHJhY2tlcjsKK2Ns
YXNzIFRleHRSZXNvdXJjZURlY29kZXI7CisKK3N0cnVjdCBGaWx0ZXJUb2tlblJlcXVlc3Qgewor
ICAgIEZpbHRlclRva2VuUmVxdWVzdChIVE1MVG9rZW4mIHRva2VuLCBIVE1MU291cmNlVHJhY2tl
ciYgc291cmNlVHJhY2tlciwgY29uc3QgVGV4dFJlc291cmNlRGVjb2RlciogZGVjb2RlcikKKyAg
ICAgICAgOiB0b2tlbih0b2tlbikKKyAgICAgICAgLCBzb3VyY2VUcmFja2VyKHNvdXJjZVRyYWNr
ZXIpCisgICAgICAgICwgZGVjb2RlcihkZWNvZGVyKQorICAgIHsgfQorCisgICAgSFRNTFRva2Vu
JiB0b2tlbjsKKyAgICBIVE1MU291cmNlVHJhY2tlciYgc291cmNlVHJhY2tlcjsKKyAgICBjb25z
dCBUZXh0UmVzb3VyY2VEZWNvZGVyKiBkZWNvZGVyOworfTsKIAogY2xhc3MgWFNTQXVkaXRvciB7
CiAgICAgV1RGX01BS0VfTk9OQ09QWUFCTEUoWFNTQXVkaXRvcik7CkBAIC00Myw3ICs1Nyw3IEBA
IHB1YmxpYzoKICAgICBleHBsaWNpdCBYU1NBdWRpdG9yKEhUTUxEb2N1bWVudFBhcnNlciopOwog
CiAgICAgdm9pZCBpbml0KERvY3VtZW50Kik7Ci0gICAgUGFzc093blB0cjxEaWRCbG9ja1Njcmlw
dFJlcXVlc3Q+IGZpbHRlclRva2VuKEhUTUxUb2tlbiYpOworICAgIFBhc3NPd25QdHI8RGlkQmxv
Y2tTY3JpcHRSZXF1ZXN0PiBmaWx0ZXJUb2tlbihjb25zdCBGaWx0ZXJUb2tlblJlcXVlc3QmKTsK
IAogcHJpdmF0ZToKICAgICBzdGF0aWMgY29uc3Qgc2l6ZV90IGtNYXhpbXVtRnJhZ21lbnRMZW5n
dGhUYXJnZXQgPSAxMDA7CkBAIC01OSwyNiArNzMsMjYgQEAgcHJpdmF0ZToKICAgICAgICAgU2Ny
aXB0TGlrZUF0dHJpYnV0ZQogICAgIH07CiAKLSAgICBib29sIGZpbHRlclN0YXJ0VG9rZW4oSFRN
TFRva2VuJik7CisgICAgYm9vbCBmaWx0ZXJTdGFydFRva2VuKGNvbnN0IEZpbHRlclRva2VuUmVx
dWVzdCYpOwogICAgIHZvaWQgZmlsdGVyRW5kVG9rZW4oSFRNTFRva2VuJik7Ci0gICAgYm9vbCBm
aWx0ZXJDaGFyYWN0ZXJUb2tlbihIVE1MVG9rZW4mKTsKLSAgICBib29sIGZpbHRlclNjcmlwdFRv
a2VuKEhUTUxUb2tlbiYpOwotICAgIGJvb2wgZmlsdGVyT2JqZWN0VG9rZW4oSFRNTFRva2VuJik7
Ci0gICAgYm9vbCBmaWx0ZXJQYXJhbVRva2VuKEhUTUxUb2tlbiYpOwotICAgIGJvb2wgZmlsdGVy
RW1iZWRUb2tlbihIVE1MVG9rZW4mKTsKLSAgICBib29sIGZpbHRlckFwcGxldFRva2VuKEhUTUxU
b2tlbiYpOwotICAgIGJvb2wgZmlsdGVySWZyYW1lVG9rZW4oSFRNTFRva2VuJik7Ci0gICAgYm9v
bCBmaWx0ZXJNZXRhVG9rZW4oSFRNTFRva2VuJik7Ci0gICAgYm9vbCBmaWx0ZXJCYXNlVG9rZW4o
SFRNTFRva2VuJik7Ci0gICAgYm9vbCBmaWx0ZXJGb3JtVG9rZW4oSFRNTFRva2VuJik7Ci0KLSAg
ICBib29sIGVyYXNlRGFuZ2Vyb3VzQXR0cmlidXRlc0lmSW5qZWN0ZWQoSFRNTFRva2VuJik7Ci0g
ICAgYm9vbCBlcmFzZUF0dHJpYnV0ZUlmSW5qZWN0ZWQoSFRNTFRva2VuJiwgY29uc3QgUXVhbGlm
aWVkTmFtZSYsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRWYWx1ZSA9IFN0cmluZygpLCBBdHRy
aWJ1dGVLaW5kIHRyZWF0bWVudCA9IE5vcm1hbEF0dHJpYnV0ZSk7CisgICAgYm9vbCBmaWx0ZXJD
aGFyYWN0ZXJUb2tlbihjb25zdCBGaWx0ZXJUb2tlblJlcXVlc3QmKTsKKyAgICBib29sIGZpbHRl
clNjcmlwdFRva2VuKGNvbnN0IEZpbHRlclRva2VuUmVxdWVzdCYpOworICAgIGJvb2wgZmlsdGVy
T2JqZWN0VG9rZW4oY29uc3QgRmlsdGVyVG9rZW5SZXF1ZXN0Jik7CisgICAgYm9vbCBmaWx0ZXJQ
YXJhbVRva2VuKGNvbnN0IEZpbHRlclRva2VuUmVxdWVzdCYpOworICAgIGJvb2wgZmlsdGVyRW1i
ZWRUb2tlbihjb25zdCBGaWx0ZXJUb2tlblJlcXVlc3QmKTsKKyAgICBib29sIGZpbHRlckFwcGxl
dFRva2VuKGNvbnN0IEZpbHRlclRva2VuUmVxdWVzdCYpOworICAgIGJvb2wgZmlsdGVySWZyYW1l
VG9rZW4oY29uc3QgRmlsdGVyVG9rZW5SZXF1ZXN0Jik7CisgICAgYm9vbCBmaWx0ZXJNZXRhVG9r
ZW4oY29uc3QgRmlsdGVyVG9rZW5SZXF1ZXN0Jik7CisgICAgYm9vbCBmaWx0ZXJCYXNlVG9rZW4o
Y29uc3QgRmlsdGVyVG9rZW5SZXF1ZXN0Jik7CisgICAgYm9vbCBmaWx0ZXJGb3JtVG9rZW4oY29u
c3QgRmlsdGVyVG9rZW5SZXF1ZXN0Jik7CisKKyAgICBib29sIGVyYXNlRGFuZ2Vyb3VzQXR0cmli
dXRlc0lmSW5qZWN0ZWQoY29uc3QgRmlsdGVyVG9rZW5SZXF1ZXN0Jik7CisgICAgYm9vbCBlcmFz
ZUF0dHJpYnV0ZUlmSW5qZWN0ZWQoY29uc3QgRmlsdGVyVG9rZW5SZXF1ZXN0JiwgY29uc3QgUXVh
bGlmaWVkTmFtZSYsIGNvbnN0IFN0cmluZyYgcmVwbGFjZW1lbnRWYWx1ZSA9IFN0cmluZygpLCBB
dHRyaWJ1dGVLaW5kIHRyZWF0bWVudCA9IE5vcm1hbEF0dHJpYnV0ZSk7CiAKICAgICBTdHJpbmcg
ZGVjb2RlZFNuaXBwZXRGb3JUb2tlbihjb25zdCBIVE1MVG9rZW4mKTsKLSAgICBTdHJpbmcgZGVj
b2RlZFNuaXBwZXRGb3JOYW1lKGNvbnN0IEhUTUxUb2tlbiYpOwotICAgIFN0cmluZyBkZWNvZGVk
U25pcHBldEZvckF0dHJpYnV0ZShjb25zdCBIVE1MVG9rZW4mLCBjb25zdCBIVE1MVG9rZW46OkF0
dHJpYnV0ZSYsIEF0dHJpYnV0ZUtpbmQgdHJlYXRtZW50ID0gTm9ybWFsQXR0cmlidXRlKTsKLSAg
ICBTdHJpbmcgZGVjb2RlZFNuaXBwZXRGb3JKYXZhU2NyaXB0KGNvbnN0IEhUTUxUb2tlbiYpOwor
ICAgIFN0cmluZyBkZWNvZGVkU25pcHBldEZvck5hbWUoY29uc3QgRmlsdGVyVG9rZW5SZXF1ZXN0
Jik7CisgICAgU3RyaW5nIGRlY29kZWRTbmlwcGV0Rm9yQXR0cmlidXRlKGNvbnN0IEZpbHRlclRv
a2VuUmVxdWVzdCYsIGNvbnN0IEhUTUxUb2tlbjo6QXR0cmlidXRlJiwgQXR0cmlidXRlS2luZCB0
cmVhdG1lbnQgPSBOb3JtYWxBdHRyaWJ1dGUpOworICAgIFN0cmluZyBkZWNvZGVkU25pcHBldEZv
ckphdmFTY3JpcHQoY29uc3QgRmlsdGVyVG9rZW5SZXF1ZXN0Jik7CiAKICAgICBib29sIGlzQ29u
dGFpbmVkSW5SZXF1ZXN0KGNvbnN0IFN0cmluZyYpOwogICAgIGJvb2wgaXNMaWtlbHlTYWZlUmVz
b3VyY2UoY29uc3QgU3RyaW5nJiB1cmwpOwo=
</data>

          </attachment>
      

    </bug>

</bugzilla>