<?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>53235</bug_id>
          
          <creation_ts>2011-01-27 04:49:17 -0800</creation_ts>
          <short_desc>Web Inspector: new api for managing JavaScript breakpoints</short_desc>
          <delta_ts>2011-02-03 07:28:34 -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>Web Inspector (Deprecated)</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>0</everconfirmed>
          <reporter name="Pavel Podivilov">podivilov</reporter>
          <assigned_to name="Pavel Podivilov">podivilov</assigned_to>
          <cc>apavlov</cc>
    
    <cc>bweinstein</cc>
    
    <cc>joepeck</cc>
    
    <cc>keishi</cc>
    
    <cc>loislo</cc>
    
    <cc>pfeldman</cc>
    
    <cc>pmuellr</cc>
    
    <cc>rik</cc>
    
    <cc>timothy</cc>
    
    <cc>yurys</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>340836</commentid>
    <comment_count>0</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-01-27 04:49:17 -0800</bug_when>
    <thetext>In new protocol, there should be three methods related to JavaScript breakpoints:
[domain=Debugger] void setJavaScriptBreakpoint(in Object breakpoint, out String breakpointId, out Array locations);
[domain=Debugger] void removeJavaScriptBreakpoint(in String breakpointId);
[notify, domain=Debugger] void breakpointResolved(out String breakpointId, out Object location);

breakpoint argument has the following properties:
1. url (optional)
2. sourceID (optional)
3. lineNumber
4. columnNumber (optional, defaults to 1)
5. condition (optional)
6. enabled (optional, defaults to true)
At least one of url and sourceID should be provided.

location specifies actual location where breakpoint was resolved by VM, location has 3 properties: sourceID, lineNumber, columnNumber.

When frontend enables debugger, it should set all JavaScript breakpoints one by one using setJavaScriptBreakpoint method. After that, breakpoints will be resolved in parsed scripts automatically during debugging session (until frontend is closed).
When provisional breakpoint is resolved (e.g. on navigation), breakpointResolved notification is used to update frontend with the new breakpoint location.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340845</commentid>
    <comment_count>1</comment_count>
      <attachid>80325</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-01-27 05:35:35 -0800</bug_when>
    <thetext>Created attachment 80325
Patch.

Single protocol breakpoint (e.g. set by url) is mapped on zero or more VM breakpoints (set by sourceID).
removeJavaScriptBreakpoint(breakpointId) removes breakpoint and all linked VM breakpoints.
Since UI uses VM breakpoint location rather then protocol breakpoint location, all resolved breakpoints locations are passed to frontend.

SourceFrame is now aware of whether breakpoint is resolved or not and may display it accordingly.
JavaScriptBreakpointsSidebarPane filters out breakpoints set on nonexistent scripts to avoid UI cluttering.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>340861</commentid>
    <comment_count>2</comment_count>
      <attachid>80330</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-01-27 06:46:25 -0800</bug_when>
    <thetext>Created attachment 80330
Rebase.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>342793</commentid>
    <comment_count>3</comment_count>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-01-31 13:49:56 -0800</bug_when>
    <thetext>(In reply to comment #0)
&gt; In new protocol, there should be three methods related to JavaScript breakpoints:
&gt; [domain=Debugger] void setJavaScriptBreakpoint(in Object breakpoint, out String breakpointId, out Array locations);

Why not to list breakpoint properties explicitly? Note that the actual protocol sends arguments as named properties.

&gt; [domain=Debugger] void removeJavaScriptBreakpoint(in String breakpointId);
&gt; [notify, domain=Debugger] void breakpointResolved(out String breakpointId, out Object location);
&gt; 
&gt; breakpoint argument has the following properties:
&gt; 1. url (optional)
&gt; 2. sourceID (optional)
&gt; 3. lineNumber
&gt; 4. columnNumber (optional, defaults to 1)
&gt; 5. condition (optional)
&gt; 6. enabled (optional, defaults to true)
&gt; At least one of url and sourceID should be provided.
&gt; 

We need to make sure that optional parameters are marked as such in the IDL. Otherwise protocol checks won&apos;t let them through.

&gt; location specifies actual location where breakpoint was resolved by VM, location has 3 properties: sourceID, lineNumber, columnNumber.
&gt; 

I don&apos;t understand the locations Array. I would expect that a breakpoint results in a single location. Breakpoints set by sourceID should result in location with sourceID, breakpoints set by URL should result in location with URL. Clients should have a choice of whether working in terms of IDs or URLs. We should not mix those.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343104</commentid>
    <comment_count>4</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-02-01 03:03:10 -0800</bug_when>
    <thetext>(In reply to comment #3)
&gt; (In reply to comment #0)
&gt; &gt; In new protocol, there should be three methods related to JavaScript breakpoints:
&gt; &gt; [domain=Debugger] void setJavaScriptBreakpoint(in Object breakpoint, out String breakpointId, out Array locations);
&gt; 
&gt; Why not to list breakpoint properties explicitly? Note that the actual protocol sends arguments as named properties.
&gt; 
&gt; &gt; [domain=Debugger] void removeJavaScriptBreakpoint(in String breakpointId);
&gt; &gt; [notify, domain=Debugger] void breakpointResolved(out String breakpointId, out Object location);
&gt; &gt; 
&gt; &gt; breakpoint argument has the following properties:
&gt; &gt; 1. url (optional)
&gt; &gt; 2. sourceID (optional)
&gt; &gt; 3. lineNumber
&gt; &gt; 4. columnNumber (optional, defaults to 1)
&gt; &gt; 5. condition (optional)
&gt; &gt; 6. enabled (optional, defaults to true)
&gt; &gt; At least one of url and sourceID should be provided.
&gt; &gt; 
&gt; 
&gt; We need to make sure that optional parameters are marked as such in the IDL. Otherwise protocol checks won&apos;t let them through.

We may use empty strings for omitted parameters and hide this behind sdk.

&gt; 
&gt; &gt; location specifies actual location where breakpoint was resolved by VM, location has 3 properties: sourceID, lineNumber, columnNumber.
&gt; &gt; 
&gt; 
&gt; I don&apos;t understand the locations Array. I would expect that a breakpoint results in a single location. Breakpoints set by sourceID should result in location with sourceID, breakpoints set by URL should result in location with URL. Clients should have a choice of whether working in terms of IDs or URLs. We should not mix those.

When you set breakpoint by url, it may be resolved into several scripts that have the same url. Locations array is used to provide sourceId:line:column for each of this scripts. Alternatively, we may return only the first location, but such protocol looks inconsistent to me, since we address scripts by sourceId, but hide sourceId info when setting breakpoint by url. It would also prevent us from debugging several scripts with the same url (we wouldn&apos;t be able to display breakpoints correctly). What do you think?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343268</commentid>
    <comment_count>5</comment_count>
      <attachid>80772</attachid>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-02-01 09:32:25 -0800</bug_when>
    <thetext>Created attachment 80772
Patch.

Update after offline discussion.

[domain=Debugger] void setJavaScriptBreakpoint(in String url, in int lineNumber, in int columnNumber, in String condition, in boolean enabled, out String breakpointId, out Array locations);
[domain=Debugger] void setJavaScriptBreakpointBySourceId(in String sourceId, in int lineNumber, in int columnNumber, in String condition, in boolean enabled, out String breakpointId, out int actualLineNumber, out int actualColumnNumber);
[domain=Debugger] void removeJavaScriptBreakpoint(in String breakpointId);
[notify, domain=Debugger] void breakpointResolved(out String breakpointId, out String sourceId, out int lineNumber, out int columnNumber);

There are two methods for setting a breakpoint:
1. setJavaScriptBreakpoint - sets provisional breakpoint by url, backend would set it in all scripts with matching url and notify front-end using breakpointResolved notification
2. setJavaScriptBreakpointBySourceId - sets a breakpoint into a single script by sourceId, breakpoint won&apos;t be restored after navigation</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>343951</commentid>
    <comment_count>6</comment_count>
      <attachid>80772</attachid>
    <who name="Pavel Feldman">pfeldman</who>
    <bug_when>2011-02-02 05:37:46 -0800</bug_when>
    <thetext>Comment on attachment 80772
Patch.

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

&gt; Source/WebCore/inspector/InspectorAgent.cpp:1012
&gt; +void InspectorAgent::enableDebugger(bool newDebuggingSession)

newDebuggingSession -&gt; eraseStickyBreakpoints

&gt; Source/WebCore/inspector/InspectorAgent.h:244
&gt; +    void enableDebugger(bool newDebuggingSession = false);

We should not have default values.

&gt; Source/WebCore/inspector/InspectorDebuggerAgent.h:100
&gt; +    struct Script {

You can&apos;t do structs. Yury says that Adam will come and you will get beaten.

&gt; Source/WebCore/inspector/InspectorDebuggerAgent.h:116
&gt; +        int lineOffset;

I don&apos;t see why this is here.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344700</commentid>
    <comment_count>7</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-02-03 07:25:08 -0800</bug_when>
    <thetext>Committed r77489: &lt;http://trac.webkit.org/changeset/77489&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>344702</commentid>
    <comment_count>8</comment_count>
    <who name="Pavel Podivilov">podivilov</who>
    <bug_when>2011-02-03 07:28:34 -0800</bug_when>
    <thetext>(In reply to comment #6)
&gt; (From update of attachment 80772 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=80772&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/inspector/InspectorAgent.cpp:1012
&gt; &gt; +void InspectorAgent::enableDebugger(bool newDebuggingSession)
&gt; 
&gt; newDebuggingSession -&gt; eraseStickyBreakpoints
Done.
&gt; 
&gt; &gt; Source/WebCore/inspector/InspectorAgent.h:244
&gt; &gt; +    void enableDebugger(bool newDebuggingSession = false);
&gt; 
&gt; We should not have default values.
Done.
&gt; 
&gt; &gt; Source/WebCore/inspector/InspectorDebuggerAgent.h:100
&gt; &gt; +    struct Script {
&gt; 
&gt; You can&apos;t do structs. Yury says that Adam will come and you will get beaten.
Done.
&gt; 
&gt; &gt; Source/WebCore/inspector/InspectorDebuggerAgent.h:116
&gt; &gt; +        int lineOffset;
&gt; 
&gt; I don&apos;t see why this is here.
This is needed to fix old and nasty bug with multiplying breakpoints in JSC debugger.</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80325</attachid>
            <date>2011-01-27 05:35:35 -0800</date>
            <delta_ts>2011-01-27 06:46:25 -0800</delta_ts>
            <desc>Patch.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>72540</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA1ODY3NDY5Li41YmJkZGRmIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMDEt
MjcgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogaW50
cm9kdWNlIG5ldyBhcGkgZm9yIG1hbmFnaW5nIEphdmFTY3JpcHQgYnJlYWtwb2ludHMuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzIzNQorCisgICAg
ICAgICogaW5zcGVjdG9yL3JlcG9ydC1wcm90b2NvbC1lcnJvcnMuaHRtbDoKKwogMjAxMS0wMS0y
NiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgUmV2
aWV3ZWQgYnkgTWFydGluIFJvYmluc29uLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVj
dG9yL3JlcG9ydC1wcm90b2NvbC1lcnJvcnMuaHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9y
ZXBvcnQtcHJvdG9jb2wtZXJyb3JzLmh0bWwKaW5kZXggNGMwZmY2ZC4uMDY5YWVhNCAxMDA2NDQK
LS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3JlcG9ydC1wcm90b2NvbC1lcnJvcnMuaHRtbAor
KysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3IvcmVwb3J0LXByb3RvY29sLWVycm9ycy5odG1sCkBA
IC0xNiw4ICsxNiw4IEBAIGZ1bmN0aW9uIHRlc3QoKQogICAgICAgICAneyJzZXEiOjMsImNvbW1h
bmQiOiJyZXNvdXJjZUNvbnRlbnQiLCJhcmd1bWVudHMiOltdfScsCiAgICAgICAgICd7InNlcSI6
NCwiY29tbWFuZCI6InJlc291cmNlQ29udGVudCIsImFyZ3VtZW50cyI6e319JywKICAgICAgICAg
J3sic2VxIjo1LCJjb21tYW5kIjoicmVzb3VyY2VDb250ZW50IiwiYXJndW1lbnRzIjp7ImlkZW50
aWZpZXIiOiJub3QgYSBudW1iZXIifX0nLAotICAgICAgICAneyJzZXEiOjYsImNvbW1hbmQiOiJy
ZW1vdmVCcmVha3BvaW50IiwiYXJndW1lbnRzIjp7fX0nLAotICAgICAgICAneyJzZXEiOjcsImNv
bW1hbmQiOiJyZW1vdmVCcmVha3BvaW50IiwiYXJndW1lbnRzIjp7ImJyZWFrcG9pbnRJZCI6InNv
bWVCcmVha3BvaW50SWQifX0nLAorICAgICAgICAneyJzZXEiOjYsImNvbW1hbmQiOiJyZW1vdmVK
YXZhU2NyaXB0QnJlYWtwb2ludCIsImFyZ3VtZW50cyI6e319JywKKyAgICAgICAgJ3sic2VxIjo3
LCJjb21tYW5kIjoicmVtb3ZlSmF2YVNjcmlwdEJyZWFrcG9pbnQiLCJhcmd1bWVudHMiOnsiYnJl
YWtwb2ludElkIjoic29tZUJyZWFrcG9pbnRJZCJ9fScsCiAKICAgICBdOwogICAgIHZhciBudW1i
ZXJPZlJlcG9ydHMgPSAwOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4IGNkNmIwZDkuLjQ2NGJkYWUgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VM
b2cKQEAgLTEsMyArMSw5NiBAQAorMjAxMS0wMS0yNyAgUGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZp
bG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICBXZWIgSW5zcGVjdG9yOiBpbnRyb2R1Y2UgbmV3IGFwaSBmb3IgbWFuYWdpbmcg
SmF2YVNjcmlwdCBicmVha3BvaW50cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcv
c2hvd19idWcuY2dpP2lkPTUzMjM1CisKKyAgICAgICAgU2luZ2xlIHByb3RvY29sIGJyZWFrcG9p
bnQgKGUuZy4gc2V0IGJ5IHVybCkgaXMgbWFwcGVkIG9uIHplcm8gb3IgbW9yZSBWTSBicmVha3Bv
aW50cyAoc2V0IGJ5IHNvdXJjZUlEKS4KKyAgICAgICAgcmVtb3ZlSmF2YVNjcmlwdEJyZWFrcG9p
bnQoYnJlYWtwb2ludElkKSByZW1vdmVzIGJyZWFrcG9pbnQgYW5kIGFsbCBsaW5rZWQgVk0gYnJl
YWtwb2ludHMuCisgICAgICAgIFNpbmNlIFVJIHVzZXMgVk0gYnJlYWtwb2ludCBsb2NhdGlvbiBy
YXRoZXIgdGhlbiBwcm90b2NvbCBicmVha3BvaW50IGxvY2F0aW9uLCBhbGwgcmVzb2x2ZWQgYnJl
YWtwb2ludHMgbG9jYXRpb25zIGFyZSBwYXNzZWQgdG8gZnJvbnRlbmQuCisKKyAgICAgICAgU291
cmNlRnJhbWUgaXMgbm93IGF3YXJlIG9mIHdoZXRoZXIgYnJlYWtwb2ludCBpcyByZXNvbHZlZCBv
ciBub3QgYW5kIG1heSBkaXNwbGF5IGl0IGFjY29yZGluZ2x5LgorICAgICAgICBKYXZhU2NyaXB0
QnJlYWtwb2ludHNTaWRlYmFyUGFuZSBmaWx0ZXJzIG91dCBicmVha3BvaW50cyBzZXQgb24gbm9u
ZXhpc3RlbnQgc2NyaXB0cyB0byBhdm9pZCBVSSBjbHV0dGVyaW5nLgorCisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3Rvci5pZGw6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckFnZW50
LmNwcDogY2xlYXIgYnJlYWtwb2ludHMgZnJvbSBpbnNwZWN0b3Igc3RhdGUgd2hlbiBuZXcgZnJv
bnRlbmQgaXMgY3JlYXRlZAorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnJlc3Rv
cmVJbnNwZWN0b3JTdGF0ZUZyb21Db29raWUpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
QWdlbnQ6OnBvcHVsYXRlU2NyaXB0T2JqZWN0cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JBZ2VudDo6cmVzdG9yZURlYnVnZ2VyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFn
ZW50OjpzaG93QW5kRW5hYmxlRGVidWdnZXIpOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9y
QWdlbnQ6OmVuYWJsZURlYnVnZ2VyKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQWdl
bnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHA6IG1h
bmFnZSByZWxhdGlvbnMgYmV0d2VlbiBwcm90b2NvbCBicmVha3BvaW50cyBhbmQgVk0gYnJlYWtw
b2ludHMKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Okluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQpOgorICAgICAgICAoV2ViQ29yZTo6aW5zcGVjdG9yT2JqZWN0VG9TY3Jp
cHRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6OmNyZWF0ZVNjcmlwdEJyZWFrcG9pbnRJ
ZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjppbnNwZWN0ZWRV
UkxDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNl
dEphdmFTY3JpcHRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OnJlbW92ZUphdmFTY3JpcHRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRpbnVlVG9Mb2NhdGlvbik6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXNvbHZlQnJlYWtwb2ludCk6CisgICAg
ICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXNvbHZlQnJlYWtwb2ludElu
U2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldFNj
cmlwdFNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpk
aWRQYXJzZVNvdXJjZSk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpkaWRQYXVzZSk6CisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQu
aDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OlNjcmlwdDo6U2Ny
aXB0KToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcDoKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3Rvck9iamVjdDo6cmVtb3ZlKToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yVmFsdWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JPYmplY3Q6OmZp
bmQpOgorICAgICAgICAqIGluc3BlY3Rvci9TY3JpcHRCcmVha3BvaW50Lmg6CisgICAgICAgICog
aW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qczogcmVtb3ZlIGFsbCBzdHVm
ZiByZWxhdGVkIHRvIEphdmFTY3JpcHQgYnJlYWtwb2ludHMgZnJvbSBoZXJlCisgICAgICAgIChX
ZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJy
ZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5fcHJvamVjdENoYW5nZWQpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5fc2F2ZUJyZWFrcG9pbnRzKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUuX3ZhbGlk
YXRlQnJlYWtwb2ludHMpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2lu
dHNTaWRlYmFyUGFuZS5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0QnJlYWtw
b2ludHNTaWRlYmFyUGFuZSk6IGZpbHRlciBicmVha3BvaW50cyBzZXQgb24gbm9uZXhpc3RlbnQg
c2NyaXB0cworICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRCcmVha3BvaW50c1NpZGVi
YXJQYW5lLnByb3RvdHlwZS5fYnJlYWtwb2ludEFkZGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5KYXZhU2NyaXB0QnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90b3R5cGUuX2JyZWFrcG9pbnRS
ZXNvbHZlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdEJyZWFrcG9pbnRzU2lk
ZWJhclBhbmUucHJvdG90eXBlLl9wYXJzZWRTY3JpcHRTb3VyY2UpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkphdmFTY3JpcHRCcmVha3BvaW50c1NpZGViYXJQYW5lLnByb3RvdHlwZS5fYnJlYWtw
b2ludEl0ZW1DaGVja2JveENsaWNrZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3Jp
cHRCcmVha3BvaW50c1NpZGViYXJQYW5lLnByb3RvdHlwZS5fc2V0dXBCcmVha3BvaW50RWxlbWVu
dC5kaWRHZXRTb3VyY2VMaW5lKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0QnJl
YWtwb2ludHNTaWRlYmFyUGFuZS5wcm90b3R5cGUuX3NldHVwQnJlYWtwb2ludEVsZW1lbnQpOgor
ICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRGVidWdnZXJNb2RlbC5qczoKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsKTogcHVsbCBhbGwgSmF2YVNjcmlwdCBmcm9tIGxv
Y2FsU3RvcmFnZSBhbmQgcHVzaCB0aGVtIHRvIGZyb250ZWQgd2hlbiBkZWJ1Z2dlciBpcyBlbmFi
bGVkCisgICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5wcm90b3R5cGUuZW5hYmxl
RGVidWdnZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwucHJvdG90eXBl
LmRpc2FibGVEZWJ1Z2dlcik6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5w
cm90b3R5cGUuY29udGludWVUb0xpbmUpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2Vy
TW9kZWwucHJvdG90eXBlLnNldEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRl
YnVnZ2VyTW9kZWwucHJvdG90eXBlLnJlbW92ZUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkRlYnVnZ2VyTW9kZWwucHJvdG90eXBlLnVwZGF0ZUJyZWFrcG9pbnQpOgorICAgICAg
ICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwucHJvdG90eXBlLl9zZXRCcmVha3BvaW50KToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLnByb3RvdHlwZS5fYnJlYWtwb2lu
dFJlc29sdmVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLnByb3RvdHlw
ZS5fc2F2ZUJyZWFrcG9pbnRzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVs
LnByb3RvdHlwZS5nZXQgYnJlYWtwb2ludHMpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVn
Z2VyTW9kZWwucHJvdG90eXBlLmZpbmRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rv
ci5EZWJ1Z2dlck1vZGVsLnByb3RvdHlwZS5yZXNldCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
RGVidWdnZXJNb2RlbC5wcm90b3R5cGUuX3BhdXNlZFNjcmlwdCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuRGVidWdnZXJEaXNwYXRjaGVyLnByb3RvdHlwZS5icmVha3BvaW50UmVzb2x2ZWQpOgor
ICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzOgorICAgICAgICAo
V2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUuX3RvZ2dsZURlYnVnZ2luZyk6Cisg
ICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qczoKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5TZXR0aW5ncyk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VG
cmFtZS5qczogaGFuZGxlIHJlc29sdmVkIGFuZCB1bnJlc29sdmVkIGJyZWFrcG9pbnRzIGRpZmZl
cmVudGx5CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9jcmVh
dGVUZXh0Vmlld2VyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5
cGUuX3NldFRleHRWaWV3ZXJEZWNvcmF0aW9ucyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291
cmNlRnJhbWUucHJvdG90eXBlLl9zaG91bGREaXNwbGF5QnJlYWtwb2ludCk6CisgICAgICAgIChX
ZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9icmVha3BvaW50QWRkZWQpOgorICAg
ICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5fYnJlYWtwb2ludFJlbW92
ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5fYnJlYWtw
b2ludFJlc29sdmVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5
cGUuX3NldEJyZWFrcG9pbnREZWNvcmF0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3Vy
Y2VGcmFtZS5wcm90b3R5cGUuX2NvbnRleHRNZW51LmVsc2UucmVtb3ZlQnJlYWtwb2ludCk6Cisg
ICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9jb250ZXh0TWVudS5l
bHNlLmVkaXRCcmVha3BvaW50Q29uZGl0aW9uLmRpZEVkaXRCcmVha3BvaW50Q29uZGl0aW9uKToK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX2NvbnRleHRNZW51
LmVsc2UuZWRpdEJyZWFrcG9pbnRDb25kaXRpb24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNv
dXJjZUZyYW1lLnByb3RvdHlwZS5fY29udGV4dE1lbnUuZWxzZS5zZXRCcmVha3BvaW50RW5hYmxl
ZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9jb250ZXh0
TWVudSk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9tb3Vz
ZURvd24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5fZmlu
ZEJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlw
ZS5fc291cmNlSURGb3JMaW5lKToKKyAgICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3Bl
Y3Rvci5qczoKKwogMjAxMS0wMS0yNiAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxp
YS5jb20+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgTWFydGluIFJvYmluc29uLgpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwgYi9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbAppbmRleCA5Nzk3Mjc0Li40ZmVjNzk3IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbApAQCAtMjUwLDkgKzI1MCwxMCBAQCBtb2R1
bGUgY29yZSB7CiAgICAgICAgIFtkb21haW49RGVidWdnZXJdIHZvaWQgYWN0aXZhdGVCcmVha3Bv
aW50cygpOwogICAgICAgICBbZG9tYWluPURlYnVnZ2VyXSB2b2lkIGRlYWN0aXZhdGVCcmVha3Bv
aW50cygpOwogCi0gICAgICAgIFtkb21haW49RGVidWdnZXJdIHZvaWQgc2V0QWxsSmF2YVNjcmlw
dEJyZWFrcG9pbnRzKGluIE9iamVjdCBicmVha3BvaW50cyk7Ci0gICAgICAgIFtkb21haW49RGVi
dWdnZXJdIHZvaWQgc2V0QnJlYWtwb2ludChpbiBPYmplY3QgYnJlYWtwb2ludCwgb3V0IFN0cmlu
ZyBicmVha3BvaW50SWQsIG91dCBsb25nIGFjdHVhbExpbmVOdW1iZXIsIG91dCBsb25nIGFjdHVh
bENvbHVtbk51bWJlcik7Ci0gICAgICAgIFtkb21haW49RGVidWdnZXJdIHZvaWQgcmVtb3ZlQnJl
YWtwb2ludChpbiBTdHJpbmcgYnJlYWtwb2ludElkKTsKKyAgICAgICAgW2RvbWFpbj1EZWJ1Z2dl
cl0gdm9pZCBzZXRKYXZhU2NyaXB0QnJlYWtwb2ludChpbiBPYmplY3QgYnJlYWtwb2ludCwgb3V0
IFN0cmluZyBicmVha3BvaW50SWQsIG91dCBBcnJheSBsb2NhdGlvbnMpOworICAgICAgICBbZG9t
YWluPURlYnVnZ2VyXSB2b2lkIHJlbW92ZUphdmFTY3JpcHRCcmVha3BvaW50KGluIFN0cmluZyBi
cmVha3BvaW50SWQpOworICAgICAgICBbbm90aWZ5LCBkb21haW49RGVidWdnZXJdIHZvaWQgYnJl
YWtwb2ludFJlc29sdmVkKG91dCBTdHJpbmcgYnJlYWtwb2ludElkLCBvdXQgT2JqZWN0IGxvY2F0
aW9uKTsKKyAgICAgICAgW2RvbWFpbj1EZWJ1Z2dlcl0gdm9pZCBjb250aW51ZVRvTG9jYXRpb24o
aW4gU3RyaW5nIHNvdXJjZUlkLCBpbiBsb25nIGxpbmVOdW1iZXIsIGluIGxvbmcgY29sdW1uTnVt
YmVyKTsKIAogICAgICAgICBbZG9tYWluPUJyb3dzZXJEZWJ1Z2dlcl0gdm9pZCBzZXRBbGxCcm93
c2VyQnJlYWtwb2ludHMoaW4gT2JqZWN0IGJyZWFrcG9pbnRzKTsKICAgICAgICAgW2RvbWFpbj1C
cm93c2VyRGVidWdnZXJdIHZvaWQgc2V0RE9NQnJlYWtwb2ludChpbiBsb25nIG5vZGVJZCwgaW4g
bG9uZyB0eXBlKTsKQEAgLTI3OCw4ICsyNzksNiBAQCBtb2R1bGUgY29yZSB7CiAgICAgICAgIFtk
b21haW49RGVidWdnZXJdIHZvaWQgZXZhbHVhdGVPbkNhbGxGcmFtZShpbiBPYmplY3QgY2FsbEZy
YW1lSWQsIGluIFN0cmluZyBleHByZXNzaW9uLCBpbiBTdHJpbmcgb2JqZWN0R3JvdXAsIGluIGJv
b2xlYW4gaW5jbHVkZUNvbW1hbmRMaW5lQVBJLCBvdXQgVmFsdWUgcmVzdWx0KTsKICAgICAgICAg
W2RvbWFpbj1EZWJ1Z2dlcl0gdm9pZCBnZXRDb21wbGV0aW9uc09uQ2FsbEZyYW1lKGluIE9iamVj
dCBjYWxsRnJhbWVJZCwgaW4gU3RyaW5nIGV4cHJlc3Npb24sIGluIGJvb2xlYW4gaW5jbHVkZUNv
bW1hbmRMaW5lQVBJLCBvdXQgVmFsdWUgcmVzdWx0KTsKIAotICAgICAgICBbbm90aWZ5LCBkb21h
aW49RGVidWdnZXJdIHZvaWQgYnJlYWtwb2ludFJlc29sdmVkKG91dCBTdHJpbmcgYnJlYWtwb2lu
dElkLCBvdXQgT2JqZWN0IGJyZWFrcG9pbnQpOwotCiAjaWYgZGVmaW5lZChFTkFCTEVfV09SS0VS
UykgJiYgRU5BQkxFX1dPUktFUlMKICAgICAgICAgW25vdGlmeSwgZG9tYWluPURlYnVnZ2VyXSB2
b2lkIGRpZENyZWF0ZVdvcmtlcihvdXQgbG9uZyBpZCwgb3V0IFN0cmluZyB1cmwsIG91dCBib29s
ZWFuIGlzU2hhcmVkKTsKICAgICAgICAgW25vdGlmeSwgZG9tYWluPURlYnVnZ2VyXSB2b2lkIGRp
ZERlc3Ryb3lXb3JrZXIob3V0IGxvbmcgaWQpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JBZ2VudC5jcHAKaW5kZXggNzY0MDY2OC4uMjRhNjM4ZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwCkBAIC0yMTQsNyArMjE0LDcgQEAgdm9p
ZCBJbnNwZWN0b3JBZ2VudDo6cmVzdG9yZUluc3BlY3RvclN0YXRlRnJvbUNvb2tpZShjb25zdCBT
dHJpbmcmIGluc3BlY3RvclN0YXQKICAgICAgICAgc3RhcnRUaW1lbGluZVByb2ZpbGVyKCk7CiAK
ICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKLSAgICByZXN0b3JlRGVidWdnZXIoKTsK
KyAgICByZXN0b3JlRGVidWdnZXIoZmFsc2UpOwogICAgIHJlc3RvcmVQcm9maWxlcihQcm9maWxl
clJlc3RvcmVSZXNldEFnZW50KTsKICAgICBpZiAobV9zdGF0ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0
b3JTdGF0ZTo6dXNlckluaXRpYXRlZFByb2ZpbGluZykpCiAgICAgICAgIHN0YXJ0VXNlckluaXRp
YXRlZFByb2ZpbGluZygpOwpAQCAtNTM1LDcgKzUzNSw3IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6
OnBvcHVsYXRlU2NyaXB0T2JqZWN0cygpCiAgICAgICAgIG1fZnJvbnRlbmQtPmV2YWx1YXRlRm9y
VGVzdEluRnJvbnRlbmQoKCppdCkuZmlyc3QsICgqaXQpLnNlY29uZCk7CiAgICAgbV9wZW5kaW5n
RXZhbHVhdGVUZXN0Q29tbWFuZHMuY2xlYXIoKTsKIAotICAgIHJlc3RvcmVEZWJ1Z2dlcigpOwor
ICAgIHJlc3RvcmVEZWJ1Z2dlcih0cnVlKTsKICAgICByZXN0b3JlUHJvZmlsZXIoUHJvZmlsZXJS
ZXN0b3JlTm9BY3Rpb24pOwogfQogCkBAIC01NjIsMTIgKzU2MiwxMiBAQCB2b2lkIEluc3BlY3Rv
ckFnZW50OjpwdXNoRGF0YUNvbGxlY3RlZE9mZmxpbmUoKQogI2VuZGlmCiB9CiAKLXZvaWQgSW5z
cGVjdG9yQWdlbnQ6OnJlc3RvcmVEZWJ1Z2dlcigpCit2b2lkIEluc3BlY3RvckFnZW50OjpyZXN0
b3JlRGVidWdnZXIoYm9vbCBuZXdEZWJ1Z2dpbmdTZXNzaW9uKQogewogICAgIEFTU0VSVChtX2Zy
b250ZW5kKTsKICNpZiBFTkFCTEUoSkFWQVNDUklQVF9ERUJVR0dFUikKICAgICBpZiAobV9zdGF0
ZS0+Z2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6ZGVidWdnZXJFbmFibGVkKSkKLSAgICAgICAg
ZW5hYmxlRGVidWdnZXIoKTsKKyAgICAgICAgZW5hYmxlRGVidWdnZXIobmV3RGVidWdnaW5nU2Vz
c2lvbik7CiAjZW5kaWYKIH0KIApAQCAtMTAwNiwxNiArMTAwNiwyMSBAQCB2b2lkIEluc3BlY3Rv
ckFnZW50OjpzaG93QW5kRW5hYmxlRGVidWdnZXIoKQogICAgICAgICBtX3N0YXRlLT5zZXRCb29s
ZWFuKEluc3BlY3RvclN0YXRlOjpkZWJ1Z2dlckVuYWJsZWQsIHRydWUpOwogICAgICAgICBzaG93
UGFuZWwoU2NyaXB0c1BhbmVsKTsKICAgICB9IGVsc2UKLSAgICAgICAgZW5hYmxlRGVidWdnZXIo
KTsKKyAgICAgICAgZW5hYmxlRGVidWdnZXIodHJ1ZSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yQWdl
bnQ6OmVuYWJsZURlYnVnZ2VyKCkKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OmVuYWJsZURlYnVnZ2Vy
KGJvb2wgbmV3RGVidWdnaW5nU2Vzc2lvbikKIHsKICAgICBpZiAoZGVidWdnZXJFbmFibGVkKCkp
CiAgICAgICAgIHJldHVybjsKICAgICBtX3N0YXRlLT5zZXRCb29sZWFuKEluc3BlY3RvclN0YXRl
OjpkZWJ1Z2dlckVuYWJsZWQsIHRydWUpOwogICAgIEFTU0VSVChtX2luc3BlY3RlZFBhZ2UpOwog
CisgICAgaWYgKG5ld0RlYnVnZ2luZ1Nlc3Npb24pIHsKKyAgICAgICAgbV9zdGF0ZS0+c2V0T2Jq
ZWN0KEluc3BlY3RvclN0YXRlOjpqYXZhU2NyaXB0QnJlYWtwb2ludHMsIEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCkpOworICAgICAgICBtX3N0YXRlLT5zZXRPYmplY3QoSW5zcGVjdG9yU3RhdGU6
OmJyb3dzZXJCcmVha3BvaW50cywgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7CisgICAgfQor
CiAgICAgbV9kZWJ1Z2dlckFnZW50ID0gSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y3JlYXRlKHRo
aXMsIG1fZnJvbnRlbmQuZ2V0KCkpOwogICAgIG1fYnJvd3NlckRlYnVnZ2VyQWdlbnQgPSBJbnNw
ZWN0b3JCcm93c2VyRGVidWdnZXJBZ2VudDo6Y3JlYXRlKHRoaXMpOwogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuaCBiL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oCmluZGV4IDhjYzQ5YTYuLmE3YjE1YjYgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oCkBAIC0yNDEsNyArMjQxLDcg
QEAgcHVibGljOgogICAgIGJvb2wgcHJvZmlsZXJFbmFibGVkKCkgY29uc3Q7CiAKICAgICB2b2lk
IHNob3dBbmRFbmFibGVEZWJ1Z2dlcigpOwotICAgIHZvaWQgZW5hYmxlRGVidWdnZXIoKTsKKyAg
ICB2b2lkIGVuYWJsZURlYnVnZ2VyKGJvb2wgbmV3RGVidWdnaW5nU2Vzc2lvbiA9IGZhbHNlKTsK
ICAgICB2b2lkIGRpc2FibGVEZWJ1Z2dlcigpOwogICAgIGJvb2wgZGVidWdnZXJFbmFibGVkKCkg
Y29uc3QgeyByZXR1cm4gbV9kZWJ1Z2dlckFnZW50OyB9CiAgICAgdm9pZCByZXN1bWUoKTsKQEAg
LTI3MSw3ICsyNzEsNyBAQCBwdWJsaWM6CiAKIHByaXZhdGU6CiAgICAgdm9pZCBwdXNoRGF0YUNv
bGxlY3RlZE9mZmxpbmUoKTsKLSAgICB2b2lkIHJlc3RvcmVEZWJ1Z2dlcigpOworICAgIHZvaWQg
cmVzdG9yZURlYnVnZ2VyKGJvb2wgbmV3RGVidWdnaW5nU2Vzc2lvbik7CiAgICAgZW51bSBQcm9m
aWxlclJlc3RvcmVBY3Rpb24gewogICAgICAgICBQcm9maWxlclJlc3RvcmVOb0FjdGlvbiA9IDAs
CiAgICAgICAgIFByb2ZpbGVyUmVzdG9yZVJlc2V0QWdlbnQgPSAxCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKaW5kZXggM2M2Mjk4
MS4uNGVhZjQ1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0
b3JEZWJ1Z2dlckFnZW50LmNwcApAQCAtMzgsNiArMzgsNyBAQAogI2luY2x1ZGUgIkluc3BlY3Rv
clZhbHVlcy5oIgogI2luY2x1ZGUgIlBsYXRmb3JtU3RyaW5nLmgiCiAjaW5jbHVkZSAiU2NyaXB0
RGVidWdTZXJ2ZXIuaCIKKyNpbmNsdWRlIDx3dGYvdGV4dC9TdHJpbmdDb25jYXRlbmF0ZS5oPgog
CiBuYW1lc3BhY2UgV2ViQ29yZSB7CiAKQEAgLTU2LDcgKzU3LDYgQEAgSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudDo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudChJbnNwZWN0b3JBZ2VudCogaW5zcGVjdG9y
QWdlbnQsIEkKICAgICAsIG1fZnJvbnRlbmQoZnJvbnRlbmQpCiAgICAgLCBtX3BhdXNlZFNjcmlw
dFN0YXRlKDApCiAgICAgLCBtX2phdmFTY3JpcHRQYXVzZVNjaGVkdWxlZChmYWxzZSkKLSAgICAs
IG1fYnJlYWtwb2ludHNSZXN0b3JlZChmYWxzZSkKIHsKIH0KIApAQCAtNzYsMTExICs3NiwxMzgg
QEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkZWFjdGl2YXRlQnJlYWtwb2ludHMoKQog
ICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5kZWFjdGl2YXRlQnJlYWtwb2ludHMoKTsK
IH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRBbGxKYXZhU2NyaXB0QnJlYWtw
b2ludHMoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRzKQorc3RhdGljIGJv
b2wgaW5zcGVjdG9yT2JqZWN0VG9TY3JpcHRCcmVha3BvaW50KGNvbnN0IEluc3BlY3Rvck9iamVj
dCYgYnJlYWtwb2ludE9iamVjdCwgU2NyaXB0QnJlYWtwb2ludCogYnJlYWtwb2ludCkKIHsKLSAg
ICBtX2luc3BlY3RvckFnZW50LT5zdGF0ZSgpLT5zZXRPYmplY3QoSW5zcGVjdG9yU3RhdGU6Omph
dmFTY3JpcHRCcmVha3BvaW50cywgYnJlYWtwb2ludHMpOwotICAgIGlmICghbV9icmVha3BvaW50
c1Jlc3RvcmVkKSB7Ci0gICAgICAgIHJlc3RvcmVCcmVha3BvaW50cyhtX2luc3BlY3RvckFnZW50
LT5pbnNwZWN0ZWRVUkxXaXRob3V0RnJhZ21lbnQoKSk7Ci0gICAgICAgIG1fYnJlYWtwb2ludHNS
ZXN0b3JlZCA9IHRydWU7Ci0gICAgfQorICAgIGJyZWFrcG9pbnRPYmplY3QuZ2V0U3RyaW5nKCJ1
cmwiLCAmYnJlYWtwb2ludC0+dXJsKTsKKyAgICBicmVha3BvaW50T2JqZWN0LmdldFN0cmluZygi
c291cmNlSUQiLCAmYnJlYWtwb2ludC0+c291cmNlSUQpOworICAgIGlmIChicmVha3BvaW50LT51
cmwuaXNFbXB0eSgpICYmIGJyZWFrcG9pbnQtPnNvdXJjZUlELmlzRW1wdHkoKSkKKyAgICAgICAg
cmV0dXJuIGZhbHNlOworICAgIGlmICghYnJlYWtwb2ludE9iamVjdC5nZXROdW1iZXIoImxpbmVO
dW1iZXIiLCAmYnJlYWtwb2ludC0+bGluZU51bWJlcikpCisgICAgICAgIHJldHVybiBmYWxzZTsK
KyAgICBpZiAoIWJyZWFrcG9pbnRPYmplY3QuZ2V0TnVtYmVyKCJjb2x1bW5OdW1iZXIiLCAmYnJl
YWtwb2ludC0+Y29sdW1uTnVtYmVyKSkKKyAgICAgICAgYnJlYWtwb2ludC0+Y29sdW1uTnVtYmVy
ID0gMTsKKyAgICBpZiAoIWJyZWFrcG9pbnRPYmplY3QuZ2V0U3RyaW5nKCJjb25kaXRpb24iLCAm
YnJlYWtwb2ludC0+Y29uZGl0aW9uKSkKKyAgICAgICAgYnJlYWtwb2ludC0+Y29uZGl0aW9uID0g
IiI7CisgICAgaWYgKCFicmVha3BvaW50T2JqZWN0LmdldEJvb2xlYW4oImVuYWJsZWQiLCAmYnJl
YWtwb2ludC0+ZW5hYmxlZCkpCisgICAgICAgIGJyZWFrcG9pbnQtPmVuYWJsZWQgPSB0cnVlOwor
ICAgIHJldHVybiB0cnVlOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Omluc3Bl
Y3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiB1cmwpCitzdGF0aWMgU3RyaW5nIGNyZWF0ZVNj
cmlwdEJyZWFrcG9pbnRJZChjb25zdCBTY3JpcHRCcmVha3BvaW50JiBicmVha3BvaW50KQogewot
ICAgIG1fc2NyaXB0SURUb0NvbnRlbnQuY2xlYXIoKTsKLSAgICBtX3VybFRvU291cmNlSURzLmNs
ZWFyKCk7Ci0gICAgcmVzdG9yZUJyZWFrcG9pbnRzKHVybCk7CisgICAgY29uc3QgU3RyaW5nJiBz
Y3JpcHROYW1lID0gIWJyZWFrcG9pbnQudXJsLmlzRW1wdHkoKSA/IGJyZWFrcG9pbnQudXJsIDog
YnJlYWtwb2ludC5zb3VyY2VJRDsKKyAgICByZXR1cm4gbWFrZVN0cmluZyhzY3JpcHROYW1lLCAi
OiIsIFN0cmluZzo6bnVtYmVyKGJyZWFrcG9pbnQubGluZU51bWJlciksICI6IiwgU3RyaW5nOjpu
dW1iZXIoYnJlYWtwb2ludC5jb2x1bW5OdW1iZXIpKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpyZXN0b3JlQnJlYWtwb2ludHMoY29uc3QgU3RyaW5nJiBpbnNwZWN0ZWRVUkwp
Cit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Omluc3BlY3RlZFVSTENoYW5nZWQoY29uc3Qg
U3RyaW5nJikKIHsKLSAgICBtX3N0aWNreUJyZWFrcG9pbnRzLmNsZWFyKCk7CisgICAgbV9zY3Jp
cHRzLmNsZWFyKCk7CisgICAgbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElk
cy5jbGVhcigpOworfQogCi0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYWxsQnJlYWtwb2lu
dHMgPSBtX2luc3BlY3RvckFnZW50LT5zdGF0ZSgpLT5nZXRPYmplY3QoSW5zcGVjdG9yU3RhdGU6
OmphdmFTY3JpcHRCcmVha3BvaW50cyk7Ci0gICAgUmVmUHRyPEluc3BlY3RvckFycmF5PiBicmVh
a3BvaW50cyA9IGFsbEJyZWFrcG9pbnRzLT5nZXRBcnJheShpbnNwZWN0ZWRVUkwpOwotICAgIGlm
ICghYnJlYWtwb2ludHMpCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEphdmFTY3Jp
cHRCcmVha3BvaW50KFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50LCBTdHJp
bmcqIGJyZWFrcG9pbnRJZCwgUmVmUHRyPEluc3BlY3RvckFycmF5PiogbG9jYXRpb25zKQorewor
ICAgIFNjcmlwdEJyZWFrcG9pbnQgc2NyaXB0QnJlYWtwb2ludDsKKyAgICBpZiAoIWluc3BlY3Rv
ck9iamVjdFRvU2NyaXB0QnJlYWtwb2ludCgqYnJlYWtwb2ludCwgJnNjcmlwdEJyZWFrcG9pbnQp
KQogICAgICAgICByZXR1cm47Ci0gICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGJyZWFrcG9p
bnRzLT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJy
ZWFrcG9pbnQgPSBicmVha3BvaW50cy0+Z2V0KGkpLT5hc09iamVjdCgpOwotICAgICAgICBpZiAo
IWJyZWFrcG9pbnQpCi0gICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgU3RyaW5nIHVybDsK
LSAgICAgICAgaWYgKCFicmVha3BvaW50LT5nZXRTdHJpbmcoInVybCIsICZ1cmwpKQotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIGRvdWJsZSBsaW5lTnVtYmVyOwotICAgICAgICBpZiAo
IWJyZWFrcG9pbnQtPmdldE51bWJlcigibGluZU51bWJlciIsICZsaW5lTnVtYmVyKSkKLSAgICAg
ICAgICAgIGNvbnRpbnVlOwotICAgICAgICBkb3VibGUgY29sdW1uTnVtYmVyOwotICAgICAgICBp
ZiAoIWJyZWFrcG9pbnQtPmdldE51bWJlcigiY29sdW1uTnVtYmVyIiwgJmNvbHVtbk51bWJlcikp
CisgICAgaWYgKHNjcmlwdEJyZWFrcG9pbnQudXJsLmlzRW1wdHkoKSkgeworICAgICAgICBTY3Jp
cHRzTWFwOjppdGVyYXRvciBpdCA9IG1fc2NyaXB0cy5maW5kKHNjcmlwdEJyZWFrcG9pbnQuc291
cmNlSUQpOworICAgICAgICBpZiAoaXQgIT0gbV9zY3JpcHRzLmVuZCgpKSB7CisgICAgICAgICAg
ICBzY3JpcHRCcmVha3BvaW50LnVybCA9IGl0LT5zZWNvbmQudXJsOworICAgICAgICAgICAgYnJl
YWtwb2ludC0+c2V0U3RyaW5nKCJ1cmwiLCBpdC0+c2Vjb25kLnVybCk7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICAqYnJlYWtwb2ludElkID0gY3JlYXRlU2NyaXB0QnJlYWtwb2ludElkKHNjcmlw
dEJyZWFrcG9pbnQpOworICAgIGlmICghc2NyaXB0QnJlYWtwb2ludC51cmwuaXNFbXB0eSgpKSB7
CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnRzQ29va2llID0gbV9p
bnNwZWN0b3JBZ2VudC0+c3RhdGUoKS0+Z2V0T2JqZWN0KEluc3BlY3RvclN0YXRlOjpqYXZhU2Ny
aXB0QnJlYWtwb2ludHMpOworICAgICAgICBpZiAoYnJlYWtwb2ludHNDb29raWUtPmZpbmQoKmJy
ZWFrcG9pbnRJZCkgIT0gYnJlYWtwb2ludHNDb29raWUtPmVuZCgpKSB7CisgICAgICAgICAgICAq
YnJlYWtwb2ludElkID0gIiI7CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIFN0cmluZyBj
b25kaXRpb247Ci0gICAgICAgIGlmICghYnJlYWtwb2ludC0+Z2V0U3RyaW5nKCJjb25kaXRpb24i
LCAmY29uZGl0aW9uKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBib29sIGVuYWJs
ZWQ7Ci0gICAgICAgIGlmICghYnJlYWtwb2ludC0+Z2V0Qm9vbGVhbigiZW5hYmxlZCIsICZlbmFi
bGVkKSkKLSAgICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBTY3JpcHRCcmVha3BvaW50IHNj
cmlwdEJyZWFrcG9pbnQoKGxvbmcpIGxpbmVOdW1iZXIsIChsb25nKSBjb2x1bW5OdW1iZXIsIGNv
bmRpdGlvbiwgZW5hYmxlZCk7Ci0gICAgICAgIHNldFN0aWNreUJyZWFrcG9pbnQodXJsLCBzY3Jp
cHRCcmVha3BvaW50KTsKKyAgICAgICAgfQorICAgICAgICBicmVha3BvaW50c0Nvb2tpZS0+c2V0
T2JqZWN0KCpicmVha3BvaW50SWQsIGJyZWFrcG9pbnQpOworICAgICAgICBtX2luc3BlY3RvckFn
ZW50LT5zdGF0ZSgpLT5zZXRPYmplY3QoSW5zcGVjdG9yU3RhdGU6OmphdmFTY3JpcHRCcmVha3Bv
aW50cywgYnJlYWtwb2ludHNDb29raWUpOwogICAgIH0KKworICAgIHJlc29sdmVCcmVha3BvaW50
KCpicmVha3BvaW50SWQsIHNjcmlwdEJyZWFrcG9pbnQsIGxvY2F0aW9ucy0+Z2V0KCkpOwogfQog
Ci12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldFN0aWNreUJyZWFrcG9pbnQoY29uc3Qg
U3RyaW5nJiB1cmwsIGNvbnN0IFNjcmlwdEJyZWFrcG9pbnQmIGJyZWFrcG9pbnQpCit2b2lkIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlbW92ZUphdmFTY3JpcHRCcmVha3BvaW50KGNvbnN0IFN0
cmluZyYgYnJlYWtwb2ludElkKQogewotICAgIEluc3BlY3RlZFVSTFRvQnJlYWtwb2ludHNNYXA6
Oml0ZXJhdG9yIGl0ID0gbV9zdGlja3lCcmVha3BvaW50cy5maW5kKHVybCk7Ci0gICAgaWYgKGl0
ID09IG1fc3RpY2t5QnJlYWtwb2ludHMuZW5kKCkpCi0gICAgICAgIGl0ID0gbV9zdGlja3lCcmVh
a3BvaW50cy5zZXQodXJsLCBMb2NhdGlvblRvQnJlYWtwb2ludE1hcCgpKS5maXJzdDsKLSAgICBp
dC0+c2Vjb25kLnNldChMb2NhdGlvbihicmVha3BvaW50LmxpbmVOdW1iZXIsIGJyZWFrcG9pbnQu
Y29sdW1uTnVtYmVyKSwgYnJlYWtwb2ludCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4g
YnJlYWtwb2ludHNDb29raWUgPSBtX2luc3BlY3RvckFnZW50LT5zdGF0ZSgpLT5nZXRPYmplY3Qo
SW5zcGVjdG9yU3RhdGU6OmphdmFTY3JpcHRCcmVha3BvaW50cyk7CisgICAgYnJlYWtwb2ludHND
b29raWUtPnJlbW92ZShicmVha3BvaW50SWQpOworICAgIG1faW5zcGVjdG9yQWdlbnQtPnN0YXRl
KCktPnNldE9iamVjdChJbnNwZWN0b3JTdGF0ZTo6amF2YVNjcmlwdEJyZWFrcG9pbnRzLCBicmVh
a3BvaW50c0Nvb2tpZSk7CiAKLSAgICBVUkxUb1NvdXJjZUlEc01hcDo6aXRlcmF0b3IgdXJsVG9T
b3VyY2VJRHNJdGVyYXRvciA9IG1fdXJsVG9Tb3VyY2VJRHMuZmluZCh1cmwpOwotICAgIGlmICh1
cmxUb1NvdXJjZUlEc0l0ZXJhdG9yID09IG1fdXJsVG9Tb3VyY2VJRHMuZW5kKCkpCisgICAgQnJl
YWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNNYXA6Oml0ZXJhdG9yIGRlYnVnU2Vy
dmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yID0gbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJl
YWtwb2ludElkcy5maW5kKGJyZWFrcG9pbnRJZCk7CisgICAgaWYgKGRlYnVnU2VydmVyQnJlYWtw
b2ludElkc0l0ZXJhdG9yID09IG1fYnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJ
ZHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgc291
cmNlSURzID0gdXJsVG9Tb3VyY2VJRHNJdGVyYXRvci0+c2Vjb25kOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc291cmNlSURzLnNpemUoKTsgKytpKQotICAgICAgICByZXN0b3JlQnJlYWtw
b2ludChzb3VyY2VJRHNbaV0sIGJyZWFrcG9pbnQpOworICAgIGZvciAoc2l6ZV90IGkgPSAwOyBp
IDwgZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3ItPnNlY29uZC5zaXplKCk7ICsraSkK
KyAgICAgICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnJlbW92ZUJyZWFrcG9pbnQoZGVi
dWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3ItPnNlY29uZFtpXSk7CisgICAgbV9icmVha3Bv
aW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5yZW1vdmUoZGVidWdTZXJ2ZXJCcmVha3Bv
aW50SWRzSXRlcmF0b3IpOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEJy
ZWFrcG9pbnQoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnQsIFN0cmluZyog
YnJlYWtwb2ludElkLCBsb25nKiBhY3R1YWxMaW5lTnVtYmVyLCBsb25nKiBhY3R1YWxDb2x1bW5O
dW1iZXIpCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNvbnRpbnVlVG9Mb2NhdGlvbihj
b25zdCBTdHJpbmcmIHNvdXJjZUlELCBsb25nIGxpbmVOdW1iZXIsIGxvbmcgY29sdW1uTnVtYmVy
KQogewotICAgIFN0cmluZyBzb3VyY2VJRDsKLSAgICBpZiAoIWJyZWFrcG9pbnQtPmdldFN0cmlu
Zygic291cmNlSUQiLCAmc291cmNlSUQpKQotICAgICAgICByZXR1cm47Ci0gICAgZG91YmxlIGxp
bmVOdW1iZXI7Ci0gICAgaWYgKCFicmVha3BvaW50LT5nZXROdW1iZXIoImxpbmVOdW1iZXIiLCAm
bGluZU51bWJlcikpCi0gICAgICAgIHJldHVybjsKLSAgICBkb3VibGUgY29sdW1uTnVtYmVyOwot
ICAgIGlmICghYnJlYWtwb2ludC0+Z2V0TnVtYmVyKCJjb2x1bW5OdW1iZXIiLCAmY29sdW1uTnVt
YmVyKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFN0cmluZyBjb25kaXRpb247Ci0gICAgaWYgKCFi
cmVha3BvaW50LT5nZXRTdHJpbmcoImNvbmRpdGlvbiIsICZjb25kaXRpb24pKQotICAgICAgICBy
ZXR1cm47Ci0gICAgYm9vbCBlbmFibGVkOwotICAgIGlmICghYnJlYWtwb2ludC0+Z2V0Qm9vbGVh
bigiZW5hYmxlZCIsICZlbmFibGVkKSkKLSAgICAgICAgcmV0dXJuOwotICAgIFNjcmlwdEJyZWFr
cG9pbnQgc2NyaXB0QnJlYWtwb2ludCgobG9uZykgbGluZU51bWJlciwgKGxvbmcpIGNvbHVtbk51
bWJlciwgY29uZGl0aW9uLCBlbmFibGVkKTsKLSAgICAqYnJlYWtwb2ludElkID0gU2NyaXB0RGVi
dWdTZXJ2ZXI6OnNoYXJlZCgpLnNldEJyZWFrcG9pbnQoc291cmNlSUQsIHNjcmlwdEJyZWFrcG9p
bnQsIGFjdHVhbExpbmVOdW1iZXIsIGFjdHVhbENvbHVtbk51bWJlcik7CisgICAgaWYgKCFtX2Nv
bnRpbnVlVG9Qb3NpdGlvbkJyZWFrcG9pbnRJZC5pc0VtcHR5KCkpCisgICAgICAgIFNjcmlwdERl
YnVnU2VydmVyOjpzaGFyZWQoKS5yZW1vdmVCcmVha3BvaW50KG1fY29udGludWVUb1Bvc2l0aW9u
QnJlYWtwb2ludElkKTsKKyAgICBTY3JpcHRCcmVha3BvaW50IHNjcmlwdEJyZWFrcG9pbnQ7Cisg
ICAgc2NyaXB0QnJlYWtwb2ludC5saW5lTnVtYmVyID0gbGluZU51bWJlcjsKKyAgICBzY3JpcHRC
cmVha3BvaW50LmNvbHVtbk51bWJlciA9IGNvbHVtbk51bWJlcjsKKyAgICBzY3JpcHRCcmVha3Bv
aW50LmVuYWJsZWQgPSB0cnVlOworICAgIG1fY29udGludWVUb1Bvc2l0aW9uQnJlYWtwb2ludElk
ID0gU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnNldEJyZWFrcG9pbnQoc291cmNlSUQsIHNj
cmlwdEJyZWFrcG9pbnQsICZsaW5lTnVtYmVyLCAmY29sdW1uTnVtYmVyKTsKKyAgICByZXN1bWUo
KTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZW1vdmVCcmVha3BvaW50KGNv
bnN0IFN0cmluZyYgYnJlYWtwb2ludElkKQordm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50Ojpy
ZXNvbHZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZCwgY29uc3QgU2NyaXB0
QnJlYWtwb2ludCYgYnJlYWtwb2ludCwgSW5zcGVjdG9yQXJyYXkqIGxvY2F0aW9ucykKIHsKLSAg
ICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkucmVtb3ZlQnJlYWtwb2ludChicmVha3BvaW50
SWQpOworICAgIGlmICghYnJlYWtwb2ludC51cmwuaXNFbXB0eSgpKSB7CisgICAgICAgIGZvciAo
U2NyaXB0c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NjcmlwdHMuYmVnaW4oKTsgaXQgIT0gbV9zY3Jp
cHRzLmVuZCgpOyArK2l0KSB7CisgICAgICAgICAgICBpZiAoaXQtPnNlY29uZC51cmwgIT0gYnJl
YWtwb2ludC51cmwpCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0PiBsb2NhdGlvbiA9IEluc3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7
CisgICAgICAgICAgICBpZiAocmVzb2x2ZUJyZWFrcG9pbnRJblNjcmlwdChicmVha3BvaW50SWQs
IGJyZWFrcG9pbnQsIGl0LT5maXJzdCwgbG9jYXRpb24uZ2V0KCkpKQorICAgICAgICAgICAgICAg
IGxvY2F0aW9ucy0+cHVzaE9iamVjdChsb2NhdGlvbik7CisgICAgICAgIH0KKyAgICB9IGVsc2Ug
eworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb2NhdGlvbiA9IEluc3BlY3Rvck9i
amVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGlmIChyZXNvbHZlQnJlYWtwb2ludEluU2NyaXB0KGJy
ZWFrcG9pbnRJZCwgYnJlYWtwb2ludCwgYnJlYWtwb2ludC5zb3VyY2VJRCwgbG9jYXRpb24uZ2V0
KCkpKQorICAgICAgICAgICAgbG9jYXRpb25zLT5wdXNoT2JqZWN0KGxvY2F0aW9uKTsKKyAgICB9
CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVzdG9yZUJyZWFrcG9pbnQoY29u
c3QgU3RyaW5nJiBzb3VyY2VJRCwgY29uc3QgU2NyaXB0QnJlYWtwb2ludCYgYnJlYWtwb2ludCkK
K2Jvb2wgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVzb2x2ZUJyZWFrcG9pbnRJblNjcmlwdChj
b25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZCwgY29uc3QgU2NyaXB0QnJlYWtwb2ludCYgYnJlYWtw
b2ludCwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgSW5zcGVjdG9yT2JqZWN0KiBsb2NhdGlvbikK
IHsKLSAgICBsb25nIGFjdHVhbExpbmVOdW1iZXIgPSAwLCBhY3R1YWxDb2x1bW5OdW1iZXIgPSAw
OwotICAgIFN0cmluZyBicmVha3BvaW50SWQgPSBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCku
c2V0QnJlYWtwb2ludChzb3VyY2VJRCwgYnJlYWtwb2ludCwgJmFjdHVhbExpbmVOdW1iZXIsICZh
Y3R1YWxDb2x1bW5OdW1iZXIpOwotICAgIGlmIChicmVha3BvaW50SWQuaXNFbXB0eSgpKQotICAg
ICAgICByZXR1cm47Ci0gICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludERhdGEg
PSBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOwotICAgIGJyZWFrcG9pbnREYXRhLT5zZXRTdHJp
bmcoImlkIiwgYnJlYWtwb2ludElkKTsKLSAgICBicmVha3BvaW50RGF0YS0+c2V0U3RyaW5nKCJz
b3VyY2VJRCIsIHNvdXJjZUlEKTsKLSAgICBicmVha3BvaW50RGF0YS0+c2V0TnVtYmVyKCJsaW5l
TnVtYmVyIiwgYWN0dWFsTGluZU51bWJlcik7Ci0gICAgYnJlYWtwb2ludERhdGEtPnNldE51bWJl
cigiY29sdW1uTnVtYmVyIiwgYWN0dWFsQ29sdW1uTnVtYmVyKTsKLSAgICBicmVha3BvaW50RGF0
YS0+c2V0U3RyaW5nKCJjb25kaXRpb24iLCBicmVha3BvaW50LmNvbmRpdGlvbik7Ci0gICAgYnJl
YWtwb2ludERhdGEtPnNldEJvb2xlYW4oImVuYWJsZWQiLCBicmVha3BvaW50LmVuYWJsZWQpOwot
ICAgIGJyZWFrcG9pbnREYXRhLT5zZXROdW1iZXIoIm9yaWdpbmFsTGluZU51bWJlciIsIGJyZWFr
cG9pbnQubGluZU51bWJlcik7Ci0gICAgYnJlYWtwb2ludERhdGEtPnNldE51bWJlcigib3JpZ2lu
YWxDb2x1bW5OdW1iZXIiLCBicmVha3BvaW50LmNvbHVtbk51bWJlcik7Ci0gICAgbV9mcm9udGVu
ZC0+YnJlYWtwb2ludFJlc29sdmVkKGJyZWFrcG9pbnRJZCwgYnJlYWtwb2ludERhdGEpOworICAg
IFNjcmlwdHNNYXA6Oml0ZXJhdG9yIHNjcmlwdEl0ZXJhdG9yID0gbV9zY3JpcHRzLmZpbmQoc291
cmNlSUQpOworICAgIGlmIChzY3JpcHRJdGVyYXRvciA9PSBtX3NjcmlwdHMuZW5kKCkpCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKyAgICBTY3JpcHQmIHNjcmlwdCA9IHNjcmlwdEl0ZXJhdG9yLT5z
ZWNvbmQ7CisgICAgaWYgKGJyZWFrcG9pbnQubGluZU51bWJlciA8IHNjcmlwdC5saW5lT2Zmc2V0
ICsgMSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghc2NyaXB0LmxpbmVzQ291bnQp
IHsKKyAgICAgICAgc2NyaXB0LmxpbmVzQ291bnQgPSAxOworICAgICAgICBmb3IgKHNpemVfdCBp
ID0gMDsgaSA8IHNjcmlwdC5kYXRhLmxlbmd0aCgpOyArK2kpIHsKKyAgICAgICAgICAgIGlmIChz
Y3JpcHQuZGF0YVtpXSA9PSAnXG4nKQorICAgICAgICAgICAgICAgIHNjcmlwdC5saW5lc0NvdW50
ICs9IDE7CisgICAgICAgIH0KKyAgICB9CisgICAgaWYgKGJyZWFrcG9pbnQubGluZU51bWJlciA+
PSBzY3JpcHQubGluZU9mZnNldCArIDEgKyBzY3JpcHQubGluZXNDb3VudCkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgbG9uZyBsaW5lTnVtYmVyID0gMCwgY29sdW1uTnVtYmVyID0gMDsK
KyAgICBTdHJpbmcgZGVidWdTZXJ2ZXJCcmVha3BvaW50SWQgPSBTY3JpcHREZWJ1Z1NlcnZlcjo6
c2hhcmVkKCkuc2V0QnJlYWtwb2ludChzb3VyY2VJRCwgYnJlYWtwb2ludCwgJmxpbmVOdW1iZXIs
ICZjb2x1bW5OdW1iZXIpOworICAgIGlmIChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZC5pc0VtcHR5
KCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIEJyZWFrcG9pbnRJZFRvRGVidWdTZXJ2
ZXJCcmVha3BvaW50SWRzTWFwOjppdGVyYXRvciBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVy
YXRvciA9IG1fYnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMuZmluZChicmVh
a3BvaW50SWQpOworICAgIGlmIChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvciA9PSBt
X2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzLmVuZCgpKQorICAgICAgICBk
ZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvciA9IG1fYnJlYWtwb2ludElkVG9EZWJ1Z1Nl
cnZlckJyZWFrcG9pbnRJZHMuc2V0KGJyZWFrcG9pbnRJZCwgVmVjdG9yPFN0cmluZz4oKSkuZmly
c3Q7CisgICAgZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3ItPnNlY29uZC5hcHBlbmQo
ZGVidWdTZXJ2ZXJCcmVha3BvaW50SWQpOworCisgICAgbG9jYXRpb24tPnNldFN0cmluZygic291
cmNlSUQiLCBzb3VyY2VJRCk7CisgICAgbG9jYXRpb24tPnNldE51bWJlcigibGluZU51bWJlciIs
IGxpbmVOdW1iZXIpOworICAgIGxvY2F0aW9uLT5zZXROdW1iZXIoImNvbHVtbk51bWJlciIsIGNv
bHVtbk51bWJlcik7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjplZGl0U2NyaXB0U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNvbnN0
IFN0cmluZyYgbmV3Q29udGVudCwgYm9vbCogc3VjY2VzcywgU3RyaW5nKiByZXN1bHQsIFJlZlB0
cjxJbnNwZWN0b3JWYWx1ZT4qIG5ld0NhbGxGcmFtZXMpCkBAIC0xOTEsNyArMjE4LDcgQEAgdm9p
ZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjplZGl0U2NyaXB0U291cmNlKGNvbnN0IFN0cmluZyYg
c291cmNlSUQsIGNvbnN0IFN0cmkKIAogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpnZXRT
Y3JpcHRTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgU3RyaW5nKiBzY3JpcHRTb3VyY2Up
CiB7Ci0gICAgKnNjcmlwdFNvdXJjZSA9IG1fc2NyaXB0SURUb0NvbnRlbnQuZ2V0KHNvdXJjZUlE
KTsKKyAgICAqc2NyaXB0U291cmNlID0gbV9zY3JpcHRzLmdldChzb3VyY2VJRCkuZGF0YTsKIH0K
IAogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzY2hlZHVsZVBhdXNlT25OZXh0U3RhdGVt
ZW50KERlYnVnZ2VyRXZlbnRUeXBlIHR5cGUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IGRh
dGEpCkBAIC0yNzcsMjMgKzMwNCwyNSBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRp
ZFBhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNvbnN0IFN0cmluZwogICAgIC8v
IERvbid0IHNlbmQgc2NyaXB0IGNvbnRlbnQgdG8gdGhlIGZyb250IGVuZCB1bnRpbCBpdCdzIHJl
YWxseSBuZWVkZWQuCiAgICAgbV9mcm9udGVuZC0+cGFyc2VkU2NyaXB0U291cmNlKHNvdXJjZUlE
LCB1cmwsIGxpbmVPZmZzZXQsIGNvbHVtbk9mZnNldCwgZGF0YS5sZW5ndGgoKSwgd29ybGRUeXBl
KTsKIAotICAgIG1fc2NyaXB0SURUb0NvbnRlbnQuc2V0KHNvdXJjZUlELCBkYXRhKTsKKyAgICBt
X3NjcmlwdHMuc2V0KHNvdXJjZUlELCBTY3JpcHQodXJsLCBkYXRhLCBsaW5lT2Zmc2V0LCBjb2x1
bW5PZmZzZXQpKTsKIAogICAgIGlmICh1cmwuaXNFbXB0eSgpKQogICAgICAgICByZXR1cm47CiAK
LSAgICBVUkxUb1NvdXJjZUlEc01hcDo6aXRlcmF0b3IgdXJsVG9Tb3VyY2VJRHNJdGVyYXRvciA9
IG1fdXJsVG9Tb3VyY2VJRHMuZmluZCh1cmwpOwotICAgIGlmICh1cmxUb1NvdXJjZUlEc0l0ZXJh
dG9yID09IG1fdXJsVG9Tb3VyY2VJRHMuZW5kKCkpCi0gICAgICAgIHVybFRvU291cmNlSURzSXRl
cmF0b3IgPSBtX3VybFRvU291cmNlSURzLnNldCh1cmwsIFZlY3RvcjxTdHJpbmc+KCkpLmZpcnN0
OwotICAgIHVybFRvU291cmNlSURzSXRlcmF0b3ItPnNlY29uZC5hcHBlbmQoc291cmNlSUQpOwot
Ci0gICAgSW5zcGVjdGVkVVJMVG9CcmVha3BvaW50c01hcDo6aXRlcmF0b3Igc3RpY2t5QnJlYWtw
b2ludHNJdGVyYXRvciA9IG1fc3RpY2t5QnJlYWtwb2ludHMuZmluZCh1cmwpOwotICAgIGlmIChz
dGlja3lCcmVha3BvaW50c0l0ZXJhdG9yID09IG1fc3RpY2t5QnJlYWtwb2ludHMuZW5kKCkpCi0g
ICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IExvY2F0aW9uVG9CcmVha3BvaW50TWFwJiBicmVh
a3BvaW50cyA9IHN0aWNreUJyZWFrcG9pbnRzSXRlcmF0b3ItPnNlY29uZDsKLSAgICBmb3IgKExv
Y2F0aW9uVG9CcmVha3BvaW50TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGJyZWFrcG9pbnRzLmJl
Z2luKCk7IGl0ICE9IGJyZWFrcG9pbnRzLmVuZCgpOyArK2l0KQotICAgICAgICByZXN0b3JlQnJl
YWtwb2ludChzb3VyY2VJRCwgaXQtPnNlY29uZCk7CisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gYnJlYWtwb2ludHNDb29raWUgPSBtX2luc3BlY3RvckFnZW50LT5zdGF0ZSgpLT5nZXRPYmpl
Y3QoSW5zcGVjdG9yU3RhdGU6OmphdmFTY3JpcHRCcmVha3BvaW50cyk7CisgICAgZm9yIChJbnNw
ZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGl0ID0gYnJlYWtwb2ludHNDb29raWUtPmJlZ2luKCk7IGl0
ICE9IGJyZWFrcG9pbnRzQ29va2llLT5lbmQoKTsgKytpdCkgeworICAgICAgICBSZWZQdHI8SW5z
cGVjdG9yT2JqZWN0PiBicmVha3BvaW50ID0gaXQtPnNlY29uZC0+YXNPYmplY3QoKTsKKyAgICAg
ICAgaWYgKCFicmVha3BvaW50KQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIFNjcmlw
dEJyZWFrcG9pbnQgc2NyaXB0QnJlYWtwb2ludDsKKyAgICAgICAgaWYgKCFpbnNwZWN0b3JPYmpl
Y3RUb1NjcmlwdEJyZWFrcG9pbnQoKmJyZWFrcG9pbnQsICZzY3JpcHRCcmVha3BvaW50KSkKKyAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICBpZiAoc2NyaXB0QnJlYWtwb2ludC51cmwgIT0g
dXJsKQorICAgICAgICAgICAgY29udGludWU7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGxvY2F0aW9uID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgaWYgKHJl
c29sdmVCcmVha3BvaW50SW5TY3JpcHQoaXQtPmZpcnN0LCBzY3JpcHRCcmVha3BvaW50LCBzb3Vy
Y2VJRCwgbG9jYXRpb24uZ2V0KCkpKQorICAgICAgICAgICAgbV9mcm9udGVuZC0+YnJlYWtwb2lu
dFJlc29sdmVkKGl0LT5maXJzdCwgbG9jYXRpb24pOworICAgIH0KIH0KIAogdm9pZCBJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjpmYWlsZWRUb1BhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgdXJsLCBj
b25zdCBTdHJpbmcmIGRhdGEsIGludCBmaXJzdExpbmUsIGludCBlcnJvckxpbmUsIGNvbnN0IFN0
cmluZyYgZXJyb3JNZXNzYWdlKQpAQCAtMzEyLDYgKzM0MSw5IEBAIHZvaWQgSW5zcGVjdG9yRGVi
dWdnZXJBZ2VudDo6ZGlkUGF1c2UoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlKQogCiAgICAgbV9m
cm9udGVuZC0+cGF1c2VkU2NyaXB0KG1fYnJlYWtQcm9ncmFtRGV0YWlscyk7CiAgICAgbV9qYXZh
U2NyaXB0UGF1c2VTY2hlZHVsZWQgPSBmYWxzZTsKKworICAgIGlmICghbV9jb250aW51ZVRvUG9z
aXRpb25CcmVha3BvaW50SWQuaXNFbXB0eSgpKQorICAgICAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6
c2hhcmVkKCkucmVtb3ZlQnJlYWtwb2ludChtX2NvbnRpbnVlVG9Qb3NpdGlvbkJyZWFrcG9pbnRJ
ZCk7CiB9CiAKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkQ29udGludWUoKQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQu
aCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKaW5k
ZXggZjBkZTk3My4uMGVkYWEyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oCkBAIC02MCwxNSArNjAsMTYgQEAgcHVibGljOgogICAg
IHN0YXRpYyBQYXNzT3duUHRyPEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ+IGNyZWF0ZShJbnNwZWN0
b3JBZ2VudCosIEluc3BlY3RvckZyb250ZW5kKik7CiAgICAgdmlydHVhbCB+SW5zcGVjdG9yRGVi
dWdnZXJBZ2VudCgpOwogCi0gICAgdm9pZCBzZXRBbGxKYXZhU2NyaXB0QnJlYWtwb2ludHMoUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KTsKKyAgICBzdGF0aWMgYm9vbCBpc0RlYnVnZ2VyQWx3
YXlzRW5hYmxlZCgpOworCiAgICAgdm9pZCBpbnNwZWN0ZWRVUkxDaGFuZ2VkKGNvbnN0IFN0cmlu
ZyYgdXJsKTsKIAogICAgIC8vIFBhcnQgb2YgdGhlIHByb3RvY29sLgogICAgIHZvaWQgYWN0aXZh
dGVCcmVha3BvaW50cygpOwogICAgIHZvaWQgZGVhY3RpdmF0ZUJyZWFrcG9pbnRzKCk7Ci0gICAg
dm9pZCBzZXRTdGlja3lCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBXZWJDb3Jl
OjpTY3JpcHRCcmVha3BvaW50Jik7Ci0gICAgdm9pZCBzZXRCcmVha3BvaW50KFBhc3NSZWZQdHI8
SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50LCBTdHJpbmcqIGJyZWFrcG9pbnRJZCwgbG9uZyog
YWN0dWFsTGluZU51bWJlciwgbG9uZyogYWN0dWFsQ29sdW1uTnVtYmVyKTsKLSAgICB2b2lkIHJl
bW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50SWQpOworICAgIHZvaWQgc2V0
SmF2YVNjcmlwdEJyZWFrcG9pbnQoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9p
bnQsIFN0cmluZyogYnJlYWtwb2ludElkLCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBsb2NhdGlv
bnMpOworICAgIHZvaWQgcmVtb3ZlSmF2YVNjcmlwdEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBi
cmVha3BvaW50SWQpOworICAgIHZvaWQgY29udGludWVUb0xvY2F0aW9uKGNvbnN0IFN0cmluZyYg
c291cmNlSUQsIGxvbmcgbGluZU51bWJlciwgbG9uZyBjb2x1bW5OdW1iZXIpOwogICAgIHZvaWQg
ZWRpdFNjcmlwdFNvdXJjZShjb25zdCBTdHJpbmcmIHNvdXJjZUlELCBjb25zdCBTdHJpbmcmIG5l
d0NvbnRlbnQsIGJvb2wqIHN1Y2Nlc3MsIFN0cmluZyogcmVzdWx0LCBSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+KiBuZXdDYWxsRnJhbWVzKTsKICAgICB2b2lkIGdldFNjcmlwdFNvdXJjZShjb25zdCBT
dHJpbmcmIHNvdXJjZUlELCBTdHJpbmcqIHNjcmlwdFNvdXJjZSk7CiAgICAgdm9pZCBzY2hlZHVs
ZVBhdXNlT25OZXh0U3RhdGVtZW50KERlYnVnZ2VyRXZlbnRUeXBlIHR5cGUsIFBhc3NSZWZQdHI8
SW5zcGVjdG9yVmFsdWU+IGRhdGEpOwpAQCAtOTMsMjMgKzk0LDQxIEBAIHByaXZhdGU6CiAgICAg
dmlydHVhbCB2b2lkIGRpZFBhdXNlKFNjcmlwdFN0YXRlKik7CiAgICAgdmlydHVhbCB2b2lkIGRp
ZENvbnRpbnVlKCk7CiAKLSAgICB2b2lkIHJlc3RvcmVCcmVha3BvaW50cyhjb25zdCBTdHJpbmcm
IGluc3BlY3RlZFVSTCk7Ci0gICAgdm9pZCByZXN0b3JlQnJlYWtwb2ludChjb25zdCBTdHJpbmcm
IHNvdXJjZUlELCBjb25zdCBTY3JpcHRCcmVha3BvaW50Jik7Ci0KLSAgICB0eXBlZGVmIEhhc2hN
YXA8U3RyaW5nLCBWZWN0b3I8U3RyaW5nPiA+IFVSTFRvU291cmNlSURzTWFwOwotICAgIHR5cGVk
ZWYgc3RkOjpwYWlyPGxvbmcsIGxvbmc+IExvY2F0aW9uOwotICAgIHR5cGVkZWYgSGFzaE1hcDxM
b2NhdGlvbiwgU2NyaXB0QnJlYWtwb2ludD4gTG9jYXRpb25Ub0JyZWFrcG9pbnRNYXA7Ci0gICAg
dHlwZWRlZiBIYXNoTWFwPFN0cmluZywgTG9jYXRpb25Ub0JyZWFrcG9pbnRNYXA+IEluc3BlY3Rl
ZFVSTFRvQnJlYWtwb2ludHNNYXA7CisgICAgdm9pZCByZXNvbHZlQnJlYWtwb2ludChjb25zdCBT
dHJpbmcmIGJyZWFrcG9pbnRJZCwgY29uc3QgU2NyaXB0QnJlYWtwb2ludCYsIEluc3BlY3RvckFy
cmF5KiBsb2NhdGlvbnMpOworICAgIGJvb2wgcmVzb2x2ZUJyZWFrcG9pbnRJblNjcmlwdChjb25z
dCBTdHJpbmcmIGJyZWFrcG9pbnRJZCwgY29uc3QgU2NyaXB0QnJlYWtwb2ludCYsIGNvbnN0IFN0
cmluZyYgc291cmNlSUQsIEluc3BlY3Rvck9iamVjdCogbG9jYXRpb24pOworCisgICAgc3RydWN0
IFNjcmlwdCB7CisgICAgICAgIFNjcmlwdChjb25zdCBTdHJpbmcmIHVybCwgY29uc3QgU3RyaW5n
JiBkYXRhLCBpbnQgbGluZU9mZnNldCwgaW50IGNvbHVtbk9mZnNldCkKKyAgICAgICAgICAgIDog
dXJsKHVybCkKKyAgICAgICAgICAgICwgZGF0YShkYXRhKQorICAgICAgICAgICAgLCBsaW5lT2Zm
c2V0KGxpbmVPZmZzZXQpCisgICAgICAgICAgICAsIGNvbHVtbk9mZnNldChjb2x1bW5PZmZzZXQp
CisgICAgICAgICAgICAsIGxpbmVzQ291bnQoMCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAg
ICAgICAgU2NyaXB0KCkKKyAgICAgICAgeworICAgICAgICB9CisKKyAgICAgICAgU3RyaW5nIHVy
bDsKKyAgICAgICAgU3RyaW5nIGRhdGE7CisgICAgICAgIGludCBsaW5lT2Zmc2V0OworICAgICAg
ICBpbnQgY29sdW1uT2Zmc2V0OworICAgICAgICBpbnQgbGluZXNDb3VudDsKKyAgICB9OworCisg
ICAgdHlwZWRlZiBIYXNoTWFwPFN0cmluZywgU2NyaXB0PiBTY3JpcHRzTWFwOworICAgIHR5cGVk
ZWYgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxTdHJpbmc+ID4gQnJlYWtwb2ludElkVG9EZWJ1Z1Nl
cnZlckJyZWFrcG9pbnRJZHNNYXA7CiAKICAgICBJbnNwZWN0b3JBZ2VudCogbV9pbnNwZWN0b3JB
Z2VudDsKICAgICBJbnNwZWN0b3JGcm9udGVuZCogbV9mcm9udGVuZDsKICAgICBTY3JpcHRTdGF0
ZSogbV9wYXVzZWRTY3JpcHRTdGF0ZTsKLSAgICBIYXNoTWFwPFN0cmluZywgU3RyaW5nPiBtX3Nj
cmlwdElEVG9Db250ZW50OwotICAgIFVSTFRvU291cmNlSURzTWFwIG1fdXJsVG9Tb3VyY2VJRHM7
Ci0gICAgSW5zcGVjdGVkVVJMVG9CcmVha3BvaW50c01hcCBtX3N0aWNreUJyZWFrcG9pbnRzOwor
ICAgIFNjcmlwdHNNYXAgbV9zY3JpcHRzOworICAgIEJyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJC
cmVha3BvaW50SWRzTWFwIG1fYnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHM7
CisgICAgU3RyaW5nIG1fY29udGludWVUb1Bvc2l0aW9uQnJlYWtwb2ludElkOwogICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IG1fYnJlYWtQcm9ncmFtRGV0YWlsczsKICAgICBib29sIG1famF2
YVNjcmlwdFBhdXNlU2NoZWR1bGVkOwotICAgIGJvb2wgbV9icmVha3BvaW50c1Jlc3RvcmVkOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
SW5zcGVjdG9yVmFsdWVzLmNwcAppbmRleCBkMWI4MDkzLi40MmNkNjdhIDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcApAQCAtNjk1LDYgKzY5NSwxNyBA
QCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVlPiBJbnNwZWN0b3JPYmplY3Q6OmdldChjb25zdCBT
dHJpbmcmIG5hbWUpIGNvbnN0CiAgICAgcmV0dXJuIGl0LT5zZWNvbmQ7CiB9CiAKK3ZvaWQgSW5z
cGVjdG9yT2JqZWN0OjpyZW1vdmUoY29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIG1fZGF0YS5y
ZW1vdmUobmFtZSk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBtX29yZGVyLnNpemUoKTsg
KytpKSB7CisgICAgICAgIGlmIChtX29yZGVyW2ldID09IG5hbWUpIHsKKyAgICAgICAgICAgIG1f
b3JkZXIucmVtb3ZlKGkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9
CisKIHZvaWQgSW5zcGVjdG9yT2JqZWN0Ojp3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0
KSBjb25zdAogewogICAgIG91dHB1dC0+YXBwZW5kKCd7Jyk7CmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKaW5kZXggODQzZjM2OS4uNjc5OTQzNCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuaApAQCAtMTc4LDYgKzE3OCw3IEBA
IHB1YmxpYzoKICAgICB2b2lkIHNldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUsIFBhc3NSZWZQ
dHI8SW5zcGVjdG9yT2JqZWN0Pik7CiAgICAgdm9pZCBzZXRBcnJheShjb25zdCBTdHJpbmcmIG5h
bWUsIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KTsKIAorICAgIGl0ZXJhdG9yIGZpbmQoY29u
c3QgU3RyaW5nJiBuYW1lKTsKICAgICBjb25zdF9pdGVyYXRvciBmaW5kKGNvbnN0IFN0cmluZyYg
bmFtZSkgY29uc3Q7CiAgICAgYm9vbCBnZXRCb29sZWFuKGNvbnN0IFN0cmluZyYgbmFtZSwgYm9v
bCogb3V0cHV0KSBjb25zdDsKICAgICBib29sIGdldE51bWJlcihjb25zdCBTdHJpbmcmIG5hbWUs
IGxvbmcqIG91dHB1dCkgY29uc3Q7CkBAIC0xODcsNiArMTg4LDggQEAgcHVibGljOgogICAgIFBh
c3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGdldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSkgY29u
c3Q7CiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gZ2V0KGNvbnN0IFN0cmluZyYgbmFt
ZSkgY29uc3Q7CiAKKyAgICB2b2lkIHJlbW92ZShjb25zdCBTdHJpbmcmIG5hbWUpOworCiAgICAg
dmlydHVhbCB2b2lkIHdyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0OwogCiAg
ICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX2RhdGEuYmVnaW4oKTsgfQpAQCAtMjI4LDYg
KzIzMSwxMSBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxSZWZQdHI8SW5zcGVjdG9yVmFsdWU+ID4g
bV9kYXRhOwogfTsKIAoraW5saW5lIEluc3BlY3Rvck9iamVjdDo6aXRlcmF0b3IgSW5zcGVjdG9y
T2JqZWN0OjpmaW5kKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICByZXR1cm4gbV9kYXRhLmZp
bmQobmFtZSk7Cit9CisKIGlubGluZSBJbnNwZWN0b3JPYmplY3Q6OmNvbnN0X2l0ZXJhdG9yIElu
c3BlY3Rvck9iamVjdDo6ZmluZChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CiB7CiAgICAgcmV0
dXJuIG1fZGF0YS5maW5kKG5hbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL1NjcmlwdEJyZWFrcG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9TY3JpcHRC
cmVha3BvaW50LmgKaW5kZXggOTUyMWNjZC4uMjBiZTdmMzAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9TY3JpcHRCcmVha3BvaW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL1NjcmlwdEJyZWFrcG9pbnQuaApAQCAtMzUsMTggKzM1LDggQEAKIG5hbWVzcGFj
ZSBXZWJDb3JlIHsKIAogc3RydWN0IFNjcmlwdEJyZWFrcG9pbnQgewotICAgIFNjcmlwdEJyZWFr
cG9pbnQobG9uZyBsaW5lTnVtYmVyLCBsb25nIGNvbHVtbk51bWJlciwgY29uc3QgU3RyaW5nJiBj
b25kaXRpb24sIGJvb2wgZW5hYmxlZCkKLSAgICAgICAgOiBsaW5lTnVtYmVyKGxpbmVOdW1iZXIp
Ci0gICAgICAgICwgY29sdW1uTnVtYmVyKGNvbHVtbk51bWJlcikKLSAgICAgICAgLCBjb25kaXRp
b24oY29uZGl0aW9uKQotICAgICAgICAsIGVuYWJsZWQoZW5hYmxlZCkKLSAgICB7Ci0gICAgfQot
Ci0gICAgU2NyaXB0QnJlYWtwb2ludCgpCi0gICAgewotICAgIH0KLQorICAgIFN0cmluZyB1cmw7
CisgICAgU3RyaW5nIHNvdXJjZUlEOwogICAgIGxvbmcgbGluZU51bWJlcjsKICAgICBsb25nIGNv
bHVtbk51bWJlcjsKICAgICBTdHJpbmcgY29uZGl0aW9uOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcyBiL1NvdXJjZS9X
ZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMKaW5kZXggMTY5
YjQ3My4uOTQzNDVkNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzCkBAIC0zNywxOCArMzcsMTQgQEAgV2ViSW5z
cGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyID0gZnVuY3Rpb24oKQogCiAgICAgdGhpcy5fYnJlYWtw
b2ludHMgPSB7fTsKICAgICB0aGlzLl9kb21CcmVha3BvaW50c1Jlc3RvcmVkID0gZmFsc2U7Ci0g
ICAgdGhpcy5fc2NyaXB0QnJlYWtwb2ludHMgPSB7fTsKIAogICAgIFdlYkluc3BlY3Rvci5zZXR0
aW5ncy5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5TZXR0aW5ncy5FdmVudHMuUHJvamVj
dENoYW5nZWQsIHRoaXMuX3Byb2plY3RDaGFuZ2VkLCB0aGlzKTsKLSAgICBXZWJJbnNwZWN0b3Iu
ZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVs
LkV2ZW50cy5CcmVha3BvaW50QWRkZWQsIHRoaXMuX3NjcmlwdEJyZWFrcG9pbnRBZGRlZCwgdGhp
cyk7Ci0gICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJ
bnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMuQnJlYWtwb2ludFJlbW92ZWQsIHRoaXMuX3Nj
cmlwdEJyZWFrcG9pbnRSZW1vdmVkLCB0aGlzKTsKICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJN
b2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5E
ZWJ1Z2dlclBhdXNlZCwgdGhpcy5fZGVidWdnZXJQYXVzZWQsIHRoaXMpOwogICAgIFdlYkluc3Bl
Y3Rvci5kZWJ1Z2dlck1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2Vy
TW9kZWwuRXZlbnRzLkRlYnVnZ2VyUmVzdW1lZCwgdGhpcy5fZGVidWdnZXJSZXN1bWVkLCB0aGlz
KTsKIH0KIAogV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkJyZWFrcG9pbnRUeXBlcyA9
IHsKICAgICBET006ICJET00iLAotICAgIEpTOiAiSlMiLAogICAgIEV2ZW50TGlzdGVuZXI6ICJF
dmVudExpc3RlbmVyIiwKICAgICBYSFI6ICJYSFIiCiB9CkBAIC0xMDMsMzggKzk5LDYgQEAgV2Vi
SW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5k
aXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkV2
ZW50cy5FdmVudExpc3RlbmVyQnJlYWtwb2ludEFkZGVkLCBicmVha3BvaW50LnZpZXcpOwogICAg
IH0sCiAKLSAgICBfY3JlYXRlSmF2YVNjcmlwdEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHVybCwgbGlu
ZU51bWJlciwgY29uZGl0aW9uLCBlbmFibGVkLCByZXN0b3JlZCkKLSAgICB7Ci0gICAgICAgIHZh
ciBicmVha3BvaW50SWQgPSB0aGlzLl9jcmVhdGVKYXZhU2NyaXB0QnJlYWtwb2ludElkKHVybCwg
bGluZU51bWJlcik7Ci0gICAgICAgIGlmIChicmVha3BvaW50SWQgaW4gdGhpcy5fYnJlYWtwb2lu
dHMpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBuZXcg
V2ViSW5zcGVjdG9yLkphdmFTY3JpcHRCcmVha3BvaW50KHVybCwgbGluZU51bWJlciwgY29uZGl0
aW9uKTsKLSAgICAgICAgdGhpcy5fc2V0QnJlYWtwb2ludChicmVha3BvaW50SWQsIGJyZWFrcG9p
bnQsIGVuYWJsZWQsIHJlc3RvcmVkKTsKLSAgICB9LAotCi0gICAgX3NjcmlwdEJyZWFrcG9pbnRB
ZGRlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgc2NyaXB0QnJlYWtwb2lu
dCA9IGV2ZW50LmRhdGE7Ci0KLSAgICAgICAgaWYgKCFzY3JpcHRCcmVha3BvaW50LnVybCkKLSAg
ICAgICAgICAgIHJldHVybjsKLQotICAgICAgICBpZiAoIXNjcmlwdEJyZWFrcG9pbnQucmVzdG9y
ZWQpCi0gICAgICAgICAgICB0aGlzLl9jcmVhdGVKYXZhU2NyaXB0QnJlYWtwb2ludChzY3JpcHRC
cmVha3BvaW50LnVybCwgc2NyaXB0QnJlYWtwb2ludC5vcmlnaW5hbExpbmVOdW1iZXIsIHNjcmlw
dEJyZWFrcG9pbnQuY29uZGl0aW9uLCBzY3JpcHRCcmVha3BvaW50LmVuYWJsZWQsIGZhbHNlKTsK
LSAgICAgICAgdmFyIGJyZWFrcG9pbnRJZCA9IHRoaXMuX2NyZWF0ZUphdmFTY3JpcHRCcmVha3Bv
aW50SWQoc2NyaXB0QnJlYWtwb2ludC51cmwsIHNjcmlwdEJyZWFrcG9pbnQub3JpZ2luYWxMaW5l
TnVtYmVyKTsKLSAgICAgICAgdGhpcy5fc2NyaXB0QnJlYWtwb2ludHNbc2NyaXB0QnJlYWtwb2lu
dC5pZF0gPSBicmVha3BvaW50SWQ7Ci0gICAgfSwKLQotICAgIF9zY3JpcHRCcmVha3BvaW50UmVt
b3ZlZDogZnVuY3Rpb24oZXZlbnQpCi0gICAgewotICAgICAgICB2YXIgc2NyaXB0QnJlYWtwb2lu
dElkID0gZXZlbnQuZGF0YTsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnRJZCA9IHRoaXMuX3Njcmlw
dEJyZWFrcG9pbnRzW3NjcmlwdEJyZWFrcG9pbnRJZF07Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9z
Y3JpcHRCcmVha3BvaW50c1tzY3JpcHRCcmVha3BvaW50SWRdOwotICAgICAgICBpZiAoYnJlYWtw
b2ludElkIGluIHRoaXMuX2JyZWFrcG9pbnRzKQotICAgICAgICAgICAgdGhpcy5fcmVtb3ZlQnJl
YWtwb2ludChicmVha3BvaW50SWQpOwotICAgIH0sCi0KICAgICBjcmVhdGVYSFJCcmVha3BvaW50
OiBmdW5jdGlvbih1cmwpCiAgICAgewogICAgICAgICB0aGlzLl9jcmVhdGVYSFJCcmVha3BvaW50
KHVybCwgdHJ1ZSwgZmFsc2UpOwpAQCAtMjMxLDcgKzE5NSw2IEBAIFdlYkluc3BlY3Rvci5CcmVh
a3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgewogICAgICAgICB0aGlzLl9icmVha3Bv
aW50cyA9IHt9OwogICAgICAgICB0aGlzLl9kb21CcmVha3BvaW50c1Jlc3RvcmVkID0gZmFsc2U7
Ci0gICAgICAgIHRoaXMuX3NjcmlwdEJyZWFrcG9pbnRzID0ge307CiAgICAgICAgIHRoaXMuZGlz
cGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5FdmVu
dHMuUHJvamVjdENoYW5nZWQpOwogCiAgICAgICAgIHZhciBicmVha3BvaW50cyA9IHRoaXMuX3N0
aWNreUJyZWFrcG9pbnRzW1dlYkluc3BlY3Rvci5zZXR0aW5ncy5wcm9qZWN0SWRdIHx8IFtdOwpA
QCAtMjM5LDE0ICsyMDIsMTIgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgICAgIHZhciBicmVha3BvaW50ID0gYnJlYWtwb2ludHNbaV07CiAg
ICAgICAgICAgICBpZiAoYnJlYWtwb2ludC50eXBlID09PSBXZWJJbnNwZWN0b3IuQnJlYWtwb2lu
dE1hbmFnZXIuQnJlYWtwb2ludFR5cGVzLkV2ZW50TGlzdGVuZXIpCiAgICAgICAgICAgICAgICAg
dGhpcy5fY3JlYXRlRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQoYnJlYWtwb2ludC5jb25kaXRpb24u
ZXZlbnROYW1lLCBicmVha3BvaW50LmVuYWJsZWQsIHRydWUpOwotICAgICAgICAgICAgZWxzZSBp
ZiAoYnJlYWtwb2ludC50eXBlID09PSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJl
YWtwb2ludFR5cGVzLkpTKQotICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUphdmFTY3JpcHRC
cmVha3BvaW50KGJyZWFrcG9pbnQuY29uZGl0aW9uLnVybCwgYnJlYWtwb2ludC5jb25kaXRpb24u
bGluZU51bWJlciwgYnJlYWtwb2ludC5jb25kaXRpb24uY29uZGl0aW9uLCBicmVha3BvaW50LmVu
YWJsZWQsIHRydWUpOwogICAgICAgICAgICAgZWxzZSBpZiAoYnJlYWtwb2ludC50eXBlID09PSBX
ZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJlYWtwb2ludFR5cGVzLlhIUikKICAgICAg
ICAgICAgICAgICB0aGlzLl9jcmVhdGVYSFJCcmVha3BvaW50KGJyZWFrcG9pbnQuY29uZGl0aW9u
LnVybCwgYnJlYWtwb2ludC5lbmFibGVkLCB0cnVlKTsKICAgICAgICAgfQogCiAgICAgICAgIGlm
ICghdGhpcy5fYnJlYWtwb2ludHNQdXNoZWRUb0Zyb250ZW5kKSB7Ci0gICAgICAgICAgICB0aGlz
Ll9wdXNoQnJlYWtwb2ludHNUb0JhY2tlbmQoKTsKKyAgICAgICAgICAgIEluc3BlY3RvckJhY2tl
bmQuc2V0QWxsQnJvd3NlckJyZWFrcG9pbnRzKHRoaXMuX3N0aWNreUJyZWFrcG9pbnRzKTsKICAg
ICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzUHVzaGVkVG9Gcm9udGVuZCA9IHRydWU7CiAgICAg
ICAgIH0KICAgICB9LApAQCAtMzA3LDM0ICsyNjgsNyBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2lu
dE1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MubmF0
aXZlQnJlYWtwb2ludHMgPSBicmVha3BvaW50czsKIAogICAgICAgICB0aGlzLl9zdGlja3lCcmVh
a3BvaW50c1tXZWJJbnNwZWN0b3Iuc2V0dGluZ3MucHJvamVjdElkXSA9IGJyZWFrcG9pbnRzOwot
ICAgICAgICB0aGlzLl9wdXNoQnJlYWtwb2ludHNUb0JhY2tlbmQoKTsKLSAgICB9LAotCi0gICAg
X3B1c2hCcmVha3BvaW50c1RvQmFja2VuZDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFy
IGFsbEphdmFTY3JpcHRCcmVha3BvaW50cyA9IHt9OwotICAgICAgICB2YXIgYWxsQnJvd3NlckJy
ZWFrcG9pbnRzID0ge307Ci0gICAgICAgIGZvciAodmFyIHByb2plY3RJZCBpbiB0aGlzLl9zdGlj
a3lCcmVha3BvaW50cykgewotICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0gdGhpcy5fc3Rp
Y2t5QnJlYWtwb2ludHNbcHJvamVjdElkXTsKLSAgICAgICAgICAgIHZhciBqYXZhU2NyaXB0QnJl
YWtwb2ludHMgPSBbXTsKLSAgICAgICAgICAgIHZhciBicm93c2VyQnJlYWtwb2ludHMgPSBbXTsK
LSAgICAgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnJlYWtwb2ludHMubGVuZ3RoOyArK2kp
IHsKLSAgICAgICAgICAgICAgICBpZiAoYnJlYWtwb2ludHNbaV0udHlwZSA9PSBXZWJJbnNwZWN0
b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJlYWtwb2ludFR5cGVzLkpTKSB7Ci0gICAgICAgICAgICAg
ICAgICAgIHZhciBkYXRhID0ge307Ci0gICAgICAgICAgICAgICAgICAgIGRhdGEuZW5hYmxlZCA9
IGJyZWFrcG9pbnRzW2ldLmVuYWJsZWQ7Ci0gICAgICAgICAgICAgICAgICAgIGZvciAodmFyIHAg
aW4gYnJlYWtwb2ludHNbaV0uY29uZGl0aW9uKQotICAgICAgICAgICAgICAgICAgICAgICAgZGF0
YVtwXSA9IGJyZWFrcG9pbnRzW2ldLmNvbmRpdGlvbltwXTsKLSAgICAgICAgICAgICAgICAgICAg
amF2YVNjcmlwdEJyZWFrcG9pbnRzLnB1c2goZGF0YSk7Ci0gICAgICAgICAgICAgICAgfSBlbHNl
Ci0gICAgICAgICAgICAgICAgICAgIGJyb3dzZXJCcmVha3BvaW50cy5wdXNoKGJyZWFrcG9pbnRz
W2ldKTsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGlmIChqYXZhU2NyaXB0QnJlYWtwb2lu
dHMubGVuZ3RoKQotICAgICAgICAgICAgICAgIGFsbEphdmFTY3JpcHRCcmVha3BvaW50c1twcm9q
ZWN0SWRdID0gamF2YVNjcmlwdEJyZWFrcG9pbnRzOwotICAgICAgICAgICAgaWYgKGJyb3dzZXJC
cmVha3BvaW50cy5sZW5ndGgpCi0gICAgICAgICAgICAgICAgYWxsQnJvd3NlckJyZWFrcG9pbnRz
W3Byb2plY3RJZF0gPSBicm93c2VyQnJlYWtwb2ludHM7Ci0gICAgICAgIH0KLSAgICAgICAgSW5z
cGVjdG9yQmFja2VuZC5zZXRBbGxKYXZhU2NyaXB0QnJlYWtwb2ludHMoYWxsSmF2YVNjcmlwdEJy
ZWFrcG9pbnRzKTsKLSAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRBbGxCcm93c2VyQnJlYWtw
b2ludHMoYWxsQnJvd3NlckJyZWFrcG9pbnRzKTsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5z
ZXRBbGxCcm93c2VyQnJlYWtwb2ludHModGhpcy5fc3RpY2t5QnJlYWtwb2ludHMpOwogICAgIH0s
CiAKICAgICBfdmFsaWRhdGVCcmVha3BvaW50czogZnVuY3Rpb24ocGVyc2lzdGVudEJyZWFrcG9p
bnRzKQpAQCAtMzU1LDE1ICsyODksMTIgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2Vy
LnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbmRpdGlvbi5ldmVu
dE5hbWUgIT09ICJzdHJpbmciKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAg
ICAgICAgICAgICBpZCArPSBjb25kaXRpb24uZXZlbnROYW1lOwotICAgICAgICAgICAgfSBlbHNl
IGlmIChicmVha3BvaW50LnR5cGUgPT09IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5C
cmVha3BvaW50VHlwZXMuSlMpIHsKLSAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbmRpdGlv
bi51cmwgIT09ICJzdHJpbmciIHx8IHR5cGVvZiBjb25kaXRpb24ubGluZU51bWJlciAhPT0gIm51
bWJlciIgfHwgdHlwZW9mIGNvbmRpdGlvbi5jb25kaXRpb24gIT09ICJzdHJpbmciKQotICAgICAg
ICAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgICAgICAgICBpZCArPSBjb25kaXRpb24u
dXJsICsgIjoiICsgY29uZGl0aW9uLmxpbmVOdW1iZXI7CiAgICAgICAgICAgICB9IGVsc2UgaWYg
KGJyZWFrcG9pbnQudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkJyZWFr
cG9pbnRUeXBlcy5YSFIpIHsKICAgICAgICAgICAgICAgICBpZiAodHlwZW9mIGNvbmRpdGlvbi51
cmwgIT09ICJzdHJpbmciKQogICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAg
ICAgICAgICBpZCArPSBjb25kaXRpb24udXJsOwotICAgICAgICAgICAgfQorICAgICAgICAgICAg
fSBlbHNlCisgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBpZiAoaWQgaW4g
YnJlYWtwb2ludHNTZXQpCiAgICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICBi
cmVha3BvaW50c1NldFtpZF0gPSB0cnVlOwpAQCAtMzc3LDExICszMDgsNiBAQCBXZWJJbnNwZWN0
b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICByZXR1cm4gImRvbToi
ICsgbm9kZUlkICsgIjoiICsgdHlwZTsKICAgICB9LAogCi0gICAgX2NyZWF0ZUphdmFTY3JpcHRC
cmVha3BvaW50SWQ6IGZ1bmN0aW9uKHVybCwgbGluZU51bWJlcikKLSAgICB7Ci0gICAgICAgIHJl
dHVybiAianM6IiArIHVybCArICI6IiArIGxpbmVOdW1iZXI7Ci0gICAgfSwKLQogICAgIF9jcmVh
dGVFdmVudExpc3RlbmVyQnJlYWtwb2ludElkOiBmdW5jdGlvbihldmVudE5hbWUpCiAgICAgewog
ICAgICAgICByZXR1cm4gImV2ZW50TGlzdG5lcjoiICsgZXZlbnROYW1lOwpAQCAtNDIwLDI5ICsz
NDYsNiBAQCBXZWJJbnNwZWN0b3IuRE9NQnJlYWtwb2ludC5wcm90b3R5cGUgPSB7CiAgICAgfQog
fQogCi1XZWJJbnNwZWN0b3IuSmF2YVNjcmlwdEJyZWFrcG9pbnQgPSBmdW5jdGlvbih1cmwsIGxp
bmVOdW1iZXIsIGNvbmRpdGlvbikKLXsKLSAgICB0aGlzLl91cmwgPSB1cmw7Ci0gICAgdGhpcy5f
bGluZU51bWJlciA9IGxpbmVOdW1iZXI7Ci0gICAgdGhpcy5fY29uZGl0aW9uID0gY29uZGl0aW9u
OwotfQotCi1XZWJJbnNwZWN0b3IuSmF2YVNjcmlwdEJyZWFrcG9pbnQucHJvdG90eXBlID0gewot
ICAgIF9lbmFibGU6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgfSwKLQotICAgIF9kaXNhYmxlOiBm
dW5jdGlvbigpCi0gICAgewotICAgIH0sCi0KLSAgICBfc2VyaWFsaXplVG9KU09OOiBmdW5jdGlv
bigpCi0gICAgewotICAgICAgICB2YXIgdHlwZSA9IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFu
YWdlci5CcmVha3BvaW50VHlwZXMuSlM7Ci0gICAgICAgIHJldHVybiB7IHR5cGU6IHR5cGUsIGNv
bmRpdGlvbjogeyB1cmw6IHRoaXMuX3VybCwgbGluZU51bWJlcjogdGhpcy5fbGluZU51bWJlciwg
Y29sdW1uTnVtYmVyOiAxLCBjb25kaXRpb246IHRoaXMuX2NvbmRpdGlvbiB9IH07Ci0gICAgfQot
fQotCiBXZWJJbnNwZWN0b3IuRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnQgPSBmdW5jdGlvbihldmVu
dE5hbWUpCiB7CiAgICAgdGhpcy5fZXZlbnROYW1lID0gZXZlbnROYW1lOwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50c1NpZGViYXJQYW5l
LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50c1NpZGVi
YXJQYW5lLmpzCmluZGV4IGIyMzdjYTIuLjQzNjQyN2MgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qcworKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBhbmUu
anMKQEAgLTQwLDYgKzQwLDggQEAgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRCcmVha3BvaW50c1Np
ZGViYXJQYW5lID0gZnVuY3Rpb24odGl0bGUpCiAKICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJN
b2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5C
cmVha3BvaW50QWRkZWQsIHRoaXMuX2JyZWFrcG9pbnRBZGRlZCwgdGhpcyk7CiAgICAgV2ViSW5z
cGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdn
ZXJNb2RlbC5FdmVudHMuQnJlYWtwb2ludFJlbW92ZWQsIHRoaXMuX2JyZWFrcG9pbnRSZW1vdmVk
LCB0aGlzKTsKKyAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3RlbmVy
KFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5CcmVha3BvaW50UmVzb2x2ZWQsIHRo
aXMuX2JyZWFrcG9pbnRSZXNvbHZlZCwgdGhpcyk7CisgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2Vy
TW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMu
UGFyc2VkU2NyaXB0U291cmNlLCB0aGlzLl9wYXJzZWRTY3JpcHRTb3VyY2UsIHRoaXMpOwogICAg
IFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9y
LkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkRlYnVnZ2VyUGF1c2VkLCB0aGlzLl9kZWJ1Z2dlclBhdXNl
ZCwgdGhpcyk7CiAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0ZW5l
cihXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMuRGVidWdnZXJSZXN1bWVkLCB0aGlz
Ll9kZWJ1Z2dlclJlc3VtZWQsIHRoaXMpOwogICAgIFdlYkluc3BlY3Rvci5icmVha3BvaW50TWFu
YWdlci5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5FdmVu
dHMuUHJvamVjdENoYW5nZWQsIHRoaXMuX3Byb2plY3RDaGFuZ2VkLCB0aGlzKTsKQEAgLTUwLDcg
KzUyLDkgQEAgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRCcmVha3BvaW50c1NpZGViYXJQYW5lLnBy
b3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIHZhciBicmVha3BvaW50ID0gZXZlbnQuZGF0YTsK
ICAgICAgICAgdmFyIGJyZWFrcG9pbnRJZCA9IGJyZWFrcG9pbnQuaWQ7Ci0gICAgICAgIHZhciBk
YXRhID0gYnJlYWtwb2ludC5kYXRhOworCisgICAgICAgIGlmIChicmVha3BvaW50LnVybCAmJiAh
V2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuc2NyaXB0c0ZvclVSTChicmVha3BvaW50LnVybCku
bGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuOwogCiAgICAgICAgIHZhciBlbGVtZW50ID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgibGkiKTsKIApAQCAtNjQsNyArNjgsNyBAQCBXZWJJbnNwZWN0
b3IuSmF2YVNjcmlwdEJyZWFrcG9pbnRzU2lkZWJhclBhbmUucHJvdG90eXBlID0gewogICAgICAg
ICB2YXIgbGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CiAgICAgICAgIGVs
ZW1lbnQuYXBwZW5kQ2hpbGQobGFiZWwpOwogCi0gICAgICAgIGVsZW1lbnQuX2RhdGEgPSBkYXRh
OworICAgICAgICBlbGVtZW50Ll9kYXRhID0gYnJlYWtwb2ludDsKICAgICAgICAgdmFyIGN1cnJl
bnRFbGVtZW50ID0gdGhpcy5saXN0RWxlbWVudC5maXJzdENoaWxkOwogICAgICAgICB3aGlsZSAo
Y3VycmVudEVsZW1lbnQpIHsKICAgICAgICAgICAgIGlmIChjdXJyZW50RWxlbWVudC5fZGF0YSAm
JiB0aGlzLl9jb21wYXJlQnJlYWtwb2ludHMoY3VycmVudEVsZW1lbnQuX2RhdGEsIGVsZW1lbnQu
X2RhdGEpID4gMCkKQEAgLTc1LDEwICs3OSw5IEBAIFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0QnJl
YWtwb2ludHNTaWRlYmFyUGFuZS5wcm90b3R5cGUgPSB7CiAKICAgICAgICAgZWxlbWVudC5hZGRF
dmVudExpc3RlbmVyKCJjb250ZXh0bWVudSIsIHRoaXMuX2NvbnRleHRNZW51RXZlbnRGaXJlZC5i
aW5kKHRoaXMsIGJyZWFrcG9pbnRJZCksIHRydWUpOwogCi0gICAgICAgIHRoaXMuX3NldHVwQnJl
YWtwb2ludEVsZW1lbnQoZGF0YSwgZWxlbWVudCk7CisgICAgICAgIHRoaXMuX3NldHVwQnJlYWtw
b2ludEVsZW1lbnQoYnJlYWtwb2ludCwgZWxlbWVudCk7CiAKICAgICAgICAgdmFyIGJyZWFrcG9p
bnRJdGVtID0ge307Ci0gICAgICAgIGJyZWFrcG9pbnRJdGVtLmRhdGEgPSBkYXRhOwogICAgICAg
ICBicmVha3BvaW50SXRlbS5lbGVtZW50ID0gZWxlbWVudDsKICAgICAgICAgYnJlYWtwb2ludEl0
ZW0uY2hlY2tib3ggPSBjaGVja2JveDsKICAgICAgICAgdGhpcy5faXRlbXNbYnJlYWtwb2ludElk
XSA9IGJyZWFrcG9pbnRJdGVtOwpAQCAtOTcsNiArMTAwLDIzIEBAIFdlYkluc3BlY3Rvci5KYXZh
U2NyaXB0QnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIH0KICAg
ICB9LAogCisgICAgX2JyZWFrcG9pbnRSZXNvbHZlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgewor
ICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGV2ZW50LmRhdGE7CisgICAgICAgIHRoaXMuX2JyZWFr
cG9pbnRSZW1vdmVkKHsgZGF0YTogYnJlYWtwb2ludC5pZCB9KTsKKyAgICAgICAgdGhpcy5fYnJl
YWtwb2ludEFkZGVkKHsgZGF0YTogYnJlYWtwb2ludCB9KTsKKyAgICB9LAorCisgICAgX3BhcnNl
ZFNjcmlwdFNvdXJjZTogZnVuY3Rpb24oZXZlbnQpCisgICAgeworICAgICAgICB2YXIgdXJsID0g
ZXZlbnQuZGF0YS5zb3VyY2VVUkw7CisgICAgICAgIHZhciBicmVha3BvaW50cyA9IFdlYkluc3Bl
Y3Rvci5kZWJ1Z2dlck1vZGVsLmJyZWFrcG9pbnRzOworICAgICAgICBmb3IgKHZhciBpZCBpbiBi
cmVha3BvaW50cykgeworICAgICAgICAgICAgaWYgKCEoaWQgaW4gdGhpcy5faXRlbXMpKQorICAg
ICAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRBZGRlZCh7IGRhdGE6IGJyZWFrcG9pbnRzW2lk
XSB9KTsKKyAgICAgICAgfQorICAgIH0sCisKICAgICBfYnJlYWtwb2ludEVuYWJsZUNoYW5nZWQ6
IGZ1bmN0aW9uKGVuYWJsZWQsIGV2ZW50KQogICAgIHsKICAgICAgICAgdmFyIGJyZWFrcG9pbnRJ
ZCA9IGV2ZW50LmRhdGE7CkBAIC0xMDcsNyArMTI3LDggQEAgV2ViSW5zcGVjdG9yLkphdmFTY3Jp
cHRCcmVha3BvaW50c1NpZGViYXJQYW5lLnByb3RvdHlwZSA9IHsKIAogICAgIF9icmVha3BvaW50
SXRlbUNoZWNrYm94Q2xpY2tlZDogZnVuY3Rpb24oYnJlYWtwb2ludElkLCBldmVudCkKICAgICB7
Ci0gICAgICAgIHRoaXMuX3NldEJyZWFrcG9pbnRFbmFibGVkKGJyZWFrcG9pbnRJZCwgZXZlbnQu
dGFyZ2V0LmNoZWNrZWQpOworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IFdlYkluc3BlY3Rvci5k
ZWJ1Z2dlck1vZGVsLmJyZWFrcG9pbnRGb3JJZChicmVha3BvaW50SWQpOworICAgICAgICBXZWJJ
bnNwZWN0b3IuZGVidWdnZXJNb2RlbC51cGRhdGVCcmVha3BvaW50KGJyZWFrcG9pbnRJZCwgYnJl
YWtwb2ludC5jb25kaXRpb24sIGV2ZW50LnRhcmdldC5jaGVja2VkKTsKIAogICAgICAgICAvLyBC
cmVha3BvaW50IGVsZW1lbnQgbWF5IGhhdmUgaXQncyBvd24gY2xpY2sgaGFuZGxlci4KICAgICAg
ICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9uKCk7CkBAIC0xODYsMjAgKzIwNywyOSBAQCBXZWJJbnNw
ZWN0b3IuSmF2YVNjcmlwdEJyZWFrcG9pbnRzU2lkZWJhclBhbmUucHJvdG90eXBlID0gewogCiAg
ICAgX3NldHVwQnJlYWtwb2ludEVsZW1lbnQ6IGZ1bmN0aW9uKGRhdGEsIGVsZW1lbnQpCiAgICAg
eworICAgICAgICB2YXIgc291cmNlSUQ7CisgICAgICAgIHZhciBsaW5lTnVtYmVyID0gZGF0YS5s
aW5lTnVtYmVyOworICAgICAgICBpZiAoZGF0YS5sb2NhdGlvbnMubGVuZ3RoKSB7CisgICAgICAg
ICAgICBzb3VyY2VJRCA9IGRhdGEubG9jYXRpb25zWzBdLnNvdXJjZUlEOworICAgICAgICAgICAg
bGluZU51bWJlciA9IGRhdGEubG9jYXRpb25zWzBdLmxpbmVOdW1iZXI7CisgICAgICAgIH0KKwog
ICAgICAgICB2YXIgZGlzcGxheU5hbWUgPSBkYXRhLnVybCA/IFdlYkluc3BlY3Rvci5kaXNwbGF5
TmFtZUZvclVSTChkYXRhLnVybCkgOiBXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIihwcm9ncmFtKSIp
OwotICAgICAgICB2YXIgbGFiZWxFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZGlz
cGxheU5hbWUgKyAiOiIgKyBkYXRhLmxpbmVOdW1iZXIpOworICAgICAgICB2YXIgbGFiZWxFbGVt
ZW50ID0gZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoZGlzcGxheU5hbWUgKyAiOiIgKyBsaW5lTnVt
YmVyKTsKICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChsYWJlbEVsZW1lbnQpOwogCiAgICAg
ICAgIHZhciBzb3VyY2VUZXh0RWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIp
OwogICAgICAgICBzb3VyY2VUZXh0RWxlbWVudC5jbGFzc05hbWUgPSAic291cmNlLXRleHQgbW9u
b3NwYWNlIjsKICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGlsZChzb3VyY2VUZXh0RWxlbWVudCk7
CiAKLSAgICAgICAgZnVuY3Rpb24gZGlkR2V0U291cmNlTGluZSh0ZXh0KQotICAgICAgICB7Ci0g
ICAgICAgICAgICBzb3VyY2VUZXh0RWxlbWVudC50ZXh0Q29udGVudCA9IHRleHQ7CisgICAgICAg
IGlmIChzb3VyY2VJRCkgeworICAgICAgICAgICAgZnVuY3Rpb24gZGlkR2V0U291cmNlTGluZSh0
ZXh0KQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIHNvdXJjZVRleHRFbGVtZW50LnRl
eHRDb250ZW50ID0gdGV4dDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHZhciBzY3JpcHQg
PSBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5zY3JpcHRGb3JTb3VyY2VJRChzb3VyY2VJRCk7
CisgICAgICAgICAgICBzY3JpcHQuc291cmNlTGluZShsaW5lTnVtYmVyLCBkaWRHZXRTb3VyY2VM
aW5lLmJpbmQodGhpcykpOwogICAgICAgICB9Ci0gICAgICAgIHZhciBzY3JpcHQgPSBXZWJJbnNw
ZWN0b3IuZGVidWdnZXJNb2RlbC5zY3JpcHRGb3JTb3VyY2VJRChkYXRhLnNvdXJjZUlEKTsKLSAg
ICAgICAgc2NyaXB0LnNvdXJjZUxpbmUoZGF0YS5saW5lTnVtYmVyLCBkaWRHZXRTb3VyY2VMaW5l
LmJpbmQodGhpcykpOwogCiAgICAgICAgIGVsZW1lbnQuYWRkU3R5bGVDbGFzcygiY3Vyc29yLXBv
aW50ZXIiKTsKICAgICAgICAgdmFyIGNsaWNrSGFuZGxlciA9IFdlYkluc3BlY3Rvci5wYW5lbHMu
c2NyaXB0cy5zaG93U291cmNlTGluZS5iaW5kKFdlYkluc3BlY3Rvci5wYW5lbHMuc2NyaXB0cywg
ZGF0YS51cmwsIGRhdGEubGluZU51bWJlcik7CkBAIC0yMTQsMTMgKzI0NCw2IEBAIFdlYkluc3Bl
Y3Rvci5KYXZhU2NyaXB0QnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90b3R5cGUgPSB7CiAgICAg
ICAgICAgICByZXR1cm4gYnJlYWtwb2ludC5pZDsKICAgIH0sCiAKLSAgICBfc2V0QnJlYWtwb2lu
dEVuYWJsZWQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnRJZCwgZW5hYmxlZCkKLSAgICB7Ci0gICAgICAg
IHZhciBicmVha3BvaW50ID0gV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYnJlYWtwb2ludEZv
cklkKGJyZWFrcG9pbnRJZCk7Ci0gICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLnJl
bW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludElkKTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVn
Z2VyTW9kZWwuc2V0QnJlYWtwb2ludChicmVha3BvaW50LnNvdXJjZUlELCBicmVha3BvaW50Lmxp
bmUsIGVuYWJsZWQsIGJyZWFrcG9pbnQuY29uZGl0aW9uKTsKLSAgICB9LAotCiAgICAgX3JlbW92
ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnRJZCkKICAgICB7CiAgICAgICAgIFdlYklu
c3BlY3Rvci5kZWJ1Z2dlck1vZGVsLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludElkKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGVidWdnZXJNb2Rl
bC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvRGVidWdnZXJNb2RlbC5q
cwppbmRleCAzMmQyOGU3Li42N2MxYzE1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvZnJvbnQtZW5kL0RlYnVnZ2VyTW9kZWwuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9EZWJ1Z2dlck1vZGVsLmpzCkBAIC0zMyw3ICszMyw2IEBAIFdlYklu
c3BlY3Rvci5EZWJ1Z2dlck1vZGVsID0gZnVuY3Rpb24oKQogICAgIHRoaXMuX3BhdXNlZCA9IGZh
bHNlOwogICAgIHRoaXMuX2NhbGxGcmFtZXMgPSBbXTsKICAgICB0aGlzLl9icmVha3BvaW50cyA9
IHt9OwotICAgIHRoaXMuX3NvdXJjZUlEQW5kTGluZVRvQnJlYWtwb2ludElkID0ge307CiAgICAg
dGhpcy5fc2NyaXB0cyA9IHt9OwogCiAgICAgSW5zcGVjdG9yQmFja2VuZC5yZWdpc3RlckRvbWFp
bkRpc3BhdGNoZXIoIkRlYnVnZ2VyIiwgbmV3IFdlYkluc3BlY3Rvci5EZWJ1Z2dlckRpc3BhdGNo
ZXIodGhpcykpOwpAQCAtNDYsNzAgKzQ1LDEwOCBAQCBXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2Rl
bC5FdmVudHMgPSB7CiAgICAgRmFpbGVkVG9QYXJzZVNjcmlwdFNvdXJjZTogImZhaWxlZC10by1w
YXJzZS1zY3JpcHQtc291cmNlIiwKICAgICBTY3JpcHRTb3VyY2VDaGFuZ2VkOiAic2NyaXB0LXNv
dXJjZS1jaGFuZ2VkIiwKICAgICBCcmVha3BvaW50QWRkZWQ6ICJicmVha3BvaW50LWFkZGVkIiwK
LSAgICBCcmVha3BvaW50UmVtb3ZlZDogImJyZWFrcG9pbnQtcmVtb3ZlZCIKKyAgICBCcmVha3Bv
aW50UmVtb3ZlZDogImJyZWFrcG9pbnQtcmVtb3ZlZCIsCisgICAgQnJlYWtwb2ludFJlc29sdmVk
OiAiYnJlYWtwb2ludC1yZXNvbHZlZCIKIH0KIAogV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwu
cHJvdG90eXBlID0geworICAgIGVuYWJsZURlYnVnZ2VyOiBmdW5jdGlvbigpCisgICAgeworICAg
ICAgICBJbnNwZWN0b3JCYWNrZW5kLmVuYWJsZURlYnVnZ2VyKCk7CisgICAgICAgIGlmICh0aGlz
Ll9icmVha3BvaW50c1B1c2hlZFRvQmFja2VuZCkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAg
ICAgdmFyIGJyZWFrcG9pbnRzID0gV2ViSW5zcGVjdG9yLnNldHRpbmdzLmJyZWFrcG9pbnRzOwor
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJyZWFrcG9pbnRzLmxlbmd0aDsgKytpKQorICAg
ICAgICAgICAgdGhpcy5fc2V0QnJlYWtwb2ludChicmVha3BvaW50c1tpXSwgdHJ1ZSk7CisgICAg
ICAgIHRoaXMuX2JyZWFrcG9pbnRzUHVzaGVkVG9CYWNrZW5kID0gdHJ1ZTsKKyAgICB9LAorCisg
ICAgZGlzYWJsZURlYnVnZ2VyOiBmdW5jdGlvbigpCisgICAgeworICAgICAgICBJbnNwZWN0b3JC
YWNrZW5kLmRpc2FibGVEZWJ1Z2dlcigpOworICAgIH0sCisKICAgICBjb250aW51ZVRvTGluZTog
ZnVuY3Rpb24oc291cmNlSUQsIGxpbmVOdW1iZXIpCiAgICAgewotICAgICAgICBmdW5jdGlvbiBk
aWRTZXRCcmVha3BvaW50KGJyZWFrcG9pbnRJZCwgYWN0dWFsTGluZU51bWJlcikKLSAgICAgICAg
ewotICAgICAgICAgICAgaWYgKCFicmVha3BvaW50SWQpCi0gICAgICAgICAgICAgICAgcmV0dXJu
OwotICAgICAgICAgICAgaWYgKHRoaXMuZmluZEJyZWFrcG9pbnQoc291cmNlSUQsIGFjdHVhbExp
bmVOdW1iZXIpKSB7Ci0gICAgICAgICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5yZW1vdmVCcmVh
a3BvaW50KGJyZWFrcG9pbnRJZCk7Ci0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKCJfY29udGludWVUb0xpbmVCcmVha3BvaW50SWQiIGluIHRo
aXMpCi0gICAgICAgICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5yZW1vdmVCcmVha3BvaW50KHRo
aXMuX2NvbnRpbnVlVG9MaW5lQnJlYWtwb2ludElkKTsKLSAgICAgICAgICAgIHRoaXMuX2NvbnRp
bnVlVG9MaW5lQnJlYWtwb2ludElkID0gYnJlYWtwb2ludElkOwotICAgICAgICB9Ci0gICAgICAg
IHZhciBicmVha3BvaW50ID0geyBzb3VyY2VJRDogc291cmNlSUQsIGxpbmVOdW1iZXI6IGxpbmVO
dW1iZXIsIGNvbHVtbk51bWJlcjogMSwgY29uZGl0aW9uOiAiIiwgZW5hYmxlZDogdHJ1ZSB9Owot
ICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnNldEJyZWFrcG9pbnQoYnJlYWtwb2ludCwgZGlkU2V0
QnJlYWtwb2ludC5iaW5kKHRoaXMpKTsKLSAgICAgICAgaWYgKHRoaXMuX3BhdXNlZCkKLSAgICAg
ICAgICAgIEluc3BlY3RvckJhY2tlbmQucmVzdW1lKCk7CisgICAgICAgIEluc3BlY3RvckJhY2tl
bmQuY29udGludWVUb0xvY2F0aW9uKHNvdXJjZUlELCBsaW5lTnVtYmVyLCAxKTsKICAgICB9LAog
CiAgICAgc2V0QnJlYWtwb2ludDogZnVuY3Rpb24oc291cmNlSUQsIGxpbmVOdW1iZXIsIGVuYWJs
ZWQsIGNvbmRpdGlvbikKICAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIGRpZFNldEJyZWFrcG9pbnQo
YnJlYWtwb2ludElkLCBhY3R1YWxMaW5lTnVtYmVyLCBhY3R1YWxDb2x1bW5OdW1iZXIpCi0gICAg
ICAgIHsKLSAgICAgICAgICAgIGlmICghYnJlYWtwb2ludElkKQotICAgICAgICAgICAgICAgIHJl
dHVybjsKLSAgICAgICAgICAgIGJyZWFrcG9pbnQub3JpZ2luYWxMaW5lTnVtYmVyID0gYnJlYWtw
b2ludC5saW5lTnVtYmVyOwotICAgICAgICAgICAgYnJlYWtwb2ludC5vcmlnaW5hbENvbHVtbnVt
YmVyID0gYnJlYWtwb2ludC5jb2x1bW5OdW1iZXI7Ci0gICAgICAgICAgICBicmVha3BvaW50Lmxp
bmVOdW1iZXIgPSBhY3R1YWxMaW5lTnVtYmVyOwotICAgICAgICAgICAgYnJlYWtwb2ludC5jb2x1
bW5OdW1iZXIgPSBhY3R1YWxDb2x1bW5OdW1iZXI7Ci0gICAgICAgICAgICB0aGlzLl9icmVha3Bv
aW50U2V0T25CYWNrZW5kKGJyZWFrcG9pbnRJZCwgYnJlYWtwb2ludCwgZmFsc2UpOwotICAgICAg
ICB9Ci0gICAgICAgIHZhciBicmVha3BvaW50ID0geyBzb3VyY2VJRDogc291cmNlSUQsIGxpbmVO
dW1iZXI6IGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcjogMSwgY29uZGl0aW9uOiBjb25kaXRpb24s
IGVuYWJsZWQ6IGVuYWJsZWQgfTsKLSAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRCcmVha3Bv
aW50KGJyZWFrcG9pbnQsIGRpZFNldEJyZWFrcG9pbnQuYmluZCh0aGlzKSk7CisgICAgICAgIHZh
ciBicmVha3BvaW50ID0ge307CisgICAgICAgIGJyZWFrcG9pbnQudXJsID0gdGhpcy5zY3JpcHRG
b3JTb3VyY2VJRChzb3VyY2VJRCkuc291cmNlVVJMOworICAgICAgICBicmVha3BvaW50LnNvdXJj
ZUlEID0gc291cmNlSUQ7CisgICAgICAgIGJyZWFrcG9pbnQubGluZU51bWJlciA9IGxpbmVOdW1i
ZXI7CisgICAgICAgIGJyZWFrcG9pbnQuY29sdW1uTnVtYmVyID0gMTsKKyAgICAgICAgYnJlYWtw
b2ludC5jb25kaXRpb24gPSBjb25kaXRpb247CisgICAgICAgIGJyZWFrcG9pbnQuZW5hYmxlZCA9
IGVuYWJsZWQ7CisgICAgICAgIHRoaXMuX3NldEJyZWFrcG9pbnQoYnJlYWtwb2ludCk7CiAgICAg
fSwKIAogICAgIHJlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnRJZCkKICAgICB7
Ci0gICAgICAgIEluc3BlY3RvckJhY2tlbmQucmVtb3ZlQnJlYWtwb2ludChicmVha3BvaW50SWQp
OworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlbW92ZUphdmFTY3JpcHRCcmVha3BvaW50KGJy
ZWFrcG9pbnRJZCk7CiAgICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fYnJlYWtwb2ludHNb
YnJlYWtwb2ludElkXTsKICAgICAgICAgZGVsZXRlIHRoaXMuX2JyZWFrcG9pbnRzW2JyZWFrcG9p
bnRJZF07Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9zb3VyY2VJREFuZExpbmVUb0JyZWFrcG9pbnRJ
ZFt0aGlzLl9lbmNvZGVTb3VyY2VJREFuZExpbmUoYnJlYWtwb2ludC5zb3VyY2VJRCwgYnJlYWtw
b2ludC5saW5lKV07CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdlYklu
c3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5CcmVha3BvaW50UmVtb3ZlZCwgYnJlYWtwb2lu
dElkKTsKLSAgICAgICAgYnJlYWtwb2ludC5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoInJlbW92
ZWQiKTsKKyAgICAgICAgdGhpcy5fc2F2ZUJyZWFrcG9pbnRzKCk7CisgICAgfSwKKworICAgIHVw
ZGF0ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnRJZCwgY29uZGl0aW9uLCBlbmFibGVk
KQorICAgIHsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9icmVha3BvaW50c1ticmVh
a3BvaW50SWRdOworICAgICAgICB0aGlzLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludElkKTsK
KyAgICAgICAgYnJlYWtwb2ludC5jb25kaXRpb24gPSBjb25kaXRpb247CisgICAgICAgIGJyZWFr
cG9pbnQuZW5hYmxlZCA9IGVuYWJsZWQ7CisgICAgICAgIHRoaXMuX3NldEJyZWFrcG9pbnQoYnJl
YWtwb2ludCk7CisgICAgfSwKKworICAgIF9zZXRCcmVha3BvaW50OiBmdW5jdGlvbihicmVha3Bv
aW50LCByZXN0b3JlZCkKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIGRpZFNldEJyZWFrcG9pbnQo
YnJlYWtwb2ludElkLCBsb2NhdGlvbnMpCisgICAgICAgIHsKKyAgICAgICAgICAgIGlmICghYnJl
YWtwb2ludElkKQorICAgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIGJyZWFrcG9p
bnQuaWQgPSBicmVha3BvaW50SWQ7CisgICAgICAgICAgICBicmVha3BvaW50LmxvY2F0aW9ucyA9
IGxvY2F0aW9uczsKKyAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzW2JyZWFrcG9pbnRJZF0g
PSBicmVha3BvaW50OworICAgICAgICAgICAgaWYgKCFyZXN0b3JlZCkKKyAgICAgICAgICAgICAg
ICB0aGlzLl9zYXZlQnJlYWtwb2ludHMoKTsKKyAgICAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVu
dFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5CcmVha3BvaW50
QWRkZWQsIGJyZWFrcG9pbnQpOyAgICAgICAgICAgIAorICAgICAgICB9CisgICAgICAgIEluc3Bl
Y3RvckJhY2tlbmQuc2V0SmF2YVNjcmlwdEJyZWFrcG9pbnQoYnJlYWtwb2ludCwgZGlkU2V0QnJl
YWtwb2ludC5iaW5kKHRoaXMpKTsKICAgICB9LAogCi0gICAgX2JyZWFrcG9pbnRTZXRPbkJhY2tl
bmQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnRJZCwgYnJlYWtwb2ludERhdGEsIHJlc3RvcmVkKQorICAg
IF9icmVha3BvaW50UmVzb2x2ZWQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnRJZCwgbG9jYXRpb24pCiAg
ICAgewotICAgICAgICB2YXIgc291cmNlSURBbmRMaW5lID0gdGhpcy5fZW5jb2RlU291cmNlSURB
bmRMaW5lKGJyZWFrcG9pbnREYXRhLnNvdXJjZUlELCBicmVha3BvaW50RGF0YS5saW5lTnVtYmVy
KTsKLSAgICAgICAgaWYgKHNvdXJjZUlEQW5kTGluZSBpbiB0aGlzLl9zb3VyY2VJREFuZExpbmVU
b0JyZWFrcG9pbnRJZCkgewotICAgICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5yZW1vdmVCcmVh
a3BvaW50KGJyZWFrcG9pbnRJZCk7CisgICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fYnJl
YWtwb2ludHNbYnJlYWtwb2ludElkXTsKKyAgICAgICAgaWYgKCFicmVha3BvaW50KQogICAgICAg
ICAgICAgcmV0dXJuOworICAgICAgICBicmVha3BvaW50LmxvY2F0aW9ucy5wdXNoKGxvY2F0aW9u
KTsKKyAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRl
YnVnZ2VyTW9kZWwuRXZlbnRzLkJyZWFrcG9pbnRSZXNvbHZlZCwgYnJlYWtwb2ludCk7CisgICAg
fSwKKworICAgIF9zYXZlQnJlYWtwb2ludHM6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIHZh
ciBzZXJpYWxpemVkQnJlYWtwb2ludHMgPSBbXTsKKyAgICAgICAgZm9yICh2YXIgaWQgaW4gdGhp
cy5fYnJlYWtwb2ludHMpIHsKKyAgICAgICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fYnJl
YWtwb2ludHNbaWRdOworICAgICAgICAgICAgaWYgKCFicmVha3BvaW50LnVybCkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHZhciBzZXJpYWxpemVkQnJlYWtwb2ludCA9
IHt9OworICAgICAgICAgICAgc2VyaWFsaXplZEJyZWFrcG9pbnQudXJsID0gYnJlYWtwb2ludC51
cmw7CisgICAgICAgICAgICBzZXJpYWxpemVkQnJlYWtwb2ludC5saW5lTnVtYmVyID0gYnJlYWtw
b2ludC5saW5lTnVtYmVyOworICAgICAgICAgICAgc2VyaWFsaXplZEJyZWFrcG9pbnQuY29sdW1u
TnVtYmVyID0gYnJlYWtwb2ludC5jb2x1bW5OdW1iZXI7CisgICAgICAgICAgICBzZXJpYWxpemVk
QnJlYWtwb2ludC5jb25kaXRpb24gPSBicmVha3BvaW50LmNvbmRpdGlvbjsKKyAgICAgICAgICAg
IHNlcmlhbGl6ZWRCcmVha3BvaW50LmVuYWJsZWQgPSBicmVha3BvaW50LmVuYWJsZWQ7CisgICAg
ICAgICAgICBzZXJpYWxpemVkQnJlYWtwb2ludHMucHVzaChzZXJpYWxpemVkQnJlYWtwb2ludCk7
CiAgICAgICAgIH0KKyAgICAgICAgV2ViSW5zcGVjdG9yLnNldHRpbmdzLmJyZWFrcG9pbnRzID0g
c2VyaWFsaXplZEJyZWFrcG9pbnRzOworICAgIH0sCiAKLSAgICAgICAgdmFyIGJyZWFrcG9pbnQg
PSBuZXcgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQodGhpcywgYnJlYWtwb2ludElkLCBicmVha3Bv
aW50RGF0YSk7Ci0gICAgICAgIGJyZWFrcG9pbnQucmVzdG9yZWQgPSByZXN0b3JlZDsKLSAgICAg
ICAgYnJlYWtwb2ludC5vcmlnaW5hbExpbmVOdW1iZXIgPSBicmVha3BvaW50RGF0YS5vcmlnaW5h
bExpbmVOdW1iZXI7Ci0gICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzW2JyZWFrcG9pbnRJZF0gPSBi
cmVha3BvaW50OwotICAgICAgICB0aGlzLl9zb3VyY2VJREFuZExpbmVUb0JyZWFrcG9pbnRJZFtz
b3VyY2VJREFuZExpbmVdID0gYnJlYWtwb2ludElkOwotICAgICAgICB0aGlzLmRpc3BhdGNoRXZl
bnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMuQnJlYWtwb2lu
dEFkZGVkLCBicmVha3BvaW50KTsKKyAgICBnZXQgYnJlYWtwb2ludHMoKQorICAgIHsKKyAgICAg
ICAgcmV0dXJuIHRoaXMuX2JyZWFrcG9pbnRzOwogICAgIH0sCiAKICAgICBicmVha3BvaW50Rm9y
SWQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnRJZCkKQEAgLTEzMCwyMyArMTY3LDI2IEBAIFdlYkluc3Bl
Y3Rvci5EZWJ1Z2dlck1vZGVsLnByb3RvdHlwZSA9IHsKIAogICAgIGZpbmRCcmVha3BvaW50OiBm
dW5jdGlvbihzb3VyY2VJRCwgbGluZU51bWJlcikKICAgICB7Ci0gICAgICAgIHZhciBzb3VyY2VJ
REFuZExpbmUgPSB0aGlzLl9lbmNvZGVTb3VyY2VJREFuZExpbmUoc291cmNlSUQsIGxpbmVOdW1i
ZXIpOwotICAgICAgICB2YXIgYnJlYWtwb2ludElkID0gdGhpcy5fc291cmNlSURBbmRMaW5lVG9C
cmVha3BvaW50SWRbc291cmNlSURBbmRMaW5lXTsKLSAgICAgICAgcmV0dXJuIHRoaXMuX2JyZWFr
cG9pbnRzW2JyZWFrcG9pbnRJZF07Ci0gICAgfSwKLQotICAgIF9lbmNvZGVTb3VyY2VJREFuZExp
bmU6IGZ1bmN0aW9uKHNvdXJjZUlELCBsaW5lTnVtYmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJu
IHNvdXJjZUlEICsgIjoiICsgbGluZU51bWJlcjsKKyAgICAgICAgZm9yICh2YXIgaWQgaW4gdGhp
cy5fYnJlYWtwb2ludHMpIHsKKyAgICAgICAgICAgIHZhciBsb2NhdGlvbnMgPSB0aGlzLl9icmVh
a3BvaW50c1tpZF0ubG9jYXRpb25zOworICAgICAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBs
b2NhdGlvbnMubGVuZ3RoOyArK2kpIHsKKyAgICAgICAgICAgICAgICBpZiAobG9jYXRpb25zW2ld
LnNvdXJjZUlEID09PSBzb3VyY2VJRCAmJiBsb2NhdGlvbnNbaV0ubGluZU51bWJlciA9PT0gbGlu
ZU51bWJlcikKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIHRoaXMuX2JyZWFrcG9pbnRzW2lk
XTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQogICAgIH0sCiAKICAgICByZXNldDogZnVuY3Rp
b24oKQogICAgIHsKICAgICAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7CiAgICAgICAgIHRoaXMu
X2NhbGxGcmFtZXMgPSBbXTsKLSAgICAgICAgdGhpcy5fYnJlYWtwb2ludHMgPSB7fTsKLSAgICAg
ICAgZGVsZXRlIHRoaXMuX29uZVRpbWVCcmVha3BvaW50OwotICAgICAgICB0aGlzLl9zb3VyY2VJ
REFuZExpbmVUb0JyZWFrcG9pbnRJZCA9IHt9OworICAgICAgICBmb3IgKHZhciBpZCBpbiB0aGlz
Ll9icmVha3BvaW50cykgeworICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9icmVh
a3BvaW50c1tpZF07CisgICAgICAgICAgICBpZiAoIWJyZWFrcG9pbnQudXJsKQorICAgICAgICAg
ICAgICAgIHRoaXMucmVtb3ZlQnJlYWtwb2ludChpZCk7CisgICAgICAgICAgICBlbHNlCisgICAg
ICAgICAgICAgICAgYnJlYWtwb2ludC5sb2NhdGlvbnMgPSBbXTsKKyAgICAgICAgfQogICAgICAg
ICB0aGlzLl9zY3JpcHRzID0ge307CiAgICAgfSwKIApAQCAtMjI5LDEwICsyNjksNiBAQCBXZWJJ
bnNwZWN0b3IuRGVidWdnZXJNb2RlbC5wcm90b3R5cGUgPSB7CiAgICAgewogICAgICAgICB0aGlz
Ll9wYXVzZWQgPSB0cnVlOwogICAgICAgICB0aGlzLl9jYWxsRnJhbWVzID0gZGV0YWlscy5jYWxs
RnJhbWVzOwotICAgICAgICBpZiAoIl9jb250aW51ZVRvTGluZUJyZWFrcG9pbnRJZCIgaW4gdGhp
cykgewotICAgICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5yZW1vdmVCcmVha3BvaW50KHRoaXMu
X2NvbnRpbnVlVG9MaW5lQnJlYWtwb2ludElkKTsKLSAgICAgICAgICAgIGRlbGV0ZSB0aGlzLl9j
b250aW51ZVRvTGluZUJyZWFrcG9pbnRJZDsKLSAgICAgICAgfQogICAgICAgICB0aGlzLmRpc3Bh
dGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMuRGVi
dWdnZXJQYXVzZWQsIGRldGFpbHMpOwogICAgIH0sCiAKQEAgLTMwMSw5ICszMzcsOSBAQCBXZWJJ
bnNwZWN0b3IuRGVidWdnZXJEaXNwYXRjaGVyLnByb3RvdHlwZSA9IHsKICAgICAgICAgdGhpcy5f
ZGVidWdnZXJNb2RlbC5fZmFpbGVkVG9QYXJzZVNjcmlwdFNvdXJjZShzb3VyY2VVUkwsIHNvdXJj
ZSwgc3RhcnRpbmdMaW5lLCBlcnJvckxpbmUsIGVycm9yTWVzc2FnZSk7CiAgICAgfSwKIAotICAg
IGJyZWFrcG9pbnRSZXNvbHZlZDogZnVuY3Rpb24oYnJlYWtwb2ludElkLCBicmVha3BvaW50KQor
ICAgIGJyZWFrcG9pbnRSZXNvbHZlZDogZnVuY3Rpb24oYnJlYWtwb2ludElkLCBsb2NhdGlvbikK
ICAgICB7Ci0gICAgICAgIHRoaXMuX2RlYnVnZ2VyTW9kZWwuX2JyZWFrcG9pbnRTZXRPbkJhY2tl
bmQoYnJlYWtwb2ludElkLCBicmVha3BvaW50LCB0cnVlKTsKKyAgICAgICAgdGhpcy5fZGVidWdn
ZXJNb2RlbC5fYnJlYWtwb2ludFJlc29sdmVkKGJyZWFrcG9pbnRJZCwgbG9jYXRpb24pOwogICAg
IH0sCiAKICAgICBkaWRDcmVhdGVXb3JrZXI6IGZ1bmN0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMKaW5kZXggZGRjOTA2YS4u
NzVjNjg0MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9T
Y3JpcHRzUGFuZWwuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9T
Y3JpcHRzUGFuZWwuanMKQEAgLTgwMywxMCArODAzLDEwIEBAIFdlYkluc3BlY3Rvci5TY3JpcHRz
UGFuZWwucHJvdG90eXBlID0gewogCiAgICAgICAgIGlmICh0aGlzLl9kZWJ1Z2dlckVuYWJsZWQp
IHsKICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5zZXR0aW5ncy5kZWJ1Z2dlckVuYWJsZWQgPSBm
YWxzZTsKLSAgICAgICAgICAgIEluc3BlY3RvckJhY2tlbmQuZGlzYWJsZURlYnVnZ2VyKCk7Cisg
ICAgICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5kaXNhYmxlRGVidWdnZXIoKTsK
ICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5zZXR0aW5ncy5kZWJ1
Z2dlckVuYWJsZWQgPSAhIW9wdGlvbmFsQWx3YXlzOwotICAgICAgICAgICAgSW5zcGVjdG9yQmFj
a2VuZC5lbmFibGVEZWJ1Z2dlcigpOworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2Vy
TW9kZWwuZW5hYmxlRGVidWdnZXIoKTsKICAgICAgICAgfQogICAgIH0sCiAKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2V0dGluZ3MuanMgYi9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NldHRpbmdzLmpzCmluZGV4IDFjZWE1ZTEuLjgz
ZWJhZjAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2V0
dGluZ3MuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5n
cy5qcwpAQCAtNzEsOCArNzEsOCBAQCBXZWJJbnNwZWN0b3IuU2V0dGluZ3MgPSBmdW5jdGlvbigp
CiAgICAgdGhpcy5pbnN0YWxsQXBwbGljYXRpb25TZXR0aW5nKCJzaG93SW5oZXJpdGVkQ29tcHV0
ZWRTdHlsZVByb3BlcnRpZXMiLCBmYWxzZSk7CiAgICAgdGhpcy5pbnN0YWxsQXBwbGljYXRpb25T
ZXR0aW5nKCJzaG93VXNlckFnZW50U3R5bGVzIiwgdHJ1ZSk7CiAgICAgdGhpcy5pbnN0YWxsQXBw
bGljYXRpb25TZXR0aW5nKCJ3YXRjaEV4cHJlc3Npb25zIiwgW10pOworICAgIHRoaXMuaW5zdGFs
bEFwcGxpY2F0aW9uU2V0dGluZygiYnJlYWtwb2ludHMiLCBbXSk7CiAKLSAgICB0aGlzLmluc3Rh
bGxQcm9qZWN0U2V0dGluZygiYnJlYWtwb2ludHMiLCB7fSk7CiAgICAgdGhpcy5pbnN0YWxsUHJv
amVjdFNldHRpbmcoIm5hdGl2ZUJyZWFrcG9pbnRzIiwgW10pOwogfQogCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcwppbmRleCA4MjEwNzRh
Li5jYmJjNDE0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L1NvdXJjZUZyYW1lLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
U291cmNlRnJhbWUuanMKQEAgLTIwOCw2ICsyMDgsOCBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJh
bWUucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmVuZFVwZGF0ZXMoKTsK
IAogICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdl
Ykluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5CcmVha3BvaW50QWRkZWQsIHRoaXMuX2Jy
ZWFrcG9pbnRBZGRlZCwgdGhpcyk7CisgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVs
LmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkJyZWFr
cG9pbnRSZW1vdmVkLCB0aGlzLl9icmVha3BvaW50UmVtb3ZlZCwgdGhpcyk7CisgICAgICAgIFdl
Ykluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRl
YnVnZ2VyTW9kZWwuRXZlbnRzLkJyZWFrcG9pbnRSZXNvbHZlZCwgdGhpcy5fYnJlYWtwb2ludFJl
c29sdmVkLCB0aGlzKTsKIAogICAgICAgICBpZiAodGhpcy5fY2FuRWRpdFNjcmlwdHMpCiAgICAg
ICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmVkaXRDYWxsYmFjayA9IHRoaXMuX2VkaXRMaW5lLmJp
bmQodGhpcyk7CkBAIC0yMjYsMTUgKzIyOCwyOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUu
cHJvdG90eXBlID0gewogICAgICAgICBpZiAodGhpcy5fZXhlY3V0aW9uTGluZSkKICAgICAgICAg
ICAgIHRoaXMuc2V0RXhlY3V0aW9uTGluZSh0aGlzLl9leGVjdXRpb25MaW5lKTsKIAotICAgICAg
ICB2YXIgYnJlYWtwb2ludHMgPSB0aGlzLl9icmVha3BvaW50cygpOwotICAgICAgICBmb3IgKHZh
ciBpID0gMDsgaSA8IGJyZWFrcG9pbnRzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgdGhpcy5f
YWRkQnJlYWtwb2ludChicmVha3BvaW50c1tpXSk7CisgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRJ
ZFRvVGV4dFZpZXdlckxpbmVOdW1iZXIgPSB7fTsKKyAgICAgICAgdGhpcy5fdGV4dFZpZXdlckxp
bmVOdW1iZXJUb0JyZWFrcG9pbnRJZCA9IHt9OworICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSBX
ZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5icmVha3BvaW50czsKKyAgICAgICAgZm9yICh2YXIg
aWQgaW4gYnJlYWtwb2ludHMpCisgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50QWRkZWQoeyBk
YXRhOiBicmVha3BvaW50c1tpZF0gfSk7CiAKICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5yZXNp
emUoKTsKIAogICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmVuZFVwZGF0ZXMoKTsKICAgICB9LAog
CisgICAgX3Nob3VsZERpc3BsYXlCcmVha3BvaW50OiBmdW5jdGlvbihicmVha3BvaW50KQorICAg
IHsKKyAgICAgICAgaWYgKHRoaXMuX3VybCkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl91cmwg
PT09IGJyZWFrcG9pbnQudXJsOworICAgICAgICB2YXIgc2NyaXB0cyA9IHRoaXMuX2NvbnRlbnRQ
cm92aWRlci5zY3JpcHRzKCk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NyaXB0cy5s
ZW5ndGg7ICsraSkgeworICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQuc291cmNlSUQgPT09IHNj
cmlwdHNbaV0uc291cmNlSUQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAg
IH0KKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0sCisKICAgICBwZXJmb3JtU2VhcmNoOiBm
dW5jdGlvbihxdWVyeSwgY2FsbGJhY2spCiAgICAgewogICAgICAgICAvLyBDYWxsIHNlYXJjaENh
bmNlbGVkIHNpbmNlIGl0IHdpbGwgcmVzZXQgZXZlcnl0aGluZyB3ZSBuZWVkIGJlZm9yZSBkb2lu
ZyBhIG5ldyBzZWFyY2guCkBAIC00NTgsNTQgKzQ3NCw1NSBAQCBXZWJJbnNwZWN0b3IuU291cmNl
RnJhbWUucHJvdG90eXBlID0gewogICAgIHsKICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBldmVu
dC5kYXRhOwogCi0gICAgICAgIGlmIChicmVha3BvaW50LnNvdXJjZUlEIGluIHRoaXMuX3NvdXJj
ZUlEU2V0KCkpCi0gICAgICAgICAgICB0aGlzLl9hZGRCcmVha3BvaW50KGJyZWFrcG9pbnQpOwot
ICAgIH0sCisgICAgICAgIGlmICghdGhpcy5fc2hvdWxkRGlzcGxheUJyZWFrcG9pbnQoYnJlYWtw
b2ludCkpCisgICAgICAgICAgICByZXR1cm47CiAKLSAgICBfYWRkQnJlYWtwb2ludDogZnVuY3Rp
b24oYnJlYWtwb2ludCkKLSAgICB7Ci0gICAgICAgIHZhciB0ZXh0Vmlld2VyTGluZU51bWJlciA9
IHRoaXMuX2Zvcm1hdHRlci5vcmlnaW5hbExpbmVOdW1iZXJUb0Zvcm1hdHRlZExpbmVOdW1iZXIo
YnJlYWtwb2ludC5saW5lIC0gMSk7CisgICAgICAgIHZhciByZXNvbHZlZCA9IGJyZWFrcG9pbnQu
bG9jYXRpb25zLmxlbmd0aDsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnRMaW5lTnVtYmVyID0gYnJl
YWtwb2ludC5saW5lTnVtYmVyOworICAgICAgICBpZiAocmVzb2x2ZWQpCisgICAgICAgICAgICBi
cmVha3BvaW50TGluZU51bWJlciA9IGJyZWFrcG9pbnQubG9jYXRpb25zWzBdLmxpbmVOdW1iZXI7
CisKKyAgICAgICAgdmFyIHRleHRWaWV3ZXJMaW5lTnVtYmVyID0gdGhpcy5fZm9ybWF0dGVyLm9y
aWdpbmFsTGluZU51bWJlclRvRm9ybWF0dGVkTGluZU51bWJlcihicmVha3BvaW50TGluZU51bWJl
ciAtIDEpOwogICAgICAgICBpZiAodGV4dFZpZXdlckxpbmVOdW1iZXIgPj0gdGhpcy5fdGV4dE1v
ZGVsLmxpbmVzQ291bnQpCiAgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgYnJlYWtwb2lu
dC5hZGRFdmVudExpc3RlbmVyKCJlbmFibGUtY2hhbmdlZCIsIHRoaXMuX2JyZWFrcG9pbnRDaGFu
Z2VkLCB0aGlzKTsKLSAgICAgICAgYnJlYWtwb2ludC5hZGRFdmVudExpc3RlbmVyKCJjb25kaXRp
b24tY2hhbmdlZCIsIHRoaXMuX2JyZWFrcG9pbnRDaGFuZ2VkLCB0aGlzKTsKLSAgICAgICAgYnJl
YWtwb2ludC5hZGRFdmVudExpc3RlbmVyKCJyZW1vdmVkIiwgdGhpcy5fYnJlYWtwb2ludFJlbW92
ZWQsIHRoaXMpOworICAgICAgICB2YXIgZXhpc3RpbmdCcmVha3BvaW50SWQgPSB0aGlzLl90ZXh0
Vmlld2VyTGluZU51bWJlclRvQnJlYWtwb2ludElkW3RleHRWaWV3ZXJMaW5lTnVtYmVyXTsKKyAg
ICAgICAgaWYgKGV4aXN0aW5nQnJlYWtwb2ludElkKQorICAgICAgICAgICAgV2ViSW5zcGVjdG9y
LmRlYnVnZ2VyTW9kZWwucmVtb3ZlQnJlYWtwb2ludChleGlzdGluZ0JyZWFrcG9pbnRJZCk7CiAK
LSAgICAgICAgdGhpcy5fc2V0QnJlYWtwb2ludERlY29yYXRpb24odGV4dFZpZXdlckxpbmVOdW1i
ZXIsIGJyZWFrcG9pbnQuZW5hYmxlZCwgISFicmVha3BvaW50LmNvbmRpdGlvbik7CisgICAgICAg
IHRoaXMuX2JyZWFrcG9pbnRJZFRvVGV4dFZpZXdlckxpbmVOdW1iZXJbYnJlYWtwb2ludC5pZF0g
PSB0ZXh0Vmlld2VyTGluZU51bWJlcjsKKyAgICAgICAgdGhpcy5fdGV4dFZpZXdlckxpbmVOdW1i
ZXJUb0JyZWFrcG9pbnRJZFt0ZXh0Vmlld2VyTGluZU51bWJlcl0gPSBicmVha3BvaW50LmlkOwor
ICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50RGVjb3JhdGlvbih0ZXh0Vmlld2VyTGluZU51bWJl
ciwgcmVzb2x2ZWQsIGJyZWFrcG9pbnQuZW5hYmxlZCwgISFicmVha3BvaW50LmNvbmRpdGlvbik7
CiAgICAgfSwKIAogICAgIF9icmVha3BvaW50UmVtb3ZlZDogZnVuY3Rpb24oZXZlbnQpCiAgICAg
ewotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGV2ZW50LnRhcmdldDsKKyAgICAgICAgdmFyIGJy
ZWFrcG9pbnRJZCA9IGV2ZW50LmRhdGE7CiAKLSAgICAgICAgYnJlYWtwb2ludC5yZW1vdmVFdmVu
dExpc3RlbmVyKCJlbmFibGUtY2hhbmdlZCIsIG51bGwsIHRoaXMpOwotICAgICAgICBicmVha3Bv
aW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImNvbmRpdGlvbi1jaGFuZ2VkIiwgbnVsbCwgdGhpcyk7
Ci0gICAgICAgIGJyZWFrcG9pbnQucmVtb3ZlRXZlbnRMaXN0ZW5lcigicmVtb3ZlZCIsIG51bGws
IHRoaXMpOworICAgICAgICB2YXIgdGV4dFZpZXdlckxpbmVOdW1iZXIgPSB0aGlzLl9icmVha3Bv
aW50SWRUb1RleHRWaWV3ZXJMaW5lTnVtYmVyW2JyZWFrcG9pbnRJZF07CisgICAgICAgIGlmICh0
ZXh0Vmlld2VyTGluZU51bWJlciA9PT0gdW5kZWZpbmVkKQorICAgICAgICAgICAgcmV0dXJuOwog
Ci0gICAgICAgIHZhciB0ZXh0Vmlld2VyTGluZU51bWJlciA9IHRoaXMuX2Zvcm1hdHRlci5vcmln
aW5hbExpbmVOdW1iZXJUb0Zvcm1hdHRlZExpbmVOdW1iZXIoYnJlYWtwb2ludC5saW5lIC0gMSk7
CisgICAgICAgIGRlbGV0ZSB0aGlzLl9icmVha3BvaW50SWRUb1RleHRWaWV3ZXJMaW5lTnVtYmVy
W2JyZWFrcG9pbnRJZF07CisgICAgICAgIGRlbGV0ZSB0aGlzLl90ZXh0Vmlld2VyTGluZU51bWJl
clRvQnJlYWtwb2ludElkW3RleHRWaWV3ZXJMaW5lTnVtYmVyXTsKICAgICAgICAgdGhpcy5fcmVt
b3ZlQnJlYWtwb2ludERlY29yYXRpb24odGV4dFZpZXdlckxpbmVOdW1iZXIpOwogICAgIH0sCiAK
LSAgICBfYnJlYWtwb2ludENoYW5nZWQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIF9icmVha3BvaW50
UmVzb2x2ZWQ6IGZ1bmN0aW9uKGV2ZW50KQogICAgIHsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnQg
PSBldmVudC50YXJnZXQ7Ci0gICAgICAgIHZhciB0ZXh0Vmlld2VyTGluZU51bWJlciA9IHRoaXMu
X2Zvcm1hdHRlci5vcmlnaW5hbExpbmVOdW1iZXJUb0Zvcm1hdHRlZExpbmVOdW1iZXIoYnJlYWtw
b2ludC5saW5lIC0gMSk7Ci0gICAgICAgIHRoaXMuX3NldEJyZWFrcG9pbnREZWNvcmF0aW9uKHRl
eHRWaWV3ZXJMaW5lTnVtYmVyLCBicmVha3BvaW50LmVuYWJsZWQsICEhYnJlYWtwb2ludC5jb25k
aXRpb24pOworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGV2ZW50LmRhdGE7CisgICAgICAgIHRo
aXMuX2JyZWFrcG9pbnRSZW1vdmVkKHsgZGF0YTogYnJlYWtwb2ludC5pZCB9KTsKKyAgICAgICAg
dGhpcy5fYnJlYWtwb2ludEFkZGVkKHsgZGF0YTogYnJlYWtwb2ludCB9KTsKICAgICB9LAogCi0g
ICAgX3NldEJyZWFrcG9pbnREZWNvcmF0aW9uOiBmdW5jdGlvbihsaW5lTnVtYmVyLCBlbmFibGVk
LCBoYXNDb25kaXRpb24pCisgICAgX3NldEJyZWFrcG9pbnREZWNvcmF0aW9uOiBmdW5jdGlvbihs
aW5lTnVtYmVyLCByZXNvbHZlZCwgZW5hYmxlZCwgaGFzQ29uZGl0aW9uKQogICAgIHsKICAgICAg
ICAgdGhpcy5fdGV4dFZpZXdlci5iZWdpblVwZGF0ZXMoKTsKICAgICAgICAgdGhpcy5fdGV4dFZp
ZXdlci5hZGREZWNvcmF0aW9uKGxpbmVOdW1iZXIsICJ3ZWJraXQtYnJlYWtwb2ludCIpOwotICAg
ICAgICBpZiAoZW5hYmxlZCkKLSAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIucmVtb3ZlRGVj
b3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQtZGlzYWJsZWQiKTsKLSAgICAg
ICAgZWxzZQorICAgICAgICBpZiAoIWVuYWJsZWQpCiAgICAgICAgICAgICB0aGlzLl90ZXh0Vmll
d2VyLmFkZERlY29yYXRpb24obGluZU51bWJlciwgIndlYmtpdC1icmVha3BvaW50LWRpc2FibGVk
Iik7CiAgICAgICAgIGlmIChoYXNDb25kaXRpb24pCiAgICAgICAgICAgICB0aGlzLl90ZXh0Vmll
d2VyLmFkZERlY29yYXRpb24obGluZU51bWJlciwgIndlYmtpdC1icmVha3BvaW50LWNvbmRpdGlv
bmFsIik7Ci0gICAgICAgIGVsc2UKLSAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIucmVtb3Zl
RGVjb3JhdGlvbihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQtY29uZGl0aW9uYWwiKTsK
ICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5lbmRVcGRhdGVzKCk7CiAgICAgfSwKIApAQCAtNTMz
LDE0ICs1NTAsMTQgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZSA9IHsKIAog
ICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiQ29u
dGludWUgdG8gSGVyZSIpLCB0aGlzLl9jb250aW51ZVRvTGluZS5iaW5kKHRoaXMsIG9yaWdpbmFs
TGluZU51bWJlcikpOwogCi0gICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fZmluZEJyZWFr
cG9pbnQob3JpZ2luYWxMaW5lTnVtYmVyKTsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlz
Ll9maW5kQnJlYWtwb2ludCh0ZXh0Vmlld2VyTGluZU51bWJlcik7CiAgICAgICAgIGlmICghYnJl
YWtwb2ludCkgewogICAgICAgICAgICAgLy8gVGhpcyByb3cgZG9lc24ndCBoYXZlIGEgYnJlYWtw
b2ludDogV2Ugd2FudCB0byBzaG93IEFkZCBCcmVha3BvaW50IGFuZCBBZGQgYW5kIEVkaXQgQnJl
YWtwb2ludC4KICAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9y
LlVJU3RyaW5nKCJBZGQgQnJlYWtwb2ludCIpLCB0aGlzLl9zZXRCcmVha3BvaW50LmJpbmQodGhp
cywgb3JpZ2luYWxMaW5lTnVtYmVyLCAiIiwgdHJ1ZSkpOwogCiAgICAgICAgICAgICBmdW5jdGlv
biBhZGRDb25kaXRpb25hbEJyZWFrcG9pbnQoKQogICAgICAgICAgICAgewotICAgICAgICAgICAg
ICAgIHRoaXMuX3NldEJyZWFrcG9pbnREZWNvcmF0aW9uKHRleHRWaWV3ZXJMaW5lTnVtYmVyLCB0
cnVlLCB0cnVlKTsKKyAgICAgICAgICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50RGVjb3JhdGlv
bih0ZXh0Vmlld2VyTGluZU51bWJlciwgdHJ1ZSwgdHJ1ZSwgdHJ1ZSk7CiAgICAgICAgICAgICAg
ICAgZnVuY3Rpb24gZGlkRWRpdEJyZWFrcG9pbnRDb25kaXRpb24oY29tbWl0dGVkLCBjb25kaXRp
b24pCiAgICAgICAgICAgICAgICAgewogICAgICAgICAgICAgICAgICAgICB0aGlzLl9yZW1vdmVC
cmVha3BvaW50RGVjb3JhdGlvbih0ZXh0Vmlld2VyTGluZU51bWJlcik7CkBAIC01NTIsMjMgKzU2
OSwyNCBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICAg
ICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkFkZCBDb25k
aXRpb25hbCBCcmVha3BvaW504oCmIiksIGFkZENvbmRpdGlvbmFsQnJlYWtwb2ludC5iaW5kKHRo
aXMpKTsKICAgICAgICAgfSBlbHNlIHsKICAgICAgICAgICAgIC8vIFRoaXMgcm93IGhhcyBhIGJy
ZWFrcG9pbnQsIHdlIHdhbnQgdG8gc2hvdyBlZGl0IGFuZCByZW1vdmUgYnJlYWtwb2ludCwgYW5k
IGVpdGhlciBkaXNhYmxlIG9yIGVuYWJsZS4KLSAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVu
ZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJSZW1vdmUgQnJlYWtwb2ludCIpLCBicmVha3Bv
aW50LnJlbW92ZS5iaW5kKGJyZWFrcG9pbnQpKTsKKyAgICAgICAgICAgIGZ1bmN0aW9uIHJlbW92
ZUJyZWFrcG9pbnQoKQorICAgICAgICAgICAgeworICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rv
ci5kZWJ1Z2dlck1vZGVsLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludC5pZCk7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICBjb250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5V
SVN0cmluZygiUmVtb3ZlIEJyZWFrcG9pbnQiKSwgcmVtb3ZlQnJlYWtwb2ludCk7CiAgICAgICAg
ICAgICBmdW5jdGlvbiBlZGl0QnJlYWtwb2ludENvbmRpdGlvbigpCiAgICAgICAgICAgICB7CiAg
ICAgICAgICAgICAgICAgZnVuY3Rpb24gZGlkRWRpdEJyZWFrcG9pbnRDb25kaXRpb24oY29tbWl0
dGVkLCBjb25kaXRpb24pCiAgICAgICAgICAgICAgICAgewotICAgICAgICAgICAgICAgICAgICBp
ZiAoY29tbWl0dGVkKSB7Ci0gICAgICAgICAgICAgICAgICAgICAgICBicmVha3BvaW50LnJlbW92
ZSgpOwotICAgICAgICAgICAgICAgICAgICAgICAgdGhpcy5fc2V0QnJlYWtwb2ludChvcmlnaW5h
bExpbmVOdW1iZXIsIGJyZWFrcG9pbnQuZW5hYmxlZCwgY29uZGl0aW9uKTsKLSAgICAgICAgICAg
ICAgICAgICAgfQorICAgICAgICAgICAgICAgICAgICBpZiAoY29tbWl0dGVkKQorICAgICAgICAg
ICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwudXBkYXRlQnJlYWtwb2lu
dChicmVha3BvaW50LmlkLCBjb25kaXRpb24sIGJyZWFrcG9pbnQuZW5hYmxlZCk7CiAgICAgICAg
ICAgICAgICAgfQogICAgICAgICAgICAgICAgIHRoaXMuX2VkaXRCcmVha3BvaW50Q29uZGl0aW9u
KHRleHRWaWV3ZXJMaW5lTnVtYmVyLCBicmVha3BvaW50LmNvbmRpdGlvbiwgZGlkRWRpdEJyZWFr
cG9pbnRDb25kaXRpb24uYmluZCh0aGlzKSk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBj
b250ZXh0TWVudS5hcHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiRWRpdCBCcmVha3Bv
aW504oCmIiksIGVkaXRCcmVha3BvaW50Q29uZGl0aW9uLmJpbmQodGhpcykpOwogICAgICAgICAg
ICAgZnVuY3Rpb24gc2V0QnJlYWtwb2ludEVuYWJsZWQoZW5hYmxlZCkKICAgICAgICAgICAgIHsK
LSAgICAgICAgICAgICAgICBicmVha3BvaW50LnJlbW92ZSgpOwotICAgICAgICAgICAgICAgIHRo
aXMuX3NldEJyZWFrcG9pbnQob3JpZ2luYWxMaW5lTnVtYmVyLCBlbmFibGVkLCBicmVha3BvaW50
LmNvbmRpdGlvbik7CisgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwu
dXBkYXRlQnJlYWtwb2ludChicmVha3BvaW50LmlkLCBicmVha3BvaW50LmNvbmRpdGlvbiwgZW5h
YmxlZCk7CiAgICAgICAgICAgICB9CiAgICAgICAgICAgICBpZiAoYnJlYWtwb2ludC5lbmFibGVk
KQogICAgICAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJ
U3RyaW5nKCJEaXNhYmxlIEJyZWFrcG9pbnQiKSwgc2V0QnJlYWtwb2ludEVuYWJsZWQuYmluZCh0
aGlzLCBmYWxzZSkpOwpAQCAtNTkyLDEzICs2MTAsMTUgQEAgV2ViSW5zcGVjdG9yLlNvdXJjZUZy
YW1lLnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFyIHRhcmdldCA9IGV2ZW50LnRhcmdldC5lbmNs
b3NpbmdOb2RlT3JTZWxmV2l0aENsYXNzKCJ3ZWJraXQtbGluZS1udW1iZXIiKTsKICAgICAgICAg
aWYgKCF0YXJnZXQpCiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgIHZhciBvcmlnaW5hbExp
bmVOdW1iZXIgPSB0aGlzLl9mb3JtYXR0ZXIuZm9ybWF0dGVkTGluZU51bWJlclRvT3JpZ2luYWxM
aW5lTnVtYmVyKHRhcmdldC5wYXJlbnRFbGVtZW50LmxpbmVOdW1iZXIpOworICAgICAgICB2YXIg
dGV4dFZpZXdlckxpbmVOdW1iZXIgPSB0YXJnZXQucGFyZW50RWxlbWVudC5saW5lTnVtYmVyOwor
ICAgICAgICB2YXIgb3JpZ2luYWxMaW5lTnVtYmVyID0gdGhpcy5fZm9ybWF0dGVyLmZvcm1hdHRl
ZExpbmVOdW1iZXJUb09yaWdpbmFsTGluZU51bWJlcih0ZXh0Vmlld2VyTGluZU51bWJlcik7CiAK
LSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9maW5kQnJlYWtwb2ludChvcmlnaW5hbExp
bmVOdW1iZXIpOworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX2ZpbmRCcmVha3BvaW50
KHRleHRWaWV3ZXJMaW5lTnVtYmVyKTsKICAgICAgICAgaWYgKGJyZWFrcG9pbnQpIHsKLSAgICAg
ICAgICAgIGJyZWFrcG9pbnQucmVtb3ZlKCk7CiAgICAgICAgICAgICBpZiAoZXZlbnQuc2hpZnRL
ZXkpCi0gICAgICAgICAgICAgICAgdGhpcy5fc2V0QnJlYWtwb2ludChvcmlnaW5hbExpbmVOdW1i
ZXIsICFicmVha3BvaW50LmVuYWJsZWQsIGJyZWFrcG9pbnQuY29uZGl0aW9uKTsKKyAgICAgICAg
ICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC51cGRhdGVCcmVha3BvaW50KGJyZWFr
cG9pbnQuaWQsIGJyZWFrcG9pbnQuY29uZGl0aW9uLCAhYnJlYWtwb2ludC5lbmFibGVkKTsKKyAg
ICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2Rl
bC5yZW1vdmVCcmVha3BvaW50KGJyZWFrcG9pbnQuaWQpOwogICAgICAgICB9IGVsc2UKICAgICAg
ICAgICAgIHRoaXMuX3NldEJyZWFrcG9pbnQob3JpZ2luYWxMaW5lTnVtYmVyLCB0cnVlLCAiIik7
CiAgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0KCk7CkBAIC04OTAsMTYgKzkxMCwxMCBAQCBX
ZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAgICAgICAgICAgV2ViSW5z
cGVjdG9yLnBhbmVscy5zY3JpcHRzLnRvZ2dsZUJyZWFrcG9pbnRzQ2xpY2tlZCgpOwogICAgIH0s
CiAKLSAgICBfYnJlYWtwb2ludHM6IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBzb3Vy
Y2VJRFNldCA9IHRoaXMuX3NvdXJjZUlEU2V0KCk7Ci0gICAgICAgIHJldHVybiBXZWJJbnNwZWN0
b3IuZGVidWdnZXJNb2RlbC5xdWVyeUJyZWFrcG9pbnRzKGZ1bmN0aW9uKGIpIHsgcmV0dXJuIGIu
c291cmNlSUQgaW4gc291cmNlSURTZXQ7IH0pOwotICAgIH0sCi0KLSAgICBfZmluZEJyZWFrcG9p
bnQ6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCisgICAgX2ZpbmRCcmVha3BvaW50OiBmdW5jdGlvbih0
ZXh0Vmlld2VyTGluZU51bWJlcikKICAgICB7Ci0gICAgICAgIHZhciBzb3VyY2VJRCA9IHRoaXMu
X3NvdXJjZUlERm9yTGluZShsaW5lTnVtYmVyKTsKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rv
ci5kZWJ1Z2dlck1vZGVsLmZpbmRCcmVha3BvaW50KHNvdXJjZUlELCBsaW5lTnVtYmVyICsgMSk7
CisgICAgICAgIHZhciBicmVha3BvaW50SWQgPSB0aGlzLl90ZXh0Vmlld2VyTGluZU51bWJlclRv
QnJlYWtwb2ludElkW3RleHRWaWV3ZXJMaW5lTnVtYmVyXTsKKyAgICAgICAgcmV0dXJuIFdlYklu
c3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmJyZWFrcG9pbnRGb3JJZChicmVha3BvaW50SWQpOwogICAg
IH0sCiAKICAgICBfc291cmNlSURGb3JMaW5lOiBmdW5jdGlvbihsaW5lTnVtYmVyKQpAQCAtOTE1
LDE1ICs5MjksNiBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogICAg
ICAgICAgICAgfQogICAgICAgICB9CiAgICAgICAgIHJldHVybiBzb3VyY2VJREZvckxpbmU7Ci0g
ICAgfSwKLQotICAgIF9zb3VyY2VJRFNldDogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFy
IHNjcmlwdHMgPSB0aGlzLl9jb250ZW50UHJvdmlkZXIuc2NyaXB0cygpOwotICAgICAgICB2YXIg
c291cmNlSURTZXQgPSB7fTsKLSAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY3JpcHRzLmxl
bmd0aDsgKytpKQotICAgICAgICAgICAgc291cmNlSURTZXRbc2NyaXB0c1tpXS5zb3VyY2VJRF0g
PSB0cnVlOwotICAgICAgICByZXR1cm4gc291cmNlSURTZXQ7CiAgICAgfQogfQogCmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qcyBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzCmluZGV4IGM4MjE1
NjguLjgzZTNiZmMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1l
bmQvaW5zcGVjdG9yLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
aW5zcGVjdG9yLmpzCkBAIC02MDIsNyArNjAyLDcgQEAgV2ViSW5zcGVjdG9yLmRvTG9hZGVkRG9u
ZSA9IGZ1bmN0aW9uKCkKICAgICBJbnNwZWN0b3JCYWNrZW5kLnBvcHVsYXRlU2NyaXB0T2JqZWN0
cyhvblBvcHVsYXRlU2NyaXB0T2JqZWN0cyk7CiAKICAgICBpZiAoUHJlZmVyZW5jZXMuZGVidWdn
ZXJBbHdheXNFbmFibGVkIHx8IFdlYkluc3BlY3Rvci5zZXR0aW5ncy5kZWJ1Z2dlckVuYWJsZWQp
Ci0gICAgICAgIEluc3BlY3RvckJhY2tlbmQuZW5hYmxlRGVidWdnZXIoKTsKKyAgICAgICAgdGhp
cy5kZWJ1Z2dlck1vZGVsLmVuYWJsZURlYnVnZ2VyKCk7CiAgICAgaWYgKFByZWZlcmVuY2VzLnBy
b2ZpbGVyQWx3YXlzRW5hYmxlZCB8fCBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MucHJvZmlsZXJFbmFi
bGVkKQogICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLmVuYWJsZVByb2ZpbGVyKCk7CiAgICAgaWYg
KFdlYkluc3BlY3Rvci5zZXR0aW5ncy5tb25pdG9yaW5nWEhSRW5hYmxlZCkKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vQ2hhbmdlTG9nIGIvU291cmNlL1dlYktpdC9jaHJvbWl1
bS9DaGFuZ2VMb2cKaW5kZXggMzFmMWM1Yi4uOGY4OGRhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9jaHJvbWl1bS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cKQEAgLTEsMyArMSwxMyBAQAorMjAxMS0wMS0yNyAgUGF2ZWwgUG9kaXZpbG92ICA8cG9k
aXZpbG92QGNocm9taXVtLm9yZz4KKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMh
KS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBpbnRyb2R1Y2UgbmV3IGFwaSBmb3IgbWFuYWdp
bmcgSmF2YVNjcmlwdCBicmVha3BvaW50cy4KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTUzMjM1CisKKyAgICAgICAgKiBzcmMvV2ViRGV2VG9vbHNBZ2Vu
dEltcGwuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJEZXZUb29sc0FnZW50OjpzaG91bGRJbnRl
cnJ1cHRGb3JNZXNzYWdlKToKKwogMjAxMS0wMS0yNiAgS2VudCBUYW11cmEgIDx0a2VudEBjaHJv
bWl1bS5vcmc+CiAKICAgICAgICAgUmV2aWV3ZWQgYnkgRGltaXRyaSBHbGF6a292LgpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3Bw
IGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCmlu
ZGV4IDExY2U3OTcuLjQyNzFhYTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0v
c3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVt
L3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHAKQEAgLTQyMyw4ICs0MjMsOCBAQCBib29sIFdl
YkRldlRvb2xzQWdlbnQ6OnNob3VsZEludGVycnVwdEZvck1lc3NhZ2UoY29uc3QgV2ViU3RyaW5n
JiBtZXNzYWdlKQogICAgIGlmICghSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldENvbW1h
bmROYW1lKG1lc3NhZ2UsICZjb21tYW5kTmFtZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAg
ICByZXR1cm4gY29tbWFuZE5hbWUgPT0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnBhdXNl
Q21kCi0gICAgICAgIHx8IGNvbW1hbmROYW1lID09IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVy
OjpzZXRCcmVha3BvaW50Q21kCi0gICAgICAgIHx8IGNvbW1hbmROYW1lID09IEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpyZW1vdmVCcmVha3BvaW50Q21kCisgICAgICAgIHx8IGNvbW1hbmRO
YW1lID09IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZXRKYXZhU2NyaXB0QnJlYWtwb2lu
dENtZAorICAgICAgICB8fCBjb21tYW5kTmFtZSA9PSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hl
cjo6cmVtb3ZlSmF2YVNjcmlwdEJyZWFrcG9pbnRDbWQKICAgICAgICAgfHwgY29tbWFuZE5hbWUg
PT0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmFjdGl2YXRlQnJlYWtwb2ludHNDbWQKICAg
ICAgICAgfHwgY29tbWFuZE5hbWUgPT0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmRlYWN0
aXZhdGVCcmVha3BvaW50c0NtZAogICAgICAgICB8fCBjb21tYW5kTmFtZSA9PSBJbnNwZWN0b3JC
YWNrZW5kRGlzcGF0Y2hlcjo6c3RhcnRQcm9maWxpbmdDbWQK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80330</attachid>
            <date>2011-01-27 06:46:25 -0800</date>
            <delta_ts>2011-02-01 09:32:25 -0800</delta_ts>
            <desc>Rebase.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>72693</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA4ZWRkMGY1Li41Mjk3NTY0IDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMDEt
MjcgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogaW50
cm9kdWNlIG5ldyBhcGkgZm9yIG1hbmFnaW5nIEphdmFTY3JpcHQgYnJlYWtwb2ludHMuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzIzNQorCisgICAg
ICAgICogaW5zcGVjdG9yL3JlcG9ydC1wcm90b2NvbC1lcnJvcnMuaHRtbDoKKwogMjAxMS0wMS0y
NyAgUGhpbGlwcGUgTm9ybWFuZCAgPHBub3JtYW5kQGlnYWxpYS5jb20+CiAKICAgICAgICAgVW5y
ZXZpZXdlZCwgbmV3IEdUSyBiYXNlbGluZXMgZm9yIGZhc3QvdGV4dC9qdXN0aWZ5KiB0ZXN0cwpk
aWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3JlcG9ydC1wcm90b2NvbC1lcnJvcnMu
aHRtbCBiL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXBvcnQtcHJvdG9jb2wtZXJyb3JzLmh0bWwK
aW5kZXggMTgyN2JlMC4uYzk4OWMxMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvaW5zcGVjdG9y
L3JlcG9ydC1wcm90b2NvbC1lcnJvcnMuaHRtbAorKysgYi9MYXlvdXRUZXN0cy9pbnNwZWN0b3Iv
cmVwb3J0LXByb3RvY29sLWVycm9ycy5odG1sCkBAIC0xNiw4ICsxNiw4IEBAIGZ1bmN0aW9uIHRl
c3QoKQogICAgICAgICAneyJzZXEiOjMsImNvbW1hbmQiOiJyZXNvdXJjZUNvbnRlbnQiLCJhcmd1
bWVudHMiOltdfScsCiAgICAgICAgICd7InNlcSI6NCwiY29tbWFuZCI6InJlc291cmNlQ29udGVu
dCIsImFyZ3VtZW50cyI6e319JywKICAgICAgICAgJ3sic2VxIjo1LCJjb21tYW5kIjoicmVzb3Vy
Y2VDb250ZW50IiwiYXJndW1lbnRzIjp7ImlkZW50aWZpZXIiOiJub3QgYSBudW1iZXIifX0nLAot
ICAgICAgICAneyJzZXEiOjYsImNvbW1hbmQiOiJyZW1vdmVCcmVha3BvaW50IiwiYXJndW1lbnRz
Ijp7fX0nLAotICAgICAgICAneyJzZXEiOjcsImNvbW1hbmQiOiJyZW1vdmVCcmVha3BvaW50Iiwi
YXJndW1lbnRzIjp7ImJyZWFrcG9pbnRJZCI6InNvbWVCcmVha3BvaW50SWQifX0nLAorICAgICAg
ICAneyJzZXEiOjYsImNvbW1hbmQiOiJyZW1vdmVKYXZhU2NyaXB0QnJlYWtwb2ludCIsImFyZ3Vt
ZW50cyI6e319JywKKyAgICAgICAgJ3sic2VxIjo3LCJjb21tYW5kIjoicmVtb3ZlSmF2YVNjcmlw
dEJyZWFrcG9pbnQiLCJhcmd1bWVudHMiOnsiYnJlYWtwb2ludElkIjoic29tZUJyZWFrcG9pbnRJ
ZCJ9fScsCiAgICAgXTsKICAgICB2YXIgbnVtYmVyT2ZSZXBvcnRzID0gMDsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmlu
ZGV4IGIxNDlkY2UuLjcyMjJmNzggMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsNSArMSw5OCBAQAogMjAxMS0w
MS0yNyAgUGF2ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KIAorICAgICAg
ICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBXZWIgSW5zcGVjdG9yOiBp
bnRyb2R1Y2UgbmV3IGFwaSBmb3IgbWFuYWdpbmcgSmF2YVNjcmlwdCBicmVha3BvaW50cy4KKyAg
ICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTUzMjM1CisKKyAg
ICAgICAgU2luZ2xlIHByb3RvY29sIGJyZWFrcG9pbnQgKGUuZy4gc2V0IGJ5IHVybCkgaXMgbWFw
cGVkIG9uIHplcm8gb3IgbW9yZSBWTSBicmVha3BvaW50cyAoc2V0IGJ5IHNvdXJjZUlEKS4KKyAg
ICAgICAgcmVtb3ZlSmF2YVNjcmlwdEJyZWFrcG9pbnQoYnJlYWtwb2ludElkKSByZW1vdmVzIGJy
ZWFrcG9pbnQgYW5kIGFsbCBsaW5rZWQgVk0gYnJlYWtwb2ludHMuCisgICAgICAgIFNpbmNlIFVJ
IHVzZXMgVk0gYnJlYWtwb2ludCBsb2NhdGlvbiByYXRoZXIgdGhlbiBwcm90b2NvbCBicmVha3Bv
aW50IGxvY2F0aW9uLCBhbGwgcmVzb2x2ZWQgYnJlYWtwb2ludHMgbG9jYXRpb25zIGFyZSBwYXNz
ZWQgdG8gZnJvbnRlbmQuCisKKyAgICAgICAgU291cmNlRnJhbWUgaXMgbm93IGF3YXJlIG9mIHdo
ZXRoZXIgYnJlYWtwb2ludCBpcyByZXNvbHZlZCBvciBub3QgYW5kIG1heSBkaXNwbGF5IGl0IGFj
Y29yZGluZ2x5LgorICAgICAgICBKYXZhU2NyaXB0QnJlYWtwb2ludHNTaWRlYmFyUGFuZSBmaWx0
ZXJzIG91dCBicmVha3BvaW50cyBzZXQgb24gbm9uZXhpc3RlbnQgc2NyaXB0cyB0byBhdm9pZCBV
SSBjbHV0dGVyaW5nLgorCisgICAgICAgICogaW5zcGVjdG9yL0luc3BlY3Rvci5pZGw6CisgICAg
ICAgICogaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcDogY2xlYXIgYnJlYWtwb2ludHMgZnJv
bSBpbnNwZWN0b3Igc3RhdGUgd2hlbiBuZXcgZnJvbnRlbmQgaXMgY3JlYXRlZAorICAgICAgICAo
V2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnJlc3RvcmVJbnNwZWN0b3JTdGF0ZUZyb21Db29raWUp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OnBvcHVsYXRlU2NyaXB0T2JqZWN0
cyk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JBZ2VudDo6cmVzdG9yZURlYnVnZ2VyKToK
KyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckFnZW50OjpzaG93QW5kRW5hYmxlRGVidWdnZXIp
OgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yQWdlbnQ6OmVuYWJsZURlYnVnZ2VyKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuaDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHA6IG1hbmFnZSByZWxhdGlvbnMgYmV0d2VlbiBwcm90
b2NvbCBicmVha3BvaW50cyBhbmQgVk0gYnJlYWtwb2ludHMKKyAgICAgICAgKFdlYkNvcmU6Oklu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQpOgorICAgICAgICAo
V2ViQ29yZTo6aW5zcGVjdG9yT2JqZWN0VG9TY3JpcHRCcmVha3BvaW50KToKKyAgICAgICAgKFdl
YkNvcmU6OmNyZWF0ZVNjcmlwdEJyZWFrcG9pbnRJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNv
cmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEphdmFTY3JpcHRCcmVha3BvaW50KToKKyAg
ICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlbW92ZUphdmFTY3JpcHRC
cmVha3BvaW50KToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmNv
bnRpbnVlVG9Mb2NhdGlvbik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpyZXNvbHZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1
Z2dlckFnZW50OjpyZXNvbHZlQnJlYWtwb2ludEluU2NyaXB0KToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldFNjcmlwdFNvdXJjZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXJzZVNvdXJjZSk6CisgICAgICAgIChX
ZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQYXVzZSk6CisgICAgICAgICogaW5z
cGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OlNjcmlwdDo6U2NyaXB0KToKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yVmFsdWVzLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck9iamVjdDo6
cmVtb3ZlKToKKyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg6CisgICAgICAg
IChXZWJDb3JlOjpJbnNwZWN0b3JPYmplY3Q6OmZpbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9T
Y3JpcHRCcmVha3BvaW50Lmg6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3Bv
aW50TWFuYWdlci5qczogcmVtb3ZlIGFsbCBzdHVmZiByZWxhdGVkIHRvIEphdmFTY3JpcHQgYnJl
YWtwb2ludHMgZnJvbSBoZXJlCisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFn
ZXIpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZS5f
cHJvamVjdENoYW5nZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2Vy
LnByb3RvdHlwZS5fc2F2ZUJyZWFrcG9pbnRzKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVh
a3BvaW50TWFuYWdlci5wcm90b3R5cGUuX3ZhbGlkYXRlQnJlYWtwb2ludHMpOgorICAgICAgICAq
IGluc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qczoKKyAgICAgICAg
KFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0QnJlYWtwb2ludHNTaWRlYmFyUGFuZSk6IGZpbHRlciBi
cmVha3BvaW50cyBzZXQgb24gbm9uZXhpc3RlbnQgc2NyaXB0cworICAgICAgICAoV2ViSW5zcGVj
dG9yLkphdmFTY3JpcHRCcmVha3BvaW50c1NpZGViYXJQYW5lLnByb3RvdHlwZS5fYnJlYWtwb2lu
dEFkZGVkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0QnJlYWtwb2ludHNTaWRl
YmFyUGFuZS5wcm90b3R5cGUuX2JyZWFrcG9pbnRSZXNvbHZlZCk6CisgICAgICAgIChXZWJJbnNw
ZWN0b3IuSmF2YVNjcmlwdEJyZWFrcG9pbnRzU2lkZWJhclBhbmUucHJvdG90eXBlLl9wYXJzZWRT
Y3JpcHRTb3VyY2UpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRCcmVha3BvaW50
c1NpZGViYXJQYW5lLnByb3RvdHlwZS5fYnJlYWtwb2ludEl0ZW1DaGVja2JveENsaWNrZWQpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRCcmVha3BvaW50c1NpZGViYXJQYW5lLnBy
b3RvdHlwZS5fc2V0dXBCcmVha3BvaW50RWxlbWVudC5kaWRHZXRTb3VyY2VMaW5lKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0QnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90b3R5
cGUuX3NldHVwQnJlYWtwb2ludEVsZW1lbnQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1l
bmQvRGVidWdnZXJNb2RlbC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVs
KTogcHVsbCBhbGwgSmF2YVNjcmlwdCBmcm9tIGxvY2FsU3RvcmFnZSBhbmQgcHVzaCB0aGVtIHRv
IGZyb250ZWQgd2hlbiBkZWJ1Z2dlciBpcyBlbmFibGVkCisgICAgICAgIChXZWJJbnNwZWN0b3Iu
RGVidWdnZXJNb2RlbC5wcm90b3R5cGUuZW5hYmxlRGVidWdnZXIpOgorICAgICAgICAoV2ViSW5z
cGVjdG9yLkRlYnVnZ2VyTW9kZWwucHJvdG90eXBlLmRpc2FibGVEZWJ1Z2dlcik6CisgICAgICAg
IChXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5wcm90b3R5cGUuY29udGludWVUb0xpbmUpOgor
ICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwucHJvdG90eXBlLnNldEJyZWFrcG9p
bnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwucHJvdG90eXBlLnJlbW92
ZUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwucHJvdG90
eXBlLnVwZGF0ZUJyZWFrcG9pbnQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9k
ZWwucHJvdG90eXBlLl9zZXRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1
Z2dlck1vZGVsLnByb3RvdHlwZS5fYnJlYWtwb2ludFJlc29sdmVkKToKKyAgICAgICAgKFdlYklu
c3BlY3Rvci5EZWJ1Z2dlck1vZGVsLnByb3RvdHlwZS5fc2F2ZUJyZWFrcG9pbnRzKToKKyAgICAg
ICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLnByb3RvdHlwZS5nZXQgYnJlYWtwb2ludHMp
OgorICAgICAgICAoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwucHJvdG90eXBlLmZpbmRCcmVh
a3BvaW50KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLnByb3RvdHlwZS5y
ZXNldCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5wcm90b3R5cGUuX3Bh
dXNlZFNjcmlwdCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuRGVidWdnZXJEaXNwYXRjaGVyLnBy
b3RvdHlwZS5icmVha3BvaW50UmVzb2x2ZWQpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1l
bmQvU2NyaXB0c1BhbmVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5w
cm90b3R5cGUuX3RvZ2dsZURlYnVnZ2luZyk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVu
ZC9TZXR0aW5ncy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TZXR0aW5ncyk6CisgICAgICAg
ICogaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qczogaGFuZGxlIHJlc29sdmVkIGFu
ZCB1bnJlc29sdmVkIGJyZWFrcG9pbnRzIGRpZmZlcmVudGx5CisgICAgICAgIChXZWJJbnNwZWN0
b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9jcmVhdGVUZXh0Vmlld2VyKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX3NldFRleHRWaWV3ZXJEZWNvcmF0aW9u
cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9zaG91bGRE
aXNwbGF5QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJv
dG90eXBlLl9icmVha3BvaW50QWRkZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZy
YW1lLnByb3RvdHlwZS5fYnJlYWtwb2ludFJlbW92ZWQpOgorICAgICAgICAoV2ViSW5zcGVjdG9y
LlNvdXJjZUZyYW1lLnByb3RvdHlwZS5fYnJlYWtwb2ludFJlc29sdmVkKToKKyAgICAgICAgKFdl
Ykluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX3NldEJyZWFrcG9pbnREZWNvcmF0aW9u
KToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUuX2NvbnRleHRN
ZW51LmVsc2UucmVtb3ZlQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuU291cmNl
RnJhbWUucHJvdG90eXBlLl9jb250ZXh0TWVudS5lbHNlLmVkaXRCcmVha3BvaW50Q29uZGl0aW9u
LmRpZEVkaXRCcmVha3BvaW50Q29uZGl0aW9uKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5Tb3Vy
Y2VGcmFtZS5wcm90b3R5cGUuX2NvbnRleHRNZW51LmVsc2UuZWRpdEJyZWFrcG9pbnRDb25kaXRp
b24pOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5fY29udGV4
dE1lbnUuZWxzZS5zZXRCcmVha3BvaW50RW5hYmxlZCk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
U291cmNlRnJhbWUucHJvdG90eXBlLl9jb250ZXh0TWVudSk6CisgICAgICAgIChXZWJJbnNwZWN0
b3IuU291cmNlRnJhbWUucHJvdG90eXBlLl9tb3VzZURvd24pOgorICAgICAgICAoV2ViSW5zcGVj
dG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5fZmluZEJyZWFrcG9pbnQpOgorICAgICAgICAoV2Vi
SW5zcGVjdG9yLlNvdXJjZUZyYW1lLnByb3RvdHlwZS5fc291cmNlSURGb3JMaW5lKToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL2luc3BlY3Rvci5qczoKKworMjAxMS0wMS0yNyAgUGF2
ZWwgUG9kaXZpbG92ICA8cG9kaXZpbG92QGNocm9taXVtLm9yZz4KKwogICAgICAgICBSZXZpZXdl
ZCBieSBQYXZlbCBGZWxkbWFuLgogCiAgICAgICAgIFdlYiBJbnNwZWN0b3I6IENsb3N1cmUgYW5k
IEdsb2JhbCB2YXJpYWJsZSBkZXRhaWxzIGF1dG9tYXRpY2FsbHkgY29sbGFwc2luZyBvbiBlYWNo
IHN0ZXAgdGhyb3VnaCBKYXZhU2NyaXB0IGNvZGUuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNw
ZWN0b3IuaWRsCmluZGV4IDk3OTcyNzQuLjRmZWM3OTcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3IuaWRsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3IuaWRsCkBAIC0yNTAsOSArMjUwLDEwIEBAIG1vZHVsZSBjb3JlIHsKICAgICAg
ICAgW2RvbWFpbj1EZWJ1Z2dlcl0gdm9pZCBhY3RpdmF0ZUJyZWFrcG9pbnRzKCk7CiAgICAgICAg
IFtkb21haW49RGVidWdnZXJdIHZvaWQgZGVhY3RpdmF0ZUJyZWFrcG9pbnRzKCk7CiAKLSAgICAg
ICAgW2RvbWFpbj1EZWJ1Z2dlcl0gdm9pZCBzZXRBbGxKYXZhU2NyaXB0QnJlYWtwb2ludHMoaW4g
T2JqZWN0IGJyZWFrcG9pbnRzKTsKLSAgICAgICAgW2RvbWFpbj1EZWJ1Z2dlcl0gdm9pZCBzZXRC
cmVha3BvaW50KGluIE9iamVjdCBicmVha3BvaW50LCBvdXQgU3RyaW5nIGJyZWFrcG9pbnRJZCwg
b3V0IGxvbmcgYWN0dWFsTGluZU51bWJlciwgb3V0IGxvbmcgYWN0dWFsQ29sdW1uTnVtYmVyKTsK
LSAgICAgICAgW2RvbWFpbj1EZWJ1Z2dlcl0gdm9pZCByZW1vdmVCcmVha3BvaW50KGluIFN0cmlu
ZyBicmVha3BvaW50SWQpOworICAgICAgICBbZG9tYWluPURlYnVnZ2VyXSB2b2lkIHNldEphdmFT
Y3JpcHRCcmVha3BvaW50KGluIE9iamVjdCBicmVha3BvaW50LCBvdXQgU3RyaW5nIGJyZWFrcG9p
bnRJZCwgb3V0IEFycmF5IGxvY2F0aW9ucyk7CisgICAgICAgIFtkb21haW49RGVidWdnZXJdIHZv
aWQgcmVtb3ZlSmF2YVNjcmlwdEJyZWFrcG9pbnQoaW4gU3RyaW5nIGJyZWFrcG9pbnRJZCk7Cisg
ICAgICAgIFtub3RpZnksIGRvbWFpbj1EZWJ1Z2dlcl0gdm9pZCBicmVha3BvaW50UmVzb2x2ZWQo
b3V0IFN0cmluZyBicmVha3BvaW50SWQsIG91dCBPYmplY3QgbG9jYXRpb24pOworICAgICAgICBb
ZG9tYWluPURlYnVnZ2VyXSB2b2lkIGNvbnRpbnVlVG9Mb2NhdGlvbihpbiBTdHJpbmcgc291cmNl
SWQsIGluIGxvbmcgbGluZU51bWJlciwgaW4gbG9uZyBjb2x1bW5OdW1iZXIpOwogCiAgICAgICAg
IFtkb21haW49QnJvd3NlckRlYnVnZ2VyXSB2b2lkIHNldEFsbEJyb3dzZXJCcmVha3BvaW50cyhp
biBPYmplY3QgYnJlYWtwb2ludHMpOwogICAgICAgICBbZG9tYWluPUJyb3dzZXJEZWJ1Z2dlcl0g
dm9pZCBzZXRET01CcmVha3BvaW50KGluIGxvbmcgbm9kZUlkLCBpbiBsb25nIHR5cGUpOwpAQCAt
Mjc4LDggKzI3OSw2IEBAIG1vZHVsZSBjb3JlIHsKICAgICAgICAgW2RvbWFpbj1EZWJ1Z2dlcl0g
dm9pZCBldmFsdWF0ZU9uQ2FsbEZyYW1lKGluIE9iamVjdCBjYWxsRnJhbWVJZCwgaW4gU3RyaW5n
IGV4cHJlc3Npb24sIGluIFN0cmluZyBvYmplY3RHcm91cCwgaW4gYm9vbGVhbiBpbmNsdWRlQ29t
bWFuZExpbmVBUEksIG91dCBWYWx1ZSByZXN1bHQpOwogICAgICAgICBbZG9tYWluPURlYnVnZ2Vy
XSB2b2lkIGdldENvbXBsZXRpb25zT25DYWxsRnJhbWUoaW4gT2JqZWN0IGNhbGxGcmFtZUlkLCBp
biBTdHJpbmcgZXhwcmVzc2lvbiwgaW4gYm9vbGVhbiBpbmNsdWRlQ29tbWFuZExpbmVBUEksIG91
dCBWYWx1ZSByZXN1bHQpOwogCi0gICAgICAgIFtub3RpZnksIGRvbWFpbj1EZWJ1Z2dlcl0gdm9p
ZCBicmVha3BvaW50UmVzb2x2ZWQob3V0IFN0cmluZyBicmVha3BvaW50SWQsIG91dCBPYmplY3Qg
YnJlYWtwb2ludCk7Ci0KICNpZiBkZWZpbmVkKEVOQUJMRV9XT1JLRVJTKSAmJiBFTkFCTEVfV09S
S0VSUwogICAgICAgICBbbm90aWZ5LCBkb21haW49RGVidWdnZXJdIHZvaWQgZGlkQ3JlYXRlV29y
a2VyKG91dCBsb25nIGlkLCBvdXQgU3RyaW5nIHVybCwgb3V0IGJvb2xlYW4gaXNTaGFyZWQpOwog
ICAgICAgICBbbm90aWZ5LCBkb21haW49RGVidWdnZXJdIHZvaWQgZGlkRGVzdHJveVdvcmtlcihv
dXQgbG9uZyBpZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNw
cAppbmRleCA3NjQwNjY4Li4yNGE2MzhkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNw
ZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JBZ2VudC5jcHAKQEAgLTIxNCw3ICsyMTQsNyBAQCB2b2lkIEluc3BlY3RvckFnZW50
OjpyZXN0b3JlSW5zcGVjdG9yU3RhdGVGcm9tQ29va2llKGNvbnN0IFN0cmluZyYgaW5zcGVjdG9y
U3RhdAogICAgICAgICBzdGFydFRpbWVsaW5lUHJvZmlsZXIoKTsKIAogI2lmIEVOQUJMRShKQVZB
U0NSSVBUX0RFQlVHR0VSKQotICAgIHJlc3RvcmVEZWJ1Z2dlcigpOworICAgIHJlc3RvcmVEZWJ1
Z2dlcihmYWxzZSk7CiAgICAgcmVzdG9yZVByb2ZpbGVyKFByb2ZpbGVyUmVzdG9yZVJlc2V0QWdl
bnQpOwogICAgIGlmIChtX3N0YXRlLT5nZXRCb29sZWFuKEluc3BlY3RvclN0YXRlOjp1c2VySW5p
dGlhdGVkUHJvZmlsaW5nKSkKICAgICAgICAgc3RhcnRVc2VySW5pdGlhdGVkUHJvZmlsaW5nKCk7
CkBAIC01MzUsNyArNTM1LDcgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6cG9wdWxhdGVTY3JpcHRP
YmplY3RzKCkKICAgICAgICAgbV9mcm9udGVuZC0+ZXZhbHVhdGVGb3JUZXN0SW5Gcm9udGVuZCgo
Kml0KS5maXJzdCwgKCppdCkuc2Vjb25kKTsKICAgICBtX3BlbmRpbmdFdmFsdWF0ZVRlc3RDb21t
YW5kcy5jbGVhcigpOwogCi0gICAgcmVzdG9yZURlYnVnZ2VyKCk7CisgICAgcmVzdG9yZURlYnVn
Z2VyKHRydWUpOwogICAgIHJlc3RvcmVQcm9maWxlcihQcm9maWxlclJlc3RvcmVOb0FjdGlvbik7
CiB9CiAKQEAgLTU2MiwxMiArNTYyLDEyIEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OnB1c2hEYXRh
Q29sbGVjdGVkT2ZmbGluZSgpCiAjZW5kaWYKIH0KIAotdm9pZCBJbnNwZWN0b3JBZ2VudDo6cmVz
dG9yZURlYnVnZ2VyKCkKK3ZvaWQgSW5zcGVjdG9yQWdlbnQ6OnJlc3RvcmVEZWJ1Z2dlcihib29s
IG5ld0RlYnVnZ2luZ1Nlc3Npb24pCiB7CiAgICAgQVNTRVJUKG1fZnJvbnRlbmQpOwogI2lmIEVO
QUJMRShKQVZBU0NSSVBUX0RFQlVHR0VSKQogICAgIGlmIChtX3N0YXRlLT5nZXRCb29sZWFuKElu
c3BlY3RvclN0YXRlOjpkZWJ1Z2dlckVuYWJsZWQpKQotICAgICAgICBlbmFibGVEZWJ1Z2dlcigp
OworICAgICAgICBlbmFibGVEZWJ1Z2dlcihuZXdEZWJ1Z2dpbmdTZXNzaW9uKTsKICNlbmRpZgog
fQogCkBAIC0xMDA2LDE2ICsxMDA2LDIxIEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OnNob3dBbmRF
bmFibGVEZWJ1Z2dlcigpCiAgICAgICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yU3Rh
dGU6OmRlYnVnZ2VyRW5hYmxlZCwgdHJ1ZSk7CiAgICAgICAgIHNob3dQYW5lbChTY3JpcHRzUGFu
ZWwpOwogICAgIH0gZWxzZQotICAgICAgICBlbmFibGVEZWJ1Z2dlcigpOworICAgICAgICBlbmFi
bGVEZWJ1Z2dlcih0cnVlKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JBZ2VudDo6ZW5hYmxlRGVidWdn
ZXIoKQordm9pZCBJbnNwZWN0b3JBZ2VudDo6ZW5hYmxlRGVidWdnZXIoYm9vbCBuZXdEZWJ1Z2dp
bmdTZXNzaW9uKQogewogICAgIGlmIChkZWJ1Z2dlckVuYWJsZWQoKSkKICAgICAgICAgcmV0dXJu
OwogICAgIG1fc3RhdGUtPnNldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OmRlYnVnZ2VyRW5hYmxl
ZCwgdHJ1ZSk7CiAgICAgQVNTRVJUKG1faW5zcGVjdGVkUGFnZSk7CiAKKyAgICBpZiAobmV3RGVi
dWdnaW5nU2Vzc2lvbikgeworICAgICAgICBtX3N0YXRlLT5zZXRPYmplY3QoSW5zcGVjdG9yU3Rh
dGU6OmphdmFTY3JpcHRCcmVha3BvaW50cywgSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKSk7Cisg
ICAgICAgIG1fc3RhdGUtPnNldE9iamVjdChJbnNwZWN0b3JTdGF0ZTo6YnJvd3NlckJyZWFrcG9p
bnRzLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICB9CisKICAgICBtX2RlYnVnZ2Vy
QWdlbnQgPSBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpjcmVhdGUodGhpcywgbV9mcm9udGVuZC5n
ZXQoKSk7CiAgICAgbV9icm93c2VyRGVidWdnZXJBZ2VudCA9IEluc3BlY3RvckJyb3dzZXJEZWJ1
Z2dlckFnZW50OjpjcmVhdGUodGhpcyk7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckFnZW50LmgKaW5kZXggOGNjNDlhNi4uYTdiMTViNiAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvckFnZW50LmgKQEAgLTI0MSw3ICsyNDEsNyBAQCBwdWJsaWM6CiAgICAg
Ym9vbCBwcm9maWxlckVuYWJsZWQoKSBjb25zdDsKIAogICAgIHZvaWQgc2hvd0FuZEVuYWJsZURl
YnVnZ2VyKCk7Ci0gICAgdm9pZCBlbmFibGVEZWJ1Z2dlcigpOworICAgIHZvaWQgZW5hYmxlRGVi
dWdnZXIoYm9vbCBuZXdEZWJ1Z2dpbmdTZXNzaW9uID0gZmFsc2UpOwogICAgIHZvaWQgZGlzYWJs
ZURlYnVnZ2VyKCk7CiAgICAgYm9vbCBkZWJ1Z2dlckVuYWJsZWQoKSBjb25zdCB7IHJldHVybiBt
X2RlYnVnZ2VyQWdlbnQ7IH0KICAgICB2b2lkIHJlc3VtZSgpOwpAQCAtMjcxLDcgKzI3MSw3IEBA
IHB1YmxpYzoKIAogcHJpdmF0ZToKICAgICB2b2lkIHB1c2hEYXRhQ29sbGVjdGVkT2ZmbGluZSgp
OwotICAgIHZvaWQgcmVzdG9yZURlYnVnZ2VyKCk7CisgICAgdm9pZCByZXN0b3JlRGVidWdnZXIo
Ym9vbCBuZXdEZWJ1Z2dpbmdTZXNzaW9uKTsKICAgICBlbnVtIFByb2ZpbGVyUmVzdG9yZUFjdGlv
biB7CiAgICAgICAgIFByb2ZpbGVyUmVzdG9yZU5vQWN0aW9uID0gMCwKICAgICAgICAgUHJvZmls
ZXJSZXN0b3JlUmVzZXRBZ2VudCA9IDEKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAppbmRleCAzYzYyOTgxLi40ZWFmNDU0IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQu
Y3BwCkBAIC0zOCw2ICszOCw3IEBACiAjaW5jbHVkZSAiSW5zcGVjdG9yVmFsdWVzLmgiCiAjaW5j
bHVkZSAiUGxhdGZvcm1TdHJpbmcuaCIKICNpbmNsdWRlICJTY3JpcHREZWJ1Z1NlcnZlci5oIgor
I2luY2x1ZGUgPHd0Zi90ZXh0L1N0cmluZ0NvbmNhdGVuYXRlLmg+CiAKIG5hbWVzcGFjZSBXZWJD
b3JlIHsKIApAQCAtNTYsNyArNTcsNiBAQCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50KEluc3BlY3RvckFnZW50KiBpbnNwZWN0b3JBZ2VudCwgSQogICAgICwg
bV9mcm9udGVuZChmcm9udGVuZCkKICAgICAsIG1fcGF1c2VkU2NyaXB0U3RhdGUoMCkKICAgICAs
IG1famF2YVNjcmlwdFBhdXNlU2NoZWR1bGVkKGZhbHNlKQotICAgICwgbV9icmVha3BvaW50c1Jl
c3RvcmVkKGZhbHNlKQogewogfQogCkBAIC03NiwxMTEgKzc2LDEzOCBAQCB2b2lkIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OmRlYWN0aXZhdGVCcmVha3BvaW50cygpCiAgICAgU2NyaXB0RGVidWdT
ZXJ2ZXI6OnNoYXJlZCgpLmRlYWN0aXZhdGVCcmVha3BvaW50cygpOwogfQogCi12b2lkIEluc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQ6OnNldEFsbEphdmFTY3JpcHRCcmVha3BvaW50cyhQYXNzUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludHMpCitzdGF0aWMgYm9vbCBpbnNwZWN0b3JPYmpl
Y3RUb1NjcmlwdEJyZWFrcG9pbnQoY29uc3QgSW5zcGVjdG9yT2JqZWN0JiBicmVha3BvaW50T2Jq
ZWN0LCBTY3JpcHRCcmVha3BvaW50KiBicmVha3BvaW50KQogewotICAgIG1faW5zcGVjdG9yQWdl
bnQtPnN0YXRlKCktPnNldE9iamVjdChJbnNwZWN0b3JTdGF0ZTo6amF2YVNjcmlwdEJyZWFrcG9p
bnRzLCBicmVha3BvaW50cyk7Ci0gICAgaWYgKCFtX2JyZWFrcG9pbnRzUmVzdG9yZWQpIHsKLSAg
ICAgICAgcmVzdG9yZUJyZWFrcG9pbnRzKG1faW5zcGVjdG9yQWdlbnQtPmluc3BlY3RlZFVSTFdp
dGhvdXRGcmFnbWVudCgpKTsKLSAgICAgICAgbV9icmVha3BvaW50c1Jlc3RvcmVkID0gdHJ1ZTsK
LSAgICB9CisgICAgYnJlYWtwb2ludE9iamVjdC5nZXRTdHJpbmcoInVybCIsICZicmVha3BvaW50
LT51cmwpOworICAgIGJyZWFrcG9pbnRPYmplY3QuZ2V0U3RyaW5nKCJzb3VyY2VJRCIsICZicmVh
a3BvaW50LT5zb3VyY2VJRCk7CisgICAgaWYgKGJyZWFrcG9pbnQtPnVybC5pc0VtcHR5KCkgJiYg
YnJlYWtwb2ludC0+c291cmNlSUQuaXNFbXB0eSgpKQorICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgaWYgKCFicmVha3BvaW50T2JqZWN0LmdldE51bWJlcigibGluZU51bWJlciIsICZicmVha3Bv
aW50LT5saW5lTnVtYmVyKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghYnJlYWtw
b2ludE9iamVjdC5nZXROdW1iZXIoImNvbHVtbk51bWJlciIsICZicmVha3BvaW50LT5jb2x1bW5O
dW1iZXIpKQorICAgICAgICBicmVha3BvaW50LT5jb2x1bW5OdW1iZXIgPSAxOworICAgIGlmICgh
YnJlYWtwb2ludE9iamVjdC5nZXRTdHJpbmcoImNvbmRpdGlvbiIsICZicmVha3BvaW50LT5jb25k
aXRpb24pKQorICAgICAgICBicmVha3BvaW50LT5jb25kaXRpb24gPSAiIjsKKyAgICBpZiAoIWJy
ZWFrcG9pbnRPYmplY3QuZ2V0Qm9vbGVhbigiZW5hYmxlZCIsICZicmVha3BvaW50LT5lbmFibGVk
KSkKKyAgICAgICAgYnJlYWtwb2ludC0+ZW5hYmxlZCA9IHRydWU7CisgICAgcmV0dXJuIHRydWU7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6aW5zcGVjdGVkVVJMQ2hhbmdlZChj
b25zdCBTdHJpbmcmIHVybCkKK3N0YXRpYyBTdHJpbmcgY3JlYXRlU2NyaXB0QnJlYWtwb2ludElk
KGNvbnN0IFNjcmlwdEJyZWFrcG9pbnQmIGJyZWFrcG9pbnQpCiB7Ci0gICAgbV9zY3JpcHRJRFRv
Q29udGVudC5jbGVhcigpOwotICAgIG1fdXJsVG9Tb3VyY2VJRHMuY2xlYXIoKTsKLSAgICByZXN0
b3JlQnJlYWtwb2ludHModXJsKTsKKyAgICBjb25zdCBTdHJpbmcmIHNjcmlwdE5hbWUgPSAhYnJl
YWtwb2ludC51cmwuaXNFbXB0eSgpID8gYnJlYWtwb2ludC51cmwgOiBicmVha3BvaW50LnNvdXJj
ZUlEOworICAgIHJldHVybiBtYWtlU3RyaW5nKHNjcmlwdE5hbWUsICI6IiwgU3RyaW5nOjpudW1i
ZXIoYnJlYWtwb2ludC5saW5lTnVtYmVyKSwgIjoiLCBTdHJpbmc6Om51bWJlcihicmVha3BvaW50
LmNvbHVtbk51bWJlcikpOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlc3Rv
cmVCcmVha3BvaW50cyhjb25zdCBTdHJpbmcmIGluc3BlY3RlZFVSTCkKK3ZvaWQgSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJpbmcmKQogewotICAg
IG1fc3RpY2t5QnJlYWtwb2ludHMuY2xlYXIoKTsKKyAgICBtX3NjcmlwdHMuY2xlYXIoKTsKKyAg
ICBtX2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzLmNsZWFyKCk7Cit9CiAK
LSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBhbGxCcmVha3BvaW50cyA9IG1faW5zcGVjdG9y
QWdlbnQtPnN0YXRlKCktPmdldE9iamVjdChJbnNwZWN0b3JTdGF0ZTo6amF2YVNjcmlwdEJyZWFr
cG9pbnRzKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGJyZWFrcG9pbnRzID0gYWxsQnJl
YWtwb2ludHMtPmdldEFycmF5KGluc3BlY3RlZFVSTCk7Ci0gICAgaWYgKCFicmVha3BvaW50cykK
K3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0SmF2YVNjcmlwdEJyZWFrcG9pbnQoUGFz
c1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnQsIFN0cmluZyogYnJlYWtwb2ludElk
LCBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+KiBsb2NhdGlvbnMpCit7CisgICAgU2NyaXB0QnJlYWtw
b2ludCBzY3JpcHRCcmVha3BvaW50OworICAgIGlmICghaW5zcGVjdG9yT2JqZWN0VG9TY3JpcHRC
cmVha3BvaW50KCpicmVha3BvaW50LCAmc2NyaXB0QnJlYWtwb2ludCkpCiAgICAgICAgIHJldHVy
bjsKLSAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgYnJlYWtwb2ludHMtPmxlbmd0aCgpOyAr
K2kpIHsKLSAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludCA9IGJyZWFr
cG9pbnRzLT5nZXQoaSktPmFzT2JqZWN0KCk7Ci0gICAgICAgIGlmICghYnJlYWtwb2ludCkKLSAg
ICAgICAgICAgIGNvbnRpbnVlOwotICAgICAgICBTdHJpbmcgdXJsOwotICAgICAgICBpZiAoIWJy
ZWFrcG9pbnQtPmdldFN0cmluZygidXJsIiwgJnVybCkpCi0gICAgICAgICAgICBjb250aW51ZTsK
LSAgICAgICAgZG91YmxlIGxpbmVOdW1iZXI7Ci0gICAgICAgIGlmICghYnJlYWtwb2ludC0+Z2V0
TnVtYmVyKCJsaW5lTnVtYmVyIiwgJmxpbmVOdW1iZXIpKQotICAgICAgICAgICAgY29udGludWU7
Ci0gICAgICAgIGRvdWJsZSBjb2x1bW5OdW1iZXI7Ci0gICAgICAgIGlmICghYnJlYWtwb2ludC0+
Z2V0TnVtYmVyKCJjb2x1bW5OdW1iZXIiLCAmY29sdW1uTnVtYmVyKSkKKyAgICBpZiAoc2NyaXB0
QnJlYWtwb2ludC51cmwuaXNFbXB0eSgpKSB7CisgICAgICAgIFNjcmlwdHNNYXA6Oml0ZXJhdG9y
IGl0ID0gbV9zY3JpcHRzLmZpbmQoc2NyaXB0QnJlYWtwb2ludC5zb3VyY2VJRCk7CisgICAgICAg
IGlmIChpdCAhPSBtX3NjcmlwdHMuZW5kKCkpIHsKKyAgICAgICAgICAgIHNjcmlwdEJyZWFrcG9p
bnQudXJsID0gaXQtPnNlY29uZC51cmw7CisgICAgICAgICAgICBicmVha3BvaW50LT5zZXRTdHJp
bmcoInVybCIsIGl0LT5zZWNvbmQudXJsKTsKKyAgICAgICAgfQorICAgIH0KKworICAgICpicmVh
a3BvaW50SWQgPSBjcmVhdGVTY3JpcHRCcmVha3BvaW50SWQoc2NyaXB0QnJlYWtwb2ludCk7Cisg
ICAgaWYgKCFzY3JpcHRCcmVha3BvaW50LnVybC5pc0VtcHR5KCkpIHsKKyAgICAgICAgUmVmUHRy
PEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludHNDb29raWUgPSBtX2luc3BlY3RvckFnZW50LT5z
dGF0ZSgpLT5nZXRPYmplY3QoSW5zcGVjdG9yU3RhdGU6OmphdmFTY3JpcHRCcmVha3BvaW50cyk7
CisgICAgICAgIGlmIChicmVha3BvaW50c0Nvb2tpZS0+ZmluZCgqYnJlYWtwb2ludElkKSAhPSBi
cmVha3BvaW50c0Nvb2tpZS0+ZW5kKCkpIHsKKyAgICAgICAgICAgICpicmVha3BvaW50SWQgPSAi
IjsKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgU3RyaW5nIGNvbmRpdGlvbjsKLSAgICAg
ICAgaWYgKCFicmVha3BvaW50LT5nZXRTdHJpbmcoImNvbmRpdGlvbiIsICZjb25kaXRpb24pKQot
ICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGJvb2wgZW5hYmxlZDsKLSAgICAgICAgaWYg
KCFicmVha3BvaW50LT5nZXRCb29sZWFuKCJlbmFibGVkIiwgJmVuYWJsZWQpKQotICAgICAgICAg
ICAgY29udGludWU7Ci0gICAgICAgIFNjcmlwdEJyZWFrcG9pbnQgc2NyaXB0QnJlYWtwb2ludCgo
bG9uZykgbGluZU51bWJlciwgKGxvbmcpIGNvbHVtbk51bWJlciwgY29uZGl0aW9uLCBlbmFibGVk
KTsKLSAgICAgICAgc2V0U3RpY2t5QnJlYWtwb2ludCh1cmwsIHNjcmlwdEJyZWFrcG9pbnQpOwor
ICAgICAgICB9CisgICAgICAgIGJyZWFrcG9pbnRzQ29va2llLT5zZXRPYmplY3QoKmJyZWFrcG9p
bnRJZCwgYnJlYWtwb2ludCk7CisgICAgICAgIG1faW5zcGVjdG9yQWdlbnQtPnN0YXRlKCktPnNl
dE9iamVjdChJbnNwZWN0b3JTdGF0ZTo6amF2YVNjcmlwdEJyZWFrcG9pbnRzLCBicmVha3BvaW50
c0Nvb2tpZSk7CiAgICAgfQorCisgICAgcmVzb2x2ZUJyZWFrcG9pbnQoKmJyZWFrcG9pbnRJZCwg
c2NyaXB0QnJlYWtwb2ludCwgbG9jYXRpb25zLT5nZXQoKSk7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6c2V0U3RpY2t5QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHVybCwgY29u
c3QgU2NyaXB0QnJlYWtwb2ludCYgYnJlYWtwb2ludCkKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6cmVtb3ZlSmF2YVNjcmlwdEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVha3BvaW50
SWQpCiB7Ci0gICAgSW5zcGVjdGVkVVJMVG9CcmVha3BvaW50c01hcDo6aXRlcmF0b3IgaXQgPSBt
X3N0aWNreUJyZWFrcG9pbnRzLmZpbmQodXJsKTsKLSAgICBpZiAoaXQgPT0gbV9zdGlja3lCcmVh
a3BvaW50cy5lbmQoKSkKLSAgICAgICAgaXQgPSBtX3N0aWNreUJyZWFrcG9pbnRzLnNldCh1cmws
IExvY2F0aW9uVG9CcmVha3BvaW50TWFwKCkpLmZpcnN0OwotICAgIGl0LT5zZWNvbmQuc2V0KExv
Y2F0aW9uKGJyZWFrcG9pbnQubGluZU51bWJlciwgYnJlYWtwb2ludC5jb2x1bW5OdW1iZXIpLCBi
cmVha3BvaW50KTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50c0Nvb2tp
ZSA9IG1faW5zcGVjdG9yQWdlbnQtPnN0YXRlKCktPmdldE9iamVjdChJbnNwZWN0b3JTdGF0ZTo6
amF2YVNjcmlwdEJyZWFrcG9pbnRzKTsKKyAgICBicmVha3BvaW50c0Nvb2tpZS0+cmVtb3ZlKGJy
ZWFrcG9pbnRJZCk7CisgICAgbV9pbnNwZWN0b3JBZ2VudC0+c3RhdGUoKS0+c2V0T2JqZWN0KElu
c3BlY3RvclN0YXRlOjpqYXZhU2NyaXB0QnJlYWtwb2ludHMsIGJyZWFrcG9pbnRzQ29va2llKTsK
IAotICAgIFVSTFRvU291cmNlSURzTWFwOjppdGVyYXRvciB1cmxUb1NvdXJjZUlEc0l0ZXJhdG9y
ID0gbV91cmxUb1NvdXJjZUlEcy5maW5kKHVybCk7Ci0gICAgaWYgKHVybFRvU291cmNlSURzSXRl
cmF0b3IgPT0gbV91cmxUb1NvdXJjZUlEcy5lbmQoKSkKKyAgICBCcmVha3BvaW50SWRUb0RlYnVn
U2VydmVyQnJlYWtwb2ludElkc01hcDo6aXRlcmF0b3IgZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRz
SXRlcmF0b3IgPSBtX2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzLmZpbmQo
YnJlYWtwb2ludElkKTsKKyAgICBpZiAoZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3Ig
PT0gbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5lbmQoKSkKICAgICAg
ICAgcmV0dXJuOwotICAgIGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBzb3VyY2VJRHMgPSB1cmxUb1Nv
dXJjZUlEc0l0ZXJhdG9yLT5zZWNvbmQ7Ci0gICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzb3Vy
Y2VJRHMuc2l6ZSgpOyArK2kpCi0gICAgICAgIHJlc3RvcmVCcmVha3BvaW50KHNvdXJjZUlEc1tp
XSwgYnJlYWtwb2ludCk7CisgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBkZWJ1Z1NlcnZlckJy
ZWFrcG9pbnRJZHNJdGVyYXRvci0+c2Vjb25kLnNpemUoKTsgKytpKQorICAgICAgICBTY3JpcHRE
ZWJ1Z1NlcnZlcjo6c2hhcmVkKCkucmVtb3ZlQnJlYWtwb2ludChkZWJ1Z1NlcnZlckJyZWFrcG9p
bnRJZHNJdGVyYXRvci0+c2Vjb25kW2ldKTsKKyAgICBtX2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2
ZXJCcmVha3BvaW50SWRzLnJlbW92ZShkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvcik7
CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6c2V0QnJlYWtwb2ludChQYXNzUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludCwgU3RyaW5nKiBicmVha3BvaW50SWQsIGxv
bmcqIGFjdHVhbExpbmVOdW1iZXIsIGxvbmcqIGFjdHVhbENvbHVtbk51bWJlcikKK3ZvaWQgSW5z
cGVjdG9yRGVidWdnZXJBZ2VudDo6Y29udGludWVUb0xvY2F0aW9uKGNvbnN0IFN0cmluZyYgc291
cmNlSUQsIGxvbmcgbGluZU51bWJlciwgbG9uZyBjb2x1bW5OdW1iZXIpCiB7Ci0gICAgU3RyaW5n
IHNvdXJjZUlEOwotICAgIGlmICghYnJlYWtwb2ludC0+Z2V0U3RyaW5nKCJzb3VyY2VJRCIsICZz
b3VyY2VJRCkpCi0gICAgICAgIHJldHVybjsKLSAgICBkb3VibGUgbGluZU51bWJlcjsKLSAgICBp
ZiAoIWJyZWFrcG9pbnQtPmdldE51bWJlcigibGluZU51bWJlciIsICZsaW5lTnVtYmVyKSkKLSAg
ICAgICAgcmV0dXJuOwotICAgIGRvdWJsZSBjb2x1bW5OdW1iZXI7Ci0gICAgaWYgKCFicmVha3Bv
aW50LT5nZXROdW1iZXIoImNvbHVtbk51bWJlciIsICZjb2x1bW5OdW1iZXIpKQotICAgICAgICBy
ZXR1cm47Ci0gICAgU3RyaW5nIGNvbmRpdGlvbjsKLSAgICBpZiAoIWJyZWFrcG9pbnQtPmdldFN0
cmluZygiY29uZGl0aW9uIiwgJmNvbmRpdGlvbikpCi0gICAgICAgIHJldHVybjsKLSAgICBib29s
IGVuYWJsZWQ7Ci0gICAgaWYgKCFicmVha3BvaW50LT5nZXRCb29sZWFuKCJlbmFibGVkIiwgJmVu
YWJsZWQpKQotICAgICAgICByZXR1cm47Ci0gICAgU2NyaXB0QnJlYWtwb2ludCBzY3JpcHRCcmVh
a3BvaW50KChsb25nKSBsaW5lTnVtYmVyLCAobG9uZykgY29sdW1uTnVtYmVyLCBjb25kaXRpb24s
IGVuYWJsZWQpOwotICAgICpicmVha3BvaW50SWQgPSBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVk
KCkuc2V0QnJlYWtwb2ludChzb3VyY2VJRCwgc2NyaXB0QnJlYWtwb2ludCwgYWN0dWFsTGluZU51
bWJlciwgYWN0dWFsQ29sdW1uTnVtYmVyKTsKKyAgICBpZiAoIW1fY29udGludWVUb1Bvc2l0aW9u
QnJlYWtwb2ludElkLmlzRW1wdHkoKSkKKyAgICAgICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJl
ZCgpLnJlbW92ZUJyZWFrcG9pbnQobV9jb250aW51ZVRvUG9zaXRpb25CcmVha3BvaW50SWQpOwor
ICAgIFNjcmlwdEJyZWFrcG9pbnQgc2NyaXB0QnJlYWtwb2ludDsKKyAgICBzY3JpcHRCcmVha3Bv
aW50LmxpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOworICAgIHNjcmlwdEJyZWFrcG9pbnQuY29sdW1u
TnVtYmVyID0gY29sdW1uTnVtYmVyOworICAgIHNjcmlwdEJyZWFrcG9pbnQuZW5hYmxlZCA9IHRy
dWU7CisgICAgbV9jb250aW51ZVRvUG9zaXRpb25CcmVha3BvaW50SWQgPSBTY3JpcHREZWJ1Z1Nl
cnZlcjo6c2hhcmVkKCkuc2V0QnJlYWtwb2ludChzb3VyY2VJRCwgc2NyaXB0QnJlYWtwb2ludCwg
JmxpbmVOdW1iZXIsICZjb2x1bW5OdW1iZXIpOworICAgIHJlc3VtZSgpOwogfQogCi12b2lkIElu
c3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlbW92ZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBicmVh
a3BvaW50SWQpCit2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJlc29sdmVCcmVha3BvaW50
KGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElkLCBjb25zdCBTY3JpcHRCcmVha3BvaW50JiBicmVh
a3BvaW50LCBJbnNwZWN0b3JBcnJheSogbG9jYXRpb25zKQogewotICAgIFNjcmlwdERlYnVnU2Vy
dmVyOjpzaGFyZWQoKS5yZW1vdmVCcmVha3BvaW50KGJyZWFrcG9pbnRJZCk7CisgICAgaWYgKCFi
cmVha3BvaW50LnVybC5pc0VtcHR5KCkpIHsKKyAgICAgICAgZm9yIChTY3JpcHRzTWFwOjppdGVy
YXRvciBpdCA9IG1fc2NyaXB0cy5iZWdpbigpOyBpdCAhPSBtX3NjcmlwdHMuZW5kKCk7ICsraXQp
IHsKKyAgICAgICAgICAgIGlmIChpdC0+c2Vjb25kLnVybCAhPSBicmVha3BvaW50LnVybCkKKyAg
ICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+IGxvY2F0aW9uID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICAgICAgICAgIGlm
IChyZXNvbHZlQnJlYWtwb2ludEluU2NyaXB0KGJyZWFrcG9pbnRJZCwgYnJlYWtwb2ludCwgaXQt
PmZpcnN0LCBsb2NhdGlvbi5nZXQoKSkpCisgICAgICAgICAgICAgICAgbG9jYXRpb25zLT5wdXNo
T2JqZWN0KGxvY2F0aW9uKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSB7CisgICAgICAgIFJlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+IGxvY2F0aW9uID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsK
KyAgICAgICAgaWYgKHJlc29sdmVCcmVha3BvaW50SW5TY3JpcHQoYnJlYWtwb2ludElkLCBicmVh
a3BvaW50LCBicmVha3BvaW50LnNvdXJjZUlELCBsb2NhdGlvbi5nZXQoKSkpCisgICAgICAgICAg
ICBsb2NhdGlvbnMtPnB1c2hPYmplY3QobG9jYXRpb24pOworICAgIH0KIH0KIAotdm9pZCBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXN0b3JlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIHNvdXJj
ZUlELCBjb25zdCBTY3JpcHRCcmVha3BvaW50JiBicmVha3BvaW50KQorYm9vbCBJbnNwZWN0b3JE
ZWJ1Z2dlckFnZW50OjpyZXNvbHZlQnJlYWtwb2ludEluU2NyaXB0KGNvbnN0IFN0cmluZyYgYnJl
YWtwb2ludElkLCBjb25zdCBTY3JpcHRCcmVha3BvaW50JiBicmVha3BvaW50LCBjb25zdCBTdHJp
bmcmIHNvdXJjZUlELCBJbnNwZWN0b3JPYmplY3QqIGxvY2F0aW9uKQogewotICAgIGxvbmcgYWN0
dWFsTGluZU51bWJlciA9IDAsIGFjdHVhbENvbHVtbk51bWJlciA9IDA7Ci0gICAgU3RyaW5nIGJy
ZWFrcG9pbnRJZCA9IFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5zZXRCcmVha3BvaW50KHNv
dXJjZUlELCBicmVha3BvaW50LCAmYWN0dWFsTGluZU51bWJlciwgJmFjdHVhbENvbHVtbk51bWJl
cik7Ci0gICAgaWYgKGJyZWFrcG9pbnRJZC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAg
ICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50RGF0YSA9IEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCk7Ci0gICAgYnJlYWtwb2ludERhdGEtPnNldFN0cmluZygiaWQiLCBicmVha3Bv
aW50SWQpOwotICAgIGJyZWFrcG9pbnREYXRhLT5zZXRTdHJpbmcoInNvdXJjZUlEIiwgc291cmNl
SUQpOwotICAgIGJyZWFrcG9pbnREYXRhLT5zZXROdW1iZXIoImxpbmVOdW1iZXIiLCBhY3R1YWxM
aW5lTnVtYmVyKTsKLSAgICBicmVha3BvaW50RGF0YS0+c2V0TnVtYmVyKCJjb2x1bW5OdW1iZXIi
LCBhY3R1YWxDb2x1bW5OdW1iZXIpOwotICAgIGJyZWFrcG9pbnREYXRhLT5zZXRTdHJpbmcoImNv
bmRpdGlvbiIsIGJyZWFrcG9pbnQuY29uZGl0aW9uKTsKLSAgICBicmVha3BvaW50RGF0YS0+c2V0
Qm9vbGVhbigiZW5hYmxlZCIsIGJyZWFrcG9pbnQuZW5hYmxlZCk7Ci0gICAgYnJlYWtwb2ludERh
dGEtPnNldE51bWJlcigib3JpZ2luYWxMaW5lTnVtYmVyIiwgYnJlYWtwb2ludC5saW5lTnVtYmVy
KTsKLSAgICBicmVha3BvaW50RGF0YS0+c2V0TnVtYmVyKCJvcmlnaW5hbENvbHVtbk51bWJlciIs
IGJyZWFrcG9pbnQuY29sdW1uTnVtYmVyKTsKLSAgICBtX2Zyb250ZW5kLT5icmVha3BvaW50UmVz
b2x2ZWQoYnJlYWtwb2ludElkLCBicmVha3BvaW50RGF0YSk7CisgICAgU2NyaXB0c01hcDo6aXRl
cmF0b3Igc2NyaXB0SXRlcmF0b3IgPSBtX3NjcmlwdHMuZmluZChzb3VyY2VJRCk7CisgICAgaWYg
KHNjcmlwdEl0ZXJhdG9yID09IG1fc2NyaXB0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgIFNjcmlwdCYgc2NyaXB0ID0gc2NyaXB0SXRlcmF0b3ItPnNlY29uZDsKKyAgICBpZiAo
YnJlYWtwb2ludC5saW5lTnVtYmVyIDwgc2NyaXB0LmxpbmVPZmZzZXQgKyAxKQorICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgaWYgKCFzY3JpcHQubGluZXNDb3VudCkgeworICAgICAgICBzY3Jp
cHQubGluZXNDb3VudCA9IDE7CisgICAgICAgIGZvciAoc2l6ZV90IGkgPSAwOyBpIDwgc2NyaXB0
LmRhdGEubGVuZ3RoKCk7ICsraSkgeworICAgICAgICAgICAgaWYgKHNjcmlwdC5kYXRhW2ldID09
ICdcbicpCisgICAgICAgICAgICAgICAgc2NyaXB0LmxpbmVzQ291bnQgKz0gMTsKKyAgICAgICAg
fQorICAgIH0KKyAgICBpZiAoYnJlYWtwb2ludC5saW5lTnVtYmVyID49IHNjcmlwdC5saW5lT2Zm
c2V0ICsgMSArIHNjcmlwdC5saW5lc0NvdW50KQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAg
ICBsb25nIGxpbmVOdW1iZXIgPSAwLCBjb2x1bW5OdW1iZXIgPSAwOworICAgIFN0cmluZyBkZWJ1
Z1NlcnZlckJyZWFrcG9pbnRJZCA9IFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5zZXRCcmVh
a3BvaW50KHNvdXJjZUlELCBicmVha3BvaW50LCAmbGluZU51bWJlciwgJmNvbHVtbk51bWJlcik7
CisgICAgaWYgKGRlYnVnU2VydmVyQnJlYWtwb2ludElkLmlzRW1wdHkoKSkKKyAgICAgICAgcmV0
dXJuIGZhbHNlOworCisgICAgQnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNN
YXA6Oml0ZXJhdG9yIGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yID0gbV9icmVha3Bv
aW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5maW5kKGJyZWFrcG9pbnRJZCk7CisgICAg
aWYgKGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yID09IG1fYnJlYWtwb2ludElkVG9E
ZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMuZW5kKCkpCisgICAgICAgIGRlYnVnU2VydmVyQnJlYWtw
b2ludElkc0l0ZXJhdG9yID0gbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElk
cy5zZXQoYnJlYWtwb2ludElkLCBWZWN0b3I8U3RyaW5nPigpKS5maXJzdDsKKyAgICBkZWJ1Z1Nl
cnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvci0+c2Vjb25kLmFwcGVuZChkZWJ1Z1NlcnZlckJyZWFr
cG9pbnRJZCk7CisKKyAgICBsb2NhdGlvbi0+c2V0U3RyaW5nKCJzb3VyY2VJRCIsIHNvdXJjZUlE
KTsKKyAgICBsb2NhdGlvbi0+c2V0TnVtYmVyKCJsaW5lTnVtYmVyIiwgbGluZU51bWJlcik7Cisg
ICAgbG9jYXRpb24tPnNldE51bWJlcigiY29sdW1uTnVtYmVyIiwgY29sdW1uTnVtYmVyKTsKKwor
ICAgIHJldHVybiB0cnVlOwogfQogCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmVkaXRT
Y3JpcHRTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgY29uc3QgU3RyaW5nJiBuZXdDb250
ZW50LCBib29sKiBzdWNjZXNzLCBTdHJpbmcqIHJlc3VsdCwgUmVmUHRyPEluc3BlY3RvclZhbHVl
PiogbmV3Q2FsbEZyYW1lcykKQEAgLTE5MSw3ICsyMTgsNyBAQCB2b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmVkaXRTY3JpcHRTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgY29uc3Qg
U3RyaQogCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmdldFNjcmlwdFNvdXJjZShjb25z
dCBTdHJpbmcmIHNvdXJjZUlELCBTdHJpbmcqIHNjcmlwdFNvdXJjZSkKIHsKLSAgICAqc2NyaXB0
U291cmNlID0gbV9zY3JpcHRJRFRvQ29udGVudC5nZXQoc291cmNlSUQpOworICAgICpzY3JpcHRT
b3VyY2UgPSBtX3NjcmlwdHMuZ2V0KHNvdXJjZUlEKS5kYXRhOwogfQogCiB2b2lkIEluc3BlY3Rv
ckRlYnVnZ2VyQWdlbnQ6OnNjaGVkdWxlUGF1c2VPbk5leHRTdGF0ZW1lbnQoRGVidWdnZXJFdmVu
dFR5cGUgdHlwZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gZGF0YSkKQEAgLTI3NywyMyAr
MzA0LDI1IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkUGFyc2VTb3VyY2UoY29u
c3QgU3RyaW5nJiBzb3VyY2VJRCwgY29uc3QgU3RyaW5nCiAgICAgLy8gRG9uJ3Qgc2VuZCBzY3Jp
cHQgY29udGVudCB0byB0aGUgZnJvbnQgZW5kIHVudGlsIGl0J3MgcmVhbGx5IG5lZWRlZC4KICAg
ICBtX2Zyb250ZW5kLT5wYXJzZWRTY3JpcHRTb3VyY2Uoc291cmNlSUQsIHVybCwgbGluZU9mZnNl
dCwgY29sdW1uT2Zmc2V0LCBkYXRhLmxlbmd0aCgpLCB3b3JsZFR5cGUpOwogCi0gICAgbV9zY3Jp
cHRJRFRvQ29udGVudC5zZXQoc291cmNlSUQsIGRhdGEpOworICAgIG1fc2NyaXB0cy5zZXQoc291
cmNlSUQsIFNjcmlwdCh1cmwsIGRhdGEsIGxpbmVPZmZzZXQsIGNvbHVtbk9mZnNldCkpOwogCiAg
ICAgaWYgKHVybC5pc0VtcHR5KCkpCiAgICAgICAgIHJldHVybjsKIAotICAgIFVSTFRvU291cmNl
SURzTWFwOjppdGVyYXRvciB1cmxUb1NvdXJjZUlEc0l0ZXJhdG9yID0gbV91cmxUb1NvdXJjZUlE
cy5maW5kKHVybCk7Ci0gICAgaWYgKHVybFRvU291cmNlSURzSXRlcmF0b3IgPT0gbV91cmxUb1Nv
dXJjZUlEcy5lbmQoKSkKLSAgICAgICAgdXJsVG9Tb3VyY2VJRHNJdGVyYXRvciA9IG1fdXJsVG9T
b3VyY2VJRHMuc2V0KHVybCwgVmVjdG9yPFN0cmluZz4oKSkuZmlyc3Q7Ci0gICAgdXJsVG9Tb3Vy
Y2VJRHNJdGVyYXRvci0+c2Vjb25kLmFwcGVuZChzb3VyY2VJRCk7Ci0KLSAgICBJbnNwZWN0ZWRV
UkxUb0JyZWFrcG9pbnRzTWFwOjppdGVyYXRvciBzdGlja3lCcmVha3BvaW50c0l0ZXJhdG9yID0g
bV9zdGlja3lCcmVha3BvaW50cy5maW5kKHVybCk7Ci0gICAgaWYgKHN0aWNreUJyZWFrcG9pbnRz
SXRlcmF0b3IgPT0gbV9zdGlja3lCcmVha3BvaW50cy5lbmQoKSkKLSAgICAgICAgcmV0dXJuOwot
Ci0gICAgY29uc3QgTG9jYXRpb25Ub0JyZWFrcG9pbnRNYXAmIGJyZWFrcG9pbnRzID0gc3RpY2t5
QnJlYWtwb2ludHNJdGVyYXRvci0+c2Vjb25kOwotICAgIGZvciAoTG9jYXRpb25Ub0JyZWFrcG9p
bnRNYXA6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gYnJlYWtwb2ludHMuYmVnaW4oKTsgaXQgIT0gYnJl
YWtwb2ludHMuZW5kKCk7ICsraXQpCi0gICAgICAgIHJlc3RvcmVCcmVha3BvaW50KHNvdXJjZUlE
LCBpdC0+c2Vjb25kKTsKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50c0Nv
b2tpZSA9IG1faW5zcGVjdG9yQWdlbnQtPnN0YXRlKCktPmdldE9iamVjdChJbnNwZWN0b3JTdGF0
ZTo6amF2YVNjcmlwdEJyZWFrcG9pbnRzKTsKKyAgICBmb3IgKEluc3BlY3Rvck9iamVjdDo6aXRl
cmF0b3IgaXQgPSBicmVha3BvaW50c0Nvb2tpZS0+YmVnaW4oKTsgaXQgIT0gYnJlYWtwb2ludHND
b29raWUtPmVuZCgpOyArK2l0KSB7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJy
ZWFrcG9pbnQgPSBpdC0+c2Vjb25kLT5hc09iamVjdCgpOworICAgICAgICBpZiAoIWJyZWFrcG9p
bnQpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgU2NyaXB0QnJlYWtwb2ludCBzY3Jp
cHRCcmVha3BvaW50OworICAgICAgICBpZiAoIWluc3BlY3Rvck9iamVjdFRvU2NyaXB0QnJlYWtw
b2ludCgqYnJlYWtwb2ludCwgJnNjcmlwdEJyZWFrcG9pbnQpKQorICAgICAgICAgICAgY29udGlu
dWU7CisgICAgICAgIGlmIChzY3JpcHRCcmVha3BvaW50LnVybCAhPSB1cmwpCisgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gbG9jYXRpb24gPSBJ
bnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpOworICAgICAgICBpZiAocmVzb2x2ZUJyZWFrcG9pbnRJ
blNjcmlwdChpdC0+Zmlyc3QsIHNjcmlwdEJyZWFrcG9pbnQsIHNvdXJjZUlELCBsb2NhdGlvbi5n
ZXQoKSkpCisgICAgICAgICAgICBtX2Zyb250ZW5kLT5icmVha3BvaW50UmVzb2x2ZWQoaXQtPmZp
cnN0LCBsb2NhdGlvbik7CisgICAgfQogfQogCiB2b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6
OmZhaWxlZFRvUGFyc2VTb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0cmluZyYgZGF0
YSwgaW50IGZpcnN0TGluZSwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBlcnJvck1lc3Nh
Z2UpCkBAIC0zMTIsNiArMzQxLDkgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRQ
YXVzZShTY3JpcHRTdGF0ZSogc2NyaXB0U3RhdGUpCiAKICAgICBtX2Zyb250ZW5kLT5wYXVzZWRT
Y3JpcHQobV9icmVha1Byb2dyYW1EZXRhaWxzKTsKICAgICBtX2phdmFTY3JpcHRQYXVzZVNjaGVk
dWxlZCA9IGZhbHNlOworCisgICAgaWYgKCFtX2NvbnRpbnVlVG9Qb3NpdGlvbkJyZWFrcG9pbnRJ
ZC5pc0VtcHR5KCkpCisgICAgICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5yZW1vdmVC
cmVha3BvaW50KG1fY29udGludWVUb1Bvc2l0aW9uQnJlYWtwb2ludElkKTsKIH0KIAogdm9pZCBJ
bnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpkaWRDb250aW51ZSgpCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oIGIvU291cmNlL1dlYkNv
cmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaAppbmRleCBmMGRlOTczLi4wZWRh
YTJmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdn
ZXJBZ2VudC5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50LmgKQEAgLTYwLDE1ICs2MCwxNiBAQCBwdWJsaWM6CiAgICAgc3RhdGljIFBhc3NPd25Q
dHI8SW5zcGVjdG9yRGVidWdnZXJBZ2VudD4gY3JlYXRlKEluc3BlY3RvckFnZW50KiwgSW5zcGVj
dG9yRnJvbnRlbmQqKTsKICAgICB2aXJ0dWFsIH5JbnNwZWN0b3JEZWJ1Z2dlckFnZW50KCk7CiAK
LSAgICB2b2lkIHNldEFsbEphdmFTY3JpcHRCcmVha3BvaW50cyhQYXNzUmVmUHRyPEluc3BlY3Rv
ck9iamVjdD4pOworICAgIHN0YXRpYyBib29sIGlzRGVidWdnZXJBbHdheXNFbmFibGVkKCk7CisK
ICAgICB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3QgU3RyaW5nJiB1cmwpOwogCiAgICAg
Ly8gUGFydCBvZiB0aGUgcHJvdG9jb2wuCiAgICAgdm9pZCBhY3RpdmF0ZUJyZWFrcG9pbnRzKCk7
CiAgICAgdm9pZCBkZWFjdGl2YXRlQnJlYWtwb2ludHMoKTsKLSAgICB2b2lkIHNldFN0aWNreUJy
ZWFrcG9pbnQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFdlYkNvcmU6OlNjcmlwdEJyZWFrcG9p
bnQmKTsKLSAgICB2b2lkIHNldEJyZWFrcG9pbnQoUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+
IGJyZWFrcG9pbnQsIFN0cmluZyogYnJlYWtwb2ludElkLCBsb25nKiBhY3R1YWxMaW5lTnVtYmVy
LCBsb25nKiBhY3R1YWxDb2x1bW5OdW1iZXIpOwotICAgIHZvaWQgcmVtb3ZlQnJlYWtwb2ludChj
b25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZCk7CisgICAgdm9pZCBzZXRKYXZhU2NyaXB0QnJlYWtw
b2ludChQYXNzUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludCwgU3RyaW5nKiBicmVh
a3BvaW50SWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGxvY2F0aW9ucyk7CisgICAgdm9pZCBy
ZW1vdmVKYXZhU2NyaXB0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZCk7Cisg
ICAgdm9pZCBjb250aW51ZVRvTG9jYXRpb24oY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgbG9uZyBs
aW5lTnVtYmVyLCBsb25nIGNvbHVtbk51bWJlcik7CiAgICAgdm9pZCBlZGl0U2NyaXB0U291cmNl
KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNvbnN0IFN0cmluZyYgbmV3Q29udGVudCwgYm9vbCog
c3VjY2VzcywgU3RyaW5nKiByZXN1bHQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIG5ld0NhbGxG
cmFtZXMpOwogICAgIHZvaWQgZ2V0U2NyaXB0U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlSUQs
IFN0cmluZyogc2NyaXB0U291cmNlKTsKICAgICB2b2lkIHNjaGVkdWxlUGF1c2VPbk5leHRTdGF0
ZW1lbnQoRGVidWdnZXJFdmVudFR5cGUgdHlwZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4g
ZGF0YSk7CkBAIC05MywyMyArOTQsNDEgQEAgcHJpdmF0ZToKICAgICB2aXJ0dWFsIHZvaWQgZGlk
UGF1c2UoU2NyaXB0U3RhdGUqKTsKICAgICB2aXJ0dWFsIHZvaWQgZGlkQ29udGludWUoKTsKIAot
ICAgIHZvaWQgcmVzdG9yZUJyZWFrcG9pbnRzKGNvbnN0IFN0cmluZyYgaW5zcGVjdGVkVVJMKTsK
LSAgICB2b2lkIHJlc3RvcmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNvbnN0
IFNjcmlwdEJyZWFrcG9pbnQmKTsKLQotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFZlY3Rv
cjxTdHJpbmc+ID4gVVJMVG9Tb3VyY2VJRHNNYXA7Ci0gICAgdHlwZWRlZiBzdGQ6OnBhaXI8bG9u
ZywgbG9uZz4gTG9jYXRpb247Ci0gICAgdHlwZWRlZiBIYXNoTWFwPExvY2F0aW9uLCBTY3JpcHRC
cmVha3BvaW50PiBMb2NhdGlvblRvQnJlYWtwb2ludE1hcDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8
U3RyaW5nLCBMb2NhdGlvblRvQnJlYWtwb2ludE1hcD4gSW5zcGVjdGVkVVJMVG9CcmVha3BvaW50
c01hcDsKKyAgICB2b2lkIHJlc29sdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgYnJlYWtwb2lu
dElkLCBjb25zdCBTY3JpcHRCcmVha3BvaW50JiwgSW5zcGVjdG9yQXJyYXkqIGxvY2F0aW9ucyk7
CisgICAgYm9vbCByZXNvbHZlQnJlYWtwb2ludEluU2NyaXB0KGNvbnN0IFN0cmluZyYgYnJlYWtw
b2ludElkLCBjb25zdCBTY3JpcHRCcmVha3BvaW50JiwgY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwg
SW5zcGVjdG9yT2JqZWN0KiBsb2NhdGlvbik7CisKKyAgICBzdHJ1Y3QgU2NyaXB0IHsKKyAgICAg
ICAgU2NyaXB0KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTdHJpbmcmIGRhdGEsIGludCBsaW5l
T2Zmc2V0LCBpbnQgY29sdW1uT2Zmc2V0KQorICAgICAgICAgICAgOiB1cmwodXJsKQorICAgICAg
ICAgICAgLCBkYXRhKGRhdGEpCisgICAgICAgICAgICAsIGxpbmVPZmZzZXQobGluZU9mZnNldCkK
KyAgICAgICAgICAgICwgY29sdW1uT2Zmc2V0KGNvbHVtbk9mZnNldCkKKyAgICAgICAgICAgICwg
bGluZXNDb3VudCgwKQorICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBTY3JpcHQoKQor
ICAgICAgICB7CisgICAgICAgIH0KKworICAgICAgICBTdHJpbmcgdXJsOworICAgICAgICBTdHJp
bmcgZGF0YTsKKyAgICAgICAgaW50IGxpbmVPZmZzZXQ7CisgICAgICAgIGludCBjb2x1bW5PZmZz
ZXQ7CisgICAgICAgIGludCBsaW5lc0NvdW50OworICAgIH07CisKKyAgICB0eXBlZGVmIEhhc2hN
YXA8U3RyaW5nLCBTY3JpcHQ+IFNjcmlwdHNNYXA7CisgICAgdHlwZWRlZiBIYXNoTWFwPFN0cmlu
ZywgVmVjdG9yPFN0cmluZz4gPiBCcmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElk
c01hcDsKIAogICAgIEluc3BlY3RvckFnZW50KiBtX2luc3BlY3RvckFnZW50OwogICAgIEluc3Bl
Y3RvckZyb250ZW5kKiBtX2Zyb250ZW5kOwogICAgIFNjcmlwdFN0YXRlKiBtX3BhdXNlZFNjcmlw
dFN0YXRlOwotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1fc2NyaXB0SURUb0NvbnRlbnQ7
Ci0gICAgVVJMVG9Tb3VyY2VJRHNNYXAgbV91cmxUb1NvdXJjZUlEczsKLSAgICBJbnNwZWN0ZWRV
UkxUb0JyZWFrcG9pbnRzTWFwIG1fc3RpY2t5QnJlYWtwb2ludHM7CisgICAgU2NyaXB0c01hcCBt
X3NjcmlwdHM7CisgICAgQnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNNYXAg
bV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkczsKKyAgICBTdHJpbmcgbV9j
b250aW51ZVRvUG9zaXRpb25CcmVha3BvaW50SWQ7CiAgICAgUmVmUHRyPEluc3BlY3Rvck9iamVj
dD4gbV9icmVha1Byb2dyYW1EZXRhaWxzOwogICAgIGJvb2wgbV9qYXZhU2NyaXB0UGF1c2VTY2hl
ZHVsZWQ7Ci0gICAgYm9vbCBtX2JyZWFrcG9pbnRzUmVzdG9yZWQ7CiB9OwogCiB9IC8vIG5hbWVz
cGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yVmFsdWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMu
Y3BwCmluZGV4IGQxYjgwOTMuLjQyY2Q2N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuY3BwCkBAIC02OTUsNiArNjk1LDE3IEBAIFBhc3NSZWZQdHI8SW5z
cGVjdG9yVmFsdWU+IEluc3BlY3Rvck9iamVjdDo6Z2V0KGNvbnN0IFN0cmluZyYgbmFtZSkgY29u
c3QKICAgICByZXR1cm4gaXQtPnNlY29uZDsKIH0KIAordm9pZCBJbnNwZWN0b3JPYmplY3Q6OnJl
bW92ZShjb25zdCBTdHJpbmcmIG5hbWUpCit7CisgICAgbV9kYXRhLnJlbW92ZShuYW1lKTsKKyAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fb3JkZXIuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAg
aWYgKG1fb3JkZXJbaV0gPT0gbmFtZSkgeworICAgICAgICAgICAgbV9vcmRlci5yZW1vdmUoaSk7
CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQorICAgIH0KK30KKwogdm9pZCBJbnNwZWN0
b3JPYmplY3Q6OndyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRwdXQpIGNvbnN0CiB7CiAgICAg
b3V0cHV0LT5hcHBlbmQoJ3snKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuaCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JW
YWx1ZXMuaAppbmRleCA4NDNmMzY5Li42Nzk5NDM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL0luc3BlY3RvclZhbHVlcy5oCkBAIC0xNzgsNiArMTc4LDcgQEAgcHVibGljOgogICAgIHZv
aWQgc2V0T2JqZWN0KGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmpl
Y3Q+KTsKICAgICB2b2lkIHNldEFycmF5KGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJ
bnNwZWN0b3JBcnJheT4pOwogCisgICAgaXRlcmF0b3IgZmluZChjb25zdCBTdHJpbmcmIG5hbWUp
OwogICAgIGNvbnN0X2l0ZXJhdG9yIGZpbmQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKICAg
ICBib29sIGdldEJvb2xlYW4oY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiBvdXRwdXQpIGNvbnN0
OwogICAgIGJvb2wgZ2V0TnVtYmVyKGNvbnN0IFN0cmluZyYgbmFtZSwgbG9uZyogb3V0cHV0KSBj
b25zdDsKQEAgLTE4Nyw2ICsxODgsOCBAQCBwdWJsaWM6CiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0
b3JBcnJheT4gZ2V0QXJyYXkoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKICAgICBQYXNzUmVm
UHRyPEluc3BlY3RvclZhbHVlPiBnZXQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKIAorICAg
IHZvaWQgcmVtb3ZlKGNvbnN0IFN0cmluZyYgbmFtZSk7CisKICAgICB2aXJ0dWFsIHZvaWQgd3Jp
dGVKU09OKFZlY3RvcjxVQ2hhcj4qIG91dHB1dCkgY29uc3Q7CiAKICAgICBpdGVyYXRvciBiZWdp
bigpIHsgcmV0dXJuIG1fZGF0YS5iZWdpbigpOyB9CkBAIC0yMjgsNiArMjMxLDExIEBAIHByaXZh
dGU6CiAgICAgVmVjdG9yPFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gPiBtX2RhdGE7CiB9OwogCitp
bmxpbmUgSW5zcGVjdG9yT2JqZWN0OjppdGVyYXRvciBJbnNwZWN0b3JPYmplY3Q6OmZpbmQoY29u
c3QgU3RyaW5nJiBuYW1lKQoreworICAgIHJldHVybiBtX2RhdGEuZmluZChuYW1lKTsKK30KKwog
aW5saW5lIEluc3BlY3Rvck9iamVjdDo6Y29uc3RfaXRlcmF0b3IgSW5zcGVjdG9yT2JqZWN0Ojpm
aW5kKGNvbnN0IFN0cmluZyYgbmFtZSkgY29uc3QKIHsKICAgICByZXR1cm4gbV9kYXRhLmZpbmQo
bmFtZSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvU2NyaXB0QnJlYWtw
b2ludC5oIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1NjcmlwdEJyZWFrcG9pbnQuaAppbmRl
eCA5NTIxY2NkLi4yMGJlN2YzMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L1NjcmlwdEJyZWFrcG9pbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvU2NyaXB0
QnJlYWtwb2ludC5oCkBAIC0zNSwxOCArMzUsOCBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBz
dHJ1Y3QgU2NyaXB0QnJlYWtwb2ludCB7Ci0gICAgU2NyaXB0QnJlYWtwb2ludChsb25nIGxpbmVO
dW1iZXIsIGxvbmcgY29sdW1uTnVtYmVyLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwgYm9vbCBl
bmFibGVkKQotICAgICAgICA6IGxpbmVOdW1iZXIobGluZU51bWJlcikKLSAgICAgICAgLCBjb2x1
bW5OdW1iZXIoY29sdW1uTnVtYmVyKQotICAgICAgICAsIGNvbmRpdGlvbihjb25kaXRpb24pCi0g
ICAgICAgICwgZW5hYmxlZChlbmFibGVkKQotICAgIHsKLSAgICB9Ci0KLSAgICBTY3JpcHRCcmVh
a3BvaW50KCkKLSAgICB7Ci0gICAgfQotCisgICAgU3RyaW5nIHVybDsKKyAgICBTdHJpbmcgc291
cmNlSUQ7CiAgICAgbG9uZyBsaW5lTnVtYmVyOwogICAgIGxvbmcgY29sdW1uTnVtYmVyOwogICAg
IFN0cmluZyBjb25kaXRpb247CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL0JyZWFrcG9pbnRNYW5hZ2VyLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdlci5qcwppbmRleCAxNjliNDczLi45NDM0NWQ1IDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRN
YW5hZ2VyLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtw
b2ludE1hbmFnZXIuanMKQEAgLTM3LDE4ICszNywxNCBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2lu
dE1hbmFnZXIgPSBmdW5jdGlvbigpCiAKICAgICB0aGlzLl9icmVha3BvaW50cyA9IHt9OwogICAg
IHRoaXMuX2RvbUJyZWFrcG9pbnRzUmVzdG9yZWQgPSBmYWxzZTsKLSAgICB0aGlzLl9zY3JpcHRC
cmVha3BvaW50cyA9IHt9OwogCiAgICAgV2ViSW5zcGVjdG9yLnNldHRpbmdzLmFkZEV2ZW50TGlz
dGVuZXIoV2ViSW5zcGVjdG9yLlNldHRpbmdzLkV2ZW50cy5Qcm9qZWN0Q2hhbmdlZCwgdGhpcy5f
cHJvamVjdENoYW5nZWQsIHRoaXMpOwotICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmFk
ZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkJyZWFrcG9p
bnRBZGRlZCwgdGhpcy5fc2NyaXB0QnJlYWtwb2ludEFkZGVkLCB0aGlzKTsKLSAgICBXZWJJbnNw
ZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dl
ck1vZGVsLkV2ZW50cy5CcmVha3BvaW50UmVtb3ZlZCwgdGhpcy5fc2NyaXB0QnJlYWtwb2ludFJl
bW92ZWQsIHRoaXMpOwogICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmFkZEV2ZW50TGlz
dGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkRlYnVnZ2VyUGF1c2VkLCB0
aGlzLl9kZWJ1Z2dlclBhdXNlZCwgdGhpcyk7CiAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9k
ZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMuRGVi
dWdnZXJSZXN1bWVkLCB0aGlzLl9kZWJ1Z2dlclJlc3VtZWQsIHRoaXMpOwogfQogCiBXZWJJbnNw
ZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJlYWtwb2ludFR5cGVzID0gewogICAgIERPTTogIkRP
TSIsCi0gICAgSlM6ICJKUyIsCiAgICAgRXZlbnRMaXN0ZW5lcjogIkV2ZW50TGlzdGVuZXIiLAog
ICAgIFhIUjogIlhIUiIKIH0KQEAgLTEwMywzOCArOTksNiBAQCBXZWJJbnNwZWN0b3IuQnJlYWtw
b2ludE1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xp
c3RlbmVycyhXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuRXZlbnRzLkV2ZW50TGlzdGVu
ZXJCcmVha3BvaW50QWRkZWQsIGJyZWFrcG9pbnQudmlldyk7CiAgICAgfSwKIAotICAgIF9jcmVh
dGVKYXZhU2NyaXB0QnJlYWtwb2ludDogZnVuY3Rpb24odXJsLCBsaW5lTnVtYmVyLCBjb25kaXRp
b24sIGVuYWJsZWQsIHJlc3RvcmVkKQotICAgIHsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnRJZCA9
IHRoaXMuX2NyZWF0ZUphdmFTY3JpcHRCcmVha3BvaW50SWQodXJsLCBsaW5lTnVtYmVyKTsKLSAg
ICAgICAgaWYgKGJyZWFrcG9pbnRJZCBpbiB0aGlzLl9icmVha3BvaW50cykKLSAgICAgICAgICAg
IHJldHVybjsKLQotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IG5ldyBXZWJJbnNwZWN0b3IuSmF2
YVNjcmlwdEJyZWFrcG9pbnQodXJsLCBsaW5lTnVtYmVyLCBjb25kaXRpb24pOwotICAgICAgICB0
aGlzLl9zZXRCcmVha3BvaW50KGJyZWFrcG9pbnRJZCwgYnJlYWtwb2ludCwgZW5hYmxlZCwgcmVz
dG9yZWQpOwotICAgIH0sCi0KLSAgICBfc2NyaXB0QnJlYWtwb2ludEFkZGVkOiBmdW5jdGlvbihl
dmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBzY3JpcHRCcmVha3BvaW50ID0gZXZlbnQuZGF0YTsK
LQotICAgICAgICBpZiAoIXNjcmlwdEJyZWFrcG9pbnQudXJsKQotICAgICAgICAgICAgcmV0dXJu
OwotCi0gICAgICAgIGlmICghc2NyaXB0QnJlYWtwb2ludC5yZXN0b3JlZCkKLSAgICAgICAgICAg
IHRoaXMuX2NyZWF0ZUphdmFTY3JpcHRCcmVha3BvaW50KHNjcmlwdEJyZWFrcG9pbnQudXJsLCBz
Y3JpcHRCcmVha3BvaW50Lm9yaWdpbmFsTGluZU51bWJlciwgc2NyaXB0QnJlYWtwb2ludC5jb25k
aXRpb24sIHNjcmlwdEJyZWFrcG9pbnQuZW5hYmxlZCwgZmFsc2UpOwotICAgICAgICB2YXIgYnJl
YWtwb2ludElkID0gdGhpcy5fY3JlYXRlSmF2YVNjcmlwdEJyZWFrcG9pbnRJZChzY3JpcHRCcmVh
a3BvaW50LnVybCwgc2NyaXB0QnJlYWtwb2ludC5vcmlnaW5hbExpbmVOdW1iZXIpOwotICAgICAg
ICB0aGlzLl9zY3JpcHRCcmVha3BvaW50c1tzY3JpcHRCcmVha3BvaW50LmlkXSA9IGJyZWFrcG9p
bnRJZDsKLSAgICB9LAotCi0gICAgX3NjcmlwdEJyZWFrcG9pbnRSZW1vdmVkOiBmdW5jdGlvbihl
dmVudCkKLSAgICB7Ci0gICAgICAgIHZhciBzY3JpcHRCcmVha3BvaW50SWQgPSBldmVudC5kYXRh
OwotICAgICAgICB2YXIgYnJlYWtwb2ludElkID0gdGhpcy5fc2NyaXB0QnJlYWtwb2ludHNbc2Ny
aXB0QnJlYWtwb2ludElkXTsKLSAgICAgICAgZGVsZXRlIHRoaXMuX3NjcmlwdEJyZWFrcG9pbnRz
W3NjcmlwdEJyZWFrcG9pbnRJZF07Ci0gICAgICAgIGlmIChicmVha3BvaW50SWQgaW4gdGhpcy5f
YnJlYWtwb2ludHMpCi0gICAgICAgICAgICB0aGlzLl9yZW1vdmVCcmVha3BvaW50KGJyZWFrcG9p
bnRJZCk7Ci0gICAgfSwKLQogICAgIGNyZWF0ZVhIUkJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHVybCkK
ICAgICB7CiAgICAgICAgIHRoaXMuX2NyZWF0ZVhIUkJyZWFrcG9pbnQodXJsLCB0cnVlLCBmYWxz
ZSk7CkBAIC0yMzEsNyArMTk1LDYgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnBy
b3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRzID0ge307CiAgICAg
ICAgIHRoaXMuX2RvbUJyZWFrcG9pbnRzUmVzdG9yZWQgPSBmYWxzZTsKLSAgICAgICAgdGhpcy5f
c2NyaXB0QnJlYWtwb2ludHMgPSB7fTsKICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0
ZW5lcnMoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkV2ZW50cy5Qcm9qZWN0Q2hhbmdl
ZCk7CiAKICAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0gdGhpcy5fc3RpY2t5QnJlYWtwb2ludHNb
V2ViSW5zcGVjdG9yLnNldHRpbmdzLnByb2plY3RJZF0gfHwgW107CkBAIC0yMzksMTQgKzIwMiwx
MiBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlID0gewogICAgICAg
ICAgICAgdmFyIGJyZWFrcG9pbnQgPSBicmVha3BvaW50c1tpXTsKICAgICAgICAgICAgIGlmIChi
cmVha3BvaW50LnR5cGUgPT09IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5CcmVha3Bv
aW50VHlwZXMuRXZlbnRMaXN0ZW5lcikKICAgICAgICAgICAgICAgICB0aGlzLl9jcmVhdGVFdmVu
dExpc3RlbmVyQnJlYWtwb2ludChicmVha3BvaW50LmNvbmRpdGlvbi5ldmVudE5hbWUsIGJyZWFr
cG9pbnQuZW5hYmxlZCwgdHJ1ZSk7Ci0gICAgICAgICAgICBlbHNlIGlmIChicmVha3BvaW50LnR5
cGUgPT09IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5CcmVha3BvaW50VHlwZXMuSlMp
Ci0gICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlSmF2YVNjcmlwdEJyZWFrcG9pbnQoYnJlYWtw
b2ludC5jb25kaXRpb24udXJsLCBicmVha3BvaW50LmNvbmRpdGlvbi5saW5lTnVtYmVyLCBicmVh
a3BvaW50LmNvbmRpdGlvbi5jb25kaXRpb24sIGJyZWFrcG9pbnQuZW5hYmxlZCwgdHJ1ZSk7CiAg
ICAgICAgICAgICBlbHNlIGlmIChicmVha3BvaW50LnR5cGUgPT09IFdlYkluc3BlY3Rvci5CcmVh
a3BvaW50TWFuYWdlci5CcmVha3BvaW50VHlwZXMuWEhSKQogICAgICAgICAgICAgICAgIHRoaXMu
X2NyZWF0ZVhIUkJyZWFrcG9pbnQoYnJlYWtwb2ludC5jb25kaXRpb24udXJsLCBicmVha3BvaW50
LmVuYWJsZWQsIHRydWUpOwogICAgICAgICB9CiAKICAgICAgICAgaWYgKCF0aGlzLl9icmVha3Bv
aW50c1B1c2hlZFRvRnJvbnRlbmQpIHsKLSAgICAgICAgICAgIHRoaXMuX3B1c2hCcmVha3BvaW50
c1RvQmFja2VuZCgpOworICAgICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRBbGxCcm93c2Vy
QnJlYWtwb2ludHModGhpcy5fc3RpY2t5QnJlYWtwb2ludHMpOwogICAgICAgICAgICAgdGhpcy5f
YnJlYWtwb2ludHNQdXNoZWRUb0Zyb250ZW5kID0gdHJ1ZTsKICAgICAgICAgfQogICAgIH0sCkBA
IC0zMDcsMzQgKzI2OCw3IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5
cGUgPSB7CiAgICAgICAgIFdlYkluc3BlY3Rvci5zZXR0aW5ncy5uYXRpdmVCcmVha3BvaW50cyA9
IGJyZWFrcG9pbnRzOwogCiAgICAgICAgIHRoaXMuX3N0aWNreUJyZWFrcG9pbnRzW1dlYkluc3Bl
Y3Rvci5zZXR0aW5ncy5wcm9qZWN0SWRdID0gYnJlYWtwb2ludHM7Ci0gICAgICAgIHRoaXMuX3B1
c2hCcmVha3BvaW50c1RvQmFja2VuZCgpOwotICAgIH0sCi0KLSAgICBfcHVzaEJyZWFrcG9pbnRz
VG9CYWNrZW5kOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgYWxsSmF2YVNjcmlwdEJy
ZWFrcG9pbnRzID0ge307Ci0gICAgICAgIHZhciBhbGxCcm93c2VyQnJlYWtwb2ludHMgPSB7fTsK
LSAgICAgICAgZm9yICh2YXIgcHJvamVjdElkIGluIHRoaXMuX3N0aWNreUJyZWFrcG9pbnRzKSB7
Ci0gICAgICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSB0aGlzLl9zdGlja3lCcmVha3BvaW50c1tw
cm9qZWN0SWRdOwotICAgICAgICAgICAgdmFyIGphdmFTY3JpcHRCcmVha3BvaW50cyA9IFtdOwot
ICAgICAgICAgICAgdmFyIGJyb3dzZXJCcmVha3BvaW50cyA9IFtdOwotICAgICAgICAgICAgZm9y
ICh2YXIgaSA9IDA7IGkgPCBicmVha3BvaW50cy5sZW5ndGg7ICsraSkgewotICAgICAgICAgICAg
ICAgIGlmIChicmVha3BvaW50c1tpXS50eXBlID09IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFu
YWdlci5CcmVha3BvaW50VHlwZXMuSlMpIHsKLSAgICAgICAgICAgICAgICAgICAgdmFyIGRhdGEg
PSB7fTsKLSAgICAgICAgICAgICAgICAgICAgZGF0YS5lbmFibGVkID0gYnJlYWtwb2ludHNbaV0u
ZW5hYmxlZDsKLSAgICAgICAgICAgICAgICAgICAgZm9yICh2YXIgcCBpbiBicmVha3BvaW50c1tp
XS5jb25kaXRpb24pCi0gICAgICAgICAgICAgICAgICAgICAgICBkYXRhW3BdID0gYnJlYWtwb2lu
dHNbaV0uY29uZGl0aW9uW3BdOwotICAgICAgICAgICAgICAgICAgICBqYXZhU2NyaXB0QnJlYWtw
b2ludHMucHVzaChkYXRhKTsKLSAgICAgICAgICAgICAgICB9IGVsc2UKLSAgICAgICAgICAgICAg
ICAgICAgYnJvd3NlckJyZWFrcG9pbnRzLnB1c2goYnJlYWtwb2ludHNbaV0pOwotICAgICAgICAg
ICAgfQotICAgICAgICAgICAgaWYgKGphdmFTY3JpcHRCcmVha3BvaW50cy5sZW5ndGgpCi0gICAg
ICAgICAgICAgICAgYWxsSmF2YVNjcmlwdEJyZWFrcG9pbnRzW3Byb2plY3RJZF0gPSBqYXZhU2Ny
aXB0QnJlYWtwb2ludHM7Ci0gICAgICAgICAgICBpZiAoYnJvd3NlckJyZWFrcG9pbnRzLmxlbmd0
aCkKLSAgICAgICAgICAgICAgICBhbGxCcm93c2VyQnJlYWtwb2ludHNbcHJvamVjdElkXSA9IGJy
b3dzZXJCcmVha3BvaW50czsKLSAgICAgICAgfQotICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnNl
dEFsbEphdmFTY3JpcHRCcmVha3BvaW50cyhhbGxKYXZhU2NyaXB0QnJlYWtwb2ludHMpOwotICAg
ICAgICBJbnNwZWN0b3JCYWNrZW5kLnNldEFsbEJyb3dzZXJCcmVha3BvaW50cyhhbGxCcm93c2Vy
QnJlYWtwb2ludHMpOworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnNldEFsbEJyb3dzZXJCcmVh
a3BvaW50cyh0aGlzLl9zdGlja3lCcmVha3BvaW50cyk7CiAgICAgfSwKIAogICAgIF92YWxpZGF0
ZUJyZWFrcG9pbnRzOiBmdW5jdGlvbihwZXJzaXN0ZW50QnJlYWtwb2ludHMpCkBAIC0zNTUsMTUg
KzI4OSwxMiBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlID0gewog
ICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29uZGl0aW9uLmV2ZW50TmFtZSAhPT0gInN0cmlu
ZyIpCiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGlkICs9
IGNvbmRpdGlvbi5ldmVudE5hbWU7Ci0gICAgICAgICAgICB9IGVsc2UgaWYgKGJyZWFrcG9pbnQu
dHlwZSA9PT0gV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkJyZWFrcG9pbnRUeXBlcy5K
UykgewotICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29uZGl0aW9uLnVybCAhPT0gInN0cmlu
ZyIgfHwgdHlwZW9mIGNvbmRpdGlvbi5saW5lTnVtYmVyICE9PSAibnVtYmVyIiB8fCB0eXBlb2Yg
Y29uZGl0aW9uLmNvbmRpdGlvbiAhPT0gInN0cmluZyIpCi0gICAgICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwotICAgICAgICAgICAgICAgIGlkICs9IGNvbmRpdGlvbi51cmwgKyAiOiIgKyBjb25k
aXRpb24ubGluZU51bWJlcjsKICAgICAgICAgICAgIH0gZWxzZSBpZiAoYnJlYWtwb2ludC50eXBl
ID09PSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJlYWtwb2ludFR5cGVzLlhIUikg
ewogICAgICAgICAgICAgICAgIGlmICh0eXBlb2YgY29uZGl0aW9uLnVybCAhPT0gInN0cmluZyIp
CiAgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgICAgIGlkICs9IGNv
bmRpdGlvbi51cmw7Ci0gICAgICAgICAgICB9CisgICAgICAgICAgICB9IGVsc2UKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGlmIChpZCBpbiBicmVha3BvaW50c1NldCkK
ICAgICAgICAgICAgICAgICBjb250aW51ZTsKICAgICAgICAgICAgIGJyZWFrcG9pbnRzU2V0W2lk
XSA9IHRydWU7CkBAIC0zNzcsMTEgKzMwOCw2IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFu
YWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHJldHVybiAiZG9tOiIgKyBub2RlSWQgKyAiOiIg
KyB0eXBlOwogICAgIH0sCiAKLSAgICBfY3JlYXRlSmF2YVNjcmlwdEJyZWFrcG9pbnRJZDogZnVu
Y3Rpb24odXJsLCBsaW5lTnVtYmVyKQotICAgIHsKLSAgICAgICAgcmV0dXJuICJqczoiICsgdXJs
ICsgIjoiICsgbGluZU51bWJlcjsKLSAgICB9LAotCiAgICAgX2NyZWF0ZUV2ZW50TGlzdGVuZXJC
cmVha3BvaW50SWQ6IGZ1bmN0aW9uKGV2ZW50TmFtZSkKICAgICB7CiAgICAgICAgIHJldHVybiAi
ZXZlbnRMaXN0bmVyOiIgKyBldmVudE5hbWU7CkBAIC00MjAsMjkgKzM0Niw2IEBAIFdlYkluc3Bl
Y3Rvci5ET01CcmVha3BvaW50LnByb3RvdHlwZSA9IHsKICAgICB9CiB9CiAKLVdlYkluc3BlY3Rv
ci5KYXZhU2NyaXB0QnJlYWtwb2ludCA9IGZ1bmN0aW9uKHVybCwgbGluZU51bWJlciwgY29uZGl0
aW9uKQotewotICAgIHRoaXMuX3VybCA9IHVybDsKLSAgICB0aGlzLl9saW5lTnVtYmVyID0gbGlu
ZU51bWJlcjsKLSAgICB0aGlzLl9jb25kaXRpb24gPSBjb25kaXRpb247Ci19Ci0KLVdlYkluc3Bl
Y3Rvci5KYXZhU2NyaXB0QnJlYWtwb2ludC5wcm90b3R5cGUgPSB7Ci0gICAgX2VuYWJsZTogZnVu
Y3Rpb24oKQotICAgIHsKLSAgICB9LAotCi0gICAgX2Rpc2FibGU6IGZ1bmN0aW9uKCkKLSAgICB7
Ci0gICAgfSwKLQotICAgIF9zZXJpYWxpemVUb0pTT046IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAg
ICAgIHZhciB0eXBlID0gV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkJyZWFrcG9pbnRU
eXBlcy5KUzsKLSAgICAgICAgcmV0dXJuIHsgdHlwZTogdHlwZSwgY29uZGl0aW9uOiB7IHVybDog
dGhpcy5fdXJsLCBsaW5lTnVtYmVyOiB0aGlzLl9saW5lTnVtYmVyLCBjb2x1bW5OdW1iZXI6IDEs
IGNvbmRpdGlvbjogdGhpcy5fY29uZGl0aW9uIH0gfTsKLSAgICB9Ci19Ci0KIFdlYkluc3BlY3Rv
ci5FdmVudExpc3RlbmVyQnJlYWtwb2ludCA9IGZ1bmN0aW9uKGV2ZW50TmFtZSkKIHsKICAgICB0
aGlzLl9ldmVudE5hbWUgPSBldmVudE5hbWU7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanMKaW5kZXgg
YjIzN2NhMi4uNDM2NDI3YyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9CcmVha3BvaW50c1NpZGViYXJQYW5lLmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qcwpAQCAtNDAsNiArNDAs
OCBAQCBXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdEJyZWFrcG9pbnRzU2lkZWJhclBhbmUgPSBmdW5j
dGlvbih0aXRsZSkKIAogICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmFkZEV2ZW50TGlz
dGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkJyZWFrcG9pbnRBZGRlZCwg
dGhpcy5fYnJlYWtwb2ludEFkZGVkLCB0aGlzKTsKICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJN
b2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5C
cmVha3BvaW50UmVtb3ZlZCwgdGhpcy5fYnJlYWtwb2ludFJlbW92ZWQsIHRoaXMpOworICAgIFdl
Ykluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRl
YnVnZ2VyTW9kZWwuRXZlbnRzLkJyZWFrcG9pbnRSZXNvbHZlZCwgdGhpcy5fYnJlYWtwb2ludFJl
c29sdmVkLCB0aGlzKTsKKyAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRFdmVudExp
c3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5QYXJzZWRTY3JpcHRTb3Vy
Y2UsIHRoaXMuX3BhcnNlZFNjcmlwdFNvdXJjZSwgdGhpcyk7CiAgICAgV2ViSW5zcGVjdG9yLmRl
YnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5F
dmVudHMuRGVidWdnZXJQYXVzZWQsIHRoaXMuX2RlYnVnZ2VyUGF1c2VkLCB0aGlzKTsKICAgICBX
ZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5E
ZWJ1Z2dlck1vZGVsLkV2ZW50cy5EZWJ1Z2dlclJlc3VtZWQsIHRoaXMuX2RlYnVnZ2VyUmVzdW1l
ZCwgdGhpcyk7CiAgICAgV2ViSW5zcGVjdG9yLmJyZWFrcG9pbnRNYW5hZ2VyLmFkZEV2ZW50TGlz
dGVuZXIoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkV2ZW50cy5Qcm9qZWN0Q2hhbmdl
ZCwgdGhpcy5fcHJvamVjdENoYW5nZWQsIHRoaXMpOwpAQCAtNTAsNyArNTIsOSBAQCBXZWJJbnNw
ZWN0b3IuSmF2YVNjcmlwdEJyZWFrcG9pbnRzU2lkZWJhclBhbmUucHJvdG90eXBlID0gewogICAg
IHsKICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBldmVudC5kYXRhOwogICAgICAgICB2YXIgYnJl
YWtwb2ludElkID0gYnJlYWtwb2ludC5pZDsKLSAgICAgICAgdmFyIGRhdGEgPSBicmVha3BvaW50
LmRhdGE7CisKKyAgICAgICAgaWYgKGJyZWFrcG9pbnQudXJsICYmICFXZWJJbnNwZWN0b3IuZGVi
dWdnZXJNb2RlbC5zY3JpcHRzRm9yVVJMKGJyZWFrcG9pbnQudXJsKS5sZW5ndGgpCisgICAgICAg
ICAgICByZXR1cm47CiAKICAgICAgICAgdmFyIGVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVt
ZW50KCJsaSIpOwogCkBAIC02NCw3ICs2OCw3IEBAIFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0QnJl
YWtwb2ludHNTaWRlYmFyUGFuZS5wcm90b3R5cGUgPSB7CiAgICAgICAgIHZhciBsYWJlbCA9IGRv
Y3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKICAgICAgICAgZWxlbWVudC5hcHBlbmRDaGls
ZChsYWJlbCk7CiAKLSAgICAgICAgZWxlbWVudC5fZGF0YSA9IGRhdGE7CisgICAgICAgIGVsZW1l
bnQuX2RhdGEgPSBicmVha3BvaW50OwogICAgICAgICB2YXIgY3VycmVudEVsZW1lbnQgPSB0aGlz
Lmxpc3RFbGVtZW50LmZpcnN0Q2hpbGQ7CiAgICAgICAgIHdoaWxlIChjdXJyZW50RWxlbWVudCkg
ewogICAgICAgICAgICAgaWYgKGN1cnJlbnRFbGVtZW50Ll9kYXRhICYmIHRoaXMuX2NvbXBhcmVC
cmVha3BvaW50cyhjdXJyZW50RWxlbWVudC5fZGF0YSwgZWxlbWVudC5fZGF0YSkgPiAwKQpAQCAt
NzUsMTAgKzc5LDkgQEAgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRCcmVha3BvaW50c1NpZGViYXJQ
YW5lLnByb3RvdHlwZSA9IHsKIAogICAgICAgICBlbGVtZW50LmFkZEV2ZW50TGlzdGVuZXIoImNv
bnRleHRtZW51IiwgdGhpcy5fY29udGV4dE1lbnVFdmVudEZpcmVkLmJpbmQodGhpcywgYnJlYWtw
b2ludElkKSwgdHJ1ZSk7CiAKLSAgICAgICAgdGhpcy5fc2V0dXBCcmVha3BvaW50RWxlbWVudChk
YXRhLCBlbGVtZW50KTsKKyAgICAgICAgdGhpcy5fc2V0dXBCcmVha3BvaW50RWxlbWVudChicmVh
a3BvaW50LCBlbGVtZW50KTsKIAogICAgICAgICB2YXIgYnJlYWtwb2ludEl0ZW0gPSB7fTsKLSAg
ICAgICAgYnJlYWtwb2ludEl0ZW0uZGF0YSA9IGRhdGE7CiAgICAgICAgIGJyZWFrcG9pbnRJdGVt
LmVsZW1lbnQgPSBlbGVtZW50OwogICAgICAgICBicmVha3BvaW50SXRlbS5jaGVja2JveCA9IGNo
ZWNrYm94OwogICAgICAgICB0aGlzLl9pdGVtc1ticmVha3BvaW50SWRdID0gYnJlYWtwb2ludEl0
ZW07CkBAIC05Nyw2ICsxMDAsMjMgQEAgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRCcmVha3BvaW50
c1NpZGViYXJQYW5lLnByb3RvdHlwZSA9IHsKICAgICAgICAgfQogICAgIH0sCiAKKyAgICBfYnJl
YWtwb2ludFJlc29sdmVkOiBmdW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIHZhciBicmVh
a3BvaW50ID0gZXZlbnQuZGF0YTsKKyAgICAgICAgdGhpcy5fYnJlYWtwb2ludFJlbW92ZWQoeyBk
YXRhOiBicmVha3BvaW50LmlkIH0pOworICAgICAgICB0aGlzLl9icmVha3BvaW50QWRkZWQoeyBk
YXRhOiBicmVha3BvaW50IH0pOworICAgIH0sCisKKyAgICBfcGFyc2VkU2NyaXB0U291cmNlOiBm
dW5jdGlvbihldmVudCkKKyAgICB7CisgICAgICAgIHZhciB1cmwgPSBldmVudC5kYXRhLnNvdXJj
ZVVSTDsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0gV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9k
ZWwuYnJlYWtwb2ludHM7CisgICAgICAgIGZvciAodmFyIGlkIGluIGJyZWFrcG9pbnRzKSB7Cisg
ICAgICAgICAgICBpZiAoIShpZCBpbiB0aGlzLl9pdGVtcykpCisgICAgICAgICAgICAgICAgdGhp
cy5fYnJlYWtwb2ludEFkZGVkKHsgZGF0YTogYnJlYWtwb2ludHNbaWRdIH0pOworICAgICAgICB9
CisgICAgfSwKKwogICAgIF9icmVha3BvaW50RW5hYmxlQ2hhbmdlZDogZnVuY3Rpb24oZW5hYmxl
ZCwgZXZlbnQpCiAgICAgewogICAgICAgICB2YXIgYnJlYWtwb2ludElkID0gZXZlbnQuZGF0YTsK
QEAgLTEwNyw3ICsxMjcsOCBAQCBXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdEJyZWFrcG9pbnRzU2lk
ZWJhclBhbmUucHJvdG90eXBlID0gewogCiAgICAgX2JyZWFrcG9pbnRJdGVtQ2hlY2tib3hDbGlj
a2VkOiBmdW5jdGlvbihicmVha3BvaW50SWQsIGV2ZW50KQogICAgIHsKLSAgICAgICAgdGhpcy5f
c2V0QnJlYWtwb2ludEVuYWJsZWQoYnJlYWtwb2ludElkLCBldmVudC50YXJnZXQuY2hlY2tlZCk7
CisgICAgICAgIHZhciBicmVha3BvaW50ID0gV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYnJl
YWtwb2ludEZvcklkKGJyZWFrcG9pbnRJZCk7CisgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dl
ck1vZGVsLnVwZGF0ZUJyZWFrcG9pbnQoYnJlYWtwb2ludElkLCBicmVha3BvaW50LmNvbmRpdGlv
biwgZXZlbnQudGFyZ2V0LmNoZWNrZWQpOwogCiAgICAgICAgIC8vIEJyZWFrcG9pbnQgZWxlbWVu
dCBtYXkgaGF2ZSBpdCdzIG93biBjbGljayBoYW5kbGVyLgogICAgICAgICBldmVudC5zdG9wUHJv
cGFnYXRpb24oKTsKQEAgLTE4NiwyMCArMjA3LDI5IEBAIFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0
QnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90b3R5cGUgPSB7CiAKICAgICBfc2V0dXBCcmVha3Bv
aW50RWxlbWVudDogZnVuY3Rpb24oZGF0YSwgZWxlbWVudCkKICAgICB7CisgICAgICAgIHZhciBz
b3VyY2VJRDsKKyAgICAgICAgdmFyIGxpbmVOdW1iZXIgPSBkYXRhLmxpbmVOdW1iZXI7CisgICAg
ICAgIGlmIChkYXRhLmxvY2F0aW9ucy5sZW5ndGgpIHsKKyAgICAgICAgICAgIHNvdXJjZUlEID0g
ZGF0YS5sb2NhdGlvbnNbMF0uc291cmNlSUQ7CisgICAgICAgICAgICBsaW5lTnVtYmVyID0gZGF0
YS5sb2NhdGlvbnNbMF0ubGluZU51bWJlcjsKKyAgICAgICAgfQorCiAgICAgICAgIHZhciBkaXNw
bGF5TmFtZSA9IGRhdGEudXJsID8gV2ViSW5zcGVjdG9yLmRpc3BsYXlOYW1lRm9yVVJMKGRhdGEu
dXJsKSA6IFdlYkluc3BlY3Rvci5VSVN0cmluZygiKHByb2dyYW0pIik7Ci0gICAgICAgIHZhciBs
YWJlbEVsZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShkaXNwbGF5TmFtZSArICI6IiAr
IGRhdGEubGluZU51bWJlcik7CisgICAgICAgIHZhciBsYWJlbEVsZW1lbnQgPSBkb2N1bWVudC5j
cmVhdGVUZXh0Tm9kZShkaXNwbGF5TmFtZSArICI6IiArIGxpbmVOdW1iZXIpOwogICAgICAgICBl
bGVtZW50LmFwcGVuZENoaWxkKGxhYmVsRWxlbWVudCk7CiAKICAgICAgICAgdmFyIHNvdXJjZVRl
eHRFbGVtZW50ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CiAgICAgICAgIHNvdXJj
ZVRleHRFbGVtZW50LmNsYXNzTmFtZSA9ICJzb3VyY2UtdGV4dCBtb25vc3BhY2UiOwogICAgICAg
ICBlbGVtZW50LmFwcGVuZENoaWxkKHNvdXJjZVRleHRFbGVtZW50KTsKIAotICAgICAgICBmdW5j
dGlvbiBkaWRHZXRTb3VyY2VMaW5lKHRleHQpCi0gICAgICAgIHsKLSAgICAgICAgICAgIHNvdXJj
ZVRleHRFbGVtZW50LnRleHRDb250ZW50ID0gdGV4dDsKKyAgICAgICAgaWYgKHNvdXJjZUlEKSB7
CisgICAgICAgICAgICBmdW5jdGlvbiBkaWRHZXRTb3VyY2VMaW5lKHRleHQpCisgICAgICAgICAg
ICB7CisgICAgICAgICAgICAgICAgc291cmNlVGV4dEVsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgdmFyIHNjcmlwdCA9IFdlYkluc3BlY3Rvci5k
ZWJ1Z2dlck1vZGVsLnNjcmlwdEZvclNvdXJjZUlEKHNvdXJjZUlEKTsKKyAgICAgICAgICAgIHNj
cmlwdC5zb3VyY2VMaW5lKGxpbmVOdW1iZXIsIGRpZEdldFNvdXJjZUxpbmUuYmluZCh0aGlzKSk7
CiAgICAgICAgIH0KLSAgICAgICAgdmFyIHNjcmlwdCA9IFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1v
ZGVsLnNjcmlwdEZvclNvdXJjZUlEKGRhdGEuc291cmNlSUQpOwotICAgICAgICBzY3JpcHQuc291
cmNlTGluZShkYXRhLmxpbmVOdW1iZXIsIGRpZEdldFNvdXJjZUxpbmUuYmluZCh0aGlzKSk7CiAK
ICAgICAgICAgZWxlbWVudC5hZGRTdHlsZUNsYXNzKCJjdXJzb3ItcG9pbnRlciIpOwogICAgICAg
ICB2YXIgY2xpY2tIYW5kbGVyID0gV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLnNob3dTb3Vy
Y2VMaW5lLmJpbmQoV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLCBkYXRhLnVybCwgZGF0YS5s
aW5lTnVtYmVyKTsKQEAgLTIxNCwxMyArMjQ0LDYgQEAgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRC
cmVha3BvaW50c1NpZGViYXJQYW5lLnByb3RvdHlwZSA9IHsKICAgICAgICAgICAgIHJldHVybiBi
cmVha3BvaW50LmlkOwogICAgfSwKIAotICAgIF9zZXRCcmVha3BvaW50RW5hYmxlZDogZnVuY3Rp
b24oYnJlYWtwb2ludElkLCBlbmFibGVkKQotICAgIHsKLSAgICAgICAgdmFyIGJyZWFrcG9pbnQg
PSBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5icmVha3BvaW50Rm9ySWQoYnJlYWtwb2ludElk
KTsKLSAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwucmVtb3ZlQnJlYWtwb2ludChi
cmVha3BvaW50SWQpOwotICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5zZXRCcmVh
a3BvaW50KGJyZWFrcG9pbnQuc291cmNlSUQsIGJyZWFrcG9pbnQubGluZSwgZW5hYmxlZCwgYnJl
YWtwb2ludC5jb25kaXRpb24pOwotICAgIH0sCi0KICAgICBfcmVtb3ZlQnJlYWtwb2ludDogZnVu
Y3Rpb24oYnJlYWtwb2ludElkKQogICAgIHsKICAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2Vy
TW9kZWwucmVtb3ZlQnJlYWtwb2ludChicmVha3BvaW50SWQpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZWJ1Z2dlck1vZGVsLmpzIGIvU291cmNlL1dl
YkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZWJ1Z2dlck1vZGVsLmpzCmluZGV4IDMyZDI4ZTcu
LjY3YzFjMTUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
RGVidWdnZXJNb2RlbC5qcworKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0RlYnVnZ2VyTW9kZWwuanMKQEAgLTMzLDcgKzMzLDYgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2Vy
TW9kZWwgPSBmdW5jdGlvbigpCiAgICAgdGhpcy5fcGF1c2VkID0gZmFsc2U7CiAgICAgdGhpcy5f
Y2FsbEZyYW1lcyA9IFtdOwogICAgIHRoaXMuX2JyZWFrcG9pbnRzID0ge307Ci0gICAgdGhpcy5f
c291cmNlSURBbmRMaW5lVG9CcmVha3BvaW50SWQgPSB7fTsKICAgICB0aGlzLl9zY3JpcHRzID0g
e307CiAKICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlZ2lzdGVyRG9tYWluRGlzcGF0Y2hlcigiRGVi
dWdnZXIiLCBuZXcgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyRGlzcGF0Y2hlcih0aGlzKSk7CkBAIC00
Niw3MCArNDUsMTA4IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cyA9IHsKICAg
ICBGYWlsZWRUb1BhcnNlU2NyaXB0U291cmNlOiAiZmFpbGVkLXRvLXBhcnNlLXNjcmlwdC1zb3Vy
Y2UiLAogICAgIFNjcmlwdFNvdXJjZUNoYW5nZWQ6ICJzY3JpcHQtc291cmNlLWNoYW5nZWQiLAog
ICAgIEJyZWFrcG9pbnRBZGRlZDogImJyZWFrcG9pbnQtYWRkZWQiLAotICAgIEJyZWFrcG9pbnRS
ZW1vdmVkOiAiYnJlYWtwb2ludC1yZW1vdmVkIgorICAgIEJyZWFrcG9pbnRSZW1vdmVkOiAiYnJl
YWtwb2ludC1yZW1vdmVkIiwKKyAgICBCcmVha3BvaW50UmVzb2x2ZWQ6ICJicmVha3BvaW50LXJl
c29sdmVkIgogfQogCiBXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5wcm90b3R5cGUgPSB7Cisg
ICAgZW5hYmxlRGVidWdnZXI6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIEluc3BlY3RvckJh
Y2tlbmQuZW5hYmxlRGVidWdnZXIoKTsKKyAgICAgICAgaWYgKHRoaXMuX2JyZWFrcG9pbnRzUHVz
aGVkVG9CYWNrZW5kKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICB2YXIgYnJlYWtwb2lu
dHMgPSBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuYnJlYWtwb2ludHM7CisgICAgICAgIGZvciAodmFy
IGkgPSAwOyBpIDwgYnJlYWtwb2ludHMubGVuZ3RoOyArK2kpCisgICAgICAgICAgICB0aGlzLl9z
ZXRCcmVha3BvaW50KGJyZWFrcG9pbnRzW2ldLCB0cnVlKTsKKyAgICAgICAgdGhpcy5fYnJlYWtw
b2ludHNQdXNoZWRUb0JhY2tlbmQgPSB0cnVlOworICAgIH0sCisKKyAgICBkaXNhYmxlRGVidWdn
ZXI6IGZ1bmN0aW9uKCkKKyAgICB7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuZGlzYWJsZURl
YnVnZ2VyKCk7CisgICAgfSwKKwogICAgIGNvbnRpbnVlVG9MaW5lOiBmdW5jdGlvbihzb3VyY2VJ
RCwgbGluZU51bWJlcikKICAgICB7Ci0gICAgICAgIGZ1bmN0aW9uIGRpZFNldEJyZWFrcG9pbnQo
YnJlYWtwb2ludElkLCBhY3R1YWxMaW5lTnVtYmVyKQotICAgICAgICB7Ci0gICAgICAgICAgICBp
ZiAoIWJyZWFrcG9pbnRJZCkKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBp
ZiAodGhpcy5maW5kQnJlYWtwb2ludChzb3VyY2VJRCwgYWN0dWFsTGluZU51bWJlcikpIHsKLSAg
ICAgICAgICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2lu
dElkKTsKLSAgICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAg
ICBpZiAoIl9jb250aW51ZVRvTGluZUJyZWFrcG9pbnRJZCIgaW4gdGhpcykKLSAgICAgICAgICAg
ICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlbW92ZUJyZWFrcG9pbnQodGhpcy5fY29udGludWVUb0xp
bmVCcmVha3BvaW50SWQpOwotICAgICAgICAgICAgdGhpcy5fY29udGludWVUb0xpbmVCcmVha3Bv
aW50SWQgPSBicmVha3BvaW50SWQ7Ci0gICAgICAgIH0KLSAgICAgICAgdmFyIGJyZWFrcG9pbnQg
PSB7IHNvdXJjZUlEOiBzb3VyY2VJRCwgbGluZU51bWJlcjogbGluZU51bWJlciwgY29sdW1uTnVt
YmVyOiAxLCBjb25kaXRpb246ICIiLCBlbmFibGVkOiB0cnVlIH07Ci0gICAgICAgIEluc3BlY3Rv
ckJhY2tlbmQuc2V0QnJlYWtwb2ludChicmVha3BvaW50LCBkaWRTZXRCcmVha3BvaW50LmJpbmQo
dGhpcykpOwotICAgICAgICBpZiAodGhpcy5fcGF1c2VkKQotICAgICAgICAgICAgSW5zcGVjdG9y
QmFja2VuZC5yZXN1bWUoKTsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5jb250aW51ZVRvTG9j
YXRpb24oc291cmNlSUQsIGxpbmVOdW1iZXIsIDEpOwogICAgIH0sCiAKICAgICBzZXRCcmVha3Bv
aW50OiBmdW5jdGlvbihzb3VyY2VJRCwgbGluZU51bWJlciwgZW5hYmxlZCwgY29uZGl0aW9uKQog
ICAgIHsKLSAgICAgICAgZnVuY3Rpb24gZGlkU2V0QnJlYWtwb2ludChicmVha3BvaW50SWQsIGFj
dHVhbExpbmVOdW1iZXIsIGFjdHVhbENvbHVtbk51bWJlcikKLSAgICAgICAgewotICAgICAgICAg
ICAgaWYgKCFicmVha3BvaW50SWQpCi0gICAgICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICAg
ICAgYnJlYWtwb2ludC5vcmlnaW5hbExpbmVOdW1iZXIgPSBicmVha3BvaW50LmxpbmVOdW1iZXI7
Ci0gICAgICAgICAgICBicmVha3BvaW50Lm9yaWdpbmFsQ29sdW1udW1iZXIgPSBicmVha3BvaW50
LmNvbHVtbk51bWJlcjsKLSAgICAgICAgICAgIGJyZWFrcG9pbnQubGluZU51bWJlciA9IGFjdHVh
bExpbmVOdW1iZXI7Ci0gICAgICAgICAgICBicmVha3BvaW50LmNvbHVtbk51bWJlciA9IGFjdHVh
bENvbHVtbk51bWJlcjsKLSAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRTZXRPbkJhY2tlbmQo
YnJlYWtwb2ludElkLCBicmVha3BvaW50LCBmYWxzZSk7Ci0gICAgICAgIH0KLSAgICAgICAgdmFy
IGJyZWFrcG9pbnQgPSB7IHNvdXJjZUlEOiBzb3VyY2VJRCwgbGluZU51bWJlcjogbGluZU51bWJl
ciwgY29sdW1uTnVtYmVyOiAxLCBjb25kaXRpb246IGNvbmRpdGlvbiwgZW5hYmxlZDogZW5hYmxl
ZCB9OwotICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnNldEJyZWFrcG9pbnQoYnJlYWtwb2ludCwg
ZGlkU2V0QnJlYWtwb2ludC5iaW5kKHRoaXMpKTsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB7
fTsKKyAgICAgICAgYnJlYWtwb2ludC51cmwgPSB0aGlzLnNjcmlwdEZvclNvdXJjZUlEKHNvdXJj
ZUlEKS5zb3VyY2VVUkw7CisgICAgICAgIGJyZWFrcG9pbnQuc291cmNlSUQgPSBzb3VyY2VJRDsK
KyAgICAgICAgYnJlYWtwb2ludC5saW5lTnVtYmVyID0gbGluZU51bWJlcjsKKyAgICAgICAgYnJl
YWtwb2ludC5jb2x1bW5OdW1iZXIgPSAxOworICAgICAgICBicmVha3BvaW50LmNvbmRpdGlvbiA9
IGNvbmRpdGlvbjsKKyAgICAgICAgYnJlYWtwb2ludC5lbmFibGVkID0gZW5hYmxlZDsKKyAgICAg
ICAgdGhpcy5fc2V0QnJlYWtwb2ludChicmVha3BvaW50KTsKICAgICB9LAogCiAgICAgcmVtb3Zl
QnJlYWtwb2ludDogZnVuY3Rpb24oYnJlYWtwb2ludElkKQogICAgIHsKLSAgICAgICAgSW5zcGVj
dG9yQmFja2VuZC5yZW1vdmVCcmVha3BvaW50KGJyZWFrcG9pbnRJZCk7CisgICAgICAgIEluc3Bl
Y3RvckJhY2tlbmQucmVtb3ZlSmF2YVNjcmlwdEJyZWFrcG9pbnQoYnJlYWtwb2ludElkKTsKICAg
ICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9icmVha3BvaW50c1ticmVha3BvaW50SWRdOwog
ICAgICAgICBkZWxldGUgdGhpcy5fYnJlYWtwb2ludHNbYnJlYWtwb2ludElkXTsKLSAgICAgICAg
ZGVsZXRlIHRoaXMuX3NvdXJjZUlEQW5kTGluZVRvQnJlYWtwb2ludElkW3RoaXMuX2VuY29kZVNv
dXJjZUlEQW5kTGluZShicmVha3BvaW50LnNvdXJjZUlELCBicmVha3BvaW50LmxpbmUpXTsKICAg
ICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2ViSW5zcGVjdG9yLkRlYnVnZ2Vy
TW9kZWwuRXZlbnRzLkJyZWFrcG9pbnRSZW1vdmVkLCBicmVha3BvaW50SWQpOwotICAgICAgICBi
cmVha3BvaW50LmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycygicmVtb3ZlZCIpOworICAgICAgICB0
aGlzLl9zYXZlQnJlYWtwb2ludHMoKTsKKyAgICB9LAorCisgICAgdXBkYXRlQnJlYWtwb2ludDog
ZnVuY3Rpb24oYnJlYWtwb2ludElkLCBjb25kaXRpb24sIGVuYWJsZWQpCisgICAgeworICAgICAg
ICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX2JyZWFrcG9pbnRzW2JyZWFrcG9pbnRJZF07CisgICAg
ICAgIHRoaXMucmVtb3ZlQnJlYWtwb2ludChicmVha3BvaW50SWQpOworICAgICAgICBicmVha3Bv
aW50LmNvbmRpdGlvbiA9IGNvbmRpdGlvbjsKKyAgICAgICAgYnJlYWtwb2ludC5lbmFibGVkID0g
ZW5hYmxlZDsKKyAgICAgICAgdGhpcy5fc2V0QnJlYWtwb2ludChicmVha3BvaW50KTsKKyAgICB9
LAorCisgICAgX3NldEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQsIHJlc3RvcmVkKQor
ICAgIHsKKyAgICAgICAgZnVuY3Rpb24gZGlkU2V0QnJlYWtwb2ludChicmVha3BvaW50SWQsIGxv
Y2F0aW9ucykKKyAgICAgICAgeworICAgICAgICAgICAgaWYgKCFicmVha3BvaW50SWQpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgYnJlYWtwb2ludC5pZCA9IGJyZWFrcG9p
bnRJZDsKKyAgICAgICAgICAgIGJyZWFrcG9pbnQubG9jYXRpb25zID0gbG9jYXRpb25zOworICAg
ICAgICAgICAgdGhpcy5fYnJlYWtwb2ludHNbYnJlYWtwb2ludElkXSA9IGJyZWFrcG9pbnQ7Cisg
ICAgICAgICAgICBpZiAoIXJlc3RvcmVkKQorICAgICAgICAgICAgICAgIHRoaXMuX3NhdmVCcmVh
a3BvaW50cygpOworICAgICAgICAgICAgdGhpcy5kaXNwYXRjaEV2ZW50VG9MaXN0ZW5lcnMoV2Vi
SW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkJyZWFrcG9pbnRBZGRlZCwgYnJlYWtwb2lu
dCk7ICAgICAgICAgICAgCisgICAgICAgIH0KKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5zZXRK
YXZhU2NyaXB0QnJlYWtwb2ludChicmVha3BvaW50LCBkaWRTZXRCcmVha3BvaW50LmJpbmQodGhp
cykpOwogICAgIH0sCiAKLSAgICBfYnJlYWtwb2ludFNldE9uQmFja2VuZDogZnVuY3Rpb24oYnJl
YWtwb2ludElkLCBicmVha3BvaW50RGF0YSwgcmVzdG9yZWQpCisgICAgX2JyZWFrcG9pbnRSZXNv
bHZlZDogZnVuY3Rpb24oYnJlYWtwb2ludElkLCBsb2NhdGlvbikKICAgICB7Ci0gICAgICAgIHZh
ciBzb3VyY2VJREFuZExpbmUgPSB0aGlzLl9lbmNvZGVTb3VyY2VJREFuZExpbmUoYnJlYWtwb2lu
dERhdGEuc291cmNlSUQsIGJyZWFrcG9pbnREYXRhLmxpbmVOdW1iZXIpOwotICAgICAgICBpZiAo
c291cmNlSURBbmRMaW5lIGluIHRoaXMuX3NvdXJjZUlEQW5kTGluZVRvQnJlYWtwb2ludElkKSB7
Ci0gICAgICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2lu
dElkKTsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9icmVha3BvaW50c1ticmVha3Bv
aW50SWRdOworICAgICAgICBpZiAoIWJyZWFrcG9pbnQpCiAgICAgICAgICAgICByZXR1cm47Cisg
ICAgICAgIGJyZWFrcG9pbnQubG9jYXRpb25zLnB1c2gobG9jYXRpb24pOworICAgICAgICB0aGlz
LmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVu
dHMuQnJlYWtwb2ludFJlc29sdmVkLCBicmVha3BvaW50KTsKKyAgICB9LAorCisgICAgX3NhdmVC
cmVha3BvaW50czogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFyIHNlcmlhbGl6ZWRCcmVh
a3BvaW50cyA9IFtdOworICAgICAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl9icmVha3BvaW50cykg
eworICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9icmVha3BvaW50c1tpZF07Cisg
ICAgICAgICAgICBpZiAoIWJyZWFrcG9pbnQudXJsKQorICAgICAgICAgICAgICAgIGNvbnRpbnVl
OworICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZWRCcmVha3BvaW50ID0ge307CisgICAgICAgICAg
ICBzZXJpYWxpemVkQnJlYWtwb2ludC51cmwgPSBicmVha3BvaW50LnVybDsKKyAgICAgICAgICAg
IHNlcmlhbGl6ZWRCcmVha3BvaW50LmxpbmVOdW1iZXIgPSBicmVha3BvaW50LmxpbmVOdW1iZXI7
CisgICAgICAgICAgICBzZXJpYWxpemVkQnJlYWtwb2ludC5jb2x1bW5OdW1iZXIgPSBicmVha3Bv
aW50LmNvbHVtbk51bWJlcjsKKyAgICAgICAgICAgIHNlcmlhbGl6ZWRCcmVha3BvaW50LmNvbmRp
dGlvbiA9IGJyZWFrcG9pbnQuY29uZGl0aW9uOworICAgICAgICAgICAgc2VyaWFsaXplZEJyZWFr
cG9pbnQuZW5hYmxlZCA9IGJyZWFrcG9pbnQuZW5hYmxlZDsKKyAgICAgICAgICAgIHNlcmlhbGl6
ZWRCcmVha3BvaW50cy5wdXNoKHNlcmlhbGl6ZWRCcmVha3BvaW50KTsKICAgICAgICAgfQorICAg
ICAgICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuYnJlYWtwb2ludHMgPSBzZXJpYWxpemVkQnJlYWtw
b2ludHM7CisgICAgfSwKIAotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IG5ldyBXZWJJbnNwZWN0
b3IuQnJlYWtwb2ludCh0aGlzLCBicmVha3BvaW50SWQsIGJyZWFrcG9pbnREYXRhKTsKLSAgICAg
ICAgYnJlYWtwb2ludC5yZXN0b3JlZCA9IHJlc3RvcmVkOwotICAgICAgICBicmVha3BvaW50Lm9y
aWdpbmFsTGluZU51bWJlciA9IGJyZWFrcG9pbnREYXRhLm9yaWdpbmFsTGluZU51bWJlcjsKLSAg
ICAgICAgdGhpcy5fYnJlYWtwb2ludHNbYnJlYWtwb2ludElkXSA9IGJyZWFrcG9pbnQ7Ci0gICAg
ICAgIHRoaXMuX3NvdXJjZUlEQW5kTGluZVRvQnJlYWtwb2ludElkW3NvdXJjZUlEQW5kTGluZV0g
PSBicmVha3BvaW50SWQ7Ci0gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdl
Ykluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5CcmVha3BvaW50QWRkZWQsIGJyZWFrcG9p
bnQpOworICAgIGdldCBicmVha3BvaW50cygpCisgICAgeworICAgICAgICByZXR1cm4gdGhpcy5f
YnJlYWtwb2ludHM7CiAgICAgfSwKIAogICAgIGJyZWFrcG9pbnRGb3JJZDogZnVuY3Rpb24oYnJl
YWtwb2ludElkKQpAQCAtMTMwLDIzICsxNjcsMjYgQEAgV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9k
ZWwucHJvdG90eXBlID0gewogCiAgICAgZmluZEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHNvdXJjZUlE
LCBsaW5lTnVtYmVyKQogICAgIHsKLSAgICAgICAgdmFyIHNvdXJjZUlEQW5kTGluZSA9IHRoaXMu
X2VuY29kZVNvdXJjZUlEQW5kTGluZShzb3VyY2VJRCwgbGluZU51bWJlcik7Ci0gICAgICAgIHZh
ciBicmVha3BvaW50SWQgPSB0aGlzLl9zb3VyY2VJREFuZExpbmVUb0JyZWFrcG9pbnRJZFtzb3Vy
Y2VJREFuZExpbmVdOwotICAgICAgICByZXR1cm4gdGhpcy5fYnJlYWtwb2ludHNbYnJlYWtwb2lu
dElkXTsKLSAgICB9LAotCi0gICAgX2VuY29kZVNvdXJjZUlEQW5kTGluZTogZnVuY3Rpb24oc291
cmNlSUQsIGxpbmVOdW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4gc291cmNlSUQgKyAiOiIg
KyBsaW5lTnVtYmVyOworICAgICAgICBmb3IgKHZhciBpZCBpbiB0aGlzLl9icmVha3BvaW50cykg
eworICAgICAgICAgICAgdmFyIGxvY2F0aW9ucyA9IHRoaXMuX2JyZWFrcG9pbnRzW2lkXS5sb2Nh
dGlvbnM7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxvY2F0aW9ucy5sZW5ndGg7
ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbnNbaV0uc291cmNlSUQgPT09IHNv
dXJjZUlEICYmIGxvY2F0aW9uc1tpXS5saW5lTnVtYmVyID09PSBsaW5lTnVtYmVyKQorICAgICAg
ICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnJlYWtwb2ludHNbaWRdOworICAgICAgICAgICAg
fQorICAgICAgICB9CiAgICAgfSwKIAogICAgIHJlc2V0OiBmdW5jdGlvbigpCiAgICAgewogICAg
ICAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTsKICAgICAgICAgdGhpcy5fY2FsbEZyYW1lcyA9IFtd
OwotICAgICAgICB0aGlzLl9icmVha3BvaW50cyA9IHt9OwotICAgICAgICBkZWxldGUgdGhpcy5f
b25lVGltZUJyZWFrcG9pbnQ7Ci0gICAgICAgIHRoaXMuX3NvdXJjZUlEQW5kTGluZVRvQnJlYWtw
b2ludElkID0ge307CisgICAgICAgIGZvciAodmFyIGlkIGluIHRoaXMuX2JyZWFrcG9pbnRzKSB7
CisgICAgICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX2JyZWFrcG9pbnRzW2lkXTsKKyAg
ICAgICAgICAgIGlmICghYnJlYWtwb2ludC51cmwpCisgICAgICAgICAgICAgICAgdGhpcy5yZW1v
dmVCcmVha3BvaW50KGlkKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBicmVh
a3BvaW50LmxvY2F0aW9ucyA9IFtdOworICAgICAgICB9CiAgICAgICAgIHRoaXMuX3NjcmlwdHMg
PSB7fTsKICAgICB9LAogCkBAIC0yMjksMTAgKzI2OSw2IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dl
ck1vZGVsLnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIHRoaXMuX3BhdXNlZCA9IHRydWU7
CiAgICAgICAgIHRoaXMuX2NhbGxGcmFtZXMgPSBkZXRhaWxzLmNhbGxGcmFtZXM7Ci0gICAgICAg
IGlmICgiX2NvbnRpbnVlVG9MaW5lQnJlYWtwb2ludElkIiBpbiB0aGlzKSB7Ci0gICAgICAgICAg
ICBJbnNwZWN0b3JCYWNrZW5kLnJlbW92ZUJyZWFrcG9pbnQodGhpcy5fY29udGludWVUb0xpbmVC
cmVha3BvaW50SWQpOwotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2NvbnRpbnVlVG9MaW5lQnJl
YWtwb2ludElkOwotICAgICAgICB9CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVu
ZXJzKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5EZWJ1Z2dlclBhdXNlZCwgZGV0
YWlscyk7CiAgICAgfSwKIApAQCAtMzAxLDkgKzMzNyw5IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dl
ckRpc3BhdGNoZXIucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9kZWJ1Z2dlck1vZGVsLl9m
YWlsZWRUb1BhcnNlU2NyaXB0U291cmNlKHNvdXJjZVVSTCwgc291cmNlLCBzdGFydGluZ0xpbmUs
IGVycm9yTGluZSwgZXJyb3JNZXNzYWdlKTsKICAgICB9LAogCi0gICAgYnJlYWtwb2ludFJlc29s
dmVkOiBmdW5jdGlvbihicmVha3BvaW50SWQsIGJyZWFrcG9pbnQpCisgICAgYnJlYWtwb2ludFJl
c29sdmVkOiBmdW5jdGlvbihicmVha3BvaW50SWQsIGxvY2F0aW9uKQogICAgIHsKLSAgICAgICAg
dGhpcy5fZGVidWdnZXJNb2RlbC5fYnJlYWtwb2ludFNldE9uQmFja2VuZChicmVha3BvaW50SWQs
IGJyZWFrcG9pbnQsIHRydWUpOworICAgICAgICB0aGlzLl9kZWJ1Z2dlck1vZGVsLl9icmVha3Bv
aW50UmVzb2x2ZWQoYnJlYWtwb2ludElkLCBsb2NhdGlvbik7CiAgICAgfSwKIAogICAgIGRpZENy
ZWF0ZVdvcmtlcjogZnVuY3Rpb24oKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3Iv
ZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcwppbmRleCBkZGM5MDZhLi43NWM2ODQxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcwor
KysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdHNQYW5lbC5qcwpA
QCAtODAzLDEwICs4MDMsMTAgQEAgV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90b3R5cGUg
PSB7CiAKICAgICAgICAgaWYgKHRoaXMuX2RlYnVnZ2VyRW5hYmxlZCkgewogICAgICAgICAgICAg
V2ViSW5zcGVjdG9yLnNldHRpbmdzLmRlYnVnZ2VyRW5hYmxlZCA9IGZhbHNlOwotICAgICAgICAg
ICAgSW5zcGVjdG9yQmFja2VuZC5kaXNhYmxlRGVidWdnZXIoKTsKKyAgICAgICAgICAgIFdlYklu
c3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmRpc2FibGVEZWJ1Z2dlcigpOwogICAgICAgICB9IGVsc2Ug
ewogICAgICAgICAgICAgV2ViSW5zcGVjdG9yLnNldHRpbmdzLmRlYnVnZ2VyRW5hYmxlZCA9ICEh
b3B0aW9uYWxBbHdheXM7Ci0gICAgICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLmVuYWJsZURlYnVn
Z2VyKCk7CisgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5lbmFibGVEZWJ1
Z2dlcigpOwogICAgICAgICB9CiAgICAgfSwKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
aW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvU2V0dGluZ3MuanMKaW5kZXggMWNlYTVlMS4uODNlYmFmMCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qcworKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NldHRpbmdzLmpzCkBAIC03MSw4ICs3
MSw4IEBAIFdlYkluc3BlY3Rvci5TZXR0aW5ncyA9IGZ1bmN0aW9uKCkKICAgICB0aGlzLmluc3Rh
bGxBcHBsaWNhdGlvblNldHRpbmcoInNob3dJbmhlcml0ZWRDb21wdXRlZFN0eWxlUHJvcGVydGll
cyIsIGZhbHNlKTsKICAgICB0aGlzLmluc3RhbGxBcHBsaWNhdGlvblNldHRpbmcoInNob3dVc2Vy
QWdlbnRTdHlsZXMiLCB0cnVlKTsKICAgICB0aGlzLmluc3RhbGxBcHBsaWNhdGlvblNldHRpbmco
IndhdGNoRXhwcmVzc2lvbnMiLCBbXSk7CisgICAgdGhpcy5pbnN0YWxsQXBwbGljYXRpb25TZXR0
aW5nKCJicmVha3BvaW50cyIsIFtdKTsKIAotICAgIHRoaXMuaW5zdGFsbFByb2plY3RTZXR0aW5n
KCJicmVha3BvaW50cyIsIHt9KTsKICAgICB0aGlzLmluc3RhbGxQcm9qZWN0U2V0dGluZygibmF0
aXZlQnJlYWtwb2ludHMiLCBbXSk7CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzCmluZGV4IDgyMTA3NGEuLmNiYmM0MTQgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcwpA
QCAtMjA4LDYgKzIwOCw4IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7
CiAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuZW5kVXBkYXRlcygpOwogCiAgICAgICAgIFdlYklu
c3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVn
Z2VyTW9kZWwuRXZlbnRzLkJyZWFrcG9pbnRBZGRlZCwgdGhpcy5fYnJlYWtwb2ludEFkZGVkLCB0
aGlzKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0ZW5l
cihXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMuQnJlYWtwb2ludFJlbW92ZWQsIHRo
aXMuX2JyZWFrcG9pbnRSZW1vdmVkLCB0aGlzKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVn
Z2VyTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVu
dHMuQnJlYWtwb2ludFJlc29sdmVkLCB0aGlzLl9icmVha3BvaW50UmVzb2x2ZWQsIHRoaXMpOwog
CiAgICAgICAgIGlmICh0aGlzLl9jYW5FZGl0U2NyaXB0cykKICAgICAgICAgICAgIHRoaXMuX3Rl
eHRWaWV3ZXIuZWRpdENhbGxiYWNrID0gdGhpcy5fZWRpdExpbmUuYmluZCh0aGlzKTsKQEAgLTIy
NiwxNSArMjI4LDI5IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAg
ICAgICAgIGlmICh0aGlzLl9leGVjdXRpb25MaW5lKQogICAgICAgICAgICAgdGhpcy5zZXRFeGVj
dXRpb25MaW5lKHRoaXMuX2V4ZWN1dGlvbkxpbmUpOwogCi0gICAgICAgIHZhciBicmVha3BvaW50
cyA9IHRoaXMuX2JyZWFrcG9pbnRzKCk7Ci0gICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnJl
YWtwb2ludHMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICB0aGlzLl9hZGRCcmVha3BvaW50KGJy
ZWFrcG9pbnRzW2ldKTsKKyAgICAgICAgdGhpcy5fYnJlYWtwb2ludElkVG9UZXh0Vmlld2VyTGlu
ZU51bWJlciA9IHt9OworICAgICAgICB0aGlzLl90ZXh0Vmlld2VyTGluZU51bWJlclRvQnJlYWtw
b2ludElkID0ge307CisgICAgICAgIHZhciBicmVha3BvaW50cyA9IFdlYkluc3BlY3Rvci5kZWJ1
Z2dlck1vZGVsLmJyZWFrcG9pbnRzOworICAgICAgICBmb3IgKHZhciBpZCBpbiBicmVha3BvaW50
cykKKyAgICAgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRBZGRlZCh7IGRhdGE6IGJyZWFrcG9pbnRz
W2lkXSB9KTsKIAogICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLnJlc2l6ZSgpOwogCiAgICAgICAg
IHRoaXMuX3RleHRWaWV3ZXIuZW5kVXBkYXRlcygpOwogICAgIH0sCiAKKyAgICBfc2hvdWxkRGlz
cGxheUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnQpCisgICAgeworICAgICAgICBpZiAo
dGhpcy5fdXJsKQorICAgICAgICAgICAgcmV0dXJuIHRoaXMuX3VybCA9PT0gYnJlYWtwb2ludC51
cmw7CisgICAgICAgIHZhciBzY3JpcHRzID0gdGhpcy5fY29udGVudFByb3ZpZGVyLnNjcmlwdHMo
KTsKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBzY3JpcHRzLmxlbmd0aDsgKytpKSB7Cisg
ICAgICAgICAgICBpZiAoYnJlYWtwb2ludC5zb3VyY2VJRCA9PT0gc2NyaXB0c1tpXS5zb3VyY2VJ
RCkKKyAgICAgICAgICAgICAgICByZXR1cm4gdHJ1ZTsKKyAgICAgICAgfQorICAgICAgICByZXR1
cm4gZmFsc2U7CisgICAgfSwKKwogICAgIHBlcmZvcm1TZWFyY2g6IGZ1bmN0aW9uKHF1ZXJ5LCBj
YWxsYmFjaykKICAgICB7CiAgICAgICAgIC8vIENhbGwgc2VhcmNoQ2FuY2VsZWQgc2luY2UgaXQg
d2lsbCByZXNldCBldmVyeXRoaW5nIHdlIG5lZWQgYmVmb3JlIGRvaW5nIGEgbmV3IHNlYXJjaC4K
QEAgLTQ1OCw1NCArNDc0LDU1IEBAIFdlYkluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUg
PSB7CiAgICAgewogICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGV2ZW50LmRhdGE7CiAKLSAgICAg
ICAgaWYgKGJyZWFrcG9pbnQuc291cmNlSUQgaW4gdGhpcy5fc291cmNlSURTZXQoKSkKLSAgICAg
ICAgICAgIHRoaXMuX2FkZEJyZWFrcG9pbnQoYnJlYWtwb2ludCk7Ci0gICAgfSwKKyAgICAgICAg
aWYgKCF0aGlzLl9zaG91bGREaXNwbGF5QnJlYWtwb2ludChicmVha3BvaW50KSkKKyAgICAgICAg
ICAgIHJldHVybjsKIAotICAgIF9hZGRCcmVha3BvaW50OiBmdW5jdGlvbihicmVha3BvaW50KQot
ICAgIHsKLSAgICAgICAgdmFyIHRleHRWaWV3ZXJMaW5lTnVtYmVyID0gdGhpcy5fZm9ybWF0dGVy
Lm9yaWdpbmFsTGluZU51bWJlclRvRm9ybWF0dGVkTGluZU51bWJlcihicmVha3BvaW50LmxpbmUg
LSAxKTsKKyAgICAgICAgdmFyIHJlc29sdmVkID0gYnJlYWtwb2ludC5sb2NhdGlvbnMubGVuZ3Ro
OworICAgICAgICB2YXIgYnJlYWtwb2ludExpbmVOdW1iZXIgPSBicmVha3BvaW50LmxpbmVOdW1i
ZXI7CisgICAgICAgIGlmIChyZXNvbHZlZCkKKyAgICAgICAgICAgIGJyZWFrcG9pbnRMaW5lTnVt
YmVyID0gYnJlYWtwb2ludC5sb2NhdGlvbnNbMF0ubGluZU51bWJlcjsKKworICAgICAgICB2YXIg
dGV4dFZpZXdlckxpbmVOdW1iZXIgPSB0aGlzLl9mb3JtYXR0ZXIub3JpZ2luYWxMaW5lTnVtYmVy
VG9Gb3JtYXR0ZWRMaW5lTnVtYmVyKGJyZWFrcG9pbnRMaW5lTnVtYmVyIC0gMSk7CiAgICAgICAg
IGlmICh0ZXh0Vmlld2VyTGluZU51bWJlciA+PSB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCkK
ICAgICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBicmVha3BvaW50LmFkZEV2ZW50TGlzdGVu
ZXIoImVuYWJsZS1jaGFuZ2VkIiwgdGhpcy5fYnJlYWtwb2ludENoYW5nZWQsIHRoaXMpOwotICAg
ICAgICBicmVha3BvaW50LmFkZEV2ZW50TGlzdGVuZXIoImNvbmRpdGlvbi1jaGFuZ2VkIiwgdGhp
cy5fYnJlYWtwb2ludENoYW5nZWQsIHRoaXMpOwotICAgICAgICBicmVha3BvaW50LmFkZEV2ZW50
TGlzdGVuZXIoInJlbW92ZWQiLCB0aGlzLl9icmVha3BvaW50UmVtb3ZlZCwgdGhpcyk7CisgICAg
ICAgIHZhciBleGlzdGluZ0JyZWFrcG9pbnRJZCA9IHRoaXMuX3RleHRWaWV3ZXJMaW5lTnVtYmVy
VG9CcmVha3BvaW50SWRbdGV4dFZpZXdlckxpbmVOdW1iZXJdOworICAgICAgICBpZiAoZXhpc3Rp
bmdCcmVha3BvaW50SWQpCisgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5y
ZW1vdmVCcmVha3BvaW50KGV4aXN0aW5nQnJlYWtwb2ludElkKTsKIAotICAgICAgICB0aGlzLl9z
ZXRCcmVha3BvaW50RGVjb3JhdGlvbih0ZXh0Vmlld2VyTGluZU51bWJlciwgYnJlYWtwb2ludC5l
bmFibGVkLCAhIWJyZWFrcG9pbnQuY29uZGl0aW9uKTsKKyAgICAgICAgdGhpcy5fYnJlYWtwb2lu
dElkVG9UZXh0Vmlld2VyTGluZU51bWJlclticmVha3BvaW50LmlkXSA9IHRleHRWaWV3ZXJMaW5l
TnVtYmVyOworICAgICAgICB0aGlzLl90ZXh0Vmlld2VyTGluZU51bWJlclRvQnJlYWtwb2ludElk
W3RleHRWaWV3ZXJMaW5lTnVtYmVyXSA9IGJyZWFrcG9pbnQuaWQ7CisgICAgICAgIHRoaXMuX3Nl
dEJyZWFrcG9pbnREZWNvcmF0aW9uKHRleHRWaWV3ZXJMaW5lTnVtYmVyLCByZXNvbHZlZCwgYnJl
YWtwb2ludC5lbmFibGVkLCAhIWJyZWFrcG9pbnQuY29uZGl0aW9uKTsKICAgICB9LAogCiAgICAg
X2JyZWFrcG9pbnRSZW1vdmVkOiBmdW5jdGlvbihldmVudCkKICAgICB7Ci0gICAgICAgIHZhciBi
cmVha3BvaW50ID0gZXZlbnQudGFyZ2V0OworICAgICAgICB2YXIgYnJlYWtwb2ludElkID0gZXZl
bnQuZGF0YTsKIAotICAgICAgICBicmVha3BvaW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImVuYWJs
ZS1jaGFuZ2VkIiwgbnVsbCwgdGhpcyk7Ci0gICAgICAgIGJyZWFrcG9pbnQucmVtb3ZlRXZlbnRM
aXN0ZW5lcigiY29uZGl0aW9uLWNoYW5nZWQiLCBudWxsLCB0aGlzKTsKLSAgICAgICAgYnJlYWtw
b2ludC5yZW1vdmVFdmVudExpc3RlbmVyKCJyZW1vdmVkIiwgbnVsbCwgdGhpcyk7CisgICAgICAg
IHZhciB0ZXh0Vmlld2VyTGluZU51bWJlciA9IHRoaXMuX2JyZWFrcG9pbnRJZFRvVGV4dFZpZXdl
ckxpbmVOdW1iZXJbYnJlYWtwb2ludElkXTsKKyAgICAgICAgaWYgKHRleHRWaWV3ZXJMaW5lTnVt
YmVyID09PSB1bmRlZmluZWQpCisgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdmFyIHRl
eHRWaWV3ZXJMaW5lTnVtYmVyID0gdGhpcy5fZm9ybWF0dGVyLm9yaWdpbmFsTGluZU51bWJlclRv
Rm9ybWF0dGVkTGluZU51bWJlcihicmVha3BvaW50LmxpbmUgLSAxKTsKKyAgICAgICAgZGVsZXRl
IHRoaXMuX2JyZWFrcG9pbnRJZFRvVGV4dFZpZXdlckxpbmVOdW1iZXJbYnJlYWtwb2ludElkXTsK
KyAgICAgICAgZGVsZXRlIHRoaXMuX3RleHRWaWV3ZXJMaW5lTnVtYmVyVG9CcmVha3BvaW50SWRb
dGV4dFZpZXdlckxpbmVOdW1iZXJdOwogICAgICAgICB0aGlzLl9yZW1vdmVCcmVha3BvaW50RGVj
b3JhdGlvbih0ZXh0Vmlld2VyTGluZU51bWJlcik7CiAgICAgfSwKIAotICAgIF9icmVha3BvaW50
Q2hhbmdlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgX2JyZWFrcG9pbnRSZXNvbHZlZDogZnVuY3Rp
b24oZXZlbnQpCiAgICAgewotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGV2ZW50LnRhcmdldDsK
LSAgICAgICAgdmFyIHRleHRWaWV3ZXJMaW5lTnVtYmVyID0gdGhpcy5fZm9ybWF0dGVyLm9yaWdp
bmFsTGluZU51bWJlclRvRm9ybWF0dGVkTGluZU51bWJlcihicmVha3BvaW50LmxpbmUgLSAxKTsK
LSAgICAgICAgdGhpcy5fc2V0QnJlYWtwb2ludERlY29yYXRpb24odGV4dFZpZXdlckxpbmVOdW1i
ZXIsIGJyZWFrcG9pbnQuZW5hYmxlZCwgISFicmVha3BvaW50LmNvbmRpdGlvbik7CisgICAgICAg
IHZhciBicmVha3BvaW50ID0gZXZlbnQuZGF0YTsKKyAgICAgICAgdGhpcy5fYnJlYWtwb2ludFJl
bW92ZWQoeyBkYXRhOiBicmVha3BvaW50LmlkIH0pOworICAgICAgICB0aGlzLl9icmVha3BvaW50
QWRkZWQoeyBkYXRhOiBicmVha3BvaW50IH0pOwogICAgIH0sCiAKLSAgICBfc2V0QnJlYWtwb2lu
dERlY29yYXRpb246IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGVuYWJsZWQsIGhhc0NvbmRpdGlvbikK
KyAgICBfc2V0QnJlYWtwb2ludERlY29yYXRpb246IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIHJlc29s
dmVkLCBlbmFibGVkLCBoYXNDb25kaXRpb24pCiAgICAgewogICAgICAgICB0aGlzLl90ZXh0Vmll
d2VyLmJlZ2luVXBkYXRlcygpOwogICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmFkZERlY29yYXRp
b24obGluZU51bWJlciwgIndlYmtpdC1icmVha3BvaW50Iik7Ci0gICAgICAgIGlmIChlbmFibGVk
KQotICAgICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5yZW1vdmVEZWNvcmF0aW9uKGxpbmVOdW1i
ZXIsICJ3ZWJraXQtYnJlYWtwb2ludC1kaXNhYmxlZCIpOwotICAgICAgICBlbHNlCisgICAgICAg
IGlmICghZW5hYmxlZCkKICAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuYWRkRGVjb3JhdGlv
bihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQtZGlzYWJsZWQiKTsKICAgICAgICAgaWYg
KGhhc0NvbmRpdGlvbikKICAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuYWRkRGVjb3JhdGlv
bihsaW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQtY29uZGl0aW9uYWwiKTsKLSAgICAgICAg
ZWxzZQotICAgICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5yZW1vdmVEZWNvcmF0aW9uKGxpbmVO
dW1iZXIsICJ3ZWJraXQtYnJlYWtwb2ludC1jb25kaXRpb25hbCIpOwogICAgICAgICB0aGlzLl90
ZXh0Vmlld2VyLmVuZFVwZGF0ZXMoKTsKICAgICB9LAogCkBAIC01MzMsMTQgKzU1MCwxNCBAQCBX
ZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogCiAgICAgICAgIGNvbnRleHRN
ZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDb250aW51ZSB0byBIZXJlIiks
IHRoaXMuX2NvbnRpbnVlVG9MaW5lLmJpbmQodGhpcywgb3JpZ2luYWxMaW5lTnVtYmVyKSk7CiAK
LSAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9maW5kQnJlYWtwb2ludChvcmlnaW5hbExp
bmVOdW1iZXIpOworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX2ZpbmRCcmVha3BvaW50
KHRleHRWaWV3ZXJMaW5lTnVtYmVyKTsKICAgICAgICAgaWYgKCFicmVha3BvaW50KSB7CiAgICAg
ICAgICAgICAvLyBUaGlzIHJvdyBkb2Vzbid0IGhhdmUgYSBicmVha3BvaW50OiBXZSB3YW50IHRv
IHNob3cgQWRkIEJyZWFrcG9pbnQgYW5kIEFkZCBhbmQgRWRpdCBCcmVha3BvaW50LgogICAgICAg
ICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkFkZCBC
cmVha3BvaW50IiksIHRoaXMuX3NldEJyZWFrcG9pbnQuYmluZCh0aGlzLCBvcmlnaW5hbExpbmVO
dW1iZXIsICIiLCB0cnVlKSk7CiAKICAgICAgICAgICAgIGZ1bmN0aW9uIGFkZENvbmRpdGlvbmFs
QnJlYWtwb2ludCgpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fc2V0QnJl
YWtwb2ludERlY29yYXRpb24odGV4dFZpZXdlckxpbmVOdW1iZXIsIHRydWUsIHRydWUpOworICAg
ICAgICAgICAgICAgIHRoaXMuX3NldEJyZWFrcG9pbnREZWNvcmF0aW9uKHRleHRWaWV3ZXJMaW5l
TnVtYmVyLCB0cnVlLCB0cnVlLCB0cnVlKTsKICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkaWRF
ZGl0QnJlYWtwb2ludENvbmRpdGlvbihjb21taXR0ZWQsIGNvbmRpdGlvbikKICAgICAgICAgICAg
ICAgICB7CiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUJyZWFrcG9pbnREZWNvcmF0
aW9uKHRleHRWaWV3ZXJMaW5lTnVtYmVyKTsKQEAgLTU1MiwyMyArNTY5LDI0IEBAIFdlYkluc3Bl
Y3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBjb250ZXh0TWVudS5h
cHBlbmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiQWRkIENvbmRpdGlvbmFsIEJyZWFrcG9p
bnTigKYiKSwgYWRkQ29uZGl0aW9uYWxCcmVha3BvaW50LmJpbmQodGhpcykpOwogICAgICAgICB9
IGVsc2UgewogICAgICAgICAgICAgLy8gVGhpcyByb3cgaGFzIGEgYnJlYWtwb2ludCwgd2Ugd2Fu
dCB0byBzaG93IGVkaXQgYW5kIHJlbW92ZSBicmVha3BvaW50LCBhbmQgZWl0aGVyIGRpc2FibGUg
b3IgZW5hYmxlLgotICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0
b3IuVUlTdHJpbmcoIlJlbW92ZSBCcmVha3BvaW50IiksIGJyZWFrcG9pbnQucmVtb3ZlLmJpbmQo
YnJlYWtwb2ludCkpOworICAgICAgICAgICAgZnVuY3Rpb24gcmVtb3ZlQnJlYWtwb2ludCgpCisg
ICAgICAgICAgICB7CisgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwu
cmVtb3ZlQnJlYWtwb2ludChicmVha3BvaW50LmlkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAg
ICAgIGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJSZW1vdmUg
QnJlYWtwb2ludCIpLCByZW1vdmVCcmVha3BvaW50KTsKICAgICAgICAgICAgIGZ1bmN0aW9uIGVk
aXRCcmVha3BvaW50Q29uZGl0aW9uKCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBm
dW5jdGlvbiBkaWRFZGl0QnJlYWtwb2ludENvbmRpdGlvbihjb21taXR0ZWQsIGNvbmRpdGlvbikK
ICAgICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb21taXR0ZWQpIHsK
LSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnQucmVtb3ZlKCk7Ci0gICAgICAgICAg
ICAgICAgICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50KG9yaWdpbmFsTGluZU51bWJlciwgYnJl
YWtwb2ludC5lbmFibGVkLCBjb25kaXRpb24pOwotICAgICAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgICAgIGlmIChjb21taXR0ZWQpCisgICAgICAgICAgICAgICAgICAgICAgICBX
ZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC51cGRhdGVCcmVha3BvaW50KGJyZWFrcG9pbnQuaWQs
IGNvbmRpdGlvbiwgYnJlYWtwb2ludC5lbmFibGVkKTsKICAgICAgICAgICAgICAgICB9CiAgICAg
ICAgICAgICAgICAgdGhpcy5fZWRpdEJyZWFrcG9pbnRDb25kaXRpb24odGV4dFZpZXdlckxpbmVO
dW1iZXIsIGJyZWFrcG9pbnQuY29uZGl0aW9uLCBkaWRFZGl0QnJlYWtwb2ludENvbmRpdGlvbi5i
aW5kKHRoaXMpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVu
ZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJFZGl0IEJyZWFrcG9pbnTigKYiKSwgZWRpdEJy
ZWFrcG9pbnRDb25kaXRpb24uYmluZCh0aGlzKSk7CiAgICAgICAgICAgICBmdW5jdGlvbiBzZXRC
cmVha3BvaW50RW5hYmxlZChlbmFibGVkKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAg
IGJyZWFrcG9pbnQucmVtb3ZlKCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fc2V0QnJlYWtwb2lu
dChvcmlnaW5hbExpbmVOdW1iZXIsIGVuYWJsZWQsIGJyZWFrcG9pbnQuY29uZGl0aW9uKTsKKyAg
ICAgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC51cGRhdGVCcmVha3BvaW50
KGJyZWFrcG9pbnQuaWQsIGJyZWFrcG9pbnQuY29uZGl0aW9uLCBlbmFibGVkKTsKICAgICAgICAg
ICAgIH0KICAgICAgICAgICAgIGlmIChicmVha3BvaW50LmVuYWJsZWQpCiAgICAgICAgICAgICAg
ICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkRpc2FibGUg
QnJlYWtwb2ludCIpLCBzZXRCcmVha3BvaW50RW5hYmxlZC5iaW5kKHRoaXMsIGZhbHNlKSk7CkBA
IC01OTIsMTMgKzYxMCwxNSBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0g
ewogICAgICAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0LmVuY2xvc2luZ05vZGVPclNlbGZX
aXRoQ2xhc3MoIndlYmtpdC1saW5lLW51bWJlciIpOwogICAgICAgICBpZiAoIXRhcmdldCkKICAg
ICAgICAgICAgIHJldHVybjsKLSAgICAgICAgdmFyIG9yaWdpbmFsTGluZU51bWJlciA9IHRoaXMu
X2Zvcm1hdHRlci5mb3JtYXR0ZWRMaW5lTnVtYmVyVG9PcmlnaW5hbExpbmVOdW1iZXIodGFyZ2V0
LnBhcmVudEVsZW1lbnQubGluZU51bWJlcik7CisgICAgICAgIHZhciB0ZXh0Vmlld2VyTGluZU51
bWJlciA9IHRhcmdldC5wYXJlbnRFbGVtZW50LmxpbmVOdW1iZXI7CisgICAgICAgIHZhciBvcmln
aW5hbExpbmVOdW1iZXIgPSB0aGlzLl9mb3JtYXR0ZXIuZm9ybWF0dGVkTGluZU51bWJlclRvT3Jp
Z2luYWxMaW5lTnVtYmVyKHRleHRWaWV3ZXJMaW5lTnVtYmVyKTsKIAotICAgICAgICB2YXIgYnJl
YWtwb2ludCA9IHRoaXMuX2ZpbmRCcmVha3BvaW50KG9yaWdpbmFsTGluZU51bWJlcik7CisgICAg
ICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fZmluZEJyZWFrcG9pbnQodGV4dFZpZXdlckxpbmVO
dW1iZXIpOwogICAgICAgICBpZiAoYnJlYWtwb2ludCkgewotICAgICAgICAgICAgYnJlYWtwb2lu
dC5yZW1vdmUoKTsKICAgICAgICAgICAgIGlmIChldmVudC5zaGlmdEtleSkKLSAgICAgICAgICAg
ICAgICB0aGlzLl9zZXRCcmVha3BvaW50KG9yaWdpbmFsTGluZU51bWJlciwgIWJyZWFrcG9pbnQu
ZW5hYmxlZCwgYnJlYWtwb2ludC5jb25kaXRpb24pOworICAgICAgICAgICAgICAgIFdlYkluc3Bl
Y3Rvci5kZWJ1Z2dlck1vZGVsLnVwZGF0ZUJyZWFrcG9pbnQoYnJlYWtwb2ludC5pZCwgYnJlYWtw
b2ludC5jb25kaXRpb24sICFicmVha3BvaW50LmVuYWJsZWQpOworICAgICAgICAgICAgZWxzZQor
ICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLnJlbW92ZUJyZWFrcG9p
bnQoYnJlYWtwb2ludC5pZCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgdGhpcy5fc2V0
QnJlYWtwb2ludChvcmlnaW5hbExpbmVOdW1iZXIsIHRydWUsICIiKTsKICAgICAgICAgZXZlbnQu
cHJldmVudERlZmF1bHQoKTsKQEAgLTg5MCwxNiArOTEwLDEwIEBAIFdlYkluc3BlY3Rvci5Tb3Vy
Y2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnNj
cmlwdHMudG9nZ2xlQnJlYWtwb2ludHNDbGlja2VkKCk7CiAgICAgfSwKIAotICAgIF9icmVha3Bv
aW50czogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHNvdXJjZUlEU2V0ID0gdGhpcy5f
c291cmNlSURTZXQoKTsKLSAgICAgICAgcmV0dXJuIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVs
LnF1ZXJ5QnJlYWtwb2ludHMoZnVuY3Rpb24oYikgeyByZXR1cm4gYi5zb3VyY2VJRCBpbiBzb3Vy
Y2VJRFNldDsgfSk7Ci0gICAgfSwKLQotICAgIF9maW5kQnJlYWtwb2ludDogZnVuY3Rpb24obGlu
ZU51bWJlcikKKyAgICBfZmluZEJyZWFrcG9pbnQ6IGZ1bmN0aW9uKHRleHRWaWV3ZXJMaW5lTnVt
YmVyKQogICAgIHsKLSAgICAgICAgdmFyIHNvdXJjZUlEID0gdGhpcy5fc291cmNlSURGb3JMaW5l
KGxpbmVOdW1iZXIpOwotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwu
ZmluZEJyZWFrcG9pbnQoc291cmNlSUQsIGxpbmVOdW1iZXIgKyAxKTsKKyAgICAgICAgdmFyIGJy
ZWFrcG9pbnRJZCA9IHRoaXMuX3RleHRWaWV3ZXJMaW5lTnVtYmVyVG9CcmVha3BvaW50SWRbdGV4
dFZpZXdlckxpbmVOdW1iZXJdOworICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLmRlYnVnZ2Vy
TW9kZWwuYnJlYWtwb2ludEZvcklkKGJyZWFrcG9pbnRJZCk7CiAgICAgfSwKIAogICAgIF9zb3Vy
Y2VJREZvckxpbmU6IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCkBAIC05MTUsMTUgKzkyOSw2IEBAIFdl
Ykluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB9CiAgICAg
ICAgIH0KICAgICAgICAgcmV0dXJuIHNvdXJjZUlERm9yTGluZTsKLSAgICB9LAotCi0gICAgX3Nv
dXJjZUlEU2V0OiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgc2NyaXB0cyA9IHRoaXMu
X2NvbnRlbnRQcm92aWRlci5zY3JpcHRzKCk7Ci0gICAgICAgIHZhciBzb3VyY2VJRFNldCA9IHt9
OwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IHNjcmlwdHMubGVuZ3RoOyArK2kpCi0gICAg
ICAgICAgICBzb3VyY2VJRFNldFtzY3JpcHRzW2ldLnNvdXJjZUlEXSA9IHRydWU7Ci0gICAgICAg
IHJldHVybiBzb3VyY2VJRFNldDsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzIGIvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKaW5kZXggYzAyZmQ2ZS4uMjdiYjVjMiAxMDA2
NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKQEAg
LTYwMiw3ICs2MDIsNyBAQCBXZWJJbnNwZWN0b3IuZG9Mb2FkZWREb25lID0gZnVuY3Rpb24oKQog
ICAgIEluc3BlY3RvckJhY2tlbmQucG9wdWxhdGVTY3JpcHRPYmplY3RzKG9uUG9wdWxhdGVTY3Jp
cHRPYmplY3RzKTsKIAogICAgIGlmIChQcmVmZXJlbmNlcy5kZWJ1Z2dlckFsd2F5c0VuYWJsZWQg
fHwgV2ViSW5zcGVjdG9yLnNldHRpbmdzLmRlYnVnZ2VyRW5hYmxlZCkKLSAgICAgICAgSW5zcGVj
dG9yQmFja2VuZC5lbmFibGVEZWJ1Z2dlcigpOworICAgICAgICB0aGlzLmRlYnVnZ2VyTW9kZWwu
ZW5hYmxlRGVidWdnZXIoKTsKICAgICBpZiAoUHJlZmVyZW5jZXMucHJvZmlsZXJBbHdheXNFbmFi
bGVkIHx8IFdlYkluc3BlY3Rvci5zZXR0aW5ncy5wcm9maWxlckVuYWJsZWQpCiAgICAgICAgIElu
c3BlY3RvckJhY2tlbmQuZW5hYmxlUHJvZmlsZXIoKTsKICAgICBpZiAoV2ViSW5zcGVjdG9yLnNl
dHRpbmdzLm1vbml0b3JpbmdYSFJFbmFibGVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRl
eCAwMDIzZDJkLi4yZTlmMjI4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsx
LDEzIEBACisyMDExLTAxLTI3ICBQYXZlbCBQb2Rpdmlsb3YgIDxwb2Rpdmlsb3ZAY2hyb21pdW0u
b3JnPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdl
YiBJbnNwZWN0b3I6IGludHJvZHVjZSBuZXcgYXBpIGZvciBtYW5hZ2luZyBKYXZhU2NyaXB0IGJy
ZWFrcG9pbnRzLgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/
aWQ9NTMyMzUKKworICAgICAgICAqIHNyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHA6CisgICAg
ICAgIChXZWJLaXQ6OldlYkRldlRvb2xzQWdlbnQ6OnNob3VsZEludGVycnVwdEZvck1lc3NhZ2Up
OgorCiAyMDExLTAxLTI3ICBIYW5zIFdlbm5ib3JnICA8aGFuc0BjaHJvbWl1bS5vcmc+CiAKICAg
ICAgICAgUmV2aWV3ZWQgYnkgSmVyZW15IE9ybG93LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktp
dC9jaHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwIGIvU291cmNlL1dlYktpdC9j
aHJvbWl1bS9zcmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCmluZGV4IDExY2U3OTcuLjQyNzFh
YTkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdl
bnRJbXBsLmNwcAorKysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0Fn
ZW50SW1wbC5jcHAKQEAgLTQyMyw4ICs0MjMsOCBAQCBib29sIFdlYkRldlRvb2xzQWdlbnQ6OnNo
b3VsZEludGVycnVwdEZvck1lc3NhZ2UoY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKQogICAgIGlm
ICghSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmdldENvbW1hbmROYW1lKG1lc3NhZ2UsICZj
b21tYW5kTmFtZSkpCiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gY29tbWFuZE5h
bWUgPT0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OnBhdXNlQ21kCi0gICAgICAgIHx8IGNv
bW1hbmROYW1lID09IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZXRCcmVha3BvaW50Q21k
Ci0gICAgICAgIHx8IGNvbW1hbmROYW1lID09IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpy
ZW1vdmVCcmVha3BvaW50Q21kCisgICAgICAgIHx8IGNvbW1hbmROYW1lID09IEluc3BlY3RvckJh
Y2tlbmREaXNwYXRjaGVyOjpzZXRKYXZhU2NyaXB0QnJlYWtwb2ludENtZAorICAgICAgICB8fCBj
b21tYW5kTmFtZSA9PSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cmVtb3ZlSmF2YVNjcmlw
dEJyZWFrcG9pbnRDbWQKICAgICAgICAgfHwgY29tbWFuZE5hbWUgPT0gSW5zcGVjdG9yQmFja2Vu
ZERpc3BhdGNoZXI6OmFjdGl2YXRlQnJlYWtwb2ludHNDbWQKICAgICAgICAgfHwgY29tbWFuZE5h
bWUgPT0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6OmRlYWN0aXZhdGVCcmVha3BvaW50c0Nt
ZAogICAgICAgICB8fCBjb21tYW5kTmFtZSA9PSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6
c3RhcnRQcm9maWxpbmdDbWQK
</data>
<flag name="review"
          id="71810"
          type_id="1"
          status="-"
          setter="pfeldman"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>80772</attachid>
            <date>2011-02-01 09:32:25 -0800</date>
            <delta_ts>2011-02-02 05:37:46 -0800</delta_ts>
            <desc>Patch.</desc>
            <filename>patch</filename>
            <type>text/plain</type>
            <size>84138</size>
            <attacher name="Pavel Podivilov">podivilov</attacher>
            
              <data encoding="base64">ZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0NoYW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxv
ZwppbmRleCA0NDUxYzIxLi4yYmNkMDYxIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VM
b2cKKysrIGIvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTIgQEAKKzIwMTEtMDIt
MDEgIFBhdmVsIFBvZGl2aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogaW50
cm9kdWNlIG5ldyBhcGkgZm9yIG1hbmFnaW5nIEphdmFTY3JpcHQgYnJlYWtwb2ludHMuCisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzIzNQorCisgICAg
ICAgICogaW5zcGVjdG9yL3JlcG9ydC1wcm90b2NvbC1lcnJvcnMuaHRtbDoKKwogMjAxMS0wMS0z
MSAgUnlvc3VrZSBOaXdhICA8cm5pd2FAd2Via2l0Lm9yZz4KIAogICAgICAgICBVbnJldmlld2Vk
IENocm9taXVtIEdQVSB0ZXN0IGV4cGVjdGF0aW9uIHVwZGF0ZS4KZGlmZiAtLWdpdCBhL0xheW91
dFRlc3RzL2luc3BlY3Rvci9yZXBvcnQtcHJvdG9jb2wtZXJyb3JzLmh0bWwgYi9MYXlvdXRUZXN0
cy9pbnNwZWN0b3IvcmVwb3J0LXByb3RvY29sLWVycm9ycy5odG1sCmluZGV4IDE4MjdiZTAuLmM5
ODljMTAgMTAwNjQ0Ci0tLSBhL0xheW91dFRlc3RzL2luc3BlY3Rvci9yZXBvcnQtcHJvdG9jb2wt
ZXJyb3JzLmh0bWwKKysrIGIvTGF5b3V0VGVzdHMvaW5zcGVjdG9yL3JlcG9ydC1wcm90b2NvbC1l
cnJvcnMuaHRtbApAQCAtMTYsOCArMTYsOCBAQCBmdW5jdGlvbiB0ZXN0KCkKICAgICAgICAgJ3si
c2VxIjozLCJjb21tYW5kIjoicmVzb3VyY2VDb250ZW50IiwiYXJndW1lbnRzIjpbXX0nLAogICAg
ICAgICAneyJzZXEiOjQsImNvbW1hbmQiOiJyZXNvdXJjZUNvbnRlbnQiLCJhcmd1bWVudHMiOnt9
fScsCiAgICAgICAgICd7InNlcSI6NSwiY29tbWFuZCI6InJlc291cmNlQ29udGVudCIsImFyZ3Vt
ZW50cyI6eyJpZGVudGlmaWVyIjoibm90IGEgbnVtYmVyIn19JywKLSAgICAgICAgJ3sic2VxIjo2
LCJjb21tYW5kIjoicmVtb3ZlQnJlYWtwb2ludCIsImFyZ3VtZW50cyI6e319JywKLSAgICAgICAg
J3sic2VxIjo3LCJjb21tYW5kIjoicmVtb3ZlQnJlYWtwb2ludCIsImFyZ3VtZW50cyI6eyJicmVh
a3BvaW50SWQiOiJzb21lQnJlYWtwb2ludElkIn19JywKKyAgICAgICAgJ3sic2VxIjo2LCJjb21t
YW5kIjoicmVtb3ZlSmF2YVNjcmlwdEJyZWFrcG9pbnQiLCJhcmd1bWVudHMiOnt9fScsCisgICAg
ICAgICd7InNlcSI6NywiY29tbWFuZCI6InJlbW92ZUphdmFTY3JpcHRCcmVha3BvaW50IiwiYXJn
dW1lbnRzIjp7ImJyZWFrcG9pbnRJZCI6InNvbWVCcmVha3BvaW50SWQifX0nLAogICAgIF07CiAg
ICAgdmFyIG51bWJlck9mUmVwb3J0cyA9IDA7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRleCBiMWE3YzJmLi4xODQy
MzVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dl
YkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzcgQEAKKzIwMTEtMDItMDEgIFBhdmVsIFBvZGl2
aWxvdiAgPHBvZGl2aWxvdkBjaHJvbWl1bS5vcmc+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9C
T0RZIChPT1BTISkuCisKKyAgICAgICAgV2ViIEluc3BlY3RvcjogaW50cm9kdWNlIG5ldyBhcGkg
Zm9yIG1hbmFnaW5nIEphdmFTY3JpcHQgYnJlYWtwb2ludHMuCisgICAgICAgIGh0dHBzOi8vYnVn
cy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD01MzIzNQorCisgICAgICAgIFNpbmdsZSBwcm90
b2NvbCBicmVha3BvaW50IChlLmcuIHNldCBieSB1cmwpIGlzIG1hcHBlZCBvbiB6ZXJvIG9yIG1v
cmUgVk0gYnJlYWtwb2ludHMgKHNldCBieSBzb3VyY2VJRCkuCisgICAgICAgIHJlbW92ZUphdmFT
Y3JpcHRCcmVha3BvaW50KGJyZWFrcG9pbnRJZCkgcmVtb3ZlcyBicmVha3BvaW50IGFuZCBhbGwg
bGlua2VkIFZNIGJyZWFrcG9pbnRzLgorICAgICAgICBTaW5jZSBVSSB1c2VzIFZNIGJyZWFrcG9p
bnQgbG9jYXRpb24gcmF0aGVyIHRoZW4gcHJvdG9jb2wgYnJlYWtwb2ludCBsb2NhdGlvbiwgYWxs
IHJlc29sdmVkIGJyZWFrcG9pbnRzIGxvY2F0aW9ucyBhcmUgcGFzc2VkIHRvIGZyb250ZW5kLgor
CisgICAgICAgIFNvdXJjZUZyYW1lIGlzIG5vdyBhd2FyZSBvZiB3aGV0aGVyIGJyZWFrcG9pbnQg
aXMgcmVzb2x2ZWQgb3Igbm90IGFuZCBtYXkgZGlzcGxheSBpdCBhY2NvcmRpbmdseS4KKyAgICAg
ICAgSmF2YVNjcmlwdEJyZWFrcG9pbnRzU2lkZWJhclBhbmUgZmlsdGVycyBvdXQgYnJlYWtwb2lu
dHMgc2V0IG9uIG5vbmV4aXN0ZW50IHNjcmlwdHMgdG8gYXZvaWQgVUkgY2x1dHRlcmluZy4KKwor
ICAgICAgICAqIGJpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmNwcDoKKyAgICAgICAgKFdl
YkNvcmU6OlNjcmlwdERlYnVnU2VydmVyOjpzZXRCcmVha3BvaW50KToKKyAgICAgICAgKFdlYkNv
cmU6OlNjcmlwdERlYnVnU2VydmVyOjpyZW1vdmVCcmVha3BvaW50KToKKyAgICAgICAgKiBiaW5k
aW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5oOgorICAgICAgICAqIGJpbmRpbmdzL3Y4L0RlYnVn
Z2VyU2NyaXB0LmpzOgorICAgICAgICAoKToKKyAgICAgICAgKiBiaW5kaW5ncy92OC9TY3JpcHRE
ZWJ1Z1NlcnZlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0
QnJlYWtwb2ludCk6CisgICAgICAgICogYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuaDoK
KyAgICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yLmlkbDoKKyAgICAgICAgKiBpbnNwZWN0b3Iv
SW5zcGVjdG9yQWdlbnQuY3BwOiBjbGVhciBicmVha3BvaW50cyBmcm9tIGluc3BlY3RvciBzdGF0
ZSB3aGVuIG5ldyBmcm9udGVuZCBpcyBjcmVhdGVkCisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JBZ2VudDo6cmVzdG9yZUluc3BlY3RvclN0YXRlRnJvbUNvb2tpZSk6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JBZ2VudDo6cG9wdWxhdGVTY3JpcHRPYmplY3RzKToKKyAgICAgICAgKFdl
YkNvcmU6Okluc3BlY3RvckFnZW50OjpyZXN0b3JlRGVidWdnZXIpOgorICAgICAgICAoV2ViQ29y
ZTo6SW5zcGVjdG9yQWdlbnQ6OnNob3dBbmRFbmFibGVEZWJ1Z2dlcik6CisgICAgICAgIChXZWJD
b3JlOjpJbnNwZWN0b3JBZ2VudDo6ZW5hYmxlRGVidWdnZXIpOgorICAgICAgICAqIGluc3BlY3Rv
ci9JbnNwZWN0b3JBZ2VudC5oOgorICAgICAgICAqIGluc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dl
ckFnZW50LmNwcDogbWFuYWdlIHJlbGF0aW9ucyBiZXR3ZWVuIHByb3RvY29sIGJyZWFrcG9pbnRz
IGFuZCBWTSBicmVha3BvaW50cworICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50OjppbnNwZWN0ZWRVUkxDaGFuZ2VkKToKKyAgICAgICAgKFdlYkNvcmU6
Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEphdmFTY3JpcHRCcmVha3BvaW50KToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnNldEphdmFTY3JpcHRCcmVha3Bv
aW50QnlTb3VyY2VJZCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JEZWJ1Z2dlckFnZW50
OjpyZW1vdmVKYXZhU2NyaXB0QnJlYWtwb2ludCk6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0
b3JEZWJ1Z2dlckFnZW50Ojpjb250aW51ZVRvTG9jYXRpb24pOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6cmVzb2x2ZUJyZWFrcG9pbnQpOgorICAgICAgICAoV2Vi
Q29yZTo6SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Z2V0U2NyaXB0U291cmNlKToKKyAgICAgICAg
KFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhcnNlU291cmNlKToKKyAgICAg
ICAgKFdlYkNvcmU6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OmRpZFBhdXNlKToKKyAgICAgICAg
KiBpbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5oOgorICAgICAgICAoV2ViQ29yZTo6
SW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6U2NyaXB0OjpTY3JpcHQpOgorICAgICAgICAqIGluc3Bl
Y3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SW5zcGVjdG9yVmFs
dWU6OmFzTnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3RvckJhc2ljVmFsdWU6OmFz
TnVtYmVyKToKKyAgICAgICAgKFdlYkNvcmU6Okluc3BlY3Rvck9iamVjdDo6cmVtb3ZlKToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmg6CisgICAgICAgIChXZWJDb3JlOjpJ
bnNwZWN0b3JPYmplY3Q6OmdldE51bWJlcik6CisgICAgICAgIChXZWJDb3JlOjpJbnNwZWN0b3JP
YmplY3Q6OmZpbmQpOgorICAgICAgICAqIGluc3BlY3Rvci9TY3JpcHRCcmVha3BvaW50Lmg6Cisg
ICAgICAgIChXZWJDb3JlOjpTY3JpcHRCcmVha3BvaW50OjpTY3JpcHRCcmVha3BvaW50KToKKyAg
ICAgICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnQuanM6CisgICAgICAgIChXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludCk6CisgICAgICAgIChXZWJJbnNwZWN0b3IuQnJlYWtwb2ludC5w
cm90b3R5cGUuYWRkTG9jYXRpb24pOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvQnJl
YWtwb2ludE1hbmFnZXIuanM6IHJlbW92ZSBhbGwgc3R1ZmYgcmVsYXRlZCB0byBKYXZhU2NyaXB0
IGJyZWFrcG9pbnRzIGZyb20gaGVyZQorICAgICAgICAoV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRN
YW5hZ2VyKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5
cGUuX3Byb2plY3RDaGFuZ2VkKToKKyAgICAgICAgKFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFu
YWdlci5wcm90b3R5cGUuX3NhdmVCcmVha3BvaW50cyk6CisgICAgICAgIChXZWJJbnNwZWN0b3Iu
QnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlLl92YWxpZGF0ZUJyZWFrcG9pbnRzKToKKyAgICAg
ICAgKiBpbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnRzU2lkZWJhclBhbmUuanM6CisgICAg
ICAgIChXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdEJyZWFrcG9pbnRzU2lkZWJhclBhbmUpOiBmaWx0
ZXIgYnJlYWtwb2ludHMgc2V0IG9uIG5vbmV4aXN0ZW50IHNjcmlwdHMgdG8gYXZvaWQgdWkgY2x1
dHRlcmluZworICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQvRGVidWdnZXJNb2RlbC5qczoK
KyAgICAgICAgKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsKTogcHVsbCBhbGwgSmF2YVNjcmlw
dCBmcm9tIGxvY2FsU3RvcmFnZSBhbmQgcHVzaCB0aGVtIHRvIGZyb250ZWQgd2hlbiBkZWJ1Z2dl
ciBpcyBlbmFibGVkLCBzYXZlIHJlc29sdmVkIGJyZWFrcG9pbnRzIGRhdGEKKyAgICAgICAgKiBp
bnNwZWN0b3IvZnJvbnQtZW5kL1NjcmlwdC5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TY3Jp
cHQucHJvdG90eXBlLnNvdXJjZUxpbmUpOgorICAgICAgICAqIGluc3BlY3Rvci9mcm9udC1lbmQv
U2NyaXB0c1BhbmVsLmpzOgorICAgICAgICAoV2ViSW5zcGVjdG9yLlNjcmlwdHNQYW5lbC5wcm90
b3R5cGUuX3RvZ2dsZURlYnVnZ2luZyk6CisgICAgICAgICogaW5zcGVjdG9yL2Zyb250LWVuZC9T
ZXR0aW5ncy5qczoKKyAgICAgICAgKFdlYkluc3BlY3Rvci5TZXR0aW5ncyk6CisgICAgICAgICog
aW5zcGVjdG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qczogaGFuZGxlIHJlc29sdmVkIGFuZCB1
bnJlc29sdmVkIGJyZWFrcG9pbnRzIGRpZmZlcmVudGx5CisgICAgICAgICogaW5zcGVjdG9yL2Zy
b250LWVuZC9pbnNwZWN0b3IuanM6CisKIDIwMTEtMDEtMzEgIE5vJ2FtIFJvc2VudGhhbCAgPG5v
YW0ucm9zZW50aGFsQG5va2lhLmNvbT4KIAogICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJv
aGRlIENocmlzdGlhbnNlbi4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pz
L1NjcmlwdERlYnVnU2VydmVyLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL1Njcmlw
dERlYnVnU2VydmVyLmNwcAppbmRleCA4YjQ1ZjliLi5hZWQyYWQ0IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZlci5jcHAKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuY3BwCkBAIC0xMjQsNyArMTI0
LDcgQEAgYm9vbCBTY3JpcHREZWJ1Z1NlcnZlcjo6aGFzTGlzdGVuZXJzSW50ZXJlc3RlZEluUGFn
ZShQYWdlKiBwYWdlKQogICAgIHJldHVybiBtX3BhZ2VMaXN0ZW5lcnNNYXAuY29udGFpbnMocGFn
ZSk7CiB9CiAKLVN0cmluZyBTY3JpcHREZWJ1Z1NlcnZlcjo6c2V0QnJlYWtwb2ludChjb25zdCBT
dHJpbmcmIHNvdXJjZUlELCBjb25zdCBTY3JpcHRCcmVha3BvaW50JiBzY3JpcHRCcmVha3BvaW50
LCBsb25nKiBhY3R1YWxMaW5lTnVtYmVyLCBsb25nKiBhY3R1YWxDb2x1bW5OdW1iZXIpCitTdHJp
bmcgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJ
RCwgY29uc3QgU2NyaXB0QnJlYWtwb2ludCYgc2NyaXB0QnJlYWtwb2ludCwgaW50KiBhY3R1YWxM
aW5lTnVtYmVyLCBpbnQqIGFjdHVhbENvbHVtbk51bWJlcikKIHsKICAgICBpbnRwdHJfdCBzb3Vy
Y2VJRFZhbHVlID0gc291cmNlSUQudG9JbnRQdHIoKTsKICAgICBpZiAoIXNvdXJjZUlEVmFsdWUp
CkBAIC0xMzIsMTIgKzEzMiwxMiBAQCBTdHJpbmcgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFr
cG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgY29uc3QgU2NyaXB0QnJlYQogICAgIFNvdXJj
ZUlkVG9CcmVha3BvaW50c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NvdXJjZUlkVG9CcmVha3BvaW50
cy5maW5kKHNvdXJjZUlEVmFsdWUpOwogICAgIGlmIChpdCA9PSBtX3NvdXJjZUlkVG9CcmVha3Bv
aW50cy5lbmQoKSkKICAgICAgICAgaXQgPSBtX3NvdXJjZUlkVG9CcmVha3BvaW50cy5zZXQoc291
cmNlSURWYWx1ZSwgTGluZVRvQnJlYWtwb2ludE1hcCgpKS5maXJzdDsKLSAgICBpZiAoaXQtPnNl
Y29uZC5jb250YWlucyhzY3JpcHRCcmVha3BvaW50LmxpbmVOdW1iZXIpKQorICAgIGlmIChpdC0+
c2Vjb25kLmNvbnRhaW5zKHNjcmlwdEJyZWFrcG9pbnQubGluZU51bWJlciArIDEpKQogICAgICAg
ICByZXR1cm4gIiI7Ci0gICAgaXQtPnNlY29uZC5zZXQoc2NyaXB0QnJlYWtwb2ludC5saW5lTnVt
YmVyLCBzY3JpcHRCcmVha3BvaW50KTsKKyAgICBpdC0+c2Vjb25kLnNldChzY3JpcHRCcmVha3Bv
aW50LmxpbmVOdW1iZXIgKyAxLCBzY3JpcHRCcmVha3BvaW50KTsKICAgICAqYWN0dWFsTGluZU51
bWJlciA9IHNjcmlwdEJyZWFrcG9pbnQubGluZU51bWJlcjsKICAgICAvLyBGSVhNRShXSzUzMDAz
KTogaW1wbGVtZW50IHNldHRpbmcgYnJlYWtwb2ludHMgYnkgbGluZTpjb2x1bW4uCi0gICAgKmFj
dHVhbENvbHVtbk51bWJlciA9IDE7CisgICAgKmFjdHVhbENvbHVtbk51bWJlciA9IDA7CiAgICAg
cmV0dXJuIG1ha2VTdHJpbmcoc291cmNlSUQsICI6IiwgU3RyaW5nOjpudW1iZXIoc2NyaXB0QnJl
YWtwb2ludC5saW5lTnVtYmVyKSk7CiB9CiAKQEAgLTE1Niw3ICsxNTYsNyBAQCB2b2lkIFNjcmlw
dERlYnVnU2VydmVyOjpyZW1vdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElk
KQogICAgICAgICByZXR1cm47CiAgICAgU291cmNlSWRUb0JyZWFrcG9pbnRzTWFwOjppdGVyYXRv
ciBpdCA9IG1fc291cmNlSWRUb0JyZWFrcG9pbnRzLmZpbmQoc291cmNlSURWYWx1ZSk7CiAgICAg
aWYgKGl0ICE9IG1fc291cmNlSWRUb0JyZWFrcG9pbnRzLmVuZCgpKQotICAgICAgICBpdC0+c2Vj
b25kLnJlbW92ZShsaW5lTnVtYmVyKTsKKyAgICAgICAgaXQtPnNlY29uZC5yZW1vdmUobGluZU51
bWJlciArIDEpOwogfQogCiBib29sIFNjcmlwdERlYnVnU2VydmVyOjpoYXNCcmVha3BvaW50KGlu
dHB0cl90IHNvdXJjZUlELCB1bnNpZ25lZCBsaW5lTnVtYmVyKSBjb25zdApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdTZXJ2ZXIuaCBiL1NvdXJjZS9X
ZWJDb3JlL2JpbmRpbmdzL2pzL1NjcmlwdERlYnVnU2VydmVyLmgKaW5kZXggMzY4YjA3Yi4uNDI4
YjI1NCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvU2NyaXB0RGVidWdT
ZXJ2ZXIuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9TY3JpcHREZWJ1Z1NlcnZl
ci5oCkBAIC02NCw3ICs2NCw3IEBAIHB1YmxpYzoKICAgICB2b2lkIGFkZExpc3RlbmVyKFNjcmlw
dERlYnVnTGlzdGVuZXIqLCBQYWdlKik7CiAgICAgdm9pZCByZW1vdmVMaXN0ZW5lcihTY3JpcHRE
ZWJ1Z0xpc3RlbmVyKiwgUGFnZSopOwogCi0gICAgU3RyaW5nIHNldEJyZWFrcG9pbnQoY29uc3Qg
U3RyaW5nJiBzb3VyY2VJRCwgY29uc3QgU2NyaXB0QnJlYWtwb2ludCYsIGxvbmcqIGFjdHVhbExp
bmVOdW1iZXIsIGxvbmcqIGFjdHVhbENvbHVtbk51bWJlcik7CisgICAgU3RyaW5nIHNldEJyZWFr
cG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgY29uc3QgU2NyaXB0QnJlYWtwb2ludCYsIGlu
dCogYWN0dWFsTGluZU51bWJlciwgaW50KiBhY3R1YWxDb2x1bW5OdW1iZXIpOwogICAgIHZvaWQg
cmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZCk7CiAgICAgdm9pZCBj
bGVhckJyZWFrcG9pbnRzKCk7CiAgICAgdm9pZCBzZXRCcmVha3BvaW50c0FjdGl2YXRlZChib29s
IGFjdGl2YXRlZCk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9EZWJ1
Z2dlclNjcmlwdC5qcyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L0RlYnVnZ2VyU2NyaXB0
LmpzCmluZGV4IDM0Njk3NGEuLjE3OTgzNTIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2Jp
bmRpbmdzL3Y4L0RlYnVnZ2VyU2NyaXB0LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3Y4L0RlYnVnZ2VyU2NyaXB0LmpzCkBAIC05MSwxNyArOTEsMTUgQEAgRGVidWdnZXJTY3JpcHQu
X2Zvcm1hdFNjcmlwdCA9IGZ1bmN0aW9uKHNjcmlwdCkKIAogRGVidWdnZXJTY3JpcHQuc2V0QnJl
YWtwb2ludCA9IGZ1bmN0aW9uKGV4ZWNTdGF0ZSwgYXJncykKIHsKLSAgICB2YXIgbGluZU51bWJl
ciA9IERlYnVnZ2VyU2NyaXB0Ll93ZWJraXRUb1Y4TGluZU51bWJlcihhcmdzLmxpbmVOdW1iZXIp
OwotICAgIHZhciBjb2x1bW5OdW1iZXIgPSBEZWJ1Z2dlclNjcmlwdC5fd2Via2l0VG9WOExpbmVO
dW1iZXIoYXJncy5jb2x1bW5OdW1iZXIpOwotICAgIHZhciBicmVha0lkID0gRGVidWcuc2V0U2Ny
aXB0QnJlYWtQb2ludEJ5SWQoYXJncy5zY3JpcHRJZCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVy
LCBhcmdzLmNvbmRpdGlvbik7CisgICAgdmFyIGJyZWFrSWQgPSBEZWJ1Zy5zZXRTY3JpcHRCcmVh
a1BvaW50QnlJZChhcmdzLnNjcmlwdElkLCBhcmdzLmxpbmVOdW1iZXIsIGFyZ3MuY29sdW1uTnVt
YmVyLCBhcmdzLmNvbmRpdGlvbik7CiAgICAgaWYgKCFhcmdzLmVuYWJsZWQpCiAgICAgICAgIERl
YnVnLmRpc2FibGVTY3JpcHRCcmVha1BvaW50KGJyZWFrSWQpOwogCiAgICAgdmFyIGxvY2F0aW9u
cyA9IERlYnVnLmZpbmRCcmVha1BvaW50QWN0dWFsTG9jYXRpb25zKGJyZWFrSWQpOwogICAgIGlm
ICghbG9jYXRpb25zLmxlbmd0aCkKICAgICAgICAgcmV0dXJuIHVuZGVmaW5lZDsKLSAgICBhcmdz
LmxpbmVOdW1iZXIgPSBEZWJ1Z2dlclNjcmlwdC5fdjhUb1dlYmtpdExpbmVOdW1iZXIobG9jYXRp
b25zWzBdLmxpbmUpOwotICAgIGFyZ3MuY29sdW1uTnVtYmVyID0gRGVidWdnZXJTY3JpcHQuX3Y4
VG9XZWJraXRMaW5lTnVtYmVyKGxvY2F0aW9uc1swXS5jb2x1bW4pOworICAgIGFyZ3MubGluZU51
bWJlciA9IGxvY2F0aW9uc1swXS5saW5lOworICAgIGFyZ3MuY29sdW1uTnVtYmVyID0gbG9jYXRp
b25zWzBdLmNvbHVtbjsKICAgICByZXR1cm4gYnJlYWtJZC50b1N0cmluZygpOwogfQogCkBAIC0y
NjUsMTEgKzI2Myw2IEBAIERlYnVnZ2VyU2NyaXB0Ll9mcmFtZU1pcnJvclRvSlNDYWxsRnJhbWUg
PSBmdW5jdGlvbihmcmFtZU1pcnJvciwgY2FsbGVyRnJhbWUpCiAgICAgfTsKIH0KIAotRGVidWdn
ZXJTY3JpcHQuX3dlYmtpdFRvVjhMaW5lTnVtYmVyID0gZnVuY3Rpb24obGluZSkKLXsKLSAgICBy
ZXR1cm4gbGluZSAtIDE7Ci19OwotCiBEZWJ1Z2dlclNjcmlwdC5fdjhUb1dlYmtpdExpbmVOdW1i
ZXIgPSBmdW5jdGlvbihsaW5lKQogewogICAgIHJldHVybiBsaW5lICsgMTsKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmNwcCBiL1NvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmNwcAppbmRleCAxMWZhODYw
Li5jYzdmYmE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9TY3JpcHRE
ZWJ1Z1NlcnZlci5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVi
dWdTZXJ2ZXIuY3BwCkBAIC0xNDMsNyArMTQzLDcgQEAgdm9pZCBTY3JpcHREZWJ1Z1NlcnZlcjo6
cmVtb3ZlTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5lciogbGlzdGVuZXIsIFBhZ2UqIHBhZ2UK
ICAgICAvLyBGSVhNRTogUmVtb3ZlIGFsbCBicmVha3BvaW50cyBzZXQgYnkgdGhlIGFnZW50Lgog
fQogCi1TdHJpbmcgU2NyaXB0RGVidWdTZXJ2ZXI6OnNldEJyZWFrcG9pbnQoY29uc3QgU3RyaW5n
JiBzb3VyY2VJRCwgY29uc3QgU2NyaXB0QnJlYWtwb2ludCYgc2NyaXB0QnJlYWtwb2ludCwgbG9u
ZyogYWN0dWFsTGluZU51bWJlciwgbG9uZyogYWN0dWFsQ29sdW1uTnVtYmVyKQorU3RyaW5nIFNj
cmlwdERlYnVnU2VydmVyOjpzZXRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNv
bnN0IFNjcmlwdEJyZWFrcG9pbnQmIHNjcmlwdEJyZWFrcG9pbnQsIGludCogYWN0dWFsTGluZU51
bWJlciwgaW50KiBhY3R1YWxDb2x1bW5OdW1iZXIpCiB7CiAgICAgdjg6OkhhbmRsZVNjb3BlIHNj
b3BlOwogICAgIHY4OjpMb2NhbDx2ODo6Q29udGV4dD4gZGVidWdnZXJDb250ZXh0ID0gdjg6OkRl
YnVnOjpHZXREZWJ1Z0NvbnRleHQoKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRp
bmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmggYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy92OC9T
Y3JpcHREZWJ1Z1NlcnZlci5oCmluZGV4IGI0ZTczOTAuLmFmM2QyYWIgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Y4L1NjcmlwdERlYnVnU2VydmVyLmgKKysrIGIvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvdjgvU2NyaXB0RGVidWdTZXJ2ZXIuaApAQCAtNTYsNyArNTYsNyBA
QCBwdWJsaWM6CiAgICAgdm9pZCBhZGRMaXN0ZW5lcihTY3JpcHREZWJ1Z0xpc3RlbmVyKiwgUGFn
ZSopOwogICAgIHZvaWQgcmVtb3ZlTGlzdGVuZXIoU2NyaXB0RGVidWdMaXN0ZW5lciosIFBhZ2Uq
KTsKIAotICAgIFN0cmluZyBzZXRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNv
bnN0IFNjcmlwdEJyZWFrcG9pbnQmLCBsb25nKiBhY3R1YWxMaW5lTnVtYmVyLCBsb25nKiBhY3R1
YWxDb2x1bW5OdW1iZXIpOworICAgIFN0cmluZyBzZXRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYg
c291cmNlSUQsIGNvbnN0IFNjcmlwdEJyZWFrcG9pbnQmLCBpbnQqIGFjdHVhbExpbmVOdW1iZXIs
IGludCogYWN0dWFsQ29sdW1uTnVtYmVyKTsKICAgICB2b2lkIHJlbW92ZUJyZWFrcG9pbnQoY29u
c3QgU3RyaW5nJiBicmVha3BvaW50SWQpOwogICAgIHZvaWQgY2xlYXJCcmVha3BvaW50cygpOwog
ICAgIHZvaWQgc2V0QnJlYWtwb2ludHNBY3RpdmF0ZWQoYm9vbCBhY3RpdmF0ZWQpOwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3Rvci5pZGwgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbAppbmRleCA5Nzk3Mjc0Li5lYjg0Y2Q1IDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbAorKysgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yLmlkbApAQCAtMjUwLDkgKzI1MCwxMSBAQCBt
b2R1bGUgY29yZSB7CiAgICAgICAgIFtkb21haW49RGVidWdnZXJdIHZvaWQgYWN0aXZhdGVCcmVh
a3BvaW50cygpOwogICAgICAgICBbZG9tYWluPURlYnVnZ2VyXSB2b2lkIGRlYWN0aXZhdGVCcmVh
a3BvaW50cygpOwogCi0gICAgICAgIFtkb21haW49RGVidWdnZXJdIHZvaWQgc2V0QWxsSmF2YVNj
cmlwdEJyZWFrcG9pbnRzKGluIE9iamVjdCBicmVha3BvaW50cyk7Ci0gICAgICAgIFtkb21haW49
RGVidWdnZXJdIHZvaWQgc2V0QnJlYWtwb2ludChpbiBPYmplY3QgYnJlYWtwb2ludCwgb3V0IFN0
cmluZyBicmVha3BvaW50SWQsIG91dCBsb25nIGFjdHVhbExpbmVOdW1iZXIsIG91dCBsb25nIGFj
dHVhbENvbHVtbk51bWJlcik7Ci0gICAgICAgIFtkb21haW49RGVidWdnZXJdIHZvaWQgcmVtb3Zl
QnJlYWtwb2ludChpbiBTdHJpbmcgYnJlYWtwb2ludElkKTsKKyAgICAgICAgW2RvbWFpbj1EZWJ1
Z2dlcl0gdm9pZCBzZXRKYXZhU2NyaXB0QnJlYWtwb2ludChpbiBTdHJpbmcgdXJsLCBpbiBpbnQg
bGluZU51bWJlciwgaW4gaW50IGNvbHVtbk51bWJlciwgaW4gU3RyaW5nIGNvbmRpdGlvbiwgaW4g
Ym9vbGVhbiBlbmFibGVkLCBvdXQgU3RyaW5nIGJyZWFrcG9pbnRJZCwgb3V0IEFycmF5IGxvY2F0
aW9ucyk7CisgICAgICAgIFtkb21haW49RGVidWdnZXJdIHZvaWQgc2V0SmF2YVNjcmlwdEJyZWFr
cG9pbnRCeVNvdXJjZUlkKGluIFN0cmluZyBzb3VyY2VJZCwgaW4gaW50IGxpbmVOdW1iZXIsIGlu
IGludCBjb2x1bW5OdW1iZXIsIGluIFN0cmluZyBjb25kaXRpb24sIGluIGJvb2xlYW4gZW5hYmxl
ZCwgb3V0IFN0cmluZyBicmVha3BvaW50SWQsIG91dCBpbnQgYWN0dWFsTGluZU51bWJlciwgb3V0
IGludCBhY3R1YWxDb2x1bW5OdW1iZXIpOworICAgICAgICBbZG9tYWluPURlYnVnZ2VyXSB2b2lk
IHJlbW92ZUphdmFTY3JpcHRCcmVha3BvaW50KGluIFN0cmluZyBicmVha3BvaW50SWQpOworICAg
ICAgICBbbm90aWZ5LCBkb21haW49RGVidWdnZXJdIHZvaWQgYnJlYWtwb2ludFJlc29sdmVkKG91
dCBTdHJpbmcgYnJlYWtwb2ludElkLCBvdXQgU3RyaW5nIHNvdXJjZUlkLCBvdXQgaW50IGxpbmVO
dW1iZXIsIG91dCBpbnQgY29sdW1uTnVtYmVyKTsKKyAgICAgICAgW2RvbWFpbj1EZWJ1Z2dlcl0g
dm9pZCBjb250aW51ZVRvTG9jYXRpb24oaW4gU3RyaW5nIHNvdXJjZUlkLCBpbiBpbnQgbGluZU51
bWJlciwgaW4gaW50IGNvbHVtbk51bWJlcik7CiAKICAgICAgICAgW2RvbWFpbj1Ccm93c2VyRGVi
dWdnZXJdIHZvaWQgc2V0QWxsQnJvd3NlckJyZWFrcG9pbnRzKGluIE9iamVjdCBicmVha3BvaW50
cyk7CiAgICAgICAgIFtkb21haW49QnJvd3NlckRlYnVnZ2VyXSB2b2lkIHNldERPTUJyZWFrcG9p
bnQoaW4gbG9uZyBub2RlSWQsIGluIGxvbmcgdHlwZSk7CkBAIC0yNzgsOCArMjgwLDYgQEAgbW9k
dWxlIGNvcmUgewogICAgICAgICBbZG9tYWluPURlYnVnZ2VyXSB2b2lkIGV2YWx1YXRlT25DYWxs
RnJhbWUoaW4gT2JqZWN0IGNhbGxGcmFtZUlkLCBpbiBTdHJpbmcgZXhwcmVzc2lvbiwgaW4gU3Ry
aW5nIG9iamVjdEdyb3VwLCBpbiBib29sZWFuIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgb3V0IFZh
bHVlIHJlc3VsdCk7CiAgICAgICAgIFtkb21haW49RGVidWdnZXJdIHZvaWQgZ2V0Q29tcGxldGlv
bnNPbkNhbGxGcmFtZShpbiBPYmplY3QgY2FsbEZyYW1lSWQsIGluIFN0cmluZyBleHByZXNzaW9u
LCBpbiBib29sZWFuIGluY2x1ZGVDb21tYW5kTGluZUFQSSwgb3V0IFZhbHVlIHJlc3VsdCk7CiAK
LSAgICAgICAgW25vdGlmeSwgZG9tYWluPURlYnVnZ2VyXSB2b2lkIGJyZWFrcG9pbnRSZXNvbHZl
ZChvdXQgU3RyaW5nIGJyZWFrcG9pbnRJZCwgb3V0IE9iamVjdCBicmVha3BvaW50KTsKLQogI2lm
IGRlZmluZWQoRU5BQkxFX1dPUktFUlMpICYmIEVOQUJMRV9XT1JLRVJTCiAgICAgICAgIFtub3Rp
ZnksIGRvbWFpbj1EZWJ1Z2dlcl0gdm9pZCBkaWRDcmVhdGVXb3JrZXIob3V0IGxvbmcgaWQsIG91
dCBTdHJpbmcgdXJsLCBvdXQgYm9vbGVhbiBpc1NoYXJlZCk7CiAgICAgICAgIFtub3RpZnksIGRv
bWFpbj1EZWJ1Z2dlcl0gdm9pZCBkaWREZXN0cm95V29ya2VyKG91dCBsb25nIGlkKTsKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2VudC5jcHAgYi9Tb3Vy
Y2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuY3BwCmluZGV4IDQzZWViN2EuLjJm
ZGNlNDIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JBZ2Vu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFnZW50LmNwcApA
QCAtMjE0LDcgKzIxNCw3IEBAIHZvaWQgSW5zcGVjdG9yQWdlbnQ6OnJlc3RvcmVJbnNwZWN0b3JT
dGF0ZUZyb21Db29raWUoY29uc3QgU3RyaW5nJiBpbnNwZWN0b3JTdGF0CiAgICAgICAgIHN0YXJ0
VGltZWxpbmVQcm9maWxlcigpOwogCiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVCVUdHRVIpCi0g
ICAgcmVzdG9yZURlYnVnZ2VyKCk7CisgICAgcmVzdG9yZURlYnVnZ2VyKGZhbHNlKTsKICAgICBy
ZXN0b3JlUHJvZmlsZXIoUHJvZmlsZXJSZXN0b3JlUmVzZXRBZ2VudCk7CiAgICAgaWYgKG1fc3Rh
dGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OnVzZXJJbml0aWF0ZWRQcm9maWxpbmcpKQog
ICAgICAgICBzdGFydFVzZXJJbml0aWF0ZWRQcm9maWxpbmcoKTsKQEAgLTUzNSw3ICs1MzUsNyBA
QCB2b2lkIEluc3BlY3RvckFnZW50Ojpwb3B1bGF0ZVNjcmlwdE9iamVjdHMoKQogICAgICAgICBt
X2Zyb250ZW5kLT5ldmFsdWF0ZUZvclRlc3RJbkZyb250ZW5kKCgqaXQpLmZpcnN0LCAoKml0KS5z
ZWNvbmQpOwogICAgIG1fcGVuZGluZ0V2YWx1YXRlVGVzdENvbW1hbmRzLmNsZWFyKCk7CiAKLSAg
ICByZXN0b3JlRGVidWdnZXIoKTsKKyAgICByZXN0b3JlRGVidWdnZXIodHJ1ZSk7CiAgICAgcmVz
dG9yZVByb2ZpbGVyKFByb2ZpbGVyUmVzdG9yZU5vQWN0aW9uKTsKIH0KIApAQCAtNTYyLDEyICs1
NjIsMTIgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6cHVzaERhdGFDb2xsZWN0ZWRPZmZsaW5lKCkK
ICNlbmRpZgogfQogCi12b2lkIEluc3BlY3RvckFnZW50OjpyZXN0b3JlRGVidWdnZXIoKQordm9p
ZCBJbnNwZWN0b3JBZ2VudDo6cmVzdG9yZURlYnVnZ2VyKGJvb2wgbmV3RGVidWdnaW5nU2Vzc2lv
bikKIHsKICAgICBBU1NFUlQobV9mcm9udGVuZCk7CiAjaWYgRU5BQkxFKEpBVkFTQ1JJUFRfREVC
VUdHRVIpCiAgICAgaWYgKG1fc3RhdGUtPmdldEJvb2xlYW4oSW5zcGVjdG9yU3RhdGU6OmRlYnVn
Z2VyRW5hYmxlZCkpCi0gICAgICAgIGVuYWJsZURlYnVnZ2VyKCk7CisgICAgICAgIGVuYWJsZURl
YnVnZ2VyKG5ld0RlYnVnZ2luZ1Nlc3Npb24pOwogI2VuZGlmCiB9CiAKQEAgLTEwMDYsMTYgKzEw
MDYsMjEgQEAgdm9pZCBJbnNwZWN0b3JBZ2VudDo6c2hvd0FuZEVuYWJsZURlYnVnZ2VyKCkKICAg
ICAgICAgbV9zdGF0ZS0+c2V0Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6ZGVidWdnZXJFbmFibGVk
LCB0cnVlKTsKICAgICAgICAgc2hvd1BhbmVsKFNjcmlwdHNQYW5lbCk7CiAgICAgfSBlbHNlCi0g
ICAgICAgIGVuYWJsZURlYnVnZ2VyKCk7CisgICAgICAgIGVuYWJsZURlYnVnZ2VyKHRydWUpOwog
fQogCi12b2lkIEluc3BlY3RvckFnZW50OjplbmFibGVEZWJ1Z2dlcigpCit2b2lkIEluc3BlY3Rv
ckFnZW50OjplbmFibGVEZWJ1Z2dlcihib29sIG5ld0RlYnVnZ2luZ1Nlc3Npb24pCiB7CiAgICAg
aWYgKGRlYnVnZ2VyRW5hYmxlZCgpKQogICAgICAgICByZXR1cm47CiAgICAgbV9zdGF0ZS0+c2V0
Qm9vbGVhbihJbnNwZWN0b3JTdGF0ZTo6ZGVidWdnZXJFbmFibGVkLCB0cnVlKTsKICAgICBBU1NF
UlQobV9pbnNwZWN0ZWRQYWdlKTsKIAorICAgIGlmIChuZXdEZWJ1Z2dpbmdTZXNzaW9uKSB7Cisg
ICAgICAgIG1fc3RhdGUtPnNldE9iamVjdChJbnNwZWN0b3JTdGF0ZTo6amF2YVNjcmlwdEJyZWFr
cG9pbnRzLCBJbnNwZWN0b3JPYmplY3Q6OmNyZWF0ZSgpKTsKKyAgICAgICAgbV9zdGF0ZS0+c2V0
T2JqZWN0KEluc3BlY3RvclN0YXRlOjpicm93c2VyQnJlYWtwb2ludHMsIEluc3BlY3Rvck9iamVj
dDo6Y3JlYXRlKCkpOworICAgIH0KKwogICAgIG1fZGVidWdnZXJBZ2VudCA9IEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OmNyZWF0ZSh0aGlzLCBtX2Zyb250ZW5kLmdldCgpKTsKICAgICBtX2Jyb3dz
ZXJEZWJ1Z2dlckFnZW50ID0gSW5zcGVjdG9yQnJvd3NlckRlYnVnZ2VyQWdlbnQ6OmNyZWF0ZSh0
aGlzKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckFn
ZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdlbnQuaAppbmRleCA4
Y2M0OWE2Li5hN2IxNWI2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yQWdl
bnQuaApAQCAtMjQxLDcgKzI0MSw3IEBAIHB1YmxpYzoKICAgICBib29sIHByb2ZpbGVyRW5hYmxl
ZCgpIGNvbnN0OwogCiAgICAgdm9pZCBzaG93QW5kRW5hYmxlRGVidWdnZXIoKTsKLSAgICB2b2lk
IGVuYWJsZURlYnVnZ2VyKCk7CisgICAgdm9pZCBlbmFibGVEZWJ1Z2dlcihib29sIG5ld0RlYnVn
Z2luZ1Nlc3Npb24gPSBmYWxzZSk7CiAgICAgdm9pZCBkaXNhYmxlRGVidWdnZXIoKTsKICAgICBi
b29sIGRlYnVnZ2VyRW5hYmxlZCgpIGNvbnN0IHsgcmV0dXJuIG1fZGVidWdnZXJBZ2VudDsgfQog
ICAgIHZvaWQgcmVzdW1lKCk7CkBAIC0yNzEsNyArMjcxLDcgQEAgcHVibGljOgogCiBwcml2YXRl
OgogICAgIHZvaWQgcHVzaERhdGFDb2xsZWN0ZWRPZmZsaW5lKCk7Ci0gICAgdm9pZCByZXN0b3Jl
RGVidWdnZXIoKTsKKyAgICB2b2lkIHJlc3RvcmVEZWJ1Z2dlcihib29sIG5ld0RlYnVnZ2luZ1Nl
c3Npb24pOwogICAgIGVudW0gUHJvZmlsZXJSZXN0b3JlQWN0aW9uIHsKICAgICAgICAgUHJvZmls
ZXJSZXN0b3JlTm9BY3Rpb24gPSAwLAogICAgICAgICBQcm9maWxlclJlc3RvcmVSZXNldEFnZW50
ID0gMQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVn
Z2VyQWdlbnQuY3BwIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2Vy
QWdlbnQuY3BwCmluZGV4IDNjNjI5ODEuLmU5NmMyMmIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmNwcAorKysgYi9Tb3VyY2UvV2Vi
Q29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yRGVidWdnZXJBZ2VudC5jcHAKQEAgLTM4LDYgKzM4LDcg
QEAKICNpbmNsdWRlICJJbnNwZWN0b3JWYWx1ZXMuaCIKICNpbmNsdWRlICJQbGF0Zm9ybVN0cmlu
Zy5oIgogI2luY2x1ZGUgIlNjcmlwdERlYnVnU2VydmVyLmgiCisjaW5jbHVkZSA8d3RmL3RleHQv
U3RyaW5nQ29uY2F0ZW5hdGUuaD4KIAogbmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC01Niw3ICs1
Nyw2IEBAIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6Okluc3BlY3RvckRlYnVnZ2VyQWdlbnQoSW5z
cGVjdG9yQWdlbnQqIGluc3BlY3RvckFnZW50LCBJCiAgICAgLCBtX2Zyb250ZW5kKGZyb250ZW5k
KQogICAgICwgbV9wYXVzZWRTY3JpcHRTdGF0ZSgwKQogICAgICwgbV9qYXZhU2NyaXB0UGF1c2VT
Y2hlZHVsZWQoZmFsc2UpCi0gICAgLCBtX2JyZWFrcG9pbnRzUmVzdG9yZWQoZmFsc2UpCiB7CiB9
CiAKQEAgLTc2LDExMSArNzYsMTA3IEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGVh
Y3RpdmF0ZUJyZWFrcG9pbnRzKCkKICAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCkuZGVh
Y3RpdmF0ZUJyZWFrcG9pbnRzKCk7CiB9CiAKLXZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6
c2V0QWxsSmF2YVNjcmlwdEJyZWFrcG9pbnRzKFBhc3NSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBi
cmVha3BvaW50cykKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6aW5zcGVjdGVkVVJMQ2hh
bmdlZChjb25zdCBTdHJpbmcmKQogewotICAgIG1faW5zcGVjdG9yQWdlbnQtPnN0YXRlKCktPnNl
dE9iamVjdChJbnNwZWN0b3JTdGF0ZTo6amF2YVNjcmlwdEJyZWFrcG9pbnRzLCBicmVha3BvaW50
cyk7Ci0gICAgaWYgKCFtX2JyZWFrcG9pbnRzUmVzdG9yZWQpIHsKLSAgICAgICAgcmVzdG9yZUJy
ZWFrcG9pbnRzKG1faW5zcGVjdG9yQWdlbnQtPmluc3BlY3RlZFVSTFdpdGhvdXRGcmFnbWVudCgp
KTsKLSAgICAgICAgbV9icmVha3BvaW50c1Jlc3RvcmVkID0gdHJ1ZTsKLSAgICB9Ci19Ci0KLXZv
aWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6aW5zcGVjdGVkVVJMQ2hhbmdlZChjb25zdCBTdHJp
bmcmIHVybCkKLXsKLSAgICBtX3NjcmlwdElEVG9Db250ZW50LmNsZWFyKCk7Ci0gICAgbV91cmxU
b1NvdXJjZUlEcy5jbGVhcigpOwotICAgIHJlc3RvcmVCcmVha3BvaW50cyh1cmwpOworICAgIG1f
c2NyaXB0cy5jbGVhcigpOworICAgIG1fYnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9p
bnRJZHMuY2xlYXIoKTsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpyZXN0b3Jl
QnJlYWtwb2ludHMoY29uc3QgU3RyaW5nJiBpbnNwZWN0ZWRVUkwpCit2b2lkIEluc3BlY3RvckRl
YnVnZ2VyQWdlbnQ6OnNldEphdmFTY3JpcHRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgdXJsLCBp
bnQgbGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlciwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24s
IGJvb2wgZW5hYmxlZCwgU3RyaW5nKiBvdXRCcmVha3BvaW50SWQsIFJlZlB0cjxJbnNwZWN0b3JB
cnJheT4qIGxvY2F0aW9ucykKIHsKLSAgICBtX3N0aWNreUJyZWFrcG9pbnRzLmNsZWFyKCk7Ci0K
LSAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBhbGxCcmVha3BvaW50cyA9IG1faW5zcGVjdG9y
QWdlbnQtPnN0YXRlKCktPmdldE9iamVjdChJbnNwZWN0b3JTdGF0ZTo6amF2YVNjcmlwdEJyZWFr
cG9pbnRzKTsKLSAgICBSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGJyZWFrcG9pbnRzID0gYWxsQnJl
YWtwb2ludHMtPmdldEFycmF5KGluc3BlY3RlZFVSTCk7Ci0gICAgaWYgKCFicmVha3BvaW50cykK
KyAgICBTdHJpbmcgYnJlYWtwb2ludElkID0gbWFrZVN0cmluZyh1cmwsICI6IiwgU3RyaW5nOjpu
dW1iZXIobGluZU51bWJlciksICI6IiwgU3RyaW5nOjpudW1iZXIoY29sdW1uTnVtYmVyKSk7Cisg
ICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJlYWtwb2ludHNDb29raWUgPSBtX2luc3BlY3Rv
ckFnZW50LT5zdGF0ZSgpLT5nZXRPYmplY3QoSW5zcGVjdG9yU3RhdGU6OmphdmFTY3JpcHRCcmVh
a3BvaW50cyk7CisgICAgaWYgKGJyZWFrcG9pbnRzQ29va2llLT5maW5kKGJyZWFrcG9pbnRJZCkg
IT0gYnJlYWtwb2ludHNDb29raWUtPmVuZCgpKQogICAgICAgICByZXR1cm47Ci0gICAgZm9yICh1
bnNpZ25lZCBpID0gMDsgaSA8IGJyZWFrcG9pbnRzLT5sZW5ndGgoKTsgKytpKSB7Ci0gICAgICAg
IFJlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnQgPSBicmVha3BvaW50cy0+Z2V0KGkp
LT5hc09iamVjdCgpOwotICAgICAgICBpZiAoIWJyZWFrcG9pbnQpCi0gICAgICAgICAgICBjb250
aW51ZTsKLSAgICAgICAgU3RyaW5nIHVybDsKLSAgICAgICAgaWYgKCFicmVha3BvaW50LT5nZXRT
dHJpbmcoInVybCIsICZ1cmwpKQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGRvdWJs
ZSBsaW5lTnVtYmVyOwotICAgICAgICBpZiAoIWJyZWFrcG9pbnQtPmdldE51bWJlcigibGluZU51
bWJlciIsICZsaW5lTnVtYmVyKSkKKyAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3Bv
aW50T2JqZWN0ID0gSW5zcGVjdG9yT2JqZWN0OjpjcmVhdGUoKTsKKyAgICBicmVha3BvaW50T2Jq
ZWN0LT5zZXRTdHJpbmcoInVybCIsIHVybCk7CisgICAgYnJlYWtwb2ludE9iamVjdC0+c2V0TnVt
YmVyKCJsaW5lTnVtYmVyIiwgbGluZU51bWJlcik7CisgICAgYnJlYWtwb2ludE9iamVjdC0+c2V0
TnVtYmVyKCJjb2x1bW5OdW1iZXIiLCBjb2x1bW5OdW1iZXIpOworICAgIGJyZWFrcG9pbnRPYmpl
Y3QtPnNldFN0cmluZygiY29uZGl0aW9uIiwgY29uZGl0aW9uKTsKKyAgICBicmVha3BvaW50T2Jq
ZWN0LT5zZXRCb29sZWFuKCJlbmFibGVkIiwgZW5hYmxlZCk7CisgICAgYnJlYWtwb2ludHNDb29r
aWUtPnNldE9iamVjdChicmVha3BvaW50SWQsIGJyZWFrcG9pbnRPYmplY3QpOworICAgIG1faW5z
cGVjdG9yQWdlbnQtPnN0YXRlKCktPnNldE9iamVjdChJbnNwZWN0b3JTdGF0ZTo6amF2YVNjcmlw
dEJyZWFrcG9pbnRzLCBicmVha3BvaW50c0Nvb2tpZSk7CisKKyAgICBTY3JpcHRCcmVha3BvaW50
IGJyZWFrcG9pbnQobGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBjb25kaXRpb24sIGVuYWJsZWQp
OworICAgIGZvciAoU2NyaXB0c01hcDo6aXRlcmF0b3IgaXQgPSBtX3NjcmlwdHMuYmVnaW4oKTsg
aXQgIT0gbV9zY3JpcHRzLmVuZCgpOyArK2l0KSB7CisgICAgICAgIGlmIChpdC0+c2Vjb25kLnVy
bCAhPSB1cmwpCiAgICAgICAgICAgICBjb250aW51ZTsKLSAgICAgICAgZG91YmxlIGNvbHVtbk51
bWJlcjsKLSAgICAgICAgaWYgKCFicmVha3BvaW50LT5nZXROdW1iZXIoImNvbHVtbk51bWJlciIs
ICZjb2x1bW5OdW1iZXIpKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBTdHJpbmcgY29u
ZGl0aW9uOwotICAgICAgICBpZiAoIWJyZWFrcG9pbnQtPmdldFN0cmluZygiY29uZGl0aW9uIiwg
JmNvbmRpdGlvbikpCisgICAgICAgIGludCBhY3R1YWxMaW5lTnVtYmVyID0gMCwgYWN0dWFsQ29s
dW1uTnVtYmVyID0gMDsKKyAgICAgICAgaWYgKCFyZXNvbHZlQnJlYWtwb2ludChicmVha3BvaW50
SWQsIGl0LT5maXJzdCwgYnJlYWtwb2ludCwgJmFjdHVhbExpbmVOdW1iZXIsICZhY3R1YWxDb2x1
bW5OdW1iZXIpKQogICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIGJvb2wgZW5hYmxlZDsK
LSAgICAgICAgaWYgKCFicmVha3BvaW50LT5nZXRCb29sZWFuKCJlbmFibGVkIiwgJmVuYWJsZWQp
KQotICAgICAgICAgICAgY29udGludWU7Ci0gICAgICAgIFNjcmlwdEJyZWFrcG9pbnQgc2NyaXB0
QnJlYWtwb2ludCgobG9uZykgbGluZU51bWJlciwgKGxvbmcpIGNvbHVtbk51bWJlciwgY29uZGl0
aW9uLCBlbmFibGVkKTsKLSAgICAgICAgc2V0U3RpY2t5QnJlYWtwb2ludCh1cmwsIHNjcmlwdEJy
ZWFrcG9pbnQpOworICAgICAgICBSZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBsb2NhdGlvbiA9IElu
c3BlY3Rvck9iamVjdDo6Y3JlYXRlKCk7CisgICAgICAgIGxvY2F0aW9uLT5zZXRTdHJpbmcoInNv
dXJjZUlEIiwgaXQtPmZpcnN0KTsKKyAgICAgICAgbG9jYXRpb24tPnNldE51bWJlcigibGluZU51
bWJlciIsIGFjdHVhbExpbmVOdW1iZXIpOworICAgICAgICBsb2NhdGlvbi0+c2V0TnVtYmVyKCJj
b2x1bW5OdW1iZXIiLCBhY3R1YWxDb2x1bW5OdW1iZXIpOworICAgICAgICBsb2NhdGlvbnMtPmdl
dCgpLT5wdXNoT2JqZWN0KGxvY2F0aW9uKTsKICAgICB9CisgICAgKm91dEJyZWFrcG9pbnRJZCA9
IGJyZWFrcG9pbnRJZDsKIH0KIAotdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRTdGlj
a3lCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgdXJsLCBjb25zdCBTY3JpcHRCcmVha3BvaW50JiBi
cmVha3BvaW50KQordm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRKYXZhU2NyaXB0QnJl
YWtwb2ludEJ5U291cmNlSWQoY29uc3QgU3RyaW5nJiBzb3VyY2VJZCwgaW50IGxpbmVOdW1iZXIs
IGludCBjb2x1bW5OdW1iZXIsIGNvbnN0IFN0cmluZyYgY29uZGl0aW9uLCBib29sIGVuYWJsZWQs
IFN0cmluZyogb3V0QnJlYWtwb2ludElkLCBpbnQqIGFjdHVhbExpbmVOdW1iZXIsIGludCogYWN0
dWFsQ29sdW1uTnVtYmVyKQogewotICAgIEluc3BlY3RlZFVSTFRvQnJlYWtwb2ludHNNYXA6Oml0
ZXJhdG9yIGl0ID0gbV9zdGlja3lCcmVha3BvaW50cy5maW5kKHVybCk7Ci0gICAgaWYgKGl0ID09
IG1fc3RpY2t5QnJlYWtwb2ludHMuZW5kKCkpCi0gICAgICAgIGl0ID0gbV9zdGlja3lCcmVha3Bv
aW50cy5zZXQodXJsLCBMb2NhdGlvblRvQnJlYWtwb2ludE1hcCgpKS5maXJzdDsKLSAgICBpdC0+
c2Vjb25kLnNldChMb2NhdGlvbihicmVha3BvaW50LmxpbmVOdW1iZXIsIGJyZWFrcG9pbnQuY29s
dW1uTnVtYmVyKSwgYnJlYWtwb2ludCk7Ci0KLSAgICBVUkxUb1NvdXJjZUlEc01hcDo6aXRlcmF0
b3IgdXJsVG9Tb3VyY2VJRHNJdGVyYXRvciA9IG1fdXJsVG9Tb3VyY2VJRHMuZmluZCh1cmwpOwot
ICAgIGlmICh1cmxUb1NvdXJjZUlEc0l0ZXJhdG9yID09IG1fdXJsVG9Tb3VyY2VJRHMuZW5kKCkp
CisgICAgU3RyaW5nIGJyZWFrcG9pbnRJZCA9IG1ha2VTdHJpbmcoc291cmNlSWQsICI6IiwgU3Ry
aW5nOjpudW1iZXIobGluZU51bWJlciksICI6IiwgU3RyaW5nOjpudW1iZXIoY29sdW1uTnVtYmVy
KSk7CisgICAgaWYgKG1fYnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMuZmlu
ZChicmVha3BvaW50SWQpICE9IG1fYnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJ
ZHMuZW5kKCkpCiAgICAgICAgIHJldHVybjsKLSAgICBjb25zdCBWZWN0b3I8U3RyaW5nPiYgc291
cmNlSURzID0gdXJsVG9Tb3VyY2VJRHNJdGVyYXRvci0+c2Vjb25kOwotICAgIGZvciAoc2l6ZV90
IGkgPSAwOyBpIDwgc291cmNlSURzLnNpemUoKTsgKytpKQotICAgICAgICByZXN0b3JlQnJlYWtw
b2ludChzb3VyY2VJRHNbaV0sIGJyZWFrcG9pbnQpOworICAgIFNjcmlwdEJyZWFrcG9pbnQgYnJl
YWtwb2ludChsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIsIGNvbmRpdGlvbiwgZW5hYmxlZCk7Cisg
ICAgaWYgKCFyZXNvbHZlQnJlYWtwb2ludChicmVha3BvaW50SWQsIHNvdXJjZUlkLCBicmVha3Bv
aW50LCBhY3R1YWxMaW5lTnVtYmVyLCBhY3R1YWxDb2x1bW5OdW1iZXIpKQorICAgICAgICByZXR1
cm47CisgICAgKm91dEJyZWFrcG9pbnRJZCA9IGJyZWFrcG9pbnRJZDsKIH0KIAotdm9pZCBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjpzZXRCcmVha3BvaW50KFBhc3NSZWZQdHI8SW5zcGVjdG9yT2Jq
ZWN0PiBicmVha3BvaW50LCBTdHJpbmcqIGJyZWFrcG9pbnRJZCwgbG9uZyogYWN0dWFsTGluZU51
bWJlciwgbG9uZyogYWN0dWFsQ29sdW1uTnVtYmVyKQordm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpyZW1vdmVKYXZhU2NyaXB0QnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJ
ZCkKIHsKLSAgICBTdHJpbmcgc291cmNlSUQ7Ci0gICAgaWYgKCFicmVha3BvaW50LT5nZXRTdHJp
bmcoInNvdXJjZUlEIiwgJnNvdXJjZUlEKSkKLSAgICAgICAgcmV0dXJuOwotICAgIGRvdWJsZSBs
aW5lTnVtYmVyOwotICAgIGlmICghYnJlYWtwb2ludC0+Z2V0TnVtYmVyKCJsaW5lTnVtYmVyIiwg
JmxpbmVOdW1iZXIpKQotICAgICAgICByZXR1cm47Ci0gICAgZG91YmxlIGNvbHVtbk51bWJlcjsK
LSAgICBpZiAoIWJyZWFrcG9pbnQtPmdldE51bWJlcigiY29sdW1uTnVtYmVyIiwgJmNvbHVtbk51
bWJlcikpCi0gICAgICAgIHJldHVybjsKLSAgICBTdHJpbmcgY29uZGl0aW9uOwotICAgIGlmICgh
YnJlYWtwb2ludC0+Z2V0U3RyaW5nKCJjb25kaXRpb24iLCAmY29uZGl0aW9uKSkKLSAgICAgICAg
cmV0dXJuOwotICAgIGJvb2wgZW5hYmxlZDsKLSAgICBpZiAoIWJyZWFrcG9pbnQtPmdldEJvb2xl
YW4oImVuYWJsZWQiLCAmZW5hYmxlZCkpCisgICAgUmVmUHRyPEluc3BlY3Rvck9iamVjdD4gYnJl
YWtwb2ludHNDb29raWUgPSBtX2luc3BlY3RvckFnZW50LT5zdGF0ZSgpLT5nZXRPYmplY3QoSW5z
cGVjdG9yU3RhdGU6OmphdmFTY3JpcHRCcmVha3BvaW50cyk7CisgICAgYnJlYWtwb2ludHNDb29r
aWUtPnJlbW92ZShicmVha3BvaW50SWQpOworICAgIG1faW5zcGVjdG9yQWdlbnQtPnN0YXRlKCkt
PnNldE9iamVjdChJbnNwZWN0b3JTdGF0ZTo6amF2YVNjcmlwdEJyZWFrcG9pbnRzLCBicmVha3Bv
aW50c0Nvb2tpZSk7CisKKyAgICBCcmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElk
c01hcDo6aXRlcmF0b3IgZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3IgPSBtX2JyZWFr
cG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzLmZpbmQoYnJlYWtwb2ludElkKTsKKyAg
ICBpZiAoZGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzSXRlcmF0b3IgPT0gbV9icmVha3BvaW50SWRU
b0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5lbmQoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFNj
cmlwdEJyZWFrcG9pbnQgc2NyaXB0QnJlYWtwb2ludCgobG9uZykgbGluZU51bWJlciwgKGxvbmcp
IGNvbHVtbk51bWJlciwgY29uZGl0aW9uLCBlbmFibGVkKTsKLSAgICAqYnJlYWtwb2ludElkID0g
U2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnNldEJyZWFrcG9pbnQoc291cmNlSUQsIHNjcmlw
dEJyZWFrcG9pbnQsIGFjdHVhbExpbmVOdW1iZXIsIGFjdHVhbENvbHVtbk51bWJlcik7CisgICAg
Zm9yIChzaXplX3QgaSA9IDA7IGkgPCBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvci0+
c2Vjb25kLnNpemUoKTsgKytpKQorICAgICAgICBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVkKCku
cmVtb3ZlQnJlYWtwb2ludChkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvci0+c2Vjb25k
W2ldKTsKKyAgICBtX2JyZWFrcG9pbnRJZFRvRGVidWdTZXJ2ZXJCcmVha3BvaW50SWRzLnJlbW92
ZShkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvcik7CiB9CiAKLXZvaWQgSW5zcGVjdG9y
RGVidWdnZXJBZ2VudDo6cmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJ
ZCkKK3ZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6Y29udGludWVUb0xvY2F0aW9uKGNvbnN0
IFN0cmluZyYgc291cmNlSWQsIGludCBsaW5lTnVtYmVyLCBpbnQgY29sdW1uTnVtYmVyKQogewot
ICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5yZW1vdmVCcmVha3BvaW50KGJyZWFrcG9p
bnRJZCk7CisgICAgaWYgKCFtX2NvbnRpbnVlVG9Mb2NhdGlvbkJyZWFrcG9pbnRJZC5pc0VtcHR5
KCkpIHsKKyAgICAgICAgU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnJlbW92ZUJyZWFrcG9p
bnQobV9jb250aW51ZVRvTG9jYXRpb25CcmVha3BvaW50SWQpOworICAgICAgICBtX2NvbnRpbnVl
VG9Mb2NhdGlvbkJyZWFrcG9pbnRJZCA9ICIiOworICAgIH0KKyAgICBTY3JpcHRCcmVha3BvaW50
IGJyZWFrcG9pbnQobGluZU51bWJlciwgY29sdW1uTnVtYmVyLCAiIiwgdHJ1ZSk7CisgICAgbV9j
b250aW51ZVRvTG9jYXRpb25CcmVha3BvaW50SWQgPSBTY3JpcHREZWJ1Z1NlcnZlcjo6c2hhcmVk
KCkuc2V0QnJlYWtwb2ludChzb3VyY2VJZCwgYnJlYWtwb2ludCwgJmxpbmVOdW1iZXIsICZjb2x1
bW5OdW1iZXIpOworICAgIHJlc3VtZSgpOwogfQogCi12b2lkIEluc3BlY3RvckRlYnVnZ2VyQWdl
bnQ6OnJlc3RvcmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNvbnN0IFNjcmlw
dEJyZWFrcG9pbnQmIGJyZWFrcG9pbnQpCitib29sIEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ6OnJl
c29sdmVCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElkLCBjb25zdCBTdHJpbmcm
IHNvdXJjZUlkLCBjb25zdCBTY3JpcHRCcmVha3BvaW50JiBicmVha3BvaW50LCBpbnQqIGFjdHVh
bExpbmVOdW1iZXIsIGludCogYWN0dWFsQ29sdW1uTnVtYmVyKQogewotICAgIGxvbmcgYWN0dWFs
TGluZU51bWJlciA9IDAsIGFjdHVhbENvbHVtbk51bWJlciA9IDA7Ci0gICAgU3RyaW5nIGJyZWFr
cG9pbnRJZCA9IFNjcmlwdERlYnVnU2VydmVyOjpzaGFyZWQoKS5zZXRCcmVha3BvaW50KHNvdXJj
ZUlELCBicmVha3BvaW50LCAmYWN0dWFsTGluZU51bWJlciwgJmFjdHVhbENvbHVtbk51bWJlcik7
Ci0gICAgaWYgKGJyZWFrcG9pbnRJZC5pc0VtcHR5KCkpCi0gICAgICAgIHJldHVybjsKLSAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50RGF0YSA9IEluc3BlY3Rvck9iamVjdDo6
Y3JlYXRlKCk7Ci0gICAgYnJlYWtwb2ludERhdGEtPnNldFN0cmluZygiaWQiLCBicmVha3BvaW50
SWQpOwotICAgIGJyZWFrcG9pbnREYXRhLT5zZXRTdHJpbmcoInNvdXJjZUlEIiwgc291cmNlSUQp
OwotICAgIGJyZWFrcG9pbnREYXRhLT5zZXROdW1iZXIoImxpbmVOdW1iZXIiLCBhY3R1YWxMaW5l
TnVtYmVyKTsKLSAgICBicmVha3BvaW50RGF0YS0+c2V0TnVtYmVyKCJjb2x1bW5OdW1iZXIiLCBh
Y3R1YWxDb2x1bW5OdW1iZXIpOwotICAgIGJyZWFrcG9pbnREYXRhLT5zZXRTdHJpbmcoImNvbmRp
dGlvbiIsIGJyZWFrcG9pbnQuY29uZGl0aW9uKTsKLSAgICBicmVha3BvaW50RGF0YS0+c2V0Qm9v
bGVhbigiZW5hYmxlZCIsIGJyZWFrcG9pbnQuZW5hYmxlZCk7Ci0gICAgYnJlYWtwb2ludERhdGEt
PnNldE51bWJlcigib3JpZ2luYWxMaW5lTnVtYmVyIiwgYnJlYWtwb2ludC5saW5lTnVtYmVyKTsK
LSAgICBicmVha3BvaW50RGF0YS0+c2V0TnVtYmVyKCJvcmlnaW5hbENvbHVtbk51bWJlciIsIGJy
ZWFrcG9pbnQuY29sdW1uTnVtYmVyKTsKLSAgICBtX2Zyb250ZW5kLT5icmVha3BvaW50UmVzb2x2
ZWQoYnJlYWtwb2ludElkLCBicmVha3BvaW50RGF0YSk7CisgICAgU2NyaXB0c01hcDo6aXRlcmF0
b3Igc2NyaXB0SXRlcmF0b3IgPSBtX3NjcmlwdHMuZmluZChzb3VyY2VJZCk7CisgICAgaWYgKHNj
cmlwdEl0ZXJhdG9yID09IG1fc2NyaXB0cy5lbmQoKSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgIFNjcmlwdCYgc2NyaXB0ID0gc2NyaXB0SXRlcmF0b3ItPnNlY29uZDsKKyAgICBpZiAoYnJl
YWtwb2ludC5saW5lTnVtYmVyIDwgc2NyaXB0LmxpbmVPZmZzZXQpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKyAgICBpZiAoIXNjcmlwdC5saW5lc0NvdW50KSB7CisgICAgICAgIHNjcmlwdC5saW5l
c0NvdW50ID0gMTsKKyAgICAgICAgZm9yIChzaXplX3QgaSA9IDA7IGkgPCBzY3JpcHQuZGF0YS5s
ZW5ndGgoKTsgKytpKSB7CisgICAgICAgICAgICBpZiAoc2NyaXB0LmRhdGFbaV0gPT0gJ1xuJykK
KyAgICAgICAgICAgICAgICBzY3JpcHQubGluZXNDb3VudCArPSAxOworICAgICAgICB9CisgICAg
fQorICAgIGlmIChicmVha3BvaW50LmxpbmVOdW1iZXIgPj0gc2NyaXB0LmxpbmVPZmZzZXQgKyBz
Y3JpcHQubGluZXNDb3VudCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgU3RyaW5nIGRl
YnVnU2VydmVyQnJlYWtwb2ludElkID0gU2NyaXB0RGVidWdTZXJ2ZXI6OnNoYXJlZCgpLnNldEJy
ZWFrcG9pbnQoc291cmNlSWQsIGJyZWFrcG9pbnQsIGFjdHVhbExpbmVOdW1iZXIsIGFjdHVhbENv
bHVtbk51bWJlcik7CisgICAgaWYgKGRlYnVnU2VydmVyQnJlYWtwb2ludElkLmlzRW1wdHkoKSkK
KyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgQnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZlckJy
ZWFrcG9pbnRJZHNNYXA6Oml0ZXJhdG9yIGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9y
ID0gbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElkcy5maW5kKGJyZWFrcG9p
bnRJZCk7CisgICAgaWYgKGRlYnVnU2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yID09IG1fYnJl
YWtwb2ludElkVG9EZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHMuZW5kKCkpCisgICAgICAgIGRlYnVn
U2VydmVyQnJlYWtwb2ludElkc0l0ZXJhdG9yID0gbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVy
QnJlYWtwb2ludElkcy5zZXQoYnJlYWtwb2ludElkLCBWZWN0b3I8U3RyaW5nPigpKS5maXJzdDsK
KyAgICBkZWJ1Z1NlcnZlckJyZWFrcG9pbnRJZHNJdGVyYXRvci0+c2Vjb25kLmFwcGVuZChkZWJ1
Z1NlcnZlckJyZWFrcG9pbnRJZCk7CisKKyAgICByZXR1cm4gdHJ1ZTsKIH0KIAogdm9pZCBJbnNw
ZWN0b3JEZWJ1Z2dlckFnZW50OjplZGl0U2NyaXB0U291cmNlKGNvbnN0IFN0cmluZyYgc291cmNl
SUQsIGNvbnN0IFN0cmluZyYgbmV3Q29udGVudCwgYm9vbCogc3VjY2VzcywgU3RyaW5nKiByZXN1
bHQsIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4qIG5ld0NhbGxGcmFtZXMpCkBAIC0xOTEsNyArMTg3
LDcgQEAgdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjplZGl0U2NyaXB0U291cmNlKGNvbnN0
IFN0cmluZyYgc291cmNlSUQsIGNvbnN0IFN0cmkKIAogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFn
ZW50OjpnZXRTY3JpcHRTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgU3RyaW5nKiBzY3Jp
cHRTb3VyY2UpCiB7Ci0gICAgKnNjcmlwdFNvdXJjZSA9IG1fc2NyaXB0SURUb0NvbnRlbnQuZ2V0
KHNvdXJjZUlEKTsKKyAgICAqc2NyaXB0U291cmNlID0gbV9zY3JpcHRzLmdldChzb3VyY2VJRCku
ZGF0YTsKIH0KIAogdm9pZCBJbnNwZWN0b3JEZWJ1Z2dlckFnZW50OjpzY2hlZHVsZVBhdXNlT25O
ZXh0U3RhdGVtZW50KERlYnVnZ2VyRXZlbnRUeXBlIHR5cGUsIFBhc3NSZWZQdHI8SW5zcGVjdG9y
VmFsdWU+IGRhdGEpCkBAIC0yNzcsMjMgKzI3MywyNyBAQCB2b2lkIEluc3BlY3RvckRlYnVnZ2Vy
QWdlbnQ6OmRpZFBhcnNlU291cmNlKGNvbnN0IFN0cmluZyYgc291cmNlSUQsIGNvbnN0IFN0cmlu
ZwogICAgIC8vIERvbid0IHNlbmQgc2NyaXB0IGNvbnRlbnQgdG8gdGhlIGZyb250IGVuZCB1bnRp
bCBpdCdzIHJlYWxseSBuZWVkZWQuCiAgICAgbV9mcm9udGVuZC0+cGFyc2VkU2NyaXB0U291cmNl
KHNvdXJjZUlELCB1cmwsIGxpbmVPZmZzZXQsIGNvbHVtbk9mZnNldCwgZGF0YS5sZW5ndGgoKSwg
d29ybGRUeXBlKTsKIAotICAgIG1fc2NyaXB0SURUb0NvbnRlbnQuc2V0KHNvdXJjZUlELCBkYXRh
KTsKKyAgICBtX3NjcmlwdHMuc2V0KHNvdXJjZUlELCBTY3JpcHQodXJsLCBkYXRhLCBsaW5lT2Zm
c2V0LCBjb2x1bW5PZmZzZXQpKTsKIAogICAgIGlmICh1cmwuaXNFbXB0eSgpKQogICAgICAgICBy
ZXR1cm47CiAKLSAgICBVUkxUb1NvdXJjZUlEc01hcDo6aXRlcmF0b3IgdXJsVG9Tb3VyY2VJRHNJ
dGVyYXRvciA9IG1fdXJsVG9Tb3VyY2VJRHMuZmluZCh1cmwpOwotICAgIGlmICh1cmxUb1NvdXJj
ZUlEc0l0ZXJhdG9yID09IG1fdXJsVG9Tb3VyY2VJRHMuZW5kKCkpCi0gICAgICAgIHVybFRvU291
cmNlSURzSXRlcmF0b3IgPSBtX3VybFRvU291cmNlSURzLnNldCh1cmwsIFZlY3RvcjxTdHJpbmc+
KCkpLmZpcnN0OwotICAgIHVybFRvU291cmNlSURzSXRlcmF0b3ItPnNlY29uZC5hcHBlbmQoc291
cmNlSUQpOwotCi0gICAgSW5zcGVjdGVkVVJMVG9CcmVha3BvaW50c01hcDo6aXRlcmF0b3Igc3Rp
Y2t5QnJlYWtwb2ludHNJdGVyYXRvciA9IG1fc3RpY2t5QnJlYWtwb2ludHMuZmluZCh1cmwpOwot
ICAgIGlmIChzdGlja3lCcmVha3BvaW50c0l0ZXJhdG9yID09IG1fc3RpY2t5QnJlYWtwb2ludHMu
ZW5kKCkpCi0gICAgICAgIHJldHVybjsKLQotICAgIGNvbnN0IExvY2F0aW9uVG9CcmVha3BvaW50
TWFwJiBicmVha3BvaW50cyA9IHN0aWNreUJyZWFrcG9pbnRzSXRlcmF0b3ItPnNlY29uZDsKLSAg
ICBmb3IgKExvY2F0aW9uVG9CcmVha3BvaW50TWFwOjpjb25zdF9pdGVyYXRvciBpdCA9IGJyZWFr
cG9pbnRzLmJlZ2luKCk7IGl0ICE9IGJyZWFrcG9pbnRzLmVuZCgpOyArK2l0KQotICAgICAgICBy
ZXN0b3JlQnJlYWtwb2ludChzb3VyY2VJRCwgaXQtPnNlY29uZCk7CisgICAgUmVmUHRyPEluc3Bl
Y3Rvck9iamVjdD4gYnJlYWtwb2ludHNDb29raWUgPSBtX2luc3BlY3RvckFnZW50LT5zdGF0ZSgp
LT5nZXRPYmplY3QoSW5zcGVjdG9yU3RhdGU6OmphdmFTY3JpcHRCcmVha3BvaW50cyk7CisgICAg
Zm9yIChJbnNwZWN0b3JPYmplY3Q6Oml0ZXJhdG9yIGl0ID0gYnJlYWtwb2ludHNDb29raWUtPmJl
Z2luKCk7IGl0ICE9IGJyZWFrcG9pbnRzQ29va2llLT5lbmQoKTsgKytpdCkgeworICAgICAgICBS
ZWZQdHI8SW5zcGVjdG9yT2JqZWN0PiBicmVha3BvaW50T2JqZWN0ID0gaXQtPnNlY29uZC0+YXNP
YmplY3QoKTsKKyAgICAgICAgU3RyaW5nIGJyZWFrcG9pbnRVUkw7CisgICAgICAgIGJyZWFrcG9p
bnRPYmplY3QtPmdldFN0cmluZygidXJsIiwgJmJyZWFrcG9pbnRVUkwpOworICAgICAgICBpZiAo
YnJlYWtwb2ludFVSTCAhPSB1cmwpCisgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgU2Ny
aXB0QnJlYWtwb2ludCBicmVha3BvaW50OworICAgICAgICBicmVha3BvaW50T2JqZWN0LT5nZXRO
dW1iZXIoImxpbmVOdW1iZXIiLCAmYnJlYWtwb2ludC5saW5lTnVtYmVyKTsKKyAgICAgICAgYnJl
YWtwb2ludE9iamVjdC0+Z2V0TnVtYmVyKCJjb2x1bW5OdW1iZXIiLCAmYnJlYWtwb2ludC5jb2x1
bW5OdW1iZXIpOworICAgICAgICBicmVha3BvaW50T2JqZWN0LT5nZXRTdHJpbmcoImNvbmRpdGlv
biIsICZicmVha3BvaW50LmNvbmRpdGlvbik7CisgICAgICAgIGJyZWFrcG9pbnRPYmplY3QtPmdl
dEJvb2xlYW4oImVuYWJsZWQiLCAmYnJlYWtwb2ludC5lbmFibGVkKTsKKyAgICAgICAgaW50IGFj
dHVhbExpbmVOdW1iZXIgPSAwLCBhY3R1YWxDb2x1bW5OdW1iZXIgPSAwOworICAgICAgICBpZiAo
cmVzb2x2ZUJyZWFrcG9pbnQoaXQtPmZpcnN0LCBzb3VyY2VJRCwgYnJlYWtwb2ludCwgJmFjdHVh
bExpbmVOdW1iZXIsICZhY3R1YWxDb2x1bW5OdW1iZXIpKQorICAgICAgICAgICAgbV9mcm9udGVu
ZC0+YnJlYWtwb2ludFJlc29sdmVkKGl0LT5maXJzdCwgc291cmNlSUQsIGFjdHVhbExpbmVOdW1i
ZXIsIGFjdHVhbENvbHVtbk51bWJlcik7CisgICAgfQogfQogCiB2b2lkIEluc3BlY3RvckRlYnVn
Z2VyQWdlbnQ6OmZhaWxlZFRvUGFyc2VTb3VyY2UoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFN0
cmluZyYgZGF0YSwgaW50IGZpcnN0TGluZSwgaW50IGVycm9yTGluZSwgY29uc3QgU3RyaW5nJiBl
cnJvck1lc3NhZ2UpCkBAIC0zMTIsNiArMzEyLDExIEBAIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJB
Z2VudDo6ZGlkUGF1c2UoU2NyaXB0U3RhdGUqIHNjcmlwdFN0YXRlKQogCiAgICAgbV9mcm9udGVu
ZC0+cGF1c2VkU2NyaXB0KG1fYnJlYWtQcm9ncmFtRGV0YWlscyk7CiAgICAgbV9qYXZhU2NyaXB0
UGF1c2VTY2hlZHVsZWQgPSBmYWxzZTsKKworICAgIGlmICghbV9jb250aW51ZVRvTG9jYXRpb25C
cmVha3BvaW50SWQuaXNFbXB0eSgpKSB7CisgICAgICAgIFNjcmlwdERlYnVnU2VydmVyOjpzaGFy
ZWQoKS5yZW1vdmVCcmVha3BvaW50KG1fY29udGludWVUb0xvY2F0aW9uQnJlYWtwb2ludElkKTsK
KyAgICAgICAgbV9jb250aW51ZVRvTG9jYXRpb25CcmVha3BvaW50SWQgPSAiIjsKKyAgICB9CiB9
CiAKIHZvaWQgSW5zcGVjdG9yRGVidWdnZXJBZ2VudDo6ZGlkQ29udGludWUoKQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3BlY3RvckRlYnVnZ2VyQWdlbnQuaCBiL1Nv
dXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JEZWJ1Z2dlckFnZW50LmgKaW5kZXggZjBk
ZTk3My4uZjEzNDMyMiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL0luc3Bl
Y3RvckRlYnVnZ2VyQWdlbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVj
dG9yRGVidWdnZXJBZ2VudC5oCkBAIC02MCwxNSArNjAsMTcgQEAgcHVibGljOgogICAgIHN0YXRp
YyBQYXNzT3duUHRyPEluc3BlY3RvckRlYnVnZ2VyQWdlbnQ+IGNyZWF0ZShJbnNwZWN0b3JBZ2Vu
dCosIEluc3BlY3RvckZyb250ZW5kKik7CiAgICAgdmlydHVhbCB+SW5zcGVjdG9yRGVidWdnZXJB
Z2VudCgpOwogCi0gICAgdm9pZCBzZXRBbGxKYXZhU2NyaXB0QnJlYWtwb2ludHMoUGFzc1JlZlB0
cjxJbnNwZWN0b3JPYmplY3Q+KTsKICAgICB2b2lkIGluc3BlY3RlZFVSTENoYW5nZWQoY29uc3Qg
U3RyaW5nJiB1cmwpOwogCiAgICAgLy8gUGFydCBvZiB0aGUgcHJvdG9jb2wuCiAgICAgdm9pZCBh
Y3RpdmF0ZUJyZWFrcG9pbnRzKCk7CiAgICAgdm9pZCBkZWFjdGl2YXRlQnJlYWtwb2ludHMoKTsK
LSAgICB2b2lkIHNldFN0aWNreUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiB1cmwsIGNvbnN0IFdl
YkNvcmU6OlNjcmlwdEJyZWFrcG9pbnQmKTsKLSAgICB2b2lkIHNldEJyZWFrcG9pbnQoUGFzc1Jl
ZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGJyZWFrcG9pbnQsIFN0cmluZyogYnJlYWtwb2ludElkLCBs
b25nKiBhY3R1YWxMaW5lTnVtYmVyLCBsb25nKiBhY3R1YWxDb2x1bW5OdW1iZXIpOwotICAgIHZv
aWQgcmVtb3ZlQnJlYWtwb2ludChjb25zdCBTdHJpbmcmIGJyZWFrcG9pbnRJZCk7CisKKyAgICB2
b2lkIHNldEphdmFTY3JpcHRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgdXJsLCBpbnQgbGluZU51
bWJlciwgaW50IGNvbHVtbk51bWJlciwgY29uc3QgU3RyaW5nJiBjb25kaXRpb24sIGJvb2wgZW5h
YmxlZCwgU3RyaW5nKiBicmVha3BvaW50SWQsIFJlZlB0cjxJbnNwZWN0b3JBcnJheT4qIGxvY2F0
aW9ucyk7CisgICAgdm9pZCBzZXRKYXZhU2NyaXB0QnJlYWtwb2ludEJ5U291cmNlSWQoY29uc3Qg
U3RyaW5nJiBzb3VyY2VJZCwgaW50IGxpbmVOdW1iZXIsIGludCBjb2x1bW5OdW1iZXIsIGNvbnN0
IFN0cmluZyYgY29uZGl0aW9uLCBib29sIGVuYWJsZWQsIFN0cmluZyogYnJlYWtwb2ludElkLCBp
bnQqIGFjdHVhbExpbmVOdW1iZXIsIGludCogYWN0dWFsQ29sdW1uTnVtYmVyKTsKKyAgICB2b2lk
IHJlbW92ZUphdmFTY3JpcHRCcmVha3BvaW50KGNvbnN0IFN0cmluZyYgYnJlYWtwb2ludElkKTsK
KyAgICB2b2lkIGNvbnRpbnVlVG9Mb2NhdGlvbihjb25zdCBTdHJpbmcmIHNvdXJjZUlkLCBpbnQg
bGluZU51bWJlciwgaW50IGNvbHVtbk51bWJlcik7CisKICAgICB2b2lkIGVkaXRTY3JpcHRTb3Vy
Y2UoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgY29uc3QgU3RyaW5nJiBuZXdDb250ZW50LCBib29s
KiBzdWNjZXNzLCBTdHJpbmcqIHJlc3VsdCwgUmVmUHRyPEluc3BlY3RvclZhbHVlPiogbmV3Q2Fs
bEZyYW1lcyk7CiAgICAgdm9pZCBnZXRTY3JpcHRTb3VyY2UoY29uc3QgU3RyaW5nJiBzb3VyY2VJ
RCwgU3RyaW5nKiBzY3JpcHRTb3VyY2UpOwogICAgIHZvaWQgc2NoZWR1bGVQYXVzZU9uTmV4dFN0
YXRlbWVudChEZWJ1Z2dlckV2ZW50VHlwZSB0eXBlLCBQYXNzUmVmUHRyPEluc3BlY3RvclZhbHVl
PiBkYXRhKTsKQEAgLTkzLDIzICs5NSw0MCBAQCBwcml2YXRlOgogICAgIHZpcnR1YWwgdm9pZCBk
aWRQYXVzZShTY3JpcHRTdGF0ZSopOwogICAgIHZpcnR1YWwgdm9pZCBkaWRDb250aW51ZSgpOwog
Ci0gICAgdm9pZCByZXN0b3JlQnJlYWtwb2ludHMoY29uc3QgU3RyaW5nJiBpbnNwZWN0ZWRVUkwp
OwotICAgIHZvaWQgcmVzdG9yZUJyZWFrcG9pbnQoY29uc3QgU3RyaW5nJiBzb3VyY2VJRCwgY29u
c3QgU2NyaXB0QnJlYWtwb2ludCYpOworICAgIGJvb2wgcmVzb2x2ZUJyZWFrcG9pbnQoY29uc3Qg
U3RyaW5nJiBicmVha3BvaW50SWQsIGNvbnN0IFN0cmluZyYgc291cmNlSWQsIGNvbnN0IFNjcmlw
dEJyZWFrcG9pbnQmLCBpbnQqIGFjdHVhbExpbmVOdW1iZXIsIGludCogYWN0dWFsQ29sdW1uTnVt
YmVyKTsKKworICAgIHN0cnVjdCBTY3JpcHQgeworICAgICAgICBTY3JpcHQoY29uc3QgU3RyaW5n
JiB1cmwsIGNvbnN0IFN0cmluZyYgZGF0YSwgaW50IGxpbmVPZmZzZXQsIGludCBjb2x1bW5PZmZz
ZXQpCisgICAgICAgICAgICA6IHVybCh1cmwpCisgICAgICAgICAgICAsIGRhdGEoZGF0YSkKKyAg
ICAgICAgICAgICwgbGluZU9mZnNldChsaW5lT2Zmc2V0KQorICAgICAgICAgICAgLCBjb2x1bW5P
ZmZzZXQoY29sdW1uT2Zmc2V0KQorICAgICAgICAgICAgLCBsaW5lc0NvdW50KDApCisgICAgICAg
IHsKKyAgICAgICAgfQorCisgICAgICAgIFNjcmlwdCgpCisgICAgICAgIHsKKyAgICAgICAgfQor
CisgICAgICAgIFN0cmluZyB1cmw7CisgICAgICAgIFN0cmluZyBkYXRhOworICAgICAgICBpbnQg
bGluZU9mZnNldDsKKyAgICAgICAgaW50IGNvbHVtbk9mZnNldDsKKyAgICAgICAgaW50IGxpbmVz
Q291bnQ7CisgICAgfTsKIAotICAgIHR5cGVkZWYgSGFzaE1hcDxTdHJpbmcsIFZlY3RvcjxTdHJp
bmc+ID4gVVJMVG9Tb3VyY2VJRHNNYXA7Ci0gICAgdHlwZWRlZiBzdGQ6OnBhaXI8bG9uZywgbG9u
Zz4gTG9jYXRpb247Ci0gICAgdHlwZWRlZiBIYXNoTWFwPExvY2F0aW9uLCBTY3JpcHRCcmVha3Bv
aW50PiBMb2NhdGlvblRvQnJlYWtwb2ludE1hcDsKLSAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5n
LCBMb2NhdGlvblRvQnJlYWtwb2ludE1hcD4gSW5zcGVjdGVkVVJMVG9CcmVha3BvaW50c01hcDsK
KyAgICB0eXBlZGVmIEhhc2hNYXA8U3RyaW5nLCBTY3JpcHQ+IFNjcmlwdHNNYXA7CisgICAgdHlw
ZWRlZiBIYXNoTWFwPFN0cmluZywgVmVjdG9yPFN0cmluZz4gPiBCcmVha3BvaW50SWRUb0RlYnVn
U2VydmVyQnJlYWtwb2ludElkc01hcDsKIAogICAgIEluc3BlY3RvckFnZW50KiBtX2luc3BlY3Rv
ckFnZW50OwogICAgIEluc3BlY3RvckZyb250ZW5kKiBtX2Zyb250ZW5kOwogICAgIFNjcmlwdFN0
YXRlKiBtX3BhdXNlZFNjcmlwdFN0YXRlOwotICAgIEhhc2hNYXA8U3RyaW5nLCBTdHJpbmc+IG1f
c2NyaXB0SURUb0NvbnRlbnQ7Ci0gICAgVVJMVG9Tb3VyY2VJRHNNYXAgbV91cmxUb1NvdXJjZUlE
czsKLSAgICBJbnNwZWN0ZWRVUkxUb0JyZWFrcG9pbnRzTWFwIG1fc3RpY2t5QnJlYWtwb2ludHM7
CisgICAgU2NyaXB0c01hcCBtX3NjcmlwdHM7CisgICAgQnJlYWtwb2ludElkVG9EZWJ1Z1NlcnZl
ckJyZWFrcG9pbnRJZHNNYXAgbV9icmVha3BvaW50SWRUb0RlYnVnU2VydmVyQnJlYWtwb2ludElk
czsKKyAgICBTdHJpbmcgbV9jb250aW51ZVRvTG9jYXRpb25CcmVha3BvaW50SWQ7CiAgICAgUmVm
UHRyPEluc3BlY3Rvck9iamVjdD4gbV9icmVha1Byb2dyYW1EZXRhaWxzOwogICAgIGJvb2wgbV9q
YXZhU2NyaXB0UGF1c2VTY2hlZHVsZWQ7Ci0gICAgYm9vbCBtX2JyZWFrcG9pbnRzUmVzdG9yZWQ7
CiB9OwogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29y
ZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVzLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9JbnNwZWN0b3JWYWx1ZXMuY3BwCmluZGV4IGQxYjgwOTMuLjA5ZDEyNTggMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2luc3BlY3Rvci9JbnNwZWN0b3JWYWx1ZXMuY3BwCkBAIC00OTEsNiArNDkxLDEx
IEBAIGJvb2wgSW5zcGVjdG9yVmFsdWU6OmFzTnVtYmVyKGxvbmcqKSBjb25zdAogICAgIHJldHVy
biBmYWxzZTsKIH0KIAorYm9vbCBJbnNwZWN0b3JWYWx1ZTo6YXNOdW1iZXIoaW50KikgY29uc3QK
K3sKKyAgICByZXR1cm4gZmFsc2U7Cit9CisKIGJvb2wgSW5zcGVjdG9yVmFsdWU6OmFzTnVtYmVy
KHVuc2lnbmVkIGxvbmcqKSBjb25zdAogewogICAgIHJldHVybiBmYWxzZTsKQEAgLTU4MSw2ICs1
ODYsMTQgQEAgYm9vbCBJbnNwZWN0b3JCYXNpY1ZhbHVlOjphc051bWJlcihsb25nKiBvdXRwdXQp
IGNvbnN0CiAgICAgcmV0dXJuIHRydWU7CiB9CiAKK2Jvb2wgSW5zcGVjdG9yQmFzaWNWYWx1ZTo6
YXNOdW1iZXIoaW50KiBvdXRwdXQpIGNvbnN0Cit7CisgICAgaWYgKHR5cGUoKSAhPSBUeXBlTnVt
YmVyKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgKm91dHB1dCA9IHN0YXRpY19jYXN0PGlu
dD4obV9kb3VibGVWYWx1ZSk7CisgICAgcmV0dXJuIHRydWU7Cit9CisKIGJvb2wgSW5zcGVjdG9y
QmFzaWNWYWx1ZTo6YXNOdW1iZXIodW5zaWduZWQgbG9uZyogb3V0cHV0KSBjb25zdAogewogICAg
IGlmICh0eXBlKCkgIT0gVHlwZU51bWJlcikKQEAgLTY0NywyMiArNjYwLDYgQEAgYm9vbCBJbnNw
ZWN0b3JPYmplY3Q6OmdldEJvb2xlYW4oY29uc3QgU3RyaW5nJiBuYW1lLCBib29sKiBvdXRwdXQp
IGNvbnN0CiAgICAgcmV0dXJuIHZhbHVlLT5hc0Jvb2xlYW4ob3V0cHV0KTsKIH0KIAotYm9vbCBJ
bnNwZWN0b3JPYmplY3Q6OmdldE51bWJlcihjb25zdCBTdHJpbmcmIG5hbWUsIGxvbmcqIG91dHB1
dCkgY29uc3QKLXsKLSAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlID0gZ2V0KG5hbWUp
OwotICAgIGlmICghdmFsdWUpCi0gICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdmFs
dWUtPmFzTnVtYmVyKG91dHB1dCk7Ci19Ci0KLWJvb2wgSW5zcGVjdG9yT2JqZWN0OjpnZXROdW1i
ZXIoY29uc3QgU3RyaW5nJiBuYW1lLCBkb3VibGUqIG91dHB1dCkgY29uc3QKLXsKLSAgICBSZWZQ
dHI8SW5zcGVjdG9yVmFsdWU+IHZhbHVlID0gZ2V0KG5hbWUpOwotICAgIGlmICghdmFsdWUpCi0g
ICAgICAgIHJldHVybiBmYWxzZTsKLSAgICByZXR1cm4gdmFsdWUtPmFzTnVtYmVyKG91dHB1dCk7
Ci19Ci0KIGJvb2wgSW5zcGVjdG9yT2JqZWN0OjpnZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBuYW1l
LCBTdHJpbmcqIG91dHB1dCkgY29uc3QKIHsKICAgICBSZWZQdHI8SW5zcGVjdG9yVmFsdWU+IHZh
bHVlID0gZ2V0KG5hbWUpOwpAQCAtNjk1LDYgKzY5MiwxNyBAQCBQYXNzUmVmUHRyPEluc3BlY3Rv
clZhbHVlPiBJbnNwZWN0b3JPYmplY3Q6OmdldChjb25zdCBTdHJpbmcmIG5hbWUpIGNvbnN0CiAg
ICAgcmV0dXJuIGl0LT5zZWNvbmQ7CiB9CiAKK3ZvaWQgSW5zcGVjdG9yT2JqZWN0OjpyZW1vdmUo
Y29uc3QgU3RyaW5nJiBuYW1lKQoreworICAgIG1fZGF0YS5yZW1vdmUobmFtZSk7CisgICAgZm9y
IChzaXplX3QgaSA9IDA7IGkgPCBtX29yZGVyLnNpemUoKTsgKytpKSB7CisgICAgICAgIGlmICht
X29yZGVyW2ldID09IG5hbWUpIHsKKyAgICAgICAgICAgIG1fb3JkZXIucmVtb3ZlKGkpOworICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICB9Cit9CisKIHZvaWQgSW5zcGVjdG9yT2Jq
ZWN0Ojp3cml0ZUpTT04oVmVjdG9yPFVDaGFyPiogb3V0cHV0KSBjb25zdAogewogICAgIG91dHB1
dC0+YXBwZW5kKCd7Jyk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5z
cGVjdG9yVmFsdWVzLmggYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvSW5zcGVjdG9yVmFsdWVz
LmgKaW5kZXggODQzZjM2OS4uODM1Yzk4MiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5z
cGVjdG9yL0luc3BlY3RvclZhbHVlcy5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9J
bnNwZWN0b3JWYWx1ZXMuaApAQCAtNzIsNiArNzIsNyBAQCBwdWJsaWM6CiAgICAgdmlydHVhbCBi
b29sIGFzQm9vbGVhbihib29sKiBvdXRwdXQpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBhc051
bWJlcihkb3VibGUqIG91dHB1dCkgY29uc3Q7CiAgICAgdmlydHVhbCBib29sIGFzTnVtYmVyKGxv
bmcqIG91dHB1dCkgY29uc3Q7CisgICAgdmlydHVhbCBib29sIGFzTnVtYmVyKGludCogb3V0cHV0
KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgYXNOdW1iZXIodW5zaWduZWQgbG9uZyogb3V0cHV0
KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgYXNOdW1iZXIodW5zaWduZWQgaW50KiBvdXRwdXQp
IGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBhc1N0cmluZyhTdHJpbmcqIG91dHB1dCkgY29uc3Q7
CkBAIC0xMTQsNiArMTE1LDcgQEAgcHVibGljOgogICAgIHZpcnR1YWwgYm9vbCBhc0Jvb2xlYW4o
Ym9vbCogb3V0cHV0KSBjb25zdDsKICAgICB2aXJ0dWFsIGJvb2wgYXNOdW1iZXIoZG91YmxlKiBv
dXRwdXQpIGNvbnN0OwogICAgIHZpcnR1YWwgYm9vbCBhc051bWJlcihsb25nKiBvdXRwdXQpIGNv
bnN0OworICAgIHZpcnR1YWwgYm9vbCBhc051bWJlcihpbnQqIG91dHB1dCkgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIGFzTnVtYmVyKHVuc2lnbmVkIGxvbmcqIG91dHB1dCkgY29uc3Q7CiAgICAg
dmlydHVhbCBib29sIGFzTnVtYmVyKHVuc2lnbmVkIGludCogb3V0cHV0KSBjb25zdDsKIApAQCAt
MTc4LDE1ICsxODAsMjMgQEAgcHVibGljOgogICAgIHZvaWQgc2V0T2JqZWN0KGNvbnN0IFN0cmlu
ZyYgbmFtZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+KTsKICAgICB2b2lkIHNldEFycmF5
KGNvbnN0IFN0cmluZyYgbmFtZSwgUGFzc1JlZlB0cjxJbnNwZWN0b3JBcnJheT4pOwogCisgICAg
aXRlcmF0b3IgZmluZChjb25zdCBTdHJpbmcmIG5hbWUpOwogICAgIGNvbnN0X2l0ZXJhdG9yIGZp
bmQoY29uc3QgU3RyaW5nJiBuYW1lKSBjb25zdDsKICAgICBib29sIGdldEJvb2xlYW4oY29uc3Qg
U3RyaW5nJiBuYW1lLCBib29sKiBvdXRwdXQpIGNvbnN0OwotICAgIGJvb2wgZ2V0TnVtYmVyKGNv
bnN0IFN0cmluZyYgbmFtZSwgbG9uZyogb3V0cHV0KSBjb25zdDsKLSAgICBib29sIGdldE51bWJl
cihjb25zdCBTdHJpbmcmIG5hbWUsIGRvdWJsZSogb3V0cHV0KSBjb25zdDsKKyAgICB0ZW1wbGF0
ZTxjbGFzcyBUPiBib29sIGdldE51bWJlcihjb25zdCBTdHJpbmcmIG5hbWUsIFQqIG91dHB1dCkg
Y29uc3QKKyAgICB7CisgICAgICAgIFJlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gdmFsdWUgPSBnZXQo
bmFtZSk7CisgICAgICAgIGlmICghdmFsdWUpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgICAgIHJldHVybiB2YWx1ZS0+YXNOdW1iZXIob3V0cHV0KTsKKyAgICB9CiAgICAgYm9vbCBn
ZXRTdHJpbmcoY29uc3QgU3RyaW5nJiBuYW1lLCBTdHJpbmcqIG91dHB1dCkgY29uc3Q7CiAgICAg
UGFzc1JlZlB0cjxJbnNwZWN0b3JPYmplY3Q+IGdldE9iamVjdChjb25zdCBTdHJpbmcmIG5hbWUp
IGNvbnN0OwogICAgIFBhc3NSZWZQdHI8SW5zcGVjdG9yQXJyYXk+IGdldEFycmF5KGNvbnN0IFN0
cmluZyYgbmFtZSkgY29uc3Q7CiAgICAgUGFzc1JlZlB0cjxJbnNwZWN0b3JWYWx1ZT4gZ2V0KGNv
bnN0IFN0cmluZyYgbmFtZSkgY29uc3Q7CiAKKyAgICB2b2lkIHJlbW92ZShjb25zdCBTdHJpbmcm
IG5hbWUpOworCiAgICAgdmlydHVhbCB2b2lkIHdyaXRlSlNPTihWZWN0b3I8VUNoYXI+KiBvdXRw
dXQpIGNvbnN0OwogCiAgICAgaXRlcmF0b3IgYmVnaW4oKSB7IHJldHVybiBtX2RhdGEuYmVnaW4o
KTsgfQpAQCAtMjI4LDYgKzIzOCwxMSBAQCBwcml2YXRlOgogICAgIFZlY3RvcjxSZWZQdHI8SW5z
cGVjdG9yVmFsdWU+ID4gbV9kYXRhOwogfTsKIAoraW5saW5lIEluc3BlY3Rvck9iamVjdDo6aXRl
cmF0b3IgSW5zcGVjdG9yT2JqZWN0OjpmaW5kKGNvbnN0IFN0cmluZyYgbmFtZSkKK3sKKyAgICBy
ZXR1cm4gbV9kYXRhLmZpbmQobmFtZSk7Cit9CisKIGlubGluZSBJbnNwZWN0b3JPYmplY3Q6OmNv
bnN0X2l0ZXJhdG9yIEluc3BlY3Rvck9iamVjdDo6ZmluZChjb25zdCBTdHJpbmcmIG5hbWUpIGNv
bnN0CiB7CiAgICAgcmV0dXJuIG1fZGF0YS5maW5kKG5hbWUpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL1NjcmlwdEJyZWFrcG9pbnQuaCBiL1NvdXJjZS9XZWJDb3JlL2lu
c3BlY3Rvci9TY3JpcHRCcmVha3BvaW50LmgKaW5kZXggOTUyMWNjZC4uNDkxN2FlZiAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL1NjcmlwdEJyZWFrcG9pbnQuaAorKysgYi9T
b3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvU2NyaXB0QnJlYWtwb2ludC5oCkBAIC0zNSw3ICszNSwx
MSBAQAogbmFtZXNwYWNlIFdlYkNvcmUgewogCiBzdHJ1Y3QgU2NyaXB0QnJlYWtwb2ludCB7Ci0g
ICAgU2NyaXB0QnJlYWtwb2ludChsb25nIGxpbmVOdW1iZXIsIGxvbmcgY29sdW1uTnVtYmVyLCBj
b25zdCBTdHJpbmcmIGNvbmRpdGlvbiwgYm9vbCBlbmFibGVkKQorICAgIFNjcmlwdEJyZWFrcG9p
bnQoKQorICAgIHsKKyAgICB9CisKKyAgICBTY3JpcHRCcmVha3BvaW50KGludCBsaW5lTnVtYmVy
LCBpbnQgY29sdW1uTnVtYmVyLCBjb25zdCBTdHJpbmcmIGNvbmRpdGlvbiwgYm9vbCBlbmFibGVk
KQogICAgICAgICA6IGxpbmVOdW1iZXIobGluZU51bWJlcikKICAgICAgICAgLCBjb2x1bW5OdW1i
ZXIoY29sdW1uTnVtYmVyKQogICAgICAgICAsIGNvbmRpdGlvbihjb25kaXRpb24pCkBAIC00Mywx
MiArNDcsOCBAQCBzdHJ1Y3QgU2NyaXB0QnJlYWtwb2ludCB7CiAgICAgewogICAgIH0KIAotICAg
IFNjcmlwdEJyZWFrcG9pbnQoKQotICAgIHsKLSAgICB9Ci0KLSAgICBsb25nIGxpbmVOdW1iZXI7
Ci0gICAgbG9uZyBjb2x1bW5OdW1iZXI7CisgICAgaW50IGxpbmVOdW1iZXI7CisgICAgaW50IGNv
bHVtbk51bWJlcjsKICAgICBTdHJpbmcgY29uZGl0aW9uOwogICAgIGJvb2wgZW5hYmxlZDsKIH07
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9p
bnQuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0JyZWFrcG9pbnQuanMK
aW5kZXggYjhkZWNmMC4uZWJjNjAyOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9CcmVha3BvaW50LmpzCisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvQnJlYWtwb2ludC5qcwpAQCAtMjksNTQgKzI5LDIxIEBACiAgKiBPRiBUSElT
IFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFN
QUdFLgogICovCiAKLVdlYkluc3BlY3Rvci5CcmVha3BvaW50ID0gZnVuY3Rpb24oZGVidWdnZXJN
b2RlbCwgYnJlYWtwb2ludElkLCBkYXRhKQorV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnQgPSBmdW5j
dGlvbihpZCwgdXJsLCBzb3VyY2VJRCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBjb25kaXRp
b24sIGVuYWJsZWQpCiB7Ci0gICAgdGhpcy5pZCA9IGJyZWFrcG9pbnRJZDsKLSAgICB0aGlzLnNv
dXJjZUlEID0gZGF0YS5zb3VyY2VJRDsKLSAgICB0aGlzLmxpbmUgPSBkYXRhLmxpbmVOdW1iZXI7
Ci0gICAgdGhpcy5jb2x1bW4gPSBkYXRhLmNvbHVtbk51bWJlcjsKLSAgICB0aGlzLl9jb25kaXRp
b24gPSBkYXRhLmNvbmRpdGlvbjsKLSAgICB0aGlzLl9lbmFibGVkID0gZGF0YS5lbmFibGVkOwot
ICAgIHRoaXMuX2RlYnVnZ2VyTW9kZWwgPSBkZWJ1Z2dlck1vZGVsOworICAgIHRoaXMuaWQgPSBp
ZDsKKyAgICB0aGlzLnVybCA9IHVybDsKKyAgICB0aGlzLnNvdXJjZUlEID0gc291cmNlSUQ7Cisg
ICAgdGhpcy5saW5lTnVtYmVyID0gbGluZU51bWJlcjsKKyAgICB0aGlzLmNvbHVtbk51bWJlciA9
IGNvbHVtbk51bWJlcjsKKyAgICB0aGlzLmNvbmRpdGlvbiA9IGNvbmRpdGlvbjsKKyAgICB0aGlz
LmVuYWJsZWQgPSBlbmFibGVkOworICAgIHRoaXMubG9jYXRpb25zID0gW107CiB9CiAKIFdlYklu
c3BlY3Rvci5CcmVha3BvaW50LnByb3RvdHlwZSA9IHsKLSAgICBnZXQgZW5hYmxlZCgpCisgICAg
YWRkTG9jYXRpb246IGZ1bmN0aW9uKHNvdXJjZUlELCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIp
CiAgICAgewotICAgICAgICByZXR1cm4gdGhpcy5fZW5hYmxlZDsKLSAgICB9LAotCi0gICAgc2V0
IGVuYWJsZWQoZW5hYmxlZCkKLSAgICB7Ci0gICAgICAgIGlmICh0aGlzLl9lbmFibGVkID09PSBl
bmFibGVkKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICB0aGlzLnJlbW92ZSgpOwotICAg
ICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5zZXRCcmVha3BvaW50KHRoaXMuc291cmNl
SUQsIHRoaXMubGluZSwgZW5hYmxlZCwgdGhpcy5jb25kaXRpb24pOwotICAgIH0sCi0KLSAgICBn
ZXQgY29uZGl0aW9uKCkKLSAgICB7Ci0gICAgICAgIHJldHVybiB0aGlzLl9jb25kaXRpb247Ci0g
ICAgfSwKLQotICAgIGdldCB1cmwoKQotICAgIHsKLSAgICAgICAgaWYgKCF0aGlzLl91cmwpCi0g
ICAgICAgICAgICB0aGlzLl91cmwgPSB0aGlzLl9kZWJ1Z2dlck1vZGVsLnNjcmlwdEZvclNvdXJj
ZUlEKHRoaXMuc291cmNlSUQpLnNvdXJjZVVSTDsKLSAgICAgICAgcmV0dXJuIHRoaXMuX3VybDsK
LSAgICB9LAotCi0gICAgZ2V0IGRhdGEoKQotICAgIHsKLSAgICAgICAgcmV0dXJuIHsgaWQ6IHRo
aXMuaWQsIHVybDogdGhpcy51cmwsIHNvdXJjZUlEOiB0aGlzLnNvdXJjZUlELCBsaW5lTnVtYmVy
OiB0aGlzLmxpbmUsIGNvbmRpdGlvbjogdGhpcy5jb25kaXRpb24gfTsKLSAgICB9LAotCi0gICAg
cmVtb3ZlOiBmdW5jdGlvbigpCi0gICAgewotICAgICAgICB0aGlzLl9kZWJ1Z2dlck1vZGVsLnJl
bW92ZUJyZWFrcG9pbnQodGhpcy5pZCk7Ci0gICAgICAgIHRoaXMucmVtb3ZlQWxsTGlzdGVuZXJz
KCk7Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9kZWJ1Z2dlck1vZGVsOworICAgICAgICB0aGlzLmxv
Y2F0aW9ucy5wdXNoKHsgc291cmNlSUQ6IHNvdXJjZUlELCBsaW5lTnVtYmVyOiBsaW5lTnVtYmVy
LCBjb2x1bW5OdW1iZXI6IGNvbHVtbk51bWJlciB9KTsKICAgICB9CiB9Ci0KLVdlYkluc3BlY3Rv
ci5CcmVha3BvaW50LnByb3RvdHlwZS5fX3Byb3RvX18gPSBXZWJJbnNwZWN0b3IuT2JqZWN0LnBy
b3RvdHlwZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQv
QnJlYWtwb2ludE1hbmFnZXIuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5k
L0JyZWFrcG9pbnRNYW5hZ2VyLmpzCmluZGV4IDE2OWI0NzMuLjk0MzQ1ZDUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludE1hbmFnZXIuanMK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9CcmVha3BvaW50TWFuYWdl
ci5qcwpAQCAtMzcsMTggKzM3LDE0IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlciA9
IGZ1bmN0aW9uKCkKIAogICAgIHRoaXMuX2JyZWFrcG9pbnRzID0ge307CiAgICAgdGhpcy5fZG9t
QnJlYWtwb2ludHNSZXN0b3JlZCA9IGZhbHNlOwotICAgIHRoaXMuX3NjcmlwdEJyZWFrcG9pbnRz
ID0ge307CiAKICAgICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuYWRkRXZlbnRMaXN0ZW5lcihXZWJJ
bnNwZWN0b3IuU2V0dGluZ3MuRXZlbnRzLlByb2plY3RDaGFuZ2VkLCB0aGlzLl9wcm9qZWN0Q2hh
bmdlZCwgdGhpcyk7Ci0gICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0
ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMuQnJlYWtwb2ludEFkZGVkLCB0
aGlzLl9zY3JpcHRCcmVha3BvaW50QWRkZWQsIHRoaXMpOwotICAgIFdlYkluc3BlY3Rvci5kZWJ1
Z2dlck1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZl
bnRzLkJyZWFrcG9pbnRSZW1vdmVkLCB0aGlzLl9zY3JpcHRCcmVha3BvaW50UmVtb3ZlZCwgdGhp
cyk7CiAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJ
bnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMuRGVidWdnZXJQYXVzZWQsIHRoaXMuX2RlYnVn
Z2VyUGF1c2VkLCB0aGlzKTsKICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRFdmVu
dExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5EZWJ1Z2dlclJlc3Vt
ZWQsIHRoaXMuX2RlYnVnZ2VyUmVzdW1lZCwgdGhpcyk7CiB9CiAKIFdlYkluc3BlY3Rvci5CcmVh
a3BvaW50TWFuYWdlci5CcmVha3BvaW50VHlwZXMgPSB7CiAgICAgRE9NOiAiRE9NIiwKLSAgICBK
UzogIkpTIiwKICAgICBFdmVudExpc3RlbmVyOiAiRXZlbnRMaXN0ZW5lciIsCiAgICAgWEhSOiAi
WEhSIgogfQpAQCAtMTAzLDM4ICs5OSw2IEBAIFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdl
ci5wcm90b3R5cGUgPSB7CiAgICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKFdl
Ykluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5FdmVudHMuRXZlbnRMaXN0ZW5lckJyZWFrcG9p
bnRBZGRlZCwgYnJlYWtwb2ludC52aWV3KTsKICAgICB9LAogCi0gICAgX2NyZWF0ZUphdmFTY3Jp
cHRCcmVha3BvaW50OiBmdW5jdGlvbih1cmwsIGxpbmVOdW1iZXIsIGNvbmRpdGlvbiwgZW5hYmxl
ZCwgcmVzdG9yZWQpCi0gICAgewotICAgICAgICB2YXIgYnJlYWtwb2ludElkID0gdGhpcy5fY3Jl
YXRlSmF2YVNjcmlwdEJyZWFrcG9pbnRJZCh1cmwsIGxpbmVOdW1iZXIpOwotICAgICAgICBpZiAo
YnJlYWtwb2ludElkIGluIHRoaXMuX2JyZWFrcG9pbnRzKQotICAgICAgICAgICAgcmV0dXJuOwot
Ci0gICAgICAgIHZhciBicmVha3BvaW50ID0gbmV3IFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0QnJl
YWtwb2ludCh1cmwsIGxpbmVOdW1iZXIsIGNvbmRpdGlvbik7Ci0gICAgICAgIHRoaXMuX3NldEJy
ZWFrcG9pbnQoYnJlYWtwb2ludElkLCBicmVha3BvaW50LCBlbmFibGVkLCByZXN0b3JlZCk7Ci0g
ICAgfSwKLQotICAgIF9zY3JpcHRCcmVha3BvaW50QWRkZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAg
IHsKLSAgICAgICAgdmFyIHNjcmlwdEJyZWFrcG9pbnQgPSBldmVudC5kYXRhOwotCi0gICAgICAg
IGlmICghc2NyaXB0QnJlYWtwb2ludC51cmwpCi0gICAgICAgICAgICByZXR1cm47Ci0KLSAgICAg
ICAgaWYgKCFzY3JpcHRCcmVha3BvaW50LnJlc3RvcmVkKQotICAgICAgICAgICAgdGhpcy5fY3Jl
YXRlSmF2YVNjcmlwdEJyZWFrcG9pbnQoc2NyaXB0QnJlYWtwb2ludC51cmwsIHNjcmlwdEJyZWFr
cG9pbnQub3JpZ2luYWxMaW5lTnVtYmVyLCBzY3JpcHRCcmVha3BvaW50LmNvbmRpdGlvbiwgc2Ny
aXB0QnJlYWtwb2ludC5lbmFibGVkLCBmYWxzZSk7Ci0gICAgICAgIHZhciBicmVha3BvaW50SWQg
PSB0aGlzLl9jcmVhdGVKYXZhU2NyaXB0QnJlYWtwb2ludElkKHNjcmlwdEJyZWFrcG9pbnQudXJs
LCBzY3JpcHRCcmVha3BvaW50Lm9yaWdpbmFsTGluZU51bWJlcik7Ci0gICAgICAgIHRoaXMuX3Nj
cmlwdEJyZWFrcG9pbnRzW3NjcmlwdEJyZWFrcG9pbnQuaWRdID0gYnJlYWtwb2ludElkOwotICAg
IH0sCi0KLSAgICBfc2NyaXB0QnJlYWtwb2ludFJlbW92ZWQ6IGZ1bmN0aW9uKGV2ZW50KQotICAg
IHsKLSAgICAgICAgdmFyIHNjcmlwdEJyZWFrcG9pbnRJZCA9IGV2ZW50LmRhdGE7Ci0gICAgICAg
IHZhciBicmVha3BvaW50SWQgPSB0aGlzLl9zY3JpcHRCcmVha3BvaW50c1tzY3JpcHRCcmVha3Bv
aW50SWRdOwotICAgICAgICBkZWxldGUgdGhpcy5fc2NyaXB0QnJlYWtwb2ludHNbc2NyaXB0QnJl
YWtwb2ludElkXTsKLSAgICAgICAgaWYgKGJyZWFrcG9pbnRJZCBpbiB0aGlzLl9icmVha3BvaW50
cykKLSAgICAgICAgICAgIHRoaXMuX3JlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludElkKTsKLSAg
ICB9LAotCiAgICAgY3JlYXRlWEhSQnJlYWtwb2ludDogZnVuY3Rpb24odXJsKQogICAgIHsKICAg
ICAgICAgdGhpcy5fY3JlYXRlWEhSQnJlYWtwb2ludCh1cmwsIHRydWUsIGZhbHNlKTsKQEAgLTIz
MSw3ICsxOTUsNiBAQCBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIucHJvdG90eXBlID0g
ewogICAgIHsKICAgICAgICAgdGhpcy5fYnJlYWtwb2ludHMgPSB7fTsKICAgICAgICAgdGhpcy5f
ZG9tQnJlYWtwb2ludHNSZXN0b3JlZCA9IGZhbHNlOwotICAgICAgICB0aGlzLl9zY3JpcHRCcmVh
a3BvaW50cyA9IHt9OwogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuRXZlbnRzLlByb2plY3RDaGFuZ2VkKTsKIAogICAg
ICAgICB2YXIgYnJlYWtwb2ludHMgPSB0aGlzLl9zdGlja3lCcmVha3BvaW50c1tXZWJJbnNwZWN0
b3Iuc2V0dGluZ3MucHJvamVjdElkXSB8fCBbXTsKQEAgLTIzOSwxNCArMjAyLDEyIEBAIFdlYklu
c3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB2YXIg
YnJlYWtwb2ludCA9IGJyZWFrcG9pbnRzW2ldOwogICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQu
dHlwZSA9PT0gV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkJyZWFrcG9pbnRUeXBlcy5F
dmVudExpc3RlbmVyKQogICAgICAgICAgICAgICAgIHRoaXMuX2NyZWF0ZUV2ZW50TGlzdGVuZXJC
cmVha3BvaW50KGJyZWFrcG9pbnQuY29uZGl0aW9uLmV2ZW50TmFtZSwgYnJlYWtwb2ludC5lbmFi
bGVkLCB0cnVlKTsKLSAgICAgICAgICAgIGVsc2UgaWYgKGJyZWFrcG9pbnQudHlwZSA9PT0gV2Vi
SW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkJyZWFrcG9pbnRUeXBlcy5KUykKLSAgICAgICAg
ICAgICAgICB0aGlzLl9jcmVhdGVKYXZhU2NyaXB0QnJlYWtwb2ludChicmVha3BvaW50LmNvbmRp
dGlvbi51cmwsIGJyZWFrcG9pbnQuY29uZGl0aW9uLmxpbmVOdW1iZXIsIGJyZWFrcG9pbnQuY29u
ZGl0aW9uLmNvbmRpdGlvbiwgYnJlYWtwb2ludC5lbmFibGVkLCB0cnVlKTsKICAgICAgICAgICAg
IGVsc2UgaWYgKGJyZWFrcG9pbnQudHlwZSA9PT0gV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5h
Z2VyLkJyZWFrcG9pbnRUeXBlcy5YSFIpCiAgICAgICAgICAgICAgICAgdGhpcy5fY3JlYXRlWEhS
QnJlYWtwb2ludChicmVha3BvaW50LmNvbmRpdGlvbi51cmwsIGJyZWFrcG9pbnQuZW5hYmxlZCwg
dHJ1ZSk7CiAgICAgICAgIH0KIAogICAgICAgICBpZiAoIXRoaXMuX2JyZWFrcG9pbnRzUHVzaGVk
VG9Gcm9udGVuZCkgewotICAgICAgICAgICAgdGhpcy5fcHVzaEJyZWFrcG9pbnRzVG9CYWNrZW5k
KCk7CisgICAgICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnNldEFsbEJyb3dzZXJCcmVha3BvaW50
cyh0aGlzLl9zdGlja3lCcmVha3BvaW50cyk7CiAgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50
c1B1c2hlZFRvRnJvbnRlbmQgPSB0cnVlOwogICAgICAgICB9CiAgICAgfSwKQEAgLTMwNywzNCAr
MjY4LDcgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3RvdHlwZSA9IHsKICAg
ICAgICAgV2ViSW5zcGVjdG9yLnNldHRpbmdzLm5hdGl2ZUJyZWFrcG9pbnRzID0gYnJlYWtwb2lu
dHM7CiAKICAgICAgICAgdGhpcy5fc3RpY2t5QnJlYWtwb2ludHNbV2ViSW5zcGVjdG9yLnNldHRp
bmdzLnByb2plY3RJZF0gPSBicmVha3BvaW50czsKLSAgICAgICAgdGhpcy5fcHVzaEJyZWFrcG9p
bnRzVG9CYWNrZW5kKCk7Ci0gICAgfSwKLQotICAgIF9wdXNoQnJlYWtwb2ludHNUb0JhY2tlbmQ6
IGZ1bmN0aW9uKCkKLSAgICB7Ci0gICAgICAgIHZhciBhbGxKYXZhU2NyaXB0QnJlYWtwb2ludHMg
PSB7fTsKLSAgICAgICAgdmFyIGFsbEJyb3dzZXJCcmVha3BvaW50cyA9IHt9OwotICAgICAgICBm
b3IgKHZhciBwcm9qZWN0SWQgaW4gdGhpcy5fc3RpY2t5QnJlYWtwb2ludHMpIHsKLSAgICAgICAg
ICAgIHZhciBicmVha3BvaW50cyA9IHRoaXMuX3N0aWNreUJyZWFrcG9pbnRzW3Byb2plY3RJZF07
Ci0gICAgICAgICAgICB2YXIgamF2YVNjcmlwdEJyZWFrcG9pbnRzID0gW107Ci0gICAgICAgICAg
ICB2YXIgYnJvd3NlckJyZWFrcG9pbnRzID0gW107Ci0gICAgICAgICAgICBmb3IgKHZhciBpID0g
MDsgaSA8IGJyZWFrcG9pbnRzLmxlbmd0aDsgKytpKSB7Ci0gICAgICAgICAgICAgICAgaWYgKGJy
ZWFrcG9pbnRzW2ldLnR5cGUgPT0gV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLkJyZWFr
cG9pbnRUeXBlcy5KUykgewotICAgICAgICAgICAgICAgICAgICB2YXIgZGF0YSA9IHt9OwotICAg
ICAgICAgICAgICAgICAgICBkYXRhLmVuYWJsZWQgPSBicmVha3BvaW50c1tpXS5lbmFibGVkOwot
ICAgICAgICAgICAgICAgICAgICBmb3IgKHZhciBwIGluIGJyZWFrcG9pbnRzW2ldLmNvbmRpdGlv
bikKLSAgICAgICAgICAgICAgICAgICAgICAgIGRhdGFbcF0gPSBicmVha3BvaW50c1tpXS5jb25k
aXRpb25bcF07Ci0gICAgICAgICAgICAgICAgICAgIGphdmFTY3JpcHRCcmVha3BvaW50cy5wdXNo
KGRhdGEpOwotICAgICAgICAgICAgICAgIH0gZWxzZQotICAgICAgICAgICAgICAgICAgICBicm93
c2VyQnJlYWtwb2ludHMucHVzaChicmVha3BvaW50c1tpXSk7Ci0gICAgICAgICAgICB9Ci0gICAg
ICAgICAgICBpZiAoamF2YVNjcmlwdEJyZWFrcG9pbnRzLmxlbmd0aCkKLSAgICAgICAgICAgICAg
ICBhbGxKYXZhU2NyaXB0QnJlYWtwb2ludHNbcHJvamVjdElkXSA9IGphdmFTY3JpcHRCcmVha3Bv
aW50czsKLSAgICAgICAgICAgIGlmIChicm93c2VyQnJlYWtwb2ludHMubGVuZ3RoKQotICAgICAg
ICAgICAgICAgIGFsbEJyb3dzZXJCcmVha3BvaW50c1twcm9qZWN0SWRdID0gYnJvd3NlckJyZWFr
cG9pbnRzOwotICAgICAgICB9Ci0gICAgICAgIEluc3BlY3RvckJhY2tlbmQuc2V0QWxsSmF2YVNj
cmlwdEJyZWFrcG9pbnRzKGFsbEphdmFTY3JpcHRCcmVha3BvaW50cyk7Ci0gICAgICAgIEluc3Bl
Y3RvckJhY2tlbmQuc2V0QWxsQnJvd3NlckJyZWFrcG9pbnRzKGFsbEJyb3dzZXJCcmVha3BvaW50
cyk7CisgICAgICAgIEluc3BlY3RvckJhY2tlbmQuc2V0QWxsQnJvd3NlckJyZWFrcG9pbnRzKHRo
aXMuX3N0aWNreUJyZWFrcG9pbnRzKTsKICAgICB9LAogCiAgICAgX3ZhbGlkYXRlQnJlYWtwb2lu
dHM6IGZ1bmN0aW9uKHBlcnNpc3RlbnRCcmVha3BvaW50cykKQEAgLTM1NSwxNSArMjg5LDEyIEBA
IFdlYkluc3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5wcm90b3R5cGUgPSB7CiAgICAgICAgICAg
ICAgICAgaWYgKHR5cGVvZiBjb25kaXRpb24uZXZlbnROYW1lICE9PSAic3RyaW5nIikKICAgICAg
ICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgaWQgKz0gY29uZGl0aW9u
LmV2ZW50TmFtZTsKLSAgICAgICAgICAgIH0gZWxzZSBpZiAoYnJlYWtwb2ludC50eXBlID09PSBX
ZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJlYWtwb2ludFR5cGVzLkpTKSB7Ci0gICAg
ICAgICAgICAgICAgaWYgKHR5cGVvZiBjb25kaXRpb24udXJsICE9PSAic3RyaW5nIiB8fCB0eXBl
b2YgY29uZGl0aW9uLmxpbmVOdW1iZXIgIT09ICJudW1iZXIiIHx8IHR5cGVvZiBjb25kaXRpb24u
Y29uZGl0aW9uICE9PSAic3RyaW5nIikKLSAgICAgICAgICAgICAgICAgICAgY29udGludWU7Ci0g
ICAgICAgICAgICAgICAgaWQgKz0gY29uZGl0aW9uLnVybCArICI6IiArIGNvbmRpdGlvbi5saW5l
TnVtYmVyOwogICAgICAgICAgICAgfSBlbHNlIGlmIChicmVha3BvaW50LnR5cGUgPT09IFdlYklu
c3BlY3Rvci5CcmVha3BvaW50TWFuYWdlci5CcmVha3BvaW50VHlwZXMuWEhSKSB7CiAgICAgICAg
ICAgICAgICAgaWYgKHR5cGVvZiBjb25kaXRpb24udXJsICE9PSAic3RyaW5nIikKICAgICAgICAg
ICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgICAgICAgaWQgKz0gY29uZGl0aW9uLnVy
bDsKLSAgICAgICAgICAgIH0KKyAgICAgICAgICAgIH0gZWxzZQorICAgICAgICAgICAgICAgIGNv
bnRpbnVlOwogICAgICAgICAgICAgaWYgKGlkIGluIGJyZWFrcG9pbnRzU2V0KQogICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOwogICAgICAgICAgICAgYnJlYWtwb2ludHNTZXRbaWRdID0gdHJ1ZTsK
QEAgLTM3NywxMSArMzA4LDYgQEAgV2ViSW5zcGVjdG9yLkJyZWFrcG9pbnRNYW5hZ2VyLnByb3Rv
dHlwZSA9IHsKICAgICAgICAgcmV0dXJuICJkb206IiArIG5vZGVJZCArICI6IiArIHR5cGU7CiAg
ICAgfSwKIAotICAgIF9jcmVhdGVKYXZhU2NyaXB0QnJlYWtwb2ludElkOiBmdW5jdGlvbih1cmws
IGxpbmVOdW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4gImpzOiIgKyB1cmwgKyAiOiIgKyBs
aW5lTnVtYmVyOwotICAgIH0sCi0KICAgICBfY3JlYXRlRXZlbnRMaXN0ZW5lckJyZWFrcG9pbnRJ
ZDogZnVuY3Rpb24oZXZlbnROYW1lKQogICAgIHsKICAgICAgICAgcmV0dXJuICJldmVudExpc3Ru
ZXI6IiArIGV2ZW50TmFtZTsKQEAgLTQyMCwyOSArMzQ2LDYgQEAgV2ViSW5zcGVjdG9yLkRPTUJy
ZWFrcG9pbnQucHJvdG90eXBlID0gewogICAgIH0KIH0KIAotV2ViSW5zcGVjdG9yLkphdmFTY3Jp
cHRCcmVha3BvaW50ID0gZnVuY3Rpb24odXJsLCBsaW5lTnVtYmVyLCBjb25kaXRpb24pCi17Ci0g
ICAgdGhpcy5fdXJsID0gdXJsOwotICAgIHRoaXMuX2xpbmVOdW1iZXIgPSBsaW5lTnVtYmVyOwot
ICAgIHRoaXMuX2NvbmRpdGlvbiA9IGNvbmRpdGlvbjsKLX0KLQotV2ViSW5zcGVjdG9yLkphdmFT
Y3JpcHRCcmVha3BvaW50LnByb3RvdHlwZSA9IHsKLSAgICBfZW5hYmxlOiBmdW5jdGlvbigpCi0g
ICAgewotICAgIH0sCi0KLSAgICBfZGlzYWJsZTogZnVuY3Rpb24oKQotICAgIHsKLSAgICB9LAot
Ci0gICAgX3NlcmlhbGl6ZVRvSlNPTjogZnVuY3Rpb24oKQotICAgIHsKLSAgICAgICAgdmFyIHR5
cGUgPSBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuQnJlYWtwb2ludFR5cGVzLkpTOwot
ICAgICAgICByZXR1cm4geyB0eXBlOiB0eXBlLCBjb25kaXRpb246IHsgdXJsOiB0aGlzLl91cmws
IGxpbmVOdW1iZXI6IHRoaXMuX2xpbmVOdW1iZXIsIGNvbHVtbk51bWJlcjogMSwgY29uZGl0aW9u
OiB0aGlzLl9jb25kaXRpb24gfSB9OwotICAgIH0KLX0KLQogV2ViSW5zcGVjdG9yLkV2ZW50TGlz
dGVuZXJCcmVha3BvaW50ID0gZnVuY3Rpb24oZXZlbnROYW1lKQogewogICAgIHRoaXMuX2V2ZW50
TmFtZSA9IGV2ZW50TmFtZTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvQnJlYWtwb2ludHNTaWRlYmFyUGFuZS5qcwppbmRleCBiMjM3Y2EyLi5k
OGU1M2RkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0Jy
ZWFrcG9pbnRzU2lkZWJhclBhbmUuanMKKysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zy
b250LWVuZC9CcmVha3BvaW50c1NpZGViYXJQYW5lLmpzCkBAIC00MCw2ICs0MCw4IEBAIFdlYklu
c3BlY3Rvci5KYXZhU2NyaXB0QnJlYWtwb2ludHNTaWRlYmFyUGFuZSA9IGZ1bmN0aW9uKHRpdGxl
KQogCiAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJ
bnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMuQnJlYWtwb2ludEFkZGVkLCB0aGlzLl9icmVh
a3BvaW50QWRkZWQsIHRoaXMpOwogICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmFkZEV2
ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkJyZWFrcG9pbnRS
ZW1vdmVkLCB0aGlzLl9icmVha3BvaW50UmVtb3ZlZCwgdGhpcyk7CisgICAgV2ViSW5zcGVjdG9y
LmRlYnVnZ2VyTW9kZWwuYWRkRXZlbnRMaXN0ZW5lcihXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2Rl
bC5FdmVudHMuQnJlYWtwb2ludFJlc29sdmVkLCB0aGlzLl9icmVha3BvaW50UmVzb2x2ZWQsIHRo
aXMpOworICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2Vi
SW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRzLlBhcnNlZFNjcmlwdFNvdXJjZSwgdGhpcy5f
cGFyc2VkU2NyaXB0U291cmNlLCB0aGlzKTsKICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2Rl
bC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5EZWJ1
Z2dlclBhdXNlZCwgdGhpcy5fZGVidWdnZXJQYXVzZWQsIHRoaXMpOwogICAgIFdlYkluc3BlY3Rv
ci5kZWJ1Z2dlck1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9k
ZWwuRXZlbnRzLkRlYnVnZ2VyUmVzdW1lZCwgdGhpcy5fZGVidWdnZXJSZXN1bWVkLCB0aGlzKTsK
ICAgICBXZWJJbnNwZWN0b3IuYnJlYWtwb2ludE1hbmFnZXIuYWRkRXZlbnRMaXN0ZW5lcihXZWJJ
bnNwZWN0b3IuQnJlYWtwb2ludE1hbmFnZXIuRXZlbnRzLlByb2plY3RDaGFuZ2VkLCB0aGlzLl9w
cm9qZWN0Q2hhbmdlZCwgdGhpcyk7CkBAIC01MCw3ICs1Miw5IEBAIFdlYkluc3BlY3Rvci5KYXZh
U2NyaXB0QnJlYWtwb2ludHNTaWRlYmFyUGFuZS5wcm90b3R5cGUgPSB7CiAgICAgewogICAgICAg
ICB2YXIgYnJlYWtwb2ludCA9IGV2ZW50LmRhdGE7CiAgICAgICAgIHZhciBicmVha3BvaW50SWQg
PSBicmVha3BvaW50LmlkOwotICAgICAgICB2YXIgZGF0YSA9IGJyZWFrcG9pbnQuZGF0YTsKKwor
ICAgICAgICBpZiAoYnJlYWtwb2ludC51cmwgJiYgIVdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVs
LnNjcmlwdHNGb3JVUkwoYnJlYWtwb2ludC51cmwpLmxlbmd0aCkKKyAgICAgICAgICAgIHJldHVy
bjsKIAogICAgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpIik7
CiAKQEAgLTY0LDcgKzY4LDcgQEAgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRCcmVha3BvaW50c1Np
ZGViYXJQYW5lLnByb3RvdHlwZSA9IHsKICAgICAgICAgdmFyIGxhYmVsID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgic3BhbiIpOwogICAgICAgICBlbGVtZW50LmFwcGVuZENoaWxkKGxhYmVsKTsK
IAotICAgICAgICBlbGVtZW50Ll9kYXRhID0gZGF0YTsKKyAgICAgICAgZWxlbWVudC5fZGF0YSA9
IGJyZWFrcG9pbnQ7CiAgICAgICAgIHZhciBjdXJyZW50RWxlbWVudCA9IHRoaXMubGlzdEVsZW1l
bnQuZmlyc3RDaGlsZDsKICAgICAgICAgd2hpbGUgKGN1cnJlbnRFbGVtZW50KSB7CiAgICAgICAg
ICAgICBpZiAoY3VycmVudEVsZW1lbnQuX2RhdGEgJiYgdGhpcy5fY29tcGFyZUJyZWFrcG9pbnRz
KGN1cnJlbnRFbGVtZW50Ll9kYXRhLCBlbGVtZW50Ll9kYXRhKSA+IDApCkBAIC03NSwxMCArNzks
OSBAQCBXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdEJyZWFrcG9pbnRzU2lkZWJhclBhbmUucHJvdG90
eXBlID0gewogCiAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRMaXN0ZW5lcigiY29udGV4dG1lbnUi
LCB0aGlzLl9jb250ZXh0TWVudUV2ZW50RmlyZWQuYmluZCh0aGlzLCBicmVha3BvaW50SWQpLCB0
cnVlKTsKIAotICAgICAgICB0aGlzLl9zZXR1cEJyZWFrcG9pbnRFbGVtZW50KGRhdGEsIGVsZW1l
bnQpOworICAgICAgICB0aGlzLl9zZXR1cEJyZWFrcG9pbnRFbGVtZW50KGJyZWFrcG9pbnQsIGVs
ZW1lbnQpOwogCiAgICAgICAgIHZhciBicmVha3BvaW50SXRlbSA9IHt9OwotICAgICAgICBicmVh
a3BvaW50SXRlbS5kYXRhID0gZGF0YTsKICAgICAgICAgYnJlYWtwb2ludEl0ZW0uZWxlbWVudCA9
IGVsZW1lbnQ7CiAgICAgICAgIGJyZWFrcG9pbnRJdGVtLmNoZWNrYm94ID0gY2hlY2tib3g7CiAg
ICAgICAgIHRoaXMuX2l0ZW1zW2JyZWFrcG9pbnRJZF0gPSBicmVha3BvaW50SXRlbTsKQEAgLTk3
LDYgKzEwMCwyMyBAQCBXZWJJbnNwZWN0b3IuSmF2YVNjcmlwdEJyZWFrcG9pbnRzU2lkZWJhclBh
bmUucHJvdG90eXBlID0gewogICAgICAgICB9CiAgICAgfSwKIAorICAgIF9icmVha3BvaW50UmVz
b2x2ZWQ6IGZ1bmN0aW9uKGV2ZW50KQorICAgIHsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBl
dmVudC5kYXRhOworICAgICAgICB0aGlzLl9icmVha3BvaW50UmVtb3ZlZCh7IGRhdGE6IGJyZWFr
cG9pbnQuaWQgfSk7CisgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRBZGRlZCh7IGRhdGE6IGJyZWFr
cG9pbnQgfSk7CisgICAgfSwKKworICAgIF9wYXJzZWRTY3JpcHRTb3VyY2U6IGZ1bmN0aW9uKGV2
ZW50KQorICAgIHsKKyAgICAgICAgdmFyIHVybCA9IGV2ZW50LmRhdGEuc291cmNlVVJMOworICAg
ICAgICB2YXIgYnJlYWtwb2ludHMgPSBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5icmVha3Bv
aW50czsKKyAgICAgICAgZm9yICh2YXIgaWQgaW4gYnJlYWtwb2ludHMpIHsKKyAgICAgICAgICAg
IGlmICghKGlkIGluIHRoaXMuX2l0ZW1zKSkKKyAgICAgICAgICAgICAgICB0aGlzLl9icmVha3Bv
aW50QWRkZWQoeyBkYXRhOiBicmVha3BvaW50c1tpZF0gfSk7CisgICAgICAgIH0KKyAgICB9LAor
CiAgICAgX2JyZWFrcG9pbnRFbmFibGVDaGFuZ2VkOiBmdW5jdGlvbihlbmFibGVkLCBldmVudCkK
ICAgICB7CiAgICAgICAgIHZhciBicmVha3BvaW50SWQgPSBldmVudC5kYXRhOwpAQCAtMTA3LDcg
KzEyNyw4IEBAIFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0QnJlYWtwb2ludHNTaWRlYmFyUGFuZS5w
cm90b3R5cGUgPSB7CiAKICAgICBfYnJlYWtwb2ludEl0ZW1DaGVja2JveENsaWNrZWQ6IGZ1bmN0
aW9uKGJyZWFrcG9pbnRJZCwgZXZlbnQpCiAgICAgewotICAgICAgICB0aGlzLl9zZXRCcmVha3Bv
aW50RW5hYmxlZChicmVha3BvaW50SWQsIGV2ZW50LnRhcmdldC5jaGVja2VkKTsKKyAgICAgICAg
dmFyIGJyZWFrcG9pbnQgPSBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5icmVha3BvaW50Rm9y
SWQoYnJlYWtwb2ludElkKTsKKyAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwudXBk
YXRlQnJlYWtwb2ludChicmVha3BvaW50SWQsIGJyZWFrcG9pbnQuY29uZGl0aW9uLCBldmVudC50
YXJnZXQuY2hlY2tlZCk7CiAKICAgICAgICAgLy8gQnJlYWtwb2ludCBlbGVtZW50IG1heSBoYXZl
IGl0J3Mgb3duIGNsaWNrIGhhbmRsZXIuCiAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdhdGlvbigp
OwpAQCAtMTg2LDIzICsyMDcsMzIgQEAgV2ViSW5zcGVjdG9yLkphdmFTY3JpcHRCcmVha3BvaW50
c1NpZGViYXJQYW5lLnByb3RvdHlwZSA9IHsKIAogICAgIF9zZXR1cEJyZWFrcG9pbnRFbGVtZW50
OiBmdW5jdGlvbihkYXRhLCBlbGVtZW50KQogICAgIHsKKyAgICAgICAgdmFyIHNvdXJjZUlEOwor
ICAgICAgICB2YXIgbGluZU51bWJlciA9IGRhdGEubGluZU51bWJlcjsKKyAgICAgICAgaWYgKGRh
dGEubG9jYXRpb25zLmxlbmd0aCkgeworICAgICAgICAgICAgc291cmNlSUQgPSBkYXRhLmxvY2F0
aW9uc1swXS5zb3VyY2VJRDsKKyAgICAgICAgICAgIGxpbmVOdW1iZXIgPSBkYXRhLmxvY2F0aW9u
c1swXS5saW5lTnVtYmVyOworICAgICAgICB9CisKICAgICAgICAgdmFyIGRpc3BsYXlOYW1lID0g
ZGF0YS51cmwgPyBXZWJJbnNwZWN0b3IuZGlzcGxheU5hbWVGb3JVUkwoZGF0YS51cmwpIDogV2Vi
SW5zcGVjdG9yLlVJU3RyaW5nKCIocHJvZ3JhbSkiKTsKLSAgICAgICAgdmFyIGxhYmVsRWxlbWVu
dCA9IGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGRpc3BsYXlOYW1lICsgIjoiICsgZGF0YS5saW5l
TnVtYmVyKTsKKyAgICAgICAgdmFyIGxhYmVsRWxlbWVudCA9IGRvY3VtZW50LmNyZWF0ZVRleHRO
b2RlKGRpc3BsYXlOYW1lICsgIjoiICsgKGxpbmVOdW1iZXIgKyAxKSk7CiAgICAgICAgIGVsZW1l
bnQuYXBwZW5kQ2hpbGQobGFiZWxFbGVtZW50KTsKIAogICAgICAgICB2YXIgc291cmNlVGV4dEVs
ZW1lbnQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKICAgICAgICAgc291cmNlVGV4
dEVsZW1lbnQuY2xhc3NOYW1lID0gInNvdXJjZS10ZXh0IG1vbm9zcGFjZSI7CiAgICAgICAgIGVs
ZW1lbnQuYXBwZW5kQ2hpbGQoc291cmNlVGV4dEVsZW1lbnQpOwogCi0gICAgICAgIGZ1bmN0aW9u
IGRpZEdldFNvdXJjZUxpbmUodGV4dCkKLSAgICAgICAgewotICAgICAgICAgICAgc291cmNlVGV4
dEVsZW1lbnQudGV4dENvbnRlbnQgPSB0ZXh0OworICAgICAgICBpZiAoc291cmNlSUQpIHsKKyAg
ICAgICAgICAgIGZ1bmN0aW9uIGRpZEdldFNvdXJjZUxpbmUodGV4dCkKKyAgICAgICAgICAgIHsK
KyAgICAgICAgICAgICAgICBzb3VyY2VUZXh0RWxlbWVudC50ZXh0Q29udGVudCA9IHRleHQ7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICB2YXIgc2NyaXB0ID0gV2ViSW5zcGVjdG9yLmRlYnVn
Z2VyTW9kZWwuc2NyaXB0Rm9yU291cmNlSUQoc291cmNlSUQpOworICAgICAgICAgICAgc2NyaXB0
LnNvdXJjZUxpbmUobGluZU51bWJlciwgZGlkR2V0U291cmNlTGluZS5iaW5kKHRoaXMpKTsKICAg
ICAgICAgfQotICAgICAgICB2YXIgc2NyaXB0ID0gV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwu
c2NyaXB0Rm9yU291cmNlSUQoZGF0YS5zb3VyY2VJRCk7Ci0gICAgICAgIHNjcmlwdC5zb3VyY2VM
aW5lKGRhdGEubGluZU51bWJlciwgZGlkR2V0U291cmNlTGluZS5iaW5kKHRoaXMpKTsKIAogICAg
ICAgICBlbGVtZW50LmFkZFN0eWxlQ2xhc3MoImN1cnNvci1wb2ludGVyIik7Ci0gICAgICAgIHZh
ciBjbGlja0hhbmRsZXIgPSBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMuc2hvd1NvdXJjZUxp
bmUuYmluZChXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMsIGRhdGEudXJsLCBkYXRhLmxpbmVO
dW1iZXIpOworICAgICAgICB2YXIgY2xpY2tIYW5kbGVyID0gV2ViSW5zcGVjdG9yLnBhbmVscy5z
Y3JpcHRzLnNob3dTb3VyY2VMaW5lLmJpbmQoV2ViSW5zcGVjdG9yLnBhbmVscy5zY3JpcHRzLCBk
YXRhLnVybCwgZGF0YS5saW5lTnVtYmVyICsgMSk7CiAgICAgICAgIGVsZW1lbnQuYWRkRXZlbnRM
aXN0ZW5lcigiY2xpY2siLCBjbGlja0hhbmRsZXIsIGZhbHNlKTsKICAgICB9LAogCkBAIC0yMTQs
MTMgKzI0NCw2IEBAIFdlYkluc3BlY3Rvci5KYXZhU2NyaXB0QnJlYWtwb2ludHNTaWRlYmFyUGFu
ZS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICByZXR1cm4gYnJlYWtwb2ludC5pZDsKICAgIH0s
CiAKLSAgICBfc2V0QnJlYWtwb2ludEVuYWJsZWQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnRJZCwgZW5h
YmxlZCkKLSAgICB7Ci0gICAgICAgIHZhciBicmVha3BvaW50ID0gV2ViSW5zcGVjdG9yLmRlYnVn
Z2VyTW9kZWwuYnJlYWtwb2ludEZvcklkKGJyZWFrcG9pbnRJZCk7Ci0gICAgICAgIFdlYkluc3Bl
Y3Rvci5kZWJ1Z2dlck1vZGVsLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludElkKTsKLSAgICAg
ICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuc2V0QnJlYWtwb2ludChicmVha3BvaW50LnNv
dXJjZUlELCBicmVha3BvaW50LmxpbmUsIGVuYWJsZWQsIGJyZWFrcG9pbnQuY29uZGl0aW9uKTsK
LSAgICB9LAotCiAgICAgX3JlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9uKGJyZWFrcG9pbnRJZCkK
ICAgICB7CiAgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLnJlbW92ZUJyZWFrcG9p
bnQoYnJlYWtwb2ludElkKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9m
cm9udC1lbmQvRGVidWdnZXJNb2RlbC5qcyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9u
dC1lbmQvRGVidWdnZXJNb2RlbC5qcwppbmRleCAzMmQyOGU3Li4wYjM1MDA0IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL0RlYnVnZ2VyTW9kZWwuanMKKysr
IGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9EZWJ1Z2dlck1vZGVsLmpzCkBA
IC0zMyw3ICszMyw2IEBAIFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsID0gZnVuY3Rpb24oKQog
ICAgIHRoaXMuX3BhdXNlZCA9IGZhbHNlOwogICAgIHRoaXMuX2NhbGxGcmFtZXMgPSBbXTsKICAg
ICB0aGlzLl9icmVha3BvaW50cyA9IHt9OwotICAgIHRoaXMuX3NvdXJjZUlEQW5kTGluZVRvQnJl
YWtwb2ludElkID0ge307CiAgICAgdGhpcy5fc2NyaXB0cyA9IHt9OwogCiAgICAgSW5zcGVjdG9y
QmFja2VuZC5yZWdpc3RlckRvbWFpbkRpc3BhdGNoZXIoIkRlYnVnZ2VyIiwgbmV3IFdlYkluc3Bl
Y3Rvci5EZWJ1Z2dlckRpc3BhdGNoZXIodGhpcykpOwpAQCAtNDYsNzAgKzQ1LDExMyBAQCBXZWJJ
bnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMgPSB7CiAgICAgRmFpbGVkVG9QYXJzZVNjcmlw
dFNvdXJjZTogImZhaWxlZC10by1wYXJzZS1zY3JpcHQtc291cmNlIiwKICAgICBTY3JpcHRTb3Vy
Y2VDaGFuZ2VkOiAic2NyaXB0LXNvdXJjZS1jaGFuZ2VkIiwKICAgICBCcmVha3BvaW50QWRkZWQ6
ICJicmVha3BvaW50LWFkZGVkIiwKLSAgICBCcmVha3BvaW50UmVtb3ZlZDogImJyZWFrcG9pbnQt
cmVtb3ZlZCIKKyAgICBCcmVha3BvaW50UmVtb3ZlZDogImJyZWFrcG9pbnQtcmVtb3ZlZCIsCisg
ICAgQnJlYWtwb2ludFJlc29sdmVkOiAiYnJlYWtwb2ludC1yZXNvbHZlZCIKIH0KIAogV2ViSW5z
cGVjdG9yLkRlYnVnZ2VyTW9kZWwucHJvdG90eXBlID0geworICAgIGVuYWJsZURlYnVnZ2VyOiBm
dW5jdGlvbigpCisgICAgeworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLmVuYWJsZURlYnVnZ2Vy
KCk7CisgICAgICAgIGlmICh0aGlzLl9icmVha3BvaW50c1B1c2hlZFRvQmFja2VuZCkKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnRzID0gV2ViSW5zcGVjdG9yLnNl
dHRpbmdzLmJyZWFrcG9pbnRzOworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJyZWFrcG9p
bnRzLmxlbmd0aDsgKytpKSB7CisgICAgICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGJyZWFrcG9p
bnRzW2ldOworICAgICAgICAgICAgdGhpcy5zZXRCcmVha3BvaW50KGJyZWFrcG9pbnQudXJsLCBi
cmVha3BvaW50LmxpbmVOdW1iZXIsIGJyZWFrcG9pbnQuY29sdW1uTnVtYmVyLCBicmVha3BvaW50
LmNvbmRpdGlvbiwgYnJlYWtwb2ludC5lbmFibGVkKTsKKyAgICAgICAgfQorICAgICAgICB0aGlz
Ll9icmVha3BvaW50c1B1c2hlZFRvQmFja2VuZCA9IHRydWU7CisgICAgfSwKKworICAgIGRpc2Fi
bGVEZWJ1Z2dlcjogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5k
aXNhYmxlRGVidWdnZXIoKTsKKyAgICB9LAorCiAgICAgY29udGludWVUb0xpbmU6IGZ1bmN0aW9u
KHNvdXJjZUlELCBsaW5lTnVtYmVyKQogICAgIHsKLSAgICAgICAgZnVuY3Rpb24gZGlkU2V0QnJl
YWtwb2ludChicmVha3BvaW50SWQsIGFjdHVhbExpbmVOdW1iZXIpCisgICAgICAgIEluc3BlY3Rv
ckJhY2tlbmQuY29udGludWVUb0xvY2F0aW9uKHNvdXJjZUlELCBsaW5lTnVtYmVyLCAwKTsKKyAg
ICB9LAorCisgICAgc2V0QnJlYWtwb2ludDogZnVuY3Rpb24odXJsLCBsaW5lTnVtYmVyLCBjb2x1
bW5OdW1iZXIsIGNvbmRpdGlvbiwgZW5hYmxlZCkKKyAgICB7CisgICAgICAgIGZ1bmN0aW9uIGRp
ZFNldEJyZWFrcG9pbnQoYnJlYWtwb2ludHNQdXNoZWRUb0JhY2tlbmQsIGJyZWFrcG9pbnRJZCwg
bG9jYXRpb25zKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIWJyZWFrcG9pbnRJZCkKICAg
ICAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBpZiAodGhpcy5maW5kQnJlYWtwb2lu
dChzb3VyY2VJRCwgYWN0dWFsTGluZU51bWJlcikpIHsKLSAgICAgICAgICAgICAgICBJbnNwZWN0
b3JCYWNrZW5kLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludElkKTsKLSAgICAgICAgICAgICAg
ICByZXR1cm47Ci0gICAgICAgICAgICB9Ci0gICAgICAgICAgICBpZiAoIl9jb250aW51ZVRvTGlu
ZUJyZWFrcG9pbnRJZCIgaW4gdGhpcykKLSAgICAgICAgICAgICAgICBJbnNwZWN0b3JCYWNrZW5k
LnJlbW92ZUJyZWFrcG9pbnQodGhpcy5fY29udGludWVUb0xpbmVCcmVha3BvaW50SWQpOwotICAg
ICAgICAgICAgdGhpcy5fY29udGludWVUb0xpbmVCcmVha3BvaW50SWQgPSBicmVha3BvaW50SWQ7
CisgICAgICAgICAgICB2YXIgYnJlYWtwb2ludCA9IG5ldyBXZWJJbnNwZWN0b3IuQnJlYWtwb2lu
dChicmVha3BvaW50SWQsIHVybCwgIiIsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlciwgY29uZGl0
aW9uLCBlbmFibGVkKTsKKyAgICAgICAgICAgIGJyZWFrcG9pbnQubG9jYXRpb25zID0gbG9jYXRp
b25zOworICAgICAgICAgICAgdGhpcy5fYnJlYWtwb2ludHNbYnJlYWtwb2ludElkXSA9IGJyZWFr
cG9pbnQ7CisgICAgICAgICAgICBpZiAoYnJlYWtwb2ludHNQdXNoZWRUb0JhY2tlbmQpCisgICAg
ICAgICAgICAgICAgdGhpcy5fc2F2ZUJyZWFrcG9pbnRzKCk7CisgICAgICAgICAgICB0aGlzLmRp
c3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMu
QnJlYWtwb2ludEFkZGVkLCBicmVha3BvaW50KTsKICAgICAgICAgfQotICAgICAgICB2YXIgYnJl
YWtwb2ludCA9IHsgc291cmNlSUQ6IHNvdXJjZUlELCBsaW5lTnVtYmVyOiBsaW5lTnVtYmVyLCBj
b2x1bW5OdW1iZXI6IDEsIGNvbmRpdGlvbjogIiIsIGVuYWJsZWQ6IHRydWUgfTsKLSAgICAgICAg
SW5zcGVjdG9yQmFja2VuZC5zZXRCcmVha3BvaW50KGJyZWFrcG9pbnQsIGRpZFNldEJyZWFrcG9p
bnQuYmluZCh0aGlzKSk7Ci0gICAgICAgIGlmICh0aGlzLl9wYXVzZWQpCi0gICAgICAgICAgICBJ
bnNwZWN0b3JCYWNrZW5kLnJlc3VtZSgpOworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnNldEph
dmFTY3JpcHRCcmVha3BvaW50KHVybCwgbGluZU51bWJlciwgY29sdW1uTnVtYmVyLCBjb25kaXRp
b24sIGVuYWJsZWQsIGRpZFNldEJyZWFrcG9pbnQuYmluZCh0aGlzLCB0aGlzLl9icmVha3BvaW50
c1B1c2hlZFRvQmFja2VuZCkpOwogICAgIH0sCiAKLSAgICBzZXRCcmVha3BvaW50OiBmdW5jdGlv
bihzb3VyY2VJRCwgbGluZU51bWJlciwgZW5hYmxlZCwgY29uZGl0aW9uKQorICAgIHNldEJyZWFr
cG9pbnRCeVNvdXJjZUlkOiBmdW5jdGlvbihzb3VyY2VJRCwgbGluZU51bWJlciwgY29sdW1uTnVt
YmVyLCBjb25kaXRpb24sIGVuYWJsZWQpCiAgICAgewogICAgICAgICBmdW5jdGlvbiBkaWRTZXRC
cmVha3BvaW50KGJyZWFrcG9pbnRJZCwgYWN0dWFsTGluZU51bWJlciwgYWN0dWFsQ29sdW1uTnVt
YmVyKQogICAgICAgICB7CiAgICAgICAgICAgICBpZiAoIWJyZWFrcG9pbnRJZCkKICAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBicmVha3BvaW50Lm9yaWdpbmFsTGluZU51bWJl
ciA9IGJyZWFrcG9pbnQubGluZU51bWJlcjsKLSAgICAgICAgICAgIGJyZWFrcG9pbnQub3JpZ2lu
YWxDb2x1bW51bWJlciA9IGJyZWFrcG9pbnQuY29sdW1uTnVtYmVyOwotICAgICAgICAgICAgYnJl
YWtwb2ludC5saW5lTnVtYmVyID0gYWN0dWFsTGluZU51bWJlcjsKLSAgICAgICAgICAgIGJyZWFr
cG9pbnQuY29sdW1uTnVtYmVyID0gYWN0dWFsQ29sdW1uTnVtYmVyOwotICAgICAgICAgICAgdGhp
cy5fYnJlYWtwb2ludFNldE9uQmFja2VuZChicmVha3BvaW50SWQsIGJyZWFrcG9pbnQsIGZhbHNl
KTsKKyAgICAgICAgICAgIHZhciBicmVha3BvaW50ID0gbmV3IFdlYkluc3BlY3Rvci5CcmVha3Bv
aW50KGJyZWFrcG9pbnRJZCwgIiIsIHNvdXJjZUlELCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIs
IGNvbmRpdGlvbiwgZW5hYmxlZCk7CisgICAgICAgICAgICBicmVha3BvaW50LmFkZExvY2F0aW9u
KHNvdXJjZUlELCBhY3R1YWxMaW5lTnVtYmVyLCBhY3R1YWxDb2x1bW5OdW1iZXIpOworICAgICAg
ICAgICAgdGhpcy5fYnJlYWtwb2ludHNbYnJlYWtwb2ludElkXSA9IGJyZWFrcG9pbnQ7CisgICAg
ICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuRGVidWdn
ZXJNb2RlbC5FdmVudHMuQnJlYWtwb2ludEFkZGVkLCBicmVha3BvaW50KTsKICAgICAgICAgfQot
ICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHsgc291cmNlSUQ6IHNvdXJjZUlELCBsaW5lTnVtYmVy
OiBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXI6IDEsIGNvbmRpdGlvbjogY29uZGl0aW9uLCBlbmFi
bGVkOiBlbmFibGVkIH07Ci0gICAgICAgIEluc3BlY3RvckJhY2tlbmQuc2V0QnJlYWtwb2ludChi
cmVha3BvaW50LCBkaWRTZXRCcmVha3BvaW50LmJpbmQodGhpcykpOworICAgICAgICBJbnNwZWN0
b3JCYWNrZW5kLnNldEphdmFTY3JpcHRCcmVha3BvaW50QnlTb3VyY2VJZChzb3VyY2VJRCwgbGlu
ZU51bWJlciwgY29sdW1uTnVtYmVyLCBjb25kaXRpb24sIGVuYWJsZWQsIGRpZFNldEJyZWFrcG9p
bnQuYmluZCh0aGlzKSk7CiAgICAgfSwKIAogICAgIHJlbW92ZUJyZWFrcG9pbnQ6IGZ1bmN0aW9u
KGJyZWFrcG9pbnRJZCkKICAgICB7Ci0gICAgICAgIEluc3BlY3RvckJhY2tlbmQucmVtb3ZlQnJl
YWtwb2ludChicmVha3BvaW50SWQpOworICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlbW92ZUph
dmFTY3JpcHRCcmVha3BvaW50KGJyZWFrcG9pbnRJZCk7CiAgICAgICAgIHZhciBicmVha3BvaW50
ID0gdGhpcy5fYnJlYWtwb2ludHNbYnJlYWtwb2ludElkXTsKICAgICAgICAgZGVsZXRlIHRoaXMu
X2JyZWFrcG9pbnRzW2JyZWFrcG9pbnRJZF07Ci0gICAgICAgIGRlbGV0ZSB0aGlzLl9zb3VyY2VJ
REFuZExpbmVUb0JyZWFrcG9pbnRJZFt0aGlzLl9lbmNvZGVTb3VyY2VJREFuZExpbmUoYnJlYWtw
b2ludC5zb3VyY2VJRCwgYnJlYWtwb2ludC5saW5lKV07CisgICAgICAgIHRoaXMuX3NhdmVCcmVh
a3BvaW50cygpOwogICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNw
ZWN0b3IuRGVidWdnZXJNb2RlbC5FdmVudHMuQnJlYWtwb2ludFJlbW92ZWQsIGJyZWFrcG9pbnRJ
ZCk7Ci0gICAgICAgIGJyZWFrcG9pbnQuZGlzcGF0Y2hFdmVudFRvTGlzdGVuZXJzKCJyZW1vdmVk
Iik7CiAgICAgfSwKIAotICAgIF9icmVha3BvaW50U2V0T25CYWNrZW5kOiBmdW5jdGlvbihicmVh
a3BvaW50SWQsIGJyZWFrcG9pbnREYXRhLCByZXN0b3JlZCkKKyAgICB1cGRhdGVCcmVha3BvaW50
OiBmdW5jdGlvbihicmVha3BvaW50SWQsIGNvbmRpdGlvbiwgZW5hYmxlZCkKICAgICB7Ci0gICAg
ICAgIHZhciBzb3VyY2VJREFuZExpbmUgPSB0aGlzLl9lbmNvZGVTb3VyY2VJREFuZExpbmUoYnJl
YWtwb2ludERhdGEuc291cmNlSUQsIGJyZWFrcG9pbnREYXRhLmxpbmVOdW1iZXIpOwotICAgICAg
ICBpZiAoc291cmNlSURBbmRMaW5lIGluIHRoaXMuX3NvdXJjZUlEQW5kTGluZVRvQnJlYWtwb2lu
dElkKSB7Ci0gICAgICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlbW92ZUJyZWFrcG9pbnQoYnJl
YWtwb2ludElkKTsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9icmVha3BvaW50c1ti
cmVha3BvaW50SWRdOworICAgICAgICB0aGlzLnJlbW92ZUJyZWFrcG9pbnQoYnJlYWtwb2ludElk
KTsKKyAgICAgICAgaWYgKGJyZWFrcG9pbnQudXJsKQorICAgICAgICAgICAgdGhpcy5zZXRCcmVh
a3BvaW50KGJyZWFrcG9pbnQudXJsLCBicmVha3BvaW50LmxpbmVOdW1iZXIsIGJyZWFrcG9pbnQu
Y29sdW1uTnVtYmVyLCBjb25kaXRpb24sIGVuYWJsZWQpOworICAgICAgICBlbHNlCisgICAgICAg
ICAgICB0aGlzLnNldEJyZWFrcG9pbnRCeVNvdXJjZUlkKGJyZWFrcG9pbnQuc291cmNlSUQsIGJy
ZWFrcG9pbnQubGluZU51bWJlciwgYnJlYWtwb2ludC5jb2x1bW5OdW1iZXIsIGNvbmRpdGlvbiwg
ZW5hYmxlZCk7CisgICAgfSwKKworICAgIF9icmVha3BvaW50UmVzb2x2ZWQ6IGZ1bmN0aW9uKGJy
ZWFrcG9pbnRJZCwgc291cmNlSUQsIGxpbmVOdW1iZXIsIGNvbHVtbk51bWJlcikKKyAgICB7Cisg
ICAgICAgIHZhciBicmVha3BvaW50ID0gdGhpcy5fYnJlYWtwb2ludHNbYnJlYWtwb2ludElkXTsK
KyAgICAgICAgaWYgKCFicmVha3BvaW50KQogICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBi
cmVha3BvaW50LmFkZExvY2F0aW9uKHNvdXJjZUlELCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIp
OworICAgICAgICB0aGlzLmRpc3BhdGNoRXZlbnRUb0xpc3RlbmVycyhXZWJJbnNwZWN0b3IuRGVi
dWdnZXJNb2RlbC5FdmVudHMuQnJlYWtwb2ludFJlc29sdmVkLCBicmVha3BvaW50KTsKKyAgICB9
LAorCisgICAgX3NhdmVCcmVha3BvaW50czogZnVuY3Rpb24oKQorICAgIHsKKyAgICAgICAgdmFy
IHNlcmlhbGl6ZWRCcmVha3BvaW50cyA9IFtdOworICAgICAgICBmb3IgKHZhciBpZCBpbiB0aGlz
Ll9icmVha3BvaW50cykgeworICAgICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9icmVh
a3BvaW50c1tpZF07CisgICAgICAgICAgICBpZiAoIWJyZWFrcG9pbnQudXJsKQorICAgICAgICAg
ICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgdmFyIHNlcmlhbGl6ZWRCcmVha3BvaW50ID0g
e307CisgICAgICAgICAgICBzZXJpYWxpemVkQnJlYWtwb2ludC51cmwgPSBicmVha3BvaW50LnVy
bDsKKyAgICAgICAgICAgIHNlcmlhbGl6ZWRCcmVha3BvaW50LmxpbmVOdW1iZXIgPSBicmVha3Bv
aW50LmxpbmVOdW1iZXI7CisgICAgICAgICAgICBzZXJpYWxpemVkQnJlYWtwb2ludC5jb2x1bW5O
dW1iZXIgPSBicmVha3BvaW50LmNvbHVtbk51bWJlcjsKKyAgICAgICAgICAgIHNlcmlhbGl6ZWRC
cmVha3BvaW50LmNvbmRpdGlvbiA9IGJyZWFrcG9pbnQuY29uZGl0aW9uOworICAgICAgICAgICAg
c2VyaWFsaXplZEJyZWFrcG9pbnQuZW5hYmxlZCA9IGJyZWFrcG9pbnQuZW5hYmxlZDsKKyAgICAg
ICAgICAgIHNlcmlhbGl6ZWRCcmVha3BvaW50cy5wdXNoKHNlcmlhbGl6ZWRCcmVha3BvaW50KTsK
ICAgICAgICAgfQorICAgICAgICBXZWJJbnNwZWN0b3Iuc2V0dGluZ3MuYnJlYWtwb2ludHMgPSBz
ZXJpYWxpemVkQnJlYWtwb2ludHM7CisgICAgfSwKIAotICAgICAgICB2YXIgYnJlYWtwb2ludCA9
IG5ldyBXZWJJbnNwZWN0b3IuQnJlYWtwb2ludCh0aGlzLCBicmVha3BvaW50SWQsIGJyZWFrcG9p
bnREYXRhKTsKLSAgICAgICAgYnJlYWtwb2ludC5yZXN0b3JlZCA9IHJlc3RvcmVkOwotICAgICAg
ICBicmVha3BvaW50Lm9yaWdpbmFsTGluZU51bWJlciA9IGJyZWFrcG9pbnREYXRhLm9yaWdpbmFs
TGluZU51bWJlcjsKLSAgICAgICAgdGhpcy5fYnJlYWtwb2ludHNbYnJlYWtwb2ludElkXSA9IGJy
ZWFrcG9pbnQ7Ci0gICAgICAgIHRoaXMuX3NvdXJjZUlEQW5kTGluZVRvQnJlYWtwb2ludElkW3Nv
dXJjZUlEQW5kTGluZV0gPSBicmVha3BvaW50SWQ7Ci0gICAgICAgIHRoaXMuZGlzcGF0Y2hFdmVu
dFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5CcmVha3BvaW50
QWRkZWQsIGJyZWFrcG9pbnQpOworICAgIGdldCBicmVha3BvaW50cygpCisgICAgeworICAgICAg
ICByZXR1cm4gdGhpcy5fYnJlYWtwb2ludHM7CiAgICAgfSwKIAogICAgIGJyZWFrcG9pbnRGb3JJ
ZDogZnVuY3Rpb24oYnJlYWtwb2ludElkKQpAQCAtMTMwLDIzICsxNzIsMjYgQEAgV2ViSW5zcGVj
dG9yLkRlYnVnZ2VyTW9kZWwucHJvdG90eXBlID0gewogCiAgICAgZmluZEJyZWFrcG9pbnQ6IGZ1
bmN0aW9uKHNvdXJjZUlELCBsaW5lTnVtYmVyKQogICAgIHsKLSAgICAgICAgdmFyIHNvdXJjZUlE
QW5kTGluZSA9IHRoaXMuX2VuY29kZVNvdXJjZUlEQW5kTGluZShzb3VyY2VJRCwgbGluZU51bWJl
cik7Ci0gICAgICAgIHZhciBicmVha3BvaW50SWQgPSB0aGlzLl9zb3VyY2VJREFuZExpbmVUb0Jy
ZWFrcG9pbnRJZFtzb3VyY2VJREFuZExpbmVdOwotICAgICAgICByZXR1cm4gdGhpcy5fYnJlYWtw
b2ludHNbYnJlYWtwb2ludElkXTsKLSAgICB9LAotCi0gICAgX2VuY29kZVNvdXJjZUlEQW5kTGlu
ZTogZnVuY3Rpb24oc291cmNlSUQsIGxpbmVOdW1iZXIpCi0gICAgewotICAgICAgICByZXR1cm4g
c291cmNlSUQgKyAiOiIgKyBsaW5lTnVtYmVyOworICAgICAgICBmb3IgKHZhciBpZCBpbiB0aGlz
Ll9icmVha3BvaW50cykgeworICAgICAgICAgICAgdmFyIGxvY2F0aW9ucyA9IHRoaXMuX2JyZWFr
cG9pbnRzW2lkXS5sb2NhdGlvbnM7CisgICAgICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGxv
Y2F0aW9ucy5sZW5ndGg7ICsraSkgeworICAgICAgICAgICAgICAgIGlmIChsb2NhdGlvbnNbaV0u
c291cmNlSUQgPT09IHNvdXJjZUlEICYmIGxvY2F0aW9uc1tpXS5saW5lTnVtYmVyID09PSBsaW5l
TnVtYmVyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gdGhpcy5fYnJlYWtwb2ludHNbaWRd
OworICAgICAgICAgICAgfQorICAgICAgICB9CiAgICAgfSwKIAogICAgIHJlc2V0OiBmdW5jdGlv
bigpCiAgICAgewogICAgICAgICB0aGlzLl9wYXVzZWQgPSBmYWxzZTsKICAgICAgICAgdGhpcy5f
Y2FsbEZyYW1lcyA9IFtdOwotICAgICAgICB0aGlzLl9icmVha3BvaW50cyA9IHt9OwotICAgICAg
ICBkZWxldGUgdGhpcy5fb25lVGltZUJyZWFrcG9pbnQ7Ci0gICAgICAgIHRoaXMuX3NvdXJjZUlE
QW5kTGluZVRvQnJlYWtwb2ludElkID0ge307CisgICAgICAgIGZvciAodmFyIGlkIGluIHRoaXMu
X2JyZWFrcG9pbnRzKSB7CisgICAgICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX2JyZWFr
cG9pbnRzW2lkXTsKKyAgICAgICAgICAgIGlmICghYnJlYWtwb2ludC51cmwpCisgICAgICAgICAg
ICAgICAgdGhpcy5yZW1vdmVCcmVha3BvaW50KGlkKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAg
ICAgICAgICAgICBicmVha3BvaW50LmxvY2F0aW9ucyA9IFtdOworICAgICAgICB9CiAgICAgICAg
IHRoaXMuX3NjcmlwdHMgPSB7fTsKICAgICB9LAogCkBAIC0yMjksMTAgKzI3NCw2IEBAIFdlYklu
c3BlY3Rvci5EZWJ1Z2dlck1vZGVsLnByb3RvdHlwZSA9IHsKICAgICB7CiAgICAgICAgIHRoaXMu
X3BhdXNlZCA9IHRydWU7CiAgICAgICAgIHRoaXMuX2NhbGxGcmFtZXMgPSBkZXRhaWxzLmNhbGxG
cmFtZXM7Ci0gICAgICAgIGlmICgiX2NvbnRpbnVlVG9MaW5lQnJlYWtwb2ludElkIiBpbiB0aGlz
KSB7Ci0gICAgICAgICAgICBJbnNwZWN0b3JCYWNrZW5kLnJlbW92ZUJyZWFrcG9pbnQodGhpcy5f
Y29udGludWVUb0xpbmVCcmVha3BvaW50SWQpOwotICAgICAgICAgICAgZGVsZXRlIHRoaXMuX2Nv
bnRpbnVlVG9MaW5lQnJlYWtwb2ludElkOwotICAgICAgICB9CiAgICAgICAgIHRoaXMuZGlzcGF0
Y2hFdmVudFRvTGlzdGVuZXJzKFdlYkluc3BlY3Rvci5EZWJ1Z2dlck1vZGVsLkV2ZW50cy5EZWJ1
Z2dlclBhdXNlZCwgZGV0YWlscyk7CiAgICAgfSwKIApAQCAtMzAxLDkgKzM0Miw5IEBAIFdlYklu
c3BlY3Rvci5EZWJ1Z2dlckRpc3BhdGNoZXIucHJvdG90eXBlID0gewogICAgICAgICB0aGlzLl9k
ZWJ1Z2dlck1vZGVsLl9mYWlsZWRUb1BhcnNlU2NyaXB0U291cmNlKHNvdXJjZVVSTCwgc291cmNl
LCBzdGFydGluZ0xpbmUsIGVycm9yTGluZSwgZXJyb3JNZXNzYWdlKTsKICAgICB9LAogCi0gICAg
YnJlYWtwb2ludFJlc29sdmVkOiBmdW5jdGlvbihicmVha3BvaW50SWQsIGJyZWFrcG9pbnQpCisg
ICAgYnJlYWtwb2ludFJlc29sdmVkOiBmdW5jdGlvbihicmVha3BvaW50SWQsIHNvdXJjZUlELCBs
aW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpCiAgICAgewotICAgICAgICB0aGlzLl9kZWJ1Z2dlck1v
ZGVsLl9icmVha3BvaW50U2V0T25CYWNrZW5kKGJyZWFrcG9pbnRJZCwgYnJlYWtwb2ludCwgdHJ1
ZSk7CisgICAgICAgIHRoaXMuX2RlYnVnZ2VyTW9kZWwuX2JyZWFrcG9pbnRSZXNvbHZlZChicmVh
a3BvaW50SWQsIHNvdXJjZUlELCBsaW5lTnVtYmVyLCBjb2x1bW5OdW1iZXIpOwogICAgIH0sCiAK
ICAgICBkaWRDcmVhdGVXb3JrZXI6IGZ1bmN0aW9uKCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2NyaXB0LmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9TY3JpcHQuanMKaW5kZXggNmUzYjE4ZC4uOGQzZWFiZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHQuanMKKysrIGIvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHQuanMKQEAgLTc4LDcgKzc4LDcg
QEAgV2ViSW5zcGVjdG9yLlNjcmlwdC5wcm90b3R5cGUgPSB7CiAgICAgewogICAgICAgICBmdW5j
dGlvbiBleHRyYWN0U291cmNlTGluZSgpCiAgICAgICAgIHsKLSAgICAgICAgICAgIGxpbmVOdW1i
ZXIgLT0gdGhpcy5zdGFydGluZ0xpbmU7CisgICAgICAgICAgICBsaW5lTnVtYmVyIC09IHRoaXMu
bGluZU9mZnNldDsKICAgICAgICAgICAgIGNhbGxiYWNrKHRoaXMuX3NvdXJjZS5zdWJzdHJpbmco
dGhpcy5fbGluZUVuZGluZ3NbbGluZU51bWJlciAtIDFdLCB0aGlzLl9saW5lRW5kaW5nc1tsaW5l
TnVtYmVyXSkpOwogICAgICAgICB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3Bl
Y3Rvci9mcm9udC1lbmQvU2NyaXB0c1BhbmVsLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9y
L2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMKaW5kZXggZGRjOTA2YS4uNzVjNjg0MSAxMDA2NDQK
LS0tIGEvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMK
KysrIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TY3JpcHRzUGFuZWwuanMK
QEAgLTgwMywxMCArODAzLDEwIEBAIFdlYkluc3BlY3Rvci5TY3JpcHRzUGFuZWwucHJvdG90eXBl
ID0gewogCiAgICAgICAgIGlmICh0aGlzLl9kZWJ1Z2dlckVuYWJsZWQpIHsKICAgICAgICAgICAg
IFdlYkluc3BlY3Rvci5zZXR0aW5ncy5kZWJ1Z2dlckVuYWJsZWQgPSBmYWxzZTsKLSAgICAgICAg
ICAgIEluc3BlY3RvckJhY2tlbmQuZGlzYWJsZURlYnVnZ2VyKCk7CisgICAgICAgICAgICBXZWJJ
bnNwZWN0b3IuZGVidWdnZXJNb2RlbC5kaXNhYmxlRGVidWdnZXIoKTsKICAgICAgICAgfSBlbHNl
IHsKICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5zZXR0aW5ncy5kZWJ1Z2dlckVuYWJsZWQgPSAh
IW9wdGlvbmFsQWx3YXlzOwotICAgICAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5lbmFibGVEZWJ1
Z2dlcigpOworICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuZW5hYmxlRGVi
dWdnZXIoKTsKICAgICAgICAgfQogICAgIH0sCiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2luc3BlY3Rvci9mcm9udC1lbmQvU2V0dGluZ3MuanMgYi9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0
b3IvZnJvbnQtZW5kL1NldHRpbmdzLmpzCmluZGV4IDFjZWE1ZTEuLjgzZWJhZjAgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU2V0dGluZ3MuanMKKysrIGIv
U291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9TZXR0aW5ncy5qcwpAQCAtNzEsOCAr
NzEsOCBAQCBXZWJJbnNwZWN0b3IuU2V0dGluZ3MgPSBmdW5jdGlvbigpCiAgICAgdGhpcy5pbnN0
YWxsQXBwbGljYXRpb25TZXR0aW5nKCJzaG93SW5oZXJpdGVkQ29tcHV0ZWRTdHlsZVByb3BlcnRp
ZXMiLCBmYWxzZSk7CiAgICAgdGhpcy5pbnN0YWxsQXBwbGljYXRpb25TZXR0aW5nKCJzaG93VXNl
ckFnZW50U3R5bGVzIiwgdHJ1ZSk7CiAgICAgdGhpcy5pbnN0YWxsQXBwbGljYXRpb25TZXR0aW5n
KCJ3YXRjaEV4cHJlc3Npb25zIiwgW10pOworICAgIHRoaXMuaW5zdGFsbEFwcGxpY2F0aW9uU2V0
dGluZygiYnJlYWtwb2ludHMiLCBbXSk7CiAKLSAgICB0aGlzLmluc3RhbGxQcm9qZWN0U2V0dGlu
ZygiYnJlYWtwb2ludHMiLCB7fSk7CiAgICAgdGhpcy5pbnN0YWxsUHJvamVjdFNldHRpbmcoIm5h
dGl2ZUJyZWFrcG9pbnRzIiwgW10pOwogfQogCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9p
bnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVj
dG9yL2Zyb250LWVuZC9Tb3VyY2VGcmFtZS5qcwppbmRleCA4MjEwNzRhLi45NTJkOWQxIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9pbnNwZWN0b3IvZnJvbnQtZW5kL1NvdXJjZUZyYW1lLmpz
CisrKyBiL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rvci9mcm9udC1lbmQvU291cmNlRnJhbWUuanMK
QEAgLTIwOCw2ICsyMDgsOCBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0g
ewogICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmVuZFVwZGF0ZXMoKTsKIAogICAgICAgICBXZWJJ
bnNwZWN0b3IuZGVidWdnZXJNb2RlbC5hZGRFdmVudExpc3RlbmVyKFdlYkluc3BlY3Rvci5EZWJ1
Z2dlck1vZGVsLkV2ZW50cy5CcmVha3BvaW50QWRkZWQsIHRoaXMuX2JyZWFrcG9pbnRBZGRlZCwg
dGhpcyk7CisgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmFkZEV2ZW50TGlzdGVu
ZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZlbnRzLkJyZWFrcG9pbnRSZW1vdmVkLCB0
aGlzLl9icmVha3BvaW50UmVtb3ZlZCwgdGhpcyk7CisgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1
Z2dlck1vZGVsLmFkZEV2ZW50TGlzdGVuZXIoV2ViSW5zcGVjdG9yLkRlYnVnZ2VyTW9kZWwuRXZl
bnRzLkJyZWFrcG9pbnRSZXNvbHZlZCwgdGhpcy5fYnJlYWtwb2ludFJlc29sdmVkLCB0aGlzKTsK
IAogICAgICAgICBpZiAodGhpcy5fY2FuRWRpdFNjcmlwdHMpCiAgICAgICAgICAgICB0aGlzLl90
ZXh0Vmlld2VyLmVkaXRDYWxsYmFjayA9IHRoaXMuX2VkaXRMaW5lLmJpbmQodGhpcyk7CkBAIC0y
MjYsMTUgKzIyOCwyOSBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewog
ICAgICAgICBpZiAodGhpcy5fZXhlY3V0aW9uTGluZSkKICAgICAgICAgICAgIHRoaXMuc2V0RXhl
Y3V0aW9uTGluZSh0aGlzLl9leGVjdXRpb25MaW5lKTsKIAotICAgICAgICB2YXIgYnJlYWtwb2lu
dHMgPSB0aGlzLl9icmVha3BvaW50cygpOwotICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IGJy
ZWFrcG9pbnRzLmxlbmd0aDsgKytpKQotICAgICAgICAgICAgdGhpcy5fYWRkQnJlYWtwb2ludChi
cmVha3BvaW50c1tpXSk7CisgICAgICAgIHRoaXMuX2JyZWFrcG9pbnRJZFRvVGV4dFZpZXdlckxp
bmVOdW1iZXIgPSB7fTsKKyAgICAgICAgdGhpcy5fdGV4dFZpZXdlckxpbmVOdW1iZXJUb0JyZWFr
cG9pbnRJZCA9IHt9OworICAgICAgICB2YXIgYnJlYWtwb2ludHMgPSBXZWJJbnNwZWN0b3IuZGVi
dWdnZXJNb2RlbC5icmVha3BvaW50czsKKyAgICAgICAgZm9yICh2YXIgaWQgaW4gYnJlYWtwb2lu
dHMpCisgICAgICAgICAgICB0aGlzLl9icmVha3BvaW50QWRkZWQoeyBkYXRhOiBicmVha3BvaW50
c1tpZF0gfSk7CiAKICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5yZXNpemUoKTsKIAogICAgICAg
ICB0aGlzLl90ZXh0Vmlld2VyLmVuZFVwZGF0ZXMoKTsKICAgICB9LAogCisgICAgX3Nob3VsZERp
c3BsYXlCcmVha3BvaW50OiBmdW5jdGlvbihicmVha3BvaW50KQorICAgIHsKKyAgICAgICAgaWYg
KHRoaXMuX3VybCkKKyAgICAgICAgICAgIHJldHVybiB0aGlzLl91cmwgPT09IGJyZWFrcG9pbnQu
dXJsOworICAgICAgICB2YXIgc2NyaXB0cyA9IHRoaXMuX2NvbnRlbnRQcm92aWRlci5zY3JpcHRz
KCk7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBpIDwgc2NyaXB0cy5sZW5ndGg7ICsraSkgewor
ICAgICAgICAgICAgaWYgKGJyZWFrcG9pbnQuc291cmNlSUQgPT09IHNjcmlwdHNbaV0uc291cmNl
SUQpCisgICAgICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgICAgIH0KKyAgICAgICAgcmV0
dXJuIGZhbHNlOworICAgIH0sCisKICAgICBwZXJmb3JtU2VhcmNoOiBmdW5jdGlvbihxdWVyeSwg
Y2FsbGJhY2spCiAgICAgewogICAgICAgICAvLyBDYWxsIHNlYXJjaENhbmNlbGVkIHNpbmNlIGl0
IHdpbGwgcmVzZXQgZXZlcnl0aGluZyB3ZSBuZWVkIGJlZm9yZSBkb2luZyBhIG5ldyBzZWFyY2gu
CkBAIC00NTgsNTQgKzQ3NCw1NSBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBl
ID0gewogICAgIHsKICAgICAgICAgdmFyIGJyZWFrcG9pbnQgPSBldmVudC5kYXRhOwogCi0gICAg
ICAgIGlmIChicmVha3BvaW50LnNvdXJjZUlEIGluIHRoaXMuX3NvdXJjZUlEU2V0KCkpCi0gICAg
ICAgICAgICB0aGlzLl9hZGRCcmVha3BvaW50KGJyZWFrcG9pbnQpOwotICAgIH0sCisgICAgICAg
IGlmICghdGhpcy5fc2hvdWxkRGlzcGxheUJyZWFrcG9pbnQoYnJlYWtwb2ludCkpCisgICAgICAg
ICAgICByZXR1cm47CiAKLSAgICBfYWRkQnJlYWtwb2ludDogZnVuY3Rpb24oYnJlYWtwb2ludCkK
LSAgICB7Ci0gICAgICAgIHZhciB0ZXh0Vmlld2VyTGluZU51bWJlciA9IHRoaXMuX2Zvcm1hdHRl
ci5vcmlnaW5hbExpbmVOdW1iZXJUb0Zvcm1hdHRlZExpbmVOdW1iZXIoYnJlYWtwb2ludC5saW5l
IC0gMSk7CisgICAgICAgIHZhciByZXNvbHZlZCA9IGJyZWFrcG9pbnQubG9jYXRpb25zLmxlbmd0
aDsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnRMaW5lTnVtYmVyID0gYnJlYWtwb2ludC5saW5lTnVt
YmVyOworICAgICAgICBpZiAocmVzb2x2ZWQpCisgICAgICAgICAgICBicmVha3BvaW50TGluZU51
bWJlciA9IGJyZWFrcG9pbnQubG9jYXRpb25zWzBdLmxpbmVOdW1iZXI7CisKKyAgICAgICAgdmFy
IHRleHRWaWV3ZXJMaW5lTnVtYmVyID0gdGhpcy5fZm9ybWF0dGVyLm9yaWdpbmFsTGluZU51bWJl
clRvRm9ybWF0dGVkTGluZU51bWJlcihicmVha3BvaW50TGluZU51bWJlcik7CiAgICAgICAgIGlm
ICh0ZXh0Vmlld2VyTGluZU51bWJlciA+PSB0aGlzLl90ZXh0TW9kZWwubGluZXNDb3VudCkKICAg
ICAgICAgICAgIHJldHVybjsKIAotICAgICAgICBicmVha3BvaW50LmFkZEV2ZW50TGlzdGVuZXIo
ImVuYWJsZS1jaGFuZ2VkIiwgdGhpcy5fYnJlYWtwb2ludENoYW5nZWQsIHRoaXMpOwotICAgICAg
ICBicmVha3BvaW50LmFkZEV2ZW50TGlzdGVuZXIoImNvbmRpdGlvbi1jaGFuZ2VkIiwgdGhpcy5f
YnJlYWtwb2ludENoYW5nZWQsIHRoaXMpOwotICAgICAgICBicmVha3BvaW50LmFkZEV2ZW50TGlz
dGVuZXIoInJlbW92ZWQiLCB0aGlzLl9icmVha3BvaW50UmVtb3ZlZCwgdGhpcyk7CisgICAgICAg
IHZhciBleGlzdGluZ0JyZWFrcG9pbnRJZCA9IHRoaXMuX3RleHRWaWV3ZXJMaW5lTnVtYmVyVG9C
cmVha3BvaW50SWRbdGV4dFZpZXdlckxpbmVOdW1iZXJdOworICAgICAgICBpZiAoZXhpc3RpbmdC
cmVha3BvaW50SWQpCisgICAgICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC5yZW1v
dmVCcmVha3BvaW50KGV4aXN0aW5nQnJlYWtwb2ludElkKTsKIAotICAgICAgICB0aGlzLl9zZXRC
cmVha3BvaW50RGVjb3JhdGlvbih0ZXh0Vmlld2VyTGluZU51bWJlciwgYnJlYWtwb2ludC5lbmFi
bGVkLCAhIWJyZWFrcG9pbnQuY29uZGl0aW9uKTsKKyAgICAgICAgdGhpcy5fYnJlYWtwb2ludElk
VG9UZXh0Vmlld2VyTGluZU51bWJlclticmVha3BvaW50LmlkXSA9IHRleHRWaWV3ZXJMaW5lTnVt
YmVyOworICAgICAgICB0aGlzLl90ZXh0Vmlld2VyTGluZU51bWJlclRvQnJlYWtwb2ludElkW3Rl
eHRWaWV3ZXJMaW5lTnVtYmVyXSA9IGJyZWFrcG9pbnQuaWQ7CisgICAgICAgIHRoaXMuX3NldEJy
ZWFrcG9pbnREZWNvcmF0aW9uKHRleHRWaWV3ZXJMaW5lTnVtYmVyLCByZXNvbHZlZCwgYnJlYWtw
b2ludC5lbmFibGVkLCAhIWJyZWFrcG9pbnQuY29uZGl0aW9uKTsKICAgICB9LAogCiAgICAgX2Jy
ZWFrcG9pbnRSZW1vdmVkOiBmdW5jdGlvbihldmVudCkKICAgICB7Ci0gICAgICAgIHZhciBicmVh
a3BvaW50ID0gZXZlbnQudGFyZ2V0OworICAgICAgICB2YXIgYnJlYWtwb2ludElkID0gZXZlbnQu
ZGF0YTsKIAotICAgICAgICBicmVha3BvaW50LnJlbW92ZUV2ZW50TGlzdGVuZXIoImVuYWJsZS1j
aGFuZ2VkIiwgbnVsbCwgdGhpcyk7Ci0gICAgICAgIGJyZWFrcG9pbnQucmVtb3ZlRXZlbnRMaXN0
ZW5lcigiY29uZGl0aW9uLWNoYW5nZWQiLCBudWxsLCB0aGlzKTsKLSAgICAgICAgYnJlYWtwb2lu
dC5yZW1vdmVFdmVudExpc3RlbmVyKCJyZW1vdmVkIiwgbnVsbCwgdGhpcyk7CisgICAgICAgIHZh
ciB0ZXh0Vmlld2VyTGluZU51bWJlciA9IHRoaXMuX2JyZWFrcG9pbnRJZFRvVGV4dFZpZXdlckxp
bmVOdW1iZXJbYnJlYWtwb2ludElkXTsKKyAgICAgICAgaWYgKHRleHRWaWV3ZXJMaW5lTnVtYmVy
ID09PSB1bmRlZmluZWQpCisgICAgICAgICAgICByZXR1cm47CiAKLSAgICAgICAgdmFyIHRleHRW
aWV3ZXJMaW5lTnVtYmVyID0gdGhpcy5fZm9ybWF0dGVyLm9yaWdpbmFsTGluZU51bWJlclRvRm9y
bWF0dGVkTGluZU51bWJlcihicmVha3BvaW50LmxpbmUgLSAxKTsKKyAgICAgICAgZGVsZXRlIHRo
aXMuX2JyZWFrcG9pbnRJZFRvVGV4dFZpZXdlckxpbmVOdW1iZXJbYnJlYWtwb2ludElkXTsKKyAg
ICAgICAgZGVsZXRlIHRoaXMuX3RleHRWaWV3ZXJMaW5lTnVtYmVyVG9CcmVha3BvaW50SWRbdGV4
dFZpZXdlckxpbmVOdW1iZXJdOwogICAgICAgICB0aGlzLl9yZW1vdmVCcmVha3BvaW50RGVjb3Jh
dGlvbih0ZXh0Vmlld2VyTGluZU51bWJlcik7CiAgICAgfSwKIAotICAgIF9icmVha3BvaW50Q2hh
bmdlZDogZnVuY3Rpb24oZXZlbnQpCisgICAgX2JyZWFrcG9pbnRSZXNvbHZlZDogZnVuY3Rpb24o
ZXZlbnQpCiAgICAgewotICAgICAgICB2YXIgYnJlYWtwb2ludCA9IGV2ZW50LnRhcmdldDsKLSAg
ICAgICAgdmFyIHRleHRWaWV3ZXJMaW5lTnVtYmVyID0gdGhpcy5fZm9ybWF0dGVyLm9yaWdpbmFs
TGluZU51bWJlclRvRm9ybWF0dGVkTGluZU51bWJlcihicmVha3BvaW50LmxpbmUgLSAxKTsKLSAg
ICAgICAgdGhpcy5fc2V0QnJlYWtwb2ludERlY29yYXRpb24odGV4dFZpZXdlckxpbmVOdW1iZXIs
IGJyZWFrcG9pbnQuZW5hYmxlZCwgISFicmVha3BvaW50LmNvbmRpdGlvbik7CisgICAgICAgIHZh
ciBicmVha3BvaW50ID0gZXZlbnQuZGF0YTsKKyAgICAgICAgdGhpcy5fYnJlYWtwb2ludFJlbW92
ZWQoeyBkYXRhOiBicmVha3BvaW50LmlkIH0pOworICAgICAgICB0aGlzLl9icmVha3BvaW50QWRk
ZWQoeyBkYXRhOiBicmVha3BvaW50IH0pOwogICAgIH0sCiAKLSAgICBfc2V0QnJlYWtwb2ludERl
Y29yYXRpb246IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIGVuYWJsZWQsIGhhc0NvbmRpdGlvbikKKyAg
ICBfc2V0QnJlYWtwb2ludERlY29yYXRpb246IGZ1bmN0aW9uKGxpbmVOdW1iZXIsIHJlc29sdmVk
LCBlbmFibGVkLCBoYXNDb25kaXRpb24pCiAgICAgewogICAgICAgICB0aGlzLl90ZXh0Vmlld2Vy
LmJlZ2luVXBkYXRlcygpOwogICAgICAgICB0aGlzLl90ZXh0Vmlld2VyLmFkZERlY29yYXRpb24o
bGluZU51bWJlciwgIndlYmtpdC1icmVha3BvaW50Iik7Ci0gICAgICAgIGlmIChlbmFibGVkKQot
ICAgICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5yZW1vdmVEZWNvcmF0aW9uKGxpbmVOdW1iZXIs
ICJ3ZWJraXQtYnJlYWtwb2ludC1kaXNhYmxlZCIpOwotICAgICAgICBlbHNlCisgICAgICAgIGlm
ICghZW5hYmxlZCkKICAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuYWRkRGVjb3JhdGlvbihs
aW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQtZGlzYWJsZWQiKTsKICAgICAgICAgaWYgKGhh
c0NvbmRpdGlvbikKICAgICAgICAgICAgIHRoaXMuX3RleHRWaWV3ZXIuYWRkRGVjb3JhdGlvbihs
aW5lTnVtYmVyLCAid2Via2l0LWJyZWFrcG9pbnQtY29uZGl0aW9uYWwiKTsKLSAgICAgICAgZWxz
ZQotICAgICAgICAgICAgdGhpcy5fdGV4dFZpZXdlci5yZW1vdmVEZWNvcmF0aW9uKGxpbmVOdW1i
ZXIsICJ3ZWJraXQtYnJlYWtwb2ludC1jb25kaXRpb25hbCIpOwogICAgICAgICB0aGlzLl90ZXh0
Vmlld2VyLmVuZFVwZGF0ZXMoKTsKICAgICB9LAogCkBAIC01MzMsMTQgKzU1MCwxNCBAQCBXZWJJ
bnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewogCiAgICAgICAgIGNvbnRleHRNZW51
LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJDb250aW51ZSB0byBIZXJlIiksIHRo
aXMuX2NvbnRpbnVlVG9MaW5lLmJpbmQodGhpcywgb3JpZ2luYWxMaW5lTnVtYmVyKSk7CiAKLSAg
ICAgICAgdmFyIGJyZWFrcG9pbnQgPSB0aGlzLl9maW5kQnJlYWtwb2ludChvcmlnaW5hbExpbmVO
dW1iZXIpOworICAgICAgICB2YXIgYnJlYWtwb2ludCA9IHRoaXMuX2ZpbmRCcmVha3BvaW50KHRl
eHRWaWV3ZXJMaW5lTnVtYmVyKTsKICAgICAgICAgaWYgKCFicmVha3BvaW50KSB7CiAgICAgICAg
ICAgICAvLyBUaGlzIHJvdyBkb2Vzbid0IGhhdmUgYSBicmVha3BvaW50OiBXZSB3YW50IHRvIHNo
b3cgQWRkIEJyZWFrcG9pbnQgYW5kIEFkZCBhbmQgRWRpdCBCcmVha3BvaW50LgogICAgICAgICAg
ICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkFkZCBCcmVh
a3BvaW50IiksIHRoaXMuX3NldEJyZWFrcG9pbnQuYmluZCh0aGlzLCBvcmlnaW5hbExpbmVOdW1i
ZXIsICIiLCB0cnVlKSk7CiAKICAgICAgICAgICAgIGZ1bmN0aW9uIGFkZENvbmRpdGlvbmFsQnJl
YWtwb2ludCgpCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgdGhpcy5fc2V0QnJlYWtw
b2ludERlY29yYXRpb24odGV4dFZpZXdlckxpbmVOdW1iZXIsIHRydWUsIHRydWUpOworICAgICAg
ICAgICAgICAgIHRoaXMuX3NldEJyZWFrcG9pbnREZWNvcmF0aW9uKHRleHRWaWV3ZXJMaW5lTnVt
YmVyLCB0cnVlLCB0cnVlLCB0cnVlKTsKICAgICAgICAgICAgICAgICBmdW5jdGlvbiBkaWRFZGl0
QnJlYWtwb2ludENvbmRpdGlvbihjb21taXR0ZWQsIGNvbmRpdGlvbikKICAgICAgICAgICAgICAg
ICB7CiAgICAgICAgICAgICAgICAgICAgIHRoaXMuX3JlbW92ZUJyZWFrcG9pbnREZWNvcmF0aW9u
KHRleHRWaWV3ZXJMaW5lTnVtYmVyKTsKQEAgLTU1MiwyMyArNTY5LDI0IEBAIFdlYkluc3BlY3Rv
ci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICBjb250ZXh0TWVudS5hcHBl
bmRJdGVtKFdlYkluc3BlY3Rvci5VSVN0cmluZygiQWRkIENvbmRpdGlvbmFsIEJyZWFrcG9pbnTi
gKYiKSwgYWRkQ29uZGl0aW9uYWxCcmVha3BvaW50LmJpbmQodGhpcykpOwogICAgICAgICB9IGVs
c2UgewogICAgICAgICAgICAgLy8gVGhpcyByb3cgaGFzIGEgYnJlYWtwb2ludCwgd2Ugd2FudCB0
byBzaG93IGVkaXQgYW5kIHJlbW92ZSBicmVha3BvaW50LCBhbmQgZWl0aGVyIGRpc2FibGUgb3Ig
ZW5hYmxlLgotICAgICAgICAgICAgY29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3Iu
VUlTdHJpbmcoIlJlbW92ZSBCcmVha3BvaW50IiksIGJyZWFrcG9pbnQucmVtb3ZlLmJpbmQoYnJl
YWtwb2ludCkpOworICAgICAgICAgICAgZnVuY3Rpb24gcmVtb3ZlQnJlYWtwb2ludCgpCisgICAg
ICAgICAgICB7CisgICAgICAgICAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwucmVt
b3ZlQnJlYWtwb2ludChicmVha3BvaW50LmlkKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGNvbnRleHRNZW51LmFwcGVuZEl0ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJSZW1vdmUgQnJl
YWtwb2ludCIpLCByZW1vdmVCcmVha3BvaW50KTsKICAgICAgICAgICAgIGZ1bmN0aW9uIGVkaXRC
cmVha3BvaW50Q29uZGl0aW9uKCkKICAgICAgICAgICAgIHsKICAgICAgICAgICAgICAgICBmdW5j
dGlvbiBkaWRFZGl0QnJlYWtwb2ludENvbmRpdGlvbihjb21taXR0ZWQsIGNvbmRpdGlvbikKICAg
ICAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgICAgIGlmIChjb21taXR0ZWQpIHsKLSAg
ICAgICAgICAgICAgICAgICAgICAgIGJyZWFrcG9pbnQucmVtb3ZlKCk7Ci0gICAgICAgICAgICAg
ICAgICAgICAgICB0aGlzLl9zZXRCcmVha3BvaW50KG9yaWdpbmFsTGluZU51bWJlciwgYnJlYWtw
b2ludC5lbmFibGVkLCBjb25kaXRpb24pOwotICAgICAgICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgICAgICAgIGlmIChjb21taXR0ZWQpCisgICAgICAgICAgICAgICAgICAgICAgICBXZWJJ
bnNwZWN0b3IuZGVidWdnZXJNb2RlbC51cGRhdGVCcmVha3BvaW50KGJyZWFrcG9pbnQuaWQsIGNv
bmRpdGlvbiwgYnJlYWtwb2ludC5lbmFibGVkKTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAg
ICAgICAgICAgdGhpcy5fZWRpdEJyZWFrcG9pbnRDb25kaXRpb24odGV4dFZpZXdlckxpbmVOdW1i
ZXIsIGJyZWFrcG9pbnQuY29uZGl0aW9uLCBkaWRFZGl0QnJlYWtwb2ludENvbmRpdGlvbi5iaW5k
KHRoaXMpKTsKICAgICAgICAgICAgIH0KICAgICAgICAgICAgIGNvbnRleHRNZW51LmFwcGVuZEl0
ZW0oV2ViSW5zcGVjdG9yLlVJU3RyaW5nKCJFZGl0IEJyZWFrcG9pbnTigKYiKSwgZWRpdEJyZWFr
cG9pbnRDb25kaXRpb24uYmluZCh0aGlzKSk7CiAgICAgICAgICAgICBmdW5jdGlvbiBzZXRCcmVh
a3BvaW50RW5hYmxlZChlbmFibGVkKQogICAgICAgICAgICAgewotICAgICAgICAgICAgICAgIGJy
ZWFrcG9pbnQucmVtb3ZlKCk7Ci0gICAgICAgICAgICAgICAgdGhpcy5fc2V0QnJlYWtwb2ludChv
cmlnaW5hbExpbmVOdW1iZXIsIGVuYWJsZWQsIGJyZWFrcG9pbnQuY29uZGl0aW9uKTsKKyAgICAg
ICAgICAgICAgICBXZWJJbnNwZWN0b3IuZGVidWdnZXJNb2RlbC51cGRhdGVCcmVha3BvaW50KGJy
ZWFrcG9pbnQuaWQsIGJyZWFrcG9pbnQuY29uZGl0aW9uLCBlbmFibGVkKTsKICAgICAgICAgICAg
IH0KICAgICAgICAgICAgIGlmIChicmVha3BvaW50LmVuYWJsZWQpCiAgICAgICAgICAgICAgICAg
Y29udGV4dE1lbnUuYXBwZW5kSXRlbShXZWJJbnNwZWN0b3IuVUlTdHJpbmcoIkRpc2FibGUgQnJl
YWtwb2ludCIpLCBzZXRCcmVha3BvaW50RW5hYmxlZC5iaW5kKHRoaXMsIGZhbHNlKSk7CkBAIC01
OTIsMTMgKzYxMCwxNSBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJhbWUucHJvdG90eXBlID0gewog
ICAgICAgICB2YXIgdGFyZ2V0ID0gZXZlbnQudGFyZ2V0LmVuY2xvc2luZ05vZGVPclNlbGZXaXRo
Q2xhc3MoIndlYmtpdC1saW5lLW51bWJlciIpOwogICAgICAgICBpZiAoIXRhcmdldCkKICAgICAg
ICAgICAgIHJldHVybjsKLSAgICAgICAgdmFyIG9yaWdpbmFsTGluZU51bWJlciA9IHRoaXMuX2Zv
cm1hdHRlci5mb3JtYXR0ZWRMaW5lTnVtYmVyVG9PcmlnaW5hbExpbmVOdW1iZXIodGFyZ2V0LnBh
cmVudEVsZW1lbnQubGluZU51bWJlcik7CisgICAgICAgIHZhciB0ZXh0Vmlld2VyTGluZU51bWJl
ciA9IHRhcmdldC5wYXJlbnRFbGVtZW50LmxpbmVOdW1iZXI7CisgICAgICAgIHZhciBvcmlnaW5h
bExpbmVOdW1iZXIgPSB0aGlzLl9mb3JtYXR0ZXIuZm9ybWF0dGVkTGluZU51bWJlclRvT3JpZ2lu
YWxMaW5lTnVtYmVyKHRleHRWaWV3ZXJMaW5lTnVtYmVyKTsKIAotICAgICAgICB2YXIgYnJlYWtw
b2ludCA9IHRoaXMuX2ZpbmRCcmVha3BvaW50KG9yaWdpbmFsTGluZU51bWJlcik7CisgICAgICAg
IHZhciBicmVha3BvaW50ID0gdGhpcy5fZmluZEJyZWFrcG9pbnQodGV4dFZpZXdlckxpbmVOdW1i
ZXIpOwogICAgICAgICBpZiAoYnJlYWtwb2ludCkgewotICAgICAgICAgICAgYnJlYWtwb2ludC5y
ZW1vdmUoKTsKICAgICAgICAgICAgIGlmIChldmVudC5zaGlmdEtleSkKLSAgICAgICAgICAgICAg
ICB0aGlzLl9zZXRCcmVha3BvaW50KG9yaWdpbmFsTGluZU51bWJlciwgIWJyZWFrcG9pbnQuZW5h
YmxlZCwgYnJlYWtwb2ludC5jb25kaXRpb24pOworICAgICAgICAgICAgICAgIFdlYkluc3BlY3Rv
ci5kZWJ1Z2dlck1vZGVsLnVwZGF0ZUJyZWFrcG9pbnQoYnJlYWtwb2ludC5pZCwgYnJlYWtwb2lu
dC5jb25kaXRpb24sICFicmVha3BvaW50LmVuYWJsZWQpOworICAgICAgICAgICAgZWxzZQorICAg
ICAgICAgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLnJlbW92ZUJyZWFrcG9pbnQo
YnJlYWtwb2ludC5pZCk7CiAgICAgICAgIH0gZWxzZQogICAgICAgICAgICAgdGhpcy5fc2V0QnJl
YWtwb2ludChvcmlnaW5hbExpbmVOdW1iZXIsIHRydWUsICIiKTsKICAgICAgICAgZXZlbnQucHJl
dmVudERlZmF1bHQoKTsKQEAgLTg0Nyw3ICs4NjcsNyBAQCBXZWJJbnNwZWN0b3IuU291cmNlRnJh
bWUucHJvdG90eXBlID0gewogICAgICAgICB2YXIgc291cmNlSUQgPSB0aGlzLl9zb3VyY2VJREZv
ckxpbmUobGluZU51bWJlcik7CiAgICAgICAgIGlmICghc291cmNlSUQpCiAgICAgICAgICAgICBy
ZXR1cm47Ci0gICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLmNvbnRpbnVlVG9MaW5l
KHNvdXJjZUlELCBsaW5lTnVtYmVyICsgMSk7CisgICAgICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dl
ck1vZGVsLmNvbnRpbnVlVG9MaW5lKHNvdXJjZUlELCBsaW5lTnVtYmVyKTsKICAgICB9LAogCiAg
ICAgX2RvdWJsZUNsaWNrOiBmdW5jdGlvbihldmVudCkKQEAgLTg4MiwyNCArOTAyLDIyIEBAIFdl
Ykluc3BlY3Rvci5Tb3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAKICAgICBfc2V0QnJlYWtwb2lu
dDogZnVuY3Rpb24obGluZU51bWJlciwgZW5hYmxlZCwgY29uZGl0aW9uKQogICAgIHsKLSAgICAg
ICAgdmFyIHNvdXJjZUlEID0gdGhpcy5fc291cmNlSURGb3JMaW5lKGxpbmVOdW1iZXIpOwotICAg
ICAgICBpZiAoIXNvdXJjZUlEKQotICAgICAgICAgICAgcmV0dXJuOwotICAgICAgICBXZWJJbnNw
ZWN0b3IuZGVidWdnZXJNb2RlbC5zZXRCcmVha3BvaW50KHNvdXJjZUlELCBsaW5lTnVtYmVyICsg
MSwgZW5hYmxlZCwgY29uZGl0aW9uKTsKKyAgICAgICAgaWYgKHRoaXMuX3VybCkKKyAgICAgICAg
ICAgIFdlYkluc3BlY3Rvci5kZWJ1Z2dlck1vZGVsLnNldEJyZWFrcG9pbnQodGhpcy5fdXJsLCBs
aW5lTnVtYmVyLCAwLCBjb25kaXRpb24sIGVuYWJsZWQpOworICAgICAgICBlbHNlIHsKKyAgICAg
ICAgICAgIHZhciBzb3VyY2VJRCA9IHRoaXMuX3NvdXJjZUlERm9yTGluZShsaW5lTnVtYmVyKTsK
KyAgICAgICAgICAgIGlmICghc291cmNlSUQpCisgICAgICAgICAgICAgICAgcmV0dXJuOworICAg
ICAgICAgICAgV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuc2V0QnJlYWtwb2ludEJ5U291cmNl
SWQoc291cmNlSUQsIGxpbmVOdW1iZXIsIDAsIGNvbmRpdGlvbiwgZW5hYmxlZCk7CisgICAgICAg
IH0KICAgICAgICAgaWYgKCFXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMuYnJlYWtwb2ludHNB
Y3RpdmF0ZWQpCiAgICAgICAgICAgICBXZWJJbnNwZWN0b3IucGFuZWxzLnNjcmlwdHMudG9nZ2xl
QnJlYWtwb2ludHNDbGlja2VkKCk7CiAgICAgfSwKIAotICAgIF9icmVha3BvaW50czogZnVuY3Rp
b24oKQorICAgIF9maW5kQnJlYWtwb2ludDogZnVuY3Rpb24odGV4dFZpZXdlckxpbmVOdW1iZXIp
CiAgICAgewotICAgICAgICB2YXIgc291cmNlSURTZXQgPSB0aGlzLl9zb3VyY2VJRFNldCgpOwot
ICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwucXVlcnlCcmVha3BvaW50
cyhmdW5jdGlvbihiKSB7IHJldHVybiBiLnNvdXJjZUlEIGluIHNvdXJjZUlEU2V0OyB9KTsKLSAg
ICB9LAotCi0gICAgX2ZpbmRCcmVha3BvaW50OiBmdW5jdGlvbihsaW5lTnVtYmVyKQotICAgIHsK
LSAgICAgICAgdmFyIHNvdXJjZUlEID0gdGhpcy5fc291cmNlSURGb3JMaW5lKGxpbmVOdW1iZXIp
OwotICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuZmluZEJyZWFrcG9p
bnQoc291cmNlSUQsIGxpbmVOdW1iZXIgKyAxKTsKKyAgICAgICAgdmFyIGJyZWFrcG9pbnRJZCA9
IHRoaXMuX3RleHRWaWV3ZXJMaW5lTnVtYmVyVG9CcmVha3BvaW50SWRbdGV4dFZpZXdlckxpbmVO
dW1iZXJdOworICAgICAgICByZXR1cm4gV2ViSW5zcGVjdG9yLmRlYnVnZ2VyTW9kZWwuYnJlYWtw
b2ludEZvcklkKGJyZWFrcG9pbnRJZCk7CiAgICAgfSwKIAogICAgIF9zb3VyY2VJREZvckxpbmU6
IGZ1bmN0aW9uKGxpbmVOdW1iZXIpCkBAIC05MTUsMTUgKzkzMyw2IEBAIFdlYkluc3BlY3Rvci5T
b3VyY2VGcmFtZS5wcm90b3R5cGUgPSB7CiAgICAgICAgICAgICB9CiAgICAgICAgIH0KICAgICAg
ICAgcmV0dXJuIHNvdXJjZUlERm9yTGluZTsKLSAgICB9LAotCi0gICAgX3NvdXJjZUlEU2V0OiBm
dW5jdGlvbigpCi0gICAgewotICAgICAgICB2YXIgc2NyaXB0cyA9IHRoaXMuX2NvbnRlbnRQcm92
aWRlci5zY3JpcHRzKCk7Ci0gICAgICAgIHZhciBzb3VyY2VJRFNldCA9IHt9OwotICAgICAgICBm
b3IgKHZhciBpID0gMDsgaSA8IHNjcmlwdHMubGVuZ3RoOyArK2kpCi0gICAgICAgICAgICBzb3Vy
Y2VJRFNldFtzY3JpcHRzW2ldLnNvdXJjZUlEXSA9IHRydWU7Ci0gICAgICAgIHJldHVybiBzb3Vy
Y2VJRFNldDsKICAgICB9CiB9CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2luc3BlY3Rv
ci9mcm9udC1lbmQvaW5zcGVjdG9yLmpzIGIvU291cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250
LWVuZC9pbnNwZWN0b3IuanMKaW5kZXggMTQ0MzdiZS4uZGY1ZTk2NSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKKysrIGIvU291cmNl
L1dlYkNvcmUvaW5zcGVjdG9yL2Zyb250LWVuZC9pbnNwZWN0b3IuanMKQEAgLTYwNCw3ICs2MDQs
NyBAQCBXZWJJbnNwZWN0b3IuZG9Mb2FkZWREb25lID0gZnVuY3Rpb24oKQogICAgIEluc3BlY3Rv
ckJhY2tlbmQucG9wdWxhdGVTY3JpcHRPYmplY3RzKG9uUG9wdWxhdGVTY3JpcHRPYmplY3RzKTsK
IAogICAgIGlmIChQcmVmZXJlbmNlcy5kZWJ1Z2dlckFsd2F5c0VuYWJsZWQgfHwgV2ViSW5zcGVj
dG9yLnNldHRpbmdzLmRlYnVnZ2VyRW5hYmxlZCkKLSAgICAgICAgSW5zcGVjdG9yQmFja2VuZC5l
bmFibGVEZWJ1Z2dlcigpOworICAgICAgICB0aGlzLmRlYnVnZ2VyTW9kZWwuZW5hYmxlRGVidWdn
ZXIoKTsKICAgICBpZiAoUHJlZmVyZW5jZXMucHJvZmlsZXJBbHdheXNFbmFibGVkIHx8IFdlYklu
c3BlY3Rvci5zZXR0aW5ncy5wcm9maWxlckVuYWJsZWQpCiAgICAgICAgIEluc3BlY3RvckJhY2tl
bmQuZW5hYmxlUHJvZmlsZXIoKTsKICAgICBpZiAoV2ViSW5zcGVjdG9yLnNldHRpbmdzLm1vbml0
b3JpbmdYSFJFbmFibGVkKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9DaGFu
Z2VMb2cgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwppbmRleCBjM2M1YmJhLi44
ODgyYTgzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZworKysg
Yi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL0NoYW5nZUxvZwpAQCAtMSwzICsxLDEzIEBACisyMDEx
LTAyLTAxICBQYXZlbCBQb2Rpdmlsb3YgIDxwb2Rpdmlsb3ZAY2hyb21pdW0ub3JnPgorCisgICAg
ICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIFdlYiBJbnNwZWN0b3I6
IGludHJvZHVjZSBuZXcgYXBpIGZvciBtYW5hZ2luZyBKYXZhU2NyaXB0IGJyZWFrcG9pbnRzLgor
ICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NTMyMzUKKwor
ICAgICAgICAqIHNyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHA6CisgICAgICAgIChXZWJLaXQ6
OldlYkRldlRvb2xzQWdlbnQ6OnNob3VsZEludGVycnVwdEZvck1lc3NhZ2UpOgorCiAyMDExLTAx
LTMxICBDaHJpcyBSb2dlcnMgIDxjcm9nZXJzQGdvb2dsZS5jb20+CiAKICAgICAgICAgUmV2aWV3
ZWQgYnkgSmVyZW15IE9ybG93LgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9jaHJvbWl1bS9z
cmMvV2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwIGIvU291cmNlL1dlYktpdC9jaHJvbWl1bS9zcmMv
V2ViRGV2VG9vbHNBZ2VudEltcGwuY3BwCmluZGV4IDExY2U3OTcuLjQyNzFhYTkgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJLaXQvY2hyb21pdW0vc3JjL1dlYkRldlRvb2xzQWdlbnRJbXBsLmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L2Nocm9taXVtL3NyYy9XZWJEZXZUb29sc0FnZW50SW1wbC5jcHAK
QEAgLTQyMyw4ICs0MjMsOCBAQCBib29sIFdlYkRldlRvb2xzQWdlbnQ6OnNob3VsZEludGVycnVw
dEZvck1lc3NhZ2UoY29uc3QgV2ViU3RyaW5nJiBtZXNzYWdlKQogICAgIGlmICghSW5zcGVjdG9y
QmFja2VuZERpc3BhdGNoZXI6OmdldENvbW1hbmROYW1lKG1lc3NhZ2UsICZjb21tYW5kTmFtZSkp
CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICByZXR1cm4gY29tbWFuZE5hbWUgPT0gSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OnBhdXNlQ21kCi0gICAgICAgIHx8IGNvbW1hbmROYW1lID09
IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpzZXRCcmVha3BvaW50Q21kCi0gICAgICAgIHx8
IGNvbW1hbmROYW1lID09IEluc3BlY3RvckJhY2tlbmREaXNwYXRjaGVyOjpyZW1vdmVCcmVha3Bv
aW50Q21kCisgICAgICAgIHx8IGNvbW1hbmROYW1lID09IEluc3BlY3RvckJhY2tlbmREaXNwYXRj
aGVyOjpzZXRKYXZhU2NyaXB0QnJlYWtwb2ludENtZAorICAgICAgICB8fCBjb21tYW5kTmFtZSA9
PSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6cmVtb3ZlSmF2YVNjcmlwdEJyZWFrcG9pbnRD
bWQKICAgICAgICAgfHwgY29tbWFuZE5hbWUgPT0gSW5zcGVjdG9yQmFja2VuZERpc3BhdGNoZXI6
OmFjdGl2YXRlQnJlYWtwb2ludHNDbWQKICAgICAgICAgfHwgY29tbWFuZE5hbWUgPT0gSW5zcGVj
dG9yQmFja2VuZERpc3BhdGNoZXI6OmRlYWN0aXZhdGVCcmVha3BvaW50c0NtZAogICAgICAgICB8
fCBjb21tYW5kTmFtZSA9PSBJbnNwZWN0b3JCYWNrZW5kRGlzcGF0Y2hlcjo6c3RhcnRQcm9maWxp
bmdDbWQK
</data>
<flag name="review"
          id="72270"
          type_id="1"
          status="+"
          setter="pfeldman"
    />
          </attachment>
      

    </bug>

</bugzilla>