<?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>188903</bug_id>
          
          <creation_ts>2018-08-23 15:30:41 -0700</creation_ts>
          <short_desc>[Cocoa] Exception (fileType &apos;dyn.agq8u&apos; is not a valid UTI) raised when dragging an attachment whose file wrapper is a directory</short_desc>
          <delta_ts>2018-08-27 13:20:20 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>HTML Editing</component>
          <version>Other</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>188933</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter>mitz</reporter>
          <assigned_to name="Wenson Hsieh">wenson_hsieh</assigned_to>
          <cc>aestes</cc>
    
    <cc>bdakin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>mitz</cc>
    
    <cc>thorton</cc>
    
    <cc>webkit-bug-importer</cc>
    
    <cc>wenson_hsieh</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1453256</commentid>
    <comment_count>0</comment_count>
    <who name="">mitz</who>
    <bug_when>2018-08-23 15:30:41 -0700</bug_when>
    <thetext>After using -[WebView _insertAttachmentWithFileWrapper:contentType:options:completion:], passing a NSFileWrapper made from a directory (and nil for the rest of the arguments), dragging the attachment out of the web view causes an exception to be raised:

Exception Name: NSInvalidArgumentException
Description: fileType &apos;dyn.agq8u&apos; is not a valid UTI
User Info: (null)

0   CoreFoundation                      0x00007fff3a1f9e4c __exceptionPreprocess + 291
1   libobjc.A.dylib                     0x00007fff67ed9efb objc_exception_throw + 48
2   AppKit                              0x00007fff381a8759 -[NSFilePromiseProvider init] + 0
3   WebKit                              0x000000010139555d WebKit::WebViewImpl::startDrag(WebCore::DragItem const&amp;, WebKit::ShareableBitmap::Handle const&amp;)
 + 667
4   WebKit                              0x00000001012fa07a void IPC::handleMessage&lt;Messages::WebPageProxy::StartDrag, WebKit::WebPageProxy, void (WebKit::WebPageProxy::*)(WebCore::DragItem const&amp;, WebKit::ShareableBitmap::Handle const&amp;)&gt;(IPC::Decoder&amp;, WebKit::WebPageProxy*, void (WebKit::WebPageProxy::*)(WebCore::DragItem const&amp;, WebKit::ShareableBitmap::Handle const&amp;))
 + 264</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453257</commentid>
    <comment_count>1</comment_count>
    <who name="">mitz</who>
    <bug_when>2018-08-23 15:31:09 -0700</bug_when>
    <thetext>s/WebView/WKWebView/ in the description, of course.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453259</commentid>
    <comment_count>2</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-08-23 15:41:21 -0700</bug_when>
    <thetext>This is probably a result of failing to map kUTTypeFolder to a MIME type :(</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453310</commentid>
    <comment_count>3</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-08-23 16:38:09 -0700</bug_when>
    <thetext>(I learned from thorton that RenderThemeMac.mm understands MIME types &quot;multipart/x-folder&quot; and &quot;application/vnd.apple.folder&quot;)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453628</commentid>
    <comment_count>4</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2018-08-24 17:12:44 -0700</bug_when>
    <thetext>&lt;rdar://problem/43702993&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453644</commentid>
    <comment_count>5</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-08-24 18:55:07 -0700</bug_when>
    <thetext>Note: this is also reproducible when dropping a folder, or any file with an extension that WebKit doesn&apos;t recognize (e.g. *.crash).</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453703</commentid>
    <comment_count>6</comment_count>
      <attachid>348089</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-08-26 00:04:18 -0700</bug_when>
    <thetext>Created attachment 348089
Depends on webkit.org/b/188933</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453774</commentid>
    <comment_count>7</comment_count>
      <attachid>348112</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-08-26 19:55:36 -0700</bug_when>
    <thetext>Created attachment 348112
Rebase on trunk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1453934</commentid>
    <comment_count>8</comment_count>
      <attachid>348155</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-08-27 09:56:27 -0700</bug_when>
    <thetext>Created attachment 348155
Rebase on trunk</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1454024</commentid>
    <comment_count>9</comment_count>
      <attachid>348155</attachid>
    <who name="Tim Horton">thorton</who>
    <bug_when>2018-08-27 12:16:06 -0700</bug_when>
    <thetext>Comment on attachment 348155
Rebase on trunk

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

&gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:385
&gt; -    [self setFileWrapper:fileWrapper.get() contentType:newContentType completion:^(NSError *error) {
&gt; +    [self setFileWrapper:(__bridge NSFileWrapper *)fileWrapper.get() contentType:newContentType completion:^(NSError *error) {

What is going on with all the 🌉? Other than that, r+, but please get rid of bridges for casts not between CF and NS objects.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1454027</commentid>
    <comment_count>10</comment_count>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-08-27 12:24:14 -0700</bug_when>
    <thetext>(In reply to Tim Horton from comment #9)
&gt; Comment on attachment 348155 [details]
&gt; Rebase on trunk
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=348155&amp;action=review
&gt; 
&gt; &gt; Tools/TestWebKitAPI/Tests/WebKitCocoa/WKAttachmentTests.mm:385
&gt; &gt; -    [self setFileWrapper:fileWrapper.get() contentType:newContentType completion:^(NSError *error) {
&gt; &gt; +    [self setFileWrapper:(__bridge NSFileWrapper *)fileWrapper.get() contentType:newContentType completion:^(NSError *error) {
&gt; 
&gt; What is going on with all the 🌉? Other than that, r+, but please get rid of
&gt; bridges for casts not between CF and NS objects.

Oh...yeah, most of this bridging (with the exception of CFStringRef &lt;=&gt; NSString) is a mistake. I&apos;ll fix this before landing!</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1454032</commentid>
    <comment_count>11</comment_count>
      <attachid>348187</attachid>
    <who name="Wenson Hsieh">wenson_hsieh</who>
    <bug_when>2018-08-27 12:36:13 -0700</bug_when>
    <thetext>Created attachment 348187
Patch for landing</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1454043</commentid>
    <comment_count>12</comment_count>
      <attachid>348187</attachid>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2018-08-27 13:14:29 -0700</bug_when>
    <thetext>Comment on attachment 348187
Patch for landing

Clearing flags on attachment: 348187

Committed r235392: &lt;https://trac.webkit.org/changeset/235392&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348089</attachid>
            <date>2018-08-26 00:04:18 -0700</date>
            <delta_ts>2018-08-26 19:55:35 -0700</delta_ts>
            <desc>Depends on webkit.org/b/188933</desc>
            <filename>bug-188903-20180826000417.patch</filename>
            <type>text/plain</type>
            <size>46219</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1MjMxCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZjk3ZWI2NjQ5ZWM1ZGJm
NjliNGYyMjUwYjU1OWVkY2QwNmJjOWUwMC4uOTk4NWRmMThjMTRiMDE0MTZiZTdlNzliYzk5YWFm
ZmI5ZjYwNzY0ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDE4LTA4LTI1ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtDb2NvYV0gRXhj
ZXB0aW9uIChmaWxlVHlwZSAnZHluLmFncTh1JyBpcyBub3QgYSB2YWxpZCBVVEkpIHJhaXNlZCB3
aGVuIGRyYWdnaW5nIGFuIGF0dGFjaG1lbnQgd2hvc2UgZmlsZSB3cmFwcGVyIGlzIGEgZGlyZWN0
b3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODg5
MDMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQzNzAyOTkzPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeGVzIHRoZSBleGNlcHRpb24gZm9yIGF0
dGFjaG1lbnRzIHRoYXQgYXJlIGNyZWF0ZWQgd2hlbiBkcm9wcGluZyBmaWxlcyB3aXRoIGV4dGVu
c2lvbnMgdGhhdCBkb24ndCBtYXAgdG8gYW55CisgICAgICAgIGtub3duIFVUSXMsIGFuZCB3aGVu
IGRyb3BwaW5nIGZvbGRlcnMuIFNlZSBiZWxvdyBmb3IgbW9yZSBkZXRhaWwuCisKKyAgICAgICAg
VGVzdHM6ICBXS0F0dGFjaG1lbnRUZXN0cy5JbnNlcnRGb2xkZXJBbmRGaWxlV2l0aFVua25vd25F
eHRlbnNpb24KKyAgICAgICAgICAgICAgICBXS0F0dGFjaG1lbnRUZXN0cy5Ecm9wRm9sZGVyQXNB
dHRhY2htZW50QW5kTW92ZUJ5RHJhZ2dpbmcKKyAgICAgICAgICAgICAgICBXS0F0dGFjaG1lbnRU
ZXN0cy5DaGFuZ2VBdHRhY2htZW50RGF0YUFuZEZpbGVJbmZvcm1hdGlvbgorCisgICAgICAgICog
ZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRBdHRh
Y2htZW50KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5oOgorICAgICAgICAqIGVkaXRpbmcv
Y29jb2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29u
dGVudFJlYWRlcjo6cmVhZEZpbGVQYXRocyk6CisKKyAgICAgICAgV2hlbiBjcmVhdGluZyBhbiBh
dHRhY2htZW50IGJ5IGRyb3BwaW5nIG9yIHBhc3RpbmcgYSBmaWxlIGJhY2tlZCBieSBhIGZpbGUg
cGF0aCwgaGFuZGxlIHRoZSBjYXNlcyB3aGVyZeKApgorICAgICAgICAoMSkgICAgIHRoZSBkcm9w
cGVkIHBhdGggaXMgYSBkaXJlY3RvcnksIGJ5IHNldHRpbmcgdGhlIFVUSSB0byAicHVibGljLmRp
cmVjdG9yeSIuIFRoaXMgYWxsb3dzIHVzIHRvIHNob3cgYQorICAgICAgICAgICAgICAgIGZvbGRl
ciBpY29uIGZvciB0aGUgZHJvcHBlZCBhdHRhY2htZW50IGVsZW1lbnQgb24gbWFjT1MuCisgICAg
ICAgICgyKSAgICAgdGhlIGRyb3BwZWQgcGF0aCBpcyBhIGZpbGUgd2hvc2UgVVRJIGlzIHVua25v
d24sIGJ5IGRlZmF1bHRpbmcgdG8gInB1YmxpYy5kYXRhIi4KKworICAgICAgICBCeSBlbnN1cmlu
ZyB0aGF0IHRoZSBVVEkgb2YgYSBkcm9wcGVkIGZpbGUtYmFja2VkIGF0dGFjaG1lbnQgaXMgc2V0
IHRvIGEgY29uY3JldGUgdHlwZSBpbiBhbnkgY2FzZSwgd2UgYXZvaWQgYW4KKyAgICAgICAgZXhj
ZXB0aW9uIHdoZW4gZHJhZ2dpbmcgdGhlIGF0dGFjaG1lbnQgb24gbWFjT1MsIGFuZCBvbiBpT1Ms
IGF2b2lkIHNpbGVudGx5IGZhaWxpbmcgdG8gZHJhZyBhbiBhdHRhY2htZW50LgorCisgICAgICAg
ICogaHRtbC9IVE1MQXR0YWNobWVudEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEF0dGFjaG1lbnRFbGVtZW50Ojp1cGRhdGVBdHRyaWJ1dGVzKToKKworICAgICAgICBDaGFuZ2Ug
dGhpcyBtZXRob2QgdG8gdGFrZSBhbiBvcHRpb25hbCBmaWxlIHNpemUgKHRoZSBzdWJ0aXRsZSBh
dHRyaWJ1dGUgd2lsbCBvbmx5IGJlIHNldCBpZiB0aGUgZmlsZSBzaXplIGlzCisgICAgICAgIG5v
dCBgc3RkOjpudWxsb3B0YCkuIEZ1cnRoZXJtb3JlLCBhbGxvdyBjYWxsZXJzIG9mIHRoaXMgbWV0
aG9kIHRvIGNsZWFyIGF0dHJpYnV0ZXMgb24gdGhlIGF0dGFjaG1lbnQgZWxlbWVudCBieQorICAg
ICAgICBwYXNzaW5nIGluIGBzdGQ6Om51bGxvcHRgIGZvciBhbnkgb2YgdGhlIHRocmVlIGFyZ3Vt
ZW50cy4gVGhpcyBhbGxvd3MgdXMgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIGFuCisgICAgICAg
IGF0dGFjaG1lbnQncyBmaWxlIHdyYXBwZXIgaXMgY2hhbmdlZCBmcm9tIGEgcmVndWxhciBmaWxl
IHRvIGEgZm9sZGVyIHdob3NlIHRvdGFsIHNpemUgaXMgY3VycmVudGx5IHVua25vd24uCisgICAg
ICAgIEluc3RlYWQgb2Ygc2hvd2luZyAiMCBieXRlcyIsIHdlJ2xsIHNpbXBseSByZWZyYWluIGZy
b20gc2hvd2luZyBhIHN1YnRpdGxlIGF0IGFsbCAoaW4gdGhlIGZ1dHVyZSwgdGhpcyBzaG91bGQK
KyAgICAgICAgYmUgaW1wcm92ZWQgYnkgaW1wbGVtZW50aW5nIGEgd2F5IHRvIGVzdGltYXRlIHRo
ZSBzaXplIG9mIHRoZSBmaWxlcyBpbiB0aGUgZm9sZGVyLCBvciBwZXJoYXBzIHNob3cgdGhlIG51
bWJlciBvZgorICAgICAgICBpdGVtcyBpbiB0aGUgZm9sZGVyIGFzIHRoZSBzdWJ0aXRsZSkuCisK
KyAgICAgICAgKiBodG1sL0hUTUxBdHRhY2htZW50RWxlbWVudC5oOgorCiAyMDE4LTA4LTI1ICBX
ZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFtBdHRhY2ht
ZW50IFN1cHBvcnRdIERyb3BwaW5nIGFuZCBwYXN0aW5nIGltYWdlcyBzaG91bGQgaW5zZXJ0IGlu
bGluZSBpbWFnZSBlbGVtZW50cyB3aXRoIF9XS0F0dGFjaG1lbnRzCmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGVlMGE2
NmFiNzRiY2YwMzkwMTZjYzZjYmQ4NGFiOWVmNDllOTFjNDYuLjlhZWZkMjA3MGNmY2JjNjM5ZDdi
ZTQ2ZjkwYTA2ZDAzNzM1Mzg2OTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9n
CisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzEgQEAKKzIwMTgtMDgt
MjUgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW0Nv
Y29hXSBFeGNlcHRpb24gKGZpbGVUeXBlICdkeW4uYWdxOHUnIGlzIG5vdCBhIHZhbGlkIFVUSSkg
cmFpc2VkIHdoZW4gZHJhZ2dpbmcgYW4gYXR0YWNobWVudCB3aG9zZSBmaWxlIHdyYXBwZXIgaXMg
YSBkaXJlY3RvcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE4ODkwMworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDM3MDI5OTM+CisKKyAgICAgICAg
UmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgRml4ZXMgdGhlIGJ1ZyBieSBz
dXBwb3J0aW5nIE5TRmlsZVdyYXBwZXJzIG9mIHR5cGUgZGlyZWN0b3J5LCBhcyB3ZWxsIGFzIE5T
RmlsZVdyYXBwZXJzIHdpdGggZmlsZSB0aGF0IGRvIG5vdAorICAgICAgICBtYXAgdG8gY29uY3Jl
dGUgdHlwZSBpZGVudGlmaWVycy4gQW1vbmcgb3RoZXIgdGhpbmdzLCB0aGlzIHBhdGNoIGVuc3Vy
ZXMgdGhhdDoKKyAgICAgICAgLSAgICAgICBJbnNlcnRpbmcgYSBkaXJlY3RvcnkgZmlsZSB3cmFw
cGVyIChvciB1c2luZyAtc2V0RmlsZVdyYXBwZXI64oCmOiB0byBjaGFuZ2UgYW4gZXhpc3Rpbmcg
X1dLQXR0YWNobWVudCdzCisgICAgICAgICAgICAgICAgZmlsZSB3cmFwcGVyIHRvIGEgZGlyZWN0
b3J5KSBkb2VzIG5vdCBjYXVzZSB0aGUgYXR0YWNobWVudCBlbGVtZW50IHRvIHNob3cgIjAgYnl0
ZXMiIGFzIHRoZSBzdWJ0aXRsZS4KKyAgICAgICAgLSAgICAgICBJbiB0aGUgYWJvdmUgc2NlbmFy
aW8sIHdlIGFsc28gd29uJ3QgZW5kIHVwIHdpdGggYSBtaXNzaW5nICJ0eXBlIiBhdHRyaWJ1dGUg
Zm9yIHRoZSBhdHRhY2htZW50IGVsZW1lbnQsCisgICAgICAgICAgICAgICAgYXMgd2VsbCBhcyBh
IGNvcnJlc3BvbmRpbmcgQVBJOjpBdHRhY2htZW50Ojpjb250ZW50VHlwZSgpIHRoYXQncyBhbiBl
bXB0eSBzdHJpbmcuCisgICAgICAgIC0gICAgICAgRHJvcHBpbmcgb3IgcGFzdGluZyBhdHRhY2ht
ZW50cyBiYWNrZWQgYnkgcGF0aHMgb24gZGlzayBhbHNvIGRvZXNuJ3QgdHJpZ2dlciB0aGVzZSBw
cm9ibGVtcywgaWYgdGhlIHBhdGgKKyAgICAgICAgICAgICAgICBpcyBhIGRpcmVjdG9yeSBvciBv
ZiB1bmtub3duIGZpbGUgdHlwZS4KKworICAgICAgICBDaGFuZ2VzIGFyZSB2ZXJpZmllZCBieSAy
IG5ldyBBUEkgdGVzdHMuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0FQSUF0dGFjaG1lbnQu
Y3BwOgorICAgICAgICAoQVBJOjpBdHRhY2htZW50Ojp1cGRhdGVBdHRyaWJ1dGVzKToKKyAgICAg
ICAgKEFQSTo6QXR0YWNobWVudDo6ZmlsZVNpemVGb3JEaXNwbGF5IGNvbnN0KToKKyAgICAgICAg
KiBVSVByb2Nlc3MvQVBJL0FQSUF0dGFjaG1lbnQuaDoKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJ
L0NvY29hL0FQSUF0dGFjaG1lbnRDb2NvYS5tbToKKyAgICAgICAgKEFQSTo6QXR0YWNobWVudDo6
c2V0RmlsZVdyYXBwZXJBbmRVcGRhdGVDb250ZW50VHlwZSk6CisKKyAgICAgICAgQWRkIGEgaGVs
cGVyIHRoYXQgc2V0cyB0aGUgZmlsZSB3cmFwcGVyIHRvIHRoZSBnaXZlbiBOU0ZpbGVXcmFwcGVy
LCBhbmQgZWl0aGVyIHNldHMgdGhlIGNvbnRlbnQgdHlwZSB0byB0aGUKKyAgICAgICAgZ2l2ZW4g
Y29udGVudCB0eXBlIGlmIGl0J3Mgc3BlY2lmaWVkLCBvciBpbmZlcnMgaXQgZnJvbSB0aGUgZmls
ZSBleHRlbnNpb24gb2YgdGhlIG5ldyBOU0ZpbGVXcmFwcGVyLiBJbnZva2VkCisgICAgICAgIHdo
ZW5ldmVyIGFuIE5TRmlsZVdyYXBwZXIgYW5kIGNvbnRlbnQgdHlwZSBjb21iaW5hdGlvbiBpcyBz
ZXQgb24gYW4gQVBJIGF0dGFjaG1lbnQgdmlhIFdlYktpdCBTUEkuCisKKyAgICAgICAgKEFQSTo6
QXR0YWNobWVudDo6ZmlsZVNpemVGb3JEaXNwbGF5IGNvbnN0KToKKworICAgICAgICBSZXR1cm5z
IGEgZmlsZSBzaXplIHRvIGJlIGRpc3BsYXllZCBpbiB0aGUgYXR0YWNobWVudCBlbGVtZW50J3Mg
c3VidGl0bGUuIFRoaXMgcmV0dXJucyBhbiBvcHRpb25hbCBmaWxlIHNpemUsCisgICAgICAgIHdo
ZXJlIGBzdGQ6Om51bGxvcHRgIGluZGljYXRlcyB0aGF0IHRoZXJlIHNob3VsZCBub3QgYmUgYSBm
aWxlIHNpemUgc2hvd24uIEZvciBub3csIHRoaXMgcmV0dXJucyBgc3RkOjpudWxsb3B0YAorICAg
ICAgICBmb3IgZGlyZWN0b3J5IGZpbGUgd3JhcHBlcnMsIHRob3VnaCBpbiB0aGUgZnV0dXJlLCB0
aGlzIHNob3VsZCBiZSBkb25lIG9ubHkgaW4gY2FzZXMgd2hlcmUgd2UgZG9uJ3QgaW1tZWRpYXRl
bHkKKyAgICAgICAgaGF2ZSBhIHNpemUgZXN0aW1hdGUgZm9yIHRoZSBmaWxlIHdyYXBwZXIuCisK
KyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbToKKyAgICAgICAgKC1b
V0tXZWJWaWV3IF9pbnNlcnRBdHRhY2htZW50V2l0aEZpbGVXcmFwcGVyOmNvbnRlbnRUeXBlOm9w
dGlvbnM6Y29tcGxldGlvbjpdKToKKworICAgICAgICBVc2UgQVBJOjpBdHRhY2htZW50OjpzZXRG
aWxlV3JhcHBlckFuZFVwZGF0ZUNvbnRlbnRUeXBlKCkgaW5zdGVhZCBvZiB0cnlpbmcgdG8gY29t
ZSB1cCB3aXRoIGEgZmFsbGJhY2sgVVRJLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2Nv
YS9fV0tBdHRhY2htZW50Lm1tOgorICAgICAgICAoLVtfV0tBdHRhY2htZW50IHNldEZpbGVXcmFw
cGVyOmNvbnRlbnRUeXBlOmNvbXBsZXRpb246XSk6CisKKyAgICAgICAgVXNlIEFQSTo6QXR0YWNo
bWVudDo6c2V0RmlsZVdyYXBwZXJBbmRVcGRhdGVDb250ZW50VHlwZSgpIGluc3RlYWQgb2YgdHJ5
aW5nIHRvIGNvbWUgdXAgd2l0aCBhIGZhbGxiYWNrIFVUSS4KKworICAgICAgICAqIFVJUHJvY2Vz
cy9XZWJQYWdlUHJveHkuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6Omluc2Vy
dEF0dGFjaG1lbnQpOgorCisgICAgICAgIFJlbW92ZSB0aGUgc2VwYXJhdGUgYXJndW1lbnRzIGZv
ciBmaWxlIHNpemUsIGNvbnRlbnQgdHlwZSwgYW5kIGZpbGUgbmFtZSwgYW5kIGluc3RlYWQgZ2V0
IHRoZW0gZnJvbSB0aGUgZ2l2ZW4KKyAgICAgICAgQVBJIEF0dGFjaG1lbnQgb2JqZWN0LgorCisg
ICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6dXBkYXRlQXR0YWNobWVudEF0dHJpYnV0ZXMp
OgorCisgICAgICAgIFJlbW92ZSBzZXBhcmF0ZSBhcmd1bWVudHMgZm9yIGZpbGUgc2l6ZSwgY29u
dGVudCB0eXBlIGFuZCBmaWxlIG5hbWUgYW5kIGp1c3QgdGFrZSBhbiBBUEk6OkF0dGFjaG1lbnQg
aW5zdGVhZC4KKyAgICAgICAgVGhlc2Ugc2VwYXJhdGUgcGllY2VzIG9mIGluZm9ybWF0aW9uIGNh
biBzaW1wbHkgYmUgYXNrZWQgZnJvbSB0aGUgQXR0YWNobWVudCBpdHNlbGYuCisKKyAgICAgICAg
KiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5Lmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuY3BwOgorICAgICAgICAoV2ViS2l0OjpXZWJQYWdlOjppbnNlcnRBdHRhY2htZW50
KToKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6dXBkYXRlQXR0YWNobWVudEF0dHJpYnV0ZXMp
OgorCisgICAgICAgIEFkanVzdCBzb21lIGludGVyZmFjZXMgaGVyZSB0byBhbGxvdyB0aGUgZGlz
cGxheWVkIGZpbGUgc2l6ZSB0byBiZSBvcHRpb25hbC4KKworICAgICAgICAqIFdlYlByb2Nlc3Mv
V2ViUGFnZS9XZWJQYWdlLmg6CisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
bWVzc2FnZXMuaW46CisKIDIwMTgtMDgtMjUgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBh
cHBsZS5jb20+CiAKICAgICAgICAgW0F0dGFjaG1lbnQgU3VwcG9ydF0gRHJvcHBpbmcgYW5kIHBh
c3RpbmcgaW1hZ2VzIHNob3VsZCBpbnNlcnQgaW5saW5lIGltYWdlIGVsZW1lbnRzIHdpdGggX1dL
QXR0YWNobWVudHMKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAppbmRleCAwNzAwOTQ4N2FmM2U2
NjIxNjBmNDFjMjgxZDRmMGFiMWMyYmU5NzE0Li4wNzg4MTRhMWQ5NjE5NmUyZjFjOGFiMTRiNzAy
MGNlMjFkZGIwNWNhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCkBAIC0zODgwLDExICsz
ODgwLDExIEBAIHZvaWQgRWRpdG9yOjpub3RpZnlDbGllbnRPZkF0dGFjaG1lbnRVcGRhdGVzKCkK
ICAgICB9CiB9CiAKLXZvaWQgRWRpdG9yOjppbnNlcnRBdHRhY2htZW50KGNvbnN0IFN0cmluZyYg
aWRlbnRpZmllciwgY29uc3QgQXR0YWNobWVudERpc3BsYXlPcHRpb25zJiwgdWludDY0X3QgZmls
ZVNpemUsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiYmIGV4
cGxpY2l0Q29udGVudFR5cGUpCit2b2lkIEVkaXRvcjo6aW5zZXJ0QXR0YWNobWVudChjb25zdCBT
dHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IEF0dGFjaG1lbnREaXNwbGF5T3B0aW9ucyYsIHN0ZDo6
b3B0aW9uYWw8dWludDY0X3Q+JiYgZmlsZVNpemUsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNv
bnN0IFN0cmluZyYgY29udGVudFR5cGUpCiB7CiAgICAgYXV0byBhdHRhY2htZW50ID0gSFRNTEF0
dGFjaG1lbnRFbGVtZW50OjpjcmVhdGUoSFRNTE5hbWVzOjphdHRhY2htZW50VGFnLCBkb2N1bWVu
dCgpKTsKICAgICBhdHRhY2htZW50LT5zZXRVbmlxdWVJZGVudGlmaWVyKGlkZW50aWZpZXIpOwot
ICAgIGF0dGFjaG1lbnQtPnVwZGF0ZUF0dHJpYnV0ZXMoZmlsZVNpemUsIFdURk1vdmUoZXhwbGlj
aXRDb250ZW50VHlwZSksIGZpbGVOYW1lKTsKKyAgICBhdHRhY2htZW50LT51cGRhdGVBdHRyaWJ1
dGVzKFdURk1vdmUoZmlsZVNpemUpLCBjb250ZW50VHlwZSwgZmlsZU5hbWUpOwogCiAgICAgYXV0
byBmcmFnbWVudFRvSW5zZXJ0ID0gZG9jdW1lbnQoKS5jcmVhdGVEb2N1bWVudEZyYWdtZW50KCk7
CiAgICAgZnJhZ21lbnRUb0luc2VydC0+YXBwZW5kQ2hpbGQoYXR0YWNobWVudC5nZXQoKSk7CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuaAppbmRleCAxZWMxMjBiZWYzM2RhOGVjYWI1ZTg5NGFiNTVlZmFh
Yjk1MTI4Y2FjLi42ZjVhYmJhYzJkYTk5Njk5ZTdhNTJlNTAwYmRlZDRiZmU0NmQxMjgwIDEwMDY0
NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCisrKyBiL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmgKQEAgLTUwMyw3ICs1MDMsNyBAQCBwdWJsaWM6CiAgICAgYm9v
bCBpc0dldHRpbmdEaWN0aW9uYXJ5UG9wdXBJbmZvKCkgY29uc3QgeyByZXR1cm4gbV9pc0dldHRp
bmdEaWN0aW9uYXJ5UG9wdXBJbmZvOyB9CiAKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5U
KQotICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW5zZXJ0QXR0YWNobWVudChjb25zdCBTdHJpbmcm
IGlkZW50aWZpZXIsIGNvbnN0IEF0dGFjaG1lbnREaXNwbGF5T3B0aW9ucyYsIHVpbnQ2NF90IGZp
bGVTaXplLCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4mJiBl
eHBsaWNpdENvbnRlbnRUeXBlID0gc3RkOjpudWxsb3B0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIGluc2VydEF0dGFjaG1lbnQoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBBdHRh
Y2htZW50RGlzcGxheU9wdGlvbnMmLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiYmIGZpbGVTaXpl
LCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKTsKICAg
ICB2b2lkIHJlZ2lzdGVyQXR0YWNobWVudElkZW50aWZpZXIoY29uc3QgU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiAvKiBjb250ZW50VHlwZSAqLywgY29uc3QgU3RyaW5nJiAvKiBwcmVmZXJyZWRGaWxl
TmFtZSAqLywgUmVmPFNoYXJlZEJ1ZmZlcj4mJik7CiAgICAgdm9pZCByZWdpc3RlckF0dGFjaG1l
bnRJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgLyogY29udGVudFR5cGUg
Ki8sIGNvbnN0IFN0cmluZyYgLyogZmlsZVBhdGggKi8pOwogICAgIHZvaWQgY2xvbmVBdHRhY2ht
ZW50RGF0YShjb25zdCBTdHJpbmcmIGZyb21JZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIHRvSWRl
bnRpZmllcik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNv
bnRlbnRSZWFkZXJDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQ29u
dGVudFJlYWRlckNvY29hLm1tCmluZGV4IDlkNzczMWY5M2Q5MGNlMTQyZjNiYzUxNmU0MThiZWM2
YWQ2MDVhMGIuLmFhNzE2ZjYwMTE2NTA3YzUxNDRmOGUwMDM2M2Y3Y2VkMWQzYzEyMTkgMTAwNjQ0
Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQ29udGVudFJlYWRlckNvY29h
Lm1tCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvY29jb2EvV2ViQ29udGVudFJlYWRlckNv
Y29hLm1tCkBAIC03MDEsOSArNzAxLDE4IEBAIGJvb2wgV2ViQ29udGVudFJlYWRlcjo6cmVhZEZp
bGVQYXRocyhjb25zdCBWZWN0b3I8U3RyaW5nPiYgcGF0aHMpCiAgICAgICAgIGZvciAoYXV0byYg
cGF0aCA6IHBhdGhzKSB7CiAgICAgICAgICAgICBhdXRvIGF0dGFjaG1lbnQgPSBIVE1MQXR0YWNo
bWVudEVsZW1lbnQ6OmNyZWF0ZShIVE1MTmFtZXM6OmF0dGFjaG1lbnRUYWcsIGRvY3VtZW50KTsK
ICAgICAgICAgICAgIGlmIChzdXBwb3J0c0NsaWVudFNpZGVBdHRhY2htZW50RGF0YShmcmFtZSkp
IHsKLSAgICAgICAgICAgICAgICBsb25nIGxvbmcgZmlsZVNpemUgeyAwIH07Ci0gICAgICAgICAg
ICAgICAgRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUocGF0aCwgZmlsZVNpemUpOwotICAgICAgICAg
ICAgICAgIGF1dG8gY29udGVudFR5cGUgPSBGaWxlOjpjb250ZW50VHlwZUZvckZpbGUocGF0aCk7
CisgICAgICAgICAgICAgICAgU3RyaW5nIGNvbnRlbnRUeXBlOworICAgICAgICAgICAgICAgIHN0
ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZpbGVTaXplRm9yRGlzcGxheTsKKyAgICAgICAgICAgICAg
ICBpZiAoRmlsZVN5c3RlbTo6ZmlsZUlzRGlyZWN0b3J5KHBhdGgsIEZpbGVTeXN0ZW06OlNob3Vs
ZEZvbGxvd1N5bWJvbGljTGlua3M6OlllcykpCisgICAgICAgICAgICAgICAgICAgIGNvbnRlbnRU
eXBlID0ga1VUVHlwZURpcmVjdG9yeTsKKyAgICAgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAg
ICAgICAgICAgICAgbG9uZyBsb25nIGZpbGVTaXplOworICAgICAgICAgICAgICAgICAgICBGaWxl
U3lzdGVtOjpnZXRGaWxlU2l6ZShwYXRoLCBmaWxlU2l6ZSk7CisgICAgICAgICAgICAgICAgICAg
IGZpbGVTaXplRm9yRGlzcGxheSA9IGZpbGVTaXplOworICAgICAgICAgICAgICAgICAgICBjb250
ZW50VHlwZSA9IEZpbGU6OmNvbnRlbnRUeXBlRm9yRmlsZShwYXRoKTsKKyAgICAgICAgICAgICAg
ICAgICAgaWYgKGNvbnRlbnRUeXBlLmlzRW1wdHkoKSkKKyAgICAgICAgICAgICAgICAgICAgICAg
IGNvbnRlbnRUeXBlID0ga1VUVHlwZURhdGE7CisgICAgICAgICAgICAgICAgfQogICAgICAgICAg
ICAgICAgIGZyYW1lLmVkaXRvcigpLnJlZ2lzdGVyQXR0YWNobWVudElkZW50aWZpZXIoYXR0YWNo
bWVudC0+ZW5zdXJlVW5pcXVlSWRlbnRpZmllcigpLCBjb250ZW50VHlwZSwgcGF0aCk7CiAgICAg
ICAgICAgICAgICAgaWYgKGNvbnRlbnRUeXBlSXNTdWl0YWJsZUZvcklubGluZUltYWdlUmVwcmVz
ZW50YXRpb24oY29udGVudFR5cGUpKSB7CiAgICAgICAgICAgICAgICAgICAgIGF1dG8gaW1hZ2Ug
PSBIVE1MSW1hZ2VFbGVtZW50OjpjcmVhdGUoZG9jdW1lbnQpOwpAQCAtNzExLDcgKzcyMCw3IEBA
IGJvb2wgV2ViQ29udGVudFJlYWRlcjo6cmVhZEZpbGVQYXRocyhjb25zdCBWZWN0b3I8U3RyaW5n
PiYgcGF0aHMpCiAgICAgICAgICAgICAgICAgICAgIGltYWdlLT5zZXRBdHRhY2htZW50RWxlbWVu
dChXVEZNb3ZlKGF0dGFjaG1lbnQpKTsKICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQtPmFw
cGVuZENoaWxkKGltYWdlKTsKICAgICAgICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAg
ICAgICAgICBhdHRhY2htZW50LT51cGRhdGVBdHRyaWJ1dGVzKGZpbGVTaXplLCBjb250ZW50VHlw
ZSwgRmlsZVN5c3RlbTo6cGF0aEdldEZpbGVOYW1lKHBhdGgpKTsKKyAgICAgICAgICAgICAgICAg
ICAgYXR0YWNobWVudC0+dXBkYXRlQXR0cmlidXRlcyhXVEZNb3ZlKGZpbGVTaXplRm9yRGlzcGxh
eSksIGNvbnRlbnRUeXBlLCBGaWxlU3lzdGVtOjpwYXRoR2V0RmlsZU5hbWUocGF0aCkpOwogICAg
ICAgICAgICAgICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQoYXR0YWNobWVudCk7CiAgICAg
ICAgICAgICAgICAgfQogICAgICAgICAgICAgfSBlbHNlIHsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEF0dGFjaG1lbnRFbGVtZW50LmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEF0dGFjaG1lbnRFbGVtZW50LmNwcAppbmRleCA0MDVjYjNlYjllMjE3YmUzOTI2NTcz
M2JlYzdjNWI2MDgyYTllZGExLi4zZWRiYzUxZGFkODg5ZWY2ZjgzMDRiMDIxYTFkNTI1NGNhN2Nk
ODY2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdHRhY2htZW50RWxlbWVu
dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXR0YWNobWVudEVsZW1lbnQuY3Bw
CkBAIC0xNDQsMTUgKzE0NCwyMyBAQCBTdHJpbmcgSFRNTEF0dGFjaG1lbnRFbGVtZW50OjphdHRh
Y2htZW50UGF0aCgpIGNvbnN0CiAgICAgcmV0dXJuIGF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6
YXRpb24od2Via2l0YXR0YWNobWVudHBhdGhBdHRyKTsKIH0KIAotdm9pZCBIVE1MQXR0YWNobWVu
dEVsZW1lbnQ6OnVwZGF0ZUF0dHJpYnV0ZXModWludDY0X3QgZmlsZVNpemUsIHN0ZDo6b3B0aW9u
YWw8U3RyaW5nPiYmIG5ld0NvbnRlbnRUeXBlLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4mJiBuZXdG
aWxlbmFtZSkKK3ZvaWQgSFRNTEF0dGFjaG1lbnRFbGVtZW50Ojp1cGRhdGVBdHRyaWJ1dGVzKHN0
ZDo6b3B0aW9uYWw8dWludDY0X3Q+JiYgbmV3RmlsZVNpemUsIHN0ZDo6b3B0aW9uYWw8U3RyaW5n
PiYmIG5ld0NvbnRlbnRUeXBlLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4mJiBuZXdGaWxlbmFtZSkK
IHsKICAgICBpZiAobmV3RmlsZW5hbWUpCiAgICAgICAgIHNldEF0dHJpYnV0ZVdpdGhvdXRTeW5j
aHJvbml6YXRpb24oSFRNTE5hbWVzOjp0aXRsZUF0dHIsICpuZXdGaWxlbmFtZSk7CisgICAgZWxz
ZQorICAgICAgICByZW1vdmVBdHRyaWJ1dGUoSFRNTE5hbWVzOjp0aXRsZUF0dHIpOwogCiAgICAg
aWYgKG5ld0NvbnRlbnRUeXBlKQogICAgICAgICBzZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25p
emF0aW9uKEhUTUxOYW1lczo6dHlwZUF0dHIsICpuZXdDb250ZW50VHlwZSk7CisgICAgZWxzZQor
ICAgICAgICByZW1vdmVBdHRyaWJ1dGUoSFRNTE5hbWVzOjp0eXBlQXR0cik7CisKKyAgICBpZiAo
bmV3RmlsZVNpemUpCisgICAgICAgIHNldEF0dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24o
SFRNTE5hbWVzOjpzdWJ0aXRsZUF0dHIsIGZpbGVTaXplRGVzY3JpcHRpb24oKm5ld0ZpbGVTaXpl
KSk7CisgICAgZWxzZQorICAgICAgICByZW1vdmVBdHRyaWJ1dGUoSFRNTE5hbWVzOjpzdWJ0aXRs
ZUF0dHIpOwogCi0gICAgc2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFt
ZXM6OnN1YnRpdGxlQXR0ciwgZmlsZVNpemVEZXNjcmlwdGlvbihmaWxlU2l6ZSkpOwogICAgIGlm
IChhdXRvKiByZW5kZXJlciA9IHRoaXMtPnJlbmRlcmVyKCkpCiAgICAgICAgIHJlbmRlcmVyLT5p
bnZhbGlkYXRlKCk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdHRh
Y2htZW50RWxlbWVudC5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXR0YWNobWVudEVsZW1l
bnQuaAppbmRleCA1YjY0MTkyYmM1NmY5NGEzNmVjM2QxMGE4ODI1NzM3NWU4M2YzYjg1Li42MWVh
MTVhOTI4ZjBiYWE0NTJlOWRmZmUxNzlhY2Y0ZWVkMzI3NjJkIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL0hUTUxBdHRhY2htZW50RWxlbWVudC5oCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvSFRNTEF0dGFjaG1lbnRFbGVtZW50LmgKQEAgLTQ5LDcgKzQ5LDcgQEAgcHVibGljOgog
ICAgIGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1fdW5p
cXVlSWRlbnRpZmllcjsgfQogICAgIHZvaWQgc2V0VW5pcXVlSWRlbnRpZmllcihjb25zdCBTdHJp
bmcmIHVuaXF1ZUlkZW50aWZpZXIpIHsgbV91bmlxdWVJZGVudGlmaWVyID0gdW5pcXVlSWRlbnRp
ZmllcjsgfQogCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1cGRhdGVBdHRyaWJ1dGVzKHVpbnQ2
NF90IGZpbGVTaXplLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4mJiBuZXdDb250ZW50VHlwZSA9IHN0
ZDo6bnVsbG9wdCwgc3RkOjpvcHRpb25hbDxTdHJpbmc+JiYgbmV3RmlsZW5hbWUgPSBzdGQ6Om51
bGxvcHQpOworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgdXBkYXRlQXR0cmlidXRlcyhzdGQ6Om9w
dGlvbmFsPHVpbnQ2NF90PiYmIG5ld0ZpbGVTaXplID0gc3RkOjpudWxsb3B0LCBzdGQ6Om9wdGlv
bmFsPFN0cmluZz4mJiBuZXdDb250ZW50VHlwZSA9IHN0ZDo6bnVsbG9wdCwgc3RkOjpvcHRpb25h
bDxTdHJpbmc+JiYgbmV3RmlsZW5hbWUgPSBzdGQ6Om51bGxvcHQpOwogCiAgICAgSW5zZXJ0ZWRJ
bnRvQW5jZXN0b3JSZXN1bHQgaW5zZXJ0ZWRJbnRvQW5jZXN0b3IoSW5zZXJ0aW9uVHlwZSwgQ29u
dGFpbmVyTm9kZSYpIGZpbmFsOwogICAgIHZvaWQgcmVtb3ZlZEZyb21BbmNlc3RvcihSZW1vdmFs
VHlwZSwgQ29udGFpbmVyTm9kZSYpIGZpbmFsOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0FQSUF0dGFjaG1lbnQuY3BwIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0FQSUF0dGFjaG1lbnQuY3BwCmluZGV4IGI2MTUwNDgzZGU1ZjY2YWRlZTdjYzZmNGFiZmQw
ZTAzNjViNmE0MzIuLjA3M2E0NGNlNDQ4NmNhZmQ2MmUyNWNiZGU4ZTlmYmM5M2JjYzdmNDYgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElBdHRhY2htZW50LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQXR0YWNobWVudC5jcHAKQEAgLTU3
LDE3ICs1NywxNCBAQCB2b2lkIEF0dGFjaG1lbnQ6OnNldERpc3BsYXlPcHRpb25zKFdlYkNvcmU6
OkF0dGFjaG1lbnREaXNwbGF5T3B0aW9ucyBvcHRpb25zLCBGdQogICAgICAgICBjYWxsYmFjayhX
ZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3I6Ok93bmVyV2FzSW52YWxpZGF0ZWQpOwogfQogCi12
b2lkIEF0dGFjaG1lbnQ6OnVwZGF0ZUF0dHJpYnV0ZXModWludDY0X3QgZmlsZVNpemUsIGNvbnN0
IFdURjo6U3RyaW5nJiBuZXdDb250ZW50VHlwZSwgY29uc3QgV1RGOjpTdHJpbmcmIG5ld0ZpbGVu
YW1lLCBGdW5jdGlvbjx2b2lkKFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJh
Y2spCit2b2lkIEF0dGFjaG1lbnQ6OnVwZGF0ZUF0dHJpYnV0ZXMoRnVuY3Rpb248dm9pZChXZWJL
aXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrKQogewotICAgIHNldENvbnRlbnRU
eXBlKG5ld0NvbnRlbnRUeXBlKTsKLSAgICBzZXRGaWxlUGF0aCh7IH0pOwotCi0gICAgYXV0byBv
cHRpb25hbE5ld0NvbnRlbnRUeXBlID0gbmV3Q29udGVudFR5cGUuaXNOdWxsKCkgPyBzdGQ6Om51
bGxvcHQgOiBzdGQ6Om9wdGlvbmFsPFdURjo6U3RyaW5nPiB7IG5ld0NvbnRlbnRUeXBlIH07Ci0g
ICAgYXV0byBvcHRpb25hbE5ld0ZpbGVuYW1lID0gbmV3RmlsZW5hbWUuaXNOdWxsKCkgPyBzdGQ6
Om51bGxvcHQgOiBzdGQ6Om9wdGlvbmFsPFdURjo6U3RyaW5nPiB7IG5ld0ZpbGVuYW1lIH07Ci0g
ICAgaWYgKG1fd2ViUGFnZSkKLSAgICAgICAgbV93ZWJQYWdlLT51cGRhdGVBdHRhY2htZW50QXR0
cmlidXRlcyhtX2lkZW50aWZpZXIsIGZpbGVTaXplLCBXVEZNb3ZlKG9wdGlvbmFsTmV3Q29udGVu
dFR5cGUpLCBXVEZNb3ZlKG9wdGlvbmFsTmV3RmlsZW5hbWUpLCBXVEZNb3ZlKGNhbGxiYWNrKSk7
Ci0gICAgZWxzZQorICAgIGlmICghbV93ZWJQYWdlKSB7CiAgICAgICAgIGNhbGxiYWNrKFdlYktp
dDo6Q2FsbGJhY2tCYXNlOjpFcnJvcjo6T3duZXJXYXNJbnZhbGlkYXRlZCk7CisgICAgICAgIHJl
dHVybjsKKyAgICB9CisKKyAgICBtX3dlYlBhZ2UtPnVwZGF0ZUF0dGFjaG1lbnRBdHRyaWJ1dGVz
KCp0aGlzLCBXVEZNb3ZlKGNhbGxiYWNrKSk7CiB9CiAKIHZvaWQgQXR0YWNobWVudDo6aW52YWxp
ZGF0ZSgpCkBAIC05Myw2ICs5MCwxMSBAQCBXVEY6OlN0cmluZyBBdHRhY2htZW50OjpmaWxlTmFt
ZSgpIGNvbnN0CiAgICAgcmV0dXJuIHsgfTsKIH0KIAorc3RkOjpvcHRpb25hbDx1aW50NjRfdD4g
QXR0YWNobWVudDo6ZmlsZVNpemVGb3JEaXNwbGF5KCkgY29uc3QKK3sKKyAgICByZXR1cm4gc3Rk
OjpudWxsb3B0OworfQorCiAjZW5kaWYgLy8gIVBMQVRGT1JNKENPQ09BKQogCiB9CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQXR0YWNobWVudC5oIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUF0dGFjaG1lbnQuaAppbmRleCA3MTc0MWZmNDEzNGRm
YTQ1ZTJhZGQ3NzI0OGQ3ODk5NzFmNTQ2Mzg0Li44NDQzZjQzMGJjOTM2M2I5M2IwOGEzN2EzNDMy
MTBmMGJjYzJkZmM0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJ
QXR0YWNobWVudC5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElBdHRhY2ht
ZW50LmgKQEAgLTU2LDcgKzU2LDcgQEAgcHVibGljOgogCiAgICAgY29uc3QgV1RGOjpTdHJpbmcm
IGlkZW50aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX2lkZW50aWZpZXI7IH0KICAgICB2b2lkIHNl
dERpc3BsYXlPcHRpb25zKFdlYkNvcmU6OkF0dGFjaG1lbnREaXNwbGF5T3B0aW9ucywgRnVuY3Rp
b248dm9pZChXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsKLSAgICB2b2lkIHVwZGF0
ZUF0dHJpYnV0ZXModWludDY0X3QgZmlsZVNpemUsIGNvbnN0IFdURjo6U3RyaW5nJiBuZXdDb250
ZW50VHlwZSwgY29uc3QgV1RGOjpTdHJpbmcmIG5ld0ZpbGVuYW1lLCBGdW5jdGlvbjx2b2lkKFdl
YktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcik+JiYpOworICAgIHZvaWQgdXBkYXRlQXR0cmlidXRl
cyhGdW5jdGlvbjx2b2lkKFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcik+JiYpOwogCiAgICAg
dm9pZCBpbnZhbGlkYXRlKCk7CiAgICAgYm9vbCBpc1ZhbGlkKCkgY29uc3QgeyByZXR1cm4gISFt
X3dlYlBhZ2U7IH0KQEAgLTY0LDYgKzY0LDcgQEAgcHVibGljOgogI2lmIFBMQVRGT1JNKENPQ09B
KQogICAgIE5TRmlsZVdyYXBwZXIgKmZpbGVXcmFwcGVyKCkgY29uc3QgeyByZXR1cm4gbV9maWxl
V3JhcHBlci5nZXQoKTsgfQogICAgIHZvaWQgc2V0RmlsZVdyYXBwZXIoTlNGaWxlV3JhcHBlciAq
ZmlsZVdyYXBwZXIpIHsgbV9maWxlV3JhcHBlciA9IGZpbGVXcmFwcGVyOyB9CisgICAgdm9pZCBz
ZXRGaWxlV3JhcHBlckFuZFVwZGF0ZUNvbnRlbnRUeXBlKE5TRmlsZVdyYXBwZXIgKiwgTlNTdHJp
bmcgKmNvbnRlbnRUeXBlKTsKICAgICBXVEY6OlN0cmluZyB1dGlUeXBlKCkgY29uc3Q7CiAjZW5k
aWYKICAgICBXVEY6OlN0cmluZyBtaW1lVHlwZSgpIGNvbnN0OwpAQCAtNzgsNiArNzksOCBAQCBw
dWJsaWM6CiAgICAgSW5zZXJ0aW9uU3RhdGUgaW5zZXJ0aW9uU3RhdGUoKSBjb25zdCB7IHJldHVy
biBtX2luc2VydGlvblN0YXRlOyB9CiAgICAgdm9pZCBzZXRJbnNlcnRpb25TdGF0ZShJbnNlcnRp
b25TdGF0ZSBzdGF0ZSkgeyBtX2luc2VydGlvblN0YXRlID0gc3RhdGU7IH0KIAorICAgIHN0ZDo6
b3B0aW9uYWw8dWludDY0X3Q+IGZpbGVTaXplRm9yRGlzcGxheSgpIGNvbnN0OworCiBwcml2YXRl
OgogICAgIGV4cGxpY2l0IEF0dGFjaG1lbnQoY29uc3QgV1RGOjpTdHJpbmcmIGlkZW50aWZpZXIs
IFdlYktpdDo6V2ViUGFnZVByb3h5Jik7CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9BUElBdHRhY2htZW50Q29jb2EubW0gYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9BUEkvQ29jb2EvQVBJQXR0YWNobWVudENvY29hLm1tCmluZGV4IDVlM2U4YmY3YzMz
NDEzNDU5NzQwMzgxMGJlYjZjYmVmODQ4NjMzMzcuLjY3YzY2ZTRkNzRlNTNjOWIyZjA5ODljYzM5
MzVjNGQ4MDAxMThiYzIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9D
b2NvYS9BUElBdHRhY2htZW50Q29jb2EubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0NvY29hL0FQSUF0dGFjaG1lbnRDb2NvYS5tbQpAQCAtNzYsNCArNzYsMzQgQEAgV1RGOjpT
dHJpbmcgQXR0YWNobWVudDo6ZmlsZU5hbWUoKSBjb25zdAogICAgIHJldHVybiBbbV9maWxlV3Jh
cHBlciBwcmVmZXJyZWRGaWxlbmFtZV07CiB9CiAKK3ZvaWQgQXR0YWNobWVudDo6c2V0RmlsZVdy
YXBwZXJBbmRVcGRhdGVDb250ZW50VHlwZShOU0ZpbGVXcmFwcGVyICpmaWxlV3JhcHBlciwgTlNT
dHJpbmcgKmNvbnRlbnRUeXBlKQoreworICAgIGlmICghY29udGVudFR5cGUubGVuZ3RoKSB7Cisg
ICAgICAgIGlmIChmaWxlV3JhcHBlci5kaXJlY3RvcnkpCisgICAgICAgICAgICBjb250ZW50VHlw
ZSA9IChOU1N0cmluZyAqKWtVVFR5cGVEaXJlY3Rvcnk7CisgICAgICAgIGVsc2UgaWYgKGZpbGVX
cmFwcGVyLnJlZ3VsYXJGaWxlKSB7CisgICAgICAgICAgICBpZiAoTlNTdHJpbmcgKnBhdGhFeHRl
bnNpb24gPSAoZmlsZVdyYXBwZXIuZmlsZW5hbWUubGVuZ3RoID8gZmlsZVdyYXBwZXIuZmlsZW5h
bWUgOiBmaWxlV3JhcHBlci5wcmVmZXJyZWRGaWxlbmFtZSkucGF0aEV4dGVuc2lvbikKKyAgICAg
ICAgICAgICAgICBjb250ZW50VHlwZSA9IFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6OmdldE1J
TUVUeXBlRm9yRXh0ZW5zaW9uKHBhdGhFeHRlbnNpb24pOworICAgICAgICAgICAgaWYgKCFjb250
ZW50VHlwZS5sZW5ndGgpCisgICAgICAgICAgICAgICAgY29udGVudFR5cGUgPSAoTlNTdHJpbmcg
KilrVVRUeXBlRGF0YTsKKyAgICAgICAgfQorICAgIH0KKworICAgIHNldENvbnRlbnRUeXBlKGNv
bnRlbnRUeXBlKTsKKyAgICBzZXRGaWxlV3JhcHBlcihmaWxlV3JhcHBlcik7Cit9CisKK3N0ZDo6
b3B0aW9uYWw8dWludDY0X3Q+IEF0dGFjaG1lbnQ6OmZpbGVTaXplRm9yRGlzcGxheSgpIGNvbnN0
Cit7CisgICAgaWYgKCFbbV9maWxlV3JhcHBlciBpc1JlZ3VsYXJGaWxlXSkgeworICAgICAgICAv
LyBGSVhNRTogV2Ugc2hvdWxkIGRpc3BsYXkgYSBzaXplIGVzdGltYXRlIGZvciBkaXJlY3Rvcnkt
dHlwZSBmaWxlIHdyYXBwZXJzLgorICAgICAgICByZXR1cm4gc3RkOjpudWxsb3B0OworICAgIH0K
KworICAgIGlmIChhdXRvIGZpbGVTaXplID0gW1ttX2ZpbGVXcmFwcGVyIGZpbGVBdHRyaWJ1dGVz
XVtOU0ZpbGVTaXplXSB1bnNpZ25lZExvbmdMb25nVmFsdWVdKQorICAgICAgICByZXR1cm4gZmls
ZVNpemU7CisKKyAgICByZXR1cm4gW21fZmlsZVdyYXBwZXIgcmVndWxhckZpbGVDb250ZW50c10u
bGVuZ3RoOworfQorCiB9IC8vIG5hbWVzcGFjZSBBUEkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCmluZGV4IDlmYzFhNjBiNWNhYjg4OTA0NmYzYzQ3
MTI1OWIyYjBiNDJiMGFhODkuLjJjODc5ZjhiMTM4YzdjMzNhMzYxNzg4YjEwOTljY2JhOGEzMzVl
MTEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZp
ZXcubW0KKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5t
bQpAQCAtNDQ0OCwxOCArNDQ0OCw4IEBAIFdFQkNPUkVfQ09NTUFORCh5YW5rQW5kU2VsZWN0KQog
ICAgIGF1dG8gaWRlbnRpZmllciA9IGNyZWF0ZUNhbm9uaWNhbFVVSURTdHJpbmcoKTsKICAgICBh
dXRvIGNvcmVPcHRpb25zID0gb3B0aW9ucyA/IG9wdGlvbnMuY29yZURpc3BsYXlPcHRpb25zIDog
V2ViQ29yZTo6QXR0YWNobWVudERpc3BsYXlPcHRpb25zIHsgfTsKICAgICBhdXRvIGF0dGFjaG1l
bnQgPSBBUEk6OkF0dGFjaG1lbnQ6OmNyZWF0ZShpZGVudGlmaWVyLCAqX3BhZ2UpOwotICAgIGF0
dGFjaG1lbnQtPnNldEZpbGVXcmFwcGVyKGZpbGVXcmFwcGVyKTsKLQotICAgIGlmICghY29udGVu
dFR5cGUubGVuZ3RoKSB7Ci0gICAgICAgIGlmIChOU1N0cmluZyAqcGF0aEV4dGVuc2lvbiA9IChm
aWxlV3JhcHBlci5maWxlbmFtZS5sZW5ndGggPyBmaWxlV3JhcHBlci5maWxlbmFtZSA6IGZpbGVX
cmFwcGVyLnByZWZlcnJlZEZpbGVuYW1lKS5wYXRoRXh0ZW5zaW9uKQotICAgICAgICAgICAgY29u
dGVudFR5cGUgPSBXZWJDb3JlOjpNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVu
c2lvbihwYXRoRXh0ZW5zaW9uKTsKLSAgICB9Ci0KLSAgICBhdXRvIGZpbGVTaXplID0gW1tbZmls
ZVdyYXBwZXIgZmlsZUF0dHJpYnV0ZXNdIG9iamVjdEZvcktleTpOU0ZpbGVTaXplXSB1bnNpZ25l
ZExvbmdMb25nVmFsdWVdOwotICAgIGlmICghZmlsZVNpemUgJiYgZmlsZVdyYXBwZXIucmVndWxh
ckZpbGUpCi0gICAgICAgIGZpbGVTaXplID0gZmlsZVdyYXBwZXIucmVndWxhckZpbGVDb250ZW50
cy5sZW5ndGg7Ci0KLSAgICBfcGFnZS0+aW5zZXJ0QXR0YWNobWVudChhdHRhY2htZW50LmNvcHlS
ZWYoKSwgY29yZU9wdGlvbnMsIGZpbGVTaXplLCBbZmlsZVdyYXBwZXIgcHJlZmVycmVkRmlsZW5h
bWVdLCBjb250ZW50VHlwZS5sZW5ndGggPyBzdGQ6Om9wdGlvbmFsPFN0cmluZz4geyBjb250ZW50
VHlwZSB9IDogc3RkOjpudWxsb3B0LCBbY2FwdHVyZWRIYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNv
bXBsZXRpb25IYW5kbGVyKV0gKFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgewor
ICAgIGF0dGFjaG1lbnQtPnNldEZpbGVXcmFwcGVyQW5kVXBkYXRlQ29udGVudFR5cGUoZmlsZVdy
YXBwZXIsIGNvbnRlbnRUeXBlKTsKKyAgICBfcGFnZS0+aW5zZXJ0QXR0YWNobWVudChhdHRhY2ht
ZW50LmNvcHlSZWYoKSwgY29yZU9wdGlvbnMsIFtjYXB0dXJlZEhhbmRsZXIgPSBtYWtlQmxvY2tQ
dHIoY29tcGxldGlvbkhhbmRsZXIpXSAoV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yIGVycm9y
KSB7CiAgICAgICAgIGlmIChjYXB0dXJlZEhhbmRsZXIpCiAgICAgICAgICAgICBjYXB0dXJlZEhh
bmRsZXIoZXJyb3IgPT0gV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yOjpOb25lKTsKICAgICB9
KTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9fV0tBdHRh
Y2htZW50Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F0dGFjaG1l
bnQubW0KaW5kZXggN2RmNDhiMjk1NWRhZDllY2RjN2UyZWRlNjYyYTUxYWYwYmY0ZmQzZS4uMGNh
M2Q1MzkzODYxNTVjNGFhNDBhNDlkYzM4OTQ1NzM2MGI2MmU0YiAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F0dGFjaG1lbnQubW0KKysrIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL19XS0F0dGFjaG1lbnQubW0KQEAgLTE1NywxNyAr
MTU3LDExIEBAIHN0YXRpYyBjb25zdCBOU0ludGVnZXIgSW52YWxpZEF0dGFjaG1lbnRFcnJvckNv
ZGUgPSAyOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAgYXV0byBmaWxlU2l6ZSA9IFtm
aWxlV3JhcHBlci5maWxlQXR0cmlidXRlc1tOU0ZpbGVTaXplXSB1bnNpZ25lZExvbmdMb25nVmFs
dWVdOwotICAgIGlmICghZmlsZVNpemUgJiYgZmlsZVdyYXBwZXIucmVndWxhckZpbGUpCi0gICAg
ICAgIGZpbGVTaXplID0gZmlsZVdyYXBwZXIucmVndWxhckZpbGVDb250ZW50cy5sZW5ndGg7Ci0K
LSAgICBpZiAoIWNvbnRlbnRUeXBlLmxlbmd0aCkgewotICAgICAgICBpZiAoTlNTdHJpbmcgKnBh
dGhFeHRlbnNpb24gPSAoZmlsZVdyYXBwZXIuZmlsZW5hbWUubGVuZ3RoID8gZmlsZVdyYXBwZXIu
ZmlsZW5hbWUgOiBmaWxlV3JhcHBlci5wcmVmZXJyZWRGaWxlbmFtZSkucGF0aEV4dGVuc2lvbikK
LSAgICAgICAgICAgIGNvbnRlbnRUeXBlID0gV2ViQ29yZTo6TUlNRVR5cGVSZWdpc3RyeTo6Z2V0
TUlNRVR5cGVGb3JFeHRlbnNpb24ocGF0aEV4dGVuc2lvbik7Ci0gICAgfQotCi0gICAgX2F0dGFj
aG1lbnQtPnNldEZpbGVXcmFwcGVyKGZpbGVXcmFwcGVyKTsKLSAgICBfYXR0YWNobWVudC0+dXBk
YXRlQXR0cmlidXRlcyhmaWxlU2l6ZSwgY29udGVudFR5cGUsIGZpbGVXcmFwcGVyLnByZWZlcnJl
ZEZpbGVuYW1lLCBbY2FwdHVyZWRCbG9jayA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxl
cildIChhdXRvIGVycm9yKSB7CisgICAgLy8gVGhpcyBmaWxlIHBhdGggbWVtYmVyIGlzIG9ubHkg
cG9wdWxhdGVkIHdoZW4gdGhlIGF0dGFjaG1lbnQgaXMgZ2VuZXJhdGVkIHVwb24gZHJvcHBpbmcg
ZmlsZXMuIFdoZW4gZGF0YSBpcyBzcGVjaWZpZWQgdmlhIE5TRmlsZVdyYXBwZXIKKyAgICAvLyBm
cm9tIHRoZSBTUEkgY2xpZW50LCB0aGUgY29ycmVzcG9uZGluZyBmaWxlIHBhdGggb2YgdGhlIGRh
dGEgaXMgdW5rbm93biwgaWYgaXQgZXZlbiBleGlzdHMgYXQgYWxsLgorICAgIF9hdHRhY2htZW50
LT5zZXRGaWxlUGF0aCh7IH0pOworICAgIF9hdHRhY2htZW50LT5zZXRGaWxlV3JhcHBlckFuZFVw
ZGF0ZUNvbnRlbnRUeXBlKGZpbGVXcmFwcGVyLCBjb250ZW50VHlwZSk7CisgICAgX2F0dGFjaG1l
bnQtPnVwZGF0ZUF0dHJpYnV0ZXMoW2NhcHR1cmVkQmxvY2sgPSBtYWtlQmxvY2tQdHIoY29tcGxl
dGlvbkhhbmRsZXIpXSAoYXV0byBlcnJvcikgewogICAgICAgICBpZiAoIWNhcHR1cmVkQmxvY2sp
CiAgICAgICAgICAgICByZXR1cm47CiAKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwCmluZGV4IDRiNjEwNGRiYTU2NDZlMTVkOTgzNmEyMWIzNTA5OTBlMGYwYWRhNGIuLjYy
MmExZWM3YWE2ZDYwYTUwYTk1MDg3MzlmMWJiNTdjNGIzM2MxYWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcApAQCAtNzc1MiwyMSArNzc1MiwxNyBAQCBSZWZQdHI8
QVBJOjpBdHRhY2htZW50PiBXZWJQYWdlUHJveHk6OmF0dGFjaG1lbnRGb3JJZGVudGlmaWVyKGNv
bnN0IFN0cmluZyYgaWRlbgogICAgIHJldHVybiBtX2F0dGFjaG1lbnRJZGVudGlmaWVyVG9BdHRh
Y2htZW50TWFwLmdldChpZGVudGlmaWVyKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6Omluc2Vy
dEF0dGFjaG1lbnQoUmVmPEFQSTo6QXR0YWNobWVudD4mJiBhdHRhY2htZW50LCBjb25zdCBBdHRh
Y2htZW50RGlzcGxheU9wdGlvbnMmIG9wdGlvbnMsIHVpbnQ2NF90IGZpbGVTaXplLCBjb25zdCBT
dHJpbmcmIGZpbGVuYW1lLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gY29udGVudFR5cGUsIEZ1bmN0
aW9uPHZvaWQoQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2spCit2b2lkIFdlYlBhZ2VQ
cm94eTo6aW5zZXJ0QXR0YWNobWVudChSZWY8QVBJOjpBdHRhY2htZW50PiYmIGF0dGFjaG1lbnQs
IGNvbnN0IEF0dGFjaG1lbnREaXNwbGF5T3B0aW9ucyYgb3B0aW9ucywgRnVuY3Rpb248dm9pZChD
YWxsYmFja0Jhc2U6OkVycm9yKT4mJiBjYWxsYmFjaykKIHsKICAgICBpZiAoIWlzVmFsaWQoKSkg
ewogICAgICAgICBjYWxsYmFjayhDYWxsYmFja0Jhc2U6OkVycm9yOjpPd25lcldhc0ludmFsaWRh
dGVkKTsKICAgICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChjb250ZW50VHlwZSkKLSAg
ICAgICAgYXR0YWNobWVudC0+c2V0Q29udGVudFR5cGUoKmNvbnRlbnRUeXBlKTsKLQogICAgIGF1
dG8gYXR0YWNobWVudElkZW50aWZpZXIgPSBhdHRhY2htZW50LT5pZGVudGlmaWVyKCk7Ci0gICAg
bV9hdHRhY2htZW50SWRlbnRpZmllclRvQXR0YWNobWVudE1hcC5zZXQoYXR0YWNobWVudElkZW50
aWZpZXIsIFdURk1vdmUoYXR0YWNobWVudCkpOwotCiAgICAgYXV0byBjYWxsYmFja0lEID0gbV9j
YWxsYmFja3MucHV0KFdURk1vdmUoY2FsbGJhY2spLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJh
Y2tncm91bmRBY3Rpdml0eVRva2VuKCkpOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6
V2ViUGFnZTo6SW5zZXJ0QXR0YWNobWVudChhdHRhY2htZW50SWRlbnRpZmllciwgb3B0aW9ucywg
ZmlsZVNpemUsIGZpbGVuYW1lLCBjb250ZW50VHlwZSwgY2FsbGJhY2tJRCksIG1fcGFnZUlEKTsK
KyAgICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Okluc2VydEF0dGFjaG1lbnQo
YXR0YWNobWVudElkZW50aWZpZXIsIG9wdGlvbnMsIGF0dGFjaG1lbnQtPmZpbGVTaXplRm9yRGlz
cGxheSgpLCBhdHRhY2htZW50LT5maWxlTmFtZSgpLCBhdHRhY2htZW50LT5jb250ZW50VHlwZSgp
LCBjYWxsYmFja0lEKSwgbV9wYWdlSUQpOworICAgIG1fYXR0YWNobWVudElkZW50aWZpZXJUb0F0
dGFjaG1lbnRNYXAuc2V0KGF0dGFjaG1lbnRJZGVudGlmaWVyLCBXVEZNb3ZlKGF0dGFjaG1lbnQp
KTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnNldEF0dGFjaG1lbnREaXNwbGF5T3B0aW9ucyhj
b25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIEF0dGFjaG1lbnREaXNwbGF5T3B0aW9ucyBvcHRpb25z
LCBGdW5jdGlvbjx2b2lkKENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrKQpAQCAtNzc4
MCw3ICs3Nzc2LDcgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnNldEF0dGFjaG1lbnREaXNwbGF5T3B0
aW9ucyhjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIEF0dGFjaG0KICAgICBtX3Byb2Nlc3MtPnNl
bmQoTWVzc2FnZXM6OldlYlBhZ2U6OlNldEF0dGFjaG1lbnREaXNwbGF5T3B0aW9ucyhpZGVudGlm
aWVyLCBvcHRpb25zLCBjYWxsYmFja0lEKSwgbV9wYWdlSUQpOwogfQogCi12b2lkIFdlYlBhZ2VQ
cm94eTo6dXBkYXRlQXR0YWNobWVudEF0dHJpYnV0ZXMoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVy
LCB1aW50NjRfdCBmaWxlU2l6ZSwgc3RkOjpvcHRpb25hbDxTdHJpbmc+JiYgbmV3Q29udGVudFR5
cGUsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiYmIG5ld0ZpbGVuYW1lLCBGdW5jdGlvbjx2b2lkKENh
bGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrKQordm9pZCBXZWJQYWdlUHJveHk6OnVwZGF0
ZUF0dGFjaG1lbnRBdHRyaWJ1dGVzKGNvbnN0IEFQSTo6QXR0YWNobWVudCYgYXR0YWNobWVudCwg
RnVuY3Rpb248dm9pZChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJiBjYWxsYmFjaykKIHsKICAgICBp
ZiAoIWlzVmFsaWQoKSkgewogICAgICAgICBjYWxsYmFjayhDYWxsYmFja0Jhc2U6OkVycm9yOjpP
d25lcldhc0ludmFsaWRhdGVkKTsKQEAgLTc3ODgsNyArNzc4NCw5IEBAIHZvaWQgV2ViUGFnZVBy
b3h5Ojp1cGRhdGVBdHRhY2htZW50QXR0cmlidXRlcyhjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIs
IHVpbnQ2NF90CiAgICAgfQogCiAgICAgYXV0byBjYWxsYmFja0lEID0gbV9jYWxsYmFja3MucHV0
KFdURk1vdmUoY2FsbGJhY2spLCBtX3Byb2Nlc3MtPnRocm90dGxlcigpLmJhY2tncm91bmRBY3Rp
dml0eVRva2VuKCkpOwotICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6VXBk
YXRlQXR0YWNobWVudEF0dHJpYnV0ZXMoaWRlbnRpZmllciwgZmlsZVNpemUsIFdURk1vdmUobmV3
Q29udGVudFR5cGUpLCBXVEZNb3ZlKG5ld0ZpbGVuYW1lKSwgY2FsbGJhY2tJRCksIG1fcGFnZUlE
KTsKKyAgICBhdXRvIG5hbWUgPSBhdHRhY2htZW50LmZpbGVOYW1lKCk7CisgICAgYXV0byBvcHRp
b25hbE5hbWUgPSBuYW1lLmlzTnVsbCgpID8gc3RkOjpudWxsb3B0IDogc3RkOjpvcHRpb25hbDxX
VEY6OlN0cmluZz4geyBuYW1lIH07CisgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQ
YWdlOjpVcGRhdGVBdHRhY2htZW50QXR0cmlidXRlcyhhdHRhY2htZW50LmlkZW50aWZpZXIoKSwg
YXR0YWNobWVudC5maWxlU2l6ZUZvckRpc3BsYXkoKSwgYXR0YWNobWVudC5jb250ZW50VHlwZSgp
LCBXVEZNb3ZlKG9wdGlvbmFsTmFtZSksIGNhbGxiYWNrSUQpLCBtX3BhZ2VJRCk7CiB9CiAKIHZv
aWQgV2ViUGFnZVByb3h5OjpyZWdpc3RlckF0dGFjaG1lbnRJZGVudGlmaWVyRnJvbURhdGEoY29u
c3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlLCBjb25zdCBT
dHJpbmcmIHByZWZlcnJlZEZpbGVOYW1lLCBjb25zdCBJUEM6OkRhdGFSZWZlcmVuY2UmIGRhdGEp
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaCBiL1Nv
dXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCmluZGV4IDJlYjI0MWVmN2E4M2I0
ZDQ2NDYyZTE4M2EwMDYwZDI4YzVhZGNhZDMuLjcxOTEzYWM1Zjg5NDgyYWUwODk3MGQ3NzIzOTgw
NjJhNzlkNmUxOWEgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQ
cm94eS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oCkBAIC0x
MzE5LDkgKzEzMTksOSBAQCBwdWJsaWM6CiAKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5U
KQogICAgIFJlZlB0cjxBUEk6OkF0dGFjaG1lbnQ+IGF0dGFjaG1lbnRGb3JJZGVudGlmaWVyKGNv
bnN0IFN0cmluZyYgaWRlbnRpZmllcikgY29uc3Q7Ci0gICAgdm9pZCBpbnNlcnRBdHRhY2htZW50
KFJlZjxBUEk6OkF0dGFjaG1lbnQ+JiYsIGNvbnN0IFdlYkNvcmU6OkF0dGFjaG1lbnREaXNwbGF5
T3B0aW9ucyYsIHVpbnQ2NF90IGZpbGVTaXplLCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBzdGQ6
Om9wdGlvbmFsPFN0cmluZz4gY29udGVudFR5cGUsIEZ1bmN0aW9uPHZvaWQoQ2FsbGJhY2tCYXNl
OjpFcnJvcik+JiYpOworICAgIHZvaWQgaW5zZXJ0QXR0YWNobWVudChSZWY8QVBJOjpBdHRhY2ht
ZW50PiYmLCBjb25zdCBXZWJDb3JlOjpBdHRhY2htZW50RGlzcGxheU9wdGlvbnMmLCBGdW5jdGlv
bjx2b2lkKENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsKICAgICB2b2lkIHNldEF0dGFjaG1lbnRE
aXNwbGF5T3B0aW9ucyhjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIFdlYkNvcmU6OkF0dGFjaG1l
bnREaXNwbGF5T3B0aW9ucywgRnVuY3Rpb248dm9pZChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7
Ci0gICAgdm9pZCB1cGRhdGVBdHRhY2htZW50QXR0cmlidXRlcyhjb25zdCBTdHJpbmcmIGlkZW50
aWZpZXIsIHVpbnQ2NF90IGZpbGVTaXplLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4mJiBuZXdDb250
ZW50VHlwZSwgc3RkOjpvcHRpb25hbDxTdHJpbmc+JiYgbmV3RmlsZW5hbWUsIEZ1bmN0aW9uPHZv
aWQoQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYpOworICAgIHZvaWQgdXBkYXRlQXR0YWNobWVudEF0
dHJpYnV0ZXMoY29uc3QgQVBJOjpBdHRhY2htZW50JiwgRnVuY3Rpb248dm9pZChDYWxsYmFja0Jh
c2U6OkVycm9yKT4mJik7CiAjZW5kaWYKIAogI2lmIEVOQUJMRShBUFBMSUNBVElPTl9NQU5JRkVT
VCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2Uu
Y3BwIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKaW5kZXgg
Y2VhNDAxYWMwMDg5OWQxZWIxNjgzNTBjMTBlZDA4YWVlZjRkMGRhOC4uYmY2NmM1ZmE4ZDMwNDY3
NDdiMWFkYjQ1ZjhjZGNjOTY1NjViZmEzZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5jcHAKQEAgLTYwNjYsMTAgKzYwNjYsMTAgQEAgdm9pZCBXZWJQYWdl
OjpzdG9yYWdlQWNjZXNzUmVzcG9uc2UoYm9vbCB3YXNHcmFudGVkLCB1aW50NjRfdCBjb250ZXh0
SWQpCiAKICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQogCi12b2lkIFdlYlBhZ2U6Omlu
c2VydEF0dGFjaG1lbnQoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBBdHRhY2htZW50
RGlzcGxheU9wdGlvbnMmIG9wdGlvbnMsIHVpbnQ2NF90IGZpbGVTaXplLCBjb25zdCBTdHJpbmcm
IGZpbGVOYW1lLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gY29udGVudFR5cGUsIENhbGxiYWNrSUQg
Y2FsbGJhY2tJRCkKK3ZvaWQgV2ViUGFnZTo6aW5zZXJ0QXR0YWNobWVudChjb25zdCBTdHJpbmcm
IGlkZW50aWZpZXIsIGNvbnN0IEF0dGFjaG1lbnREaXNwbGF5T3B0aW9ucyYgb3B0aW9ucywgc3Rk
OjpvcHRpb25hbDx1aW50NjRfdD4mJiBmaWxlU2l6ZSwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwg
Y29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogewogICAg
IGF1dG8mIGZyYW1lID0gbV9wYWdlLT5mb2N1c0NvbnRyb2xsZXIoKS5mb2N1c2VkT3JNYWluRnJh
bWUoKTsKLSAgICBmcmFtZS5lZGl0b3IoKS5pbnNlcnRBdHRhY2htZW50KGlkZW50aWZpZXIsIG9w
dGlvbnMsIGZpbGVTaXplLCBmaWxlTmFtZSwgV1RGTW92ZShjb250ZW50VHlwZSkpOworICAgIGZy
YW1lLmVkaXRvcigpLmluc2VydEF0dGFjaG1lbnQoaWRlbnRpZmllciwgb3B0aW9ucywgV1RGTW92
ZShmaWxlU2l6ZSksIGZpbGVOYW1lLCBjb250ZW50VHlwZSk7CiAgICAgc2VuZChNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpWb2lkQ2FsbGJhY2soY2FsbGJhY2tJRCkpOwogfQogCkBAIC02MDc4LDEx
ICs2MDc4LDExIEBAIHZvaWQgV2ViUGFnZTo6c2V0QXR0YWNobWVudERpc3BsYXlPcHRpb25zKGNv
bnN0IFN0cmluZyYsIGNvbnN0IEF0dGFjaG1lbnREaXNwbGF5CiAgICAgc2VuZChNZXNzYWdlczo6
V2ViUGFnZVByb3h5OjpWb2lkQ2FsbGJhY2soY2FsbGJhY2tJRCkpOwogfQogCi12b2lkIFdlYlBh
Z2U6OnVwZGF0ZUF0dGFjaG1lbnRBdHRyaWJ1dGVzKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwg
dWludDY0X3QgZmlsZVNpemUsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBuZXdDb250ZW50VHlwZSwg
c3RkOjpvcHRpb25hbDxTdHJpbmc+IG5ld0ZpbGVuYW1lLCBDYWxsYmFja0lEIGNhbGxiYWNrSUQp
Cit2b2lkIFdlYlBhZ2U6OnVwZGF0ZUF0dGFjaG1lbnRBdHRyaWJ1dGVzKGNvbnN0IFN0cmluZyYg
aWRlbnRpZmllciwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4mJiBmaWxlU2l6ZSwgY29uc3QgU3Ry
aW5nJiBjb250ZW50VHlwZSwgc3RkOjpvcHRpb25hbDxTdHJpbmc+JiYgbmV3RmlsZW5hbWUsIENh
bGxiYWNrSUQgY2FsbGJhY2tJRCkKIHsKICAgICBpZiAoYXV0byBhdHRhY2htZW50ID0gYXR0YWNo
bWVudEVsZW1lbnRXaXRoSWRlbnRpZmllcihpZGVudGlmaWVyKSkgewogICAgICAgICBhdHRhY2ht
ZW50LT5kb2N1bWVudCgpLnVwZGF0ZUxheW91dCgpOwotICAgICAgICBhdHRhY2htZW50LT51cGRh
dGVBdHRyaWJ1dGVzKGZpbGVTaXplLCBXVEZNb3ZlKG5ld0NvbnRlbnRUeXBlKSwgV1RGTW92ZShu
ZXdGaWxlbmFtZSkpOworICAgICAgICBhdHRhY2htZW50LT51cGRhdGVBdHRyaWJ1dGVzKFdURk1v
dmUoZmlsZVNpemUpLCBjb250ZW50VHlwZSwgV1RGTW92ZShuZXdGaWxlbmFtZSkpOwogICAgIH0K
ICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlZvaWRDYWxsYmFjayhjYWxsYmFja0lE
KSk7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQ
YWdlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKaW5kZXgg
NmJlMWNiZmM3NmMzMzY5NzZmYjFmMjFkNDA5MWFkNzYxNmVkOGYwMi4uNGQ0YWU4NTFiMjY1ZWNi
MzllMGY1ZWVhNDBhZTAxMDY5ZDQ0MDA4MSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuaApAQCAtMTA3NSw5ICsxMDc1LDkgQEAgcHVibGljOgogI2VuZGlmCiAK
ICNpZiBFTkFCTEUoQVRUQUNITUVOVF9FTEVNRU5UKQotICAgIHZvaWQgaW5zZXJ0QXR0YWNobWVu
dChjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6OkF0dGFjaG1lbnREaXNw
bGF5T3B0aW9ucyYsIHVpbnQ2NF90IGZpbGVTaXplLCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBz
dGQ6Om9wdGlvbmFsPFN0cmluZz4gY29udGVudFR5cGUsIENhbGxiYWNrSUQpOworICAgIHZvaWQg
aW5zZXJ0QXR0YWNobWVudChjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IFdlYkNvcmU6
OkF0dGFjaG1lbnREaXNwbGF5T3B0aW9ucyYsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+JiYgZmls
ZVNpemUsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUs
IENhbGxiYWNrSUQpOwogICAgIHZvaWQgc2V0QXR0YWNobWVudERpc3BsYXlPcHRpb25zKGNvbnN0
IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgV2ViQ29yZTo6QXR0YWNobWVudERpc3BsYXlPcHRp
b25zJiwgQ2FsbGJhY2tJRCk7Ci0gICAgdm9pZCB1cGRhdGVBdHRhY2htZW50QXR0cmlidXRlcyhj
b25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIHVpbnQ2NF90IGZpbGVTaXplLCBzdGQ6Om9wdGlvbmFs
PFN0cmluZz4gbmV3Q29udGVudFR5cGUsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBuZXdGaWxlbmFt
ZSwgQ2FsbGJhY2tJRCk7CisgICAgdm9pZCB1cGRhdGVBdHRhY2htZW50QXR0cmlidXRlcyhjb25z
dCBTdHJpbmcmIGlkZW50aWZpZXIsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+JiYgZmlsZVNpemUs
IGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiYmIG5ld0Zp
bGVuYW1lLCBDYWxsYmFja0lEKTsKICNlbmRpZgogCiAjaWYgRU5BQkxFKEFQUExJQ0FUSU9OX01B
TklGRVNUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2Vi
UGFnZS5tZXNzYWdlcy5pbiBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBh
Z2UubWVzc2FnZXMuaW4KaW5kZXggOTZlNDg3ZWU2MmY1YTE0NmRhZGE4N2VkOWE4ZTE5YWY0ZWRk
YmYxYS4uMjg5YWJkYTg3ZjA1M2I0YmFjMjViZWFkMDU1MjQ2NDdkOTc0NjU5ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgor
KysgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmlu
CkBAIC01MTAsOSArNTEwLDkgQEAgbWVzc2FnZXMgLT4gV2ViUGFnZSBMZWdhY3lSZWNlaXZlciB7
CiAjZW5kaWYKIAogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCi0gICAgSW5zZXJ0QXR0
YWNobWVudChTdHJpbmcgaWRlbnRpZmllciwgc3RydWN0IFdlYkNvcmU6OkF0dGFjaG1lbnREaXNw
bGF5T3B0aW9ucyBvcHRpb25zLCB1aW50NjRfdCBmaWxlU2l6ZSwgU3RyaW5nIGZpbGVOYW1lLCBz
dGQ6Om9wdGlvbmFsPFN0cmluZz4gY29udGVudFR5cGUsIFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxs
YmFja0lEKQorICAgIEluc2VydEF0dGFjaG1lbnQoU3RyaW5nIGlkZW50aWZpZXIsIHN0cnVjdCBX
ZWJDb3JlOjpBdHRhY2htZW50RGlzcGxheU9wdGlvbnMgb3B0aW9ucywgc3RkOjpvcHRpb25hbDx1
aW50NjRfdD4gZmlsZVNpemUsIFN0cmluZyBmaWxlTmFtZSwgU3RyaW5nIGNvbnRlbnRUeXBlLCBX
ZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKICAgICBTZXRBdHRhY2htZW50RGlzcGxheU9w
dGlvbnMoU3RyaW5nIGlkZW50aWZpZXIsIHN0cnVjdCBXZWJDb3JlOjpBdHRhY2htZW50RGlzcGxh
eU9wdGlvbnMgb3B0aW9ucywgV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCi0gICAgVXBk
YXRlQXR0YWNobWVudEF0dHJpYnV0ZXMoU3RyaW5nIGlkZW50aWZpZXIsIHVpbnQ2NF90IGZpbGVT
aXplLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gbmV3Q29udGVudFR5cGUsIHN0ZDo6b3B0aW9uYWw8
U3RyaW5nPiBuZXdGaWxlbmFtZSwgV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCisgICAg
VXBkYXRlQXR0YWNobWVudEF0dHJpYnV0ZXMoU3RyaW5nIGlkZW50aWZpZXIsIHN0ZDo6b3B0aW9u
YWw8dWludDY0X3Q+IGZpbGVTaXplLCBTdHJpbmcgbmV3Q29udGVudFR5cGUsIHN0ZDo6b3B0aW9u
YWw8U3RyaW5nPiBuZXdGaWxlbmFtZSwgV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiAj
ZW5kaWYKIAogI2lmIEVOQUJMRShBUFBMSUNBVElPTl9NQU5JRkVTVCkKZGlmZiAtLWdpdCBhL1Rv
b2xzL0NoYW5nZUxvZyBiL1Rvb2xzL0NoYW5nZUxvZwppbmRleCA4ZmQ2NTZlOGZjMDlkYjhiYTYz
ZDg4Yjc2NGUyYWJjOGM2MzEzZDA4Li43YzI3Y2Y0MzIwMjM5MzZlY2Q2MWQ1OTQxNTNlMjJiMDIx
ODlkODRkIDEwMDY0NAotLS0gYS9Ub29scy9DaGFuZ2VMb2cKKysrIGIvVG9vbHMvQ2hhbmdlTG9n
CkBAIC0xLDMgKzEsNDYgQEAKKzIwMTgtMDgtMjUgIFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2ll
aEBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29hXSBFeGNlcHRpb24gKGZpbGVUeXBlICdkeW4u
YWdxOHUnIGlzIG5vdCBhIHZhbGlkIFVUSSkgcmFpc2VkIHdoZW4gZHJhZ2dpbmcgYW4gYXR0YWNo
bWVudCB3aG9zZSBmaWxlIHdyYXBwZXIgaXMgYSBkaXJlY3RvcnkKKyAgICAgICAgaHR0cHM6Ly9i
dWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE4ODkwMworICAgICAgICA8cmRhcjovL3By
b2JsZW0vNDM3MDI5OTM+CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisK
KyAgICAgICAgQWRkIHR3byBBUEkgdGVzdHMgYW5kIGFkanVzdCBleGlzdGluZyBXS0F0dGFjaG1l
bnQgQVBJIHRlc3RzLiBUaGUgbmV3IHRlc3RzIGV4ZXJjaXNlIHRoZSBmb2xsb3dpbmcgc2NlbmFy
aW9zLCBpbgorICAgICAgICBib3RoIGlPUyBhbmQgbWFjT1M6CisgICAgICAgIOKAoiAgICAgICBE
cm9wcGluZyBhIGZvbGRlciBhcyBhbiBhdHRhY2htZW50IGVsZW1lbnQsIGFuZCB0aGVuIG1vdmlu
ZyB0aGF0IGF0dGFjaG1lbnQgZWxlbWVudCBpbiB0aGUgZG9jdW1lbnQgYnkKKyAgICAgICAgICAg
ICAgICBkcmFnZ2luZyBhbmQgZHJvcHBpbmcuCisgICAgICAgIOKAoiAgICAgICBVc2luZyBXS1dl
YlZpZXcgU1BJIHRvIGluc2VydCBhIGZvbGRlciBhbmQgYSBmaWxlIHdpdGggYW4gdW5rbm93biBl
eHRlbnNpb24sIGFuZCB0aGVuIHVzaW5nIG1vcmUKKyAgICAgICAgICAgICAgICBfV0tBdHRhY2ht
ZW50IFNQSSB0byBzd2FwIHRoZSBhdHRhY2htZW50cycgYmFja2luZyBmaWxlIHdyYXBwZXJzLgor
CisgICAgICAgICogVGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0F0dGFjaG1lbnRU
ZXN0cy5tbToKKyAgICAgICAgKHJ1blRlc3RXaXRoVGVtcG9yYXJ5Rm9sZGVyKToKKworICAgICAg
ICBBZGQgYSBoZWxwZXIgZnVuY3Rpb24gdG8gcnVuIGEgdGVzdCB3aXRoIGEgbmV3IGZvbGRlciBw
YXRoLCBjcmVhdGVkIGluIHRoZSB0ZW1wb3JhcnkgZGlyZWN0b3J5IGFuZCBwb3B1bGF0ZWQKKyAg
ICAgICAgd2l0aCBzb21lIHNhbXBsZSBjb250ZW50LiBUaGlzIGZvbGRlciBpcyBkZWxldGVkIGFm
dGVyIHJ1bm5pbmcgdGhlIHRlc3QuCisKKyAgICAgICAgKHNpbXVsYXRlRm9sZGVyRHJhZ1dpdGhV
UkwpOgorCisgICAgICAgIEFkZCBhIGhlbHBlciBmdW5jdGlvbiB0byBwcmVwYXJlIGEgZ2l2ZW4g
RHJhZ0FuZERyb3BTaW11bGF0b3IgZm9yIHNpbXVsYXRpbmcgYSBkcmFnZ2VkIGZvbGRlciBmcm9t
IGEgc291cmNlCisgICAgICAgIGV4dGVybmFsIHRvIHRoZSB3ZWIgdmlldy4KKworICAgICAgICAo
VGVzdFdlYktpdEFQSTo6VEVTVCk6CisKKyAgICAgICAgQWRkIG5ldyBBUEkgdGVzdHMsIGFuZCBh
ZGp1c3QgZXhpc3RpbmcgdGVzdHMgdG8gcmVmbGVjdCBuZXcgLXNldEZpbGVXcmFwcGVyOuKApjog
YmVoYXZpb3IuIFNwZWNpZmljYWxseSwKKyAgICAgICAgQ2hhbmdlQXR0YWNobWVudERhdGFBbmRG
aWxlSW5mb3JtYXRpb24gcHJldmlvdXNseSByZXF1aXJlZCB0aGF0IGNoYW5naW5nIGEgX1dLQXR0
YWNobWVudCdzIE5TRmlsZVdyYXBwZXIgd291bGQKKyAgICAgICAgcHJlc2VydmUgdGhlIHByZXZp
b3VzIE5TRmlsZVdyYXBwZXIncyBwcmVmZXJyZWQgbmFtZSBpZiB0aGUgbmV3IGZpbGUgd3JhcHBl
ciBkb2VzIG5vdCBoYXZlIGEgcHJlZmVycmVkIG5hbWUsIGJ1dAorICAgICAgICB0aGlzIHF1aXJr
IGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2NvY29h
L0RyYWdBbmREcm9wU2ltdWxhdG9yLmg6CisKKyAgICAgICAgQWRkIGEgbmV3IGhvb2sgdG8gY2xl
YXIgYW55IGV4dGVybmFsIGRyYWcgaW5mb3JtYXRpb24gb24gYW4gZXhpc3RpbmcgRHJhZ0FuZERy
b3BTaW11bGF0b3IuIFRoaXMgaXMgY29udmVuaWVudAorICAgICAgICB3aGVuIHVzaW5nIHRoZSBz
YW1lIERyYWdBbmREcm9wU2ltdWxhdG9yIHRvIHBlcmZvcm0gbXVsdGlwbGUgZHJhZ3MgaW4gYSBz
aW5nbGUgdGVzdC4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvaW9zL0RyYWdBbmREcm9wU2lt
dWxhdG9ySU9TLm1tOgorICAgICAgICAoLVtEcmFnQW5kRHJvcFNpbXVsYXRvciBjbGVhckV4dGVy
bmFsRHJhZ0luZm9ybWF0aW9uXSk6CisgICAgICAgICogVGVzdFdlYktpdEFQSS9tYWMvRHJhZ0Fu
ZERyb3BTaW11bGF0b3JNYWMubW06CisgICAgICAgICgtW0RyYWdBbmREcm9wU2ltdWxhdG9yIGNs
ZWFyRXh0ZXJuYWxEcmFnSW5mb3JtYXRpb25dKToKKwogMjAxOC0wOC0yNSAgV2Vuc29uIEhzaWVo
ICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KIAogICAgICAgICBbQXR0YWNobWVudCBTdXBwb3J0
XSBEcm9wcGluZyBhbmQgcGFzdGluZyBpbWFnZXMgc2hvdWxkIGluc2VydCBpbmxpbmUgaW1hZ2Ug
ZWxlbWVudHMgd2l0aCBfV0tBdHRhY2htZW50cwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0F0dGFjaG1lbnRUZXN0cy5tbSBiL1Rvb2xzL1Rlc3RX
ZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tBdHRhY2htZW50VGVzdHMubW0KaW5kZXggZGQy
Njg3OTQxZjg2MzYzMmYxMTVmZjI5YzVmYjI5N2NkMjMwMzljOC4uYzM4ZjdmZmIzY2FkNjdhM2Zi
YmNhNWRhNGU5NDg2YjY5MjU2ZTc2NyAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9XS0F0dGFjaG1lbnRUZXN0cy5tbQorKysgYi9Ub29scy9UZXN0V2Vi
S2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLQXR0YWNobWVudFRlc3RzLm1tCkBAIC0zOTgsNiAr
Mzk4LDM3IEBAIHN0YXRpYyBOU0RhdGEgKnRlc3RQREZEYXRhKCkKIAogQGVuZAogCitzdGF0aWMg
dm9pZCBydW5UZXN0V2l0aFRlbXBvcmFyeUZvbGRlcih2b2lkKF5ydW5UZXN0KShOU1VSTCAqZm9s
ZGVyVVJMKSkKK3sKKyAgICBOU0ZpbGVNYW5hZ2VyICpkZWZhdWx0TWFuYWdlciA9IFtOU0ZpbGVN
YW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXTsKKyAgICBhdXRvIHRlbXBvcmFyeUZvbGRlciA9IHJldGFp
blB0cihbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOltOU1RlbXBvcmFyeURpcmVjdG9yeSgpIHN0cmlu
Z0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImZv
bGRlci0lQCIsIE5TVVVJRC5VVUlEXV0gaXNEaXJlY3Rvcnk6WUVTXSk7CisgICAgW2RlZmF1bHRN
YW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDp0ZW1wb3JhcnlGb2xkZXIuZ2V0KCkgZXJyb3I6bmlsXTsK
KyAgICBbZGVmYXVsdE1hbmFnZXIgY3JlYXRlRGlyZWN0b3J5QXRVUkw6dGVtcG9yYXJ5Rm9sZGVy
LmdldCgpIHdpdGhJbnRlcm1lZGlhdGVEaXJlY3RvcmllczpOTyBhdHRyaWJ1dGVzOm5pbCBlcnJv
cjpuaWxdOworICAgIFt0ZXN0SW1hZ2VEYXRhKCkgd3JpdGVUb1VSTDpbdGVtcG9yYXJ5Rm9sZGVy
LmdldCgpIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAImltYWdlLnBuZyIgaXNEaXJlY3Rv
cnk6Tk9dIGF0b21pY2FsbHk6WUVTXTsKKyAgICBbdGVzdFpJUERhdGEoKSB3cml0ZVRvVVJMOlt0
ZW1wb3JhcnlGb2xkZXIuZ2V0KCkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiYXJjaGl2
ZS56aXAiIGlzRGlyZWN0b3J5Ok5PXSBhdG9taWNhbGx5OllFU107CisgICAgQHRyeSB7CisgICAg
ICAgIHJ1blRlc3QodGVtcG9yYXJ5Rm9sZGVyLmdldCgpKTsKKyAgICB9IEBmaW5hbGx5IHsKKyAg
ICAgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSByZW1vdmVJdGVtQXRVUkw6dGVt
cG9yYXJ5Rm9sZGVyLmdldCgpIGVycm9yOm5pbF07CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBz
aW11bGF0ZUZvbGRlckRyYWdXaXRoVVJMKERyYWdBbmREcm9wU2ltdWxhdG9yICpzaW11bGF0b3Is
IE5TVVJMICpmb2xkZXJVUkwpCit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIFtzaW11bGF0b3Ig
d3JpdGVQcm9taXNlZEZpbGVzOkBbIGZvbGRlclVSTCBdXTsKKyNlbHNlCisgICAgYXV0byBmb2xk
ZXJQcm92aWRlciA9IGFkb3B0TlMoW1tOU0l0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAg
IFtmb2xkZXJQcm92aWRlciBzZXRTdWdnZXN0ZWROYW1lOmZvbGRlclVSTC5sYXN0UGF0aENvbXBv
bmVudF07CisgICAgW2ZvbGRlclByb3ZpZGVyIHNldFByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxl
OlVJUHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGVBdHRhY2htZW50XTsKKyAgICBbZm9sZGVyUHJv
dmlkZXIgcmVnaXN0ZXJGaWxlUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooTlNTdHJp
bmcgKilrVVRUeXBlRm9sZGVyIGZpbGVPcHRpb25zOjAgdmlzaWJpbGl0eTpOU0l0ZW1Qcm92aWRl
clJlcHJlc2VudGF0aW9uVmlzaWJpbGl0eUFsbCBsb2FkSGFuZGxlcjpbJl0gKHZvaWQoXmNvbXBs
ZXRpb24pKE5TVVJMICosIEJPT0wsIE5TRXJyb3IgKikpIC0+IE5TUHJvZ3Jlc3MgKiB7CisgICAg
ICAgIGNvbXBsZXRpb24oZm9sZGVyVVJMLCBOTywgbmlsKTsKKyAgICAgICAgcmV0dXJuIG5pbDsK
KyAgICB9XTsKKyAgICBzaW11bGF0b3IuZXh0ZXJuYWxJdGVtUHJvdmlkZXJzID0gQFsgZm9sZGVy
UHJvdmlkZXIuZ2V0KCkgXTsKKyNlbmRpZgorfQorCiAjcHJhZ21hIG1hcmsgLSBQbGF0Zm9ybSB0
ZXN0aW5nIGhlbHBlciBmdW5jdGlvbnMKIAogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTc0MCw2ICs3
NzEsODcgQEAgVEVTVChXS0F0dGFjaG1lbnRUZXN0cywgQXR0YWNobWVudERhdGFGb3JFbXB0eUZp
bGUpCiAgICAgW2F0dGFjaG1lbnQgZXhwZWN0UmVxdWVzdGVkRGF0YVRvQmU6W05TRGF0YSBkYXRh
XV07CiB9CiAKK1RFU1QoV0tBdHRhY2htZW50VGVzdHMsIERyb3BGb2xkZXJBc0F0dGFjaG1lbnRB
bmRNb3ZlQnlEcmFnZ2luZykKK3sKKyAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtb
V0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0pOworICAgIFtjb25maWd1cmF0aW9u
IF9zZXRBdHRhY2htZW50RWxlbWVudEVuYWJsZWQ6WUVTXTsKKworICAgIGF1dG8gc2ltdWxhdG9y
ID0gYWRvcHROUyhbW0RyYWdBbmREcm9wU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXdG
cmFtZTpOU01ha2VSZWN0KDAsIDAsIDQwMCwgNDAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRp
b24uZ2V0KCldKTsKKyAgICBbW3NpbXVsYXRvciB3ZWJWaWV3XSBzeW5jaHJvbm91c2x5TG9hZEhU
TUxTdHJpbmc6YXR0YWNobWVudEVkaXRpbmdUZXN0TWFya3VwXTsKKworICAgIHJ1blRlc3RXaXRo
VGVtcG9yYXJ5Rm9sZGVyKFtzaW11bGF0b3JdIChOU1VSTCAqZm9sZGVyVVJMKSB7CisgICAgICAg
IHNpbXVsYXRlRm9sZGVyRHJhZ1dpdGhVUkwoc2ltdWxhdG9yLmdldCgpLCBmb2xkZXJVUkwpOwor
ICAgICAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1ha2UoMCwgMCkgdG86Q0dQb2ludE1h
a2UoNTAsIDUwKV07CisKKyAgICAgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldyA9IFtzaW11bGF0
b3Igd2ViVmlld107CisgICAgICAgIGF1dG8gYXR0YWNobWVudCA9IHJldGFpblB0cihbc2ltdWxh
dG9yIGluc2VydGVkQXR0YWNobWVudHNdLmZpcnN0T2JqZWN0KTsKKyAgICAgICAgRVhQRUNUX1dL
X1NUUkVRKFthdHRhY2htZW50IHVuaXF1ZUlkZW50aWZpZXJdLCBbd2ViVmlldyBzdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYXR0YWNobWVudCcp
LnVuaXF1ZUlkZW50aWZpZXIiXSk7CisgICAgICAgIEVYUEVDVF9XS19TVFJFUSgoTlNTdHJpbmcg
KilrVVRUeXBlRGlyZWN0b3J5LCBbd2ViVmlldyB2YWx1ZU9mQXR0cmlidXRlOkAidHlwZSIgZm9y
UXVlcnlTZWxlY3RvcjpAImF0dGFjaG1lbnQiXSk7CisgICAgICAgIEVYUEVDVF9XS19TVFJFUShm
b2xkZXJVUkwubGFzdFBhdGhDb21wb25lbnQsIFt3ZWJWaWV3IHZhbHVlT2ZBdHRyaWJ1dGU6QCJ0
aXRsZSIgZm9yUXVlcnlTZWxlY3RvcjpAImF0dGFjaG1lbnQiXSk7CisKKyAgICAgICAgTlNGaWxl
V3JhcHBlciAqaW1hZ2UgPSBbYXR0YWNobWVudCBpbmZvXS5maWxlV3JhcHBlci5maWxlV3JhcHBl
cnNbQCJpbWFnZS5wbmciXTsKKyAgICAgICAgTlNGaWxlV3JhcHBlciAqYXJjaGl2ZSA9IFthdHRh
Y2htZW50IGluZm9dLmZpbGVXcmFwcGVyLmZpbGVXcmFwcGVyc1tAImFyY2hpdmUuemlwIl07Cisg
ICAgICAgIEVYUEVDVF9UUlVFKFtpbWFnZS5yZWd1bGFyRmlsZUNvbnRlbnRzIGlzRXF1YWxUb0Rh
dGE6dGVzdEltYWdlRGF0YSgpXSk7CisgICAgICAgIEVYUEVDVF9UUlVFKFthcmNoaXZlLnJlZ3Vs
YXJGaWxlQ29udGVudHMgaXNFcXVhbFRvRGF0YTp0ZXN0WklQRGF0YSgpXSk7CisKKyAgICAgICAg
W3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0OkAiZ2V0U2VsZWN0aW9uKCkuY29sbGFwc2VUb0Vu
ZCgpIiBjb21wbGV0aW9uSGFuZGxlcjpuaWxdOworICAgICAgICBbd2ViVmlldyBfZXhlY3V0ZUVk
aXRDb21tYW5kOkAiSW5zZXJ0UGFyYWdyYXBoIiBhcmd1bWVudDpuaWwgY29tcGxldGlvbjpuaWxd
OworICAgICAgICBbd2ViVmlldyBfZXhlY3V0ZUVkaXRDb21tYW5kOkAiSW5zZXJ0SFRNTCIgYXJn
dW1lbnQ6QCI8ZW0+Zm9vPC9lbT4iIGNvbXBsZXRpb246bmlsXTsKKyAgICAgICAgW3dlYlZpZXcg
X2V4ZWN1dGVFZGl0Q29tbWFuZDpAIkluc2VydFBhcmFncmFwaCIgYXJndW1lbnQ6bmlsIGNvbXBs
ZXRpb246bmlsXTsKKworICAgICAgICBbd2ViVmlldyBleHBlY3RFbGVtZW50VGFnOkAiQVRUQUNI
TUVOVCIgdG9Db21lQmVmb3JlOkAiRU0iXTsKKyAgICAgICAgW3NpbXVsYXRvciBjbGVhckV4dGVy
bmFsRHJhZ0luZm9ybWF0aW9uXTsKKyAgICAgICAgW3NpbXVsYXRvciBydW5Gcm9tOndlYlZpZXcu
YXR0YWNobWVudEVsZW1lbnRNaWRQb2ludCB0bzpDR1BvaW50TWFrZSgzMDAsIDMwMCldOworICAg
ICAgICBbd2ViVmlldyBleHBlY3RFbGVtZW50VGFnOkAiRU0iIHRvQ29tZUJlZm9yZTpAIkFUVEFD
SE1FTlQiXTsKKyAgICB9KTsKK30KKworVEVTVChXS0F0dGFjaG1lbnRUZXN0cywgSW5zZXJ0Rm9s
ZGVyQW5kRmlsZVdpdGhVbmtub3duRXh0ZW5zaW9uKQoreworICAgIGF1dG8gd2ViVmlldyA9IHdl
YlZpZXdGb3JUZXN0aW5nQXR0YWNobWVudHMoKTsKKyAgICBhdXRvIGZpbGUgPSBhZG9wdE5TKFtb
TlNGaWxlV3JhcHBlciBhbGxvY10gaW5pdFJlZ3VsYXJGaWxlV2l0aENvbnRlbnRzOnRlc3RIVE1M
RGF0YSgpXSk7CisgICAgW2ZpbGUgc2V0UHJlZmVycmVkRmlsZW5hbWU6QCJ0ZXN0LmZvb2JhciJd
OworICAgIGF1dG8gaW1hZ2UgPSBhZG9wdE5TKFtbTlNGaWxlV3JhcHBlciBhbGxvY10gaW5pdFJl
Z3VsYXJGaWxlV2l0aENvbnRlbnRzOnRlc3RJbWFnZURhdGEoKV0pOworICAgIGF1dG8gZG9jdW1l
bnQgPSBhZG9wdE5TKFtbTlNGaWxlV3JhcHBlciBhbGxvY10gaW5pdFJlZ3VsYXJGaWxlV2l0aENv
bnRlbnRzOnRlc3RQREZEYXRhKCldKTsKKyAgICBhdXRvIGZvbGRlciA9IGFkb3B0TlMoW1tOU0Zp
bGVXcmFwcGVyIGFsbG9jXSBpbml0RGlyZWN0b3J5V2l0aEZpbGVXcmFwcGVyczpAeyBAImltYWdl
LnBuZyI6IGltYWdlLmdldCgpLCBAImRvY3VtZW50LnBkZiI6IGRvY3VtZW50LmdldCgpIH1dKTsK
KyAgICBbZm9sZGVyIHNldFByZWZlcnJlZEZpbGVuYW1lOkAiZm9sZGVyIl07CisKKyAgICBSZXRh
aW5QdHI8X1dLQXR0YWNobWVudD4gZmlyc3RBdHRhY2htZW50OworICAgIFJldGFpblB0cjxfV0tB
dHRhY2htZW50PiBzZWNvbmRBdHRhY2htZW50OworICAgIHsKKyAgICAgICAgT2JzZXJ2ZUF0dGFj
aG1lbnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2ZXIod2ViVmlldy5nZXQoKSk7CisgICAgICAgIGZp
cnN0QXR0YWNobWVudCA9IFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlJbnNlcnRBdHRhY2htZW50V2l0
aEZpbGVXcmFwcGVyOmZpbGUuZ2V0KCkgY29udGVudFR5cGU6bmlsXTsKKyAgICAgICAgb2JzZXJ2
ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFsgXSwgQFsgZmlyc3RBdHRhY2htZW50LmdldCgp
IF0pOworICAgIH0KKyAgICB7CisgICAgICAgIE9ic2VydmVBdHRhY2htZW50VXBkYXRlc0ZvclNj
b3BlIG9ic2VydmVyKHdlYlZpZXcuZ2V0KCkpOworICAgICAgICBzZWNvbmRBdHRhY2htZW50ID0g
W3dlYlZpZXcgc3luY2hyb25vdXNseUluc2VydEF0dGFjaG1lbnRXaXRoRmlsZVdyYXBwZXI6Zm9s
ZGVyLmdldCgpIGNvbnRlbnRUeXBlOm5pbF07CisgICAgICAgIG9ic2VydmVyLmV4cGVjdEF0dGFj
aG1lbnRVcGRhdGVzKEBbIF0sIEBbIHNlY29uZEF0dGFjaG1lbnQuZ2V0KCkgXSk7CisgICAgfQor
CisgICAgYXV0byBjaGVja0F0dGFjaG1lbnRDb25zaXN0ZW5jeSA9IFt3ZWJWaWV3LCBmaWxlLCBm
b2xkZXJdIChfV0tBdHRhY2htZW50ICpleHBlY3RlZEZpbGVBdHRhY2htZW50LCBfV0tBdHRhY2ht
ZW50ICpleHBlY3RlZEZvbGRlckF0dGFjaG1lbnQpIHsKKyAgICAgICAgW3dlYlZpZXcgZXhwZWN0
RWxlbWVudENvdW50OjIgdGFnTmFtZTpAIkFUVEFDSE1FTlQiXTsKKyAgICAgICAgRVhQRUNUX1RS
VUUoVVRUeXBlQ29uZm9ybXNUbygoQ0ZTdHJpbmdSZWYpW3dlYlZpZXcgdmFsdWVPZkF0dHJpYnV0
ZTpAInR5cGUiIGZvclF1ZXJ5U2VsZWN0b3I6QCJhdHRhY2htZW50W3RpdGxlPWZvbGRlcl0iXSwg
a1VUVHlwZURpcmVjdG9yeSkpOworICAgICAgICBFWFBFQ1RfVFJVRShVVFR5cGVDb25mb3Jtc1Rv
KChDRlN0cmluZ1JlZilbd2ViVmlldyB2YWx1ZU9mQXR0cmlidXRlOkAidHlwZSIgZm9yUXVlcnlT
ZWxlY3RvcjpAImF0dGFjaG1lbnRbdGl0bGVePXRlc3RdIl0sIGtVVFR5cGVEYXRhKSk7CisgICAg
ICAgIEVYUEVDVF9XS19TVFJFUShleHBlY3RlZEZpbGVBdHRhY2htZW50LnVuaXF1ZUlkZW50aWZp
ZXIsIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5xdWVy
eVNlbGVjdG9yKCdhdHRhY2htZW50W3RpdGxlXj10ZXN0XScpLnVuaXF1ZUlkZW50aWZpZXIiXSk7
CisgICAgICAgIEVYUEVDVF9XS19TVFJFUShleHBlY3RlZEZvbGRlckF0dGFjaG1lbnQudW5pcXVl
SWRlbnRpZmllciwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3Vt
ZW50LnF1ZXJ5U2VsZWN0b3IoJ2F0dGFjaG1lbnRbdGl0bGU9Zm9sZGVyXScpLnVuaXF1ZUlkZW50
aWZpZXIiXSk7CisgICAgICAgIEVYUEVDVF9UUlVFKFtleHBlY3RlZEZpbGVBdHRhY2htZW50Lmlu
Zm8uZmlsZVdyYXBwZXIgaXNFcXVhbDpmaWxlLmdldCgpXSk7CisgICAgICAgIEVYUEVDVF9UUlVF
KFtleHBlY3RlZEZvbGRlckF0dGFjaG1lbnQuaW5mby5maWxlV3JhcHBlciBpc0VxdWFsOmZvbGRl
ci5nZXQoKV0pOworICAgIH07CisKKyAgICBjaGVja0F0dGFjaG1lbnRDb25zaXN0ZW5jeShmaXJz
dEF0dGFjaG1lbnQuZ2V0KCksIHNlY29uZEF0dGFjaG1lbnQuZ2V0KCkpOworCisgICAgeworICAg
ICAgICAvLyBTd2FwIHRoZSB0d28gYXR0YWNobWVudHMnIGZpbGUgd3JhcHBlcnMgd2l0aG91dCBj
cmVhdGluZyBvciBkZXN0cm95aW5nIGF0dGFjaG1lbnQgZWxlbWVudHMuCisgICAgICAgIE9ic2Vy
dmVBdHRhY2htZW50VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVyKHdlYlZpZXcuZ2V0KCkpOworICAg
ICAgICBbZmlyc3RBdHRhY2htZW50IHN5bmNocm9ub3VzbHlTZXRGaWxlV3JhcHBlcjpmb2xkZXIu
Z2V0KCkgbmV3Q29udGVudFR5cGU6bmlsIGVycm9yOm5pbF07CisgICAgICAgIFtzZWNvbmRBdHRh
Y2htZW50IHN5bmNocm9ub3VzbHlTZXRGaWxlV3JhcHBlcjpmaWxlLmdldCgpIG5ld0NvbnRlbnRU
eXBlOm5pbCBlcnJvcjpuaWxdOworICAgICAgICBvYnNlcnZlci5leHBlY3RBdHRhY2htZW50VXBk
YXRlcyhAWyBdLCBAWyBdKTsKKyAgICB9CisKKyAgICBjaGVja0F0dGFjaG1lbnRDb25zaXN0ZW5j
eShzZWNvbmRBdHRhY2htZW50LmdldCgpLCBmaXJzdEF0dGFjaG1lbnQuZ2V0KCkpOworfQorCiBU
RVNUKFdLQXR0YWNobWVudFRlc3RzLCBDaGFuZ2VBdHRhY2htZW50RGF0YUFuZEZpbGVJbmZvcm1h
dGlvbikKIHsKICAgICBhdXRvIHdlYlZpZXcgPSB3ZWJWaWV3Rm9yVGVzdGluZ0F0dGFjaG1lbnRz
KCk7CkBAIC03NjMsNyArODc1LDcgQEAgVEVTVChXS0F0dGFjaG1lbnRUZXN0cywgQ2hhbmdlQXR0
YWNobWVudERhdGFBbmRGaWxlSW5mb3JtYXRpb24pCiAgICAgICAgIG9ic2VydmVyLmV4cGVjdEF0
dGFjaG1lbnRVcGRhdGVzKEBbXSwgQFtdKTsKICAgICB9CiAgICAgewotICAgICAgICBSZXRhaW5Q
dHI8TlNEYXRhPiB0ZXh0RGF0YSA9IHRlc3RIVE1MRGF0YSgpOworICAgICAgICBSZXRhaW5QdHI8
TlNEYXRhPiB0ZXh0RGF0YSA9IFtAIkhlbGxvIHdvcmxkIiBkYXRhVXNpbmdFbmNvZGluZzpOU1VU
RjhTdHJpbmdFbmNvZGluZ107CiAgICAgICAgIE9ic2VydmVBdHRhY2htZW50VXBkYXRlc0ZvclNj
b3BlIG9ic2VydmVyKHdlYlZpZXcuZ2V0KCkpOwogICAgICAgICAvLyBUaGUgbmV3IGNvbnRlbnQg
dHlwZSBzaG91bGQgYmUgaW5mZXJyZWQgZnJvbSB0aGUgZmlsZSBuYW1lLgogICAgICAgICBbYXR0
YWNobWVudCBzeW5jaHJvbm91c2x5U2V0RGF0YTp0ZXh0RGF0YS5nZXQoKSBuZXdDb250ZW50VHlw
ZTpuaWwgbmV3RmlsZW5hbWU6QCJmb28udHh0IiBlcnJvcjpuaWxdOwpAQCAtNzczLDEzICs4ODUs
MTMgQEAgVEVTVChXS0F0dGFjaG1lbnRUZXN0cywgQ2hhbmdlQXR0YWNobWVudERhdGFBbmRGaWxl
SW5mb3JtYXRpb24pCiAgICAgICAgIG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBb
XSwgQFtdKTsKICAgICB9CiAgICAgewotICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiBzZWNvbmRU
ZXh0RGF0YSA9IFtAIkhlbGxvIHdvcmxkIiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdF
bmNvZGluZ107CisgICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGh0bWxEYXRhID0gdGVzdEhUTUxE
YXRhKCk7CiAgICAgICAgIE9ic2VydmVBdHRhY2htZW50VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVy
KHdlYlZpZXcuZ2V0KCkpOwogICAgICAgICAvLyBCb3RoIHRoZSBwcmV2aW91cyBmaWxlIG5hbWUg
YW5kIHR5cGUgc2hvdWxkIGJlIGluZmVycmVkLgotICAgICAgICBbYXR0YWNobWVudCBzeW5jaHJv
bm91c2x5U2V0RGF0YTpzZWNvbmRUZXh0RGF0YS5nZXQoKSBuZXdDb250ZW50VHlwZTpuaWwgbmV3
RmlsZW5hbWU6bmlsIGVycm9yOm5pbF07Ci0gICAgICAgIFthdHRhY2htZW50IGV4cGVjdFJlcXVl
c3RlZERhdGFUb0JlOnNlY29uZFRleHREYXRhLmdldCgpXTsKLSAgICAgICAgRVhQRUNUX1dLX1NU
UkVRKEAiZm9vLnR4dCIsIFt3ZWJWaWV3IHZhbHVlT2ZBdHRyaWJ1dGU6QCJ0aXRsZSIgZm9yUXVl
cnlTZWxlY3RvcjpAImF0dGFjaG1lbnQiXSk7Ci0gICAgICAgIEVYUEVDVF9XS19TVFJFUShAInRl
eHQvcGxhaW4iLCBbd2ViVmlldyB2YWx1ZU9mQXR0cmlidXRlOkAidHlwZSIgZm9yUXVlcnlTZWxl
Y3RvcjpAImF0dGFjaG1lbnQiXSk7CisgICAgICAgIFthdHRhY2htZW50IHN5bmNocm9ub3VzbHlT
ZXREYXRhOmh0bWxEYXRhLmdldCgpIG5ld0NvbnRlbnRUeXBlOkAidGV4dC9odG1sIiBuZXdGaWxl
bmFtZTpAImJhciIgZXJyb3I6bmlsXTsKKyAgICAgICAgW2F0dGFjaG1lbnQgZXhwZWN0UmVxdWVz
dGVkRGF0YVRvQmU6aHRtbERhdGEuZ2V0KCldOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJi
YXIiLCBbd2ViVmlldyB2YWx1ZU9mQXR0cmlidXRlOkAidGl0bGUiIGZvclF1ZXJ5U2VsZWN0b3I6
QCJhdHRhY2htZW50Il0pOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJ0ZXh0L2h0bWwiLCBb
d2ViVmlldyB2YWx1ZU9mQXR0cmlidXRlOkAidHlwZSIgZm9yUXVlcnlTZWxlY3RvcjpAImF0dGFj
aG1lbnQiXSk7CiAgICAgICAgIG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbXSwg
QFtdKTsKICAgICB9CiAgICAgW3dlYlZpZXcgZXhwZWN0VXBkYXRlc0FmdGVyQ29tbWFuZDpAIkRl
bGV0ZUJhY2t3YXJkIiB3aXRoQXJndW1lbnQ6bmlsIGV4cGVjdGVkUmVtb3ZhbHM6QFthdHRhY2ht
ZW50LmdldCgpXSBleHBlY3RlZEluc2VydGlvbnM6QFtdXTsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rl
c3RXZWJLaXRBUEkvY29jb2EvRHJhZ0FuZERyb3BTaW11bGF0b3IuaCBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvY29jb2EvRHJhZ0FuZERyb3BTaW11bGF0b3IuaAppbmRleCA3NjFhMzZmMGUxYzBkZDZi
OTNhY2I1NjQ5ZWM1ZTJjMDhiM2JkYTk2Li4xZDdlMTBlODkyOGExOWM2MWVjMTE2YjZiMmM1ZWNh
NzA3ZTQ1NTg5IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0RyYWdBbmRE
cm9wU2ltdWxhdG9yLmgKKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9EcmFnQW5kRHJv
cFNpbXVsYXRvci5oCkBAIC04MCw2ICs4MCw3IEBAIHR5cGVkZWYgTlNEaWN0aW9uYXJ5PE5TTnVt
YmVyICosIE5TVmFsdWUgKj4gKlByb2dyZXNzVG9DR1BvaW50VmFsdWVNYXA7CiAvLyBUaGUgc3Rh
cnQgbG9jYXRpb24sIGVuZCBsb2NhdGlvbiwgYW5kIGxvY2F0aW9ucyBvZiBhZGRpdGlvbmFsIGl0
ZW0gcmVxdWVzdHMgYXJlIGFsbCBpbiB3aW5kb3cgY29vcmRpbmF0ZXMuCiAtICh2b2lkKXJ1bkZy
b206KENHUG9pbnQpc3RhcnRMb2NhdGlvbiB0bzooQ0dQb2ludCllbmRMb2NhdGlvbjsKIC0gKHZv
aWQpZW5kRGF0YVRyYW5zZmVyOworLSAodm9pZCljbGVhckV4dGVybmFsRHJhZ0luZm9ybWF0aW9u
OwogQHByb3BlcnR5IChub25hdG9taWMsIHJlYWRvbmx5KSBOU0FycmF5PF9XS0F0dGFjaG1lbnQg
Kj4gKmluc2VydGVkQXR0YWNobWVudHM7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkp
IE5TQXJyYXk8X1dLQXR0YWNobWVudCAqPiAqcmVtb3ZlZEF0dGFjaG1lbnRzOwogQHByb3BlcnR5
IChub25hdG9taWMsIHJlYWRvbmx5KSBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3OwpkaWZmIC0tZ2l0
IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9pb3MvRHJhZ0FuZERyb3BTaW11bGF0b3JJT1MubW0gYi9U
b29scy9UZXN0V2ViS2l0QVBJL2lvcy9EcmFnQW5kRHJvcFNpbXVsYXRvcklPUy5tbQppbmRleCAw
Zjk3YTM5ZGI2MGFiMjkwMmE1ODgzNDE0NWE3NDA5YjIzMWI1N2U2Li5jZWJkNDYwMGE5NDgxMDNk
ZmIwNTc5N2EzZDQ0ZWFmMDYzODVkZDcyIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJ
L2lvcy9EcmFnQW5kRHJvcFNpbXVsYXRvcklPUy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L2lvcy9EcmFnQW5kRHJvcFNpbXVsYXRvcklPUy5tbQpAQCAtNTY4LDYgKzU2OCwxMSBAQCBzdGF0
aWMgTlNBcnJheSAqZHJhZ0FuZERyb3BFdmVudE5hbWVzKCkKICAgICBbc2VsZiBfc2NoZWR1bGVB
ZHZhbmNlUHJvZ3Jlc3NdOwogfQogCistICh2b2lkKWNsZWFyRXh0ZXJuYWxEcmFnSW5mb3JtYXRp
b24KK3sKKyAgICBfZXh0ZXJuYWxJdGVtUHJvdmlkZXJzID0gbmlsOworfQorCiAtIChDR1BvaW50
KV9jdXJyZW50TG9jYXRpb24KIHsKICAgICBDR0Zsb2F0IGRpc3RhbmNlWCA9IF9lbmRMb2NhdGlv
bi54IC0gX3N0YXJ0TG9jYXRpb24ueDsKZGlmZiAtLWdpdCBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkv
bWFjL0RyYWdBbmREcm9wU2ltdWxhdG9yTWFjLm1tIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9tYWMv
RHJhZ0FuZERyb3BTaW11bGF0b3JNYWMubW0KaW5kZXggZTUyODMwMWU1NmQ0YmQzM2JjMGVkYjA5
ODViMWQzN2IzM2ViYWYxZi4uMmVmYmI1YzllYjYzMjhkZjJkZDc5ODQ2ZDY5ZGM5OWIwYWZiY2Uy
MiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9tYWMvRHJhZ0FuZERyb3BTaW11bGF0
b3JNYWMubW0KKysrIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9tYWMvRHJhZ0FuZERyb3BTaW11bGF0
b3JNYWMubW0KQEAgLTM1OCw2ICszNTgsMTMgQEAgc3RhdGljIE5TSW1hZ2UgKmRlZmF1bHRFeHRl
cm5hbERyYWdJbWFnZSgpCiAgICAgcmV0dXJuIF9leHRlcm5hbFByb21pc2VkRmlsZXMuZ2V0KCk7
CiB9CiAKKy0gKHZvaWQpY2xlYXJFeHRlcm5hbERyYWdJbmZvcm1hdGlvbgoreworICAgIF9leHRl
cm5hbFByb21pc2VkRmlsZXMgPSBuaWw7CisgICAgX2V4dGVybmFsRHJhZ0ltYWdlID0gbmlsOwor
ICAgIF9leHRlcm5hbERyYWdQYXN0ZWJvYXJkID0gbmlsOworfQorCiBzdGF0aWMgQk9PTCBnZXRG
aWxlUGF0aHNBbmRUeXBlSWRlbnRpZmllcnMoTlNBcnJheTxOU1VSTCAqPiAqZmlsZVVSTHMsIE5T
QXJyYXk8TlNTdHJpbmcgKj4gKipvdXRGaWxlUGF0aHMsIE5TQXJyYXk8TlNTdHJpbmcgKj4gKipv
dXRUeXBlSWRlbnRpZmllcnMpCiB7CiAgICAgTlNNdXRhYmxlQXJyYXkgKmZpbGVQYXRocyA9IFtO
U011dGFibGVBcnJheSBhcnJheVdpdGhDYXBhY2l0eTpmaWxlVVJMcy5jb3VudF07Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348112</attachid>
            <date>2018-08-26 19:55:36 -0700</date>
            <delta_ts>2018-08-27 09:56:25 -0700</delta_ts>
            <desc>Rebase on trunk</desc>
            <filename>bug-188903-20180826195535.patch</filename>
            <type>text/plain</type>
            <size>52335</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1MzQ3CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNTVmMDIzNjMzNjdkYmE0
NTczOWVjZDdiYjIxZGUzMzQ1MTY4ODEyMy4uOTMyN2Y5OTdhZDg3NTE3YzczZTY5ODdkYzFlYWYw
ZjY0OWI0OGUxOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDE4LTA4LTI2ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtDb2NvYV0gRXhj
ZXB0aW9uIChmaWxlVHlwZSAnZHluLmFncTh1JyBpcyBub3QgYSB2YWxpZCBVVEkpIHJhaXNlZCB3
aGVuIGRyYWdnaW5nIGFuIGF0dGFjaG1lbnQgd2hvc2UgZmlsZSB3cmFwcGVyIGlzIGEgZGlyZWN0
b3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODg5
MDMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQzNzAyOTkzPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeGVzIHRoZSBleGNlcHRpb24gZm9yIGF0
dGFjaG1lbnRzIHRoYXQgYXJlIGNyZWF0ZWQgd2hlbiBkcm9wcGluZyBmaWxlcyB3aXRoIGV4dGVu
c2lvbnMgdGhhdCBkb24ndCBtYXAgdG8gYW55CisgICAgICAgIGtub3duIFVUSXMsIGFuZCB3aGVu
IGRyb3BwaW5nIGZvbGRlcnMuIFNlZSBiZWxvdyBmb3IgbW9yZSBkZXRhaWwuCisKKyAgICAgICAg
VGVzdHM6ICBXS0F0dGFjaG1lbnRUZXN0cy5JbnNlcnRGb2xkZXJBbmRGaWxlV2l0aFVua25vd25F
eHRlbnNpb24KKyAgICAgICAgICAgICAgICBXS0F0dGFjaG1lbnRUZXN0cy5Ecm9wRm9sZGVyQXNB
dHRhY2htZW50QW5kTW92ZUJ5RHJhZ2dpbmcKKyAgICAgICAgICAgICAgICBXS0F0dGFjaG1lbnRU
ZXN0cy5DaGFuZ2VBdHRhY2htZW50RGF0YUFuZEZpbGVJbmZvcm1hdGlvbgorCisgICAgICAgICog
ZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRBdHRh
Y2htZW50KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5oOgorICAgICAgICAqIGVkaXRpbmcv
Y29jb2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29u
dGVudFJlYWRlcjo6cmVhZEZpbGVQYXRocyk6CisKKyAgICAgICAgV2hlbiBjcmVhdGluZyBhbiBh
dHRhY2htZW50IGJ5IGRyb3BwaW5nIG9yIHBhc3RpbmcgYSBmaWxlIGJhY2tlZCBieSBhIGZpbGUg
cGF0aCwgaGFuZGxlIHRoZSBjYXNlcyB3aGVyZeKApgorICAgICAgICAoMSkgICAgIHRoZSBkcm9w
cGVkIHBhdGggaXMgYSBkaXJlY3RvcnksIGJ5IHNldHRpbmcgdGhlIFVUSSB0byAicHVibGljLmRp
cmVjdG9yeSIuIFRoaXMgYWxsb3dzIHVzIHRvIHNob3cgYQorICAgICAgICAgICAgICAgIGZvbGRl
ciBpY29uIGZvciB0aGUgZHJvcHBlZCBhdHRhY2htZW50IGVsZW1lbnQgb24gbWFjT1MuCisgICAg
ICAgICgyKSAgICAgdGhlIGRyb3BwZWQgcGF0aCBpcyBhIGZpbGUgd2hvc2UgVVRJIGlzIHVua25v
d24sIGJ5IGRlZmF1bHRpbmcgdG8gInB1YmxpYy5kYXRhIi4KKworICAgICAgICBCeSBlbnN1cmlu
ZyB0aGF0IHRoZSBVVEkgb2YgYSBkcm9wcGVkIGZpbGUtYmFja2VkIGF0dGFjaG1lbnQgaXMgc2V0
IHRvIGEgY29uY3JldGUgdHlwZSBpbiBhbnkgY2FzZSwgd2UgYXZvaWQgYW4KKyAgICAgICAgZXhj
ZXB0aW9uIHdoZW4gZHJhZ2dpbmcgdGhlIGF0dGFjaG1lbnQgb24gbWFjT1MsIGFuZCBvbiBpT1Ms
IGF2b2lkIHNpbGVudGx5IGZhaWxpbmcgdG8gZHJhZyBhbiBhdHRhY2htZW50LgorCisgICAgICAg
ICogaHRtbC9IVE1MQXR0YWNobWVudEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEF0dGFjaG1lbnRFbGVtZW50Ojp1cGRhdGVBdHRyaWJ1dGVzKToKKworICAgICAgICBDaGFuZ2Ug
dGhpcyBtZXRob2QgdG8gdGFrZSBhbiBvcHRpb25hbCBmaWxlIHNpemUgKHRoZSBzdWJ0aXRsZSBh
dHRyaWJ1dGUgd2lsbCBvbmx5IGJlIHNldCBpZiB0aGUgZmlsZSBzaXplIGlzCisgICAgICAgIG5v
dCBgc3RkOjpudWxsb3B0YCkuIEZ1cnRoZXJtb3JlLCBhbGxvdyBjYWxsZXJzIG9mIHRoaXMgbWV0
aG9kIHRvIGNsZWFyIGF0dHJpYnV0ZXMgb24gdGhlIGF0dGFjaG1lbnQgZWxlbWVudCBieQorICAg
ICAgICBwYXNzaW5nIGluIGBzdGQ6Om51bGxvcHRgIGZvciBhbnkgb2YgdGhlIHRocmVlIGFyZ3Vt
ZW50cy4gVGhpcyBhbGxvd3MgdXMgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIGFuCisgICAgICAg
IGF0dGFjaG1lbnQncyBmaWxlIHdyYXBwZXIgaXMgY2hhbmdlZCBmcm9tIGEgcmVndWxhciBmaWxl
IHRvIGEgZm9sZGVyIHdob3NlIHRvdGFsIHNpemUgaXMgY3VycmVudGx5IHVua25vd24uCisgICAg
ICAgIEluc3RlYWQgb2Ygc2hvd2luZyAiMCBieXRlcyIsIHdlJ2xsIHNpbXBseSByZWZyYWluIGZy
b20gc2hvd2luZyBhIHN1YnRpdGxlIGF0IGFsbCAoaW4gdGhlIGZ1dHVyZSwgdGhpcyBzaG91bGQK
KyAgICAgICAgYmUgaW1wcm92ZWQgYnkgaW1wbGVtZW50aW5nIGEgd2F5IHRvIGVzdGltYXRlIHRo
ZSBzaXplIG9mIHRoZSBmaWxlcyBpbiB0aGUgZm9sZGVyLCBvciBwZXJoYXBzIHNob3cgdGhlIG51
bWJlciBvZgorICAgICAgICBpdGVtcyBpbiB0aGUgZm9sZGVyIGFzIHRoZSBzdWJ0aXRsZSkuCisK
KyAgICAgICAgKiBodG1sL0hUTUxBdHRhY2htZW50RWxlbWVudC5oOgorCiAyMDE4LTA4LTI2ICBZ
b3Vlbm4gRmFibGV0ICA8eW91ZW5uQGFwcGxlLmNvbT4KIAogICAgICAgICBNYWtlIElEQkN1cnNv
cjo6bV9yZXF1ZXN0IGEgV2Vha1B0cgpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9DaGFuZ2VM
b2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA1MjQzMjc3ZjRkYzA5ZDkyYjhkNzJh
Mjk5YTNkY2UyYzlmYjJhMDdkLi43YjQwNGViYjg1NTI5NWNiZDYwZjdhZjgxY2U5ZmYzMDE0ZWM1
Nzc1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZworKysgYi9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDE4LTA4LTI2ICBXZW5zb24gSHNpZWgg
IDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtDb2NvYV0gRXhjZXB0aW9uIChm
aWxlVHlwZSAnZHluLmFncTh1JyBpcyBub3QgYSB2YWxpZCBVVEkpIHJhaXNlZCB3aGVuIGRyYWdn
aW5nIGFuIGF0dGFjaG1lbnQgd2hvc2UgZmlsZSB3cmFwcGVyIGlzIGEgZGlyZWN0b3J5CisgICAg
ICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODg5MDMKKyAgICAg
ICAgPHJkYXI6Ly9wcm9ibGVtLzQzNzAyOTkzPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9E
WSAoT09QUyEpLgorCisgICAgICAgIEZpeGVzIHRoZSBidWcgYnkgc3VwcG9ydGluZyBOU0ZpbGVX
cmFwcGVycyBvZiB0eXBlIGRpcmVjdG9yeSwgYXMgd2VsbCBhcyBOU0ZpbGVXcmFwcGVycyB3aXRo
IGZpbGUgdGhhdCBkbyBub3QKKyAgICAgICAgbWFwIHRvIGNvbmNyZXRlIHR5cGUgaWRlbnRpZmll
cnMuIEFtb25nIG90aGVyIHRoaW5ncywgdGhpcyBwYXRjaCBlbnN1cmVzIHRoYXQ6CisgICAgICAg
IC0gICAgICAgSW5zZXJ0aW5nIGEgZGlyZWN0b3J5IGZpbGUgd3JhcHBlciAob3IgdXNpbmcgLXNl
dEZpbGVXcmFwcGVyOuKApjogdG8gY2hhbmdlIGFuIGV4aXN0aW5nIF9XS0F0dGFjaG1lbnQncwor
ICAgICAgICAgICAgICAgIGZpbGUgd3JhcHBlciB0byBhIGRpcmVjdG9yeSkgZG9lcyBub3QgY2F1
c2UgdGhlIGF0dGFjaG1lbnQgZWxlbWVudCB0byBzaG93ICIwIGJ5dGVzIiBhcyB0aGUgc3VidGl0
bGUuCisgICAgICAgIC0gICAgICAgSW4gdGhlIGFib3ZlIHNjZW5hcmlvLCB3ZSBhbHNvIHdvbid0
IGVuZCB1cCB3aXRoIGEgbWlzc2luZyAidHlwZSIgYXR0cmlidXRlIGZvciB0aGUgYXR0YWNobWVu
dCBlbGVtZW50LAorICAgICAgICAgICAgICAgIGFzIHdlbGwgYXMgYSBjb3JyZXNwb25kaW5nIEFQ
STo6QXR0YWNobWVudDo6Y29udGVudFR5cGUoKSB0aGF0J3MgYW4gZW1wdHkgc3RyaW5nLgorICAg
ICAgICAtICAgICAgIERyb3BwaW5nIG9yIHBhc3RpbmcgYXR0YWNobWVudHMgYmFja2VkIGJ5IHBh
dGhzIG9uIGRpc2sgYWxzbyBkb2Vzbid0IHRyaWdnZXIgdGhlc2UgcHJvYmxlbXMsIGlmIHRoZSBw
YXRoCisgICAgICAgICAgICAgICAgaXMgYSBkaXJlY3Rvcnkgb3Igb2YgdW5rbm93biBmaWxlIHR5
cGUuCisKKyAgICAgICAgQ2hhbmdlcyBhcmUgdmVyaWZpZWQgYnkgMiBuZXcgQVBJIHRlc3RzLgor
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElBdHRhY2htZW50LmNwcDoKKyAgICAgICAgKEFQ
STo6QXR0YWNobWVudDo6dXBkYXRlQXR0cmlidXRlcyk6CisgICAgICAgIChBUEk6OkF0dGFjaG1l
bnQ6OmZpbGVTaXplRm9yRGlzcGxheSBjb25zdCk6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9B
UElBdHRhY2htZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9BUElBdHRhY2ht
ZW50Q29jb2EubW06CisgICAgICAgIChBUEk6OkF0dGFjaG1lbnQ6OnNldEZpbGVXcmFwcGVyQW5k
VXBkYXRlQ29udGVudFR5cGUpOgorCisgICAgICAgIEFkZCBhIGhlbHBlciB0aGF0IHNldHMgdGhl
IGZpbGUgd3JhcHBlciB0byB0aGUgZ2l2ZW4gTlNGaWxlV3JhcHBlciwgYW5kIGVpdGhlciBzZXRz
IHRoZSBjb250ZW50IHR5cGUgdG8gdGhlCisgICAgICAgIGdpdmVuIGNvbnRlbnQgdHlwZSBpZiBp
dCdzIHNwZWNpZmllZCwgb3IgaW5mZXJzIGl0IGZyb20gdGhlIGZpbGUgZXh0ZW5zaW9uIG9mIHRo
ZSBuZXcgTlNGaWxlV3JhcHBlci4gSW52b2tlZAorICAgICAgICB3aGVuZXZlciBhbiBOU0ZpbGVX
cmFwcGVyIGFuZCBjb250ZW50IHR5cGUgY29tYmluYXRpb24gaXMgc2V0IG9uIGFuIEFQSSBhdHRh
Y2htZW50IHZpYSBXZWJLaXQgU1BJLgorCisgICAgICAgIChBUEk6OkF0dGFjaG1lbnQ6OmZpbGVT
aXplRm9yRGlzcGxheSBjb25zdCk6CisKKyAgICAgICAgUmV0dXJucyBhIGZpbGUgc2l6ZSB0byBi
ZSBkaXNwbGF5ZWQgaW4gdGhlIGF0dGFjaG1lbnQgZWxlbWVudCdzIHN1YnRpdGxlLiBUaGlzIHJl
dHVybnMgYW4gb3B0aW9uYWwgZmlsZSBzaXplLAorICAgICAgICB3aGVyZSBgc3RkOjpudWxsb3B0
YCBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBzaG91bGQgbm90IGJlIGEgZmlsZSBzaXplIHNob3duLiBG
b3Igbm93LCB0aGlzIHJldHVybnMgYHN0ZDo6bnVsbG9wdGAKKyAgICAgICAgZm9yIGRpcmVjdG9y
eSBmaWxlIHdyYXBwZXJzLCB0aG91Z2ggaW4gdGhlIGZ1dHVyZSwgdGhpcyBzaG91bGQgYmUgZG9u
ZSBvbmx5IGluIGNhc2VzIHdoZXJlIHdlIGRvbid0IGltbWVkaWF0ZWx5CisgICAgICAgIGhhdmUg
YSBzaXplIGVzdGltYXRlIGZvciB0aGUgZmlsZSB3cmFwcGVyLgorCisgICAgICAgICogVUlQcm9j
ZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW06CisgICAgICAgICgtW1dLV2ViVmlldyBfaW5zZXJ0
QXR0YWNobWVudFdpdGhGaWxlV3JhcHBlcjpjb250ZW50VHlwZTpvcHRpb25zOmNvbXBsZXRpb246
XSk6CisKKyAgICAgICAgVXNlIEFQSTo6QXR0YWNobWVudDo6c2V0RmlsZVdyYXBwZXJBbmRVcGRh
dGVDb250ZW50VHlwZSgpIGluc3RlYWQgb2YgdHJ5aW5nIHRvIGNvbWUgdXAgd2l0aCBhIGZhbGxi
YWNrIFVUSS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXR0YWNobWVudC5t
bToKKyAgICAgICAgKC1bX1dLQXR0YWNobWVudCBzZXRGaWxlV3JhcHBlcjpjb250ZW50VHlwZTpj
b21wbGV0aW9uOl0pOgorCisgICAgICAgIFVzZSBBUEk6OkF0dGFjaG1lbnQ6OnNldEZpbGVXcmFw
cGVyQW5kVXBkYXRlQ29udGVudFR5cGUoKSBpbnN0ZWFkIG9mIHRyeWluZyB0byBjb21lIHVwIHdp
dGggYSBmYWxsYmFjayBVVEkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjppbnNlcnRBdHRhY2htZW50KToKKwor
ICAgICAgICBSZW1vdmUgdGhlIHNlcGFyYXRlIGFyZ3VtZW50cyBmb3IgZmlsZSBzaXplLCBjb250
ZW50IHR5cGUsIGFuZCBmaWxlIG5hbWUsIGFuZCBpbnN0ZWFkIGdldCB0aGVtIGZyb20gdGhlIGdp
dmVuCisgICAgICAgIEFQSSBBdHRhY2htZW50IG9iamVjdC4KKworICAgICAgICAoV2ViS2l0OjpX
ZWJQYWdlUHJveHk6OnVwZGF0ZUF0dGFjaG1lbnRBdHRyaWJ1dGVzKToKKworICAgICAgICBSZW1v
dmUgc2VwYXJhdGUgYXJndW1lbnRzIGZvciBmaWxlIHNpemUsIGNvbnRlbnQgdHlwZSBhbmQgZmls
ZSBuYW1lIGFuZCBqdXN0IHRha2UgYW4gQVBJOjpBdHRhY2htZW50IGluc3RlYWQuCisgICAgICAg
IFRoZXNlIHNlcGFyYXRlIHBpZWNlcyBvZiBpbmZvcm1hdGlvbiBjYW4gc2ltcGx5IGJlIGFza2Vk
IGZyb20gdGhlIEF0dGFjaG1lbnQgaXRzZWxmLgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcDoKKyAg
ICAgICAgKFdlYktpdDo6V2ViUGFnZTo6aW5zZXJ0QXR0YWNobWVudCk6CisgICAgICAgIChXZWJL
aXQ6OldlYlBhZ2U6OnVwZGF0ZUF0dGFjaG1lbnRBdHRyaWJ1dGVzKToKKworICAgICAgICBBZGp1
c3Qgc29tZSBpbnRlcmZhY2VzIGhlcmUgdG8gYWxsb3cgdGhlIGRpc3BsYXllZCBmaWxlIHNpemUg
dG8gYmUgb3B0aW9uYWwuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5o
OgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluOgorCiAy
MDE4LTA4LTI2ICBTYW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVXNpbmcg
X1dLUmVtb3RlT2JqZWN0SW50ZXJmYWNlIHdpdGggYSBwcm90b2NvbCB0aGF0IGluaGVyaXRzIGZy
b20gYSBub24tTlNPYmplY3QgcHJvdG9jb2wgY3Jhc2hlcwpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3Iu
Y3BwCmluZGV4IDE3NmE0YTA1MjhiYzU5ZmFjYmEyZjExM2I1ZTY0MjZkOGYzZDZiMzEuLjRlY2E5
MTUwZDZhNzk5MGRlYzI3NDFjYTM2ZDRjNjhhOWY1NzU2N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5jcHAKQEAgLTM4NzYsMTEgKzM4NzYsMTEgQEAgdm9pZCBFZGl0b3I6Om5vdGlmeUNsaWVu
dE9mQXR0YWNobWVudFVwZGF0ZXMoKQogICAgIH0KIH0KIAotdm9pZCBFZGl0b3I6Omluc2VydEF0
dGFjaG1lbnQoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBBdHRhY2htZW50RGlzcGxh
eU9wdGlvbnMmLCB1aW50NjRfdCBmaWxlU2l6ZSwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgc3Rk
OjpvcHRpb25hbDxTdHJpbmc+JiYgZXhwbGljaXRDb250ZW50VHlwZSkKK3ZvaWQgRWRpdG9yOjpp
bnNlcnRBdHRhY2htZW50KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgQXR0YWNobWVu
dERpc3BsYXlPcHRpb25zJiwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4mJiBmaWxlU2l6ZSwgY29u
c3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSkKIHsKICAgICBh
dXRvIGF0dGFjaG1lbnQgPSBIVE1MQXR0YWNobWVudEVsZW1lbnQ6OmNyZWF0ZShIVE1MTmFtZXM6
OmF0dGFjaG1lbnRUYWcsIGRvY3VtZW50KCkpOwogICAgIGF0dGFjaG1lbnQtPnNldFVuaXF1ZUlk
ZW50aWZpZXIoaWRlbnRpZmllcik7Ci0gICAgYXR0YWNobWVudC0+dXBkYXRlQXR0cmlidXRlcyhm
aWxlU2l6ZSwgV1RGTW92ZShleHBsaWNpdENvbnRlbnRUeXBlKSwgZmlsZU5hbWUpOworICAgIGF0
dGFjaG1lbnQtPnVwZGF0ZUF0dHJpYnV0ZXMoV1RGTW92ZShmaWxlU2l6ZSksIGNvbnRlbnRUeXBl
LCBmaWxlTmFtZSk7CiAKICAgICBhdXRvIGZyYWdtZW50VG9JbnNlcnQgPSBkb2N1bWVudCgpLmNy
ZWF0ZURvY3VtZW50RnJhZ21lbnQoKTsKICAgICBmcmFnbWVudFRvSW5zZXJ0LT5hcHBlbmRDaGls
ZChhdHRhY2htZW50LmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcv
RWRpdG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCmluZGV4IDFlYzEyMGJl
ZjMzZGE4ZWNhYjVlODk0YWI1NWVmYWFiOTUxMjhjYWMuLjZmNWFiYmFjMmRhOTk2OTllN2E1MmU1
MDBiZGVkNGJmZTQ2ZDEyODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaApAQCAtNTAzLDcgKzUw
Myw3IEBAIHB1YmxpYzoKICAgICBib29sIGlzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oKSBj
b25zdCB7IHJldHVybiBtX2lzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm87IH0KIAogI2lmIEVO
QUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnNlcnRB
dHRhY2htZW50KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgQXR0YWNobWVudERpc3Bs
YXlPcHRpb25zJiwgdWludDY0X3QgZmlsZVNpemUsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIHN0
ZDo6b3B0aW9uYWw8U3RyaW5nPiYmIGV4cGxpY2l0Q29udGVudFR5cGUgPSBzdGQ6Om51bGxvcHQp
OworICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW5zZXJ0QXR0YWNobWVudChjb25zdCBTdHJpbmcm
IGlkZW50aWZpZXIsIGNvbnN0IEF0dGFjaG1lbnREaXNwbGF5T3B0aW9ucyYsIHN0ZDo6b3B0aW9u
YWw8dWludDY0X3Q+JiYgZmlsZVNpemUsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0
cmluZyYgY29udGVudFR5cGUpOwogICAgIHZvaWQgcmVnaXN0ZXJBdHRhY2htZW50SWRlbnRpZmll
cihjb25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIC8qIGNvbnRlbnRUeXBlICovLCBjb25zdCBT
dHJpbmcmIC8qIHByZWZlcnJlZEZpbGVOYW1lICovLCBSZWY8U2hhcmVkQnVmZmVyPiYmKTsKICAg
ICB2b2lkIHJlZ2lzdGVyQXR0YWNobWVudElkZW50aWZpZXIoY29uc3QgU3RyaW5nJiwgY29uc3Qg
U3RyaW5nJiAvKiBjb250ZW50VHlwZSAqLywgY29uc3QgU3RyaW5nJiAvKiBmaWxlUGF0aCAqLyk7
CiAgICAgdm9pZCBjbG9uZUF0dGFjaG1lbnREYXRhKGNvbnN0IFN0cmluZyYgZnJvbUlkZW50aWZp
ZXIsIGNvbnN0IFN0cmluZyYgdG9JZGVudGlmaWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvY29jb2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1tIGIvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9jb2NvYS9XZWJDb250ZW50UmVhZGVyQ29jb2EubW0KaW5kZXggMWM5MTM1MWI3
M2FmNDdmOTcxYjljZTE3NDM0YzhkNTZiNDVhNDBkNC4uYzg4M2EyMzY5YWQzNmY3MDEyY2JjNDg2
Y2ZhZDBiYzAyYjA0YzQzYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9XZWJDb250ZW50UmVhZGVyQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9j
b2NvYS9XZWJDb250ZW50UmVhZGVyQ29jb2EubW0KQEAgLTcwMSw5ICs3MDEsMTggQEAgYm9vbCBX
ZWJDb250ZW50UmVhZGVyOjpyZWFkRmlsZVBhdGhzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRo
cykKICAgICAgICAgZm9yIChhdXRvJiBwYXRoIDogcGF0aHMpIHsKICAgICAgICAgICAgIGF1dG8g
YXR0YWNobWVudCA9IEhUTUxBdHRhY2htZW50RWxlbWVudDo6Y3JlYXRlKEhUTUxOYW1lczo6YXR0
YWNobWVudFRhZywgZG9jdW1lbnQpOwogICAgICAgICAgICAgaWYgKHN1cHBvcnRzQ2xpZW50U2lk
ZUF0dGFjaG1lbnREYXRhKGZyYW1lKSkgewotICAgICAgICAgICAgICAgIGxvbmcgbG9uZyBmaWxl
U2l6ZSB7IDAgfTsKLSAgICAgICAgICAgICAgICBGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZShwYXRo
LCBmaWxlU2l6ZSk7Ci0gICAgICAgICAgICAgICAgYXV0byBjb250ZW50VHlwZSA9IEZpbGU6OmNv
bnRlbnRUeXBlRm9yRmlsZShwYXRoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgY29udGVudFR5
cGU7CisgICAgICAgICAgICAgICAgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZmlsZVNpemVGb3JE
aXNwbGF5OworICAgICAgICAgICAgICAgIGlmIChGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3Rvcnko
cGF0aCwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6WWVzKSkKKyAgICAg
ICAgICAgICAgICAgICAgY29udGVudFR5cGUgPSBrVVRUeXBlRGlyZWN0b3J5OworICAgICAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBsb25nIGxvbmcgZmlsZVNpemU7Cisg
ICAgICAgICAgICAgICAgICAgIEZpbGVTeXN0ZW06OmdldEZpbGVTaXplKHBhdGgsIGZpbGVTaXpl
KTsKKyAgICAgICAgICAgICAgICAgICAgZmlsZVNpemVGb3JEaXNwbGF5ID0gZmlsZVNpemU7Cisg
ICAgICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlID0gRmlsZTo6Y29udGVudFR5cGVGb3JGaWxl
KHBhdGgpOworICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUuaXNFbXB0eSgpKQor
ICAgICAgICAgICAgICAgICAgICAgICAgY29udGVudFR5cGUgPSBrVVRUeXBlRGF0YTsKKyAgICAg
ICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgZnJhbWUuZWRpdG9yKCkucmVnaXN0ZXJBdHRh
Y2htZW50SWRlbnRpZmllcihhdHRhY2htZW50LT5lbnN1cmVVbmlxdWVJZGVudGlmaWVyKCksIGNv
bnRlbnRUeXBlLCBwYXRoKTsKICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGVJc1N1aXRh
YmxlRm9ySW5saW5lSW1hZ2VSZXByZXNlbnRhdGlvbihjb250ZW50VHlwZSkpIHsKICAgICAgICAg
ICAgICAgICAgICAgYXV0byBpbWFnZSA9IEhUTUxJbWFnZUVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVu
dCk7CkBAIC03MTEsNyArNzIwLDcgQEAgYm9vbCBXZWJDb250ZW50UmVhZGVyOjpyZWFkRmlsZVBh
dGhzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocykKICAgICAgICAgICAgICAgICAgICAgaW1h
Z2UtPnNldEF0dGFjaG1lbnRFbGVtZW50KFdURk1vdmUoYXR0YWNobWVudCkpOwogICAgICAgICAg
ICAgICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQoaW1hZ2UpOwogICAgICAgICAgICAgICAg
IH0gZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQtPnVwZGF0ZUF0dHJpYnV0
ZXMoZmlsZVNpemUsIGNvbnRlbnRUeXBlLCBGaWxlU3lzdGVtOjpwYXRoR2V0RmlsZU5hbWUocGF0
aCkpOworICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50LT51cGRhdGVBdHRyaWJ1dGVzKFdU
Rk1vdmUoZmlsZVNpemVGb3JEaXNwbGF5KSwgY29udGVudFR5cGUsIEZpbGVTeXN0ZW06OnBhdGhH
ZXRGaWxlTmFtZShwYXRoKSk7CiAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50LT5hcHBlbmRD
aGlsZChhdHRhY2htZW50KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2Ug
ewpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXR0YWNobWVudEVsZW1lbnQu
Y3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXR0YWNobWVudEVsZW1lbnQuY3BwCmluZGV4
IDQwNWNiM2ViOWUyMTdiZTM5MjY1NzMzYmVjN2M1YjYwODJhOWVkYTEuLjNlZGJjNTFkYWQ4ODll
ZjZmODMwNGIwMjFhMWQ1MjU0Y2E3Y2Q4NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEF0dGFjaG1lbnRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hU
TUxBdHRhY2htZW50RWxlbWVudC5jcHAKQEAgLTE0NCwxNSArMTQ0LDIzIEBAIFN0cmluZyBIVE1M
QXR0YWNobWVudEVsZW1lbnQ6OmF0dGFjaG1lbnRQYXRoKCkgY29uc3QKICAgICByZXR1cm4gYXR0
cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbih3ZWJraXRhdHRhY2htZW50cGF0aEF0dHIpOwog
fQogCi12b2lkIEhUTUxBdHRhY2htZW50RWxlbWVudDo6dXBkYXRlQXR0cmlidXRlcyh1aW50NjRf
dCBmaWxlU2l6ZSwgc3RkOjpvcHRpb25hbDxTdHJpbmc+JiYgbmV3Q29udGVudFR5cGUsIHN0ZDo6
b3B0aW9uYWw8U3RyaW5nPiYmIG5ld0ZpbGVuYW1lKQordm9pZCBIVE1MQXR0YWNobWVudEVsZW1l
bnQ6OnVwZGF0ZUF0dHJpYnV0ZXMoc3RkOjpvcHRpb25hbDx1aW50NjRfdD4mJiBuZXdGaWxlU2l6
ZSwgc3RkOjpvcHRpb25hbDxTdHJpbmc+JiYgbmV3Q29udGVudFR5cGUsIHN0ZDo6b3B0aW9uYWw8
U3RyaW5nPiYmIG5ld0ZpbGVuYW1lKQogewogICAgIGlmIChuZXdGaWxlbmFtZSkKICAgICAgICAg
c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OnRpdGxlQXR0ciwg
Km5ld0ZpbGVuYW1lKTsKKyAgICBlbHNlCisgICAgICAgIHJlbW92ZUF0dHJpYnV0ZShIVE1MTmFt
ZXM6OnRpdGxlQXR0cik7CiAKICAgICBpZiAobmV3Q29udGVudFR5cGUpCiAgICAgICAgIHNldEF0
dHJpYnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjp0eXBlQXR0ciwgKm5ld0Nv
bnRlbnRUeXBlKTsKKyAgICBlbHNlCisgICAgICAgIHJlbW92ZUF0dHJpYnV0ZShIVE1MTmFtZXM6
OnR5cGVBdHRyKTsKKworICAgIGlmIChuZXdGaWxlU2l6ZSkKKyAgICAgICAgc2V0QXR0cmlidXRl
V2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OnN1YnRpdGxlQXR0ciwgZmlsZVNpemVE
ZXNjcmlwdGlvbigqbmV3RmlsZVNpemUpKTsKKyAgICBlbHNlCisgICAgICAgIHJlbW92ZUF0dHJp
YnV0ZShIVE1MTmFtZXM6OnN1YnRpdGxlQXR0cik7CiAKLSAgICBzZXRBdHRyaWJ1dGVXaXRob3V0
U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6c3VidGl0bGVBdHRyLCBmaWxlU2l6ZURlc2NyaXB0
aW9uKGZpbGVTaXplKSk7CiAgICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIo
KSkKICAgICAgICAgcmVuZGVyZXItPmludmFsaWRhdGUoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvSFRNTEF0dGFjaG1lbnRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9o
dG1sL0hUTUxBdHRhY2htZW50RWxlbWVudC5oCmluZGV4IDViNjQxOTJiYzU2Zjk0YTM2ZWMzZDEw
YTg4MjU3Mzc1ZTgzZjNiODUuLjYxZWExNWE5MjhmMGJhYTQ1MmU5ZGZmZTE3OWFjZjRlZWQzMjc2
MmQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0dGFjaG1lbnRFbGVtZW50
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXR0YWNobWVudEVsZW1lbnQuaApAQCAt
NDksNyArNDksNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVy
KCkgY29uc3QgeyByZXR1cm4gbV91bmlxdWVJZGVudGlmaWVyOyB9CiAgICAgdm9pZCBzZXRVbmlx
dWVJZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllcikgeyBtX3VuaXF1ZUlk
ZW50aWZpZXIgPSB1bmlxdWVJZGVudGlmaWVyOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lk
IHVwZGF0ZUF0dHJpYnV0ZXModWludDY0X3QgZmlsZVNpemUsIHN0ZDo6b3B0aW9uYWw8U3RyaW5n
PiYmIG5ld0NvbnRlbnRUeXBlID0gc3RkOjpudWxsb3B0LCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4m
JiBuZXdGaWxlbmFtZSA9IHN0ZDo6bnVsbG9wdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1
cGRhdGVBdHRyaWJ1dGVzKHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+JiYgbmV3RmlsZVNpemUgPSBz
dGQ6Om51bGxvcHQsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiYmIG5ld0NvbnRlbnRUeXBlID0gc3Rk
OjpudWxsb3B0LCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4mJiBuZXdGaWxlbmFtZSA9IHN0ZDo6bnVs
bG9wdCk7CiAKICAgICBJbnNlcnRlZEludG9BbmNlc3RvclJlc3VsdCBpbnNlcnRlZEludG9BbmNl
c3RvcihJbnNlcnRpb25UeXBlLCBDb250YWluZXJOb2RlJikgZmluYWw7CiAgICAgdm9pZCByZW1v
dmVkRnJvbUFuY2VzdG9yKFJlbW92YWxUeXBlLCBDb250YWluZXJOb2RlJikgZmluYWw7CmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQXR0YWNobWVudC5jcHAgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQXR0YWNobWVudC5jcHAKaW5kZXggYjYxNTA0
ODNkZTVmNjZhZGVlN2NjNmY0YWJmZDBlMDM2NWI2YTQzMi4uMDczYTQ0Y2U0NDg2Y2FmZDYyZTI1
Y2JkZThlOWZiYzkzYmNjN2Y0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0FQSUF0dGFjaG1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9B
UElBdHRhY2htZW50LmNwcApAQCAtNTcsMTcgKzU3LDE0IEBAIHZvaWQgQXR0YWNobWVudDo6c2V0
RGlzcGxheU9wdGlvbnMoV2ViQ29yZTo6QXR0YWNobWVudERpc3BsYXlPcHRpb25zIG9wdGlvbnMs
IEZ1CiAgICAgICAgIGNhbGxiYWNrKFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcjo6T3duZXJX
YXNJbnZhbGlkYXRlZCk7CiB9CiAKLXZvaWQgQXR0YWNobWVudDo6dXBkYXRlQXR0cmlidXRlcyh1
aW50NjRfdCBmaWxlU2l6ZSwgY29uc3QgV1RGOjpTdHJpbmcmIG5ld0NvbnRlbnRUeXBlLCBjb25z
dCBXVEY6OlN0cmluZyYgbmV3RmlsZW5hbWUsIEZ1bmN0aW9uPHZvaWQoV2ViS2l0OjpDYWxsYmFj
a0Jhc2U6OkVycm9yKT4mJiBjYWxsYmFjaykKK3ZvaWQgQXR0YWNobWVudDo6dXBkYXRlQXR0cmli
dXRlcyhGdW5jdGlvbjx2b2lkKFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJh
Y2spCiB7Ci0gICAgc2V0Q29udGVudFR5cGUobmV3Q29udGVudFR5cGUpOwotICAgIHNldEZpbGVQ
YXRoKHsgfSk7Ci0KLSAgICBhdXRvIG9wdGlvbmFsTmV3Q29udGVudFR5cGUgPSBuZXdDb250ZW50
VHlwZS5pc051bGwoKSA/IHN0ZDo6bnVsbG9wdCA6IHN0ZDo6b3B0aW9uYWw8V1RGOjpTdHJpbmc+
IHsgbmV3Q29udGVudFR5cGUgfTsKLSAgICBhdXRvIG9wdGlvbmFsTmV3RmlsZW5hbWUgPSBuZXdG
aWxlbmFtZS5pc051bGwoKSA/IHN0ZDo6bnVsbG9wdCA6IHN0ZDo6b3B0aW9uYWw8V1RGOjpTdHJp
bmc+IHsgbmV3RmlsZW5hbWUgfTsKLSAgICBpZiAobV93ZWJQYWdlKQotICAgICAgICBtX3dlYlBh
Z2UtPnVwZGF0ZUF0dGFjaG1lbnRBdHRyaWJ1dGVzKG1faWRlbnRpZmllciwgZmlsZVNpemUsIFdU
Rk1vdmUob3B0aW9uYWxOZXdDb250ZW50VHlwZSksIFdURk1vdmUob3B0aW9uYWxOZXdGaWxlbmFt
ZSksIFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICBlbHNlCisgICAgaWYgKCFtX3dlYlBhZ2UpIHsK
ICAgICAgICAgY2FsbGJhY2soV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yOjpPd25lcldhc0lu
dmFsaWRhdGVkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fd2ViUGFnZS0+dXBk
YXRlQXR0YWNobWVudEF0dHJpYnV0ZXMoKnRoaXMsIFdURk1vdmUoY2FsbGJhY2spKTsKIH0KIAog
dm9pZCBBdHRhY2htZW50OjppbnZhbGlkYXRlKCkKQEAgLTkzLDYgKzkwLDExIEBAIFdURjo6U3Ry
aW5nIEF0dGFjaG1lbnQ6OmZpbGVOYW1lKCkgY29uc3QKICAgICByZXR1cm4geyB9OwogfQogCitz
dGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBBdHRhY2htZW50OjpmaWxlU2l6ZUZvckRpc3BsYXkoKSBj
b25zdAoreworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKICNlbmRpZiAvLyAhUExBVEZP
Uk0oQ09DT0EpCiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9B
UElBdHRhY2htZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQXR0YWNobWVu
dC5oCmluZGV4IDcxNzQxZmY0MTM0ZGZhNDVlMmFkZDc3MjQ4ZDc4OTk3MWY1NDYzODQuLjg0NDNm
NDMwYmM5MzYzYjkzYjA4YTM3YTM0MzIxMGYwYmNjMmRmYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElBdHRhY2htZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvQVBJL0FQSUF0dGFjaG1lbnQuaApAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAK
ICAgICBjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRl
bnRpZmllcjsgfQogICAgIHZvaWQgc2V0RGlzcGxheU9wdGlvbnMoV2ViQ29yZTo6QXR0YWNobWVu
dERpc3BsYXlPcHRpb25zLCBGdW5jdGlvbjx2b2lkKFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJv
cik+JiYpOwotICAgIHZvaWQgdXBkYXRlQXR0cmlidXRlcyh1aW50NjRfdCBmaWxlU2l6ZSwgY29u
c3QgV1RGOjpTdHJpbmcmIG5ld0NvbnRlbnRUeXBlLCBjb25zdCBXVEY6OlN0cmluZyYgbmV3Rmls
ZW5hbWUsIEZ1bmN0aW9uPHZvaWQoV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7Cisg
ICAgdm9pZCB1cGRhdGVBdHRyaWJ1dGVzKEZ1bmN0aW9uPHZvaWQoV2ViS2l0OjpDYWxsYmFja0Jh
c2U6OkVycm9yKT4mJik7CiAKICAgICB2b2lkIGludmFsaWRhdGUoKTsKICAgICBib29sIGlzVmFs
aWQoKSBjb25zdCB7IHJldHVybiAhIW1fd2ViUGFnZTsgfQpAQCAtNjQsNiArNjQsNyBAQCBwdWJs
aWM6CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgTlNGaWxlV3JhcHBlciAqZmlsZVdyYXBwZXIo
KSBjb25zdCB7IHJldHVybiBtX2ZpbGVXcmFwcGVyLmdldCgpOyB9CiAgICAgdm9pZCBzZXRGaWxl
V3JhcHBlcihOU0ZpbGVXcmFwcGVyICpmaWxlV3JhcHBlcikgeyBtX2ZpbGVXcmFwcGVyID0gZmls
ZVdyYXBwZXI7IH0KKyAgICB2b2lkIHNldEZpbGVXcmFwcGVyQW5kVXBkYXRlQ29udGVudFR5cGUo
TlNGaWxlV3JhcHBlciAqLCBOU1N0cmluZyAqY29udGVudFR5cGUpOwogICAgIFdURjo6U3RyaW5n
IHV0aVR5cGUoKSBjb25zdDsKICNlbmRpZgogICAgIFdURjo6U3RyaW5nIG1pbWVUeXBlKCkgY29u
c3Q7CkBAIC03OCw2ICs3OSw4IEBAIHB1YmxpYzoKICAgICBJbnNlcnRpb25TdGF0ZSBpbnNlcnRp
b25TdGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zZXJ0aW9uU3RhdGU7IH0KICAgICB2b2lkIHNl
dEluc2VydGlvblN0YXRlKEluc2VydGlvblN0YXRlIHN0YXRlKSB7IG1faW5zZXJ0aW9uU3RhdGUg
PSBzdGF0ZTsgfQogCisgICAgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZmlsZVNpemVGb3JEaXNw
bGF5KCkgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQXR0YWNobWVudChjb25zdCBX
VEY6OlN0cmluZyYgaWRlbnRpZmllciwgV2ViS2l0OjpXZWJQYWdlUHJveHkmKTsKIApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL0FQSUF0dGFjaG1lbnRDb2Nv
YS5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9BUElBdHRhY2htZW50Q29j
b2EubW0KaW5kZXggOWU4YjU4OGZlZDJhYWVkMDA0OWMwZDUwZTMxYWM0YzQxYTA1ZDUyMC4uNTE3
NDBkN2UyMmZmYWRjMjQ2NzY0MDIxNWNmYzgwYzk3MWI1ZTk1OCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL0FQSUF0dGFjaG1lbnRDb2NvYS5tbQorKysgYi9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvQVBJQXR0YWNobWVudENvY29hLm1tCkBA
IC03NCw0ICs3NCwzNCBAQCBXVEY6OlN0cmluZyBBdHRhY2htZW50OjpmaWxlTmFtZSgpIGNvbnN0
CiAgICAgcmV0dXJuIFttX2ZpbGVXcmFwcGVyIHByZWZlcnJlZEZpbGVuYW1lXTsKIH0KIAordm9p
ZCBBdHRhY2htZW50OjpzZXRGaWxlV3JhcHBlckFuZFVwZGF0ZUNvbnRlbnRUeXBlKE5TRmlsZVdy
YXBwZXIgKmZpbGVXcmFwcGVyLCBOU1N0cmluZyAqY29udGVudFR5cGUpCit7CisgICAgaWYgKCFj
b250ZW50VHlwZS5sZW5ndGgpIHsKKyAgICAgICAgaWYgKGZpbGVXcmFwcGVyLmRpcmVjdG9yeSkK
KyAgICAgICAgICAgIGNvbnRlbnRUeXBlID0gKE5TU3RyaW5nICopa1VUVHlwZURpcmVjdG9yeTsK
KyAgICAgICAgZWxzZSBpZiAoZmlsZVdyYXBwZXIucmVndWxhckZpbGUpIHsKKyAgICAgICAgICAg
IGlmIChOU1N0cmluZyAqcGF0aEV4dGVuc2lvbiA9IChmaWxlV3JhcHBlci5maWxlbmFtZS5sZW5n
dGggPyBmaWxlV3JhcHBlci5maWxlbmFtZSA6IGZpbGVXcmFwcGVyLnByZWZlcnJlZEZpbGVuYW1l
KS5wYXRoRXh0ZW5zaW9uKQorICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlID0gV2ViQ29yZTo6
TUlNRVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JFeHRlbnNpb24ocGF0aEV4dGVuc2lvbik7
CisgICAgICAgICAgICBpZiAoIWNvbnRlbnRUeXBlLmxlbmd0aCkKKyAgICAgICAgICAgICAgICBj
b250ZW50VHlwZSA9IChOU1N0cmluZyAqKWtVVFR5cGVEYXRhOworICAgICAgICB9CisgICAgfQor
CisgICAgc2V0Q29udGVudFR5cGUoY29udGVudFR5cGUpOworICAgIHNldEZpbGVXcmFwcGVyKGZp
bGVXcmFwcGVyKTsKK30KKworc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gQXR0YWNobWVudDo6Zmls
ZVNpemVGb3JEaXNwbGF5KCkgY29uc3QKK3sKKyAgICBpZiAoIVttX2ZpbGVXcmFwcGVyIGlzUmVn
dWxhckZpbGVdKSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZGlzcGxheSBhIHNpemUg
ZXN0aW1hdGUgZm9yIGRpcmVjdG9yeS10eXBlIGZpbGUgd3JhcHBlcnMuCisgICAgICAgIHJldHVy
biBzdGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgaWYgKGF1dG8gZmlsZVNpemUgPSBbW21fZmls
ZVdyYXBwZXIgZmlsZUF0dHJpYnV0ZXNdW05TRmlsZVNpemVdIHVuc2lnbmVkTG9uZ0xvbmdWYWx1
ZV0pCisgICAgICAgIHJldHVybiBmaWxlU2l6ZTsKKworICAgIHJldHVybiBbbV9maWxlV3JhcHBl
ciByZWd1bGFyRmlsZUNvbnRlbnRzXS5sZW5ndGg7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEFQSQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5t
bSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KaW5kZXgg
MGYyYTRiODZhMmY1MjY2NzZjNzUwMjY3MGUxNWQ0ODgzMGY5MGVjZS4uMzc3MzJjMGFhOWIwNGQy
YTE5MDMwOTUwZTRhNzJjNjhlNmIxNzRlZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCkBAIC00NDUyLDE4ICs0NDUyLDggQEAgV0VCQ09SRV9D
T01NQU5EKHlhbmtBbmRTZWxlY3QpCiAgICAgYXV0byBpZGVudGlmaWVyID0gY3JlYXRlQ2Fub25p
Y2FsVVVJRFN0cmluZygpOwogICAgIGF1dG8gY29yZU9wdGlvbnMgPSBvcHRpb25zID8gb3B0aW9u
cy5jb3JlRGlzcGxheU9wdGlvbnMgOiBXZWJDb3JlOjpBdHRhY2htZW50RGlzcGxheU9wdGlvbnMg
eyB9OwogICAgIGF1dG8gYXR0YWNobWVudCA9IEFQSTo6QXR0YWNobWVudDo6Y3JlYXRlKGlkZW50
aWZpZXIsICpfcGFnZSk7Ci0gICAgYXR0YWNobWVudC0+c2V0RmlsZVdyYXBwZXIoZmlsZVdyYXBw
ZXIpOwotCi0gICAgaWYgKCFjb250ZW50VHlwZS5sZW5ndGgpIHsKLSAgICAgICAgaWYgKE5TU3Ry
aW5nICpwYXRoRXh0ZW5zaW9uID0gKGZpbGVXcmFwcGVyLmZpbGVuYW1lLmxlbmd0aCA/IGZpbGVX
cmFwcGVyLmZpbGVuYW1lIDogZmlsZVdyYXBwZXIucHJlZmVycmVkRmlsZW5hbWUpLnBhdGhFeHRl
bnNpb24pCi0gICAgICAgICAgICBjb250ZW50VHlwZSA9IFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0
cnk6OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKHBhdGhFeHRlbnNpb24pOwotICAgIH0KLQotICAg
IGF1dG8gZmlsZVNpemUgPSBbW1tmaWxlV3JhcHBlciBmaWxlQXR0cmlidXRlc10gb2JqZWN0Rm9y
S2V5Ok5TRmlsZVNpemVdIHVuc2lnbmVkTG9uZ0xvbmdWYWx1ZV07Ci0gICAgaWYgKCFmaWxlU2l6
ZSAmJiBmaWxlV3JhcHBlci5yZWd1bGFyRmlsZSkKLSAgICAgICAgZmlsZVNpemUgPSBmaWxlV3Jh
cHBlci5yZWd1bGFyRmlsZUNvbnRlbnRzLmxlbmd0aDsKLQotICAgIF9wYWdlLT5pbnNlcnRBdHRh
Y2htZW50KGF0dGFjaG1lbnQuY29weVJlZigpLCBjb3JlT3B0aW9ucywgZmlsZVNpemUsIFtmaWxl
V3JhcHBlciBwcmVmZXJyZWRGaWxlbmFtZV0sIGNvbnRlbnRUeXBlLmxlbmd0aCA/IHN0ZDo6b3B0
aW9uYWw8U3RyaW5nPiB7IGNvbnRlbnRUeXBlIH0gOiBzdGQ6Om51bGxvcHQsIFtjYXB0dXJlZEhh
bmRsZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoV2ViS2l0OjpDYWxsYmFj
a0Jhc2U6OkVycm9yIGVycm9yKSB7CisgICAgYXR0YWNobWVudC0+c2V0RmlsZVdyYXBwZXJBbmRV
cGRhdGVDb250ZW50VHlwZShmaWxlV3JhcHBlciwgY29udGVudFR5cGUpOworICAgIF9wYWdlLT5p
bnNlcnRBdHRhY2htZW50KGF0dGFjaG1lbnQuY29weVJlZigpLCBjb3JlT3B0aW9ucywgW2NhcHR1
cmVkSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIChXZWJLaXQ6OkNh
bGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKICAgICAgICAgaWYgKGNhcHR1cmVkSGFuZGxlcikK
ICAgICAgICAgICAgIGNhcHR1cmVkSGFuZGxlcihlcnJvciA9PSBXZWJLaXQ6OkNhbGxiYWNrQmFz
ZTo6RXJyb3I6Ok5vbmUpOwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0NvY29hL19XS0F0dGFjaG1lbnQubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vz
cy9BUEkvQ29jb2EvX1dLQXR0YWNobWVudC5tbQppbmRleCA3ZGY0OGIyOTU1ZGFkOWVjZGM3ZTJl
ZGU2NjJhNTFhZjBiZjRmZDNlLi4wY2EzZDUzOTM4NjE1NWM0YWE0MGE0OWRjMzg5NDU3MzYwYjYy
ZTRiIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXR0
YWNobWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXR0
YWNobWVudC5tbQpAQCAtMTU3LDE3ICsxNTcsMTEgQEAgc3RhdGljIGNvbnN0IE5TSW50ZWdlciBJ
bnZhbGlkQXR0YWNobWVudEVycm9yQ29kZSA9IDI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAK
LSAgICBhdXRvIGZpbGVTaXplID0gW2ZpbGVXcmFwcGVyLmZpbGVBdHRyaWJ1dGVzW05TRmlsZVNp
emVdIHVuc2lnbmVkTG9uZ0xvbmdWYWx1ZV07Ci0gICAgaWYgKCFmaWxlU2l6ZSAmJiBmaWxlV3Jh
cHBlci5yZWd1bGFyRmlsZSkKLSAgICAgICAgZmlsZVNpemUgPSBmaWxlV3JhcHBlci5yZWd1bGFy
RmlsZUNvbnRlbnRzLmxlbmd0aDsKLQotICAgIGlmICghY29udGVudFR5cGUubGVuZ3RoKSB7Ci0g
ICAgICAgIGlmIChOU1N0cmluZyAqcGF0aEV4dGVuc2lvbiA9IChmaWxlV3JhcHBlci5maWxlbmFt
ZS5sZW5ndGggPyBmaWxlV3JhcHBlci5maWxlbmFtZSA6IGZpbGVXcmFwcGVyLnByZWZlcnJlZEZp
bGVuYW1lKS5wYXRoRXh0ZW5zaW9uKQotICAgICAgICAgICAgY29udGVudFR5cGUgPSBXZWJDb3Jl
OjpNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbihwYXRoRXh0ZW5zaW9u
KTsKLSAgICB9Ci0KLSAgICBfYXR0YWNobWVudC0+c2V0RmlsZVdyYXBwZXIoZmlsZVdyYXBwZXIp
OwotICAgIF9hdHRhY2htZW50LT51cGRhdGVBdHRyaWJ1dGVzKGZpbGVTaXplLCBjb250ZW50VHlw
ZSwgZmlsZVdyYXBwZXIucHJlZmVycmVkRmlsZW5hbWUsIFtjYXB0dXJlZEJsb2NrID0gbWFrZUJs
b2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gKGF1dG8gZXJyb3IpIHsKKyAgICAvLyBUaGlzIGZp
bGUgcGF0aCBtZW1iZXIgaXMgb25seSBwb3B1bGF0ZWQgd2hlbiB0aGUgYXR0YWNobWVudCBpcyBn
ZW5lcmF0ZWQgdXBvbiBkcm9wcGluZyBmaWxlcy4gV2hlbiBkYXRhIGlzIHNwZWNpZmllZCB2aWEg
TlNGaWxlV3JhcHBlcgorICAgIC8vIGZyb20gdGhlIFNQSSBjbGllbnQsIHRoZSBjb3JyZXNwb25k
aW5nIGZpbGUgcGF0aCBvZiB0aGUgZGF0YSBpcyB1bmtub3duLCBpZiBpdCBldmVuIGV4aXN0cyBh
dCBhbGwuCisgICAgX2F0dGFjaG1lbnQtPnNldEZpbGVQYXRoKHsgfSk7CisgICAgX2F0dGFjaG1l
bnQtPnNldEZpbGVXcmFwcGVyQW5kVXBkYXRlQ29udGVudFR5cGUoZmlsZVdyYXBwZXIsIGNvbnRl
bnRUeXBlKTsKKyAgICBfYXR0YWNobWVudC0+dXBkYXRlQXR0cmlidXRlcyhbY2FwdHVyZWRCbG9j
ayA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIChhdXRvIGVycm9yKSB7CiAgICAg
ICAgIGlmICghY2FwdHVyZWRCbG9jaykKICAgICAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggMDAyYmVjZjI0ZTQxZTdlNTI5N2Mw
YzkzOWE3ZDQwOWQ1YWU5OTY4My4uNzYzYjI4ZWJhYjlmMTBlM2UxMDgyYTJmNDI0YTYxZjAxMjcw
MDJhNiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNw
cAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC03NzUx
LDIxICs3NzUxLDE3IEBAIFJlZlB0cjxBUEk6OkF0dGFjaG1lbnQ+IFdlYlBhZ2VQcm94eTo6YXR0
YWNobWVudEZvcklkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBpZGVuCiAgICAgcmV0dXJuIG1fYXR0
YWNobWVudElkZW50aWZpZXJUb0F0dGFjaG1lbnRNYXAuZ2V0KGlkZW50aWZpZXIpOwogfQogCi12
b2lkIFdlYlBhZ2VQcm94eTo6aW5zZXJ0QXR0YWNobWVudChSZWY8QVBJOjpBdHRhY2htZW50PiYm
IGF0dGFjaG1lbnQsIGNvbnN0IEF0dGFjaG1lbnREaXNwbGF5T3B0aW9ucyYgb3B0aW9ucywgdWlu
dDY0X3QgZmlsZVNpemUsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIHN0ZDo6b3B0aW9uYWw8U3Ry
aW5nPiBjb250ZW50VHlwZSwgRnVuY3Rpb248dm9pZChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJiBj
YWxsYmFjaykKK3ZvaWQgV2ViUGFnZVByb3h5OjppbnNlcnRBdHRhY2htZW50KFJlZjxBUEk6OkF0
dGFjaG1lbnQ+JiYgYXR0YWNobWVudCwgY29uc3QgQXR0YWNobWVudERpc3BsYXlPcHRpb25zJiBv
cHRpb25zLCBGdW5jdGlvbjx2b2lkKENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrKQog
ewogICAgIGlmICghaXNWYWxpZCgpKSB7CiAgICAgICAgIGNhbGxiYWNrKENhbGxiYWNrQmFzZTo6
RXJyb3I6Ok93bmVyV2FzSW52YWxpZGF0ZWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0g
ICAgaWYgKGNvbnRlbnRUeXBlKQotICAgICAgICBhdHRhY2htZW50LT5zZXRDb250ZW50VHlwZSgq
Y29udGVudFR5cGUpOwotCiAgICAgYXV0byBhdHRhY2htZW50SWRlbnRpZmllciA9IGF0dGFjaG1l
bnQtPmlkZW50aWZpZXIoKTsKLSAgICBtX2F0dGFjaG1lbnRJZGVudGlmaWVyVG9BdHRhY2htZW50
TWFwLnNldChhdHRhY2htZW50SWRlbnRpZmllciwgV1RGTW92ZShhdHRhY2htZW50KSk7Ci0KICAg
ICBhdXRvIGNhbGxiYWNrSUQgPSBtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFjayksIG1f
cHJvY2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5VG9rZW4oKSk7Ci0gICAgbV9w
cm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpJbnNlcnRBdHRhY2htZW50KGF0dGFjaG1l
bnRJZGVudGlmaWVyLCBvcHRpb25zLCBmaWxlU2l6ZSwgZmlsZW5hbWUsIGNvbnRlbnRUeXBlLCBj
YWxsYmFja0lEKSwgbV9wYWdlSUQpOworICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2Vi
UGFnZTo6SW5zZXJ0QXR0YWNobWVudChhdHRhY2htZW50SWRlbnRpZmllciwgb3B0aW9ucywgYXR0
YWNobWVudC0+ZmlsZVNpemVGb3JEaXNwbGF5KCksIGF0dGFjaG1lbnQtPmZpbGVOYW1lKCksIGF0
dGFjaG1lbnQtPmNvbnRlbnRUeXBlKCksIGNhbGxiYWNrSUQpLCBtX3BhZ2VJRCk7CisgICAgbV9h
dHRhY2htZW50SWRlbnRpZmllclRvQXR0YWNobWVudE1hcC5zZXQoYXR0YWNobWVudElkZW50aWZp
ZXIsIFdURk1vdmUoYXR0YWNobWVudCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QXR0
YWNobWVudERpc3BsYXlPcHRpb25zKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgQXR0YWNobWVu
dERpc3BsYXlPcHRpb25zIG9wdGlvbnMsIEZ1bmN0aW9uPHZvaWQoQ2FsbGJhY2tCYXNlOjpFcnJv
cik+JiYgY2FsbGJhY2spCkBAIC03Nzc5LDcgKzc3NzUsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6
c2V0QXR0YWNobWVudERpc3BsYXlPcHRpb25zKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgQXR0
YWNobQogICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0QXR0YWNobWVu
dERpc3BsYXlPcHRpb25zKGlkZW50aWZpZXIsIG9wdGlvbnMsIGNhbGxiYWNrSUQpLCBtX3BhZ2VJ
RCk7CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojp1cGRhdGVBdHRhY2htZW50QXR0cmlidXRlcyhj
b25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIHVpbnQ2NF90IGZpbGVTaXplLCBzdGQ6Om9wdGlvbmFs
PFN0cmluZz4mJiBuZXdDb250ZW50VHlwZSwgc3RkOjpvcHRpb25hbDxTdHJpbmc+JiYgbmV3Rmls
ZW5hbWUsIEZ1bmN0aW9uPHZvaWQoQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2spCit2
b2lkIFdlYlBhZ2VQcm94eTo6dXBkYXRlQXR0YWNobWVudEF0dHJpYnV0ZXMoY29uc3QgQVBJOjpB
dHRhY2htZW50JiBhdHRhY2htZW50LCBGdW5jdGlvbjx2b2lkKENhbGxiYWNrQmFzZTo6RXJyb3Ip
PiYmIGNhbGxiYWNrKQogewogICAgIGlmICghaXNWYWxpZCgpKSB7CiAgICAgICAgIGNhbGxiYWNr
KENhbGxiYWNrQmFzZTo6RXJyb3I6Ok93bmVyV2FzSW52YWxpZGF0ZWQpOwpAQCAtNzc4Nyw3ICs3
NzgzLDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnVwZGF0ZUF0dGFjaG1lbnRBdHRyaWJ1dGVzKGNv
bnN0IFN0cmluZyYgaWRlbnRpZmllciwgdWludDY0X3QKICAgICB9CiAKICAgICBhdXRvIGNhbGxi
YWNrSUQgPSBtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFjayksIG1fcHJvY2Vzcy0+dGhy
b3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5VG9rZW4oKSk7Ci0gICAgbV9wcm9jZXNzLT5zZW5k
KE1lc3NhZ2VzOjpXZWJQYWdlOjpVcGRhdGVBdHRhY2htZW50QXR0cmlidXRlcyhpZGVudGlmaWVy
LCBmaWxlU2l6ZSwgV1RGTW92ZShuZXdDb250ZW50VHlwZSksIFdURk1vdmUobmV3RmlsZW5hbWUp
LCBjYWxsYmFja0lEKSwgbV9wYWdlSUQpOworICAgIGF1dG8gbmFtZSA9IGF0dGFjaG1lbnQuZmls
ZU5hbWUoKTsKKyAgICBhdXRvIG9wdGlvbmFsTmFtZSA9IG5hbWUuaXNOdWxsKCkgPyBzdGQ6Om51
bGxvcHQgOiBzdGQ6Om9wdGlvbmFsPFdURjo6U3RyaW5nPiB7IG5hbWUgfTsKKyAgICBtX3Byb2Nl
c3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlVwZGF0ZUF0dGFjaG1lbnRBdHRyaWJ1dGVzKGF0
dGFjaG1lbnQuaWRlbnRpZmllcigpLCBhdHRhY2htZW50LmZpbGVTaXplRm9yRGlzcGxheSgpLCBh
dHRhY2htZW50LmNvbnRlbnRUeXBlKCksIFdURk1vdmUob3B0aW9uYWxOYW1lKSwgY2FsbGJhY2tJ
RCksIG1fcGFnZUlEKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnJlZ2lzdGVyQXR0YWNobWVu
dElkZW50aWZpZXJGcm9tRGF0YShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IFN0cmlu
ZyYgY29udGVudFR5cGUsIGNvbnN0IFN0cmluZyYgcHJlZmVycmVkRmlsZU5hbWUsIGNvbnN0IElQ
Qzo6RGF0YVJlZmVyZW5jZSYgZGF0YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9j
ZXNzL1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5
LmgKaW5kZXggMmViMjQxZWY3YTgzYjRkNDY0NjJlMTgzYTAwNjBkMjhjNWFkY2FkMy4uNzE5MTNh
YzVmODk0ODJhZTA4OTcwZDc3MjM5ODA2MmE3OWQ2ZTE5YSAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmgKQEAgLTEzMTksOSArMTMxOSw5IEBAIHB1YmxpYzoKIAogI2lmIEVO
QUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCiAgICAgUmVmUHRyPEFQSTo6QXR0YWNobWVudD4gYXR0
YWNobWVudEZvcklkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKSBjb25zdDsKLSAg
ICB2b2lkIGluc2VydEF0dGFjaG1lbnQoUmVmPEFQSTo6QXR0YWNobWVudD4mJiwgY29uc3QgV2Vi
Q29yZTo6QXR0YWNobWVudERpc3BsYXlPcHRpb25zJiwgdWludDY0X3QgZmlsZVNpemUsIGNvbnN0
IFN0cmluZyYgZmlsZU5hbWUsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBjb250ZW50VHlwZSwgRnVu
Y3Rpb248dm9pZChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7CisgICAgdm9pZCBpbnNlcnRBdHRh
Y2htZW50KFJlZjxBUEk6OkF0dGFjaG1lbnQ+JiYsIGNvbnN0IFdlYkNvcmU6OkF0dGFjaG1lbnRE
aXNwbGF5T3B0aW9ucyYsIEZ1bmN0aW9uPHZvaWQoQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYpOwog
ICAgIHZvaWQgc2V0QXR0YWNobWVudERpc3BsYXlPcHRpb25zKGNvbnN0IFN0cmluZyYgaWRlbnRp
ZmllciwgV2ViQ29yZTo6QXR0YWNobWVudERpc3BsYXlPcHRpb25zLCBGdW5jdGlvbjx2b2lkKENh
bGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsKLSAgICB2b2lkIHVwZGF0ZUF0dGFjaG1lbnRBdHRyaWJ1
dGVzKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgdWludDY0X3QgZmlsZVNpemUsIHN0ZDo6b3B0
aW9uYWw8U3RyaW5nPiYmIG5ld0NvbnRlbnRUeXBlLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4mJiBu
ZXdGaWxlbmFtZSwgRnVuY3Rpb248dm9pZChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7CisgICAg
dm9pZCB1cGRhdGVBdHRhY2htZW50QXR0cmlidXRlcyhjb25zdCBBUEk6OkF0dGFjaG1lbnQmLCBG
dW5jdGlvbjx2b2lkKENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsKICNlbmRpZgogCiAjaWYgRU5B
QkxFKEFQUExJQ0FUSU9OX01BTklGRVNUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2Vi
UGFnZS9XZWJQYWdlLmNwcAppbmRleCBiNWI3MTFhNmM2NThjNmRhMTJiN2Y0ZjZmNWE4ZDhmZWFl
NGY4ZDZmLi40YjVmNWFiODY5MGVmZTY5YWRjZDEzNjBlN2MxOTg4YWRmMDUwZmY1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9T
b3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtNjA2NiwxMCAr
NjA2NiwxMCBAQCB2b2lkIFdlYlBhZ2U6OnN0b3JhZ2VBY2Nlc3NSZXNwb25zZShib29sIHdhc0dy
YW50ZWQsIHVpbnQ2NF90IGNvbnRleHRJZCkKIAogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1F
TlQpCiAKLXZvaWQgV2ViUGFnZTo6aW5zZXJ0QXR0YWNobWVudChjb25zdCBTdHJpbmcmIGlkZW50
aWZpZXIsIGNvbnN0IEF0dGFjaG1lbnREaXNwbGF5T3B0aW9ucyYgb3B0aW9ucywgdWludDY0X3Qg
ZmlsZVNpemUsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBj
b250ZW50VHlwZSwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQordm9pZCBXZWJQYWdlOjppbnNlcnRB
dHRhY2htZW50KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgQXR0YWNobWVudERpc3Bs
YXlPcHRpb25zJiBvcHRpb25zLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiYmIGZpbGVTaXplLCBj
b25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlLCBDYWxsYmFj
a0lEIGNhbGxiYWNrSUQpCiB7CiAgICAgYXV0byYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJv
bGxlcigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIGZyYW1lLmVkaXRvcigpLmluc2VydEF0
dGFjaG1lbnQoaWRlbnRpZmllciwgb3B0aW9ucywgZmlsZVNpemUsIGZpbGVOYW1lLCBXVEZNb3Zl
KGNvbnRlbnRUeXBlKSk7CisgICAgZnJhbWUuZWRpdG9yKCkuaW5zZXJ0QXR0YWNobWVudChpZGVu
dGlmaWVyLCBvcHRpb25zLCBXVEZNb3ZlKGZpbGVTaXplKSwgZmlsZU5hbWUsIGNvbnRlbnRUeXBl
KTsKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlZvaWRDYWxsYmFjayhjYWxsYmFj
a0lEKSk7CiB9CiAKQEAgLTYwNzgsMTEgKzYwNzgsMTEgQEAgdm9pZCBXZWJQYWdlOjpzZXRBdHRh
Y2htZW50RGlzcGxheU9wdGlvbnMoY29uc3QgU3RyaW5nJiwgY29uc3QgQXR0YWNobWVudERpc3Bs
YXkKICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlZvaWRDYWxsYmFjayhjYWxsYmFj
a0lEKSk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6dXBkYXRlQXR0YWNobWVudEF0dHJpYnV0ZXMoY29u
c3QgU3RyaW5nJiBpZGVudGlmaWVyLCB1aW50NjRfdCBmaWxlU2l6ZSwgc3RkOjpvcHRpb25hbDxT
dHJpbmc+IG5ld0NvbnRlbnRUeXBlLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gbmV3RmlsZW5hbWUs
IENhbGxiYWNrSUQgY2FsbGJhY2tJRCkKK3ZvaWQgV2ViUGFnZTo6dXBkYXRlQXR0YWNobWVudEF0
dHJpYnV0ZXMoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90
PiYmIGZpbGVTaXplLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlLCBzdGQ6Om9wdGlvbmFsPFN0
cmluZz4mJiBuZXdGaWxlbmFtZSwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogewogICAgIGlmIChh
dXRvIGF0dGFjaG1lbnQgPSBhdHRhY2htZW50RWxlbWVudFdpdGhJZGVudGlmaWVyKGlkZW50aWZp
ZXIpKSB7CiAgICAgICAgIGF0dGFjaG1lbnQtPmRvY3VtZW50KCkudXBkYXRlTGF5b3V0KCk7Ci0g
ICAgICAgIGF0dGFjaG1lbnQtPnVwZGF0ZUF0dHJpYnV0ZXMoZmlsZVNpemUsIFdURk1vdmUobmV3
Q29udGVudFR5cGUpLCBXVEZNb3ZlKG5ld0ZpbGVuYW1lKSk7CisgICAgICAgIGF0dGFjaG1lbnQt
PnVwZGF0ZUF0dHJpYnV0ZXMoV1RGTW92ZShmaWxlU2l6ZSksIGNvbnRlbnRUeXBlLCBXVEZNb3Zl
KG5ld0ZpbGVuYW1lKSk7CiAgICAgfQogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6
Vm9pZENhbGxiYWNrKGNhbGxiYWNrSUQpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UuaAppbmRleCA2YmUxY2JmYzc2YzMzNjk3NmZiMWYyMWQ0MDkxYWQ3NjE2
ZWQ4ZjAyLi40ZDRhZTg1MWIyNjVlY2IzOWUwZjVlZWE0MGFlMDEwNjlkNDQwMDgxIDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC0xMDc1LDkgKzEwNzUs
OSBAQCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCi0g
ICAgdm9pZCBpbnNlcnRBdHRhY2htZW50KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3Qg
V2ViQ29yZTo6QXR0YWNobWVudERpc3BsYXlPcHRpb25zJiwgdWludDY0X3QgZmlsZVNpemUsIGNv
bnN0IFN0cmluZyYgZmlsZU5hbWUsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBjb250ZW50VHlwZSwg
Q2FsbGJhY2tJRCk7CisgICAgdm9pZCBpbnNlcnRBdHRhY2htZW50KGNvbnN0IFN0cmluZyYgaWRl
bnRpZmllciwgY29uc3QgV2ViQ29yZTo6QXR0YWNobWVudERpc3BsYXlPcHRpb25zJiwgc3RkOjpv
cHRpb25hbDx1aW50NjRfdD4mJiBmaWxlU2l6ZSwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29u
c3QgU3RyaW5nJiBjb250ZW50VHlwZSwgQ2FsbGJhY2tJRCk7CiAgICAgdm9pZCBzZXRBdHRhY2ht
ZW50RGlzcGxheU9wdGlvbnMoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3Jl
OjpBdHRhY2htZW50RGlzcGxheU9wdGlvbnMmLCBDYWxsYmFja0lEKTsKLSAgICB2b2lkIHVwZGF0
ZUF0dGFjaG1lbnRBdHRyaWJ1dGVzKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgdWludDY0X3Qg
ZmlsZVNpemUsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBuZXdDb250ZW50VHlwZSwgc3RkOjpvcHRp
b25hbDxTdHJpbmc+IG5ld0ZpbGVuYW1lLCBDYWxsYmFja0lEKTsKKyAgICB2b2lkIHVwZGF0ZUF0
dGFjaG1lbnRBdHRyaWJ1dGVzKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgc3RkOjpvcHRpb25h
bDx1aW50NjRfdD4mJiBmaWxlU2l6ZSwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSwgc3RkOjpv
cHRpb25hbDxTdHJpbmc+JiYgbmV3RmlsZW5hbWUsIENhbGxiYWNrSUQpOwogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoQVBQTElDQVRJT05fTUFOSUZFU1QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgppbmRleCA5NmU0ODdlZTYyZjVh
MTQ2ZGFkYTg3ZWQ5YThlMTlhZjRlZGRiZjFhLi4yODlhYmRhODdmMDUzYjRiYWMyNWJlYWQwNTUy
NDY0N2Q5NzQ2NTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KQEAgLTUxMCw5ICs1MTAsOSBAQCBtZXNzYWdlcyAtPiBX
ZWJQYWdlIExlZ2FjeVJlY2VpdmVyIHsKICNlbmRpZgogCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRf
RUxFTUVOVCkKLSAgICBJbnNlcnRBdHRhY2htZW50KFN0cmluZyBpZGVudGlmaWVyLCBzdHJ1Y3Qg
V2ViQ29yZTo6QXR0YWNobWVudERpc3BsYXlPcHRpb25zIG9wdGlvbnMsIHVpbnQ2NF90IGZpbGVT
aXplLCBTdHJpbmcgZmlsZU5hbWUsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBjb250ZW50VHlwZSwg
V2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCisgICAgSW5zZXJ0QXR0YWNobWVudChTdHJp
bmcgaWRlbnRpZmllciwgc3RydWN0IFdlYkNvcmU6OkF0dGFjaG1lbnREaXNwbGF5T3B0aW9ucyBv
cHRpb25zLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmaWxlU2l6ZSwgU3RyaW5nIGZpbGVOYW1l
LCBTdHJpbmcgY29udGVudFR5cGUsIFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQogICAg
IFNldEF0dGFjaG1lbnREaXNwbGF5T3B0aW9ucyhTdHJpbmcgaWRlbnRpZmllciwgc3RydWN0IFdl
YkNvcmU6OkF0dGFjaG1lbnREaXNwbGF5T3B0aW9ucyBvcHRpb25zLCBXZWJLaXQ6OkNhbGxiYWNr
SUQgY2FsbGJhY2tJRCkKLSAgICBVcGRhdGVBdHRhY2htZW50QXR0cmlidXRlcyhTdHJpbmcgaWRl
bnRpZmllciwgdWludDY0X3QgZmlsZVNpemUsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBuZXdDb250
ZW50VHlwZSwgc3RkOjpvcHRpb25hbDxTdHJpbmc+IG5ld0ZpbGVuYW1lLCBXZWJLaXQ6OkNhbGxi
YWNrSUQgY2FsbGJhY2tJRCkKKyAgICBVcGRhdGVBdHRhY2htZW50QXR0cmlidXRlcyhTdHJpbmcg
aWRlbnRpZmllciwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZmlsZVNpemUsIFN0cmluZyBuZXdD
b250ZW50VHlwZSwgc3RkOjpvcHRpb25hbDxTdHJpbmc+IG5ld0ZpbGVuYW1lLCBXZWJLaXQ6OkNh
bGxiYWNrSUQgY2FsbGJhY2tJRCkKICNlbmRpZgogCiAjaWYgRU5BQkxFKEFQUExJQ0FUSU9OX01B
TklGRVNUKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmlu
ZGV4IDYzYTg3NWNjNTgwMmJiZmMyZDdiNjEyNzU4YmNlYzJmN2I3YzE3OTIuLmZmOGQ4MmVmMDUz
ZTczMmEzNDg0Njc4N2MxNTg2ODc4YTc0NTRkZWMgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxv
ZworKysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw0OCBAQAorMjAxOC0wOC0yNiAgV2Vu
c29uIEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29jb2FdIEV4
Y2VwdGlvbiAoZmlsZVR5cGUgJ2R5bi5hZ3E4dScgaXMgbm90IGEgdmFsaWQgVVRJKSByYWlzZWQg
d2hlbiBkcmFnZ2luZyBhbiBhdHRhY2htZW50IHdob3NlIGZpbGUgd3JhcHBlciBpcyBhIGRpcmVj
dG9yeQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg4
OTAzCisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80MzcwMjk5Mz4KKworICAgICAgICBSZXZpZXdl
ZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBBZGQgdHdvIEFQSSB0ZXN0cyBhbmQgYWRq
dXN0IGV4aXN0aW5nIFdLQXR0YWNobWVudCBBUEkgdGVzdHMuIFRoZSBuZXcgdGVzdHMgZXhlcmNp
c2UgdGhlIGZvbGxvd2luZyBzY2VuYXJpb3MsIGluCisgICAgICAgIGJvdGggaU9TIGFuZCBtYWNP
UzoKKyAgICAgICAg4oCiICAgICAgIERyb3BwaW5nIGEgZm9sZGVyIGFzIGFuIGF0dGFjaG1lbnQg
ZWxlbWVudCwgYW5kIHRoZW4gbW92aW5nIHRoYXQgYXR0YWNobWVudCBlbGVtZW50IGluIHRoZSBk
b2N1bWVudCBieQorICAgICAgICAgICAgICAgIGRyYWdnaW5nIGFuZCBkcm9wcGluZy4KKyAgICAg
ICAg4oCiICAgICAgIFVzaW5nIFdLV2ViVmlldyBTUEkgdG8gaW5zZXJ0IGEgZm9sZGVyIGFuZCBh
IGZpbGUgd2l0aCBhbiB1bmtub3duIGV4dGVuc2lvbiwgYW5kIHRoZW4gdXNpbmcgbW9yZQorICAg
ICAgICAgICAgICAgIF9XS0F0dGFjaG1lbnQgU1BJIHRvIHN3YXAgdGhlIGF0dGFjaG1lbnRzJyBi
YWNraW5nIGZpbGUgd3JhcHBlcnMuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL1Rlc3RzL1dl
YktpdENvY29hL1dLQXR0YWNobWVudFRlc3RzLm1tOgorICAgICAgICAocnVuVGVzdFdpdGhUZW1w
b3JhcnlGb2xkZXIpOgorCisgICAgICAgIEFkZCBhIGhlbHBlciBmdW5jdGlvbiB0byBydW4gYSB0
ZXN0IHdpdGggYSBuZXcgZm9sZGVyIHBhdGgsIGNyZWF0ZWQgaW4gdGhlIHRlbXBvcmFyeSBkaXJl
Y3RvcnkgYW5kIHBvcHVsYXRlZAorICAgICAgICB3aXRoIHNvbWUgc2FtcGxlIGNvbnRlbnQuIFRo
aXMgZm9sZGVyIGlzIGRlbGV0ZWQgYWZ0ZXIgcnVubmluZyB0aGUgdGVzdC4KKworICAgICAgICAo
c2ltdWxhdGVGb2xkZXJEcmFnV2l0aFVSTCk6CisKKyAgICAgICAgQWRkIGEgaGVscGVyIGZ1bmN0
aW9uIHRvIHByZXBhcmUgYSBnaXZlbiBEcmFnQW5kRHJvcFNpbXVsYXRvciBmb3Igc2ltdWxhdGlu
ZyBhIGRyYWdnZWQgZm9sZGVyIGZyb20gYSBzb3VyY2UKKyAgICAgICAgZXh0ZXJuYWwgdG8gdGhl
IHdlYiB2aWV3LgorCisgICAgICAgIChUZXN0V2ViS2l0QVBJOjpURVNUKToKKworICAgICAgICBB
ZGQgbmV3IEFQSSB0ZXN0cywgYW5kIGFkanVzdCBleGlzdGluZyB0ZXN0cyB0byByZWZsZWN0IG5l
dyAtc2V0RmlsZVdyYXBwZXI64oCmOiBiZWhhdmlvci4gU3BlY2lmaWNhbGx5LAorICAgICAgICBD
aGFuZ2VBdHRhY2htZW50RGF0YUFuZEZpbGVJbmZvcm1hdGlvbiBwcmV2aW91c2x5IHJlcXVpcmVk
IHRoYXQgY2hhbmdpbmcgYSBfV0tBdHRhY2htZW50J3MgTlNGaWxlV3JhcHBlciB3b3VsZAorICAg
ICAgICBwcmVzZXJ2ZSB0aGUgcHJldmlvdXMgTlNGaWxlV3JhcHBlcidzIHByZWZlcnJlZCBuYW1l
IGlmIHRoZSBuZXcgZmlsZSB3cmFwcGVyIGRvZXMgbm90IGhhdmUgYSBwcmVmZXJyZWQgbmFtZSwg
YnV0CisgICAgICAgIHRoaXMgcXVpcmsgaXMgbm8gbG9uZ2VyIHN1cHBvcnRlZC4KKworICAgICAg
ICBBbHNvIGFkZCBhIGZldyBicmlkZ2luZyBjYXN0cyB3aGVuIGNvbnZlcnRpbmcgZnJvbSBDRlN0
cmluZ1JlZiB0byBOU1N0cmluZyBhbmQgdmljZSB2ZXJzYS4KKworICAgICAgICAqIFRlc3RXZWJL
aXRBUEkvY29jb2EvRHJhZ0FuZERyb3BTaW11bGF0b3IuaDoKKworICAgICAgICBBZGQgYSBuZXcg
aG9vayB0byBjbGVhciBhbnkgZXh0ZXJuYWwgZHJhZyBpbmZvcm1hdGlvbiBvbiBhbiBleGlzdGlu
ZyBEcmFnQW5kRHJvcFNpbXVsYXRvci4gVGhpcyBpcyBjb252ZW5pZW50CisgICAgICAgIHdoZW4g
dXNpbmcgdGhlIHNhbWUgRHJhZ0FuZERyb3BTaW11bGF0b3IgdG8gcGVyZm9ybSBtdWx0aXBsZSBk
cmFncyBpbiBhIHNpbmdsZSB0ZXN0LgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9pb3MvRHJh
Z0FuZERyb3BTaW11bGF0b3JJT1MubW06CisgICAgICAgICgtW0RyYWdBbmREcm9wU2ltdWxhdG9y
IGNsZWFyRXh0ZXJuYWxEcmFnSW5mb3JtYXRpb25dKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJ
L21hYy9EcmFnQW5kRHJvcFNpbXVsYXRvck1hYy5tbToKKyAgICAgICAgKC1bRHJhZ0FuZERyb3BT
aW11bGF0b3IgY2xlYXJFeHRlcm5hbERyYWdJbmZvcm1hdGlvbl0pOgorCiAyMDE4LTA4LTI2ICBT
YW0gV2VpbmlnICA8c2FtQHdlYmtpdC5vcmc+CiAKICAgICAgICAgVXNpbmcgX1dLUmVtb3RlT2Jq
ZWN0SW50ZXJmYWNlIHdpdGggYSBwcm90b2NvbCB0aGF0IGluaGVyaXRzIGZyb20gYSBub24tTlNP
YmplY3QgcHJvdG9jb2wgY3Jhc2hlcwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9U
ZXN0cy9XZWJLaXRDb2NvYS9XS0F0dGFjaG1lbnRUZXN0cy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tBdHRhY2htZW50VGVzdHMubW0KaW5kZXggZGQyNjg3OTQx
Zjg2MzYzMmYxMTVmZjI5YzVmYjI5N2NkMjMwMzljOC4uMWZlMGUyYzI2YWE0ZjFjN2RmODVhZDY3
OWQxYTc5NThhNmVjZGM4YiAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdlYktpdEFQSS9UZXN0cy9X
ZWJLaXRDb2NvYS9XS0F0dGFjaG1lbnRUZXN0cy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L1Rlc3RzL1dlYktpdENvY29hL1dLQXR0YWNobWVudFRlc3RzLm1tCkBAIC0zOTgsNiArMzk4LDM3
IEBAIHN0YXRpYyBOU0RhdGEgKnRlc3RQREZEYXRhKCkKIAogQGVuZAogCitzdGF0aWMgdm9pZCBy
dW5UZXN0V2l0aFRlbXBvcmFyeUZvbGRlcih2b2lkKF5ydW5UZXN0KShOU1VSTCAqZm9sZGVyVVJM
KSkKK3sKKyAgICBOU0ZpbGVNYW5hZ2VyICpkZWZhdWx0TWFuYWdlciA9IFtOU0ZpbGVNYW5hZ2Vy
IGRlZmF1bHRNYW5hZ2VyXTsKKyAgICBhdXRvIHRlbXBvcmFyeUZvbGRlciA9IHJldGFpblB0cihb
TlNVUkwgZmlsZVVSTFdpdGhQYXRoOltOU1RlbXBvcmFyeURpcmVjdG9yeSgpIHN0cmluZ0J5QXBw
ZW5kaW5nUGF0aENvbXBvbmVudDpbTlNTdHJpbmcgc3RyaW5nV2l0aEZvcm1hdDpAImZvbGRlci0l
QCIsIE5TVVVJRC5VVUlEXV0gaXNEaXJlY3Rvcnk6WUVTXSk7CisgICAgW2RlZmF1bHRNYW5hZ2Vy
IHJlbW92ZUl0ZW1BdFVSTDp0ZW1wb3JhcnlGb2xkZXIuZ2V0KCkgZXJyb3I6bmlsXTsKKyAgICBb
ZGVmYXVsdE1hbmFnZXIgY3JlYXRlRGlyZWN0b3J5QXRVUkw6dGVtcG9yYXJ5Rm9sZGVyLmdldCgp
IHdpdGhJbnRlcm1lZGlhdGVEaXJlY3RvcmllczpOTyBhdHRyaWJ1dGVzOm5pbCBlcnJvcjpuaWxd
OworICAgIFt0ZXN0SW1hZ2VEYXRhKCkgd3JpdGVUb1VSTDpbdGVtcG9yYXJ5Rm9sZGVyLmdldCgp
IFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAImltYWdlLnBuZyIgaXNEaXJlY3Rvcnk6Tk9d
IGF0b21pY2FsbHk6WUVTXTsKKyAgICBbdGVzdFpJUERhdGEoKSB3cml0ZVRvVVJMOlt0ZW1wb3Jh
cnlGb2xkZXIuZ2V0KCkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OkAiYXJjaGl2ZS56aXAi
IGlzRGlyZWN0b3J5Ok5PXSBhdG9taWNhbGx5OllFU107CisgICAgQHRyeSB7CisgICAgICAgIHJ1
blRlc3QodGVtcG9yYXJ5Rm9sZGVyLmdldCgpKTsKKyAgICB9IEBmaW5hbGx5IHsKKyAgICAgICAg
W1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSByZW1vdmVJdGVtQXRVUkw6dGVtcG9yYXJ5
Rm9sZGVyLmdldCgpIGVycm9yOm5pbF07CisgICAgfQorfQorCitzdGF0aWMgdm9pZCBzaW11bGF0
ZUZvbGRlckRyYWdXaXRoVVJMKERyYWdBbmREcm9wU2ltdWxhdG9yICpzaW11bGF0b3IsIE5TVVJM
ICpmb2xkZXJVUkwpCit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIFtzaW11bGF0b3Igd3JpdGVQ
cm9taXNlZEZpbGVzOkBbIGZvbGRlclVSTCBdXTsKKyNlbHNlCisgICAgYXV0byBmb2xkZXJQcm92
aWRlciA9IGFkb3B0TlMoW1tOU0l0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOworICAgIFtmb2xk
ZXJQcm92aWRlciBzZXRTdWdnZXN0ZWROYW1lOmZvbGRlclVSTC5sYXN0UGF0aENvbXBvbmVudF07
CisgICAgW2ZvbGRlclByb3ZpZGVyIHNldFByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlOlVJUHJl
ZmVycmVkUHJlc2VudGF0aW9uU3R5bGVBdHRhY2htZW50XTsKKyAgICBbZm9sZGVyUHJvdmlkZXIg
cmVnaXN0ZXJGaWxlUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmllcjooX19icmlkZ2UgTlNT
dHJpbmcgKilrVVRUeXBlRm9sZGVyIGZpbGVPcHRpb25zOjAgdmlzaWJpbGl0eTpOU0l0ZW1Qcm92
aWRlclJlcHJlc2VudGF0aW9uVmlzaWJpbGl0eUFsbCBsb2FkSGFuZGxlcjpbJl0gKHZvaWQoXmNv
bXBsZXRpb24pKE5TVVJMICosIEJPT0wsIE5TRXJyb3IgKikpIC0+IE5TUHJvZ3Jlc3MgKiB7Cisg
ICAgICAgIGNvbXBsZXRpb24oZm9sZGVyVVJMLCBOTywgbmlsKTsKKyAgICAgICAgcmV0dXJuIG5p
bDsKKyAgICB9XTsKKyAgICBzaW11bGF0b3IuZXh0ZXJuYWxJdGVtUHJvdmlkZXJzID0gQFsgZm9s
ZGVyUHJvdmlkZXIuZ2V0KCkgXTsKKyNlbmRpZgorfQorCiAjcHJhZ21hIG1hcmsgLSBQbGF0Zm9y
bSB0ZXN0aW5nIGhlbHBlciBmdW5jdGlvbnMKIAogI2lmIFBMQVRGT1JNKE1BQykKQEAgLTQ1OCw5
ICs0ODksOSBAQCB0eXBlZGVmIHZvaWQoXkl0ZW1Qcm92aWRlckRhdGFMb2FkSGFuZGxlcikoTlNE
YXRhICosIE5TRXJyb3IgKik7CiAKIHZvaWQgcGxhdGZvcm1Db3B5UmljaFRleHRXaXRoTXVsdGlw
bGVBdHRhY2htZW50cygpCiB7Ci0gICAgYXV0byBpbWFnZSA9IGFkb3B0TlMoW1tOU1RleHRBdHRh
Y2htZW50IGFsbG9jXSBpbml0V2l0aERhdGE6dGVzdEltYWdlRGF0YSgpIG9mVHlwZTooTlNTdHJp
bmcgKilrVVRUeXBlUE5HXSk7Ci0gICAgYXV0byBwZGYgPSBhZG9wdE5TKFtbTlNUZXh0QXR0YWNo
bWVudCBhbGxvY10gaW5pdFdpdGhEYXRhOnRlc3RQREZEYXRhKCkgb2ZUeXBlOihOU1N0cmluZyAq
KWtVVFR5cGVQREZdKTsKLSAgICBhdXRvIHppcCA9IGFkb3B0TlMoW1tOU1RleHRBdHRhY2htZW50
IGFsbG9jXSBpbml0V2l0aERhdGE6dGVzdFpJUERhdGEoKSBvZlR5cGU6KE5TU3RyaW5nICopa1VU
VHlwZVppcEFyY2hpdmVdKTsKKyAgICBhdXRvIGltYWdlID0gYWRvcHROUyhbW05TVGV4dEF0dGFj
aG1lbnQgYWxsb2NdIGluaXRXaXRoRGF0YTp0ZXN0SW1hZ2VEYXRhKCkgb2ZUeXBlOihfX2JyaWRn
ZSBOU1N0cmluZyAqKWtVVFR5cGVQTkddKTsKKyAgICBhdXRvIHBkZiA9IGFkb3B0TlMoW1tOU1Rl
eHRBdHRhY2htZW50IGFsbG9jXSBpbml0V2l0aERhdGE6dGVzdFBERkRhdGEoKSBvZlR5cGU6KF9f
YnJpZGdlIE5TU3RyaW5nICopa1VUVHlwZVBERl0pOworICAgIGF1dG8gemlwID0gYWRvcHROUyhb
W05TVGV4dEF0dGFjaG1lbnQgYWxsb2NdIGluaXRXaXRoRGF0YTp0ZXN0WklQRGF0YSgpIG9mVHlw
ZTooX19icmlkZ2UgTlNTdHJpbmcgKilrVVRUeXBlWmlwQXJjaGl2ZV0pOwogCiAgICAgYXV0byBy
aWNoVGV4dCA9IGFkb3B0TlMoW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0
XSk7CiAgICAgW3JpY2hUZXh0IGFwcGVuZEF0dHJpYnV0ZWRTdHJpbmc6W05TQXR0cmlidXRlZFN0
cmluZyBhdHRyaWJ1dGVkU3RyaW5nV2l0aEF0dGFjaG1lbnQ6aW1hZ2UuZ2V0KCldXTsKQEAgLTQ4
MSw3ICs1MTIsNyBAQCB2b2lkIHBsYXRmb3JtQ29weVJpY2hUZXh0V2l0aE11bHRpcGxlQXR0YWNo
bWVudHMoKQogdm9pZCBwbGF0Zm9ybUNvcHlSaWNoVGV4dFdpdGhJbWFnZSgpCiB7CiAgICAgYXV0
byByaWNoVGV4dCA9IGFkb3B0TlMoW1tOU011dGFibGVBdHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBp
bml0XSk7Ci0gICAgYXV0byBpbWFnZSA9IGFkb3B0TlMoW1tOU1RleHRBdHRhY2htZW50IGFsbG9j
XSBpbml0V2l0aERhdGE6dGVzdEltYWdlRGF0YSgpIG9mVHlwZTooTlNTdHJpbmcgKilrVVRUeXBl
UE5HXSk7CisgICAgYXV0byBpbWFnZSA9IGFkb3B0TlMoW1tOU1RleHRBdHRhY2htZW50IGFsbG9j
XSBpbml0V2l0aERhdGE6dGVzdEltYWdlRGF0YSgpIG9mVHlwZTooX19icmlkZ2UgTlNTdHJpbmcg
KilrVVRUeXBlUE5HXSk7CiAKICAgICBbcmljaFRleHQgYXBwZW5kQXR0cmlidXRlZFN0cmluZzpb
W1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5nOkAiTG9yZW0gaXBzdW0g
Il0gYXV0b3JlbGVhc2VdXTsKICAgICBbcmljaFRleHQgYXBwZW5kQXR0cmlidXRlZFN0cmluZzpb
TlNBdHRyaWJ1dGVkU3RyaW5nIGF0dHJpYnV0ZWRTdHJpbmdXaXRoQXR0YWNobWVudDppbWFnZS5n
ZXQoKV1dOwpAQCAtNTA4LDcgKzUzOSw3IEBAIHZvaWQgcGxhdGZvcm1Db3B5UE5HKCkKICAgICBV
SVBhc3RlYm9hcmQgKnBhc3RlYm9hcmQgPSBbVUlQYXN0ZWJvYXJkIGdlbmVyYWxQYXN0ZWJvYXJk
XTsKICAgICBhdXRvIGl0ZW0gPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRd
KTsKICAgICBbaXRlbSBzZXRQcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZTpVSVByZWZlcnJlZFBy
ZXNlbnRhdGlvblN0eWxlQXR0YWNobWVudF07Ci0gICAgW2l0ZW0gcmVnaXN0ZXJEYXRhOnRlc3RJ
bWFnZURhdGEoKSB0eXBlOihOU1N0cmluZyAqKWtVVFR5cGVQTkddOworICAgIFtpdGVtIHJlZ2lz
dGVyRGF0YTp0ZXN0SW1hZ2VEYXRhKCkgdHlwZTooX19icmlkZ2UgTlNTdHJpbmcgKilrVVRUeXBl
UE5HXTsKICAgICBwYXN0ZWJvYXJkLml0ZW1Qcm92aWRlcnMgPSBAWyBpdGVtLmdldCgpIF07CiAj
ZW5kaWYKIH0KQEAgLTc0MCw2ICs3NzEsODcgQEAgVEVTVChXS0F0dGFjaG1lbnRUZXN0cywgQXR0
YWNobWVudERhdGFGb3JFbXB0eUZpbGUpCiAgICAgW2F0dGFjaG1lbnQgZXhwZWN0UmVxdWVzdGVk
RGF0YVRvQmU6W05TRGF0YSBkYXRhXV07CiB9CiAKK1RFU1QoV0tBdHRhY2htZW50VGVzdHMsIERy
b3BGb2xkZXJBc0F0dGFjaG1lbnRBbmRNb3ZlQnlEcmFnZ2luZykKK3sKKyAgICBhdXRvIGNvbmZp
Z3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJhdGlvbiBhbGxvY10gaW5pdF0p
OworICAgIFtjb25maWd1cmF0aW9uIF9zZXRBdHRhY2htZW50RWxlbWVudEVuYWJsZWQ6WUVTXTsK
KworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9wU2ltdWxhdG9yIGFs
bG9jXSBpbml0V2l0aFdlYlZpZXdGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDQwMCwgNDAwKSBjb25m
aWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICBbW3NpbXVsYXRvciB3ZWJWaWV3
XSBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6YXR0YWNobWVudEVkaXRpbmdUZXN0TWFya3Vw
XTsKKworICAgIHJ1blRlc3RXaXRoVGVtcG9yYXJ5Rm9sZGVyKFtzaW11bGF0b3JdIChOU1VSTCAq
Zm9sZGVyVVJMKSB7CisgICAgICAgIHNpbXVsYXRlRm9sZGVyRHJhZ1dpdGhVUkwoc2ltdWxhdG9y
LmdldCgpLCBmb2xkZXJVUkwpOworICAgICAgICBbc2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludE1h
a2UoMCwgMCkgdG86Q0dQb2ludE1ha2UoNTAsIDUwKV07CisKKyAgICAgICAgVGVzdFdLV2ViVmll
dyAqd2ViVmlldyA9IFtzaW11bGF0b3Igd2ViVmlld107CisgICAgICAgIGF1dG8gYXR0YWNobWVu
dCA9IHJldGFpblB0cihbc2ltdWxhdG9yIGluc2VydGVkQXR0YWNobWVudHNdLmZpcnN0T2JqZWN0
KTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKFthdHRhY2htZW50IHVuaXF1ZUlkZW50aWZpZXJd
LCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlT
ZWxlY3RvcignYXR0YWNobWVudCcpLnVuaXF1ZUlkZW50aWZpZXIiXSk7CisgICAgICAgIEVYUEVD
VF9XS19TVFJFUSgoX19icmlkZ2UgTlNTdHJpbmcgKilrVVRUeXBlRGlyZWN0b3J5LCBbd2ViVmll
dyB2YWx1ZU9mQXR0cmlidXRlOkAidHlwZSIgZm9yUXVlcnlTZWxlY3RvcjpAImF0dGFjaG1lbnQi
XSk7CisgICAgICAgIEVYUEVDVF9XS19TVFJFUShmb2xkZXJVUkwubGFzdFBhdGhDb21wb25lbnQs
IFt3ZWJWaWV3IHZhbHVlT2ZBdHRyaWJ1dGU6QCJ0aXRsZSIgZm9yUXVlcnlTZWxlY3RvcjpAImF0
dGFjaG1lbnQiXSk7CisKKyAgICAgICAgTlNGaWxlV3JhcHBlciAqaW1hZ2UgPSBbYXR0YWNobWVu
dCBpbmZvXS5maWxlV3JhcHBlci5maWxlV3JhcHBlcnNbQCJpbWFnZS5wbmciXTsKKyAgICAgICAg
TlNGaWxlV3JhcHBlciAqYXJjaGl2ZSA9IFthdHRhY2htZW50IGluZm9dLmZpbGVXcmFwcGVyLmZp
bGVXcmFwcGVyc1tAImFyY2hpdmUuemlwIl07CisgICAgICAgIEVYUEVDVF9UUlVFKFtpbWFnZS5y
ZWd1bGFyRmlsZUNvbnRlbnRzIGlzRXF1YWxUb0RhdGE6dGVzdEltYWdlRGF0YSgpXSk7CisgICAg
ICAgIEVYUEVDVF9UUlVFKFthcmNoaXZlLnJlZ3VsYXJGaWxlQ29udGVudHMgaXNFcXVhbFRvRGF0
YTp0ZXN0WklQRGF0YSgpXSk7CisKKyAgICAgICAgW3dlYlZpZXcgZXZhbHVhdGVKYXZhU2NyaXB0
OkAiZ2V0U2VsZWN0aW9uKCkuY29sbGFwc2VUb0VuZCgpIiBjb21wbGV0aW9uSGFuZGxlcjpuaWxd
OworICAgICAgICBbd2ViVmlldyBfZXhlY3V0ZUVkaXRDb21tYW5kOkAiSW5zZXJ0UGFyYWdyYXBo
IiBhcmd1bWVudDpuaWwgY29tcGxldGlvbjpuaWxdOworICAgICAgICBbd2ViVmlldyBfZXhlY3V0
ZUVkaXRDb21tYW5kOkAiSW5zZXJ0SFRNTCIgYXJndW1lbnQ6QCI8ZW0+Zm9vPC9lbT4iIGNvbXBs
ZXRpb246bmlsXTsKKyAgICAgICAgW3dlYlZpZXcgX2V4ZWN1dGVFZGl0Q29tbWFuZDpAIkluc2Vy
dFBhcmFncmFwaCIgYXJndW1lbnQ6bmlsIGNvbXBsZXRpb246bmlsXTsKKworICAgICAgICBbd2Vi
VmlldyBleHBlY3RFbGVtZW50VGFnOkAiQVRUQUNITUVOVCIgdG9Db21lQmVmb3JlOkAiRU0iXTsK
KyAgICAgICAgW3NpbXVsYXRvciBjbGVhckV4dGVybmFsRHJhZ0luZm9ybWF0aW9uXTsKKyAgICAg
ICAgW3NpbXVsYXRvciBydW5Gcm9tOndlYlZpZXcuYXR0YWNobWVudEVsZW1lbnRNaWRQb2ludCB0
bzpDR1BvaW50TWFrZSgzMDAsIDMwMCldOworICAgICAgICBbd2ViVmlldyBleHBlY3RFbGVtZW50
VGFnOkAiRU0iIHRvQ29tZUJlZm9yZTpAIkFUVEFDSE1FTlQiXTsKKyAgICB9KTsKK30KKworVEVT
VChXS0F0dGFjaG1lbnRUZXN0cywgSW5zZXJ0Rm9sZGVyQW5kRmlsZVdpdGhVbmtub3duRXh0ZW5z
aW9uKQoreworICAgIGF1dG8gd2ViVmlldyA9IHdlYlZpZXdGb3JUZXN0aW5nQXR0YWNobWVudHMo
KTsKKyAgICBhdXRvIGZpbGUgPSBhZG9wdE5TKFtbTlNGaWxlV3JhcHBlciBhbGxvY10gaW5pdFJl
Z3VsYXJGaWxlV2l0aENvbnRlbnRzOnRlc3RIVE1MRGF0YSgpXSk7CisgICAgW2ZpbGUgc2V0UHJl
ZmVycmVkRmlsZW5hbWU6QCJ0ZXN0LmZvb2JhciJdOworICAgIGF1dG8gaW1hZ2UgPSBhZG9wdE5T
KFtbTlNGaWxlV3JhcHBlciBhbGxvY10gaW5pdFJlZ3VsYXJGaWxlV2l0aENvbnRlbnRzOnRlc3RJ
bWFnZURhdGEoKV0pOworICAgIGF1dG8gZG9jdW1lbnQgPSBhZG9wdE5TKFtbTlNGaWxlV3JhcHBl
ciBhbGxvY10gaW5pdFJlZ3VsYXJGaWxlV2l0aENvbnRlbnRzOnRlc3RQREZEYXRhKCldKTsKKyAg
ICBhdXRvIGZvbGRlciA9IGFkb3B0TlMoW1tOU0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0RGlyZWN0
b3J5V2l0aEZpbGVXcmFwcGVyczpAeyBAImltYWdlLnBuZyI6IGltYWdlLmdldCgpLCBAImRvY3Vt
ZW50LnBkZiI6IGRvY3VtZW50LmdldCgpIH1dKTsKKyAgICBbZm9sZGVyIHNldFByZWZlcnJlZEZp
bGVuYW1lOkAiZm9sZGVyIl07CisKKyAgICBSZXRhaW5QdHI8X1dLQXR0YWNobWVudD4gZmlyc3RB
dHRhY2htZW50OworICAgIFJldGFpblB0cjxfV0tBdHRhY2htZW50PiBzZWNvbmRBdHRhY2htZW50
OworICAgIHsKKyAgICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2
ZXIod2ViVmlldy5nZXQoKSk7CisgICAgICAgIGZpcnN0QXR0YWNobWVudCA9IFt3ZWJWaWV3IHN5
bmNocm9ub3VzbHlJbnNlcnRBdHRhY2htZW50V2l0aEZpbGVXcmFwcGVyOmZpbGUuZ2V0KCkgY29u
dGVudFR5cGU6bmlsXTsKKyAgICAgICAgb2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMo
QFsgXSwgQFsgZmlyc3RBdHRhY2htZW50LmdldCgpIF0pOworICAgIH0KKyAgICB7CisgICAgICAg
IE9ic2VydmVBdHRhY2htZW50VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVyKHdlYlZpZXcuZ2V0KCkp
OworICAgICAgICBzZWNvbmRBdHRhY2htZW50ID0gW3dlYlZpZXcgc3luY2hyb25vdXNseUluc2Vy
dEF0dGFjaG1lbnRXaXRoRmlsZVdyYXBwZXI6Zm9sZGVyLmdldCgpIGNvbnRlbnRUeXBlOm5pbF07
CisgICAgICAgIG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbIF0sIEBbIHNlY29u
ZEF0dGFjaG1lbnQuZ2V0KCkgXSk7CisgICAgfQorCisgICAgYXV0byBjaGVja0F0dGFjaG1lbnRD
b25zaXN0ZW5jeSA9IFt3ZWJWaWV3LCBmaWxlLCBmb2xkZXJdIChfV0tBdHRhY2htZW50ICpleHBl
Y3RlZEZpbGVBdHRhY2htZW50LCBfV0tBdHRhY2htZW50ICpleHBlY3RlZEZvbGRlckF0dGFjaG1l
bnQpIHsKKyAgICAgICAgW3dlYlZpZXcgZXhwZWN0RWxlbWVudENvdW50OjIgdGFnTmFtZTpAIkFU
VEFDSE1FTlQiXTsKKyAgICAgICAgRVhQRUNUX1RSVUUoVVRUeXBlQ29uZm9ybXNUbygoX19icmlk
Z2UgQ0ZTdHJpbmdSZWYpW3dlYlZpZXcgdmFsdWVPZkF0dHJpYnV0ZTpAInR5cGUiIGZvclF1ZXJ5
U2VsZWN0b3I6QCJhdHRhY2htZW50W3RpdGxlPWZvbGRlcl0iXSwga1VUVHlwZURpcmVjdG9yeSkp
OworICAgICAgICBFWFBFQ1RfVFJVRShVVFR5cGVDb25mb3Jtc1RvKChfX2JyaWRnZSBDRlN0cmlu
Z1JlZilbd2ViVmlldyB2YWx1ZU9mQXR0cmlidXRlOkAidHlwZSIgZm9yUXVlcnlTZWxlY3RvcjpA
ImF0dGFjaG1lbnRbdGl0bGVePXRlc3RdIl0sIGtVVFR5cGVEYXRhKSk7CisgICAgICAgIEVYUEVD
VF9XS19TVFJFUShleHBlY3RlZEZpbGVBdHRhY2htZW50LnVuaXF1ZUlkZW50aWZpZXIsIFt3ZWJW
aWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5xdWVyeVNlbGVjdG9y
KCdhdHRhY2htZW50W3RpdGxlXj10ZXN0XScpLnVuaXF1ZUlkZW50aWZpZXIiXSk7CisgICAgICAg
IEVYUEVDVF9XS19TVFJFUShleHBlY3RlZEZvbGRlckF0dGFjaG1lbnQudW5pcXVlSWRlbnRpZmll
ciwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LnF1ZXJ5
U2VsZWN0b3IoJ2F0dGFjaG1lbnRbdGl0bGU9Zm9sZGVyXScpLnVuaXF1ZUlkZW50aWZpZXIiXSk7
CisgICAgICAgIEVYUEVDVF9UUlVFKFtleHBlY3RlZEZpbGVBdHRhY2htZW50LmluZm8uZmlsZVdy
YXBwZXIgaXNFcXVhbDpmaWxlLmdldCgpXSk7CisgICAgICAgIEVYUEVDVF9UUlVFKFtleHBlY3Rl
ZEZvbGRlckF0dGFjaG1lbnQuaW5mby5maWxlV3JhcHBlciBpc0VxdWFsOmZvbGRlci5nZXQoKV0p
OworICAgIH07CisKKyAgICBjaGVja0F0dGFjaG1lbnRDb25zaXN0ZW5jeShmaXJzdEF0dGFjaG1l
bnQuZ2V0KCksIHNlY29uZEF0dGFjaG1lbnQuZ2V0KCkpOworCisgICAgeworICAgICAgICAvLyBT
d2FwIHRoZSB0d28gYXR0YWNobWVudHMnIGZpbGUgd3JhcHBlcnMgd2l0aG91dCBjcmVhdGluZyBv
ciBkZXN0cm95aW5nIGF0dGFjaG1lbnQgZWxlbWVudHMuCisgICAgICAgIE9ic2VydmVBdHRhY2ht
ZW50VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVyKHdlYlZpZXcuZ2V0KCkpOworICAgICAgICBbZmly
c3RBdHRhY2htZW50IHN5bmNocm9ub3VzbHlTZXRGaWxlV3JhcHBlcjpmb2xkZXIuZ2V0KCkgbmV3
Q29udGVudFR5cGU6bmlsIGVycm9yOm5pbF07CisgICAgICAgIFtzZWNvbmRBdHRhY2htZW50IHN5
bmNocm9ub3VzbHlTZXRGaWxlV3JhcHBlcjpmaWxlLmdldCgpIG5ld0NvbnRlbnRUeXBlOm5pbCBl
cnJvcjpuaWxdOworICAgICAgICBvYnNlcnZlci5leHBlY3RBdHRhY2htZW50VXBkYXRlcyhAWyBd
LCBAWyBdKTsKKyAgICB9CisKKyAgICBjaGVja0F0dGFjaG1lbnRDb25zaXN0ZW5jeShzZWNvbmRB
dHRhY2htZW50LmdldCgpLCBmaXJzdEF0dGFjaG1lbnQuZ2V0KCkpOworfQorCiBURVNUKFdLQXR0
YWNobWVudFRlc3RzLCBDaGFuZ2VBdHRhY2htZW50RGF0YUFuZEZpbGVJbmZvcm1hdGlvbikKIHsK
ICAgICBhdXRvIHdlYlZpZXcgPSB3ZWJWaWV3Rm9yVGVzdGluZ0F0dGFjaG1lbnRzKCk7CkBAIC03
NjMsNyArODc1LDcgQEAgVEVTVChXS0F0dGFjaG1lbnRUZXN0cywgQ2hhbmdlQXR0YWNobWVudERh
dGFBbmRGaWxlSW5mb3JtYXRpb24pCiAgICAgICAgIG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRV
cGRhdGVzKEBbXSwgQFtdKTsKICAgICB9CiAgICAgewotICAgICAgICBSZXRhaW5QdHI8TlNEYXRh
PiB0ZXh0RGF0YSA9IHRlc3RIVE1MRGF0YSgpOworICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiB0
ZXh0RGF0YSA9IFtAIkhlbGxvIHdvcmxkIiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdF
bmNvZGluZ107CiAgICAgICAgIE9ic2VydmVBdHRhY2htZW50VXBkYXRlc0ZvclNjb3BlIG9ic2Vy
dmVyKHdlYlZpZXcuZ2V0KCkpOwogICAgICAgICAvLyBUaGUgbmV3IGNvbnRlbnQgdHlwZSBzaG91
bGQgYmUgaW5mZXJyZWQgZnJvbSB0aGUgZmlsZSBuYW1lLgogICAgICAgICBbYXR0YWNobWVudCBz
eW5jaHJvbm91c2x5U2V0RGF0YTp0ZXh0RGF0YS5nZXQoKSBuZXdDb250ZW50VHlwZTpuaWwgbmV3
RmlsZW5hbWU6QCJmb28udHh0IiBlcnJvcjpuaWxdOwpAQCAtNzczLDEzICs4ODUsMTMgQEAgVEVT
VChXS0F0dGFjaG1lbnRUZXN0cywgQ2hhbmdlQXR0YWNobWVudERhdGFBbmRGaWxlSW5mb3JtYXRp
b24pCiAgICAgICAgIG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbXSwgQFtdKTsK
ICAgICB9CiAgICAgewotICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiBzZWNvbmRUZXh0RGF0YSA9
IFtAIkhlbGxvIHdvcmxkIiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107
CisgICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGh0bWxEYXRhID0gdGVzdEhUTUxEYXRhKCk7CiAg
ICAgICAgIE9ic2VydmVBdHRhY2htZW50VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVyKHdlYlZpZXcu
Z2V0KCkpOwogICAgICAgICAvLyBCb3RoIHRoZSBwcmV2aW91cyBmaWxlIG5hbWUgYW5kIHR5cGUg
c2hvdWxkIGJlIGluZmVycmVkLgotICAgICAgICBbYXR0YWNobWVudCBzeW5jaHJvbm91c2x5U2V0
RGF0YTpzZWNvbmRUZXh0RGF0YS5nZXQoKSBuZXdDb250ZW50VHlwZTpuaWwgbmV3RmlsZW5hbWU6
bmlsIGVycm9yOm5pbF07Ci0gICAgICAgIFthdHRhY2htZW50IGV4cGVjdFJlcXVlc3RlZERhdGFU
b0JlOnNlY29uZFRleHREYXRhLmdldCgpXTsKLSAgICAgICAgRVhQRUNUX1dLX1NUUkVRKEAiZm9v
LnR4dCIsIFt3ZWJWaWV3IHZhbHVlT2ZBdHRyaWJ1dGU6QCJ0aXRsZSIgZm9yUXVlcnlTZWxlY3Rv
cjpAImF0dGFjaG1lbnQiXSk7Ci0gICAgICAgIEVYUEVDVF9XS19TVFJFUShAInRleHQvcGxhaW4i
LCBbd2ViVmlldyB2YWx1ZU9mQXR0cmlidXRlOkAidHlwZSIgZm9yUXVlcnlTZWxlY3RvcjpAImF0
dGFjaG1lbnQiXSk7CisgICAgICAgIFthdHRhY2htZW50IHN5bmNocm9ub3VzbHlTZXREYXRhOmh0
bWxEYXRhLmdldCgpIG5ld0NvbnRlbnRUeXBlOkAidGV4dC9odG1sIiBuZXdGaWxlbmFtZTpAImJh
ciIgZXJyb3I6bmlsXTsKKyAgICAgICAgW2F0dGFjaG1lbnQgZXhwZWN0UmVxdWVzdGVkRGF0YVRv
QmU6aHRtbERhdGEuZ2V0KCldOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJiYXIiLCBbd2Vi
VmlldyB2YWx1ZU9mQXR0cmlidXRlOkAidGl0bGUiIGZvclF1ZXJ5U2VsZWN0b3I6QCJhdHRhY2ht
ZW50Il0pOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJ0ZXh0L2h0bWwiLCBbd2ViVmlldyB2
YWx1ZU9mQXR0cmlidXRlOkAidHlwZSIgZm9yUXVlcnlTZWxlY3RvcjpAImF0dGFjaG1lbnQiXSk7
CiAgICAgICAgIG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbXSwgQFtdKTsKICAg
ICB9CiAgICAgW3dlYlZpZXcgZXhwZWN0VXBkYXRlc0FmdGVyQ29tbWFuZDpAIkRlbGV0ZUJhY2t3
YXJkIiB3aXRoQXJndW1lbnQ6bmlsIGV4cGVjdGVkUmVtb3ZhbHM6QFthdHRhY2htZW50LmdldCgp
XSBleHBlY3RlZEluc2VydGlvbnM6QFtdXTsKQEAgLTEzMTMsNyArMTQyNSw3IEBAIFRFU1QoV0tB
dHRhY2htZW50VGVzdHNJT1MsIEluc2VydERyb3BwZWRJbWFnZUFzQXR0YWNobWVudCkKICAgICBh
dXRvIHdlYlZpZXcgPSB3ZWJWaWV3Rm9yVGVzdGluZ0F0dGFjaG1lbnRzKCk7CiAgICAgYXV0byBk
cmFnQW5kRHJvcFNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxv
Y10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKICAgICBhdXRvIGl0ZW0gPSBhZG9w
dE5TKFtbTlNJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKLSAgICBbaXRlbSByZWdpc3RlckRh
dGE6dGVzdEltYWdlRGF0YSgpIHR5cGU6KE5TU3RyaW5nICopa1VUVHlwZVBOR107CisgICAgW2l0
ZW0gcmVnaXN0ZXJEYXRhOnRlc3RJbWFnZURhdGEoKSB0eXBlOihfX2JyaWRnZSBOU1N0cmluZyAq
KWtVVFR5cGVQTkddOwogICAgIFtkcmFnQW5kRHJvcFNpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Q
cm92aWRlcnM6QFsgaXRlbS5nZXQoKSBdXTsKICAgICBbZHJhZ0FuZERyb3BTaW11bGF0b3IgcnVu
RnJvbTpDR1BvaW50WmVybyB0bzpDR1BvaW50TWFrZSg1MCwgNTApXTsKIApAQCAtMTMzNSw3ICsx
NDQ3LDcgQEAgVEVTVChXS0F0dGFjaG1lbnRUZXN0c0lPUywgSW5zZXJ0RHJvcHBlZEF0dHJpYnV0
ZWRTdHJpbmdDb250YWluaW5nQXR0YWNobWVudCkKIHsKICAgICBhdXRvIHdlYlZpZXcgPSB3ZWJW
aWV3Rm9yVGVzdGluZ0F0dGFjaG1lbnRzKCk7CiAgICAgYXV0byBkcmFnQW5kRHJvcFNpbXVsYXRv
ciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3
OndlYlZpZXcuZ2V0KCldKTsKLSAgICBhdXRvIGltYWdlID0gYWRvcHROUyhbW05TVGV4dEF0dGFj
aG1lbnQgYWxsb2NdIGluaXRXaXRoRGF0YTp0ZXN0SW1hZ2VEYXRhKCkgb2ZUeXBlOihOU1N0cmlu
ZyAqKWtVVFR5cGVQTkddKTsKKyAgICBhdXRvIGltYWdlID0gYWRvcHROUyhbW05TVGV4dEF0dGFj
aG1lbnQgYWxsb2NdIGluaXRXaXRoRGF0YTp0ZXN0SW1hZ2VEYXRhKCkgb2ZUeXBlOihfX2JyaWRn
ZSBOU1N0cmluZyAqKWtVVFR5cGVQTkddKTsKICAgICBhdXRvIGl0ZW0gPSBhZG9wdE5TKFtbTlNJ
dGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKICAgICBbaXRlbSByZWdpc3Rlck9iamVjdDpbTlNB
dHRyaWJ1dGVkU3RyaW5nIGF0dHJpYnV0ZWRTdHJpbmdXaXRoQXR0YWNobWVudDppbWFnZS5nZXQo
KV0gdmlzaWJpbGl0eTpOU0l0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uVmlzaWJpbGl0eUFsbF07
CiAKQEAgLTE0MDEsNyArMTUxMyw3IEBAIFRFU1QoV0tBdHRhY2htZW50VGVzdHNJT1MsIEluc2Vy
dERyb3BwZWRaaXBBcmNoaXZlQXNBdHRhY2htZW50KQogICAgIC8vIHByZXNlbnRhdGlvbiBzdHls
ZSAoZS5nLiBOb3RlcykgaW50byBNYWlsLgogICAgIGF1dG8gaXRlbSA9IGFkb3B0TlMoW1tOU0l0
ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwogICAgIE5TRGF0YSAqZGF0YSA9IHRlc3RaSVBEYXRh
KCk7Ci0gICAgW2l0ZW0gcmVnaXN0ZXJEYXRhOmRhdGEgdHlwZTooTlNTdHJpbmcgKilrVVRUeXBl
WmlwQXJjaGl2ZV07CisgICAgW2l0ZW0gcmVnaXN0ZXJEYXRhOmRhdGEgdHlwZTooX19icmlkZ2Ug
TlNTdHJpbmcgKilrVVRUeXBlWmlwQXJjaGl2ZV07CiAgICAgW2l0ZW0gc2V0U3VnZ2VzdGVkTmFt
ZTpAImFyY2hpdmUuemlwIl07CiAKICAgICBhdXRvIHdlYlZpZXcgPSB3ZWJWaWV3Rm9yVGVzdGlu
Z0F0dGFjaG1lbnRzKCk7CkBAIC0xNDMxLDcgKzE1NDMsNyBAQCBURVNUKFdLQXR0YWNobWVudFRl
c3RzSU9TLCBJbnNlcnREcm9wcGVkSXRlbVByb3ZpZGVyc0luT3JkZXIpCiAgICAgW2lubGluZVRl
eHRJdGVtIHJlZ2lzdGVyT2JqZWN0OmFwcGxlVVJMLmdldCgpIHZpc2liaWxpdHk6TlNJdGVtUHJv
dmlkZXJSZXByZXNlbnRhdGlvblZpc2liaWxpdHlBbGxdOwogCiAgICAgYXV0byBzZWNvbmRBdHRh
Y2htZW50SXRlbSA9IGFkb3B0TlMoW1tOU0l0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwotICAg
IFtzZWNvbmRBdHRhY2htZW50SXRlbSByZWdpc3RlckRhdGE6dGVzdFBERkRhdGEoKSB0eXBlOihO
U1N0cmluZyAqKWtVVFR5cGVQREZdOworICAgIFtzZWNvbmRBdHRhY2htZW50SXRlbSByZWdpc3Rl
ckRhdGE6dGVzdFBERkRhdGEoKSB0eXBlOihfX2JyaWRnZSBOU1N0cmluZyAqKWtVVFR5cGVQREZd
OwogICAgIFtzZWNvbmRBdHRhY2htZW50SXRlbSBzZXRTdWdnZXN0ZWROYW1lOkAic2Vjb25kLnBk
ZiJdOwogCiAgICAgYXV0byB3ZWJWaWV3ID0gd2ViVmlld0ZvclRlc3RpbmdBdHRhY2htZW50cygp
OwpAQCAtMTQ1OCw3ICsxNTcwLDcgQEAgVEVTVChXS0F0dGFjaG1lbnRUZXN0c0lPUywgRHJhZ0F0
dGFjaG1lbnRJbnNlcnRlZEFzRmlsZSkKIHsKICAgICBhdXRvIGl0ZW0gPSBhZG9wdE5TKFtbTlNJ
dGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKICAgICBhdXRvIGRhdGEgPSByZXRhaW5QdHIodGVz
dFBERkRhdGEoKSk7Ci0gICAgW2l0ZW0gcmVnaXN0ZXJEYXRhOmRhdGEuZ2V0KCkgdHlwZTooTlNT
dHJpbmcgKilrVVRUeXBlUERGXTsKKyAgICBbaXRlbSByZWdpc3RlckRhdGE6ZGF0YS5nZXQoKSB0
eXBlOihfX2JyaWRnZSBOU1N0cmluZyAqKWtVVFR5cGVQREZdOwogICAgIFtpdGVtIHNldFN1Z2dl
c3RlZE5hbWU6QCJkb2N1bWVudC5wZGYiXTsKIAogICAgIGF1dG8gd2ViVmlldyA9IHdlYlZpZXdG
b3JUZXN0aW5nQXR0YWNobWVudHMoKTsKQEAgLTE0ODEsNyArMTU5Myw3IEBAIFRFU1QoV0tBdHRh
Y2htZW50VGVzdHNJT1MsIERyYWdBdHRhY2htZW50SW5zZXJ0ZWRBc0ZpbGUpCiAgICAgRVhQRUNU
X0VRKDFVLCBbZHJhZ0FuZERyb3BTaW11bGF0b3Igc291cmNlSXRlbVByb3ZpZGVyc10uY291bnQp
OwogICAgIE5TSXRlbVByb3ZpZGVyICppdGVtUHJvdmlkZXIgPSBbZHJhZ0FuZERyb3BTaW11bGF0
b3Igc291cmNlSXRlbVByb3ZpZGVyc10uZmlyc3RPYmplY3Q7CiAgICAgRVhQRUNUX0VRKFVJUHJl
ZmVycmVkUHJlc2VudGF0aW9uU3R5bGVBdHRhY2htZW50LCBpdGVtUHJvdmlkZXIucHJlZmVycmVk
UHJlc2VudGF0aW9uU3R5bGUpOwotICAgIFtpdGVtUHJvdmlkZXIgZXhwZWN0VHlwZTooTlNTdHJp
bmcgKilrVVRUeXBlUERGIHdpdGhEYXRhOmRhdGEuZ2V0KCldOworICAgIFtpdGVtUHJvdmlkZXIg
ZXhwZWN0VHlwZTooX19icmlkZ2UgTlNTdHJpbmcgKilrVVRUeXBlUERGIHdpdGhEYXRhOmRhdGEu
Z2V0KCldOwogICAgIEVYUEVDVF9XS19TVFJFUSgiZG9jdW1lbnQucGRmIiwgW2l0ZW1Qcm92aWRl
ciBzdWdnZXN0ZWROYW1lXSk7CiAgICAgW2RyYWdBbmREcm9wU2ltdWxhdG9yIGVuZERhdGFUcmFu
c2Zlcl07CiB9CkBAIC0xNTEwLDcgKzE2MjIsNyBAQCBURVNUKFdLQXR0YWNobWVudFRlc3RzSU9T
LCBEcmFnQXR0YWNobWVudEluc2VydGVkQXNEYXRhKQogICAgIEVYUEVDVF9FUSgxVSwgW2RyYWdB
bmREcm9wU2ltdWxhdG9yIHNvdXJjZUl0ZW1Qcm92aWRlcnNdLmNvdW50KTsKICAgICBOU0l0ZW1Q
cm92aWRlciAqaXRlbVByb3ZpZGVyID0gW2RyYWdBbmREcm9wU2ltdWxhdG9yIHNvdXJjZUl0ZW1Q
cm92aWRlcnNdLmZpcnN0T2JqZWN0OwogICAgIEVYUEVDVF9FUShVSVByZWZlcnJlZFByZXNlbnRh
dGlvblN0eWxlQXR0YWNobWVudCwgaXRlbVByb3ZpZGVyLnByZWZlcnJlZFByZXNlbnRhdGlvblN0
eWxlKTsKLSAgICBbaXRlbVByb3ZpZGVyIGV4cGVjdFR5cGU6KE5TU3RyaW5nICopa1VUVHlwZVBE
RiB3aXRoRGF0YTpkYXRhLmdldCgpXTsKKyAgICBbaXRlbVByb3ZpZGVyIGV4cGVjdFR5cGU6KF9f
YnJpZGdlIE5TU3RyaW5nICopa1VUVHlwZVBERiB3aXRoRGF0YTpkYXRhLmdldCgpXTsKICAgICBF
WFBFQ1RfV0tfU1RSRVEoImRvY3VtZW50LnBkZiIsIFtpdGVtUHJvdmlkZXIgc3VnZ2VzdGVkTmFt
ZV0pOwogICAgIFtkcmFnQW5kRHJvcFNpbXVsYXRvciBlbmREYXRhVHJhbnNmZXJdOwogfQpkaWZm
IC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9EcmFnQW5kRHJvcFNpbXVsYXRvci5o
IGIvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9EcmFnQW5kRHJvcFNpbXVsYXRvci5oCmluZGV4
IDc2MWEzNmYwZTFjMGRkNmI5M2FjYjU2NDllYzVlMmMwOGIzYmRhOTYuLjFkN2UxMGU4OTI4YTE5
YzYxZWMxMTZiNmIyYzVlY2E3MDdlNDU1ODkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRB
UEkvY29jb2EvRHJhZ0FuZERyb3BTaW11bGF0b3IuaAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L2NvY29hL0RyYWdBbmREcm9wU2ltdWxhdG9yLmgKQEAgLTgwLDYgKzgwLDcgQEAgdHlwZWRlZiBO
U0RpY3Rpb25hcnk8TlNOdW1iZXIgKiwgTlNWYWx1ZSAqPiAqUHJvZ3Jlc3NUb0NHUG9pbnRWYWx1
ZU1hcDsKIC8vIFRoZSBzdGFydCBsb2NhdGlvbiwgZW5kIGxvY2F0aW9uLCBhbmQgbG9jYXRpb25z
IG9mIGFkZGl0aW9uYWwgaXRlbSByZXF1ZXN0cyBhcmUgYWxsIGluIHdpbmRvdyBjb29yZGluYXRl
cy4KIC0gKHZvaWQpcnVuRnJvbTooQ0dQb2ludClzdGFydExvY2F0aW9uIHRvOihDR1BvaW50KWVu
ZExvY2F0aW9uOwogLSAodm9pZCllbmREYXRhVHJhbnNmZXI7CistICh2b2lkKWNsZWFyRXh0ZXJu
YWxEcmFnSW5mb3JtYXRpb247CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXJy
YXk8X1dLQXR0YWNobWVudCAqPiAqaW5zZXJ0ZWRBdHRhY2htZW50czsKIEBwcm9wZXJ0eSAobm9u
YXRvbWljLCByZWFkb25seSkgTlNBcnJheTxfV0tBdHRhY2htZW50ICo+ICpyZW1vdmVkQXR0YWNo
bWVudHM7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RXS1dlYlZpZXcgKndl
YlZpZXc7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2lvcy9EcmFnQW5kRHJvcFNp
bXVsYXRvcklPUy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL0RyYWdBbmREcm9wU2ltdWxh
dG9ySU9TLm1tCmluZGV4IDBmOTdhMzlkYjYwYWIyOTAyYTU4ODM0MTQ1YTc0MDliMjMxYjU3ZTYu
LmNlYmQ0NjAwYTk0ODEwM2RmYjA1Nzk3YTNkNDRlYWYwNjM4NWRkNzIgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvaW9zL0RyYWdBbmREcm9wU2ltdWxhdG9ySU9TLm1tCisrKyBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvaW9zL0RyYWdBbmREcm9wU2ltdWxhdG9ySU9TLm1tCkBAIC01Njgs
NiArNTY4LDExIEBAIHN0YXRpYyBOU0FycmF5ICpkcmFnQW5kRHJvcEV2ZW50TmFtZXMoKQogICAg
IFtzZWxmIF9zY2hlZHVsZUFkdmFuY2VQcm9ncmVzc107CiB9CiAKKy0gKHZvaWQpY2xlYXJFeHRl
cm5hbERyYWdJbmZvcm1hdGlvbgoreworICAgIF9leHRlcm5hbEl0ZW1Qcm92aWRlcnMgPSBuaWw7
Cit9CisKIC0gKENHUG9pbnQpX2N1cnJlbnRMb2NhdGlvbgogewogICAgIENHRmxvYXQgZGlzdGFu
Y2VYID0gX2VuZExvY2F0aW9uLnggLSBfc3RhcnRMb2NhdGlvbi54OwpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9tYWMvRHJhZ0FuZERyb3BTaW11bGF0b3JNYWMubW0gYi9Ub29scy9U
ZXN0V2ViS2l0QVBJL21hYy9EcmFnQW5kRHJvcFNpbXVsYXRvck1hYy5tbQppbmRleCBlNTI4MzAx
ZTU2ZDRiZDMzYmMwZWRiMDk4NWIxZDM3YjMzZWJhZjFmLi4yZWZiYjVjOWViNjMyOGRmMmRkNzk4
NDZkNjlkYzk5YjBhZmJjZTIyIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL21hYy9E
cmFnQW5kRHJvcFNpbXVsYXRvck1hYy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL21hYy9E
cmFnQW5kRHJvcFNpbXVsYXRvck1hYy5tbQpAQCAtMzU4LDYgKzM1OCwxMyBAQCBzdGF0aWMgTlNJ
bWFnZSAqZGVmYXVsdEV4dGVybmFsRHJhZ0ltYWdlKCkKICAgICByZXR1cm4gX2V4dGVybmFsUHJv
bWlzZWRGaWxlcy5nZXQoKTsKIH0KIAorLSAodm9pZCljbGVhckV4dGVybmFsRHJhZ0luZm9ybWF0
aW9uCit7CisgICAgX2V4dGVybmFsUHJvbWlzZWRGaWxlcyA9IG5pbDsKKyAgICBfZXh0ZXJuYWxE
cmFnSW1hZ2UgPSBuaWw7CisgICAgX2V4dGVybmFsRHJhZ1Bhc3RlYm9hcmQgPSBuaWw7Cit9CisK
IHN0YXRpYyBCT09MIGdldEZpbGVQYXRoc0FuZFR5cGVJZGVudGlmaWVycyhOU0FycmF5PE5TVVJM
ICo+ICpmaWxlVVJMcywgTlNBcnJheTxOU1N0cmluZyAqPiAqKm91dEZpbGVQYXRocywgTlNBcnJh
eTxOU1N0cmluZyAqPiAqKm91dFR5cGVJZGVudGlmaWVycykKIHsKICAgICBOU011dGFibGVBcnJh
eSAqZmlsZVBhdGhzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmZpbGVVUkxz
LmNvdW50XTsK
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348155</attachid>
            <date>2018-08-27 09:56:27 -0700</date>
            <delta_ts>2018-08-27 12:16:06 -0700</delta_ts>
            <desc>Rebase on trunk</desc>
            <filename>bug-188903-20180827095626.patch</filename>
            <type>text/plain</type>
            <size>110661</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1Mzc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGZhMmNmMjExZmYxNGZj
NDI0NzIzOTE0MWNiYzkxNWE3NzYxZTg4Ny4uZGRkNTk1NDRiZTIyY2ZlMTQwNzQzZDAwMDAyZTk5
MzQyNTNhODE3ZSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDE4LTA4LTI3ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtDb2NvYV0gRXhj
ZXB0aW9uIChmaWxlVHlwZSAnZHluLmFncTh1JyBpcyBub3QgYSB2YWxpZCBVVEkpIHJhaXNlZCB3
aGVuIGRyYWdnaW5nIGFuIGF0dGFjaG1lbnQgd2hvc2UgZmlsZSB3cmFwcGVyIGlzIGEgZGlyZWN0
b3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODg5
MDMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQzNzAyOTkzPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeGVzIHRoZSBleGNlcHRpb24gZm9yIGF0
dGFjaG1lbnRzIHRoYXQgYXJlIGNyZWF0ZWQgd2hlbiBkcm9wcGluZyBmaWxlcyB3aXRoIGV4dGVu
c2lvbnMgdGhhdCBkb24ndCBtYXAgdG8gYW55CisgICAgICAgIGtub3duIFVUSXMsIGFuZCB3aGVu
IGRyb3BwaW5nIGZvbGRlcnMuIFNlZSBiZWxvdyBmb3IgbW9yZSBkZXRhaWwuCisKKyAgICAgICAg
VGVzdHM6ICBXS0F0dGFjaG1lbnRUZXN0cy5JbnNlcnRGb2xkZXJBbmRGaWxlV2l0aFVua25vd25F
eHRlbnNpb24KKyAgICAgICAgICAgICAgICBXS0F0dGFjaG1lbnRUZXN0cy5Ecm9wRm9sZGVyQXNB
dHRhY2htZW50QW5kTW92ZUJ5RHJhZ2dpbmcKKyAgICAgICAgICAgICAgICBXS0F0dGFjaG1lbnRU
ZXN0cy5DaGFuZ2VBdHRhY2htZW50RGF0YUFuZEZpbGVJbmZvcm1hdGlvbgorCisgICAgICAgICog
ZWRpdGluZy9FZGl0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6RWRpdG9yOjppbnNlcnRBdHRh
Y2htZW50KToKKyAgICAgICAgKiBlZGl0aW5nL0VkaXRvci5oOgorICAgICAgICAqIGVkaXRpbmcv
Y29jb2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1tOgorICAgICAgICAoV2ViQ29yZTo6V2ViQ29u
dGVudFJlYWRlcjo6cmVhZEZpbGVQYXRocyk6CisKKyAgICAgICAgV2hlbiBjcmVhdGluZyBhbiBh
dHRhY2htZW50IGJ5IGRyb3BwaW5nIG9yIHBhc3RpbmcgYSBmaWxlIGJhY2tlZCBieSBhIGZpbGUg
cGF0aCwgaGFuZGxlIHRoZSBjYXNlcyB3aGVyZeKApgorICAgICAgICAoMSkgICAgIHRoZSBkcm9w
cGVkIHBhdGggaXMgYSBkaXJlY3RvcnksIGJ5IHNldHRpbmcgdGhlIFVUSSB0byAicHVibGljLmRp
cmVjdG9yeSIuIFRoaXMgYWxsb3dzIHVzIHRvIHNob3cgYQorICAgICAgICAgICAgICAgIGZvbGRl
ciBpY29uIGZvciB0aGUgZHJvcHBlZCBhdHRhY2htZW50IGVsZW1lbnQgb24gbWFjT1MuCisgICAg
ICAgICgyKSAgICAgdGhlIGRyb3BwZWQgcGF0aCBpcyBhIGZpbGUgd2hvc2UgVVRJIGlzIHVua25v
d24sIGJ5IGRlZmF1bHRpbmcgdG8gInB1YmxpYy5kYXRhIi4KKworICAgICAgICBCeSBlbnN1cmlu
ZyB0aGF0IHRoZSBVVEkgb2YgYSBkcm9wcGVkIGZpbGUtYmFja2VkIGF0dGFjaG1lbnQgaXMgc2V0
IHRvIGEgY29uY3JldGUgdHlwZSBpbiBhbnkgY2FzZSwgd2UgYXZvaWQgYW4KKyAgICAgICAgZXhj
ZXB0aW9uIHdoZW4gZHJhZ2dpbmcgdGhlIGF0dGFjaG1lbnQgb24gbWFjT1MsIGFuZCBvbiBpT1Ms
IGF2b2lkIHNpbGVudGx5IGZhaWxpbmcgdG8gZHJhZyBhbiBhdHRhY2htZW50LgorCisgICAgICAg
ICogaHRtbC9IVE1MQXR0YWNobWVudEVsZW1lbnQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SFRN
TEF0dGFjaG1lbnRFbGVtZW50Ojp1cGRhdGVBdHRyaWJ1dGVzKToKKworICAgICAgICBDaGFuZ2Ug
dGhpcyBtZXRob2QgdG8gdGFrZSBhbiBvcHRpb25hbCBmaWxlIHNpemUgKHRoZSBzdWJ0aXRsZSBh
dHRyaWJ1dGUgd2lsbCBvbmx5IGJlIHNldCBpZiB0aGUgZmlsZSBzaXplIGlzCisgICAgICAgIG5v
dCBgc3RkOjpudWxsb3B0YCkuIEZ1cnRoZXJtb3JlLCBhbGxvdyBjYWxsZXJzIG9mIHRoaXMgbWV0
aG9kIHRvIGNsZWFyIGF0dHJpYnV0ZXMgb24gdGhlIGF0dGFjaG1lbnQgZWxlbWVudCBieQorICAg
ICAgICBwYXNzaW5nIGluIGBzdGQ6Om51bGxvcHRgIGZvciBhbnkgb2YgdGhlIHRocmVlIGFyZ3Vt
ZW50cy4gVGhpcyBhbGxvd3MgdXMgdG8gaGFuZGxlIHRoZSBjYXNlIHdoZXJlIGFuCisgICAgICAg
IGF0dGFjaG1lbnQncyBmaWxlIHdyYXBwZXIgaXMgY2hhbmdlZCBmcm9tIGEgcmVndWxhciBmaWxl
IHRvIGEgZm9sZGVyIHdob3NlIHRvdGFsIHNpemUgaXMgY3VycmVudGx5IHVua25vd24uCisgICAg
ICAgIEluc3RlYWQgb2Ygc2hvd2luZyAiMCBieXRlcyIsIHdlJ2xsIHNpbXBseSByZWZyYWluIGZy
b20gc2hvd2luZyBhIHN1YnRpdGxlIGF0IGFsbCAoaW4gdGhlIGZ1dHVyZSwgdGhpcyBzaG91bGQK
KyAgICAgICAgYmUgaW1wcm92ZWQgYnkgaW1wbGVtZW50aW5nIGEgd2F5IHRvIGVzdGltYXRlIHRo
ZSBzaXplIG9mIHRoZSBmaWxlcyBpbiB0aGUgZm9sZGVyLCBvciBwZXJoYXBzIHNob3cgdGhlIG51
bWJlciBvZgorICAgICAgICBpdGVtcyBpbiB0aGUgZm9sZGVyIGFzIHRoZSBzdWJ0aXRsZSkuCisK
KyAgICAgICAgKiBodG1sL0hUTUxBdHRhY2htZW50RWxlbWVudC5oOgorCiAyMDE4LTA4LTI3ICBX
ZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFtBdHRhY2ht
ZW50IFN1cHBvcnRdIFtXSzJdIEltYWdlcyBjb3BpZWQgZnJvbSBNYWlsIG1lc3NhZ2UgdmlldyBw
YXN0ZSB3aXRoIHRoZSB3cm9uZyBmaWxlIG5hbWUgaW4gY29tcG9zZQpkaWZmIC0tZ2l0IGEvU291
cmNlL1dlYktpdC9DaGFuZ2VMb2cgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwppbmRleCA2NjM3
NjE4MTIyNjczNzVkOThkNTI0MDgzYmZlMTlkYTBhYWFkYzQ4Li45ZTUyN2Y5MzViZjNjYTRkZGM5
ZWI5Mjk2NjNjOTVmYzA4NGY3NDI0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxv
ZworKysgYi9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZwpAQCAtMSwzICsxLDcxIEBACisyMDE4LTA4
LTI3ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtD
b2NvYV0gRXhjZXB0aW9uIChmaWxlVHlwZSAnZHluLmFncTh1JyBpcyBub3QgYSB2YWxpZCBVVEkp
IHJhaXNlZCB3aGVuIGRyYWdnaW5nIGFuIGF0dGFjaG1lbnQgd2hvc2UgZmlsZSB3cmFwcGVyIGlz
IGEgZGlyZWN0b3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNn
aT9pZD0xODg5MDMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQzNzAyOTkzPgorCisgICAgICAg
IFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEZpeGVzIHRoZSBidWcgYnkg
c3VwcG9ydGluZyBOU0ZpbGVXcmFwcGVycyBvZiB0eXBlIGRpcmVjdG9yeSwgYXMgd2VsbCBhcyBO
U0ZpbGVXcmFwcGVycyB3aXRoIGZpbGUgdGhhdCBkbyBub3QKKyAgICAgICAgbWFwIHRvIGNvbmNy
ZXRlIHR5cGUgaWRlbnRpZmllcnMuIEFtb25nIG90aGVyIHRoaW5ncywgdGhpcyBwYXRjaCBlbnN1
cmVzIHRoYXQ6CisgICAgICAgIC0gICAgICAgSW5zZXJ0aW5nIGEgZGlyZWN0b3J5IGZpbGUgd3Jh
cHBlciAob3IgdXNpbmcgLXNldEZpbGVXcmFwcGVyOuKApjogdG8gY2hhbmdlIGFuIGV4aXN0aW5n
IF9XS0F0dGFjaG1lbnQncworICAgICAgICAgICAgICAgIGZpbGUgd3JhcHBlciB0byBhIGRpcmVj
dG9yeSkgZG9lcyBub3QgY2F1c2UgdGhlIGF0dGFjaG1lbnQgZWxlbWVudCB0byBzaG93ICIwIGJ5
dGVzIiBhcyB0aGUgc3VidGl0bGUuCisgICAgICAgIC0gICAgICAgSW4gdGhlIGFib3ZlIHNjZW5h
cmlvLCB3ZSBhbHNvIHdvbid0IGVuZCB1cCB3aXRoIGEgbWlzc2luZyAidHlwZSIgYXR0cmlidXRl
IGZvciB0aGUgYXR0YWNobWVudCBlbGVtZW50LAorICAgICAgICAgICAgICAgIGFzIHdlbGwgYXMg
YSBjb3JyZXNwb25kaW5nIEFQSTo6QXR0YWNobWVudDo6Y29udGVudFR5cGUoKSB0aGF0J3MgYW4g
ZW1wdHkgc3RyaW5nLgorICAgICAgICAtICAgICAgIERyb3BwaW5nIG9yIHBhc3RpbmcgYXR0YWNo
bWVudHMgYmFja2VkIGJ5IHBhdGhzIG9uIGRpc2sgYWxzbyBkb2Vzbid0IHRyaWdnZXIgdGhlc2Ug
cHJvYmxlbXMsIGlmIHRoZSBwYXRoCisgICAgICAgICAgICAgICAgaXMgYSBkaXJlY3Rvcnkgb3Ig
b2YgdW5rbm93biBmaWxlIHR5cGUuCisKKyAgICAgICAgQ2hhbmdlcyBhcmUgdmVyaWZpZWQgYnkg
MiBuZXcgQVBJIHRlc3RzLgorCisgICAgICAgICogVUlQcm9jZXNzL0FQSS9BUElBdHRhY2htZW50
LmNwcDoKKyAgICAgICAgKEFQSTo6QXR0YWNobWVudDo6dXBkYXRlQXR0cmlidXRlcyk6CisgICAg
ICAgIChBUEk6OkF0dGFjaG1lbnQ6OmZpbGVTaXplRm9yRGlzcGxheSBjb25zdCk6CisgICAgICAg
ICogVUlQcm9jZXNzL0FQSS9BUElBdHRhY2htZW50Lmg6CisgICAgICAgICogVUlQcm9jZXNzL0FQ
SS9Db2NvYS9BUElBdHRhY2htZW50Q29jb2EubW06CisgICAgICAgIChBUEk6OkF0dGFjaG1lbnQ6
OnNldEZpbGVXcmFwcGVyQW5kVXBkYXRlQ29udGVudFR5cGUpOgorCisgICAgICAgIEFkZCBhIGhl
bHBlciB0aGF0IHNldHMgdGhlIGZpbGUgd3JhcHBlciB0byB0aGUgZ2l2ZW4gTlNGaWxlV3JhcHBl
ciwgYW5kIGVpdGhlciBzZXRzIHRoZSBjb250ZW50IHR5cGUgdG8gdGhlCisgICAgICAgIGdpdmVu
IGNvbnRlbnQgdHlwZSBpZiBpdCdzIHNwZWNpZmllZCwgb3IgaW5mZXJzIGl0IGZyb20gdGhlIGZp
bGUgZXh0ZW5zaW9uIG9mIHRoZSBuZXcgTlNGaWxlV3JhcHBlci4gSW52b2tlZAorICAgICAgICB3
aGVuZXZlciBhbiBOU0ZpbGVXcmFwcGVyIGFuZCBjb250ZW50IHR5cGUgY29tYmluYXRpb24gaXMg
c2V0IG9uIGFuIEFQSSBhdHRhY2htZW50IHZpYSBXZWJLaXQgU1BJLgorCisgICAgICAgIChBUEk6
OkF0dGFjaG1lbnQ6OmZpbGVTaXplRm9yRGlzcGxheSBjb25zdCk6CisKKyAgICAgICAgUmV0dXJu
cyBhIGZpbGUgc2l6ZSB0byBiZSBkaXNwbGF5ZWQgaW4gdGhlIGF0dGFjaG1lbnQgZWxlbWVudCdz
IHN1YnRpdGxlLiBUaGlzIHJldHVybnMgYW4gb3B0aW9uYWwgZmlsZSBzaXplLAorICAgICAgICB3
aGVyZSBgc3RkOjpudWxsb3B0YCBpbmRpY2F0ZXMgdGhhdCB0aGVyZSBzaG91bGQgbm90IGJlIGEg
ZmlsZSBzaXplIHNob3duLiBGb3Igbm93LCB0aGlzIHJldHVybnMgYHN0ZDo6bnVsbG9wdGAKKyAg
ICAgICAgZm9yIGRpcmVjdG9yeSBmaWxlIHdyYXBwZXJzLCB0aG91Z2ggaW4gdGhlIGZ1dHVyZSwg
dGhpcyBzaG91bGQgYmUgZG9uZSBvbmx5IGluIGNhc2VzIHdoZXJlIHdlIGRvbid0IGltbWVkaWF0
ZWx5CisgICAgICAgIGhhdmUgYSBzaXplIGVzdGltYXRlIGZvciB0aGUgZmlsZSB3cmFwcGVyLgor
CisgICAgICAgICogVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW06CisgICAgICAgICgt
W1dLV2ViVmlldyBfaW5zZXJ0QXR0YWNobWVudFdpdGhGaWxlV3JhcHBlcjpjb250ZW50VHlwZTpv
cHRpb25zOmNvbXBsZXRpb246XSk6CisKKyAgICAgICAgVXNlIEFQSTo6QXR0YWNobWVudDo6c2V0
RmlsZVdyYXBwZXJBbmRVcGRhdGVDb250ZW50VHlwZSgpIGluc3RlYWQgb2YgdHJ5aW5nIHRvIGNv
bWUgdXAgd2l0aCBhIGZhbGxiYWNrIFVUSS4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29j
b2EvX1dLQXR0YWNobWVudC5tbToKKyAgICAgICAgKC1bX1dLQXR0YWNobWVudCBzZXRGaWxlV3Jh
cHBlcjpjb250ZW50VHlwZTpjb21wbGV0aW9uOl0pOgorCisgICAgICAgIFVzZSBBUEk6OkF0dGFj
aG1lbnQ6OnNldEZpbGVXcmFwcGVyQW5kVXBkYXRlQ29udGVudFR5cGUoKSBpbnN0ZWFkIG9mIHRy
eWluZyB0byBjb21lIHVwIHdpdGggYSBmYWxsYmFjayBVVEkuCisKKyAgICAgICAgKiBVSVByb2Nl
c3MvV2ViUGFnZVByb3h5LmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZVByb3h5OjppbnNl
cnRBdHRhY2htZW50KToKKworICAgICAgICBSZW1vdmUgdGhlIHNlcGFyYXRlIGFyZ3VtZW50cyBm
b3IgZmlsZSBzaXplLCBjb250ZW50IHR5cGUsIGFuZCBmaWxlIG5hbWUsIGFuZCBpbnN0ZWFkIGdl
dCB0aGVtIGZyb20gdGhlIGdpdmVuCisgICAgICAgIEFQSSBBdHRhY2htZW50IG9iamVjdC4KKwor
ICAgICAgICAoV2ViS2l0OjpXZWJQYWdlUHJveHk6OnVwZGF0ZUF0dGFjaG1lbnRBdHRyaWJ1dGVz
KToKKworICAgICAgICBSZW1vdmUgc2VwYXJhdGUgYXJndW1lbnRzIGZvciBmaWxlIHNpemUsIGNv
bnRlbnQgdHlwZSBhbmQgZmlsZSBuYW1lIGFuZCBqdXN0IHRha2UgYW4gQVBJOjpBdHRhY2htZW50
IGluc3RlYWQuCisgICAgICAgIFRoZXNlIHNlcGFyYXRlIHBpZWNlcyBvZiBpbmZvcm1hdGlvbiBj
YW4gc2ltcGx5IGJlIGFza2VkIGZyb20gdGhlIEF0dGFjaG1lbnQgaXRzZWxmLgorCisgICAgICAg
ICogVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcDoKKyAgICAgICAgKFdlYktpdDo6V2ViUGFnZTo6aW5zZXJ0QXR0YWNobWVu
dCk6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6OnVwZGF0ZUF0dGFjaG1lbnRBdHRyaWJ1dGVz
KToKKworICAgICAgICBBZGp1c3Qgc29tZSBpbnRlcmZhY2VzIGhlcmUgdG8gYWxsb3cgdGhlIGRp
c3BsYXllZCBmaWxlIHNpemUgdG8gYmUgb3B0aW9uYWwuCisKKyAgICAgICAgKiBXZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5oOgorICAgICAgICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdl
Lm1lc3NhZ2VzLmluOgorCiAyMDE4LTA4LTI3ICBTaWh1aSBMaXUgIDxzaWh1aV9saXVAYXBwbGUu
Y29tPgogCiAgICAgICAgIERvbid0IGxhdW5jaCBuZXR3b3JrIHByb2Nlc3MgaW4gV2ViQ29va2ll
TWFuYWdlclByb3h5OjpzZXRIVFRQQ29va2llQWNjZXB0UG9saWN5CmRpZmYgLS1naXQgYS9Tb3Vy
Y2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0Vk
aXRvci5jcHAKaW5kZXggMTc2YTRhMDUyOGJjNTlmYWNiYTJmMTEzYjVlNjQyNmQ4ZjNkNmIzMS4u
NGVjYTkxNTBkNmE3OTkwZGVjMjc0MWNhMzZkNGM2OGE5ZjU3NTY3YSAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2VkaXRp
bmcvRWRpdG9yLmNwcApAQCAtMzg3NiwxMSArMzg3NiwxMSBAQCB2b2lkIEVkaXRvcjo6bm90aWZ5
Q2xpZW50T2ZBdHRhY2htZW50VXBkYXRlcygpCiAgICAgfQogfQogCi12b2lkIEVkaXRvcjo6aW5z
ZXJ0QXR0YWNobWVudChjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IEF0dGFjaG1lbnRE
aXNwbGF5T3B0aW9ucyYsIHVpbnQ2NF90IGZpbGVTaXplLCBjb25zdCBTdHJpbmcmIGZpbGVOYW1l
LCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4mJiBleHBsaWNpdENvbnRlbnRUeXBlKQordm9pZCBFZGl0
b3I6Omluc2VydEF0dGFjaG1lbnQoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBBdHRh
Y2htZW50RGlzcGxheU9wdGlvbnMmLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiYmIGZpbGVTaXpl
LCBjb25zdCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlKQogewog
ICAgIGF1dG8gYXR0YWNobWVudCA9IEhUTUxBdHRhY2htZW50RWxlbWVudDo6Y3JlYXRlKEhUTUxO
YW1lczo6YXR0YWNobWVudFRhZywgZG9jdW1lbnQoKSk7CiAgICAgYXR0YWNobWVudC0+c2V0VW5p
cXVlSWRlbnRpZmllcihpZGVudGlmaWVyKTsKLSAgICBhdHRhY2htZW50LT51cGRhdGVBdHRyaWJ1
dGVzKGZpbGVTaXplLCBXVEZNb3ZlKGV4cGxpY2l0Q29udGVudFR5cGUpLCBmaWxlTmFtZSk7Cisg
ICAgYXR0YWNobWVudC0+dXBkYXRlQXR0cmlidXRlcyhXVEZNb3ZlKGZpbGVTaXplKSwgY29udGVu
dFR5cGUsIGZpbGVOYW1lKTsKIAogICAgIGF1dG8gZnJhZ21lbnRUb0luc2VydCA9IGRvY3VtZW50
KCkuY3JlYXRlRG9jdW1lbnRGcmFnbWVudCgpOwogICAgIGZyYWdtZW50VG9JbnNlcnQtPmFwcGVu
ZENoaWxkKGF0dGFjaG1lbnQuZ2V0KCkpOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvZWRp
dGluZy9FZGl0b3IuaCBiL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9yLmgKaW5kZXggMWVj
MTIwYmVmMzNkYThlY2FiNWU4OTRhYjU1ZWZhYWI5NTEyOGNhYy4uNmY1YWJiYWMyZGE5OTY5OWU3
YTUyZTUwMGJkZWQ0YmZlNDZkMTI4MCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGlu
Zy9FZGl0b3IuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCkBAIC01MDMs
NyArNTAzLDcgQEAgcHVibGljOgogICAgIGJvb2wgaXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5m
bygpIGNvbnN0IHsgcmV0dXJuIG1faXNHZXR0aW5nRGljdGlvbmFyeVBvcHVwSW5mbzsgfQogCiAj
aWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIGlu
c2VydEF0dGFjaG1lbnQoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBBdHRhY2htZW50
RGlzcGxheU9wdGlvbnMmLCB1aW50NjRfdCBmaWxlU2l6ZSwgY29uc3QgU3RyaW5nJiBmaWxlTmFt
ZSwgc3RkOjpvcHRpb25hbDxTdHJpbmc+JiYgZXhwbGljaXRDb250ZW50VHlwZSA9IHN0ZDo6bnVs
bG9wdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnNlcnRBdHRhY2htZW50KGNvbnN0IFN0
cmluZyYgaWRlbnRpZmllciwgY29uc3QgQXR0YWNobWVudERpc3BsYXlPcHRpb25zJiwgc3RkOjpv
cHRpb25hbDx1aW50NjRfdD4mJiBmaWxlU2l6ZSwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29u
c3QgU3RyaW5nJiBjb250ZW50VHlwZSk7CiAgICAgdm9pZCByZWdpc3RlckF0dGFjaG1lbnRJZGVu
dGlmaWVyKGNvbnN0IFN0cmluZyYsIGNvbnN0IFN0cmluZyYgLyogY29udGVudFR5cGUgKi8sIGNv
bnN0IFN0cmluZyYgLyogcHJlZmVycmVkRmlsZU5hbWUgKi8sIFJlZjxTaGFyZWRCdWZmZXI+JiYp
OwogICAgIHZvaWQgcmVnaXN0ZXJBdHRhY2htZW50SWRlbnRpZmllcihjb25zdCBTdHJpbmcmLCBj
b25zdCBTdHJpbmcmIC8qIGNvbnRlbnRUeXBlICovLCBjb25zdCBTdHJpbmcmIC8qIGZpbGVQYXRo
ICovKTsKICAgICB2b2lkIGNsb25lQXR0YWNobWVudERhdGEoY29uc3QgU3RyaW5nJiBmcm9tSWRl
bnRpZmllciwgY29uc3QgU3RyaW5nJiB0b0lkZW50aWZpZXIpOwpkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvZWRpdGluZy9jb2NvYS9XZWJDb250ZW50UmVhZGVyQ29jb2EubW0gYi9Tb3VyY2Uv
V2ViQ29yZS9lZGl0aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbQppbmRleCA2MTA5
YzM4MTVhMDc1ZjNmOTEzODAwODA4ZTM4MGQyZmNjOGRlMWUxLi5lODg1MDg0MzAxOWIxNzY4OTBk
YTYwNjVmYTVmMDA0MzRjNDY3ODVkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5n
L2NvY29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0
aW5nL2NvY29hL1dlYkNvbnRlbnRSZWFkZXJDb2NvYS5tbQpAQCAtNzAzLDkgKzcwMywxOCBAQCBi
b29sIFdlYkNvbnRlbnRSZWFkZXI6OnJlYWRGaWxlUGF0aHMoY29uc3QgVmVjdG9yPFN0cmluZz4m
IHBhdGhzKQogICAgICAgICBmb3IgKGF1dG8mIHBhdGggOiBwYXRocykgewogICAgICAgICAgICAg
YXV0byBhdHRhY2htZW50ID0gSFRNTEF0dGFjaG1lbnRFbGVtZW50OjpjcmVhdGUoSFRNTE5hbWVz
OjphdHRhY2htZW50VGFnLCBkb2N1bWVudCk7CiAgICAgICAgICAgICBpZiAoc3VwcG9ydHNDbGll
bnRTaWRlQXR0YWNobWVudERhdGEoZnJhbWUpKSB7Ci0gICAgICAgICAgICAgICAgbG9uZyBsb25n
IGZpbGVTaXplIHsgMCB9OwotICAgICAgICAgICAgICAgIEZpbGVTeXN0ZW06OmdldEZpbGVTaXpl
KHBhdGgsIGZpbGVTaXplKTsKLSAgICAgICAgICAgICAgICBhdXRvIGNvbnRlbnRUeXBlID0gRmls
ZTo6Y29udGVudFR5cGVGb3JGaWxlKHBhdGgpOworICAgICAgICAgICAgICAgIFN0cmluZyBjb250
ZW50VHlwZTsKKyAgICAgICAgICAgICAgICBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmaWxlU2l6
ZUZvckRpc3BsYXk7CisgICAgICAgICAgICAgICAgaWYgKEZpbGVTeXN0ZW06OmZpbGVJc0RpcmVj
dG9yeShwYXRoLCBGaWxlU3lzdGVtOjpTaG91bGRGb2xsb3dTeW1ib2xpY0xpbmtzOjpZZXMpKQor
ICAgICAgICAgICAgICAgICAgICBjb250ZW50VHlwZSA9IGtVVFR5cGVEaXJlY3Rvcnk7CisgICAg
ICAgICAgICAgICAgZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGxvbmcgbG9uZyBmaWxlU2l6
ZTsKKyAgICAgICAgICAgICAgICAgICAgRmlsZVN5c3RlbTo6Z2V0RmlsZVNpemUocGF0aCwgZmls
ZVNpemUpOworICAgICAgICAgICAgICAgICAgICBmaWxlU2l6ZUZvckRpc3BsYXkgPSBmaWxlU2l6
ZTsKKyAgICAgICAgICAgICAgICAgICAgY29udGVudFR5cGUgPSBGaWxlOjpjb250ZW50VHlwZUZv
ckZpbGUocGF0aCk7CisgICAgICAgICAgICAgICAgICAgIGlmIChjb250ZW50VHlwZS5pc0VtcHR5
KCkpCisgICAgICAgICAgICAgICAgICAgICAgICBjb250ZW50VHlwZSA9IGtVVFR5cGVEYXRhOwor
ICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICBmcmFtZS5lZGl0b3IoKS5yZWdpc3Rl
ckF0dGFjaG1lbnRJZGVudGlmaWVyKGF0dGFjaG1lbnQtPmVuc3VyZVVuaXF1ZUlkZW50aWZpZXIo
KSwgY29udGVudFR5cGUsIHBhdGgpOwogICAgICAgICAgICAgICAgIGlmIChjb250ZW50VHlwZUlz
U3VpdGFibGVGb3JJbmxpbmVJbWFnZVJlcHJlc2VudGF0aW9uKGNvbnRlbnRUeXBlKSkgewogICAg
ICAgICAgICAgICAgICAgICBhdXRvIGltYWdlID0gSFRNTEltYWdlRWxlbWVudDo6Y3JlYXRlKGRv
Y3VtZW50KTsKQEAgLTcxMyw3ICs3MjIsNyBAQCBib29sIFdlYkNvbnRlbnRSZWFkZXI6OnJlYWRG
aWxlUGF0aHMoY29uc3QgVmVjdG9yPFN0cmluZz4mIHBhdGhzKQogICAgICAgICAgICAgICAgICAg
ICBpbWFnZS0+c2V0QXR0YWNobWVudEVsZW1lbnQoV1RGTW92ZShhdHRhY2htZW50KSk7CiAgICAg
ICAgICAgICAgICAgICAgIGZyYWdtZW50LT5hcHBlbmRDaGlsZChpbWFnZSk7CiAgICAgICAgICAg
ICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgICAgICAgICAgYXR0YWNobWVudC0+dXBkYXRlQXR0
cmlidXRlcyhmaWxlU2l6ZSwgY29udGVudFR5cGUsIEZpbGVTeXN0ZW06OnBhdGhHZXRGaWxlTmFt
ZShwYXRoKSk7CisgICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQtPnVwZGF0ZUF0dHJpYnV0
ZXMoV1RGTW92ZShmaWxlU2l6ZUZvckRpc3BsYXkpLCBjb250ZW50VHlwZSwgRmlsZVN5c3RlbTo6
cGF0aEdldEZpbGVOYW1lKHBhdGgpKTsKICAgICAgICAgICAgICAgICAgICAgZnJhZ21lbnQtPmFw
cGVuZENoaWxkKGF0dGFjaG1lbnQpOwogICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgIH0g
ZWxzZSB7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdHRhY2htZW50RWxl
bWVudC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdHRhY2htZW50RWxlbWVudC5jcHAK
aW5kZXggNDA1Y2IzZWI5ZTIxN2JlMzkyNjU3MzNiZWM3YzViNjA4MmE5ZWRhMS4uM2VkYmM1MWRh
ZDg4OWVmNmY4MzA0YjAyMWExZDUyNTRjYTdjZDg2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9IVE1MQXR0YWNobWVudEVsZW1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0
bWwvSFRNTEF0dGFjaG1lbnRFbGVtZW50LmNwcApAQCAtMTQ0LDE1ICsxNDQsMjMgQEAgU3RyaW5n
IEhUTUxBdHRhY2htZW50RWxlbWVudDo6YXR0YWNobWVudFBhdGgoKSBjb25zdAogICAgIHJldHVy
biBhdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKHdlYmtpdGF0dGFjaG1lbnRwYXRoQXR0
cik7CiB9CiAKLXZvaWQgSFRNTEF0dGFjaG1lbnRFbGVtZW50Ojp1cGRhdGVBdHRyaWJ1dGVzKHVp
bnQ2NF90IGZpbGVTaXplLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4mJiBuZXdDb250ZW50VHlwZSwg
c3RkOjpvcHRpb25hbDxTdHJpbmc+JiYgbmV3RmlsZW5hbWUpCit2b2lkIEhUTUxBdHRhY2htZW50
RWxlbWVudDo6dXBkYXRlQXR0cmlidXRlcyhzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiYmIG5ld0Zp
bGVTaXplLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4mJiBuZXdDb250ZW50VHlwZSwgc3RkOjpvcHRp
b25hbDxTdHJpbmc+JiYgbmV3RmlsZW5hbWUpCiB7CiAgICAgaWYgKG5ld0ZpbGVuYW1lKQogICAg
ICAgICBzZXRBdHRyaWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6dGl0bGVB
dHRyLCAqbmV3RmlsZW5hbWUpOworICAgIGVsc2UKKyAgICAgICAgcmVtb3ZlQXR0cmlidXRlKEhU
TUxOYW1lczo6dGl0bGVBdHRyKTsKIAogICAgIGlmIChuZXdDb250ZW50VHlwZSkKICAgICAgICAg
c2V0QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OnR5cGVBdHRyLCAq
bmV3Q29udGVudFR5cGUpOworICAgIGVsc2UKKyAgICAgICAgcmVtb3ZlQXR0cmlidXRlKEhUTUxO
YW1lczo6dHlwZUF0dHIpOworCisgICAgaWYgKG5ld0ZpbGVTaXplKQorICAgICAgICBzZXRBdHRy
aWJ1dGVXaXRob3V0U3luY2hyb25pemF0aW9uKEhUTUxOYW1lczo6c3VidGl0bGVBdHRyLCBmaWxl
U2l6ZURlc2NyaXB0aW9uKCpuZXdGaWxlU2l6ZSkpOworICAgIGVsc2UKKyAgICAgICAgcmVtb3Zl
QXR0cmlidXRlKEhUTUxOYW1lczo6c3VidGl0bGVBdHRyKTsKIAotICAgIHNldEF0dHJpYnV0ZVdp
dGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjpzdWJ0aXRsZUF0dHIsIGZpbGVTaXplRGVz
Y3JpcHRpb24oZmlsZVNpemUpKTsKICAgICBpZiAoYXV0byogcmVuZGVyZXIgPSB0aGlzLT5yZW5k
ZXJlcigpKQogICAgICAgICByZW5kZXJlci0+aW52YWxpZGF0ZSgpOwogfQpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXR0YWNobWVudEVsZW1lbnQuaCBiL1NvdXJjZS9XZWJD
b3JlL2h0bWwvSFRNTEF0dGFjaG1lbnRFbGVtZW50LmgKaW5kZXggNWI2NDE5MmJjNTZmOTRhMzZl
YzNkMTBhODgyNTczNzVlODNmM2I4NS4uNjFlYTE1YTkyOGYwYmFhNDUyZTlkZmZlMTc5YWNmNGVl
ZDMyNzYyZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXR0YWNobWVudEVs
ZW1lbnQuaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxBdHRhY2htZW50RWxlbWVudC5o
CkBAIC00OSw3ICs0OSw3IEBAIHB1YmxpYzoKICAgICBjb25zdCBTdHJpbmcmIHVuaXF1ZUlkZW50
aWZpZXIoKSBjb25zdCB7IHJldHVybiBtX3VuaXF1ZUlkZW50aWZpZXI7IH0KICAgICB2b2lkIHNl
dFVuaXF1ZUlkZW50aWZpZXIoY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKSB7IG1fdW5p
cXVlSWRlbnRpZmllciA9IHVuaXF1ZUlkZW50aWZpZXI7IH0KIAotICAgIFdFQkNPUkVfRVhQT1JU
IHZvaWQgdXBkYXRlQXR0cmlidXRlcyh1aW50NjRfdCBmaWxlU2l6ZSwgc3RkOjpvcHRpb25hbDxT
dHJpbmc+JiYgbmV3Q29udGVudFR5cGUgPSBzdGQ6Om51bGxvcHQsIHN0ZDo6b3B0aW9uYWw8U3Ry
aW5nPiYmIG5ld0ZpbGVuYW1lID0gc3RkOjpudWxsb3B0KTsKKyAgICBXRUJDT1JFX0VYUE9SVCB2
b2lkIHVwZGF0ZUF0dHJpYnV0ZXMoc3RkOjpvcHRpb25hbDx1aW50NjRfdD4mJiBuZXdGaWxlU2l6
ZSA9IHN0ZDo6bnVsbG9wdCwgc3RkOjpvcHRpb25hbDxTdHJpbmc+JiYgbmV3Q29udGVudFR5cGUg
PSBzdGQ6Om51bGxvcHQsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiYmIG5ld0ZpbGVuYW1lID0gc3Rk
OjpudWxsb3B0KTsKIAogICAgIEluc2VydGVkSW50b0FuY2VzdG9yUmVzdWx0IGluc2VydGVkSW50
b0FuY2VzdG9yKEluc2VydGlvblR5cGUsIENvbnRhaW5lck5vZGUmKSBmaW5hbDsKICAgICB2b2lk
IHJlbW92ZWRGcm9tQW5jZXN0b3IoUmVtb3ZhbFR5cGUsIENvbnRhaW5lck5vZGUmKSBmaW5hbDsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElBdHRhY2htZW50LmNw
cCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElBdHRhY2htZW50LmNwcAppbmRleCBi
NjE1MDQ4M2RlNWY2NmFkZWU3Y2M2ZjRhYmZkMGUwMzY1YjZhNDMyLi4wNzNhNDRjZTQ0ODZjYWZk
NjJlMjVjYmRlOGU5ZmJjOTNiY2M3ZjQ2IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJv
Y2Vzcy9BUEkvQVBJQXR0YWNobWVudC5jcHAKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0FQSUF0dGFjaG1lbnQuY3BwCkBAIC01NywxNyArNTcsMTQgQEAgdm9pZCBBdHRhY2htZW50
OjpzZXREaXNwbGF5T3B0aW9ucyhXZWJDb3JlOjpBdHRhY2htZW50RGlzcGxheU9wdGlvbnMgb3B0
aW9ucywgRnUKICAgICAgICAgY2FsbGJhY2soV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yOjpP
d25lcldhc0ludmFsaWRhdGVkKTsKIH0KIAotdm9pZCBBdHRhY2htZW50Ojp1cGRhdGVBdHRyaWJ1
dGVzKHVpbnQ2NF90IGZpbGVTaXplLCBjb25zdCBXVEY6OlN0cmluZyYgbmV3Q29udGVudFR5cGUs
IGNvbnN0IFdURjo6U3RyaW5nJiBuZXdGaWxlbmFtZSwgRnVuY3Rpb248dm9pZChXZWJLaXQ6OkNh
bGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrKQordm9pZCBBdHRhY2htZW50Ojp1cGRhdGVB
dHRyaWJ1dGVzKEZ1bmN0aW9uPHZvaWQoV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yKT4mJiBj
YWxsYmFjaykKIHsKLSAgICBzZXRDb250ZW50VHlwZShuZXdDb250ZW50VHlwZSk7Ci0gICAgc2V0
RmlsZVBhdGgoeyB9KTsKLQotICAgIGF1dG8gb3B0aW9uYWxOZXdDb250ZW50VHlwZSA9IG5ld0Nv
bnRlbnRUeXBlLmlzTnVsbCgpID8gc3RkOjpudWxsb3B0IDogc3RkOjpvcHRpb25hbDxXVEY6OlN0
cmluZz4geyBuZXdDb250ZW50VHlwZSB9OwotICAgIGF1dG8gb3B0aW9uYWxOZXdGaWxlbmFtZSA9
IG5ld0ZpbGVuYW1lLmlzTnVsbCgpID8gc3RkOjpudWxsb3B0IDogc3RkOjpvcHRpb25hbDxXVEY6
OlN0cmluZz4geyBuZXdGaWxlbmFtZSB9OwotICAgIGlmIChtX3dlYlBhZ2UpCi0gICAgICAgIG1f
d2ViUGFnZS0+dXBkYXRlQXR0YWNobWVudEF0dHJpYnV0ZXMobV9pZGVudGlmaWVyLCBmaWxlU2l6
ZSwgV1RGTW92ZShvcHRpb25hbE5ld0NvbnRlbnRUeXBlKSwgV1RGTW92ZShvcHRpb25hbE5ld0Zp
bGVuYW1lKSwgV1RGTW92ZShjYWxsYmFjaykpOwotICAgIGVsc2UKKyAgICBpZiAoIW1fd2ViUGFn
ZSkgewogICAgICAgICBjYWxsYmFjayhXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3I6Ok93bmVy
V2FzSW52YWxpZGF0ZWQpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgbV93ZWJQYWdl
LT51cGRhdGVBdHRhY2htZW50QXR0cmlidXRlcygqdGhpcywgV1RGTW92ZShjYWxsYmFjaykpOwog
fQogCiB2b2lkIEF0dGFjaG1lbnQ6OmludmFsaWRhdGUoKQpAQCAtOTMsNiArOTAsMTEgQEAgV1RG
OjpTdHJpbmcgQXR0YWNobWVudDo6ZmlsZU5hbWUoKSBjb25zdAogICAgIHJldHVybiB7IH07CiB9
CiAKK3N0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IEF0dGFjaG1lbnQ6OmZpbGVTaXplRm9yRGlzcGxh
eSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIHN0ZDo6bnVsbG9wdDsKK30KKwogI2VuZGlmIC8vICFQ
TEFURk9STShDT0NPQSkKIAogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
QVBJL0FQSUF0dGFjaG1lbnQuaCBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElBdHRh
Y2htZW50LmgKaW5kZXggNzE3NDFmZjQxMzRkZmE0NWUyYWRkNzcyNDhkNzg5OTcxZjU0NjM4NC4u
ODQ0M2Y0MzBiYzkzNjNiOTNiMDhhMzdhMzQzMjEwZjBiY2MyZGZjNCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0FQSUF0dGFjaG1lbnQuaAorKysgYi9Tb3VyY2UvV2Vi
S2l0L1VJUHJvY2Vzcy9BUEkvQVBJQXR0YWNobWVudC5oCkBAIC01Niw3ICs1Niw3IEBAIHB1Ymxp
YzoKIAogICAgIGNvbnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyKCkgY29uc3QgeyByZXR1cm4g
bV9pZGVudGlmaWVyOyB9CiAgICAgdm9pZCBzZXREaXNwbGF5T3B0aW9ucyhXZWJDb3JlOjpBdHRh
Y2htZW50RGlzcGxheU9wdGlvbnMsIEZ1bmN0aW9uPHZvaWQoV2ViS2l0OjpDYWxsYmFja0Jhc2U6
OkVycm9yKT4mJik7Ci0gICAgdm9pZCB1cGRhdGVBdHRyaWJ1dGVzKHVpbnQ2NF90IGZpbGVTaXpl
LCBjb25zdCBXVEY6OlN0cmluZyYgbmV3Q29udGVudFR5cGUsIGNvbnN0IFdURjo6U3RyaW5nJiBu
ZXdGaWxlbmFtZSwgRnVuY3Rpb248dm9pZChXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6RXJyb3IpPiYm
KTsKKyAgICB2b2lkIHVwZGF0ZUF0dHJpYnV0ZXMoRnVuY3Rpb248dm9pZChXZWJLaXQ6OkNhbGxi
YWNrQmFzZTo6RXJyb3IpPiYmKTsKIAogICAgIHZvaWQgaW52YWxpZGF0ZSgpOwogICAgIGJvb2wg
aXNWYWxpZCgpIGNvbnN0IHsgcmV0dXJuICEhbV93ZWJQYWdlOyB9CkBAIC02NCw2ICs2NCw3IEBA
IHB1YmxpYzoKICNpZiBQTEFURk9STShDT0NPQSkKICAgICBOU0ZpbGVXcmFwcGVyICpmaWxlV3Jh
cHBlcigpIGNvbnN0IHsgcmV0dXJuIG1fZmlsZVdyYXBwZXIuZ2V0KCk7IH0KICAgICB2b2lkIHNl
dEZpbGVXcmFwcGVyKE5TRmlsZVdyYXBwZXIgKmZpbGVXcmFwcGVyKSB7IG1fZmlsZVdyYXBwZXIg
PSBmaWxlV3JhcHBlcjsgfQorICAgIHZvaWQgc2V0RmlsZVdyYXBwZXJBbmRVcGRhdGVDb250ZW50
VHlwZShOU0ZpbGVXcmFwcGVyICosIE5TU3RyaW5nICpjb250ZW50VHlwZSk7CiAgICAgV1RGOjpT
dHJpbmcgdXRpVHlwZSgpIGNvbnN0OwogI2VuZGlmCiAgICAgV1RGOjpTdHJpbmcgbWltZVR5cGUo
KSBjb25zdDsKQEAgLTc4LDYgKzc5LDggQEAgcHVibGljOgogICAgIEluc2VydGlvblN0YXRlIGlu
c2VydGlvblN0YXRlKCkgY29uc3QgeyByZXR1cm4gbV9pbnNlcnRpb25TdGF0ZTsgfQogICAgIHZv
aWQgc2V0SW5zZXJ0aW9uU3RhdGUoSW5zZXJ0aW9uU3RhdGUgc3RhdGUpIHsgbV9pbnNlcnRpb25T
dGF0ZSA9IHN0YXRlOyB9CiAKKyAgICBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmaWxlU2l6ZUZv
ckRpc3BsYXkoKSBjb25zdDsKKwogcHJpdmF0ZToKICAgICBleHBsaWNpdCBBdHRhY2htZW50KGNv
bnN0IFdURjo6U3RyaW5nJiBpZGVudGlmaWVyLCBXZWJLaXQ6OldlYlBhZ2VQcm94eSYpOwogCmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvQVBJQXR0YWNobWVu
dENvY29hLm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL0FQSUF0dGFjaG1l
bnRDb2NvYS5tbQppbmRleCA5ZThiNTg4ZmVkMmFhZWQwMDQ5YzBkNTBlMzFhYzRjNDFhMDVkNTIw
Li41MTc0MGQ3ZTIyZmZhZGMyNDY3NjQwMjE1Y2ZjODBjOTcxYjVlOTU4IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvQVBJQXR0YWNobWVudENvY29hLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9BUElBdHRhY2htZW50Q29jb2Eu
bW0KQEAgLTc0LDQgKzc0LDM0IEBAIFdURjo6U3RyaW5nIEF0dGFjaG1lbnQ6OmZpbGVOYW1lKCkg
Y29uc3QKICAgICByZXR1cm4gW21fZmlsZVdyYXBwZXIgcHJlZmVycmVkRmlsZW5hbWVdOwogfQog
Cit2b2lkIEF0dGFjaG1lbnQ6OnNldEZpbGVXcmFwcGVyQW5kVXBkYXRlQ29udGVudFR5cGUoTlNG
aWxlV3JhcHBlciAqZmlsZVdyYXBwZXIsIE5TU3RyaW5nICpjb250ZW50VHlwZSkKK3sKKyAgICBp
ZiAoIWNvbnRlbnRUeXBlLmxlbmd0aCkgeworICAgICAgICBpZiAoZmlsZVdyYXBwZXIuZGlyZWN0
b3J5KQorICAgICAgICAgICAgY29udGVudFR5cGUgPSAoTlNTdHJpbmcgKilrVVRUeXBlRGlyZWN0
b3J5OworICAgICAgICBlbHNlIGlmIChmaWxlV3JhcHBlci5yZWd1bGFyRmlsZSkgeworICAgICAg
ICAgICAgaWYgKE5TU3RyaW5nICpwYXRoRXh0ZW5zaW9uID0gKGZpbGVXcmFwcGVyLmZpbGVuYW1l
Lmxlbmd0aCA/IGZpbGVXcmFwcGVyLmZpbGVuYW1lIDogZmlsZVdyYXBwZXIucHJlZmVycmVkRmls
ZW5hbWUpLnBhdGhFeHRlbnNpb24pCisgICAgICAgICAgICAgICAgY29udGVudFR5cGUgPSBXZWJD
b3JlOjpNSU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbihwYXRoRXh0ZW5z
aW9uKTsKKyAgICAgICAgICAgIGlmICghY29udGVudFR5cGUubGVuZ3RoKQorICAgICAgICAgICAg
ICAgIGNvbnRlbnRUeXBlID0gKE5TU3RyaW5nICopa1VUVHlwZURhdGE7CisgICAgICAgIH0KKyAg
ICB9CisKKyAgICBzZXRDb250ZW50VHlwZShjb250ZW50VHlwZSk7CisgICAgc2V0RmlsZVdyYXBw
ZXIoZmlsZVdyYXBwZXIpOworfQorCitzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBBdHRhY2htZW50
OjpmaWxlU2l6ZUZvckRpc3BsYXkoKSBjb25zdAoreworICAgIGlmICghW21fZmlsZVdyYXBwZXIg
aXNSZWd1bGFyRmlsZV0pIHsKKyAgICAgICAgLy8gRklYTUU6IFdlIHNob3VsZCBkaXNwbGF5IGEg
c2l6ZSBlc3RpbWF0ZSBmb3IgZGlyZWN0b3J5LXR5cGUgZmlsZSB3cmFwcGVycy4KKyAgICAgICAg
cmV0dXJuIHN0ZDo6bnVsbG9wdDsKKyAgICB9CisKKyAgICBpZiAoYXV0byBmaWxlU2l6ZSA9IFtb
bV9maWxlV3JhcHBlciBmaWxlQXR0cmlidXRlc11bTlNGaWxlU2l6ZV0gdW5zaWduZWRMb25nTG9u
Z1ZhbHVlXSkKKyAgICAgICAgcmV0dXJuIGZpbGVTaXplOworCisgICAgcmV0dXJuIFttX2ZpbGVX
cmFwcGVyIHJlZ3VsYXJGaWxlQ29udGVudHNdLmxlbmd0aDsKK30KKwogfSAvLyBuYW1lc3BhY2Ug
QVBJCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJW
aWV3Lm1tIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQpp
bmRleCA3YjZjY2JlMmQwZDVjMTdkNGZlNTIwNmE2MzZjNTZlNTJhNjllNjVkLi4yZmE3ODNmZmVh
MmE1MzFhOTUyYjFjMzQ2NDU1YmUxMjkxMDIxMmRhIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KQEAgLTQ0NTQsMTggKzQ0NTQsOCBAQCBXRUJD
T1JFX0NPTU1BTkQoeWFua0FuZFNlbGVjdCkKICAgICBhdXRvIGlkZW50aWZpZXIgPSBjcmVhdGVD
YW5vbmljYWxVVUlEU3RyaW5nKCk7CiAgICAgYXV0byBjb3JlT3B0aW9ucyA9IG9wdGlvbnMgPyBv
cHRpb25zLmNvcmVEaXNwbGF5T3B0aW9ucyA6IFdlYkNvcmU6OkF0dGFjaG1lbnREaXNwbGF5T3B0
aW9ucyB7IH07CiAgICAgYXV0byBhdHRhY2htZW50ID0gQVBJOjpBdHRhY2htZW50OjpjcmVhdGUo
aWRlbnRpZmllciwgKl9wYWdlKTsKLSAgICBhdHRhY2htZW50LT5zZXRGaWxlV3JhcHBlcihmaWxl
V3JhcHBlcik7Ci0KLSAgICBpZiAoIWNvbnRlbnRUeXBlLmxlbmd0aCkgewotICAgICAgICBpZiAo
TlNTdHJpbmcgKnBhdGhFeHRlbnNpb24gPSAoZmlsZVdyYXBwZXIuZmlsZW5hbWUubGVuZ3RoID8g
ZmlsZVdyYXBwZXIuZmlsZW5hbWUgOiBmaWxlV3JhcHBlci5wcmVmZXJyZWRGaWxlbmFtZSkucGF0
aEV4dGVuc2lvbikKLSAgICAgICAgICAgIGNvbnRlbnRUeXBlID0gV2ViQ29yZTo6TUlNRVR5cGVS
ZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JFeHRlbnNpb24ocGF0aEV4dGVuc2lvbik7Ci0gICAgfQot
Ci0gICAgYXV0byBmaWxlU2l6ZSA9IFtbW2ZpbGVXcmFwcGVyIGZpbGVBdHRyaWJ1dGVzXSBvYmpl
Y3RGb3JLZXk6TlNGaWxlU2l6ZV0gdW5zaWduZWRMb25nTG9uZ1ZhbHVlXTsKLSAgICBpZiAoIWZp
bGVTaXplICYmIGZpbGVXcmFwcGVyLnJlZ3VsYXJGaWxlKQotICAgICAgICBmaWxlU2l6ZSA9IGZp
bGVXcmFwcGVyLnJlZ3VsYXJGaWxlQ29udGVudHMubGVuZ3RoOwotCi0gICAgX3BhZ2UtPmluc2Vy
dEF0dGFjaG1lbnQoYXR0YWNobWVudC5jb3B5UmVmKCksIGNvcmVPcHRpb25zLCBmaWxlU2l6ZSwg
W2ZpbGVXcmFwcGVyIHByZWZlcnJlZEZpbGVuYW1lXSwgY29udGVudFR5cGUubGVuZ3RoID8gc3Rk
OjpvcHRpb25hbDxTdHJpbmc+IHsgY29udGVudFR5cGUgfSA6IHN0ZDo6bnVsbG9wdCwgW2NhcHR1
cmVkSGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIChXZWJLaXQ6OkNh
bGxiYWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKKyAgICBhdHRhY2htZW50LT5zZXRGaWxlV3JhcHBl
ckFuZFVwZGF0ZUNvbnRlbnRUeXBlKGZpbGVXcmFwcGVyLCBjb250ZW50VHlwZSk7CisgICAgX3Bh
Z2UtPmluc2VydEF0dGFjaG1lbnQoYXR0YWNobWVudC5jb3B5UmVmKCksIGNvcmVPcHRpb25zLCBb
Y2FwdHVyZWRIYW5kbGVyID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gKFdlYktp
dDo6Q2FsbGJhY2tCYXNlOjpFcnJvciBlcnJvcikgewogICAgICAgICBpZiAoY2FwdHVyZWRIYW5k
bGVyKQogICAgICAgICAgICAgY2FwdHVyZWRIYW5kbGVyKGVycm9yID09IFdlYktpdDo6Q2FsbGJh
Y2tCYXNlOjpFcnJvcjo6Tm9uZSk7CiAgICAgfSk7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXR0YWNobWVudC5tbSBiL1NvdXJjZS9XZWJLaXQvVUlQ
cm9jZXNzL0FQSS9Db2NvYS9fV0tBdHRhY2htZW50Lm1tCmluZGV4IDdkZjQ4YjI5NTVkYWQ5ZWNk
YzdlMmVkZTY2MmE1MWFmMGJmNGZkM2UuLjBjYTNkNTM5Mzg2MTU1YzRhYTQwYTQ5ZGMzODk0NTcz
NjBiNjJlNGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tBdHRhY2htZW50Lm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9f
V0tBdHRhY2htZW50Lm1tCkBAIC0xNTcsMTcgKzE1NywxMSBAQCBzdGF0aWMgY29uc3QgTlNJbnRl
Z2VyIEludmFsaWRBdHRhY2htZW50RXJyb3JDb2RlID0gMjsKICAgICAgICAgcmV0dXJuOwogICAg
IH0KIAotICAgIGF1dG8gZmlsZVNpemUgPSBbZmlsZVdyYXBwZXIuZmlsZUF0dHJpYnV0ZXNbTlNG
aWxlU2l6ZV0gdW5zaWduZWRMb25nTG9uZ1ZhbHVlXTsKLSAgICBpZiAoIWZpbGVTaXplICYmIGZp
bGVXcmFwcGVyLnJlZ3VsYXJGaWxlKQotICAgICAgICBmaWxlU2l6ZSA9IGZpbGVXcmFwcGVyLnJl
Z3VsYXJGaWxlQ29udGVudHMubGVuZ3RoOwotCi0gICAgaWYgKCFjb250ZW50VHlwZS5sZW5ndGgp
IHsKLSAgICAgICAgaWYgKE5TU3RyaW5nICpwYXRoRXh0ZW5zaW9uID0gKGZpbGVXcmFwcGVyLmZp
bGVuYW1lLmxlbmd0aCA/IGZpbGVXcmFwcGVyLmZpbGVuYW1lIDogZmlsZVdyYXBwZXIucHJlZmVy
cmVkRmlsZW5hbWUpLnBhdGhFeHRlbnNpb24pCi0gICAgICAgICAgICBjb250ZW50VHlwZSA9IFdl
YkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKHBhdGhFeHRl
bnNpb24pOwotICAgIH0KLQotICAgIF9hdHRhY2htZW50LT5zZXRGaWxlV3JhcHBlcihmaWxlV3Jh
cHBlcik7Ci0gICAgX2F0dGFjaG1lbnQtPnVwZGF0ZUF0dHJpYnV0ZXMoZmlsZVNpemUsIGNvbnRl
bnRUeXBlLCBmaWxlV3JhcHBlci5wcmVmZXJyZWRGaWxlbmFtZSwgW2NhcHR1cmVkQmxvY2sgPSBt
YWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoYXV0byBlcnJvcikgeworICAgIC8vIFRo
aXMgZmlsZSBwYXRoIG1lbWJlciBpcyBvbmx5IHBvcHVsYXRlZCB3aGVuIHRoZSBhdHRhY2htZW50
IGlzIGdlbmVyYXRlZCB1cG9uIGRyb3BwaW5nIGZpbGVzLiBXaGVuIGRhdGEgaXMgc3BlY2lmaWVk
IHZpYSBOU0ZpbGVXcmFwcGVyCisgICAgLy8gZnJvbSB0aGUgU1BJIGNsaWVudCwgdGhlIGNvcnJl
c3BvbmRpbmcgZmlsZSBwYXRoIG9mIHRoZSBkYXRhIGlzIHVua25vd24sIGlmIGl0IGV2ZW4gZXhp
c3RzIGF0IGFsbC4KKyAgICBfYXR0YWNobWVudC0+c2V0RmlsZVBhdGgoeyB9KTsKKyAgICBfYXR0
YWNobWVudC0+c2V0RmlsZVdyYXBwZXJBbmRVcGRhdGVDb250ZW50VHlwZShmaWxlV3JhcHBlciwg
Y29udGVudFR5cGUpOworICAgIF9hdHRhY2htZW50LT51cGRhdGVBdHRyaWJ1dGVzKFtjYXB0dXJl
ZEJsb2NrID0gbWFrZUJsb2NrUHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gKGF1dG8gZXJyb3IpIHsK
ICAgICAgICAgaWYgKCFjYXB0dXJlZEJsb2NrKQogICAgICAgICAgICAgcmV0dXJuOwogCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwIGIvU291cmNl
L1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAppbmRleCBiZjZjZjBmZGY1MWI3YzI2
ZDMwYzk0N2EwZDAxNDdiNzVkYmM2MTdiLi5mYTgxMjRjNjM2NzVhOGFjMmVmODU2OGI3MDNmNjZi
YTNjMzRkNTk4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJv
eHkuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKQEAg
LTc3NTEsMjEgKzc3NTEsMTcgQEAgUmVmUHRyPEFQSTo6QXR0YWNobWVudD4gV2ViUGFnZVByb3h5
OjphdHRhY2htZW50Rm9ySWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGlkZW4KICAgICByZXR1cm4g
bV9hdHRhY2htZW50SWRlbnRpZmllclRvQXR0YWNobWVudE1hcC5nZXQoaWRlbnRpZmllcik7CiB9
CiAKLXZvaWQgV2ViUGFnZVByb3h5OjppbnNlcnRBdHRhY2htZW50KFJlZjxBUEk6OkF0dGFjaG1l
bnQ+JiYgYXR0YWNobWVudCwgY29uc3QgQXR0YWNobWVudERpc3BsYXlPcHRpb25zJiBvcHRpb25z
LCB1aW50NjRfdCBmaWxlU2l6ZSwgY29uc3QgU3RyaW5nJiBmaWxlbmFtZSwgc3RkOjpvcHRpb25h
bDxTdHJpbmc+IGNvbnRlbnRUeXBlLCBGdW5jdGlvbjx2b2lkKENhbGxiYWNrQmFzZTo6RXJyb3Ip
PiYmIGNhbGxiYWNrKQordm9pZCBXZWJQYWdlUHJveHk6Omluc2VydEF0dGFjaG1lbnQoUmVmPEFQ
STo6QXR0YWNobWVudD4mJiBhdHRhY2htZW50LCBjb25zdCBBdHRhY2htZW50RGlzcGxheU9wdGlv
bnMmIG9wdGlvbnMsIEZ1bmN0aW9uPHZvaWQoQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJh
Y2spCiB7CiAgICAgaWYgKCFpc1ZhbGlkKCkpIHsKICAgICAgICAgY2FsbGJhY2soQ2FsbGJhY2tC
YXNlOjpFcnJvcjo6T3duZXJXYXNJbnZhbGlkYXRlZCk7CiAgICAgICAgIHJldHVybjsKICAgICB9
CiAKLSAgICBpZiAoY29udGVudFR5cGUpCi0gICAgICAgIGF0dGFjaG1lbnQtPnNldENvbnRlbnRU
eXBlKCpjb250ZW50VHlwZSk7Ci0KICAgICBhdXRvIGF0dGFjaG1lbnRJZGVudGlmaWVyID0gYXR0
YWNobWVudC0+aWRlbnRpZmllcigpOwotICAgIG1fYXR0YWNobWVudElkZW50aWZpZXJUb0F0dGFj
aG1lbnRNYXAuc2V0KGF0dGFjaG1lbnRJZGVudGlmaWVyLCBXVEZNb3ZlKGF0dGFjaG1lbnQpKTsK
LQogICAgIGF1dG8gY2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNr
KSwgbV9wcm9jZXNzLT50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHlUb2tlbigpKTsKLSAg
ICBtX3Byb2Nlc3MtPnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6Okluc2VydEF0dGFjaG1lbnQoYXR0
YWNobWVudElkZW50aWZpZXIsIG9wdGlvbnMsIGZpbGVTaXplLCBmaWxlbmFtZSwgY29udGVudFR5
cGUsIGNhbGxiYWNrSUQpLCBtX3BhZ2VJRCk7CisgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2Vz
OjpXZWJQYWdlOjpJbnNlcnRBdHRhY2htZW50KGF0dGFjaG1lbnRJZGVudGlmaWVyLCBvcHRpb25z
LCBhdHRhY2htZW50LT5maWxlU2l6ZUZvckRpc3BsYXkoKSwgYXR0YWNobWVudC0+ZmlsZU5hbWUo
KSwgYXR0YWNobWVudC0+Y29udGVudFR5cGUoKSwgY2FsbGJhY2tJRCksIG1fcGFnZUlEKTsKKyAg
ICBtX2F0dGFjaG1lbnRJZGVudGlmaWVyVG9BdHRhY2htZW50TWFwLnNldChhdHRhY2htZW50SWRl
bnRpZmllciwgV1RGTW92ZShhdHRhY2htZW50KSk7CiB9CiAKIHZvaWQgV2ViUGFnZVByb3h5Ojpz
ZXRBdHRhY2htZW50RGlzcGxheU9wdGlvbnMoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBBdHRh
Y2htZW50RGlzcGxheU9wdGlvbnMgb3B0aW9ucywgRnVuY3Rpb248dm9pZChDYWxsYmFja0Jhc2U6
OkVycm9yKT4mJiBjYWxsYmFjaykKQEAgLTc3NzksNyArNzc3NSw3IEBAIHZvaWQgV2ViUGFnZVBy
b3h5OjpzZXRBdHRhY2htZW50RGlzcGxheU9wdGlvbnMoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVy
LCBBdHRhY2htCiAgICAgbV9wcm9jZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpTZXRBdHRh
Y2htZW50RGlzcGxheU9wdGlvbnMoaWRlbnRpZmllciwgb3B0aW9ucywgY2FsbGJhY2tJRCksIG1f
cGFnZUlEKTsKIH0KIAotdm9pZCBXZWJQYWdlUHJveHk6OnVwZGF0ZUF0dGFjaG1lbnRBdHRyaWJ1
dGVzKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgdWludDY0X3QgZmlsZVNpemUsIHN0ZDo6b3B0
aW9uYWw8U3RyaW5nPiYmIG5ld0NvbnRlbnRUeXBlLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4mJiBu
ZXdGaWxlbmFtZSwgRnVuY3Rpb248dm9pZChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJiBjYWxsYmFj
aykKK3ZvaWQgV2ViUGFnZVByb3h5Ojp1cGRhdGVBdHRhY2htZW50QXR0cmlidXRlcyhjb25zdCBB
UEk6OkF0dGFjaG1lbnQmIGF0dGFjaG1lbnQsIEZ1bmN0aW9uPHZvaWQoQ2FsbGJhY2tCYXNlOjpF
cnJvcik+JiYgY2FsbGJhY2spCiB7CiAgICAgaWYgKCFpc1ZhbGlkKCkpIHsKICAgICAgICAgY2Fs
bGJhY2soQ2FsbGJhY2tCYXNlOjpFcnJvcjo6T3duZXJXYXNJbnZhbGlkYXRlZCk7CkBAIC03Nzg3
LDcgKzc3ODMsOSBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6dXBkYXRlQXR0YWNobWVudEF0dHJpYnV0
ZXMoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCB1aW50NjRfdAogICAgIH0KIAogICAgIGF1dG8g
Y2FsbGJhY2tJRCA9IG1fY2FsbGJhY2tzLnB1dChXVEZNb3ZlKGNhbGxiYWNrKSwgbV9wcm9jZXNz
LT50aHJvdHRsZXIoKS5iYWNrZ3JvdW5kQWN0aXZpdHlUb2tlbigpKTsKLSAgICBtX3Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlVwZGF0ZUF0dGFjaG1lbnRBdHRyaWJ1dGVzKGlkZW50
aWZpZXIsIGZpbGVTaXplLCBXVEZNb3ZlKG5ld0NvbnRlbnRUeXBlKSwgV1RGTW92ZShuZXdGaWxl
bmFtZSksIGNhbGxiYWNrSUQpLCBtX3BhZ2VJRCk7CisgICAgYXV0byBuYW1lID0gYXR0YWNobWVu
dC5maWxlTmFtZSgpOworICAgIGF1dG8gb3B0aW9uYWxOYW1lID0gbmFtZS5pc051bGwoKSA/IHN0
ZDo6bnVsbG9wdCA6IHN0ZDo6b3B0aW9uYWw8V1RGOjpTdHJpbmc+IHsgbmFtZSB9OworICAgIG1f
cHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6VXBkYXRlQXR0YWNobWVudEF0dHJpYnV0
ZXMoYXR0YWNobWVudC5pZGVudGlmaWVyKCksIGF0dGFjaG1lbnQuZmlsZVNpemVGb3JEaXNwbGF5
KCksIGF0dGFjaG1lbnQuY29udGVudFR5cGUoKSwgV1RGTW92ZShvcHRpb25hbE5hbWUpLCBjYWxs
YmFja0lEKSwgbV9wYWdlSUQpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6cmVnaXN0ZXJBdHRh
Y2htZW50SWRlbnRpZmllckZyb21EYXRhKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3Qg
U3RyaW5nJiBjb250ZW50VHlwZSwgY29uc3QgU3RyaW5nJiBwcmVmZXJyZWRGaWxlTmFtZSwgY29u
c3QgSVBDOjpEYXRhUmVmZXJlbmNlJiBkYXRhKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9V
SVByb2Nlc3MvV2ViUGFnZVByb3h5LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdl
UHJveHkuaAppbmRleCA3N2JkOGQ3NzU2MThlMDhlMzYyY2IxNjE0YjNkNjVkN2NlOTYwMTZjLi44
YzU1ZDI1NThmOGI2ZGVjZDAwYTRjNTg3MjE5YTQwMGYxYjBlOWExIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuaAorKysgYi9Tb3VyY2UvV2ViS2l0L1VJ
UHJvY2Vzcy9XZWJQYWdlUHJveHkuaApAQCAtMTMxOSw5ICsxMzE5LDkgQEAgcHVibGljOgogCiAj
aWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVOVCkKICAgICBSZWZQdHI8QVBJOjpBdHRhY2htZW50
PiBhdHRhY2htZW50Rm9ySWRlbnRpZmllcihjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIpIGNvbnN0
OwotICAgIHZvaWQgaW5zZXJ0QXR0YWNobWVudChSZWY8QVBJOjpBdHRhY2htZW50PiYmLCBjb25z
dCBXZWJDb3JlOjpBdHRhY2htZW50RGlzcGxheU9wdGlvbnMmLCB1aW50NjRfdCBmaWxlU2l6ZSwg
Y29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgc3RkOjpvcHRpb25hbDxTdHJpbmc+IGNvbnRlbnRUeXBl
LCBGdW5jdGlvbjx2b2lkKENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsKKyAgICB2b2lkIGluc2Vy
dEF0dGFjaG1lbnQoUmVmPEFQSTo6QXR0YWNobWVudD4mJiwgY29uc3QgV2ViQ29yZTo6QXR0YWNo
bWVudERpc3BsYXlPcHRpb25zJiwgRnVuY3Rpb248dm9pZChDYWxsYmFja0Jhc2U6OkVycm9yKT4m
Jik7CiAgICAgdm9pZCBzZXRBdHRhY2htZW50RGlzcGxheU9wdGlvbnMoY29uc3QgU3RyaW5nJiBp
ZGVudGlmaWVyLCBXZWJDb3JlOjpBdHRhY2htZW50RGlzcGxheU9wdGlvbnMsIEZ1bmN0aW9uPHZv
aWQoQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYpOwotICAgIHZvaWQgdXBkYXRlQXR0YWNobWVudEF0
dHJpYnV0ZXMoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCB1aW50NjRfdCBmaWxlU2l6ZSwgc3Rk
OjpvcHRpb25hbDxTdHJpbmc+JiYgbmV3Q29udGVudFR5cGUsIHN0ZDo6b3B0aW9uYWw8U3RyaW5n
PiYmIG5ld0ZpbGVuYW1lLCBGdW5jdGlvbjx2b2lkKENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsK
KyAgICB2b2lkIHVwZGF0ZUF0dGFjaG1lbnRBdHRyaWJ1dGVzKGNvbnN0IEFQSTo6QXR0YWNobWVu
dCYsIEZ1bmN0aW9uPHZvaWQoQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYpOwogI2VuZGlmCiAKICNp
ZiBFTkFCTEUoQVBQTElDQVRJT05fTUFOSUZFU1QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0
L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1dlYlBhZ2UuY3BwCmluZGV4IGI1YjcxMWE2YzY1OGM2ZGExMmI3ZjRmNmY1YThk
OGZlYWU0ZjhkNmYuLjRiNWY1YWI4NjkwZWZlNjlhZGNkMTM2MGU3YzE5ODhhZGYwNTBmZjUgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuY3BwCkBAIC02MDY2
LDEwICs2MDY2LDEwIEBAIHZvaWQgV2ViUGFnZTo6c3RvcmFnZUFjY2Vzc1Jlc3BvbnNlKGJvb2wg
d2FzR3JhbnRlZCwgdWludDY0X3QgY29udGV4dElkKQogCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRf
RUxFTUVOVCkKIAotdm9pZCBXZWJQYWdlOjppbnNlcnRBdHRhY2htZW50KGNvbnN0IFN0cmluZyYg
aWRlbnRpZmllciwgY29uc3QgQXR0YWNobWVudERpc3BsYXlPcHRpb25zJiBvcHRpb25zLCB1aW50
NjRfdCBmaWxlU2l6ZSwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgc3RkOjpvcHRpb25hbDxTdHJp
bmc+IGNvbnRlbnRUeXBlLCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCit2b2lkIFdlYlBhZ2U6Omlu
c2VydEF0dGFjaG1lbnQoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBBdHRhY2htZW50
RGlzcGxheU9wdGlvbnMmIG9wdGlvbnMsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+JiYgZmlsZVNp
emUsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUsIENh
bGxiYWNrSUQgY2FsbGJhY2tJRCkKIHsKICAgICBhdXRvJiBmcmFtZSA9IG1fcGFnZS0+Zm9jdXND
b250cm9sbGVyKCkuZm9jdXNlZE9yTWFpbkZyYW1lKCk7Ci0gICAgZnJhbWUuZWRpdG9yKCkuaW5z
ZXJ0QXR0YWNobWVudChpZGVudGlmaWVyLCBvcHRpb25zLCBmaWxlU2l6ZSwgZmlsZU5hbWUsIFdU
Rk1vdmUoY29udGVudFR5cGUpKTsKKyAgICBmcmFtZS5lZGl0b3IoKS5pbnNlcnRBdHRhY2htZW50
KGlkZW50aWZpZXIsIG9wdGlvbnMsIFdURk1vdmUoZmlsZVNpemUpLCBmaWxlTmFtZSwgY29udGVu
dFR5cGUpOwogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Vm9pZENhbGxiYWNrKGNh
bGxiYWNrSUQpKTsKIH0KIApAQCAtNjA3OCwxMSArNjA3OCwxMSBAQCB2b2lkIFdlYlBhZ2U6OnNl
dEF0dGFjaG1lbnREaXNwbGF5T3B0aW9ucyhjb25zdCBTdHJpbmcmLCBjb25zdCBBdHRhY2htZW50
RGlzcGxheQogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Vm9pZENhbGxiYWNrKGNh
bGxiYWNrSUQpKTsKIH0KIAotdm9pZCBXZWJQYWdlOjp1cGRhdGVBdHRhY2htZW50QXR0cmlidXRl
cyhjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIHVpbnQ2NF90IGZpbGVTaXplLCBzdGQ6Om9wdGlv
bmFsPFN0cmluZz4gbmV3Q29udGVudFR5cGUsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBuZXdGaWxl
bmFtZSwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQordm9pZCBXZWJQYWdlOjp1cGRhdGVBdHRhY2ht
ZW50QXR0cmlidXRlcyhjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIHN0ZDo6b3B0aW9uYWw8dWlu
dDY0X3Q+JiYgZmlsZVNpemUsIGNvbnN0IFN0cmluZyYgY29udGVudFR5cGUsIHN0ZDo6b3B0aW9u
YWw8U3RyaW5nPiYmIG5ld0ZpbGVuYW1lLCBDYWxsYmFja0lEIGNhbGxiYWNrSUQpCiB7CiAgICAg
aWYgKGF1dG8gYXR0YWNobWVudCA9IGF0dGFjaG1lbnRFbGVtZW50V2l0aElkZW50aWZpZXIoaWRl
bnRpZmllcikpIHsKICAgICAgICAgYXR0YWNobWVudC0+ZG9jdW1lbnQoKS51cGRhdGVMYXlvdXQo
KTsKLSAgICAgICAgYXR0YWNobWVudC0+dXBkYXRlQXR0cmlidXRlcyhmaWxlU2l6ZSwgV1RGTW92
ZShuZXdDb250ZW50VHlwZSksIFdURk1vdmUobmV3RmlsZW5hbWUpKTsKKyAgICAgICAgYXR0YWNo
bWVudC0+dXBkYXRlQXR0cmlidXRlcyhXVEZNb3ZlKGZpbGVTaXplKSwgY29udGVudFR5cGUsIFdU
Rk1vdmUobmV3RmlsZW5hbWUpKTsKICAgICB9CiAgICAgc2VuZChNZXNzYWdlczo6V2ViUGFnZVBy
b3h5OjpWb2lkQ2FsbGJhY2soY2FsbGJhY2tJRCkpOwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCmluZGV4IDZiZTFjYmZjNzZjMzM2OTc2ZmIxZjIxZDQwOTFh
ZDc2MTZlZDhmMDIuLjRkNGFlODUxYjI2NWVjYjM5ZTBmNWVlYTQwYWUwMTA2OWQ0NDAwODEgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaAorKysg
Yi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKQEAgLTEwNzUsOSAr
MTA3NSw5IEBAIHB1YmxpYzoKICNlbmRpZgogCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxFTUVO
VCkKLSAgICB2b2lkIGluc2VydEF0dGFjaG1lbnQoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBj
b25zdCBXZWJDb3JlOjpBdHRhY2htZW50RGlzcGxheU9wdGlvbnMmLCB1aW50NjRfdCBmaWxlU2l6
ZSwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgc3RkOjpvcHRpb25hbDxTdHJpbmc+IGNvbnRlbnRU
eXBlLCBDYWxsYmFja0lEKTsKKyAgICB2b2lkIGluc2VydEF0dGFjaG1lbnQoY29uc3QgU3RyaW5n
JiBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpBdHRhY2htZW50RGlzcGxheU9wdGlvbnMmLCBz
dGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiYmIGZpbGVTaXplLCBjb25zdCBTdHJpbmcmIGZpbGVOYW1l
LCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlLCBDYWxsYmFja0lEKTsKICAgICB2b2lkIHNldEF0
dGFjaG1lbnREaXNwbGF5T3B0aW9ucyhjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IFdl
YkNvcmU6OkF0dGFjaG1lbnREaXNwbGF5T3B0aW9ucyYsIENhbGxiYWNrSUQpOwotICAgIHZvaWQg
dXBkYXRlQXR0YWNobWVudEF0dHJpYnV0ZXMoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCB1aW50
NjRfdCBmaWxlU2l6ZSwgc3RkOjpvcHRpb25hbDxTdHJpbmc+IG5ld0NvbnRlbnRUeXBlLCBzdGQ6
Om9wdGlvbmFsPFN0cmluZz4gbmV3RmlsZW5hbWUsIENhbGxiYWNrSUQpOworICAgIHZvaWQgdXBk
YXRlQXR0YWNobWVudEF0dHJpYnV0ZXMoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBzdGQ6Om9w
dGlvbmFsPHVpbnQ2NF90PiYmIGZpbGVTaXplLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlLCBz
dGQ6Om9wdGlvbmFsPFN0cmluZz4mJiBuZXdGaWxlbmFtZSwgQ2FsbGJhY2tJRCk7CiAjZW5kaWYK
IAogI2lmIEVOQUJMRShBUFBMSUNBVElPTl9NQU5JRkVTVCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4gYi9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluCmluZGV4IDk2ZTQ4N2Vl
NjJmNWExNDZkYWRhODdlZDlhOGUxOWFmNGVkZGJmMWEuLjI4OWFiZGE4N2YwNTNiNGJhYzI1YmVh
ZDA1NTI0NjQ3ZDk3NDY1OWYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9X
ZWJQYWdlL1dlYlBhZ2UubWVzc2FnZXMuaW4KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNz
L1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgpAQCAtNTEwLDkgKzUxMCw5IEBAIG1lc3NhZ2Vz
IC0+IFdlYlBhZ2UgTGVnYWN5UmVjZWl2ZXIgewogI2VuZGlmCiAKICNpZiBFTkFCTEUoQVRUQUNI
TUVOVF9FTEVNRU5UKQotICAgIEluc2VydEF0dGFjaG1lbnQoU3RyaW5nIGlkZW50aWZpZXIsIHN0
cnVjdCBXZWJDb3JlOjpBdHRhY2htZW50RGlzcGxheU9wdGlvbnMgb3B0aW9ucywgdWludDY0X3Qg
ZmlsZVNpemUsIFN0cmluZyBmaWxlTmFtZSwgc3RkOjpvcHRpb25hbDxTdHJpbmc+IGNvbnRlbnRU
eXBlLCBXZWJLaXQ6OkNhbGxiYWNrSUQgY2FsbGJhY2tJRCkKKyAgICBJbnNlcnRBdHRhY2htZW50
KFN0cmluZyBpZGVudGlmaWVyLCBzdHJ1Y3QgV2ViQ29yZTo6QXR0YWNobWVudERpc3BsYXlPcHRp
b25zIG9wdGlvbnMsIHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+IGZpbGVTaXplLCBTdHJpbmcgZmls
ZU5hbWUsIFN0cmluZyBjb250ZW50VHlwZSwgV2ViS2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQp
CiAgICAgU2V0QXR0YWNobWVudERpc3BsYXlPcHRpb25zKFN0cmluZyBpZGVudGlmaWVyLCBzdHJ1
Y3QgV2ViQ29yZTo6QXR0YWNobWVudERpc3BsYXlPcHRpb25zIG9wdGlvbnMsIFdlYktpdDo6Q2Fs
bGJhY2tJRCBjYWxsYmFja0lEKQotICAgIFVwZGF0ZUF0dGFjaG1lbnRBdHRyaWJ1dGVzKFN0cmlu
ZyBpZGVudGlmaWVyLCB1aW50NjRfdCBmaWxlU2l6ZSwgc3RkOjpvcHRpb25hbDxTdHJpbmc+IG5l
d0NvbnRlbnRUeXBlLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gbmV3RmlsZW5hbWUsIFdlYktpdDo6
Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQorICAgIFVwZGF0ZUF0dGFjaG1lbnRBdHRyaWJ1dGVzKFN0
cmluZyBpZGVudGlmaWVyLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmaWxlU2l6ZSwgU3RyaW5n
IG5ld0NvbnRlbnRUeXBlLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gbmV3RmlsZW5hbWUsIFdlYktp
dDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQogI2VuZGlmCiAKICNpZiBFTkFCTEUoQVBQTElDQVRJ
T05fTUFOSUZFU1QpCmRpZmYgLS1naXQgYS9Ub29scy9DaGFuZ2VMb2cgYi9Ub29scy9DaGFuZ2VM
b2cKaW5kZXggZDViZDM4NTcxN2IyM2RiZjk0YmI0YTY1MjhjM2ZkYWY2M2YzYjEyNS4uYjIwY2Fi
ZjQ2ODM5MTdhMzUxMzRhZTc1YTM4ZDY0NDgyOGEyN2QxNSAxMDA2NDQKLS0tIGEvVG9vbHMvQ2hh
bmdlTG9nCisrKyBiL1Rvb2xzL0NoYW5nZUxvZwpAQCAtMSwzICsxLDU1IEBACisyMDE4LTA4LTI3
ICBXZW5zb24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtDb2Nv
YV0gRXhjZXB0aW9uIChmaWxlVHlwZSAnZHluLmFncTh1JyBpcyBub3QgYSB2YWxpZCBVVEkpIHJh
aXNlZCB3aGVuIGRyYWdnaW5nIGFuIGF0dGFjaG1lbnQgd2hvc2UgZmlsZSB3cmFwcGVyIGlzIGEg
ZGlyZWN0b3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9p
ZD0xODg5MDMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQzNzAyOTkzPgorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgIEFkZCB0d28gQVBJIHRlc3RzIGFu
ZCBhZGp1c3QgZXhpc3RpbmcgV0tBdHRhY2htZW50IEFQSSB0ZXN0cy4gVGhlIG5ldyB0ZXN0cyBl
eGVyY2lzZSB0aGUgZm9sbG93aW5nIHNjZW5hcmlvcywgaW4KKyAgICAgICAgYm90aCBpT1MgYW5k
IG1hY09TOgorICAgICAgICDigKIgICAgICAgRHJvcHBpbmcgYSBmb2xkZXIgYXMgYW4gYXR0YWNo
bWVudCBlbGVtZW50LCBhbmQgdGhlbiBtb3ZpbmcgdGhhdCBhdHRhY2htZW50IGVsZW1lbnQgaW4g
dGhlIGRvY3VtZW50IGJ5CisgICAgICAgICAgICAgICAgZHJhZ2dpbmcgYW5kIGRyb3BwaW5nLgor
ICAgICAgICDigKIgICAgICAgVXNpbmcgV0tXZWJWaWV3IFNQSSB0byBpbnNlcnQgYSBmb2xkZXIg
YW5kIGEgZmlsZSB3aXRoIGFuIHVua25vd24gZXh0ZW5zaW9uLCBhbmQgdGhlbiB1c2luZyBtb3Jl
CisgICAgICAgICAgICAgICAgX1dLQXR0YWNobWVudCBTUEkgdG8gc3dhcCB0aGUgYXR0YWNobWVu
dHMnIGJhY2tpbmcgZmlsZSB3cmFwcGVycy4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVz
dHMvV2ViS2l0Q29jb2EvV0tBdHRhY2htZW50VGVzdHMubW06CisgICAgICAgICh3ZWJWaWV3Rm9y
VGVzdGluZ0F0dGFjaG1lbnRzKToKKyAgICAgICAgKC1bVGVzdFdLV2ViVmlldyBzeW5jaHJvbm91
c2x5SW5zZXJ0QXR0YWNobWVudFdpdGhGaWxlbmFtZTpjb250ZW50VHlwZTpkYXRhOl0pOgorICAg
ICAgICAoLVtfV0tBdHRhY2htZW50IHN5bmNocm9ub3VzbHlTZXREYXRhOm5ld0NvbnRlbnRUeXBl
Om5ld0ZpbGVuYW1lOmVycm9yOl0pOgorICAgICAgICAocnVuVGVzdFdpdGhUZW1wb3JhcnlGb2xk
ZXIpOgorCisgICAgICAgIEFkZCBhIGhlbHBlciBmdW5jdGlvbiB0byBydW4gYSB0ZXN0IHdpdGgg
YSBuZXcgZm9sZGVyIHBhdGgsIGNyZWF0ZWQgaW4gdGhlIHRlbXBvcmFyeSBkaXJlY3RvcnkgYW5k
IHBvcHVsYXRlZAorICAgICAgICB3aXRoIHNvbWUgc2FtcGxlIGNvbnRlbnQuIFRoaXMgZm9sZGVy
IGlzIGRlbGV0ZWQgYWZ0ZXIgcnVubmluZyB0aGUgdGVzdC4KKworICAgICAgICAoc2ltdWxhdGVG
b2xkZXJEcmFnV2l0aFVSTCk6CisKKyAgICAgICAgQWRkIGEgaGVscGVyIGZ1bmN0aW9uIHRvIHBy
ZXBhcmUgYSBnaXZlbiBEcmFnQW5kRHJvcFNpbXVsYXRvciBmb3Igc2ltdWxhdGluZyBhIGRyYWdn
ZWQgZm9sZGVyIGZyb20gYSBzb3VyY2UKKyAgICAgICAgZXh0ZXJuYWwgdG8gdGhlIHdlYiB2aWV3
LgorCisgICAgICAgICgtW05TSXRlbVByb3ZpZGVyIHJlZ2lzdGVyRGF0YTp0eXBlOl0pOgorICAg
ICAgICAocGxhdGZvcm1Db3B5UmljaFRleHRXaXRoTXVsdGlwbGVBdHRhY2htZW50cyk6CisgICAg
ICAgIChwbGF0Zm9ybUNvcHlSaWNoVGV4dFdpdGhJbWFnZSk6CisgICAgICAgIChwbGF0Zm9ybUNv
cHlQTkcpOgorICAgICAgICAoVGVzdFdlYktpdEFQSTo6VEVTVCk6CisKKyAgICAgICAgQWRkIG5l
dyBBUEkgdGVzdHMsIGFuZCBhZGp1c3QgZXhpc3RpbmcgdGVzdHMgdG8gcmVmbGVjdCBuZXcgLXNl
dEZpbGVXcmFwcGVyOuKApjogYmVoYXZpb3IuIFNwZWNpZmljYWxseSwKKyAgICAgICAgQ2hhbmdl
QXR0YWNobWVudERhdGFBbmRGaWxlSW5mb3JtYXRpb24gcHJldmlvdXNseSByZXF1aXJlZCB0aGF0
IGNoYW5naW5nIGEgX1dLQXR0YWNobWVudCdzIE5TRmlsZVdyYXBwZXIgd291bGQKKyAgICAgICAg
cHJlc2VydmUgdGhlIHByZXZpb3VzIE5TRmlsZVdyYXBwZXIncyBwcmVmZXJyZWQgbmFtZSBpZiB0
aGUgbmV3IGZpbGUgd3JhcHBlciBkb2VzIG5vdCBoYXZlIGEgcHJlZmVycmVkIG5hbWUsIGJ1dAor
ICAgICAgICB0aGlzIHF1aXJrIGlzIG5vIGxvbmdlciBzdXBwb3J0ZWQuCisKKyAgICAgICAgQWxz
byBhZGQgYSBmZXcgYnJpZGdpbmcgY2FzdHMgZm9yIHRoZSBldmVudHVhbCB0cmFuc2l0aW9uIG9m
IFRlc3RXZWJLaXRBUEkgdG8gQVJDLgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9jb2NvYS9E
cmFnQW5kRHJvcFNpbXVsYXRvci5oOgorCisgICAgICAgIEFkZCBhIG5ldyBob29rIHRvIGNsZWFy
IGFueSBleHRlcm5hbCBkcmFnIGluZm9ybWF0aW9uIG9uIGFuIGV4aXN0aW5nIERyYWdBbmREcm9w
U2ltdWxhdG9yLiBUaGlzIGlzIGNvbnZlbmllbnQKKyAgICAgICAgd2hlbiB1c2luZyB0aGUgc2Ft
ZSBEcmFnQW5kRHJvcFNpbXVsYXRvciB0byBwZXJmb3JtIG11bHRpcGxlIGRyYWdzIGluIGEgc2lu
Z2xlIHRlc3QuCisKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL2lvcy9EcmFnQW5kRHJvcFNpbXVs
YXRvcklPUy5tbToKKyAgICAgICAgKC1bRHJhZ0FuZERyb3BTaW11bGF0b3IgY2xlYXJFeHRlcm5h
bERyYWdJbmZvcm1hdGlvbl0pOgorICAgICAgICAqIFRlc3RXZWJLaXRBUEkvbWFjL0RyYWdBbmRE
cm9wU2ltdWxhdG9yTWFjLm1tOgorICAgICAgICAoLVtEcmFnQW5kRHJvcFNpbXVsYXRvciBjbGVh
ckV4dGVybmFsRHJhZ0luZm9ybWF0aW9uXSk6CisKIDIwMTgtMDgtMjcgIFdlbnNvbiBIc2llaCAg
PHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgW0F0dGFjaG1lbnQgU3VwcG9ydF0g
W1dLMl0gSW1hZ2VzIGNvcGllZCBmcm9tIE1haWwgbWVzc2FnZSB2aWV3IHBhc3RlIHdpdGggdGhl
IHdyb25nIGZpbGUgbmFtZSBpbiBjb21wb3NlCmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0
QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLQXR0YWNobWVudFRlc3RzLm1tIGIvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0F0dGFjaG1lbnRUZXN0cy5tbQppbmRleCAzZjFl
N2U2ODQyZTczNDEzNGI4ZTQwZWI2OGI0NzJkYjM4M2ViZjg1Li4yNjU4Y2ZjOGI5NmViODc5NDYy
MmMwZWZiZWE2YmVlMjFkODYzYmU2IDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL1Rl
c3RzL1dlYktpdENvY29hL1dLQXR0YWNobWVudFRlc3RzLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tBdHRhY2htZW50VGVzdHMubW0KQEAgLTE1NSw3ICsx
NTUsNyBAQCBzdGF0aWMgUmV0YWluUHRyPFRlc3RXS1dlYlZpZXc+IHdlYlZpZXdGb3JUZXN0aW5n
QXR0YWNobWVudHMoQ0dTaXplIHdlYlZpZXdTaXplLAogICAgIGNvbmZpZ3VyYXRpb24uX2F0dGFj
aG1lbnRFbGVtZW50RW5hYmxlZCA9IFlFUzsKICAgICBXS1ByZWZlcmVuY2VzU2V0Q3VzdG9tUGFz
dGVib2FyZERhdGFFbmFibGVkKChXS1ByZWZlcmVuY2VzUmVmKVtjb25maWd1cmF0aW9uIHByZWZl
cmVuY2VzXSwgWUVTKTsKIAotICAgIGF1dG8gd2ViVmlldyA9IGFkb3B0TlMoW1tUZXN0V0tXZWJW
aWV3IGFsbG9jXSBpbml0V2l0aEZyYW1lOkNHUmVjdE1ha2UoMCwgMCwgd2ViVmlld1NpemUud2lk
dGgsIHdlYlZpZXdTaXplLmhlaWdodCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uXSk7Cisg
ICAgYXV0byB3ZWJWaWV3ID0gYWRvcHROUyhbW1Rlc3RXS1dlYlZpZXcgYWxsb2NdIGluaXRXaXRo
RnJhbWU6Q0dSZWN0TWFrZSgwLCAwLCB3ZWJWaWV3U2l6ZS53aWR0aCwgd2ViVmlld1NpemUuaGVp
Z2h0KSBjb25maWd1cmF0aW9uOihfX2JyaWRnZSBXS1dlYlZpZXdDb25maWd1cmF0aW9uICopY29u
ZmlndXJhdGlvbl0pOwogICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzph
dHRhY2htZW50RWRpdGluZ1Rlc3RNYXJrdXBdOwogCiAgICAgcmV0dXJuIHdlYlZpZXc7CkBAIC0x
NjQsNyArMTY0LDcgQEAgc3RhdGljIFJldGFpblB0cjxUZXN0V0tXZWJWaWV3PiB3ZWJWaWV3Rm9y
VGVzdGluZ0F0dGFjaG1lbnRzKENHU2l6ZSB3ZWJWaWV3U2l6ZSwKIHN0YXRpYyBSZXRhaW5QdHI8
VGVzdFdLV2ViVmlldz4gd2ViVmlld0ZvclRlc3RpbmdBdHRhY2htZW50cyhDR1NpemUgd2ViVmll
d1NpemUpCiB7CiAgICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmlld0Nv
bmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKLSAgICByZXR1cm4gd2ViVmlld0ZvclRlc3RpbmdB
dHRhY2htZW50cyh3ZWJWaWV3U2l6ZSwgY29uZmlndXJhdGlvbi5nZXQoKSk7CisgICAgcmV0dXJu
IHdlYlZpZXdGb3JUZXN0aW5nQXR0YWNobWVudHMod2ViVmlld1NpemUsIChfX2JyaWRnZSBXS1dl
YlZpZXdDb25maWd1cmF0aW9uICopY29uZmlndXJhdGlvbi5nZXQoKSk7CiB9CiAKIHN0YXRpYyBS
ZXRhaW5QdHI8VGVzdFdLV2ViVmlldz4gd2ViVmlld0ZvclRlc3RpbmdBdHRhY2htZW50cygpCkBA
IC0yNzQsNyArMjc0LDcgQEAgc3RhdGljIE5TRGF0YSAqdGVzdFBERkRhdGEoKQogICAgIGF1dG8g
ZmlsZVdyYXBwZXIgPSBhZG9wdE5TKFtbTlNGaWxlV3JhcHBlciBhbGxvY10gaW5pdFJlZ3VsYXJG
aWxlV2l0aENvbnRlbnRzOmRhdGFdKTsKICAgICBpZiAoZmlsZW5hbWUpCiAgICAgICAgIFtmaWxl
V3JhcHBlciBzZXRQcmVmZXJyZWRGaWxlbmFtZTpmaWxlbmFtZV07Ci0gICAgUmV0YWluUHRyPF9X
S0F0dGFjaG1lbnQ+IGF0dGFjaG1lbnQgPSBbc2VsZiBfaW5zZXJ0QXR0YWNobWVudFdpdGhGaWxl
V3JhcHBlcjpmaWxlV3JhcHBlci5nZXQoKSBjb250ZW50VHlwZTpjb250ZW50VHlwZSBvcHRpb25z
Om5pbCBjb21wbGV0aW9uOl4oQk9PTCkgeworICAgIFJldGFpblB0cjxfV0tBdHRhY2htZW50PiBh
dHRhY2htZW50ID0gW3NlbGYgX2luc2VydEF0dGFjaG1lbnRXaXRoRmlsZVdyYXBwZXI6KF9fYnJp
ZGdlIE5TRmlsZVdyYXBwZXIgKilmaWxlV3JhcHBlci5nZXQoKSBjb250ZW50VHlwZTpjb250ZW50
VHlwZSBvcHRpb25zOm5pbCBjb21wbGV0aW9uOl4oQk9PTCkgewogICAgICAgICBkb25lID0gdHJ1
ZTsKICAgICB9XTsKICAgICBUZXN0V2ViS2l0QVBJOjpVdGlsOjpydW4oJmRvbmUpOwpAQCAtMzgy
LDcgKzM4Miw3IEBAIHN0YXRpYyBOU0RhdGEgKnRlc3RQREZEYXRhKCkKICAgICBpZiAobmV3Rmls
ZW5hbWUpCiAgICAgICAgIFtmaWxlV3JhcHBlciBzZXRQcmVmZXJyZWRGaWxlbmFtZTpuZXdGaWxl
bmFtZV07CiAKLSAgICBbc2VsZiBzZXRGaWxlV3JhcHBlcjpmaWxlV3JhcHBlci5nZXQoKSBjb250
ZW50VHlwZTpuZXdDb250ZW50VHlwZSBjb21wbGV0aW9uOl4oTlNFcnJvciAqZXJyb3IpIHsKKyAg
ICBbc2VsZiBzZXRGaWxlV3JhcHBlcjooX19icmlkZ2UgTlNGaWxlV3JhcHBlciAqKWZpbGVXcmFw
cGVyLmdldCgpIGNvbnRlbnRUeXBlOm5ld0NvbnRlbnRUeXBlIGNvbXBsZXRpb246XihOU0Vycm9y
ICplcnJvcikgewogICAgICAgICByZXN1bHRFcnJvciA9IGVycm9yOwogICAgICAgICBkb25lID0g
dHJ1ZTsKICAgICB9XTsKQEAgLTQwOCw2ICs0MDgsMzcgQEAgc3RhdGljIE5TRGF0YSAqdGVzdFBE
RkRhdGEoKQogCiBAZW5kCiAKK3N0YXRpYyB2b2lkIHJ1blRlc3RXaXRoVGVtcG9yYXJ5Rm9sZGVy
KHZvaWQoXnJ1blRlc3QpKE5TVVJMICpmb2xkZXJVUkwpKQoreworICAgIE5TRmlsZU1hbmFnZXIg
KmRlZmF1bHRNYW5hZ2VyID0gW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdOworICAgIGF1
dG8gdGVtcG9yYXJ5Rm9sZGVyID0gcmV0YWluUHRyKFtOU1VSTCBmaWxlVVJMV2l0aFBhdGg6W05T
VGVtcG9yYXJ5RGlyZWN0b3J5KCkgc3RyaW5nQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50OltOU1N0
cmluZyBzdHJpbmdXaXRoRm9ybWF0OkAiZm9sZGVyLSVAIiwgTlNVVUlELlVVSURdXSBpc0RpcmVj
dG9yeTpZRVNdKTsKKyAgICBbZGVmYXVsdE1hbmFnZXIgcmVtb3ZlSXRlbUF0VVJMOihfX2JyaWRn
ZSBOU1VSTCAqKXRlbXBvcmFyeUZvbGRlci5nZXQoKSBlcnJvcjpuaWxdOworICAgIFtkZWZhdWx0
TWFuYWdlciBjcmVhdGVEaXJlY3RvcnlBdFVSTDooX19icmlkZ2UgTlNVUkwgKil0ZW1wb3JhcnlG
b2xkZXIuZ2V0KCkgd2l0aEludGVybWVkaWF0ZURpcmVjdG9yaWVzOk5PIGF0dHJpYnV0ZXM6bmls
IGVycm9yOm5pbF07CisgICAgW3Rlc3RJbWFnZURhdGEoKSB3cml0ZVRvVVJMOlsoX19icmlkZ2Ug
TlNVUkwgKil0ZW1wb3JhcnlGb2xkZXIuZ2V0KCkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50
OkAiaW1hZ2UucG5nIiBpc0RpcmVjdG9yeTpOT10gYXRvbWljYWxseTpZRVNdOworICAgIFt0ZXN0
WklQRGF0YSgpIHdyaXRlVG9VUkw6WyhfX2JyaWRnZSBOU1VSTCAqKXRlbXBvcmFyeUZvbGRlci5n
ZXQoKSBVUkxCeUFwcGVuZGluZ1BhdGhDb21wb25lbnQ6QCJhcmNoaXZlLnppcCIgaXNEaXJlY3Rv
cnk6Tk9dIGF0b21pY2FsbHk6WUVTXTsKKyAgICBAdHJ5IHsKKyAgICAgICAgcnVuVGVzdCgoX19i
cmlkZ2UgTlNVUkwgKil0ZW1wb3JhcnlGb2xkZXIuZ2V0KCkpOworICAgIH0gQGZpbmFsbHkgewor
ICAgICAgICBbW05TRmlsZU1hbmFnZXIgZGVmYXVsdE1hbmFnZXJdIHJlbW92ZUl0ZW1BdFVSTDoo
X19icmlkZ2UgTlNVUkwgKil0ZW1wb3JhcnlGb2xkZXIuZ2V0KCkgZXJyb3I6bmlsXTsKKyAgICB9
Cit9CisKK3N0YXRpYyB2b2lkIHNpbXVsYXRlRm9sZGVyRHJhZ1dpdGhVUkwoRHJhZ0FuZERyb3BT
aW11bGF0b3IgKnNpbXVsYXRvciwgTlNVUkwgKmZvbGRlclVSTCkKK3sKKyNpZiBQTEFURk9STShN
QUMpCisgICAgW3NpbXVsYXRvciB3cml0ZVByb21pc2VkRmlsZXM6QFsgZm9sZGVyVVJMIF1dOwor
I2Vsc2UKKyAgICBhdXRvIGZvbGRlclByb3ZpZGVyID0gYWRvcHROUyhbW05TSXRlbVByb3ZpZGVy
IGFsbG9jXSBpbml0XSk7CisgICAgW2ZvbGRlclByb3ZpZGVyIHNldFN1Z2dlc3RlZE5hbWU6Zm9s
ZGVyVVJMLmxhc3RQYXRoQ29tcG9uZW50XTsKKyAgICBbZm9sZGVyUHJvdmlkZXIgc2V0UHJlZmVy
cmVkUHJlc2VudGF0aW9uU3R5bGU6VUlQcmVmZXJyZWRQcmVzZW50YXRpb25TdHlsZUF0dGFjaG1l
bnRdOworICAgIFtmb2xkZXJQcm92aWRlciByZWdpc3RlckZpbGVSZXByZXNlbnRhdGlvbkZvclR5
cGVJZGVudGlmaWVyOihfX2JyaWRnZSBOU1N0cmluZyAqKWtVVFR5cGVGb2xkZXIgZmlsZU9wdGlv
bnM6MCB2aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25WaXNpYmlsaXR5QWxs
IGxvYWRIYW5kbGVyOlsmXSAodm9pZCheY29tcGxldGlvbikoTlNVUkwgKiwgQk9PTCwgTlNFcnJv
ciAqKSkgLT4gTlNQcm9ncmVzcyAqIHsKKyAgICAgICAgY29tcGxldGlvbihmb2xkZXJVUkwsIE5P
LCBuaWwpOworICAgICAgICByZXR1cm4gbmlsOworICAgIH1dOworICAgIHNpbXVsYXRvci5leHRl
cm5hbEl0ZW1Qcm92aWRlcnMgPSBAWyAoX19icmlkZ2UgTlNJdGVtUHJvdmlkZXIgKilmb2xkZXJQ
cm92aWRlci5nZXQoKSBdOworI2VuZGlmCit9CisKICNwcmFnbWEgbWFyayAtIFBsYXRmb3JtIHRl
c3RpbmcgaGVscGVyIGZ1bmN0aW9ucwogCiAjaWYgUExBVEZPUk0oTUFDKQpAQCAtNDM1LDcgKzQ2
Niw3IEBAIHR5cGVkZWYgdm9pZCheSXRlbVByb3ZpZGVyRGF0YUxvYWRIYW5kbGVyKShOU0RhdGEg
KiwgTlNFcnJvciAqKTsKIC0gKHZvaWQpcmVnaXN0ZXJEYXRhOihOU0RhdGEgKilkYXRhIHR5cGU6
KE5TU3RyaW5nICopdHlwZQogewogICAgIFtzZWxmIHJlZ2lzdGVyRGF0YVJlcHJlc2VudGF0aW9u
Rm9yVHlwZUlkZW50aWZpZXI6dHlwZSB2aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50
YXRpb25WaXNpYmlsaXR5QWxsIGxvYWRIYW5kbGVyOltwcm90ZWN0ZWREYXRhID0gcmV0YWluUHRy
KGRhdGEpXSAoSXRlbVByb3ZpZGVyRGF0YUxvYWRIYW5kbGVyIGNvbXBsZXRpb25IYW5kbGVyKSAt
PiBOU1Byb2dyZXNzICogewotICAgICAgICBjb21wbGV0aW9uSGFuZGxlcihwcm90ZWN0ZWREYXRh
LmdldCgpLCBuaWwpOworICAgICAgICBjb21wbGV0aW9uSGFuZGxlcigoX19icmlkZ2UgTlNEYXRh
ICopcHJvdGVjdGVkRGF0YS5nZXQoKSwgbmlsKTsKICAgICAgICAgcmV0dXJuIG5pbDsKICAgICB9
XTsKIH0KQEAgLTQ2OCw0MyArNDk5LDQzIEBAIHR5cGVkZWYgdm9pZCheSXRlbVByb3ZpZGVyRGF0
YUxvYWRIYW5kbGVyKShOU0RhdGEgKiwgTlNFcnJvciAqKTsKIAogdm9pZCBwbGF0Zm9ybUNvcHlS
aWNoVGV4dFdpdGhNdWx0aXBsZUF0dGFjaG1lbnRzKCkKIHsKLSAgICBhdXRvIGltYWdlID0gYWRv
cHROUyhbW05TVGV4dEF0dGFjaG1lbnQgYWxsb2NdIGluaXRXaXRoRGF0YTp0ZXN0SW1hZ2VEYXRh
KCkgb2ZUeXBlOihOU1N0cmluZyAqKWtVVFR5cGVQTkddKTsKLSAgICBhdXRvIHBkZiA9IGFkb3B0
TlMoW1tOU1RleHRBdHRhY2htZW50IGFsbG9jXSBpbml0V2l0aERhdGE6dGVzdFBERkRhdGEoKSBv
ZlR5cGU6KE5TU3RyaW5nICopa1VUVHlwZVBERl0pOwotICAgIGF1dG8gemlwID0gYWRvcHROUyhb
W05TVGV4dEF0dGFjaG1lbnQgYWxsb2NdIGluaXRXaXRoRGF0YTp0ZXN0WklQRGF0YSgpIG9mVHlw
ZTooTlNTdHJpbmcgKilrVVRUeXBlWmlwQXJjaGl2ZV0pOworICAgIGF1dG8gaW1hZ2UgPSBhZG9w
dE5TKFtbTlNUZXh0QXR0YWNobWVudCBhbGxvY10gaW5pdFdpdGhEYXRhOnRlc3RJbWFnZURhdGEo
KSBvZlR5cGU6KF9fYnJpZGdlIE5TU3RyaW5nICopa1VUVHlwZVBOR10pOworICAgIGF1dG8gcGRm
ID0gYWRvcHROUyhbW05TVGV4dEF0dGFjaG1lbnQgYWxsb2NdIGluaXRXaXRoRGF0YTp0ZXN0UERG
RGF0YSgpIG9mVHlwZTooX19icmlkZ2UgTlNTdHJpbmcgKilrVVRUeXBlUERGXSk7CisgICAgYXV0
byB6aXAgPSBhZG9wdE5TKFtbTlNUZXh0QXR0YWNobWVudCBhbGxvY10gaW5pdFdpdGhEYXRhOnRl
c3RaSVBEYXRhKCkgb2ZUeXBlOihfX2JyaWRnZSBOU1N0cmluZyAqKWtVVFR5cGVaaXBBcmNoaXZl
XSk7CiAKICAgICBhdXRvIHJpY2hUZXh0ID0gYWRvcHROUyhbW05TTXV0YWJsZUF0dHJpYnV0ZWRT
dHJpbmcgYWxsb2NdIGluaXRdKTsKLSAgICBbcmljaFRleHQgYXBwZW5kQXR0cmlidXRlZFN0cmlu
ZzpbTlNBdHRyaWJ1dGVkU3RyaW5nIGF0dHJpYnV0ZWRTdHJpbmdXaXRoQXR0YWNobWVudDppbWFn
ZS5nZXQoKV1dOwotICAgIFtyaWNoVGV4dCBhcHBlbmRBdHRyaWJ1dGVkU3RyaW5nOltOU0F0dHJp
YnV0ZWRTdHJpbmcgYXR0cmlidXRlZFN0cmluZ1dpdGhBdHRhY2htZW50OnBkZi5nZXQoKV1dOwot
ICAgIFtyaWNoVGV4dCBhcHBlbmRBdHRyaWJ1dGVkU3RyaW5nOltOU0F0dHJpYnV0ZWRTdHJpbmcg
YXR0cmlidXRlZFN0cmluZ1dpdGhBdHRhY2htZW50OnppcC5nZXQoKV1dOworICAgIFtyaWNoVGV4
dCBhcHBlbmRBdHRyaWJ1dGVkU3RyaW5nOltOU0F0dHJpYnV0ZWRTdHJpbmcgYXR0cmlidXRlZFN0
cmluZ1dpdGhBdHRhY2htZW50OihfX2JyaWRnZSBOU1RleHRBdHRhY2htZW50ICopaW1hZ2UuZ2V0
KCldXTsKKyAgICBbcmljaFRleHQgYXBwZW5kQXR0cmlidXRlZFN0cmluZzpbTlNBdHRyaWJ1dGVk
U3RyaW5nIGF0dHJpYnV0ZWRTdHJpbmdXaXRoQXR0YWNobWVudDooX19icmlkZ2UgTlNUZXh0QXR0
YWNobWVudCAqKXBkZi5nZXQoKV1dOworICAgIFtyaWNoVGV4dCBhcHBlbmRBdHRyaWJ1dGVkU3Ry
aW5nOltOU0F0dHJpYnV0ZWRTdHJpbmcgYXR0cmlidXRlZFN0cmluZ1dpdGhBdHRhY2htZW50Oihf
X2JyaWRnZSBOU1RleHRBdHRhY2htZW50ICopemlwLmdldCgpXV07CiAKICNpZiBQTEFURk9STShN
QUMpCiAgICAgTlNQYXN0ZWJvYXJkICpwYXN0ZWJvYXJkID0gW05TUGFzdGVib2FyZCBnZW5lcmFs
UGFzdGVib2FyZF07CiAgICAgW3Bhc3RlYm9hcmQgY2xlYXJDb250ZW50c107Ci0gICAgW3Bhc3Rl
Ym9hcmQgd3JpdGVPYmplY3RzOkBbIHJpY2hUZXh0LmdldCgpIF1dOworICAgIFtwYXN0ZWJvYXJk
IHdyaXRlT2JqZWN0czpAWyAoX19icmlkZ2UgTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyAqKXJp
Y2hUZXh0LmdldCgpIF1dOwogI2VsaWYgUExBVEZPUk0oSU9TKQogICAgIGF1dG8gaXRlbSA9IGFk
b3B0TlMoW1tOU0l0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwotICAgIFtpdGVtIHJlZ2lzdGVy
T2JqZWN0OnJpY2hUZXh0LmdldCgpIHZpc2liaWxpdHk6TlNJdGVtUHJvdmlkZXJSZXByZXNlbnRh
dGlvblZpc2liaWxpdHlBbGxdOwotICAgIFtVSVBhc3RlYm9hcmQgZ2VuZXJhbFBhc3RlYm9hcmRd
Lml0ZW1Qcm92aWRlcnMgPSBAWyBpdGVtLmdldCgpIF07CisgICAgW2l0ZW0gcmVnaXN0ZXJPYmpl
Y3Q6KF9fYnJpZGdlIE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKilyaWNoVGV4dC5nZXQoKSB2
aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25WaXNpYmlsaXR5QWxsXTsKKyAg
ICBbVUlQYXN0ZWJvYXJkIGdlbmVyYWxQYXN0ZWJvYXJkXS5pdGVtUHJvdmlkZXJzID0gQFsgKF9f
YnJpZGdlIE5TSXRlbVByb3ZpZGVyICopaXRlbS5nZXQoKSBdOwogI2VuZGlmCiB9CiAKIHZvaWQg
cGxhdGZvcm1Db3B5UmljaFRleHRXaXRoSW1hZ2UoKQogewogICAgIGF1dG8gcmljaFRleHQgPSBh
ZG9wdE5TKFtbTlNNdXRhYmxlQXR0cmlidXRlZFN0cmluZyBhbGxvY10gaW5pdF0pOwotICAgIGF1
dG8gaW1hZ2UgPSBhZG9wdE5TKFtbTlNUZXh0QXR0YWNobWVudCBhbGxvY10gaW5pdFdpdGhEYXRh
OnRlc3RJbWFnZURhdGEoKSBvZlR5cGU6KE5TU3RyaW5nICopa1VUVHlwZVBOR10pOworICAgIGF1
dG8gaW1hZ2UgPSBhZG9wdE5TKFtbTlNUZXh0QXR0YWNobWVudCBhbGxvY10gaW5pdFdpdGhEYXRh
OnRlc3RJbWFnZURhdGEoKSBvZlR5cGU6KF9fYnJpZGdlIE5TU3RyaW5nICopa1VUVHlwZVBOR10p
OwogCiAgICAgW3JpY2hUZXh0IGFwcGVuZEF0dHJpYnV0ZWRTdHJpbmc6W1tbTlNBdHRyaWJ1dGVk
U3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpAIkxvcmVtIGlwc3VtICJdIGF1dG9yZWxlYXNl
XV07Ci0gICAgW3JpY2hUZXh0IGFwcGVuZEF0dHJpYnV0ZWRTdHJpbmc6W05TQXR0cmlidXRlZFN0
cmluZyBhdHRyaWJ1dGVkU3RyaW5nV2l0aEF0dGFjaG1lbnQ6aW1hZ2UuZ2V0KCldXTsKKyAgICBb
cmljaFRleHQgYXBwZW5kQXR0cmlidXRlZFN0cmluZzpbTlNBdHRyaWJ1dGVkU3RyaW5nIGF0dHJp
YnV0ZWRTdHJpbmdXaXRoQXR0YWNobWVudDooX19icmlkZ2UgTlNUZXh0QXR0YWNobWVudCAqKWlt
YWdlLmdldCgpXV07CiAgICAgW3JpY2hUZXh0IGFwcGVuZEF0dHJpYnV0ZWRTdHJpbmc6W1tbTlNB
dHRyaWJ1dGVkU3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpAIiBkb2xvciBzaXQgYW1ldC4i
XSBhdXRvcmVsZWFzZV1dOwogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIE5TUGFzdGVib2FyZCAq
cGFzdGVib2FyZCA9IFtOU1Bhc3RlYm9hcmQgZ2VuZXJhbFBhc3RlYm9hcmRdOwogICAgIFtwYXN0
ZWJvYXJkIGNsZWFyQ29udGVudHNdOwotICAgIFtwYXN0ZWJvYXJkIHdyaXRlT2JqZWN0czpAWyBy
aWNoVGV4dC5nZXQoKSBdXTsKKyAgICBbcGFzdGVib2FyZCB3cml0ZU9iamVjdHM6QFsgKF9fYnJp
ZGdlIE5TTXV0YWJsZUF0dHJpYnV0ZWRTdHJpbmcgKilyaWNoVGV4dC5nZXQoKSBdXTsKICNlbGlm
IFBMQVRGT1JNKElPUykKICAgICBhdXRvIGl0ZW0gPSBhZG9wdE5TKFtbTlNJdGVtUHJvdmlkZXIg
YWxsb2NdIGluaXRdKTsKLSAgICBbaXRlbSByZWdpc3Rlck9iamVjdDpyaWNoVGV4dC5nZXQoKSB2
aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25WaXNpYmlsaXR5QWxsXTsKLSAg
ICBbVUlQYXN0ZWJvYXJkIGdlbmVyYWxQYXN0ZWJvYXJkXS5pdGVtUHJvdmlkZXJzID0gQFsgaXRl
bS5nZXQoKSBdOworICAgIFtpdGVtIHJlZ2lzdGVyT2JqZWN0OihfX2JyaWRnZSBOU011dGFibGVB
dHRyaWJ1dGVkU3RyaW5nICopcmljaFRleHQuZ2V0KCkgdmlzaWJpbGl0eTpOU0l0ZW1Qcm92aWRl
clJlcHJlc2VudGF0aW9uVmlzaWJpbGl0eUFsbF07CisgICAgW1VJUGFzdGVib2FyZCBnZW5lcmFs
UGFzdGVib2FyZF0uaXRlbVByb3ZpZGVycyA9IEBbIChfX2JyaWRnZSBOU0l0ZW1Qcm92aWRlciAq
KWl0ZW0uZ2V0KCkgXTsKICNlbmRpZgogfQogCkBAIC01MTgsOCArNTQ5LDggQEAgdm9pZCBwbGF0
Zm9ybUNvcHlQTkcoKQogICAgIFVJUGFzdGVib2FyZCAqcGFzdGVib2FyZCA9IFtVSVBhc3RlYm9h
cmQgZ2VuZXJhbFBhc3RlYm9hcmRdOwogICAgIGF1dG8gaXRlbSA9IGFkb3B0TlMoW1tVSUl0ZW1Q
cm92aWRlciBhbGxvY10gaW5pdF0pOwogICAgIFtpdGVtIHNldFByZWZlcnJlZFByZXNlbnRhdGlv
blN0eWxlOlVJUHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGVBdHRhY2htZW50XTsKLSAgICBbaXRl
bSByZWdpc3RlckRhdGE6dGVzdEltYWdlRGF0YSgpIHR5cGU6KE5TU3RyaW5nICopa1VUVHlwZVBO
R107Ci0gICAgcGFzdGVib2FyZC5pdGVtUHJvdmlkZXJzID0gQFsgaXRlbS5nZXQoKSBdOworICAg
IFtpdGVtIHJlZ2lzdGVyRGF0YTp0ZXN0SW1hZ2VEYXRhKCkgdHlwZTooX19icmlkZ2UgTlNTdHJp
bmcgKilrVVRUeXBlUE5HXTsKKyAgICBwYXN0ZWJvYXJkLml0ZW1Qcm92aWRlcnMgPSBAWyAoX19i
cmlkZ2UgTlNJdGVtUHJvdmlkZXIgKilpdGVtLmdldCgpIF07CiAjZW5kaWYKIH0KIApAQCAtNTQ4
LDEzICs1NzksMTMgQEAgVEVTVChXS0F0dGFjaG1lbnRUZXN0cywgQXR0YWNobWVudEVsZW1lbnRJ
bnNlcnRpb24pCiAgICAgUmV0YWluUHRyPF9XS0F0dGFjaG1lbnQ+IGZpcnN0QXR0YWNobWVudDsK
ICAgICBSZXRhaW5QdHI8X1dLQXR0YWNobWVudD4gc2Vjb25kQXR0YWNobWVudDsKICAgICB7Ci0g
ICAgICAgIE9ic2VydmVBdHRhY2htZW50VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVyKHdlYlZpZXcu
Z2V0KCkpOworICAgICAgICBPYnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZl
cigoX19icmlkZ2UgVGVzdFdLV2ViVmlldyAqKXdlYlZpZXcuZ2V0KCkpOwogICAgICAgICAvLyBV
c2UgdGhlIGdpdmVuIGNvbnRlbnQgdHlwZSBmb3IgdGhlIGF0dGFjaG1lbnQgZWxlbWVudCdzIHR5
cGUuCiAgICAgICAgIGZpcnN0QXR0YWNobWVudCA9IFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlJbnNl
cnRBdHRhY2htZW50V2l0aEZpbGVuYW1lOkAiZm9vIiBjb250ZW50VHlwZTpAInRleHQvaHRtbCIg
ZGF0YTp0ZXN0SFRNTERhdGEoKV07CiAgICAgICAgIEVYUEVDVF9XS19TVFJFUShAImZvbyIsIFt3
ZWJWaWV3IHZhbHVlT2ZBdHRyaWJ1dGU6QCJ0aXRsZSIgZm9yUXVlcnlTZWxlY3RvcjpAImF0dGFj
aG1lbnQiXSk7CiAgICAgICAgIEVYUEVDVF9XS19TVFJFUShAInRleHQvaHRtbCIsIFt3ZWJWaWV3
IHZhbHVlT2ZBdHRyaWJ1dGU6QCJ0eXBlIiBmb3JRdWVyeVNlbGVjdG9yOkAiYXR0YWNobWVudCJd
KTsKICAgICAgICAgRVhQRUNUX1dLX1NUUkVRKEAiMzggYnl0ZXMiLCBbd2ViVmlldyB2YWx1ZU9m
QXR0cmlidXRlOkAic3VidGl0bGUiIGZvclF1ZXJ5U2VsZWN0b3I6QCJhdHRhY2htZW50Il0pOwot
ICAgICAgICBvYnNlcnZlci5leHBlY3RBdHRhY2htZW50VXBkYXRlcyhAWyBdLCBAWyBmaXJzdEF0
dGFjaG1lbnQuZ2V0KCkgXSk7CisgICAgICAgIG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRh
dGVzKEBbIF0sIEBbIChfX2JyaWRnZSBfV0tBdHRhY2htZW50ICopZmlyc3RBdHRhY2htZW50Lmdl
dCgpIF0pOwogICAgIH0KIAogICAgIF9XS0F0dGFjaG1lbnRJbmZvICppbmZvID0gW2ZpcnN0QXR0
YWNobWVudCBpbmZvXTsKQEAgLTU2NCwxNCArNTk1LDE0IEBAIFRFU1QoV0tBdHRhY2htZW50VGVz
dHMsIEF0dGFjaG1lbnRFbGVtZW50SW5zZXJ0aW9uKQogICAgIEVYUEVDVF9FUShpbmZvLmZpbGVQ
YXRoLmxlbmd0aCwgMFUpOwogCiAgICAgewotICAgICAgICBPYnNlcnZlQXR0YWNobWVudFVwZGF0
ZXNGb3JTY29wZSBzY29wZSh3ZWJWaWV3LmdldCgpKTsKKyAgICAgICAgT2JzZXJ2ZUF0dGFjaG1l
bnRVcGRhdGVzRm9yU2NvcGUgc2NvcGUoKF9fYnJpZGdlIFRlc3RXS1dlYlZpZXcgKil3ZWJWaWV3
LmdldCgpKTsKICAgICAgICAgLy8gU2luY2Ugbm8gY29udGVudCB0eXBlIGlzIGV4cGxpY2l0bHkg
c3BlY2lmaWVkLCBjb21wdXRlIGl0IGZyb20gdGhlIGZpbGUgZXh0ZW5zaW9uLgogICAgICAgICBb
d2ViVmlldyBfZXhlY3V0ZUVkaXRDb21tYW5kOkAiRGVsZXRlQmFja3dhcmQiIGFyZ3VtZW50Om5p
bCBjb21wbGV0aW9uOm5pbF07CiAgICAgICAgIHNlY29uZEF0dGFjaG1lbnQgPSBbd2ViVmlldyBz
eW5jaHJvbm91c2x5SW5zZXJ0QXR0YWNobWVudFdpdGhGaWxlbmFtZTpAImJhci5wbmciIGNvbnRl
bnRUeXBlOm5pbCBkYXRhOnRlc3RJbWFnZURhdGEoKV07CiAgICAgICAgIEVYUEVDVF9XS19TVFJF
UShAImJhci5wbmciLCBbd2ViVmlldyB2YWx1ZU9mQXR0cmlidXRlOkAidGl0bGUiIGZvclF1ZXJ5
U2VsZWN0b3I6QCJhdHRhY2htZW50Il0pOwogICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJpbWFn
ZS9wbmciLCBbd2ViVmlldyB2YWx1ZU9mQXR0cmlidXRlOkAidHlwZSIgZm9yUXVlcnlTZWxlY3Rv
cjpAImF0dGFjaG1lbnQiXSk7CiAgICAgICAgIEVYUEVDVF9XS19TVFJFUShAIjM3IEtCIiwgW3dl
YlZpZXcgdmFsdWVPZkF0dHJpYnV0ZTpAInN1YnRpdGxlIiBmb3JRdWVyeVNlbGVjdG9yOkAiYXR0
YWNobWVudCJdKTsKLSAgICAgICAgc2NvcGUuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFsgZmly
c3RBdHRhY2htZW50LmdldCgpIF0sIEBbIHNlY29uZEF0dGFjaG1lbnQuZ2V0KCkgXSk7CisgICAg
ICAgIHNjb3BlLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbIChfX2JyaWRnZSBfV0tBdHRhY2ht
ZW50ICopZmlyc3RBdHRhY2htZW50LmdldCgpIF0sIEBbIChfX2JyaWRnZSBfV0tBdHRhY2htZW50
ICopc2Vjb25kQXR0YWNobWVudC5nZXQoKSBdKTsKICAgICB9CiAKICAgICBbZmlyc3RBdHRhY2ht
ZW50IGV4cGVjdFJlcXVlc3RlZERhdGFUb0JlOnRlc3RIVE1MRGF0YSgpXTsKQEAgLTU4Niw5ICs2
MTcsOSBAQCBURVNUKFdLQXR0YWNobWVudFRlc3RzLCBBdHRhY2htZW50VXBkYXRlc1doZW5JbnNl
cnRpbmdBbmREZWxldGluZ05ld2xpbmUpCiAgICAgYXV0byB3ZWJWaWV3ID0gd2ViVmlld0ZvclRl
c3RpbmdBdHRhY2htZW50cygpOwogICAgIFJldGFpblB0cjxfV0tBdHRhY2htZW50PiBhdHRhY2ht
ZW50OwogICAgIHsKLSAgICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgb2Jz
ZXJ2ZXIod2ViVmlldy5nZXQoKSk7CisgICAgICAgIE9ic2VydmVBdHRhY2htZW50VXBkYXRlc0Zv
clNjb3BlIG9ic2VydmVyKChfX2JyaWRnZSBUZXN0V0tXZWJWaWV3ICopd2ViVmlldy5nZXQoKSk7
CiAgICAgICAgIGF0dGFjaG1lbnQgPSBbd2ViVmlldyBzeW5jaHJvbm91c2x5SW5zZXJ0QXR0YWNo
bWVudFdpdGhGaWxlbmFtZTpAImZvby50eHQiIGNvbnRlbnRUeXBlOkAidGV4dC9wbGFpbiIgZGF0
YTp0ZXN0SFRNTERhdGEoKV07Ci0gICAgICAgIG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRh
dGVzKEBbIF0sIEBbYXR0YWNobWVudC5nZXQoKV0pOworICAgICAgICBvYnNlcnZlci5leHBlY3RB
dHRhY2htZW50VXBkYXRlcyhAWyBdLCBAWyhfX2JyaWRnZSBfV0tBdHRhY2htZW50ICopYXR0YWNo
bWVudC5nZXQoKV0pOwogICAgIH0KICAgICBbd2ViVmlldyBleHBlY3RVcGRhdGVzQWZ0ZXJDb21t
YW5kOkAiSW5zZXJ0UGFyYWdyYXBoIiB3aXRoQXJndW1lbnQ6bmlsIGV4cGVjdGVkUmVtb3ZhbHM6
QFtdIGV4cGVjdGVkSW5zZXJ0aW9uczpAW11dOwogICAgIFt3ZWJWaWV3IGV4cGVjdFVwZGF0ZXNB
ZnRlckNvbW1hbmQ6QCJEZWxldGVCYWNrd2FyZCIgd2l0aEFyZ3VtZW50Om5pbCBleHBlY3RlZFJl
bW92YWxzOkBbXSBleHBlY3RlZEluc2VydGlvbnM6QFtdXTsKQEAgLTYwMyw3ICs2MzQsNyBAQCBU
RVNUKFdLQXR0YWNobWVudFRlc3RzLCBBdHRhY2htZW50VXBkYXRlc1doZW5JbnNlcnRpbmdBbmRE
ZWxldGluZ05ld2xpbmUpCiAgICAgRVhQRUNUX1RSVUUoW2luZm8ubmFtZSBpc0VxdWFsVG9TdHJp
bmc6QCJmb28udHh0Il0pOwogICAgIEVYUEVDVF9FUShpbmZvLmZpbGVQYXRoLmxlbmd0aCwgMFUp
OwogCi0gICAgW3dlYlZpZXcgZXhwZWN0VXBkYXRlc0FmdGVyQ29tbWFuZDpAIkRlbGV0ZUZvcndh
cmQiIHdpdGhBcmd1bWVudDpuaWwgZXhwZWN0ZWRSZW1vdmFsczpAW2F0dGFjaG1lbnQuZ2V0KCld
IGV4cGVjdGVkSW5zZXJ0aW9uczpAW11dOworICAgIFt3ZWJWaWV3IGV4cGVjdFVwZGF0ZXNBZnRl
ckNvbW1hbmQ6QCJEZWxldGVGb3J3YXJkIiB3aXRoQXJndW1lbnQ6bmlsIGV4cGVjdGVkUmVtb3Zh
bHM6QFsoX19icmlkZ2UgX1dLQXR0YWNobWVudCAqKWF0dGFjaG1lbnQuZ2V0KCldIGV4cGVjdGVk
SW5zZXJ0aW9uczpAW11dOwogICAgIFthdHRhY2htZW50IGV4cGVjdFJlcXVlc3RlZERhdGFUb0Jl
OnRlc3RIVE1MRGF0YSgpXTsKIH0KIApAQCAtNjEzLDI0ICs2NDQsMjQgQEAgVEVTVChXS0F0dGFj
aG1lbnRUZXN0cywgQXR0YWNobWVudFVwZGF0ZXNXaGVuVW5kb2luZ0FuZFJlZG9pbmcpCiAgICAg
UmV0YWluUHRyPE5TRGF0YT4gaHRtbERhdGEgPSB0ZXN0SFRNTERhdGEoKTsKICAgICBSZXRhaW5Q
dHI8X1dLQXR0YWNobWVudD4gYXR0YWNobWVudDsKICAgICB7Ci0gICAgICAgIE9ic2VydmVBdHRh
Y2htZW50VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVyKHdlYlZpZXcuZ2V0KCkpOworICAgICAgICBP
YnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcigoX19icmlkZ2UgVGVzdFdL
V2ViVmlldyAqKXdlYlZpZXcuZ2V0KCkpOwogICAgICAgICBhdHRhY2htZW50ID0gW3dlYlZpZXcg
c3luY2hyb25vdXNseUluc2VydEF0dGFjaG1lbnRXaXRoRmlsZW5hbWU6QCJmb28udHh0IiBjb250
ZW50VHlwZTpAInRleHQvcGxhaW4iIGRhdGE6dGVzdEhUTUxEYXRhKCldOwotICAgICAgICBvYnNl
cnZlci5leHBlY3RBdHRhY2htZW50VXBkYXRlcyhAWyBdLCBAW2F0dGFjaG1lbnQuZ2V0KCldKTsK
KyAgICAgICAgb2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFsgXSwgQFsoX19icmlk
Z2UgX1dLQXR0YWNobWVudCAqKWF0dGFjaG1lbnQuZ2V0KCldKTsKICAgICB9Ci0gICAgW3dlYlZp
ZXcgZXhwZWN0VXBkYXRlc0FmdGVyQ29tbWFuZDpAIlVuZG8iIHdpdGhBcmd1bWVudDpuaWwgZXhw
ZWN0ZWRSZW1vdmFsczpAW2F0dGFjaG1lbnQuZ2V0KCldIGV4cGVjdGVkSW5zZXJ0aW9uczpAW11d
OwotICAgIFthdHRhY2htZW50IGV4cGVjdFJlcXVlc3RlZERhdGFUb0JlOmh0bWxEYXRhLmdldCgp
XTsKKyAgICBbd2ViVmlldyBleHBlY3RVcGRhdGVzQWZ0ZXJDb21tYW5kOkAiVW5kbyIgd2l0aEFy
Z3VtZW50Om5pbCBleHBlY3RlZFJlbW92YWxzOkBbKF9fYnJpZGdlIF9XS0F0dGFjaG1lbnQgKilh
dHRhY2htZW50LmdldCgpXSBleHBlY3RlZEluc2VydGlvbnM6QFtdXTsKKyAgICBbYXR0YWNobWVu
dCBleHBlY3RSZXF1ZXN0ZWREYXRhVG9CZTooX19icmlkZ2UgTlNEYXRhICopaHRtbERhdGEuZ2V0
KCldOwogCi0gICAgW3dlYlZpZXcgZXhwZWN0VXBkYXRlc0FmdGVyQ29tbWFuZDpAIlJlZG8iIHdp
dGhBcmd1bWVudDpuaWwgZXhwZWN0ZWRSZW1vdmFsczpAW10gZXhwZWN0ZWRJbnNlcnRpb25zOkBb
YXR0YWNobWVudC5nZXQoKV1dOwotICAgIFthdHRhY2htZW50IGV4cGVjdFJlcXVlc3RlZERhdGFU
b0JlOmh0bWxEYXRhLmdldCgpXTsKKyAgICBbd2ViVmlldyBleHBlY3RVcGRhdGVzQWZ0ZXJDb21t
YW5kOkAiUmVkbyIgd2l0aEFyZ3VtZW50Om5pbCBleHBlY3RlZFJlbW92YWxzOkBbXSBleHBlY3Rl
ZEluc2VydGlvbnM6QFsoX19icmlkZ2UgX1dLQXR0YWNobWVudCAqKWF0dGFjaG1lbnQuZ2V0KCld
XTsKKyAgICBbYXR0YWNobWVudCBleHBlY3RSZXF1ZXN0ZWREYXRhVG9CZTooX19icmlkZ2UgTlNE
YXRhICopaHRtbERhdGEuZ2V0KCldOwogCi0gICAgW3dlYlZpZXcgZXhwZWN0VXBkYXRlc0FmdGVy
Q29tbWFuZDpAIkRlbGV0ZUJhY2t3YXJkIiB3aXRoQXJndW1lbnQ6bmlsIGV4cGVjdGVkUmVtb3Zh
bHM6QFthdHRhY2htZW50LmdldCgpXSBleHBlY3RlZEluc2VydGlvbnM6QFtdXTsKLSAgICBbYXR0
YWNobWVudCBleHBlY3RSZXF1ZXN0ZWREYXRhVG9CZTpodG1sRGF0YS5nZXQoKV07CisgICAgW3dl
YlZpZXcgZXhwZWN0VXBkYXRlc0FmdGVyQ29tbWFuZDpAIkRlbGV0ZUJhY2t3YXJkIiB3aXRoQXJn
dW1lbnQ6bmlsIGV4cGVjdGVkUmVtb3ZhbHM6QFsoX19icmlkZ2UgX1dLQXR0YWNobWVudCAqKWF0
dGFjaG1lbnQuZ2V0KCldIGV4cGVjdGVkSW5zZXJ0aW9uczpAW11dOworICAgIFthdHRhY2htZW50
IGV4cGVjdFJlcXVlc3RlZERhdGFUb0JlOihfX2JyaWRnZSBOU0RhdGEgKilodG1sRGF0YS5nZXQo
KV07CiAKLSAgICBbd2ViVmlldyBleHBlY3RVcGRhdGVzQWZ0ZXJDb21tYW5kOkAiVW5kbyIgd2l0
aEFyZ3VtZW50Om5pbCBleHBlY3RlZFJlbW92YWxzOkBbXSBleHBlY3RlZEluc2VydGlvbnM6QFth
dHRhY2htZW50LmdldCgpXV07Ci0gICAgW2F0dGFjaG1lbnQgZXhwZWN0UmVxdWVzdGVkRGF0YVRv
QmU6aHRtbERhdGEuZ2V0KCldOworICAgIFt3ZWJWaWV3IGV4cGVjdFVwZGF0ZXNBZnRlckNvbW1h
bmQ6QCJVbmRvIiB3aXRoQXJndW1lbnQ6bmlsIGV4cGVjdGVkUmVtb3ZhbHM6QFtdIGV4cGVjdGVk
SW5zZXJ0aW9uczpAWyhfX2JyaWRnZSBfV0tBdHRhY2htZW50ICopYXR0YWNobWVudC5nZXQoKV1d
OworICAgIFthdHRhY2htZW50IGV4cGVjdFJlcXVlc3RlZERhdGFUb0JlOihfX2JyaWRnZSBOU0Rh
dGEgKilodG1sRGF0YS5nZXQoKV07CiAKLSAgICBbd2ViVmlldyBleHBlY3RVcGRhdGVzQWZ0ZXJD
b21tYW5kOkAiUmVkbyIgd2l0aEFyZ3VtZW50Om5pbCBleHBlY3RlZFJlbW92YWxzOkBbYXR0YWNo
bWVudC5nZXQoKV0gZXhwZWN0ZWRJbnNlcnRpb25zOkBbXV07Ci0gICAgW2F0dGFjaG1lbnQgZXhw
ZWN0UmVxdWVzdGVkRGF0YVRvQmU6aHRtbERhdGEuZ2V0KCldOworICAgIFt3ZWJWaWV3IGV4cGVj
dFVwZGF0ZXNBZnRlckNvbW1hbmQ6QCJSZWRvIiB3aXRoQXJndW1lbnQ6bmlsIGV4cGVjdGVkUmVt
b3ZhbHM6QFsoX19icmlkZ2UgX1dLQXR0YWNobWVudCAqKWF0dGFjaG1lbnQuZ2V0KCldIGV4cGVj
dGVkSW5zZXJ0aW9uczpAW11dOworICAgIFthdHRhY2htZW50IGV4cGVjdFJlcXVlc3RlZERhdGFU
b0JlOihfX2JyaWRnZSBOU0RhdGEgKilodG1sRGF0YS5nZXQoKV07CiB9CiAKIFRFU1QoV0tBdHRh
Y2htZW50VGVzdHMsIEF0dGFjaG1lbnRVcGRhdGVzV2hlbkNoYW5naW5nRm9udFN0eWxlcykKQEAg
LTYzOSw5ICs2NzAsOSBAQCBURVNUKFdLQXR0YWNobWVudFRlc3RzLCBBdHRhY2htZW50VXBkYXRl
c1doZW5DaGFuZ2luZ0ZvbnRTdHlsZXMpCiAgICAgUmV0YWluUHRyPF9XS0F0dGFjaG1lbnQ+IGF0
dGFjaG1lbnQ7CiAgICAgW3dlYlZpZXcgX3N5bmNocm9ub3VzbHlFeGVjdXRlRWRpdENvbW1hbmQ6
QCJJbnNlcnRUZXh0IiBhcmd1bWVudDpAIkhlbGxvIl07CiAgICAgewotICAgICAgICBPYnNlcnZl
QXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcih3ZWJWaWV3LmdldCgpKTsKKyAgICAg
ICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2ZXIoKF9fYnJpZGdlIFRl
c3RXS1dlYlZpZXcgKil3ZWJWaWV3LmdldCgpKTsKICAgICAgICAgYXR0YWNobWVudCA9IFt3ZWJW
aWV3IHN5bmNocm9ub3VzbHlJbnNlcnRBdHRhY2htZW50V2l0aEZpbGVuYW1lOkAiZm9vLnR4dCIg
Y29udGVudFR5cGU6QCJ0ZXh0L3BsYWluIiBkYXRhOnRlc3RIVE1MRGF0YSgpXTsKLSAgICAgICAg
b2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFsgXSwgQFthdHRhY2htZW50LmdldCgp
XSk7CisgICAgICAgIG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbIF0sIEBbIChf
X2JyaWRnZSBfV0tBdHRhY2htZW50ICopYXR0YWNobWVudC5nZXQoKSBdKTsKICAgICB9CiAgICAg
W3dlYlZpZXcgZXhwZWN0VXBkYXRlc0FmdGVyQ29tbWFuZDpAIkluc2VydFRleHQiIHdpdGhBcmd1
bWVudDpAIldvcmxkIiBleHBlY3RlZFJlbW92YWxzOkBbXSBleHBlY3RlZEluc2VydGlvbnM6QFtd
XTsKICAgICBbd2ViVmlldyBfc3luY2hyb25vdXNseUV4ZWN1dGVFZGl0Q29tbWFuZDpAIlNlbGVj
dEFsbCIgYXJndW1lbnQ6bmlsXTsKQEAgLTY1NCw3ICs2ODUsNyBAQCBURVNUKFdLQXR0YWNobWVu
dFRlc3RzLCBBdHRhY2htZW50VXBkYXRlc1doZW5DaGFuZ2luZ0ZvbnRTdHlsZXMpCiAgICAgRVhQ
RUNUX0ZBTFNFKFt3ZWJWaWV3IGhhc0F0dHJpYnV0ZTpAIndlYmtpdGF0dGFjaG1lbnRpZCIgZm9y
UXVlcnlTZWxlY3RvcjpAImF0dGFjaG1lbnQiXSk7CiAKICAgICAvLyBJbnNlcnRpbmcgdGV4dCBz
aG91bGQgZGVsZXRlIHRoZSBjdXJyZW50IHNlbGVjdGlvbiwgcmVtb3ZpbmcgdGhlIGF0dGFjaG1l
bnQgaW4gdGhlIHByb2Nlc3MuCi0gICAgW3dlYlZpZXcgZXhwZWN0VXBkYXRlc0FmdGVyQ29tbWFu
ZDpAIkluc2VydFRleHQiIHdpdGhBcmd1bWVudDpAImZvbyIgZXhwZWN0ZWRSZW1vdmFsczpAW2F0
dGFjaG1lbnQuZ2V0KCldIGV4cGVjdGVkSW5zZXJ0aW9uczpAW11dOworICAgIFt3ZWJWaWV3IGV4
cGVjdFVwZGF0ZXNBZnRlckNvbW1hbmQ6QCJJbnNlcnRUZXh0IiB3aXRoQXJndW1lbnQ6QCJmb28i
IGV4cGVjdGVkUmVtb3ZhbHM6QFsoX19icmlkZ2UgX1dLQXR0YWNobWVudCAqKWF0dGFjaG1lbnQu
Z2V0KCldIGV4cGVjdGVkSW5zZXJ0aW9uczpAW11dOwogICAgIFthdHRhY2htZW50IGV4cGVjdFJl
cXVlc3RlZERhdGFUb0JlOnRlc3RIVE1MRGF0YSgpXTsKIH0KIApAQCAtNjYzLDkgKzY5NCw5IEBA
IFRFU1QoV0tBdHRhY2htZW50VGVzdHMsIEF0dGFjaG1lbnRVcGRhdGVzV2hlbkluc2VydGluZ0xp
c3RzKQogICAgIGF1dG8gd2ViVmlldyA9IHdlYlZpZXdGb3JUZXN0aW5nQXR0YWNobWVudHMoKTsK
ICAgICBSZXRhaW5QdHI8X1dLQXR0YWNobWVudD4gYXR0YWNobWVudDsKICAgICB7Ci0gICAgICAg
IE9ic2VydmVBdHRhY2htZW50VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVyKHdlYlZpZXcuZ2V0KCkp
OworICAgICAgICBPYnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcigoX19i
cmlkZ2UgVGVzdFdLV2ViVmlldyAqKXdlYlZpZXcuZ2V0KCkpOwogICAgICAgICBhdHRhY2htZW50
ID0gW3dlYlZpZXcgc3luY2hyb25vdXNseUluc2VydEF0dGFjaG1lbnRXaXRoRmlsZW5hbWU6QCJm
b28udHh0IiBjb250ZW50VHlwZTpAInRleHQvcGxhaW4iIGRhdGE6dGVzdEhUTUxEYXRhKCldOwot
ICAgICAgICBvYnNlcnZlci5leHBlY3RBdHRhY2htZW50VXBkYXRlcyhAWyBdLCBAW2F0dGFjaG1l
bnQuZ2V0KCldKTsKKyAgICAgICAgb2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFsg
XSwgQFsgKF9fYnJpZGdlIF9XS0F0dGFjaG1lbnQgKilhdHRhY2htZW50LmdldCgpIF0pOwogICAg
IH0KICAgICBbd2ViVmlldyBleHBlY3RVcGRhdGVzQWZ0ZXJDb21tYW5kOkAiSW5zZXJ0T3JkZXJl
ZExpc3QiIHdpdGhBcmd1bWVudDpuaWwgZXhwZWN0ZWRSZW1vdmFsczpAW10gZXhwZWN0ZWRJbnNl
cnRpb25zOkBbXV07CiAgICAgLy8gVGhpcyBlZGl0IGNvbW1hbmQgYmVoYXZlcyBtb3JlIGxpa2Ug
YSAidG9nZ2xlIiwgYW5kIHdpbGwgYWN0dWFsbHkgYnJlYWsgdXMgb3V0IG9mIHRoZSBsaXN0IHdl
IGp1c3QgaW5zZXJ0ZWQuCkBAIC02ODMsMTAgKzcxNCwxMCBAQCBURVNUKFdLQXR0YWNobWVudFRl
c3RzLCBBdHRhY2htZW50VXBkYXRlc1doZW5JbnNlcnRpbmdSaWNoTWFya3VwKQogICAgIGF1dG8g
d2ViVmlldyA9IHdlYlZpZXdGb3JUZXN0aW5nQXR0YWNobWVudHMoKTsKICAgICBSZXRhaW5QdHI8
X1dLQXR0YWNobWVudD4gYXR0YWNobWVudDsKICAgICB7Ci0gICAgICAgIE9ic2VydmVBdHRhY2ht
ZW50VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVyKHdlYlZpZXcuZ2V0KCkpOworICAgICAgICBPYnNl
cnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcigoX19icmlkZ2UgVGVzdFdLV2Vi
VmlldyAqKXdlYlZpZXcuZ2V0KCkpOwogICAgICAgICBbd2ViVmlldyBfc3luY2hyb25vdXNseUV4
ZWN1dGVFZGl0Q29tbWFuZDpAIkluc2VydEhUTUwiIGFyZ3VtZW50OkAiPGRpdj48c3Ryb25nPjxh
dHRhY2htZW50IHNyYz0nY2lkOjEyMy00NTY3JyB0aXRsZT0nYSc+PC9hdHRhY2htZW50Pjwvc3Ry
b25nPjwvZGl2PiJdOwogICAgICAgICBhdHRhY2htZW50ID0gb2JzZXJ2ZXIub2JzZXJ2ZXIoKS5p
bnNlcnRlZFswXTsKLSAgICAgICAgb2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFsg
XSwgQFthdHRhY2htZW50LmdldCgpXSk7CisgICAgICAgIG9ic2VydmVyLmV4cGVjdEF0dGFjaG1l
bnRVcGRhdGVzKEBbIF0sIEBbIChfX2JyaWRnZSBfV0tBdHRhY2htZW50ICopYXR0YWNobWVudC5n
ZXQoKSBdKTsKICAgICAgICAgb2JzZXJ2ZXIuZXhwZWN0U291cmNlRm9ySWRlbnRpZmllcihAImNp
ZDoxMjMtNDU2NyIsIFthdHRhY2htZW50IHVuaXF1ZUlkZW50aWZpZXJdKTsKICAgICB9CiAgICAg
RVhQRUNUX0ZBTFNFKFt3ZWJWaWV3IGhhc0F0dHJpYnV0ZTpAIndlYmtpdGF0dGFjaG1lbnRibG9i
dXJsIiBmb3JRdWVyeVNlbGVjdG9yOkAiYXR0YWNobWVudCJdKTsKQEAgLTY5NCwxMCArNzI1LDEw
IEBAIFRFU1QoV0tBdHRhY2htZW50VGVzdHMsIEF0dGFjaG1lbnRVcGRhdGVzV2hlbkluc2VydGlu
Z1JpY2hNYXJrdXApCiAgICAgRVhQRUNUX0ZBTFNFKFt3ZWJWaWV3IGhhc0F0dHJpYnV0ZTpAIndl
YmtpdGF0dGFjaG1lbnRpZCIgZm9yUXVlcnlTZWxlY3RvcjpAImF0dGFjaG1lbnQiXSk7CiAgICAg
RVhQRUNUX1dLX1NUUkVRKFthdHRhY2htZW50IHVuaXF1ZUlkZW50aWZpZXJdLCBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYXR0
YWNobWVudCcpLnVuaXF1ZUlkZW50aWZpZXIiXSk7CiAgICAgewotICAgICAgICBPYnNlcnZlQXR0
YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcih3ZWJWaWV3LmdldCgpKTsKKyAgICAgICAg
T2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2ZXIoKF9fYnJpZGdlIFRlc3RX
S1dlYlZpZXcgKil3ZWJWaWV3LmdldCgpKTsKICAgICAgICAgW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2F0dGFjaG1lbnQnKS5y
ZW1vdmUoKSJdOwogICAgICAgICBbd2ViVmlldyB3YWl0Rm9yTmV4dFByZXNlbnRhdGlvblVwZGF0
ZV07Ci0gICAgICAgIG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbYXR0YWNobWVu
dC5nZXQoKV0sIEBbIF0pOworICAgICAgICBvYnNlcnZlci5leHBlY3RBdHRhY2htZW50VXBkYXRl
cyhAWyAoX19icmlkZ2UgX1dLQXR0YWNobWVudCAqKWF0dGFjaG1lbnQuZ2V0KCkgXSwgQFsgXSk7
CiAgICAgfQogICAgIFthdHRhY2htZW50IGV4cGVjdFJlcXVlc3RlZERhdGFUb0JlOm5pbF07CiB9
CkBAIC03MDcsMjMgKzczOCwyMyBAQCBURVNUKFdLQXR0YWNobWVudFRlc3RzLCBBdHRhY2htZW50
VXBkYXRlc1doZW5DdXR0aW5nQW5kUGFzdGluZykKICAgICBhdXRvIHdlYlZpZXcgPSB3ZWJWaWV3
Rm9yVGVzdGluZ0F0dGFjaG1lbnRzKCk7CiAgICAgUmV0YWluUHRyPF9XS0F0dGFjaG1lbnQ+IGF0
dGFjaG1lbnQ7CiAgICAgewotICAgICAgICBPYnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29w
ZSBvYnNlcnZlcih3ZWJWaWV3LmdldCgpKTsKKyAgICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRh
dGVzRm9yU2NvcGUgb2JzZXJ2ZXIoKF9fYnJpZGdlIFRlc3RXS1dlYlZpZXcgKil3ZWJWaWV3Lmdl
dCgpKTsKICAgICAgICAgYXR0YWNobWVudCA9IFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlJbnNlcnRB
dHRhY2htZW50V2l0aEZpbGVuYW1lOkAiZm9vLnR4dCIgY29udGVudFR5cGU6QCJ0ZXh0L3BsYWlu
IiBkYXRhOnRlc3RIVE1MRGF0YSgpXTsKLSAgICAgICAgb2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVu
dFVwZGF0ZXMoQFtdLCBAW2F0dGFjaG1lbnQuZ2V0KCldKTsKKyAgICAgICAgb2JzZXJ2ZXIuZXhw
ZWN0QXR0YWNobWVudFVwZGF0ZXMoQFsgXSwgQFsgKF9fYnJpZGdlIF9XS0F0dGFjaG1lbnQgKilh
dHRhY2htZW50LmdldCgpIF0pOwogICAgIH0KICAgICBbYXR0YWNobWVudCBleHBlY3RSZXF1ZXN0
ZWREYXRhVG9CZTp0ZXN0SFRNTERhdGEoKV07CiAgICAgRVhQRUNUX1dLX1NUUkVRKFthdHRhY2ht
ZW50IHVuaXF1ZUlkZW50aWZpZXJdLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYXR0YWNobWVudCcpLnVuaXF1ZUlkZW50aWZp
ZXIiXSk7CiAgICAgW3dlYlZpZXcgX3N5bmNocm9ub3VzbHlFeGVjdXRlRWRpdENvbW1hbmQ6QCJT
ZWxlY3RBbGwiIGFyZ3VtZW50Om5pbF07CiAgICAgewotICAgICAgICBPYnNlcnZlQXR0YWNobWVu
dFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcih3ZWJWaWV3LmdldCgpKTsKKyAgICAgICAgT2JzZXJ2
ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2ZXIoKF9fYnJpZGdlIFRlc3RXS1dlYlZp
ZXcgKil3ZWJWaWV3LmdldCgpKTsKICAgICAgICAgW3dlYlZpZXcgX3N5bmNocm9ub3VzbHlFeGVj
dXRlRWRpdENvbW1hbmQ6QCJDdXQiIGFyZ3VtZW50Om5pbF07Ci0gICAgICAgIG9ic2VydmVyLmV4
cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbYXR0YWNobWVudC5nZXQoKV0sIEBbXSk7CisgICAgICAg
IG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbIChfX2JyaWRnZSBfV0tBdHRhY2ht
ZW50ICopYXR0YWNobWVudC5nZXQoKSBdLCBAW10pOwogICAgIH0KICAgICBbYXR0YWNobWVudCBl
eHBlY3RSZXF1ZXN0ZWREYXRhVG9CZTp0ZXN0SFRNTERhdGEoKV07CiAgICAgewotICAgICAgICBP
YnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcih3ZWJWaWV3LmdldCgpKTsK
KyAgICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2ZXIoKF9fYnJp
ZGdlIFRlc3RXS1dlYlZpZXcgKil3ZWJWaWV3LmdldCgpKTsKICAgICAgICAgW3dlYlZpZXcgX3N5
bmNocm9ub3VzbHlFeGVjdXRlRWRpdENvbW1hbmQ6QCJQYXN0ZSIgYXJndW1lbnQ6bmlsXTsKLSAg
ICAgICAgb2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFtdLCBAW2F0dGFjaG1lbnQu
Z2V0KCldKTsKKyAgICAgICAgb2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFsgXSwg
QFsgKF9fYnJpZGdlIF9XS0F0dGFjaG1lbnQgKilhdHRhY2htZW50LmdldCgpIF0pOwogICAgIH0K
ICAgICBbYXR0YWNobWVudCBleHBlY3RSZXF1ZXN0ZWREYXRhVG9CZTp0ZXN0SFRNTERhdGEoKV07
CiAgICAgRVhQRUNUX0ZBTFNFKFt3ZWJWaWV3IGhhc0F0dHJpYnV0ZTpAIndlYmtpdGF0dGFjaG1l
bnRibG9idXJsIiBmb3JRdWVyeVNlbGVjdG9yOkAiYXR0YWNobWVudCJdKTsKQEAgLTczNiw2MyAr
NzY3LDE0MyBAQCBURVNUKFdLQXR0YWNobWVudFRlc3RzLCBBdHRhY2htZW50RGF0YUZvckVtcHR5
RmlsZSkKICAgICBhdXRvIHdlYlZpZXcgPSB3ZWJWaWV3Rm9yVGVzdGluZ0F0dGFjaG1lbnRzKCk7
CiAgICAgUmV0YWluUHRyPF9XS0F0dGFjaG1lbnQ+IGF0dGFjaG1lbnQ7CiAgICAgewotICAgICAg
ICBPYnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcih3ZWJWaWV3LmdldCgp
KTsKKyAgICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2ZXIoKF9f
YnJpZGdlIFRlc3RXS1dlYlZpZXcgKil3ZWJWaWV3LmdldCgpKTsKICAgICAgICAgYXR0YWNobWVu
dCA9IFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlJbnNlcnRBdHRhY2htZW50V2l0aEZpbGVuYW1lOkAi
ZW1wdHkudHh0IiBjb250ZW50VHlwZTpAInRleHQvcGxhaW4iIGRhdGE6W05TRGF0YSBkYXRhXV07
Ci0gICAgICAgIG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbXSwgQFthdHRhY2ht
ZW50LmdldCgpXSk7CisgICAgICAgIG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBb
IF0sIEBbIChfX2JyaWRnZSBfV0tBdHRhY2htZW50ICopYXR0YWNobWVudC5nZXQoKSBdKTsKICAg
ICB9CiAgICAgW2F0dGFjaG1lbnQgZXhwZWN0UmVxdWVzdGVkRGF0YVRvQmU6W05TRGF0YSBkYXRh
XV07CiAgICAgRVhQRUNUX1dLX1NUUkVRKFthdHRhY2htZW50IHVuaXF1ZUlkZW50aWZpZXJdLCBb
d2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxl
Y3RvcignYXR0YWNobWVudCcpLnVuaXF1ZUlkZW50aWZpZXIiXSk7CiAgICAgewotICAgICAgICBP
YnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBzY29wZSh3ZWJWaWV3LmdldCgpKTsKKyAg
ICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgc2NvcGUoKF9fYnJpZGdlIFRl
c3RXS1dlYlZpZXcgKil3ZWJWaWV3LmdldCgpKTsKICAgICAgICAgW3dlYlZpZXcgX3N5bmNocm9u
b3VzbHlFeGVjdXRlRWRpdENvbW1hbmQ6QCJEZWxldGVCYWNrd2FyZCIgYXJndW1lbnQ6bmlsXTsK
LSAgICAgICAgc2NvcGUuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFthdHRhY2htZW50LmdldCgp
XSwgQFtdKTsKKyAgICAgICAgc2NvcGUuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFsgKF9fYnJp
ZGdlIF9XS0F0dGFjaG1lbnQgKilhdHRhY2htZW50LmdldCgpIF0sIEBbIF0pOwogICAgIH0KICAg
ICBbYXR0YWNobWVudCBleHBlY3RSZXF1ZXN0ZWREYXRhVG9CZTpbTlNEYXRhIGRhdGFdXTsKIH0K
IAorVEVTVChXS0F0dGFjaG1lbnRUZXN0cywgRHJvcEZvbGRlckFzQXR0YWNobWVudEFuZE1vdmVC
eURyYWdnaW5nKQoreworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZp
ZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgW2NvbmZpZ3VyYXRpb24gX3NldEF0
dGFjaG1lbnRFbGVtZW50RW5hYmxlZDpZRVNdOworCisgICAgYXV0byBzaW11bGF0b3IgPSBhZG9w
dE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlld0ZyYW1lOk5T
TWFrZVJlY3QoMCwgMCwgNDAwLCA0MDApIGNvbmZpZ3VyYXRpb246KF9fYnJpZGdlIFdLV2ViVmll
d0NvbmZpZ3VyYXRpb24gKiljb25maWd1cmF0aW9uLmdldCgpXSk7CisgICAgW1tzaW11bGF0b3Ig
d2ViVmlld10gc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOmF0dGFjaG1lbnRFZGl0aW5nVGVz
dE1hcmt1cF07CisKKyAgICBydW5UZXN0V2l0aFRlbXBvcmFyeUZvbGRlcihbc2ltdWxhdG9yXSAo
TlNVUkwgKmZvbGRlclVSTCkgeworICAgICAgICBzaW11bGF0ZUZvbGRlckRyYWdXaXRoVVJMKChf
X2JyaWRnZSBEcmFnQW5kRHJvcFNpbXVsYXRvciAqKXNpbXVsYXRvci5nZXQoKSwgZm9sZGVyVVJM
KTsKKyAgICAgICAgW3NpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRNYWtlKDAsIDApIHRvOkNHUG9p
bnRNYWtlKDUwLCA1MCldOworCisgICAgICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcgPSBbc2lt
dWxhdG9yIHdlYlZpZXddOworICAgICAgICBhdXRvIGF0dGFjaG1lbnQgPSByZXRhaW5QdHIoW3Np
bXVsYXRvciBpbnNlcnRlZEF0dGFjaG1lbnRzXS5maXJzdE9iamVjdCk7CisgICAgICAgIEVYUEVD
VF9XS19TVFJFUShbYXR0YWNobWVudCB1bmlxdWVJZGVudGlmaWVyXSwgW3dlYlZpZXcgc3RyaW5n
QnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2F0dGFjaG1l
bnQnKS51bmlxdWVJZGVudGlmaWVyIl0pOworICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoKF9fYnJp
ZGdlIE5TU3RyaW5nICopa1VUVHlwZURpcmVjdG9yeSwgW3dlYlZpZXcgdmFsdWVPZkF0dHJpYnV0
ZTpAInR5cGUiIGZvclF1ZXJ5U2VsZWN0b3I6QCJhdHRhY2htZW50Il0pOworICAgICAgICBFWFBF
Q1RfV0tfU1RSRVEoZm9sZGVyVVJMLmxhc3RQYXRoQ29tcG9uZW50LCBbd2ViVmlldyB2YWx1ZU9m
QXR0cmlidXRlOkAidGl0bGUiIGZvclF1ZXJ5U2VsZWN0b3I6QCJhdHRhY2htZW50Il0pOworCisg
ICAgICAgIE5TRmlsZVdyYXBwZXIgKmltYWdlID0gW2F0dGFjaG1lbnQgaW5mb10uZmlsZVdyYXBw
ZXIuZmlsZVdyYXBwZXJzW0AiaW1hZ2UucG5nIl07CisgICAgICAgIE5TRmlsZVdyYXBwZXIgKmFy
Y2hpdmUgPSBbYXR0YWNobWVudCBpbmZvXS5maWxlV3JhcHBlci5maWxlV3JhcHBlcnNbQCJhcmNo
aXZlLnppcCJdOworICAgICAgICBFWFBFQ1RfVFJVRShbaW1hZ2UucmVndWxhckZpbGVDb250ZW50
cyBpc0VxdWFsVG9EYXRhOnRlc3RJbWFnZURhdGEoKV0pOworICAgICAgICBFWFBFQ1RfVFJVRShb
YXJjaGl2ZS5yZWd1bGFyRmlsZUNvbnRlbnRzIGlzRXF1YWxUb0RhdGE6dGVzdFpJUERhdGEoKV0p
OworCisgICAgICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAImdldFNlbGVjdGlvbigp
LmNvbGxhcHNlVG9FbmQoKSIgY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKKyAgICAgICAgW3dlYlZp
ZXcgX2V4ZWN1dGVFZGl0Q29tbWFuZDpAIkluc2VydFBhcmFncmFwaCIgYXJndW1lbnQ6bmlsIGNv
bXBsZXRpb246bmlsXTsKKyAgICAgICAgW3dlYlZpZXcgX2V4ZWN1dGVFZGl0Q29tbWFuZDpAIklu
c2VydEhUTUwiIGFyZ3VtZW50OkAiPGVtPmZvbzwvZW0+IiBjb21wbGV0aW9uOm5pbF07CisgICAg
ICAgIFt3ZWJWaWV3IF9leGVjdXRlRWRpdENvbW1hbmQ6QCJJbnNlcnRQYXJhZ3JhcGgiIGFyZ3Vt
ZW50Om5pbCBjb21wbGV0aW9uOm5pbF07CisKKyAgICAgICAgW3dlYlZpZXcgZXhwZWN0RWxlbWVu
dFRhZzpAIkFUVEFDSE1FTlQiIHRvQ29tZUJlZm9yZTpAIkVNIl07CisgICAgICAgIFtzaW11bGF0
b3IgY2xlYXJFeHRlcm5hbERyYWdJbmZvcm1hdGlvbl07CisgICAgICAgIFtzaW11bGF0b3IgcnVu
RnJvbTp3ZWJWaWV3LmF0dGFjaG1lbnRFbGVtZW50TWlkUG9pbnQgdG86Q0dQb2ludE1ha2UoMzAw
LCAzMDApXTsKKyAgICAgICAgW3dlYlZpZXcgZXhwZWN0RWxlbWVudFRhZzpAIkVNIiB0b0NvbWVC
ZWZvcmU6QCJBVFRBQ0hNRU5UIl07CisgICAgfSk7Cit9CisKK1RFU1QoV0tBdHRhY2htZW50VGVz
dHMsIEluc2VydEZvbGRlckFuZEZpbGVXaXRoVW5rbm93bkV4dGVuc2lvbikKK3sKKyAgICBhdXRv
IHdlYlZpZXcgPSB3ZWJWaWV3Rm9yVGVzdGluZ0F0dGFjaG1lbnRzKCk7CisgICAgYXV0byBmaWxl
ID0gYWRvcHROUyhbW05TRmlsZVdyYXBwZXIgYWxsb2NdIGluaXRSZWd1bGFyRmlsZVdpdGhDb250
ZW50czp0ZXN0SFRNTERhdGEoKV0pOworICAgIFtmaWxlIHNldFByZWZlcnJlZEZpbGVuYW1lOkAi
dGVzdC5mb29iYXIiXTsKKyAgICBhdXRvIGltYWdlID0gYWRvcHROUyhbW05TRmlsZVdyYXBwZXIg
YWxsb2NdIGluaXRSZWd1bGFyRmlsZVdpdGhDb250ZW50czp0ZXN0SW1hZ2VEYXRhKCldKTsKKyAg
ICBhdXRvIGRvY3VtZW50ID0gYWRvcHROUyhbW05TRmlsZVdyYXBwZXIgYWxsb2NdIGluaXRSZWd1
bGFyRmlsZVdpdGhDb250ZW50czp0ZXN0UERGRGF0YSgpXSk7CisgICAgYXV0byBmb2xkZXIgPSBh
ZG9wdE5TKFtbTlNGaWxlV3JhcHBlciBhbGxvY10gaW5pdERpcmVjdG9yeVdpdGhGaWxlV3JhcHBl
cnM6QHsgQCJpbWFnZS5wbmciOiAoX19icmlkZ2UgTlNGaWxlV3JhcHBlciAqKWltYWdlLmdldCgp
LCBAImRvY3VtZW50LnBkZiI6IChfX2JyaWRnZSBOU0ZpbGVXcmFwcGVyICopZG9jdW1lbnQuZ2V0
KCkgfV0pOworICAgIFtmb2xkZXIgc2V0UHJlZmVycmVkRmlsZW5hbWU6QCJmb2xkZXIiXTsKKwor
ICAgIFJldGFpblB0cjxfV0tBdHRhY2htZW50PiBmaXJzdEF0dGFjaG1lbnQ7CisgICAgUmV0YWlu
UHRyPF9XS0F0dGFjaG1lbnQ+IHNlY29uZEF0dGFjaG1lbnQ7CisgICAgeworICAgICAgICBPYnNl
cnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcigoX19icmlkZ2UgVGVzdFdLV2Vi
VmlldyAqKXdlYlZpZXcuZ2V0KCkpOworICAgICAgICBmaXJzdEF0dGFjaG1lbnQgPSBbd2ViVmll
dyBzeW5jaHJvbm91c2x5SW5zZXJ0QXR0YWNobWVudFdpdGhGaWxlV3JhcHBlcjooX19icmlkZ2Ug
TlNGaWxlV3JhcHBlciAqKWZpbGUuZ2V0KCkgY29udGVudFR5cGU6bmlsXTsKKyAgICAgICAgb2Jz
ZXJ2ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFsgXSwgQFsgKF9fYnJpZGdlIF9XS0F0dGFj
aG1lbnQgKilmaXJzdEF0dGFjaG1lbnQuZ2V0KCkgXSk7CisgICAgfQorICAgIHsKKyAgICAgICAg
T2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2ZXIoKF9fYnJpZGdlIFRlc3RX
S1dlYlZpZXcgKil3ZWJWaWV3LmdldCgpKTsKKyAgICAgICAgc2Vjb25kQXR0YWNobWVudCA9IFt3
ZWJWaWV3IHN5bmNocm9ub3VzbHlJbnNlcnRBdHRhY2htZW50V2l0aEZpbGVXcmFwcGVyOihfX2Jy
aWRnZSBOU0ZpbGVXcmFwcGVyICopZm9sZGVyLmdldCgpIGNvbnRlbnRUeXBlOm5pbF07CisgICAg
ICAgIG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbIF0sIEBbIChfX2JyaWRnZSBf
V0tBdHRhY2htZW50ICopc2Vjb25kQXR0YWNobWVudC5nZXQoKSBdKTsKKyAgICB9CisKKyAgICBh
dXRvIGNoZWNrQXR0YWNobWVudENvbnNpc3RlbmN5ID0gW3dlYlZpZXcsIGZpbGUsIGZvbGRlcl0g
KF9XS0F0dGFjaG1lbnQgKmV4cGVjdGVkRmlsZUF0dGFjaG1lbnQsIF9XS0F0dGFjaG1lbnQgKmV4
cGVjdGVkRm9sZGVyQXR0YWNobWVudCkgeworICAgICAgICBbd2ViVmlldyBleHBlY3RFbGVtZW50
Q291bnQ6MiB0YWdOYW1lOkAiQVRUQUNITUVOVCJdOworICAgICAgICBFWFBFQ1RfVFJVRShVVFR5
cGVDb25mb3Jtc1RvKChfX2JyaWRnZSBDRlN0cmluZ1JlZilbd2ViVmlldyB2YWx1ZU9mQXR0cmli
dXRlOkAidHlwZSIgZm9yUXVlcnlTZWxlY3RvcjpAImF0dGFjaG1lbnRbdGl0bGU9Zm9sZGVyXSJd
LCBrVVRUeXBlRGlyZWN0b3J5KSk7CisgICAgICAgIEVYUEVDVF9UUlVFKFVUVHlwZUNvbmZvcm1z
VG8oKF9fYnJpZGdlIENGU3RyaW5nUmVmKVt3ZWJWaWV3IHZhbHVlT2ZBdHRyaWJ1dGU6QCJ0eXBl
IiBmb3JRdWVyeVNlbGVjdG9yOkAiYXR0YWNobWVudFt0aXRsZV49dGVzdF0iXSwga1VUVHlwZURh
dGEpKTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKGV4cGVjdGVkRmlsZUF0dGFjaG1lbnQudW5p
cXVlSWRlbnRpZmllciwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlwdDpAImRv
Y3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2F0dGFjaG1lbnRbdGl0bGVePXRlc3RdJykudW5pcXVlSWRl
bnRpZmllciJdKTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKGV4cGVjdGVkRm9sZGVyQXR0YWNo
bWVudC51bmlxdWVJZGVudGlmaWVyLCBbd2ViVmlldyBzdHJpbmdCeUV2YWx1YXRpbmdKYXZhU2Ny
aXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYXR0YWNobWVudFt0aXRsZT1mb2xkZXJdJyku
dW5pcXVlSWRlbnRpZmllciJdKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoW2V4cGVjdGVkRmlsZUF0
dGFjaG1lbnQuaW5mby5maWxlV3JhcHBlciBpc0VxdWFsOihfX2JyaWRnZSBOU0ZpbGVXcmFwcGVy
ICopZmlsZS5nZXQoKV0pOworICAgICAgICBFWFBFQ1RfVFJVRShbZXhwZWN0ZWRGb2xkZXJBdHRh
Y2htZW50LmluZm8uZmlsZVdyYXBwZXIgaXNFcXVhbDooX19icmlkZ2UgTlNGaWxlV3JhcHBlciAq
KWZvbGRlci5nZXQoKV0pOworICAgIH07CisKKyAgICBjaGVja0F0dGFjaG1lbnRDb25zaXN0ZW5j
eSgoX19icmlkZ2UgX1dLQXR0YWNobWVudCAqKWZpcnN0QXR0YWNobWVudC5nZXQoKSwgKF9fYnJp
ZGdlIF9XS0F0dGFjaG1lbnQgKilzZWNvbmRBdHRhY2htZW50LmdldCgpKTsKKworICAgIHsKKyAg
ICAgICAgLy8gU3dhcCB0aGUgdHdvIGF0dGFjaG1lbnRzJyBmaWxlIHdyYXBwZXJzIHdpdGhvdXQg
Y3JlYXRpbmcgb3IgZGVzdHJveWluZyBhdHRhY2htZW50IGVsZW1lbnRzLgorICAgICAgICBPYnNl
cnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcigoX19icmlkZ2UgVGVzdFdLV2Vi
VmlldyAqKXdlYlZpZXcuZ2V0KCkpOworICAgICAgICBbZmlyc3RBdHRhY2htZW50IHN5bmNocm9u
b3VzbHlTZXRGaWxlV3JhcHBlcjooX19icmlkZ2UgTlNGaWxlV3JhcHBlciAqKWZvbGRlci5nZXQo
KSBuZXdDb250ZW50VHlwZTpuaWwgZXJyb3I6bmlsXTsKKyAgICAgICAgW3NlY29uZEF0dGFjaG1l
bnQgc3luY2hyb25vdXNseVNldEZpbGVXcmFwcGVyOihfX2JyaWRnZSBOU0ZpbGVXcmFwcGVyICop
ZmlsZS5nZXQoKSBuZXdDb250ZW50VHlwZTpuaWwgZXJyb3I6bmlsXTsKKyAgICAgICAgb2JzZXJ2
ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFsgXSwgQFsgXSk7CisgICAgfQorCisgICAgY2hl
Y2tBdHRhY2htZW50Q29uc2lzdGVuY3koKF9fYnJpZGdlIF9XS0F0dGFjaG1lbnQgKilzZWNvbmRB
dHRhY2htZW50LmdldCgpLCAoX19icmlkZ2UgX1dLQXR0YWNobWVudCAqKWZpcnN0QXR0YWNobWVu
dC5nZXQoKSk7Cit9CisKIFRFU1QoV0tBdHRhY2htZW50VGVzdHMsIENoYW5nZUF0dGFjaG1lbnRE
YXRhQW5kRmlsZUluZm9ybWF0aW9uKQogewogICAgIGF1dG8gd2ViVmlldyA9IHdlYlZpZXdGb3JU
ZXN0aW5nQXR0YWNobWVudHMoKTsKICAgICBSZXRhaW5QdHI8X1dLQXR0YWNobWVudD4gYXR0YWNo
bWVudDsKICAgICB7CiAgICAgICAgIFJldGFpblB0cjxOU0RhdGE+IHBkZkRhdGEgPSB0ZXN0UERG
RGF0YSgpOwotICAgICAgICBPYnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZl
cih3ZWJWaWV3LmdldCgpKTsKLSAgICAgICAgYXR0YWNobWVudCA9IFt3ZWJWaWV3IHN5bmNocm9u
b3VzbHlJbnNlcnRBdHRhY2htZW50V2l0aEZpbGVuYW1lOkAidGVzdC5wZGYiIGNvbnRlbnRUeXBl
OkAiYXBwbGljYXRpb24vcGRmIiBkYXRhOnBkZkRhdGEuZ2V0KCldOwotICAgICAgICBbYXR0YWNo
bWVudCBleHBlY3RSZXF1ZXN0ZWREYXRhVG9CZTpwZGZEYXRhLmdldCgpXTsKKyAgICAgICAgT2Jz
ZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2ZXIoKF9fYnJpZGdlIFRlc3RXS1dl
YlZpZXcgKil3ZWJWaWV3LmdldCgpKTsKKyAgICAgICAgYXR0YWNobWVudCA9IFt3ZWJWaWV3IHN5
bmNocm9ub3VzbHlJbnNlcnRBdHRhY2htZW50V2l0aEZpbGVuYW1lOkAidGVzdC5wZGYiIGNvbnRl
bnRUeXBlOkAiYXBwbGljYXRpb24vcGRmIiBkYXRhOihfX2JyaWRnZSBOU0RhdGEgKilwZGZEYXRh
LmdldCgpXTsKKyAgICAgICAgW2F0dGFjaG1lbnQgZXhwZWN0UmVxdWVzdGVkRGF0YVRvQmU6KF9f
YnJpZGdlIE5TRGF0YSAqKXBkZkRhdGEuZ2V0KCldOwogICAgICAgICBFWFBFQ1RfV0tfU1RSRVEo
QCJ0ZXN0LnBkZiIsIFt3ZWJWaWV3IHZhbHVlT2ZBdHRyaWJ1dGU6QCJ0aXRsZSIgZm9yUXVlcnlT
ZWxlY3RvcjpAImF0dGFjaG1lbnQiXSk7CiAgICAgICAgIEVYUEVDVF9XS19TVFJFUShAImFwcGxp
Y2F0aW9uL3BkZiIsIFt3ZWJWaWV3IHZhbHVlT2ZBdHRyaWJ1dGU6QCJ0eXBlIiBmb3JRdWVyeVNl
bGVjdG9yOkAiYXR0YWNobWVudCJdKTsKLSAgICAgICAgb2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVu
dFVwZGF0ZXMoQFtdLCBAW2F0dGFjaG1lbnQuZ2V0KCldKTsKKyAgICAgICAgb2JzZXJ2ZXIuZXhw
ZWN0QXR0YWNobWVudFVwZGF0ZXMoQFsgXSwgQFsoX19icmlkZ2UgX1dLQXR0YWNobWVudCAqKWF0
dGFjaG1lbnQuZ2V0KCldKTsKICAgICB9CiAgICAgewogICAgICAgICBSZXRhaW5QdHI8TlNEYXRh
PiBpbWFnZURhdGEgPSB0ZXN0SW1hZ2VEYXRhKCk7Ci0gICAgICAgIE9ic2VydmVBdHRhY2htZW50
VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVyKHdlYlZpZXcuZ2V0KCkpOwotICAgICAgICBbYXR0YWNo
bWVudCBzeW5jaHJvbm91c2x5U2V0RGF0YTppbWFnZURhdGEuZ2V0KCkgbmV3Q29udGVudFR5cGU6
QCJpbWFnZS9wbmciIG5ld0ZpbGVuYW1lOkAiaWNvbi5wbmciIGVycm9yOm5pbF07Ci0gICAgICAg
IFthdHRhY2htZW50IGV4cGVjdFJlcXVlc3RlZERhdGFUb0JlOmltYWdlRGF0YS5nZXQoKV07Cisg
ICAgICAgIE9ic2VydmVBdHRhY2htZW50VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVyKChfX2JyaWRn
ZSBUZXN0V0tXZWJWaWV3ICopd2ViVmlldy5nZXQoKSk7CisgICAgICAgIFthdHRhY2htZW50IHN5
bmNocm9ub3VzbHlTZXREYXRhOihfX2JyaWRnZSBOU0RhdGEgKilpbWFnZURhdGEuZ2V0KCkgbmV3
Q29udGVudFR5cGU6QCJpbWFnZS9wbmciIG5ld0ZpbGVuYW1lOkAiaWNvbi5wbmciIGVycm9yOm5p
bF07CisgICAgICAgIFthdHRhY2htZW50IGV4cGVjdFJlcXVlc3RlZERhdGFUb0JlOihfX2JyaWRn
ZSBOU0RhdGEgKilpbWFnZURhdGEuZ2V0KCldOwogICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJp
Y29uLnBuZyIsIFt3ZWJWaWV3IHZhbHVlT2ZBdHRyaWJ1dGU6QCJ0aXRsZSIgZm9yUXVlcnlTZWxl
Y3RvcjpAImF0dGFjaG1lbnQiXSk7CiAgICAgICAgIEVYUEVDVF9XS19TVFJFUShAImltYWdlL3Bu
ZyIsIFt3ZWJWaWV3IHZhbHVlT2ZBdHRyaWJ1dGU6QCJ0eXBlIiBmb3JRdWVyeVNlbGVjdG9yOkAi
YXR0YWNobWVudCJdKTsKLSAgICAgICAgb2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMo
QFtdLCBAW10pOworICAgICAgICBvYnNlcnZlci5leHBlY3RBdHRhY2htZW50VXBkYXRlcyhAWyBd
LCBAWyBdKTsKICAgICB9CiAgICAgewotICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiB0ZXh0RGF0
YSA9IHRlc3RIVE1MRGF0YSgpOwotICAgICAgICBPYnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JT
Y29wZSBvYnNlcnZlcih3ZWJWaWV3LmdldCgpKTsKKyAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4g
dGV4dERhdGEgPSBbQCJIZWxsbyB3b3JsZCIgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5n
RW5jb2RpbmddOworICAgICAgICBPYnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNl
cnZlcigoX19icmlkZ2UgVGVzdFdLV2ViVmlldyAqKXdlYlZpZXcuZ2V0KCkpOwogICAgICAgICAv
LyBUaGUgbmV3IGNvbnRlbnQgdHlwZSBzaG91bGQgYmUgaW5mZXJyZWQgZnJvbSB0aGUgZmlsZSBu
YW1lLgotICAgICAgICBbYXR0YWNobWVudCBzeW5jaHJvbm91c2x5U2V0RGF0YTp0ZXh0RGF0YS5n
ZXQoKSBuZXdDb250ZW50VHlwZTpuaWwgbmV3RmlsZW5hbWU6QCJmb28udHh0IiBlcnJvcjpuaWxd
OwotICAgICAgICBbYXR0YWNobWVudCBleHBlY3RSZXF1ZXN0ZWREYXRhVG9CZTp0ZXh0RGF0YS5n
ZXQoKV07CisgICAgICAgIFthdHRhY2htZW50IHN5bmNocm9ub3VzbHlTZXREYXRhOihfX2JyaWRn
ZSBOU0RhdGEgKil0ZXh0RGF0YS5nZXQoKSBuZXdDb250ZW50VHlwZTpuaWwgbmV3RmlsZW5hbWU6
QCJmb28udHh0IiBlcnJvcjpuaWxdOworICAgICAgICBbYXR0YWNobWVudCBleHBlY3RSZXF1ZXN0
ZWREYXRhVG9CZTooX19icmlkZ2UgTlNEYXRhICopdGV4dERhdGEuZ2V0KCldOwogICAgICAgICBF
WFBFQ1RfV0tfU1RSRVEoQCJmb28udHh0IiwgW3dlYlZpZXcgdmFsdWVPZkF0dHJpYnV0ZTpAInRp
dGxlIiBmb3JRdWVyeVNlbGVjdG9yOkAiYXR0YWNobWVudCJdKTsKICAgICAgICAgRVhQRUNUX1dL
X1NUUkVRKEAidGV4dC9wbGFpbiIsIFt3ZWJWaWV3IHZhbHVlT2ZBdHRyaWJ1dGU6QCJ0eXBlIiBm
b3JRdWVyeVNlbGVjdG9yOkAiYXR0YWNobWVudCJdKTsKLSAgICAgICAgb2JzZXJ2ZXIuZXhwZWN0
QXR0YWNobWVudFVwZGF0ZXMoQFtdLCBAW10pOworICAgICAgICBvYnNlcnZlci5leHBlY3RBdHRh
Y2htZW50VXBkYXRlcyhAWyBdLCBAWyBdKTsKICAgICB9CiAgICAgewotICAgICAgICBSZXRhaW5Q
dHI8TlNEYXRhPiBzZWNvbmRUZXh0RGF0YSA9IFtAIkhlbGxvIHdvcmxkIiBkYXRhVXNpbmdFbmNv
ZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107Ci0gICAgICAgIE9ic2VydmVBdHRhY2htZW50VXBk
YXRlc0ZvclNjb3BlIG9ic2VydmVyKHdlYlZpZXcuZ2V0KCkpOwotICAgICAgICAvLyBCb3RoIHRo
ZSBwcmV2aW91cyBmaWxlIG5hbWUgYW5kIHR5cGUgc2hvdWxkIGJlIGluZmVycmVkLgotICAgICAg
ICBbYXR0YWNobWVudCBzeW5jaHJvbm91c2x5U2V0RGF0YTpzZWNvbmRUZXh0RGF0YS5nZXQoKSBu
ZXdDb250ZW50VHlwZTpuaWwgbmV3RmlsZW5hbWU6bmlsIGVycm9yOm5pbF07Ci0gICAgICAgIFth
dHRhY2htZW50IGV4cGVjdFJlcXVlc3RlZERhdGFUb0JlOnNlY29uZFRleHREYXRhLmdldCgpXTsK
LSAgICAgICAgRVhQRUNUX1dLX1NUUkVRKEAiZm9vLnR4dCIsIFt3ZWJWaWV3IHZhbHVlT2ZBdHRy
aWJ1dGU6QCJ0aXRsZSIgZm9yUXVlcnlTZWxlY3RvcjpAImF0dGFjaG1lbnQiXSk7Ci0gICAgICAg
IEVYUEVDVF9XS19TVFJFUShAInRleHQvcGxhaW4iLCBbd2ViVmlldyB2YWx1ZU9mQXR0cmlidXRl
OkAidHlwZSIgZm9yUXVlcnlTZWxlY3RvcjpAImF0dGFjaG1lbnQiXSk7Ci0gICAgICAgIG9ic2Vy
dmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbXSwgQFtdKTsKKyAgICAgICAgUmV0YWluUHRy
PE5TRGF0YT4gaHRtbERhdGEgPSB0ZXN0SFRNTERhdGEoKTsKKyAgICAgICAgT2JzZXJ2ZUF0dGFj
aG1lbnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2ZXIoKF9fYnJpZGdlIFRlc3RXS1dlYlZpZXcgKil3
ZWJWaWV3LmdldCgpKTsKKyAgICAgICAgW2F0dGFjaG1lbnQgc3luY2hyb25vdXNseVNldERhdGE6
KF9fYnJpZGdlIE5TRGF0YSAqKWh0bWxEYXRhLmdldCgpIG5ld0NvbnRlbnRUeXBlOkAidGV4dC9o
dG1sIiBuZXdGaWxlbmFtZTpAImJhciIgZXJyb3I6bmlsXTsKKyAgICAgICAgW2F0dGFjaG1lbnQg
ZXhwZWN0UmVxdWVzdGVkRGF0YVRvQmU6KF9fYnJpZGdlIE5TRGF0YSAqKWh0bWxEYXRhLmdldCgp
XTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKEAiYmFyIiwgW3dlYlZpZXcgdmFsdWVPZkF0dHJp
YnV0ZTpAInRpdGxlIiBmb3JRdWVyeVNlbGVjdG9yOkAiYXR0YWNobWVudCJdKTsKKyAgICAgICAg
RVhQRUNUX1dLX1NUUkVRKEAidGV4dC9odG1sIiwgW3dlYlZpZXcgdmFsdWVPZkF0dHJpYnV0ZTpA
InR5cGUiIGZvclF1ZXJ5U2VsZWN0b3I6QCJhdHRhY2htZW50Il0pOworICAgICAgICBvYnNlcnZl
ci5leHBlY3RBdHRhY2htZW50VXBkYXRlcyhAWyBdLCBAWyBdKTsKICAgICB9Ci0gICAgW3dlYlZp
ZXcgZXhwZWN0VXBkYXRlc0FmdGVyQ29tbWFuZDpAIkRlbGV0ZUJhY2t3YXJkIiB3aXRoQXJndW1l
bnQ6bmlsIGV4cGVjdGVkUmVtb3ZhbHM6QFthdHRhY2htZW50LmdldCgpXSBleHBlY3RlZEluc2Vy
dGlvbnM6QFtdXTsKKyAgICBbd2ViVmlldyBleHBlY3RVcGRhdGVzQWZ0ZXJDb21tYW5kOkAiRGVs
ZXRlQmFja3dhcmQiIHdpdGhBcmd1bWVudDpuaWwgZXhwZWN0ZWRSZW1vdmFsczpAWyhfX2JyaWRn
ZSBfV0tBdHRhY2htZW50ICopYXR0YWNobWVudC5nZXQoKV0gZXhwZWN0ZWRJbnNlcnRpb25zOkBb
IF1dOwogfQogCiBURVNUKFdLQXR0YWNobWVudFRlc3RzLCBSZW1vdmVOZXdsaW5lc0JlZm9yZVBh
c3RlZEltYWdlKQpAQCAtODAyLDcgKzkxMyw3IEBAIFRFU1QoV0tBdHRhY2htZW50VGVzdHMsIFJl
bW92ZU5ld2xpbmVzQmVmb3JlUGFzdGVkSW1hZ2UpCiAgICAgUmV0YWluUHRyPF9XS0F0dGFjaG1l
bnQ+IGF0dGFjaG1lbnQ7CiAgICAgYXV0byB3ZWJWaWV3ID0gd2ViVmlld0ZvclRlc3RpbmdBdHRh
Y2htZW50cygpOwogICAgIHsKLSAgICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2Nv
cGUgb2JzZXJ2ZXIod2ViVmlldy5nZXQoKSk7CisgICAgICAgIE9ic2VydmVBdHRhY2htZW50VXBk
YXRlc0ZvclNjb3BlIG9ic2VydmVyKChfX2JyaWRnZSBUZXN0V0tXZWJWaWV3ICopd2ViVmlldy5n
ZXQoKSk7CiAgICAgICAgIFt3ZWJWaWV3IF9zeW5jaHJvbm91c2x5RXhlY3V0ZUVkaXRDb21tYW5k
OkAiUGFzdGUiIGFyZ3VtZW50Om5pbF07CiAgICAgICAgIEVYUEVDVF9FUSgxVSwgb2JzZXJ2ZXIu
b2JzZXJ2ZXIoKS5pbnNlcnRlZC5jb3VudCk7CiAgICAgICAgIGF0dGFjaG1lbnQgPSBvYnNlcnZl
ci5vYnNlcnZlcigpLmluc2VydGVkWzBdOwpAQCAtODE1LDE0ICs5MjYsMTQgQEAgVEVTVChXS0F0
dGFjaG1lbnRUZXN0cywgUmVtb3ZlTmV3bGluZXNCZWZvcmVQYXN0ZWRJbWFnZSkKIAogICAgIFt3
ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJnZXRTZWxlY3Rpb24oKS5jb2xs
YXBzZShkb2N1bWVudC5ib2R5LCAwKSJdOwogICAgIHsKLSAgICAgICAgT2JzZXJ2ZUF0dGFjaG1l
bnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2ZXIod2ViVmlldy5nZXQoKSk7CisgICAgICAgIE9ic2Vy
dmVBdHRhY2htZW50VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVyKChfX2JyaWRnZSBUZXN0V0tXZWJW
aWV3ICopd2ViVmlldy5nZXQoKSk7CiAgICAgICAgIFt3ZWJWaWV3IF9zeW5jaHJvbm91c2x5RXhl
Y3V0ZUVkaXRDb21tYW5kOkAiSW5zZXJ0UGFyYWdyYXBoIiBhcmd1bWVudDpuaWxdOwogICAgICAg
ICBbd2ViVmlldyBfc3luY2hyb25vdXNseUV4ZWN1dGVFZGl0Q29tbWFuZDpAIkluc2VydFBhcmFn
cmFwaCIgYXJndW1lbnQ6bmlsXTsKICAgICAgICAgb2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVudFVw
ZGF0ZXMoQFsgXSwgQFsgXSk7CiAgICAgICAgIFt3ZWJWaWV3IGV4cGVjdEVsZW1lbnRUYWdzSW5P
cmRlcjpAWyBAIkJSIiwgQCJCUiIsIEAiSU1HIiBdXTsKICAgICB9CiAgICAgewotICAgICAgICBP
YnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcih3ZWJWaWV3LmdldCgpKTsK
KyAgICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2ZXIoKF9fYnJp
ZGdlIFRlc3RXS1dlYlZpZXcgKil3ZWJWaWV3LmdldCgpKTsKICAgICAgICAgW3dlYlZpZXcgX3N5
bmNocm9ub3VzbHlFeGVjdXRlRWRpdENvbW1hbmQ6QCJEZWxldGVCYWNrd2FyZCIgYXJndW1lbnQ6
bmlsXTsKICAgICAgICAgW3dlYlZpZXcgX3N5bmNocm9ub3VzbHlFeGVjdXRlRWRpdENvbW1hbmQ6
QCJEZWxldGVCYWNrd2FyZCIgYXJndW1lbnQ6bmlsXTsKICAgICAgICAgb2JzZXJ2ZXIuZXhwZWN0
QXR0YWNobWVudFVwZGF0ZXMoQFsgXSwgQFsgXSk7CkBAIC04MzcsMjEgKzk0OCwyMSBAQCBURVNU
KFdLQXR0YWNobWVudFRlc3RzLCBDdXRBbmRQYXN0ZVBhc3RlZEltYWdlKQogICAgIFJldGFpblB0
cjxfV0tBdHRhY2htZW50PiBhdHRhY2htZW50OwogICAgIGF1dG8gd2ViVmlldyA9IHdlYlZpZXdG
b3JUZXN0aW5nQXR0YWNobWVudHMoKTsKICAgICB7Ci0gICAgICAgIE9ic2VydmVBdHRhY2htZW50
VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVyKHdlYlZpZXcuZ2V0KCkpOworICAgICAgICBPYnNlcnZl
QXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcigoX19icmlkZ2UgVGVzdFdLV2ViVmll
dyAqKXdlYlZpZXcuZ2V0KCkpOwogICAgICAgICBbd2ViVmlldyBfc3luY2hyb25vdXNseUV4ZWN1
dGVFZGl0Q29tbWFuZDpAIlBhc3RlIiBhcmd1bWVudDpuaWxdOwogICAgICAgICBFWFBFQ1RfRVEo
MVUsIG9ic2VydmVyLm9ic2VydmVyKCkuaW5zZXJ0ZWQuY291bnQpOwogICAgICAgICBhdHRhY2ht
ZW50ID0gb2JzZXJ2ZXIub2JzZXJ2ZXIoKS5pbnNlcnRlZFswXTsKICAgICB9CiAgICAgewotICAg
ICAgICBPYnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcih3ZWJWaWV3Lmdl
dCgpKTsKKyAgICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2ZXIo
KF9fYnJpZGdlIFRlc3RXS1dlYlZpZXcgKil3ZWJWaWV3LmdldCgpKTsKICAgICAgICAgW3dlYlZp
ZXcgX3N5bmNocm9ub3VzbHlFeGVjdXRlRWRpdENvbW1hbmQ6QCJTZWxlY3RBbGwiIGFyZ3VtZW50
Om5pbF07CiAgICAgICAgIFt3ZWJWaWV3IF9zeW5jaHJvbm91c2x5RXhlY3V0ZUVkaXRDb21tYW5k
OkAiQ3V0IiBhcmd1bWVudDpuaWxdOwotICAgICAgICBvYnNlcnZlci5leHBlY3RBdHRhY2htZW50
VXBkYXRlcyhAWyBhdHRhY2htZW50LmdldCgpIF0sIEBbIF0pOworICAgICAgICBvYnNlcnZlci5l
eHBlY3RBdHRhY2htZW50VXBkYXRlcyhAWyAoX19icmlkZ2UgX1dLQXR0YWNobWVudCAqKWF0dGFj
aG1lbnQuZ2V0KCkgXSwgQFsgXSk7CiAgICAgfQogICAgIHsKLSAgICAgICAgT2JzZXJ2ZUF0dGFj
aG1lbnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2ZXIod2ViVmlldy5nZXQoKSk7CisgICAgICAgIE9i
c2VydmVBdHRhY2htZW50VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVyKChfX2JyaWRnZSBUZXN0V0tX
ZWJWaWV3ICopd2ViVmlldy5nZXQoKSk7CiAgICAgICAgIFt3ZWJWaWV3IF9zeW5jaHJvbm91c2x5
RXhlY3V0ZUVkaXRDb21tYW5kOkAiUGFzdGUiIGFyZ3VtZW50Om5pbF07Ci0gICAgICAgIG9ic2Vy
dmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbIF0sIEBbIGF0dGFjaG1lbnQuZ2V0KCkgXSk7
CisgICAgICAgIG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbIF0sIEBbIChfX2Jy
aWRnZSBfV0tBdHRhY2htZW50ICopYXR0YWNobWVudC5nZXQoKSBdKTsKICAgICB9CiB9CiAKQEAg
LTg1OSw3ICs5NzAsNyBAQCBURVNUKFdLQXR0YWNobWVudFRlc3RzLCBNb3ZlUGFzdGVkSW1hZ2VC
eURyYWdnaW5nKQogewogICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZp
ZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgW2NvbmZpZ3VyYXRpb24gX3NldEF0
dGFjaG1lbnRFbGVtZW50RW5hYmxlZDpZRVNdOwotICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHRO
UyhbW0RyYWdBbmREcm9wU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXdGcmFtZTpOU01h
a2VSZWN0KDAsIDAsIDQwMCwgNDAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCld
KTsKKyAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBh
bGxvY10gaW5pdFdpdGhXZWJWaWV3RnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQwMCkgY29u
ZmlndXJhdGlvbjooX19icmlkZ2UgV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqKWNvbmZpZ3VyYXRp
b24uZ2V0KCldKTsKICAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3ID0gW3NpbXVsYXRvciB3ZWJW
aWV3XTsKICAgICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6YXR0YWNobWVu
dEVkaXRpbmdUZXN0TWFya3VwXTsKIApAQCAtODg4LDcgKzk5OSw3IEBAIFRFU1QoV0tBdHRhY2ht
ZW50VGVzdHMsIEluc2VydFBhc3RlZEF0dHJpYnV0ZWRTdHJpbmdDb250YWluaW5nSW1hZ2UpCiAg
ICAgUmV0YWluUHRyPF9XS0F0dGFjaG1lbnQ+IGF0dGFjaG1lbnQ7CiAgICAgYXV0byB3ZWJWaWV3
ID0gd2ViVmlld0ZvclRlc3RpbmdBdHRhY2htZW50cygpOwogICAgIHsKLSAgICAgICAgT2JzZXJ2
ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2ZXIod2ViVmlldy5nZXQoKSk7CisgICAg
ICAgIE9ic2VydmVBdHRhY2htZW50VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVyKChfX2JyaWRnZSBU
ZXN0V0tXZWJWaWV3ICopd2ViVmlldy5nZXQoKSk7CiAgICAgICAgIFt3ZWJWaWV3IF9zeW5jaHJv
bm91c2x5RXhlY3V0ZUVkaXRDb21tYW5kOkAiUGFzdGUiIGFyZ3VtZW50Om5pbF07CiAgICAgICAg
IEVYUEVDVF9FUSgwVSwgb2JzZXJ2ZXIub2JzZXJ2ZXIoKS5yZW1vdmVkLmNvdW50KTsKICAgICAg
ICAgRVhQRUNUX0VRKDFVLCBvYnNlcnZlci5vYnNlcnZlcigpLmluc2VydGVkLmNvdW50KTsKQEAg
LTkwMCwxMCArMTAxMSwxMCBAQCBURVNUKFdLQXR0YWNobWVudFRlc3RzLCBJbnNlcnRQYXN0ZWRB
dHRyaWJ1dGVkU3RyaW5nQ29udGFpbmluZ0ltYWdlKQogICAgIEVYUEVDVF9XS19TVFJFUShbYXR0
YWNobWVudCB1bmlxdWVJZGVudGlmaWVyXSwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2
YVNjcmlwdDpAImRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2ltZycpLndlYmtpdEF0dGFjaG1lbnRJ
ZGVudGlmaWVyIl0pOwogCiAgICAgewotICAgICAgICBPYnNlcnZlQXR0YWNobWVudFVwZGF0ZXNG
b3JTY29wZSBvYnNlcnZlcih3ZWJWaWV3LmdldCgpKTsKKyAgICAgICAgT2JzZXJ2ZUF0dGFjaG1l
bnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2ZXIoKF9fYnJpZGdlIFRlc3RXS1dlYlZpZXcgKil3ZWJW
aWV3LmdldCgpKTsKICAgICAgICAgW3dlYlZpZXcgX3N5bmNocm9ub3VzbHlFeGVjdXRlRWRpdENv
bW1hbmQ6QCJTZWxlY3RBbGwiIGFyZ3VtZW50Om5pbF07CiAgICAgICAgIFt3ZWJWaWV3IF9zeW5j
aHJvbm91c2x5RXhlY3V0ZUVkaXRDb21tYW5kOkAiRGVsZXRlQmFja3dhcmQiIGFyZ3VtZW50Om5p
bF07Ci0gICAgICAgIG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbYXR0YWNobWVu
dC5nZXQoKV0sIEBbXSk7CisgICAgICAgIG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVz
KEBbIChfX2JyaWRnZSBfV0tBdHRhY2htZW50ICopYXR0YWNobWVudC5nZXQoKSBdLCBAWyBdKTsK
ICAgICB9CiB9CiAKQEAgLTkxNiw3ICsxMDI3LDcgQEAgVEVTVChXS0F0dGFjaG1lbnRUZXN0cywg
SW5zZXJ0UGFzdGVkQXR0cmlidXRlZFN0cmluZ0NvbnRhaW5pbmdNdWx0aXBsZUF0dGFjaG1lbnQK
ICAgICBSZXRhaW5QdHI8X1dLQXR0YWNobWVudD4gcGRmQXR0YWNobWVudDsKICAgICBhdXRvIHdl
YlZpZXcgPSB3ZWJWaWV3Rm9yVGVzdGluZ0F0dGFjaG1lbnRzKCk7CiAgICAgewotICAgICAgICBP
YnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcih3ZWJWaWV3LmdldCgpKTsK
KyAgICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2ZXIoKF9fYnJp
ZGdlIFRlc3RXS1dlYlZpZXcgKil3ZWJWaWV3LmdldCgpKTsKICAgICAgICAgW3dlYlZpZXcgX3N5
bmNocm9ub3VzbHlFeGVjdXRlRWRpdENvbW1hbmQ6QCJQYXN0ZSIgYXJndW1lbnQ6bmlsXTsKICAg
ICAgICAgRVhQRUNUX0VRKDBVLCBvYnNlcnZlci5vYnNlcnZlcigpLnJlbW92ZWQuY291bnQpOwog
ICAgICAgICBFWFBFQ1RfRVEoM1UsIG9ic2VydmVyLm9ic2VydmVyKCkuaW5zZXJ0ZWQuY291bnQp
OwpAQCAtOTQ4LDE0ICsxMDU5LDE0IEBAIFRFU1QoV0tBdHRhY2htZW50VGVzdHMsIEluc2VydFBh
c3RlZEF0dHJpYnV0ZWRTdHJpbmdDb250YWluaW5nTXVsdGlwbGVBdHRhY2htZW50CiAgICAgRVhQ
RUNUX1dLX1NUUkVRKFt6aXBBdHRhY2htZW50IHVuaXF1ZUlkZW50aWZpZXJdLCBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3RvckFsbCgn
YXR0YWNobWVudCcpWzFdLnVuaXF1ZUlkZW50aWZpZXIiXSk7CiAKICAgICB7Ci0gICAgICAgIE9i
c2VydmVBdHRhY2htZW50VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVyKHdlYlZpZXcuZ2V0KCkpOwor
ICAgICAgICBPYnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcigoX19icmlk
Z2UgVGVzdFdLV2ViVmlldyAqKXdlYlZpZXcuZ2V0KCkpOwogICAgICAgICBbd2ViVmlldyBfc3lu
Y2hyb25vdXNseUV4ZWN1dGVFZGl0Q29tbWFuZDpAIlNlbGVjdEFsbCIgYXJndW1lbnQ6bmlsXTsK
ICAgICAgICAgW3dlYlZpZXcgX3N5bmNocm9ub3VzbHlFeGVjdXRlRWRpdENvbW1hbmQ6QCJEZWxl
dGVCYWNrd2FyZCIgYXJndW1lbnQ6bmlsXTsKICAgICAgICAgTlNBcnJheTxfV0tBdHRhY2htZW50
ICo+ICpyZW1vdmVkQXR0YWNobWVudHMgPSBbb2JzZXJ2ZXIub2JzZXJ2ZXIoKSByZW1vdmVkXTsK
ICAgICAgICAgRVhQRUNUX0VRKDNVLCByZW1vdmVkQXR0YWNobWVudHMuY291bnQpOwotICAgICAg
ICBFWFBFQ1RfVFJVRShbcmVtb3ZlZEF0dGFjaG1lbnRzIGNvbnRhaW5zT2JqZWN0OnppcEF0dGFj
aG1lbnQuZ2V0KCldKTsKLSAgICAgICAgRVhQRUNUX1RSVUUoW3JlbW92ZWRBdHRhY2htZW50cyBj
b250YWluc09iamVjdDppbWFnZUF0dGFjaG1lbnQuZ2V0KCldKTsKLSAgICAgICAgRVhQRUNUX1RS
VUUoW3JlbW92ZWRBdHRhY2htZW50cyBjb250YWluc09iamVjdDpwZGZBdHRhY2htZW50LmdldCgp
XSk7CisgICAgICAgIEVYUEVDVF9UUlVFKFtyZW1vdmVkQXR0YWNobWVudHMgY29udGFpbnNPYmpl
Y3Q6KF9fYnJpZGdlIF9XS0F0dGFjaG1lbnQgKil6aXBBdHRhY2htZW50LmdldCgpXSk7CisgICAg
ICAgIEVYUEVDVF9UUlVFKFtyZW1vdmVkQXR0YWNobWVudHMgY29udGFpbnNPYmplY3Q6KF9fYnJp
ZGdlIF9XS0F0dGFjaG1lbnQgKilpbWFnZUF0dGFjaG1lbnQuZ2V0KCldKTsKKyAgICAgICAgRVhQ
RUNUX1RSVUUoW3JlbW92ZWRBdHRhY2htZW50cyBjb250YWluc09iamVjdDooX19icmlkZ2UgX1dL
QXR0YWNobWVudCAqKXBkZkF0dGFjaG1lbnQuZ2V0KCldKTsKICAgICB9CiB9CiAKQEAgLTk2OCw3
ICsxMDc5LDcgQEAgVEVTVChXS0F0dGFjaG1lbnRUZXN0cywgRG9Ob3RJbnNlcnREYXRhVVJMSW1h
Z2VzQXNBdHRhY2htZW50cykKIAogICAgIGF1dG8gd2ViVmlldyA9IHdlYlZpZXdGb3JUZXN0aW5n
QXR0YWNobWVudHMoKTsKICAgICB7Ci0gICAgICAgIE9ic2VydmVBdHRhY2htZW50VXBkYXRlc0Zv
clNjb3BlIG9ic2VydmVyKHdlYlZpZXcuZ2V0KCkpOworICAgICAgICBPYnNlcnZlQXR0YWNobWVu
dFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcigoX19icmlkZ2UgVGVzdFdLV2ViVmlldyAqKXdlYlZp
ZXcuZ2V0KCkpOwogICAgICAgICBbd2ViVmlldyBfc3luY2hyb25vdXNseUV4ZWN1dGVFZGl0Q29t
bWFuZDpAIlBhc3RlIiBhcmd1bWVudDpuaWxdOwogICAgICAgICBFWFBFQ1RfRVEoMFUsIG9ic2Vy
dmVyLm9ic2VydmVyKCkuaW5zZXJ0ZWQuY291bnQpOwogICAgIH0KQEAgLTk4Miw3NSArMTA5Myw3
NSBAQCBURVNUKFdLQXR0YWNobWVudFRlc3RzLCBJbnNlcnRBbmRSZW1vdmVEdXBsaWNhdGVBdHRh
Y2htZW50KQogewogICAgIGF1dG8gd2ViVmlldyA9IHdlYlZpZXdGb3JUZXN0aW5nQXR0YWNobWVu
dHMoKTsKICAgICBSZXRhaW5QdHI8TlNEYXRhPiBkYXRhID0gdGVzdEhUTUxEYXRhKCk7Ci0gICAg
YXV0byBmaWxlV3JhcHBlciA9IGFkb3B0TlMoW1tOU0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0UmVn
dWxhckZpbGVXaXRoQ29udGVudHM6ZGF0YS5nZXQoKV0pOworICAgIGF1dG8gZmlsZVdyYXBwZXIg
PSBhZG9wdE5TKFtbTlNGaWxlV3JhcHBlciBhbGxvY10gaW5pdFJlZ3VsYXJGaWxlV2l0aENvbnRl
bnRzOihfX2JyaWRnZSBOU0RhdGEgKilkYXRhLmdldCgpXSk7CiAgICAgUmV0YWluUHRyPF9XS0F0
dGFjaG1lbnQ+IG9yaWdpbmFsQXR0YWNobWVudDsKICAgICBSZXRhaW5QdHI8X1dLQXR0YWNobWVu
dD4gcGFzdGVkQXR0YWNobWVudDsKICAgICB7Ci0gICAgICAgIE9ic2VydmVBdHRhY2htZW50VXBk
YXRlc0ZvclNjb3BlIG9ic2VydmVyKHdlYlZpZXcuZ2V0KCkpOwotICAgICAgICBvcmlnaW5hbEF0
dGFjaG1lbnQgPSBbd2ViVmlldyBzeW5jaHJvbm91c2x5SW5zZXJ0QXR0YWNobWVudFdpdGhGaWxl
V3JhcHBlcjpmaWxlV3JhcHBlci5nZXQoKSBjb250ZW50VHlwZTpAInRleHQvcGxhaW4iXTsKKyAg
ICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2ZXIoKF9fYnJpZGdl
IFRlc3RXS1dlYlZpZXcgKil3ZWJWaWV3LmdldCgpKTsKKyAgICAgICAgb3JpZ2luYWxBdHRhY2ht
ZW50ID0gW3dlYlZpZXcgc3luY2hyb25vdXNseUluc2VydEF0dGFjaG1lbnRXaXRoRmlsZVdyYXBw
ZXI6KF9fYnJpZGdlIE5TRmlsZVdyYXBwZXIgKilmaWxlV3JhcHBlci5nZXQoKSBjb250ZW50VHlw
ZTpAInRleHQvcGxhaW4iXTsKICAgICAgICAgRVhQRUNUX0VRKDBVLCBvYnNlcnZlci5vYnNlcnZl
cigpLnJlbW92ZWQuY291bnQpOwotICAgICAgICBvYnNlcnZlci5leHBlY3RBdHRhY2htZW50VXBk
YXRlcyhAW10sIEBbb3JpZ2luYWxBdHRhY2htZW50LmdldCgpXSk7CisgICAgICAgIG9ic2VydmVy
LmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbIF0sIEBbIChfX2JyaWRnZSBfV0tBdHRhY2htZW50
ICopb3JpZ2luYWxBdHRhY2htZW50LmdldCgpIF0pOwogICAgIH0KICAgICBbd2ViVmlldyBzZWxl
Y3RBbGw6bmlsXTsKICAgICBbd2ViVmlldyBfZXhlY3V0ZUVkaXRDb21tYW5kOkAiQ29weSIgYXJn
dW1lbnQ6bmlsIGNvbXBsZXRpb246bmlsXTsKICAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3Jp
cHQ6QCJnZXRTZWxlY3Rpb24oKS5jb2xsYXBzZVRvRW5kKCkiIGNvbXBsZXRpb25IYW5kbGVyOm5p
bF07CiAgICAgewotICAgICAgICBPYnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNl
cnZlcih3ZWJWaWV3LmdldCgpKTsKKyAgICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9y
U2NvcGUgb2JzZXJ2ZXIoKF9fYnJpZGdlIFRlc3RXS1dlYlZpZXcgKil3ZWJWaWV3LmdldCgpKTsK
ICAgICAgICAgW3dlYlZpZXcgX3N5bmNocm9ub3VzbHlFeGVjdXRlRWRpdENvbW1hbmQ6QCJQYXN0
ZSIgYXJndW1lbnQ6bmlsXTsKICAgICAgICAgRVhQRUNUX0VRKDBVLCBvYnNlcnZlci5vYnNlcnZl
cigpLnJlbW92ZWQuY291bnQpOwogICAgICAgICBFWFBFQ1RfRVEoMVUsIG9ic2VydmVyLm9ic2Vy
dmVyKCkuaW5zZXJ0ZWQuY291bnQpOwogICAgICAgICBwYXN0ZWRBdHRhY2htZW50ID0gb2JzZXJ2
ZXIub2JzZXJ2ZXIoKS5pbnNlcnRlZC5maXJzdE9iamVjdDsKLSAgICAgICAgRVhQRUNUX0ZBTFNF
KFtwYXN0ZWRBdHRhY2htZW50IGlzRXF1YWw6b3JpZ2luYWxBdHRhY2htZW50LmdldCgpXSk7Cisg
ICAgICAgIEVYUEVDVF9GQUxTRShbcGFzdGVkQXR0YWNobWVudCBpc0VxdWFsOihfX2JyaWRnZSBf
V0tBdHRhY2htZW50ICopb3JpZ2luYWxBdHRhY2htZW50LmdldCgpXSk7CiAgICAgfQogICAgIHsK
LSAgICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2ZXIod2ViVmll
dy5nZXQoKSk7CisgICAgICAgIE9ic2VydmVBdHRhY2htZW50VXBkYXRlc0ZvclNjb3BlIG9ic2Vy
dmVyKChfX2JyaWRnZSBUZXN0V0tXZWJWaWV3ICopd2ViVmlldy5nZXQoKSk7CiAgICAgICAgIFt3
ZWJWaWV3IF9zeW5jaHJvbm91c2x5RXhlY3V0ZUVkaXRDb21tYW5kOkAiRGVsZXRlQmFja3dhcmQi
IGFyZ3VtZW50Om5pbF07Ci0gICAgICAgIG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVz
KEBbcGFzdGVkQXR0YWNobWVudC5nZXQoKV0sIEBbXSk7Ci0gICAgICAgIFtvcmlnaW5hbEF0dGFj
aG1lbnQgZXhwZWN0UmVxdWVzdGVkRGF0YVRvQmU6ZGF0YS5nZXQoKV07CisgICAgICAgIG9ic2Vy
dmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbIChfX2JyaWRnZSBfV0tBdHRhY2htZW50ICop
cGFzdGVkQXR0YWNobWVudC5nZXQoKSBdLCBAWyBdKTsKKyAgICAgICAgW29yaWdpbmFsQXR0YWNo
bWVudCBleHBlY3RSZXF1ZXN0ZWREYXRhVG9CZTooX19icmlkZ2UgTlNEYXRhICopZGF0YS5nZXQo
KV07CiAgICAgfQogICAgIHsKLSAgICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2Nv
cGUgb2JzZXJ2ZXIod2ViVmlldy5nZXQoKSk7CisgICAgICAgIE9ic2VydmVBdHRhY2htZW50VXBk
YXRlc0ZvclNjb3BlIG9ic2VydmVyKChfX2JyaWRnZSBUZXN0V0tXZWJWaWV3ICopd2ViVmlldy5n
ZXQoKSk7CiAgICAgICAgIFt3ZWJWaWV3IF9zeW5jaHJvbm91c2x5RXhlY3V0ZUVkaXRDb21tYW5k
OkAiRGVsZXRlQmFja3dhcmQiIGFyZ3VtZW50Om5pbF07Ci0gICAgICAgIG9ic2VydmVyLmV4cGVj
dEF0dGFjaG1lbnRVcGRhdGVzKEBbb3JpZ2luYWxBdHRhY2htZW50LmdldCgpXSwgQFtdKTsKKyAg
ICAgICAgb2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFsgKF9fYnJpZGdlIF9XS0F0
dGFjaG1lbnQgKilvcmlnaW5hbEF0dGFjaG1lbnQuZ2V0KCkgXSwgQFsgXSk7CiAgICAgfQogCi0g
ICAgRVhQRUNUX0ZBTFNFKFtvcmlnaW5hbEF0dGFjaG1lbnQgaXNFcXVhbDpwYXN0ZWRBdHRhY2ht
ZW50LmdldCgpXSk7CisgICAgRVhQRUNUX0ZBTFNFKFtvcmlnaW5hbEF0dGFjaG1lbnQgaXNFcXVh
bDooX19icmlkZ2UgX1dLQXR0YWNobWVudCAqKXBhc3RlZEF0dGFjaG1lbnQuZ2V0KCldKTsKICAg
ICBFWFBFQ1RfVFJVRShbW29yaWdpbmFsQXR0YWNobWVudCBpbmZvXS5maWxlV3JhcHBlciBpc0Vx
dWFsOltwYXN0ZWRBdHRhY2htZW50IGluZm9dLmZpbGVXcmFwcGVyXSk7Ci0gICAgRVhQRUNUX1RS
VUUoW1tvcmlnaW5hbEF0dGFjaG1lbnQgaW5mb10uZmlsZVdyYXBwZXIgaXNFcXVhbDpmaWxlV3Jh
cHBlci5nZXQoKV0pOworICAgIEVYUEVDVF9UUlVFKFtbb3JpZ2luYWxBdHRhY2htZW50IGluZm9d
LmZpbGVXcmFwcGVyIGlzRXF1YWw6KF9fYnJpZGdlIE5TRmlsZVdyYXBwZXIgKilmaWxlV3JhcHBl
ci5nZXQoKV0pOwogfQogCiBURVNUKFdLQXR0YWNobWVudFRlc3RzLCBJbnNlcnREdXBsaWNhdGVB
dHRhY2htZW50QW5kVXBkYXRlRGF0YSkKIHsKICAgICBhdXRvIHdlYlZpZXcgPSB3ZWJWaWV3Rm9y
VGVzdGluZ0F0dGFjaG1lbnRzKCk7CiAgICAgYXV0byBvcmlnaW5hbERhdGEgPSByZXRhaW5QdHIo
dGVzdEhUTUxEYXRhKCkpOwotICAgIGF1dG8gZmlsZVdyYXBwZXIgPSBhZG9wdE5TKFtbTlNGaWxl
V3JhcHBlciBhbGxvY10gaW5pdFJlZ3VsYXJGaWxlV2l0aENvbnRlbnRzOm9yaWdpbmFsRGF0YS5n
ZXQoKV0pOworICAgIGF1dG8gZmlsZVdyYXBwZXIgPSBhZG9wdE5TKFtbTlNGaWxlV3JhcHBlciBh
bGxvY10gaW5pdFJlZ3VsYXJGaWxlV2l0aENvbnRlbnRzOihfX2JyaWRnZSBOU0RhdGEgKilvcmln
aW5hbERhdGEuZ2V0KCldKTsKICAgICBSZXRhaW5QdHI8X1dLQXR0YWNobWVudD4gb3JpZ2luYWxB
dHRhY2htZW50OwogICAgIFJldGFpblB0cjxfV0tBdHRhY2htZW50PiBwYXN0ZWRBdHRhY2htZW50
OwogICAgIHsKLSAgICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2
ZXIod2ViVmlldy5nZXQoKSk7Ci0gICAgICAgIG9yaWdpbmFsQXR0YWNobWVudCA9IFt3ZWJWaWV3
IHN5bmNocm9ub3VzbHlJbnNlcnRBdHRhY2htZW50V2l0aEZpbGVXcmFwcGVyOmZpbGVXcmFwcGVy
LmdldCgpIGNvbnRlbnRUeXBlOkAidGV4dC9wbGFpbiJdOworICAgICAgICBPYnNlcnZlQXR0YWNo
bWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcigoX19icmlkZ2UgVGVzdFdLV2ViVmlldyAqKXdl
YlZpZXcuZ2V0KCkpOworICAgICAgICBvcmlnaW5hbEF0dGFjaG1lbnQgPSBbd2ViVmlldyBzeW5j
aHJvbm91c2x5SW5zZXJ0QXR0YWNobWVudFdpdGhGaWxlV3JhcHBlcjooX19icmlkZ2UgTlNGaWxl
V3JhcHBlciAqKWZpbGVXcmFwcGVyLmdldCgpIGNvbnRlbnRUeXBlOkAidGV4dC9wbGFpbiJdOwog
ICAgICAgICBFWFBFQ1RfRVEoMFUsIG9ic2VydmVyLm9ic2VydmVyKCkucmVtb3ZlZC5jb3VudCk7
Ci0gICAgICAgIG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbXSwgQFtvcmlnaW5h
bEF0dGFjaG1lbnQuZ2V0KCldKTsKKyAgICAgICAgb2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVudFVw
ZGF0ZXMoQFsgXSwgQFsgKF9fYnJpZGdlIF9XS0F0dGFjaG1lbnQgKilvcmlnaW5hbEF0dGFjaG1l
bnQuZ2V0KCkgXSk7CiAgICAgfQogICAgIFt3ZWJWaWV3IHNlbGVjdEFsbDpuaWxdOwogICAgIFt3
ZWJWaWV3IF9leGVjdXRlRWRpdENvbW1hbmQ6QCJDb3B5IiBhcmd1bWVudDpuaWwgY29tcGxldGlv
bjpuaWxdOwogICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNjcmlwdDpAImdldFNlbGVjdGlvbigp
LmNvbGxhcHNlVG9FbmQoKSIgY29tcGxldGlvbkhhbmRsZXI6bmlsXTsKICAgICB7Ci0gICAgICAg
IE9ic2VydmVBdHRhY2htZW50VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVyKHdlYlZpZXcuZ2V0KCkp
OworICAgICAgICBPYnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcigoX19i
cmlkZ2UgVGVzdFdLV2ViVmlldyAqKXdlYlZpZXcuZ2V0KCkpOwogICAgICAgICBbd2ViVmlldyBf
c3luY2hyb25vdXNseUV4ZWN1dGVFZGl0Q29tbWFuZDpAIlBhc3RlIiBhcmd1bWVudDpuaWxdOwog
ICAgICAgICBFWFBFQ1RfRVEoMFUsIG9ic2VydmVyLm9ic2VydmVyKCkucmVtb3ZlZC5jb3VudCk7
CiAgICAgICAgIEVYUEVDVF9FUSgxVSwgb2JzZXJ2ZXIub2JzZXJ2ZXIoKS5pbnNlcnRlZC5jb3Vu
dCk7CiAgICAgICAgIHBhc3RlZEF0dGFjaG1lbnQgPSBvYnNlcnZlci5vYnNlcnZlcigpLmluc2Vy
dGVkLmZpcnN0T2JqZWN0OwotICAgICAgICBFWFBFQ1RfRkFMU0UoW3Bhc3RlZEF0dGFjaG1lbnQg
aXNFcXVhbDpvcmlnaW5hbEF0dGFjaG1lbnQuZ2V0KCldKTsKKyAgICAgICAgRVhQRUNUX0ZBTFNF
KFtwYXN0ZWRBdHRhY2htZW50IGlzRXF1YWw6KF9fYnJpZGdlIF9XS0F0dGFjaG1lbnQgKilvcmln
aW5hbEF0dGFjaG1lbnQuZ2V0KCldKTsKICAgICB9CiAgICAgYXV0byB1cGRhdGVkRGF0YSA9IHJl
dGFpblB0cihbQCJIRUxMTyBXT1JMRCIgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5j
b2RpbmddKTsKLSAgICBbb3JpZ2luYWxBdHRhY2htZW50IHN5bmNocm9ub3VzbHlTZXREYXRhOnVw
ZGF0ZWREYXRhLmdldCgpIG5ld0NvbnRlbnRUeXBlOm5pbCBuZXdGaWxlbmFtZTpuaWwgZXJyb3I6
bmlsXTsKLSAgICBbb3JpZ2luYWxBdHRhY2htZW50IGV4cGVjdFJlcXVlc3RlZERhdGFUb0JlOnVw
ZGF0ZWREYXRhLmdldCgpXTsKLSAgICBbcGFzdGVkQXR0YWNobWVudCBleHBlY3RSZXF1ZXN0ZWRE
YXRhVG9CZTpvcmlnaW5hbERhdGEuZ2V0KCldOworICAgIFtvcmlnaW5hbEF0dGFjaG1lbnQgc3lu
Y2hyb25vdXNseVNldERhdGE6KF9fYnJpZGdlIE5TRGF0YSAqKXVwZGF0ZWREYXRhLmdldCgpIG5l
d0NvbnRlbnRUeXBlOm5pbCBuZXdGaWxlbmFtZTpuaWwgZXJyb3I6bmlsXTsKKyAgICBbb3JpZ2lu
YWxBdHRhY2htZW50IGV4cGVjdFJlcXVlc3RlZERhdGFUb0JlOihfX2JyaWRnZSBOU0RhdGEgKil1
cGRhdGVkRGF0YS5nZXQoKV07CisgICAgW3Bhc3RlZEF0dGFjaG1lbnQgZXhwZWN0UmVxdWVzdGVk
RGF0YVRvQmU6KF9fYnJpZGdlIE5TRGF0YSAqKW9yaWdpbmFsRGF0YS5nZXQoKV07CiAKLSAgICBF
WFBFQ1RfRkFMU0UoW29yaWdpbmFsQXR0YWNobWVudCBpc0VxdWFsOnBhc3RlZEF0dGFjaG1lbnQu
Z2V0KCldKTsKKyAgICBFWFBFQ1RfRkFMU0UoW29yaWdpbmFsQXR0YWNobWVudCBpc0VxdWFsOihf
X2JyaWRnZSBfV0tBdHRhY2htZW50ICopcGFzdGVkQXR0YWNobWVudC5nZXQoKV0pOwogICAgIEVY
UEVDVF9GQUxTRShbW29yaWdpbmFsQXR0YWNobWVudCBpbmZvXS5maWxlV3JhcHBlciBpc0VxdWFs
OltwYXN0ZWRBdHRhY2htZW50IGluZm9dLmZpbGVXcmFwcGVyXSk7Ci0gICAgRVhQRUNUX0ZBTFNF
KFtbb3JpZ2luYWxBdHRhY2htZW50IGluZm9dLmZpbGVXcmFwcGVyIGlzRXF1YWw6ZmlsZVdyYXBw
ZXIuZ2V0KCldKTsKKyAgICBFWFBFQ1RfRkFMU0UoW1tvcmlnaW5hbEF0dGFjaG1lbnQgaW5mb10u
ZmlsZVdyYXBwZXIgaXNFcXVhbDooX19icmlkZ2UgTlNGaWxlV3JhcHBlciAqKWZpbGVXcmFwcGVy
LmdldCgpXSk7CiB9CiAKIFRFU1QoV0tBdHRhY2htZW50VGVzdHMsIEluamVjdGVkQnVuZGxlUmVw
bGFjZVVSTHNXaGVuUGFzdGluZ0F0dHJpYnV0ZWRTdHJpbmcpCkBAIC0xMDU5LDkgKzExNzAsOSBA
QCBURVNUKFdLQXR0YWNobWVudFRlc3RzLCBJbmplY3RlZEJ1bmRsZVJlcGxhY2VVUkxzV2hlblBh
c3RpbmdBdHRyaWJ1dGVkU3RyaW5nKQogCiAgICAgYXV0byBjb25maWd1cmF0aW9uID0gcmV0YWlu
UHRyKFtXS1dlYlZpZXdDb25maWd1cmF0aW9uIF90ZXN0X2NvbmZpZ3VyYXRpb25XaXRoVGVzdFBs
dWdJbkNsYXNzTmFtZTpAIkJ1bmRsZUVkaXRpbmdEZWxlZ2F0ZVBsdWdJbiJdKTsKICAgICBbW2Nv
bmZpZ3VyYXRpb24gcHJvY2Vzc1Bvb2xdIF9zZXRPYmplY3Q6QHsgQCJpbWFnZS9wbmciIDogQCJj
aWQ6Zm9vLWJhciIgfSBmb3JCdW5kbGVQYXJhbWV0ZXI6QCJNSU1FVHlwZVRvUmVwbGFjZW1lbnRV
UkxNYXAiXTsKLSAgICBhdXRvIHdlYlZpZXcgPSB3ZWJWaWV3Rm9yVGVzdGluZ0F0dGFjaG1lbnRz
KENHU2l6ZU1ha2UoNTAwLCA1MDApLCBjb25maWd1cmF0aW9uLmdldCgpKTsKKyAgICBhdXRvIHdl
YlZpZXcgPSB3ZWJWaWV3Rm9yVGVzdGluZ0F0dGFjaG1lbnRzKENHU2l6ZU1ha2UoNTAwLCA1MDAp
LCAoX19icmlkZ2UgV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqKWNvbmZpZ3VyYXRpb24uZ2V0KCkp
OwogICAgIHsKLSAgICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2
ZXIod2ViVmlldy5nZXQoKSk7CisgICAgICAgIE9ic2VydmVBdHRhY2htZW50VXBkYXRlc0ZvclNj
b3BlIG9ic2VydmVyKChfX2JyaWRnZSBUZXN0V0tXZWJWaWV3ICopd2ViVmlldy5nZXQoKSk7CiAg
ICAgICAgIFt3ZWJWaWV3IF9zeW5jaHJvbm91c2x5RXhlY3V0ZUVkaXRDb21tYW5kOkAiUGFzdGUi
IGFyZ3VtZW50Om5pbF07CiAgICAgICAgIEVYUEVDVF9FUSgyVSwgb2JzZXJ2ZXIub2JzZXJ2ZXIo
KS5pbnNlcnRlZC5jb3VudCk7CiAgICAgfQpAQCAtMTA3Nyw5ICsxMTg4LDkgQEAgVEVTVChXS0F0
dGFjaG1lbnRUZXN0cywgSW5qZWN0ZWRCdW5kbGVSZXBsYWNlVVJMV2hlblBhc3RpbmdJbWFnZSkK
ICAgICBOU1N0cmluZyAqcmVwbGFjZW1lbnRVUkwgPSBAImNpZDpmb28tYmFyIjsKICAgICBhdXRv
IGNvbmZpZ3VyYXRpb24gPSByZXRhaW5QdHIoW1dLV2ViVmlld0NvbmZpZ3VyYXRpb24gX3Rlc3Rf
Y29uZmlndXJhdGlvbldpdGhUZXN0UGx1Z0luQ2xhc3NOYW1lOkAiQnVuZGxlRWRpdGluZ0RlbGVn
YXRlUGx1Z0luIl0pOwogICAgIFtbY29uZmlndXJhdGlvbiBwcm9jZXNzUG9vbF0gX3NldE9iamVj
dDpAeyBAImltYWdlL3RpZmYiIDogcmVwbGFjZW1lbnRVUkwsIEAiaW1hZ2UvcG5nIiA6IHJlcGxh
Y2VtZW50VVJMIH0gZm9yQnVuZGxlUGFyYW1ldGVyOkAiTUlNRVR5cGVUb1JlcGxhY2VtZW50VVJM
TWFwIl07Ci0gICAgYXV0byB3ZWJWaWV3ID0gd2ViVmlld0ZvclRlc3RpbmdBdHRhY2htZW50cyhD
R1NpemVNYWtlKDUwMCwgNTAwKSwgY29uZmlndXJhdGlvbi5nZXQoKSk7CisgICAgYXV0byB3ZWJW
aWV3ID0gd2ViVmlld0ZvclRlc3RpbmdBdHRhY2htZW50cyhDR1NpemVNYWtlKDUwMCwgNTAwKSwg
KF9fYnJpZGdlIFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKiljb25maWd1cmF0aW9uLmdldCgpKTsK
ICAgICB7Ci0gICAgICAgIE9ic2VydmVBdHRhY2htZW50VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVy
KHdlYlZpZXcuZ2V0KCkpOworICAgICAgICBPYnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29w
ZSBvYnNlcnZlcigoX19icmlkZ2UgVGVzdFdLV2ViVmlldyAqKXdlYlZpZXcuZ2V0KCkpOwogICAg
ICAgICBbd2ViVmlldyBfc3luY2hyb25vdXNseUV4ZWN1dGVFZGl0Q29tbWFuZDpAIlBhc3RlIiBh
cmd1bWVudDpuaWxdOwogICAgICAgICBFWFBFQ1RfRVEoMFUsIG9ic2VydmVyLm9ic2VydmVyKCku
aW5zZXJ0ZWQuY291bnQpOwogICAgIH0KQEAgLTEwOTIsOSArMTIwMyw5IEBAIFRFU1QoV0tBdHRh
Y2htZW50VGVzdHMsIEluc2VydEF0dGFjaG1lbnRVc2luZ0ZpbGVXcmFwcGVyV2l0aEZpbGVQYXRo
KQogICAgIGF1dG8gb3JpZ2luYWxGaWxlV3JhcHBlciA9IGFkb3B0TlMoW1tOU0ZpbGVXcmFwcGVy
IGFsbG9jXSBpbml0V2l0aFVSTDp0ZXN0SW1hZ2VGaWxlVVJMKCkgb3B0aW9uczowIGVycm9yOm5p
bF0pOwogICAgIFJldGFpblB0cjxfV0tBdHRhY2htZW50PiBhdHRhY2htZW50OwogICAgIHsKLSAg
ICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2ZXIod2ViVmlldy5n
ZXQoKSk7Ci0gICAgICAgIGF0dGFjaG1lbnQgPSBbd2ViVmlldyBzeW5jaHJvbm91c2x5SW5zZXJ0
QXR0YWNobWVudFdpdGhGaWxlV3JhcHBlcjpvcmlnaW5hbEZpbGVXcmFwcGVyLmdldCgpIGNvbnRl
bnRUeXBlOm5pbF07Ci0gICAgICAgIG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBb
IF0sIEBbIGF0dGFjaG1lbnQuZ2V0KCkgXSk7CisgICAgICAgIE9ic2VydmVBdHRhY2htZW50VXBk
YXRlc0ZvclNjb3BlIG9ic2VydmVyKChfX2JyaWRnZSBUZXN0V0tXZWJWaWV3ICopd2ViVmlldy5n
ZXQoKSk7CisgICAgICAgIGF0dGFjaG1lbnQgPSBbd2ViVmlldyBzeW5jaHJvbm91c2x5SW5zZXJ0
QXR0YWNobWVudFdpdGhGaWxlV3JhcHBlcjooX19icmlkZ2UgTlNGaWxlV3JhcHBlciAqKW9yaWdp
bmFsRmlsZVdyYXBwZXIuZ2V0KCkgY29udGVudFR5cGU6bmlsXTsKKyAgICAgICAgb2JzZXJ2ZXIu
ZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFsgXSwgQFsgKF9fYnJpZGdlIF9XS0F0dGFjaG1lbnQg
KilhdHRhY2htZW50LmdldCgpIF0pOwogICAgIH0KIAogICAgIF9XS0F0dGFjaG1lbnRJbmZvICpp
bmZvQmVmb3JlVXBkYXRlID0gW2F0dGFjaG1lbnQgaW5mb107CkBAIC0xMTA1LDggKzEyMTYsOCBA
QCBURVNUKFdLQXR0YWNobWVudFRlc3RzLCBJbnNlcnRBdHRhY2htZW50VXNpbmdGaWxlV3JhcHBl
cldpdGhGaWxlUGF0aCkKIAogICAgIGF1dG8gbmV3RmlsZVdyYXBwZXIgPSBhZG9wdE5TKFtbTlNG
aWxlV3JhcHBlciBhbGxvY10gaW5pdFdpdGhVUkw6dGVzdFBERkZpbGVVUkwoKSBvcHRpb25zOjAg
ZXJyb3I6bmlsXSk7CiAgICAgewotICAgICAgICBPYnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JT
Y29wZSBvYnNlcnZlcih3ZWJWaWV3LmdldCgpKTsKLSAgICAgICAgW2F0dGFjaG1lbnQgc3luY2hy
b25vdXNseVNldEZpbGVXcmFwcGVyOm5ld0ZpbGVXcmFwcGVyLmdldCgpIG5ld0NvbnRlbnRUeXBl
Om5pbCBlcnJvcjpuaWxdOworICAgICAgICBPYnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29w
ZSBvYnNlcnZlcigoX19icmlkZ2UgVGVzdFdLV2ViVmlldyAqKXdlYlZpZXcuZ2V0KCkpOworICAg
ICAgICBbYXR0YWNobWVudCBzeW5jaHJvbm91c2x5U2V0RmlsZVdyYXBwZXI6KF9fYnJpZGdlIE5T
RmlsZVdyYXBwZXIgKiluZXdGaWxlV3JhcHBlci5nZXQoKSBuZXdDb250ZW50VHlwZTpuaWwgZXJy
b3I6bmlsXTsKICAgICAgICAgb2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFsgXSwg
QFsgXSk7CiAgICAgfQogCkBAIC0xMTIzLDE3ICsxMjM0LDE3IEBAIFRFU1QoV0tBdHRhY2htZW50
VGVzdHMsIEludmFsaWRhdGVBdHRhY2htZW50c0FmdGVyTWFpbkZyYW1lTmF2aWdhdGlvbikKICAg
ICBSZXRhaW5QdHI8X1dLQXR0YWNobWVudD4gcGRmQXR0YWNobWVudDsKICAgICBSZXRhaW5QdHI8
X1dLQXR0YWNobWVudD4gaHRtbEF0dGFjaG1lbnQ7CiAgICAgewotICAgICAgICBPYnNlcnZlQXR0
YWNobWVudFVwZGF0ZXNGb3JTY29wZSBpbnNlcnRpb25PYnNlcnZlcih3ZWJWaWV3LmdldCgpKTsK
KyAgICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgaW5zZXJ0aW9uT2JzZXJ2
ZXIoKF9fYnJpZGdlIFRlc3RXS1dlYlZpZXcgKil3ZWJWaWV3LmdldCgpKTsKICAgICAgICAgcGRm
QXR0YWNobWVudCA9IFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlJbnNlcnRBdHRhY2htZW50V2l0aEZp
bGVuYW1lOkAiYXR0YWNobWVudC5wZGYiIGNvbnRlbnRUeXBlOkAiYXBwbGljYXRpb24vcGRmIiBk
YXRhOnRlc3RQREZEYXRhKCldOwogICAgICAgICBodG1sQXR0YWNobWVudCA9IFt3ZWJWaWV3IHN5
bmNocm9ub3VzbHlJbnNlcnRBdHRhY2htZW50V2l0aEZpbGVuYW1lOkAiaW5kZXguaHRtbCIgY29u
dGVudFR5cGU6QCJ0ZXh0L2h0bWwiIGRhdGE6dGVzdEhUTUxEYXRhKCldOwotICAgICAgICBpbnNl
cnRpb25PYnNlcnZlci5leHBlY3RBdHRhY2htZW50VXBkYXRlcyhAWyBdLCBAWyBwZGZBdHRhY2ht
ZW50LmdldCgpLCBodG1sQXR0YWNobWVudC5nZXQoKSBdKTsKKyAgICAgICAgaW5zZXJ0aW9uT2Jz
ZXJ2ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFsgXSwgQFsgKF9fYnJpZGdlIF9XS0F0dGFj
aG1lbnQgKilwZGZBdHRhY2htZW50LmdldCgpLCAoX19icmlkZ2UgX1dLQXR0YWNobWVudCAqKWh0
bWxBdHRhY2htZW50LmdldCgpIF0pOwogICAgICAgICBFWFBFQ1RfVFJVRShbcGRmQXR0YWNobWVu
dCBpc0Nvbm5lY3RlZF0pOwogICAgICAgICBFWFBFQ1RfVFJVRShbaHRtbEF0dGFjaG1lbnQgaXND
b25uZWN0ZWRdKTsKICAgICB9CiAKLSAgICBPYnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29w
ZSByZW1vdmFsT2JzZXJ2ZXIod2ViVmlldy5nZXQoKSk7CisgICAgT2JzZXJ2ZUF0dGFjaG1lbnRV
cGRhdGVzRm9yU2NvcGUgcmVtb3ZhbE9ic2VydmVyKChfX2JyaWRnZSBUZXN0V0tXZWJWaWV3ICop
d2ViVmlldy5nZXQoKSk7CiAgICAgW3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRUZXN0UGFnZU5h
bWVkOkAic2ltcGxlIl07Ci0gICAgcmVtb3ZhbE9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRh
dGVzKEBbIHBkZkF0dGFjaG1lbnQuZ2V0KCksIGh0bWxBdHRhY2htZW50LmdldCgpIF0sIEBbIF0p
OworICAgIHJlbW92YWxPYnNlcnZlci5leHBlY3RBdHRhY2htZW50VXBkYXRlcyhAWyAoX19icmlk
Z2UgX1dLQXR0YWNobWVudCAqKXBkZkF0dGFjaG1lbnQuZ2V0KCksIChfX2JyaWRnZSBfV0tBdHRh
Y2htZW50ICopaHRtbEF0dGFjaG1lbnQuZ2V0KCkgXSwgQFsgXSk7CiAgICAgRVhQRUNUX0ZBTFNF
KFtwZGZBdHRhY2htZW50IGlzQ29ubmVjdGVkXSk7CiAgICAgRVhQRUNUX0ZBTFNFKFtodG1sQXR0
YWNobWVudCBpc0Nvbm5lY3RlZF0pOwogICAgIFtwZGZBdHRhY2htZW50IGV4cGVjdFJlcXVlc3Rl
ZERhdGFUb0JlOm5pbF07CkBAIC0xMTQ2LDE4ICsxMjU3LDE4IEBAIFRFU1QoV0tBdHRhY2htZW50
VGVzdHMsIEludmFsaWRhdGVBdHRhY2htZW50c0FmdGVyV2ViUHJvY2Vzc1Rlcm1pbmF0aW9uKQog
ICAgIFJldGFpblB0cjxfV0tBdHRhY2htZW50PiBwZGZBdHRhY2htZW50OwogICAgIFJldGFpblB0
cjxfV0tBdHRhY2htZW50PiBodG1sQXR0YWNobWVudDsKICAgICB7Ci0gICAgICAgIE9ic2VydmVB
dHRhY2htZW50VXBkYXRlc0ZvclNjb3BlIGluc2VydGlvbk9ic2VydmVyKHdlYlZpZXcuZ2V0KCkp
OworICAgICAgICBPYnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBpbnNlcnRpb25PYnNl
cnZlcigoX19icmlkZ2UgVGVzdFdLV2ViVmlldyAqKXdlYlZpZXcuZ2V0KCkpOwogICAgICAgICBw
ZGZBdHRhY2htZW50ID0gW3dlYlZpZXcgc3luY2hyb25vdXNseUluc2VydEF0dGFjaG1lbnRXaXRo
RmlsZW5hbWU6QCJhdHRhY2htZW50LnBkZiIgY29udGVudFR5cGU6QCJhcHBsaWNhdGlvbi9wZGYi
IGRhdGE6dGVzdFBERkRhdGEoKV07CiAgICAgICAgIGh0bWxBdHRhY2htZW50ID0gW3dlYlZpZXcg
c3luY2hyb25vdXNseUluc2VydEF0dGFjaG1lbnRXaXRoRmlsZW5hbWU6QCJpbmRleC5odG1sIiBj
b250ZW50VHlwZTpAInRleHQvaHRtbCIgZGF0YTp0ZXN0SFRNTERhdGEoKV07Ci0gICAgICAgIGlu
c2VydGlvbk9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbIF0sIEBbIHBkZkF0dGFj
aG1lbnQuZ2V0KCksIGh0bWxBdHRhY2htZW50LmdldCgpIF0pOworICAgICAgICBpbnNlcnRpb25P
YnNlcnZlci5leHBlY3RBdHRhY2htZW50VXBkYXRlcyhAWyBdLCBAWyAoX19icmlkZ2UgX1dLQXR0
YWNobWVudCAqKXBkZkF0dGFjaG1lbnQuZ2V0KCksIChfX2JyaWRnZSBfV0tBdHRhY2htZW50ICop
aHRtbEF0dGFjaG1lbnQuZ2V0KCkgXSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKFtwZGZBdHRhY2ht
ZW50IGlzQ29ubmVjdGVkXSk7CiAgICAgICAgIEVYUEVDVF9UUlVFKFtodG1sQXR0YWNobWVudCBp
c0Nvbm5lY3RlZF0pOwogICAgIH0KICAgICB7Ci0gICAgICAgIE9ic2VydmVBdHRhY2htZW50VXBk
YXRlc0ZvclNjb3BlIHJlbW92YWxPYnNlcnZlcih3ZWJWaWV3LmdldCgpKTsKKyAgICAgICAgT2Jz
ZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgcmVtb3ZhbE9ic2VydmVyKChfX2JyaWRnZSBU
ZXN0V0tXZWJWaWV3ICopd2ViVmlldy5nZXQoKSk7CiAgICAgICAgIFt3ZWJWaWV3IHN0cmluZ0J5
RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJnZXRTZWxlY3Rpb24oKS5jb2xsYXBzZVRvRW5kKCkiXTsK
ICAgICAgICAgW3dlYlZpZXcgX3N5bmNocm9ub3VzbHlFeGVjdXRlRWRpdENvbW1hbmQ6QCJEZWxl
dGVCYWNrd2FyZCIgYXJndW1lbnQ6bmlsXTsKLSAgICAgICAgcmVtb3ZhbE9ic2VydmVyLmV4cGVj
dEF0dGFjaG1lbnRVcGRhdGVzKEBbIGh0bWxBdHRhY2htZW50LmdldCgpIF0sIEBbIF0pOworICAg
ICAgICByZW1vdmFsT2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFsgKF9fYnJpZGdl
IF9XS0F0dGFjaG1lbnQgKilodG1sQXR0YWNobWVudC5nZXQoKSBdLCBAWyBdKTsKICAgICAgICAg
RVhQRUNUX1RSVUUoW3BkZkF0dGFjaG1lbnQgaXNDb25uZWN0ZWRdKTsKICAgICAgICAgRVhQRUNU
X0ZBTFNFKFtodG1sQXR0YWNobWVudCBpc0Nvbm5lY3RlZF0pOwogICAgICAgICBbaHRtbEF0dGFj
aG1lbnQgZXhwZWN0UmVxdWVzdGVkRGF0YVRvQmU6dGVzdEhUTUxEYXRhKCldOwpAQCAtMTE2NSwx
NiArMTI3NiwxNiBAQCBURVNUKFdLQXR0YWNobWVudFRlc3RzLCBJbnZhbGlkYXRlQXR0YWNobWVu
dHNBZnRlcldlYlByb2Nlc3NUZXJtaW5hdGlvbikKIAogICAgIF9fYmxvY2sgYm9vbCB3ZWJQcm9j
ZXNzVGVybWluYXRlZCA9IGZhbHNlOwogICAgIGF1dG8gbmF2aWdhdGlvbkRlbGVnYXRlID0gYWRv
cHROUyhbW1Rlc3ROYXZpZ2F0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRdKTsKLSAgICBbd2ViVmll
dyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6bmF2aWdhdGlvbkRlbGVnYXRlLmdldCgpXTsKKyAgICBb
d2ViVmlldyBzZXROYXZpZ2F0aW9uRGVsZWdhdGU6KF9fYnJpZGdlIFRlc3ROYXZpZ2F0aW9uRGVs
ZWdhdGUgKiluYXZpZ2F0aW9uRGVsZWdhdGUuZ2V0KCldOwogICAgIFtuYXZpZ2F0aW9uRGVsZWdh
dGUgc2V0V2ViQ29udGVudFByb2Nlc3NEaWRUZXJtaW5hdGU6XihXS1dlYlZpZXcgKikgewogICAg
ICAgICB3ZWJQcm9jZXNzVGVybWluYXRlZCA9IHRydWU7CiAgICAgfV07CiAKLSAgICBPYnNlcnZl
QXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcih3ZWJWaWV3LmdldCgpKTsKKyAgICBP
YnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcigoX19icmlkZ2UgVGVzdFdL
V2ViVmlldyAqKXdlYlZpZXcuZ2V0KCkpOwogICAgIFt3ZWJWaWV3IF9raWxsV2ViQ29udGVudFBy
b2Nlc3NdOwogICAgIFRlc3RXZWJLaXRBUEk6OlV0aWw6OnJ1bigmd2ViUHJvY2Vzc1Rlcm1pbmF0
ZWQpOwogCi0gICAgb2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFsgcGRmQXR0YWNo
bWVudC5nZXQoKSBdLCBAWyBdKTsKKyAgICBvYnNlcnZlci5leHBlY3RBdHRhY2htZW50VXBkYXRl
cyhAWyAoX19icmlkZ2UgX1dLQXR0YWNobWVudCAqKXBkZkF0dGFjaG1lbnQuZ2V0KCkgXSwgQFsg
XSk7CiAgICAgRVhQRUNUX0ZBTFNFKFtwZGZBdHRhY2htZW50IGlzQ29ubmVjdGVkXSk7CiAgICAg
RVhQRUNUX0ZBTFNFKFtodG1sQXR0YWNobWVudCBpc0Nvbm5lY3RlZF0pOwogICAgIFtwZGZBdHRh
Y2htZW50IGV4cGVjdFJlcXVlc3RlZERhdGFUb0JlOm5pbF07CkBAIC0xMTg1LDEyICsxMjk2LDEy
IEBAIFRFU1QoV0tBdHRhY2htZW50VGVzdHMsIE1vdmVBdHRhY2htZW50RWxlbWVudEFzSWNvbkJ5
RHJhZ2dpbmcpCiB7CiAgICAgYXV0byBjb25maWd1cmF0aW9uID0gYWRvcHROUyhbW1dLV2ViVmll
d0NvbmZpZ3VyYXRpb24gYWxsb2NdIGluaXRdKTsKICAgICBbY29uZmlndXJhdGlvbiBfc2V0QXR0
YWNobWVudEVsZW1lbnRFbmFibGVkOllFU107Ci0gICAgYXV0byBzaW11bGF0b3IgPSBhZG9wdE5T
KFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlld0ZyYW1lOk5TTWFr
ZVJlY3QoMCwgMCwgNDAwLCA0MDApIGNvbmZpZ3VyYXRpb246Y29uZmlndXJhdGlvbi5nZXQoKV0p
OworICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9wU2ltdWxhdG9yIGFs
bG9jXSBpbml0V2l0aFdlYlZpZXdGcmFtZTpOU01ha2VSZWN0KDAsIDAsIDQwMCwgNDAwKSBjb25m
aWd1cmF0aW9uOihfX2JyaWRnZSBXS1dlYlZpZXdDb25maWd1cmF0aW9uICopY29uZmlndXJhdGlv
bi5nZXQoKV0pOwogICAgIFRlc3RXS1dlYlZpZXcgKndlYlZpZXcgPSBbc2ltdWxhdG9yIHdlYlZp
ZXddOwogICAgIFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlMb2FkSFRNTFN0cmluZzphdHRhY2htZW50
RWRpdGluZ1Rlc3RNYXJrdXBdOwogCiAgICAgYXV0byBkYXRhID0gcmV0YWluUHRyKHRlc3RQREZE
YXRhKCkpOwotICAgIGF1dG8gYXR0YWNobWVudCA9IHJldGFpblB0cihbd2ViVmlldyBzeW5jaHJv
bm91c2x5SW5zZXJ0QXR0YWNobWVudFdpdGhGaWxlbmFtZTpAImRvY3VtZW50LnBkZiIgY29udGVu
dFR5cGU6QCJhcHBsaWNhdGlvbi9wZGYiIGRhdGE6ZGF0YS5nZXQoKV0pOworICAgIGF1dG8gYXR0
YWNobWVudCA9IHJldGFpblB0cihbd2ViVmlldyBzeW5jaHJvbm91c2x5SW5zZXJ0QXR0YWNobWVu
dFdpdGhGaWxlbmFtZTpAImRvY3VtZW50LnBkZiIgY29udGVudFR5cGU6QCJhcHBsaWNhdGlvbi9w
ZGYiIGRhdGE6KF9fYnJpZGdlIE5TRGF0YSAqKWRhdGEuZ2V0KCldKTsKIAogICAgIFt3ZWJWaWV3
IF9leGVjdXRlRWRpdENvbW1hbmQ6QCJJbnNlcnRQYXJhZ3JhcGgiIGFyZ3VtZW50Om5pbCBjb21w
bGV0aW9uOm5pbF07CiAgICAgW3dlYlZpZXcgX2V4ZWN1dGVFZGl0Q29tbWFuZDpAIkluc2VydEhU
TUwiIGFyZ3VtZW50OkAiPHN0cm9uZz50ZXh0PC9zdHJvbmc+IiBjb21wbGV0aW9uOm5pbF07CkBA
IC0xMjAyLDcgKzEzMTMsNyBAQCBURVNUKFdLQXR0YWNobWVudFRlc3RzLCBNb3ZlQXR0YWNobWVu
dEVsZW1lbnRBc0ljb25CeURyYWdnaW5nKQogCiAgICAgRVhQRUNUX1dLX1NUUkVRKCJkb2N1bWVu
dC5wZGYiLCBbd2ViVmlldyB2YWx1ZU9mQXR0cmlidXRlOkAidGl0bGUiIGZvclF1ZXJ5U2VsZWN0
b3I6QCJhdHRhY2htZW50Il0pOwogICAgIEVYUEVDVF9XS19TVFJFUSgiYXBwbGljYXRpb24vcGRm
IiwgW3dlYlZpZXcgdmFsdWVPZkF0dHJpYnV0ZTpAInR5cGUiIGZvclF1ZXJ5U2VsZWN0b3I6QCJh
dHRhY2htZW50Il0pOwotICAgIFthdHRhY2htZW50IGV4cGVjdFJlcXVlc3RlZERhdGFUb0JlOmRh
dGEuZ2V0KCldOworICAgIFthdHRhY2htZW50IGV4cGVjdFJlcXVlc3RlZERhdGFUb0JlOihfX2Jy
aWRnZSBOU0RhdGEgKilkYXRhLmdldCgpXTsKICAgICBFWFBFQ1RfRVEoW3NpbXVsYXRvciBpbnNl
cnRlZEF0dGFjaG1lbnRzXS5jb3VudCwgW3NpbXVsYXRvciByZW1vdmVkQXR0YWNobWVudHNdLmNv
dW50KTsKICNpZiBQTEFURk9STShNQUMpCiAgICAgRVhQRUNUX0ZBTFNFKGlzQ29tcGxldGVseVRy
YW5zcGFyZW50KFtzaW11bGF0b3IgZHJhZ2dpbmdJbmZvXS5kcmFnZ2VkSW1hZ2UpKTsKQEAgLTEy
NjYsNyArMTM3Nyw3IEBAIFRFU1QoV0tBdHRhY2htZW50VGVzdHNNYWMsIEluc2VydFBhc3RlZEZp
bGVVUkxzQXNBdHRhY2htZW50cykKICAgICBSZXRhaW5QdHI8TlNBcnJheTxfV0tBdHRhY2htZW50
ICo+PiBpbnNlcnRlZEF0dGFjaG1lbnRzOwogICAgIGF1dG8gd2ViVmlldyA9IHdlYlZpZXdGb3JU
ZXN0aW5nQXR0YWNobWVudHMoKTsKICAgICB7Ci0gICAgICAgIE9ic2VydmVBdHRhY2htZW50VXBk
YXRlc0ZvclNjb3BlIG9ic2VydmVyKHdlYlZpZXcuZ2V0KCkpOworICAgICAgICBPYnNlcnZlQXR0
YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcigoX19icmlkZ2UgVGVzdFdLV2ViVmlldyAq
KXdlYlZpZXcuZ2V0KCkpOwogICAgICAgICBbd2ViVmlldyBfc3luY2hyb25vdXNseUV4ZWN1dGVF
ZGl0Q29tbWFuZDpAIlBhc3RlIiBhcmd1bWVudDpuaWxdOwogICAgICAgICBpbnNlcnRlZEF0dGFj
aG1lbnRzID0gW29ic2VydmVyLm9ic2VydmVyKCkgaW5zZXJ0ZWRdOwogICAgICAgICBFWFBFQ1Rf
RVEoMlUsIFtpbnNlcnRlZEF0dGFjaG1lbnRzIGNvdW50XSk7CkBAIC0xMjg3LDcgKzEzOTgsNyBA
QCBURVNUKFdLQXR0YWNobWVudFRlc3RzTWFjLCBJbnNlcnRQYXN0ZWRGaWxlVVJMc0FzQXR0YWNo
bWVudHMpCiAgICAgICAgIEVYUEVDVF9HVChhdHRhY2htZW50LmluZm8uZmlsZVBhdGgubGVuZ3Ro
LCAwVSk7CiAKICAgICB7Ci0gICAgICAgIE9ic2VydmVBdHRhY2htZW50VXBkYXRlc0ZvclNjb3Bl
IG9ic2VydmVyKHdlYlZpZXcuZ2V0KCkpOworICAgICAgICBPYnNlcnZlQXR0YWNobWVudFVwZGF0
ZXNGb3JTY29wZSBvYnNlcnZlcigoX19icmlkZ2UgVGVzdFdLV2ViVmlldyAqKXdlYlZpZXcuZ2V0
KCkpOwogICAgICAgICBbd2ViVmlldyBfc3luY2hyb25vdXNseUV4ZWN1dGVFZGl0Q29tbWFuZDpA
IlNlbGVjdEFsbCIgYXJndW1lbnQ6bmlsXTsKICAgICAgICAgW3dlYlZpZXcgX3N5bmNocm9ub3Vz
bHlFeGVjdXRlRWRpdENvbW1hbmQ6QCJEZWxldGVCYWNrd2FyZCIgYXJndW1lbnQ6bmlsXTsKICAg
ICAgICAgTlNBcnJheTxfV0tBdHRhY2htZW50ICo+ICpyZW1vdmVkQXR0YWNobWVudHMgPSBbb2Jz
ZXJ2ZXIub2JzZXJ2ZXIoKSByZW1vdmVkXTsKQEAgLTEzMDEsNyArMTQxMiw3IEBAIFRFU1QoV0tB
dHRhY2htZW50VGVzdHNNYWMsIEluc2VydERyb3BwZWRGaWxlUHJvbWlzZXNBc0F0dGFjaG1lbnRz
KQogewogICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0TlMoW1tXS1dlYlZpZXdDb25maWd1
cmF0aW9uIGFsbG9jXSBpbml0XSk7CiAgICAgW2NvbmZpZ3VyYXRpb24gX3NldEF0dGFjaG1lbnRF
bGVtZW50RW5hYmxlZDpZRVNdOwotICAgIGF1dG8gc2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdB
bmREcm9wU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXdGcmFtZTpOU01ha2VSZWN0KDAs
IDAsIDQwMCwgNDAwKSBjb25maWd1cmF0aW9uOmNvbmZpZ3VyYXRpb24uZ2V0KCldKTsKKyAgICBh
dXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxvY10gaW5p
dFdpdGhXZWJWaWV3RnJhbWU6TlNNYWtlUmVjdCgwLCAwLCA0MDAsIDQwMCkgY29uZmlndXJhdGlv
bjooX19icmlkZ2UgV0tXZWJWaWV3Q29uZmlndXJhdGlvbiAqKWNvbmZpZ3VyYXRpb24uZ2V0KCld
KTsKICAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3ID0gW3NpbXVsYXRvciB3ZWJWaWV3XTsKICAg
ICBbd2ViVmlldyBzeW5jaHJvbm91c2x5TG9hZEhUTUxTdHJpbmc6YXR0YWNobWVudEVkaXRpbmdU
ZXN0TWFya3VwXTsKICAgICBbc2ltdWxhdG9yIHdyaXRlUHJvbWlzZWRGaWxlczpAWyB0ZXN0UERG
RmlsZVVSTCgpLCB0ZXN0SW1hZ2VGaWxlVVJMKCkgXV07CkBAIC0xMzM5LDEyICsxNDUwLDEyIEBA
IFRFU1QoV0tBdHRhY2htZW50VGVzdHNNYWMsIERyYWdBdHRhY2htZW50QXNGaWxlUHJvbWlzZSkK
IHsKICAgICBhdXRvIGNvbmZpZ3VyYXRpb24gPSBhZG9wdE5TKFtbV0tXZWJWaWV3Q29uZmlndXJh
dGlvbiBhbGxvY10gaW5pdF0pOwogICAgIFtjb25maWd1cmF0aW9uIF9zZXRBdHRhY2htZW50RWxl
bWVudEVuYWJsZWQ6WUVTXTsKLSAgICBhdXRvIHNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5k
RHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3RnJhbWU6TlNNYWtlUmVjdCgwLCAw
LCA0MDAsIDQwMCkgY29uZmlndXJhdGlvbjpjb25maWd1cmF0aW9uLmdldCgpXSk7CisgICAgYXV0
byBzaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxsb2NdIGluaXRX
aXRoV2ViVmlld0ZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgNDAwLCA0MDApIGNvbmZpZ3VyYXRpb246
KF9fYnJpZGdlIFdLV2ViVmlld0NvbmZpZ3VyYXRpb24gKiljb25maWd1cmF0aW9uLmdldCgpXSk7
CiAgICAgVGVzdFdLV2ViVmlldyAqd2ViVmlldyA9IFtzaW11bGF0b3Igd2ViVmlld107CiAgICAg
W3dlYlZpZXcgc3luY2hyb25vdXNseUxvYWRIVE1MU3RyaW5nOmF0dGFjaG1lbnRFZGl0aW5nVGVz
dE1hcmt1cF07CiAKICAgICBhdXRvIGZpbGVXcmFwcGVyID0gYWRvcHROUyhbW05TRmlsZVdyYXBw
ZXIgYWxsb2NdIGluaXRXaXRoVVJMOnRlc3RQREZGaWxlVVJMKCkgb3B0aW9uczowIGVycm9yOm5p
bF0pOwotICAgIGF1dG8gYXR0YWNobWVudCA9IHJldGFpblB0cihbd2ViVmlldyBzeW5jaHJvbm91
c2x5SW5zZXJ0QXR0YWNobWVudFdpdGhGaWxlV3JhcHBlcjpmaWxlV3JhcHBlci5nZXQoKSBjb250
ZW50VHlwZTpuaWxdKTsKKyAgICBhdXRvIGF0dGFjaG1lbnQgPSByZXRhaW5QdHIoW3dlYlZpZXcg
c3luY2hyb25vdXNseUluc2VydEF0dGFjaG1lbnRXaXRoRmlsZVdyYXBwZXI6KF9fYnJpZGdlIE5T
RmlsZVdyYXBwZXIgKilmaWxlV3JhcHBlci5nZXQoKSBjb250ZW50VHlwZTpuaWxdKTsKICAgICBb
c2ltdWxhdG9yIHJ1bkZyb206W3dlYlZpZXcgYXR0YWNobWVudEVsZW1lbnRNaWRQb2ludF0gdG86
Q0dQb2ludE1ha2UoMzAwLCAzMDApXTsKIAogICAgIE5TQXJyYXk8TlNVUkwgKj4gKnVybHMgPSBb
c2ltdWxhdG9yIHJlY2VpdmVQcm9taXNlZEZpbGVzXTsKQEAgLTEzNjEsMTAgKzE0NzIsMTAgQEAg
VEVTVChXS0F0dGFjaG1lbnRUZXN0c01hYywgRHJhZ0F0dGFjaG1lbnRBc0ZpbGVQcm9taXNlKQog
VEVTVChXS0F0dGFjaG1lbnRUZXN0c0lPUywgSW5zZXJ0RHJvcHBlZEltYWdlQXNBdHRhY2htZW50
KQogewogICAgIGF1dG8gd2ViVmlldyA9IHdlYlZpZXdGb3JUZXN0aW5nQXR0YWNobWVudHMoKTsK
LSAgICBhdXRvIGRyYWdBbmREcm9wU2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9wU2lt
dWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOworICAgIGF1dG8g
ZHJhZ0FuZERyb3BTaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxs
b2NdIGluaXRXaXRoV2ViVmlldzooX19icmlkZ2UgVGVzdFdLV2ViVmlldyAqKXdlYlZpZXcuZ2V0
KCldKTsKICAgICBhdXRvIGl0ZW0gPSBhZG9wdE5TKFtbTlNJdGVtUHJvdmlkZXIgYWxsb2NdIGlu
aXRdKTsKLSAgICBbaXRlbSByZWdpc3RlckRhdGE6dGVzdEltYWdlRGF0YSgpIHR5cGU6KE5TU3Ry
aW5nICopa1VUVHlwZVBOR107Ci0gICAgW2RyYWdBbmREcm9wU2ltdWxhdG9yIHNldEV4dGVybmFs
SXRlbVByb3ZpZGVyczpAWyBpdGVtLmdldCgpIF1dOworICAgIFtpdGVtIHJlZ2lzdGVyRGF0YTp0
ZXN0SW1hZ2VEYXRhKCkgdHlwZTooX19icmlkZ2UgTlNTdHJpbmcgKilrVVRUeXBlUE5HXTsKKyAg
ICBbZHJhZ0FuZERyb3BTaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIChfX2Jy
aWRnZSBOU0l0ZW1Qcm92aWRlciAqKWl0ZW0uZ2V0KCkgXV07CiAgICAgW2RyYWdBbmREcm9wU2lt
dWxhdG9yIHJ1bkZyb206Q0dQb2ludFplcm8gdG86Q0dQb2ludE1ha2UoNTAsIDUwKV07CiAKICAg
ICBFWFBFQ1RfRVEoMVUsIFtkcmFnQW5kRHJvcFNpbXVsYXRvciBpbnNlcnRlZEF0dGFjaG1lbnRz
XS5jb3VudCk7CkBAIC0xMzc0LDIyICsxNDg1LDIyIEBAIFRFU1QoV0tBdHRhY2htZW50VGVzdHNJ
T1MsIEluc2VydERyb3BwZWRJbWFnZUFzQXR0YWNobWVudCkKICAgICBFWFBFQ1RfV0tfU1RSRVEo
W2F0dGFjaG1lbnQgdW5pcXVlSWRlbnRpZmllcl0sIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGlu
Z0phdmFTY3JpcHQ6QCJkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdpbWcnKS53ZWJraXRBdHRhY2ht
ZW50SWRlbnRpZmllciJdKTsKIAogICAgIHsKLSAgICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRh
dGVzRm9yU2NvcGUgb2JzZXJ2ZXIod2ViVmlldy5nZXQoKSk7CisgICAgICAgIE9ic2VydmVBdHRh
Y2htZW50VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVyKChfX2JyaWRnZSBUZXN0V0tXZWJWaWV3ICop
d2ViVmlldy5nZXQoKSk7CiAgICAgICAgIFt3ZWJWaWV3IF9zeW5jaHJvbm91c2x5RXhlY3V0ZUVk
aXRDb21tYW5kOkAiU2VsZWN0QWxsIiBhcmd1bWVudDpuaWxdOwogICAgICAgICBbd2ViVmlldyBf
c3luY2hyb25vdXNseUV4ZWN1dGVFZGl0Q29tbWFuZDpAIkRlbGV0ZUJhY2t3YXJkIiBhcmd1bWVu
dDpuaWxdOwotICAgICAgICBvYnNlcnZlci5leHBlY3RBdHRhY2htZW50VXBkYXRlcyhAW2F0dGFj
aG1lbnQuZ2V0KCldLCBAW10pOworICAgICAgICBvYnNlcnZlci5leHBlY3RBdHRhY2htZW50VXBk
YXRlcyhAWyAoX19icmlkZ2UgX1dLQXR0YWNobWVudCAqKWF0dGFjaG1lbnQuZ2V0KCkgXSwgQFtd
KTsKICAgICB9CiB9CiAKIFRFU1QoV0tBdHRhY2htZW50VGVzdHNJT1MsIEluc2VydERyb3BwZWRB
dHRyaWJ1dGVkU3RyaW5nQ29udGFpbmluZ0F0dGFjaG1lbnQpCiB7CiAgICAgYXV0byB3ZWJWaWV3
ID0gd2ViVmlld0ZvclRlc3RpbmdBdHRhY2htZW50cygpOwotICAgIGF1dG8gZHJhZ0FuZERyb3BT
aW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRo
V2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgYXV0byBpbWFnZSA9IGFkb3B0TlMoW1tOU1Rl
eHRBdHRhY2htZW50IGFsbG9jXSBpbml0V2l0aERhdGE6dGVzdEltYWdlRGF0YSgpIG9mVHlwZToo
TlNTdHJpbmcgKilrVVRUeXBlUE5HXSk7CisgICAgYXV0byBkcmFnQW5kRHJvcFNpbXVsYXRvciA9
IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3Oihf
X2JyaWRnZSBUZXN0V0tXZWJWaWV3ICopd2ViVmlldy5nZXQoKV0pOworICAgIGF1dG8gaW1hZ2Ug
PSBhZG9wdE5TKFtbTlNUZXh0QXR0YWNobWVudCBhbGxvY10gaW5pdFdpdGhEYXRhOnRlc3RJbWFn
ZURhdGEoKSBvZlR5cGU6KF9fYnJpZGdlIE5TU3RyaW5nICopa1VUVHlwZVBOR10pOwogICAgIGF1
dG8gaXRlbSA9IGFkb3B0TlMoW1tOU0l0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwotICAgIFtp
dGVtIHJlZ2lzdGVyT2JqZWN0OltOU0F0dHJpYnV0ZWRTdHJpbmcgYXR0cmlidXRlZFN0cmluZ1dp
dGhBdHRhY2htZW50OmltYWdlLmdldCgpXSB2aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVz
ZW50YXRpb25WaXNpYmlsaXR5QWxsXTsKKyAgICBbaXRlbSByZWdpc3Rlck9iamVjdDpbTlNBdHRy
aWJ1dGVkU3RyaW5nIGF0dHJpYnV0ZWRTdHJpbmdXaXRoQXR0YWNobWVudDooX19icmlkZ2UgTlNU
ZXh0QXR0YWNobWVudCAqKWltYWdlLmdldCgpXSB2aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVw
cmVzZW50YXRpb25WaXNpYmlsaXR5QWxsXTsKIAotICAgIFtkcmFnQW5kRHJvcFNpbXVsYXRvciBz
ZXRFeHRlcm5hbEl0ZW1Qcm92aWRlcnM6QFsgaXRlbS5nZXQoKSBdXTsKKyAgICBbZHJhZ0FuZERy
b3BTaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIChfX2JyaWRnZSBOU0l0ZW1Q
cm92aWRlciAqKWl0ZW0uZ2V0KCkgXV07CiAgICAgW2RyYWdBbmREcm9wU2ltdWxhdG9yIHJ1bkZy
b206Q0dQb2ludFplcm8gdG86Q0dQb2ludE1ha2UoNTAsIDUwKV07CiAKICAgICBFWFBFQ1RfRVEo
MVUsIFtkcmFnQW5kRHJvcFNpbXVsYXRvciBpbnNlcnRlZEF0dGFjaG1lbnRzXS5jb3VudCk7CkBA
IC0xNDAyLDEwICsxNTEzLDEwIEBAIFRFU1QoV0tBdHRhY2htZW50VGVzdHNJT1MsIEluc2VydERy
b3BwZWRBdHRyaWJ1dGVkU3RyaW5nQ29udGFpbmluZ0F0dGFjaG1lbnQpCiAgICAgRVhQRUNUX1dL
X1NUUkVRKFthdHRhY2htZW50IHVuaXF1ZUlkZW50aWZpZXJdLCBbd2ViVmlldyBzdHJpbmdCeUV2
YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3RvcignaW1nJykud2Via2l0
QXR0YWNobWVudElkZW50aWZpZXIiXSk7CiAKICAgICB7Ci0gICAgICAgIE9ic2VydmVBdHRhY2ht
ZW50VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVyKHdlYlZpZXcuZ2V0KCkpOworICAgICAgICBPYnNl
cnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcigoX19icmlkZ2UgVGVzdFdLV2Vi
VmlldyAqKXdlYlZpZXcuZ2V0KCkpOwogICAgICAgICBbd2ViVmlldyBfc3luY2hyb25vdXNseUV4
ZWN1dGVFZGl0Q29tbWFuZDpAIlNlbGVjdEFsbCIgYXJndW1lbnQ6bmlsXTsKICAgICAgICAgW3dl
YlZpZXcgX3N5bmNocm9ub3VzbHlFeGVjdXRlRWRpdENvbW1hbmQ6QCJEZWxldGVCYWNrd2FyZCIg
YXJndW1lbnQ6bmlsXTsKLSAgICAgICAgb2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMo
QFthdHRhY2htZW50LmdldCgpXSwgQFtdKTsKKyAgICAgICAgb2JzZXJ2ZXIuZXhwZWN0QXR0YWNo
bWVudFVwZGF0ZXMoQFsgKF9fYnJpZGdlIF9XS0F0dGFjaG1lbnQgKilhdHRhY2htZW50LmdldCgp
IF0sIEBbXSk7CiAgICAgfQogfQogCkBAIC0xNDE4LDcgKzE1MjksNyBAQCBURVNUKFdLQXR0YWNo
bWVudFRlc3RzSU9TLCBJbnNlcnREcm9wcGVkUmljaEFuZFBsYWluVGV4dEZpbGVzQXNBdHRhY2ht
ZW50cykKICAgICBhdXRvIHJpY2hUZXh0SXRlbSA9IGFkb3B0TlMoW1tOU0l0ZW1Qcm92aWRlciBh
bGxvY10gaW5pdF0pOwogICAgIGF1dG8gcmljaFRleHQgPSBhZG9wdE5TKFtbTlNBdHRyaWJ1dGVk
U3RyaW5nIGFsbG9jXSBpbml0V2l0aFN0cmluZzpAIkhlbGxvIHdvcmxkIiBhdHRyaWJ1dGVzOkB7
IE5TRm9udEF0dHJpYnV0ZU5hbWU6IFtVSUZvbnQgYm9sZFN5c3RlbUZvbnRPZlNpemU6MTJdIH1d
KTsKICAgICBbcmljaFRleHRJdGVtIHNldFByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlOlVJUHJl
ZmVycmVkUHJlc2VudGF0aW9uU3R5bGVBdHRhY2htZW50XTsKLSAgICBbcmljaFRleHRJdGVtIHJl
Z2lzdGVyT2JqZWN0OnJpY2hUZXh0LmdldCgpIHZpc2liaWxpdHk6TlNJdGVtUHJvdmlkZXJSZXBy
ZXNlbnRhdGlvblZpc2liaWxpdHlBbGxdOworICAgIFtyaWNoVGV4dEl0ZW0gcmVnaXN0ZXJPYmpl
Y3Q6KF9fYnJpZGdlIE5TQXR0cmlidXRlZFN0cmluZyAqKXJpY2hUZXh0LmdldCgpIHZpc2liaWxp
dHk6TlNJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvblZpc2liaWxpdHlBbGxdOwogICAgIFtyaWNo
VGV4dEl0ZW0gc2V0U3VnZ2VzdGVkTmFtZTpAImhlbGxvLnJ0ZiJdOwogCiAgICAgYXV0byBwbGFp
blRleHRJdGVtID0gYWRvcHROUyhbW05TSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CkBAIC0x
NDI3LDggKzE1MzgsOCBAQCBURVNUKFdLQXR0YWNobWVudFRlc3RzSU9TLCBJbnNlcnREcm9wcGVk
UmljaEFuZFBsYWluVGV4dEZpbGVzQXNBdHRhY2htZW50cykKICAgICBbcGxhaW5UZXh0SXRlbSBz
ZXRTdWdnZXN0ZWROYW1lOkAid29ybGQudHh0Il07CiAKICAgICBhdXRvIHdlYlZpZXcgPSB3ZWJW
aWV3Rm9yVGVzdGluZ0F0dGFjaG1lbnRzKCk7Ci0gICAgYXV0byBkcmFnQW5kRHJvcFNpbXVsYXRv
ciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3
OndlYlZpZXcuZ2V0KCldKTsKLSAgICBbZHJhZ0FuZERyb3BTaW11bGF0b3Igc2V0RXh0ZXJuYWxJ
dGVtUHJvdmlkZXJzOkBbIHJpY2hUZXh0SXRlbS5nZXQoKSwgcGxhaW5UZXh0SXRlbS5nZXQoKSBd
XTsKKyAgICBhdXRvIGRyYWdBbmREcm9wU2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9w
U2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6KF9fYnJpZGdlIFRlc3RXS1dlYlZpZXcg
Kil3ZWJWaWV3LmdldCgpXSk7CisgICAgW2RyYWdBbmREcm9wU2ltdWxhdG9yIHNldEV4dGVybmFs
SXRlbVByb3ZpZGVyczpAWyAoX19icmlkZ2UgTlNJdGVtUHJvdmlkZXIgKilyaWNoVGV4dEl0ZW0u
Z2V0KCksIChfX2JyaWRnZSBOU0l0ZW1Qcm92aWRlciAqKXBsYWluVGV4dEl0ZW0uZ2V0KCkgXV07
CiAgICAgW2RyYWdBbmREcm9wU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludFplcm8gdG86Q0dQb2lu
dE1ha2UoNTAsIDUwKV07CiAKICAgICBFWFBFQ1RfRVEoMlUsIFtkcmFnQW5kRHJvcFNpbXVsYXRv
ciBpbnNlcnRlZEF0dGFjaG1lbnRzXS5jb3VudCk7CkBAIC0xNDUxLDEyICsxNTYyLDEyIEBAIFRF
U1QoV0tBdHRhY2htZW50VGVzdHNJT1MsIEluc2VydERyb3BwZWRaaXBBcmNoaXZlQXNBdHRhY2ht
ZW50KQogICAgIC8vIHByZXNlbnRhdGlvbiBzdHlsZSAoZS5nLiBOb3RlcykgaW50byBNYWlsLgog
ICAgIGF1dG8gaXRlbSA9IGFkb3B0TlMoW1tOU0l0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwog
ICAgIE5TRGF0YSAqZGF0YSA9IHRlc3RaSVBEYXRhKCk7Ci0gICAgW2l0ZW0gcmVnaXN0ZXJEYXRh
OmRhdGEgdHlwZTooTlNTdHJpbmcgKilrVVRUeXBlWmlwQXJjaGl2ZV07CisgICAgW2l0ZW0gcmVn
aXN0ZXJEYXRhOmRhdGEgdHlwZTooX19icmlkZ2UgTlNTdHJpbmcgKilrVVRUeXBlWmlwQXJjaGl2
ZV07CiAgICAgW2l0ZW0gc2V0U3VnZ2VzdGVkTmFtZTpAImFyY2hpdmUuemlwIl07CiAKICAgICBh
dXRvIHdlYlZpZXcgPSB3ZWJWaWV3Rm9yVGVzdGluZ0F0dGFjaG1lbnRzKCk7Ci0gICAgYXV0byBk
cmFnQW5kRHJvcFNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBhbGxv
Y10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICBbZHJhZ0FuZERyb3BTaW11
bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGl0ZW0uZ2V0KCkgXV07CisgICAgYXV0
byBkcmFnQW5kRHJvcFNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVsYXRvciBh
bGxvY10gaW5pdFdpdGhXZWJWaWV3OihfX2JyaWRnZSBUZXN0V0tXZWJWaWV3ICopd2ViVmlldy5n
ZXQoKV0pOworICAgIFtkcmFnQW5kRHJvcFNpbXVsYXRvciBzZXRFeHRlcm5hbEl0ZW1Qcm92aWRl
cnM6QFsgKF9fYnJpZGdlIE5TSXRlbVByb3ZpZGVyICopaXRlbS5nZXQoKSBdXTsKICAgICBbZHJh
Z0FuZERyb3BTaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50WmVybyB0bzpDR1BvaW50TWFrZSg1MCwg
NTApXTsKIAogICAgIEVYUEVDVF9FUSgxVSwgW2RyYWdBbmREcm9wU2ltdWxhdG9yIGluc2VydGVk
QXR0YWNobWVudHNdLmNvdW50KTsKQEAgLTE0NzgsMTUgKzE1ODksMTUgQEAgVEVTVChXS0F0dGFj
aG1lbnRUZXN0c0lPUywgSW5zZXJ0RHJvcHBlZEl0ZW1Qcm92aWRlcnNJbk9yZGVyKQogCiAgICAg
YXV0byBpbmxpbmVUZXh0SXRlbSA9IGFkb3B0TlMoW1tOU0l0ZW1Qcm92aWRlciBhbGxvY10gaW5p
dF0pOwogICAgIGF1dG8gYXBwbGVVUkwgPSByZXRhaW5QdHIoW05TVVJMIFVSTFdpdGhTdHJpbmc6
QCJodHRwczovL3d3dy5hcHBsZS5jb20vIl0pOwotICAgIFtpbmxpbmVUZXh0SXRlbSByZWdpc3Rl
ck9iamVjdDphcHBsZVVSTC5nZXQoKSB2aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50
YXRpb25WaXNpYmlsaXR5QWxsXTsKKyAgICBbaW5saW5lVGV4dEl0ZW0gcmVnaXN0ZXJPYmplY3Q6
KF9fYnJpZGdlIE5TVVJMICopYXBwbGVVUkwuZ2V0KCkgdmlzaWJpbGl0eTpOU0l0ZW1Qcm92aWRl
clJlcHJlc2VudGF0aW9uVmlzaWJpbGl0eUFsbF07CiAKICAgICBhdXRvIHNlY29uZEF0dGFjaG1l
bnRJdGVtID0gYWRvcHROUyhbW05TSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7Ci0gICAgW3Nl
Y29uZEF0dGFjaG1lbnRJdGVtIHJlZ2lzdGVyRGF0YTp0ZXN0UERGRGF0YSgpIHR5cGU6KE5TU3Ry
aW5nICopa1VUVHlwZVBERl07CisgICAgW3NlY29uZEF0dGFjaG1lbnRJdGVtIHJlZ2lzdGVyRGF0
YTp0ZXN0UERGRGF0YSgpIHR5cGU6KF9fYnJpZGdlIE5TU3RyaW5nICopa1VUVHlwZVBERl07CiAg
ICAgW3NlY29uZEF0dGFjaG1lbnRJdGVtIHNldFN1Z2dlc3RlZE5hbWU6QCJzZWNvbmQucGRmIl07
CiAKICAgICBhdXRvIHdlYlZpZXcgPSB3ZWJWaWV3Rm9yVGVzdGluZ0F0dGFjaG1lbnRzKCk7Ci0g
ICAgYXV0byBkcmFnQW5kRHJvcFNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVs
YXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OndlYlZpZXcuZ2V0KCldKTsKLSAgICBbZHJhZ0Fu
ZERyb3BTaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIGZpcnN0QXR0YWNobWVu
dEl0ZW0uZ2V0KCksIGlubGluZVRleHRJdGVtLmdldCgpLCBzZWNvbmRBdHRhY2htZW50SXRlbS5n
ZXQoKSBdXTsKKyAgICBhdXRvIGRyYWdBbmREcm9wU2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdB
bmREcm9wU2ltdWxhdG9yIGFsbG9jXSBpbml0V2l0aFdlYlZpZXc6KF9fYnJpZGdlIFRlc3RXS1dl
YlZpZXcgKil3ZWJWaWV3LmdldCgpXSk7CisgICAgW2RyYWdBbmREcm9wU2ltdWxhdG9yIHNldEV4
dGVybmFsSXRlbVByb3ZpZGVyczpAWyAoX19icmlkZ2UgTlNJdGVtUHJvdmlkZXIgKilmaXJzdEF0
dGFjaG1lbnRJdGVtLmdldCgpLCAoX19icmlkZ2UgTlNJdGVtUHJvdmlkZXIgKilpbmxpbmVUZXh0
SXRlbS5nZXQoKSwgKF9fYnJpZGdlIE5TSXRlbVByb3ZpZGVyICopc2Vjb25kQXR0YWNobWVudEl0
ZW0uZ2V0KCkgXV07CiAgICAgW2RyYWdBbmREcm9wU2ltdWxhdG9yIHJ1bkZyb206Q0dQb2ludFpl
cm8gdG86Q0dQb2ludE1ha2UoNTAsIDUwKV07CiAKICAgICBFWFBFQ1RfRVEoMlUsIFtkcmFnQW5k
RHJvcFNpbXVsYXRvciBpbnNlcnRlZEF0dGFjaG1lbnRzXS5jb3VudCk7CkBAIC0xNTA4LDE4ICsx
NjE5LDE4IEBAIFRFU1QoV0tBdHRhY2htZW50VGVzdHNJT1MsIERyYWdBdHRhY2htZW50SW5zZXJ0
ZWRBc0ZpbGUpCiB7CiAgICAgYXV0byBpdGVtID0gYWRvcHROUyhbW05TSXRlbVByb3ZpZGVyIGFs
bG9jXSBpbml0XSk7CiAgICAgYXV0byBkYXRhID0gcmV0YWluUHRyKHRlc3RQREZEYXRhKCkpOwot
ICAgIFtpdGVtIHJlZ2lzdGVyRGF0YTpkYXRhLmdldCgpIHR5cGU6KE5TU3RyaW5nICopa1VUVHlw
ZVBERl07CisgICAgW2l0ZW0gcmVnaXN0ZXJEYXRhOihfX2JyaWRnZSBOU0RhdGEgKilkYXRhLmdl
dCgpIHR5cGU6KF9fYnJpZGdlIE5TU3RyaW5nICopa1VUVHlwZVBERl07CiAgICAgW2l0ZW0gc2V0
U3VnZ2VzdGVkTmFtZTpAImRvY3VtZW50LnBkZiJdOwogCiAgICAgYXV0byB3ZWJWaWV3ID0gd2Vi
Vmlld0ZvclRlc3RpbmdBdHRhY2htZW50cygpOwotICAgIGF1dG8gZHJhZ0FuZERyb3BTaW11bGF0
b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmll
dzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgW2RyYWdBbmREcm9wU2ltdWxhdG9yIHNldEV4dGVybmFs
SXRlbVByb3ZpZGVyczpAWyBpdGVtLmdldCgpIF1dOworICAgIGF1dG8gZHJhZ0FuZERyb3BTaW11
bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2Vi
VmlldzooX19icmlkZ2UgVGVzdFdLV2ViVmlldyAqKXdlYlZpZXcuZ2V0KCldKTsKKyAgICBbZHJh
Z0FuZERyb3BTaW11bGF0b3Igc2V0RXh0ZXJuYWxJdGVtUHJvdmlkZXJzOkBbIChfX2JyaWRnZSBO
U0l0ZW1Qcm92aWRlciAqKWl0ZW0uZ2V0KCkgXV07CiAgICAgW2RyYWdBbmREcm9wU2ltdWxhdG9y
IHJ1bkZyb206Q0dQb2ludFplcm8gdG86Q0dQb2ludE1ha2UoNTAsIDUwKV07CiAKICAgICAvLyBG
aXJzdCwgdmVyaWZ5IHRoYXQgdGhlIGF0dGFjaG1lbnQgd2FzIHN1Y2Nlc3NmdWxseSBkcm9wcGVk
LgogICAgIEVYUEVDVF9FUSgxVSwgW2RyYWdBbmREcm9wU2ltdWxhdG9yIGluc2VydGVkQXR0YWNo
bWVudHNdLmNvdW50KTsKICAgICBfV0tBdHRhY2htZW50ICphdHRhY2htZW50ID0gW2RyYWdBbmRE
cm9wU2ltdWxhdG9yIGluc2VydGVkQXR0YWNobWVudHNdLmZpcnN0T2JqZWN0OwotICAgIFthdHRh
Y2htZW50IGV4cGVjdFJlcXVlc3RlZERhdGFUb0JlOmRhdGEuZ2V0KCldOworICAgIFthdHRhY2ht
ZW50IGV4cGVjdFJlcXVlc3RlZERhdGFUb0JlOihfX2JyaWRnZSBOU0RhdGEgKilkYXRhLmdldCgp
XTsKICAgICBFWFBFQ1RfV0tfU1RSRVEoImRvY3VtZW50LnBkZiIsIFt3ZWJWaWV3IHZhbHVlT2ZB
dHRyaWJ1dGU6QCJ0aXRsZSIgZm9yUXVlcnlTZWxlY3RvcjpAImF0dGFjaG1lbnQiXSk7CiAgICAg
RVhQRUNUX1dLX1NUUkVRKCJhcHBsaWNhdGlvbi9wZGYiLCBbd2ViVmlldyB2YWx1ZU9mQXR0cmli
dXRlOkAidHlwZSIgZm9yUXVlcnlTZWxlY3RvcjpAImF0dGFjaG1lbnQiXSk7CiAKQEAgLTE1MzEs
NyArMTY0Miw3IEBAIFRFU1QoV0tBdHRhY2htZW50VGVzdHNJT1MsIERyYWdBdHRhY2htZW50SW5z
ZXJ0ZWRBc0ZpbGUpCiAgICAgRVhQRUNUX0VRKDFVLCBbZHJhZ0FuZERyb3BTaW11bGF0b3Igc291
cmNlSXRlbVByb3ZpZGVyc10uY291bnQpOwogICAgIE5TSXRlbVByb3ZpZGVyICppdGVtUHJvdmlk
ZXIgPSBbZHJhZ0FuZERyb3BTaW11bGF0b3Igc291cmNlSXRlbVByb3ZpZGVyc10uZmlyc3RPYmpl
Y3Q7CiAgICAgRVhQRUNUX0VRKFVJUHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGVBdHRhY2htZW50
LCBpdGVtUHJvdmlkZXIucHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGUpOwotICAgIFtpdGVtUHJv
dmlkZXIgZXhwZWN0VHlwZTooTlNTdHJpbmcgKilrVVRUeXBlUERGIHdpdGhEYXRhOmRhdGEuZ2V0
KCldOworICAgIFtpdGVtUHJvdmlkZXIgZXhwZWN0VHlwZTooX19icmlkZ2UgTlNTdHJpbmcgKilr
VVRUeXBlUERGIHdpdGhEYXRhOihfX2JyaWRnZSBOU0RhdGEgKilkYXRhLmdldCgpXTsKICAgICBF
WFBFQ1RfV0tfU1RSRVEoImRvY3VtZW50LnBkZiIsIFtpdGVtUHJvdmlkZXIgc3VnZ2VzdGVkTmFt
ZV0pOwogICAgIFtkcmFnQW5kRHJvcFNpbXVsYXRvciBlbmREYXRhVHJhbnNmZXJdOwogfQpAQCAt
MTU0MiwyNSArMTY1MywyNSBAQCBURVNUKFdLQXR0YWNobWVudFRlc3RzSU9TLCBEcmFnQXR0YWNo
bWVudEluc2VydGVkQXNEYXRhKQogICAgIGF1dG8gZGF0YSA9IHJldGFpblB0cih0ZXN0UERGRGF0
YSgpKTsKICAgICBSZXRhaW5QdHI8X1dLQXR0YWNobWVudD4gYXR0YWNobWVudDsKICAgICB7Ci0g
ICAgICAgIE9ic2VydmVBdHRhY2htZW50VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVyKHdlYlZpZXcu
Z2V0KCkpOwotICAgICAgICBhdHRhY2htZW50ID0gW3dlYlZpZXcgc3luY2hyb25vdXNseUluc2Vy
dEF0dGFjaG1lbnRXaXRoRmlsZW5hbWU6QCJkb2N1bWVudC5wZGYiIGNvbnRlbnRUeXBlOkAiYXBw
bGljYXRpb24vcGRmIiBkYXRhOmRhdGEuZ2V0KCldOwotICAgICAgICBvYnNlcnZlci5leHBlY3RB
dHRhY2htZW50VXBkYXRlcyhAW10sIEBbYXR0YWNobWVudC5nZXQoKV0pOworICAgICAgICBPYnNl
cnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcigoX19icmlkZ2UgVGVzdFdLV2Vi
VmlldyAqKXdlYlZpZXcuZ2V0KCkpOworICAgICAgICBhdHRhY2htZW50ID0gW3dlYlZpZXcgc3lu
Y2hyb25vdXNseUluc2VydEF0dGFjaG1lbnRXaXRoRmlsZW5hbWU6QCJkb2N1bWVudC5wZGYiIGNv
bnRlbnRUeXBlOkAiYXBwbGljYXRpb24vcGRmIiBkYXRhOihfX2JyaWRnZSBOU0RhdGEgKilkYXRh
LmdldCgpXTsKKyAgICAgICAgb2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFsgXSwg
QFsgKF9fYnJpZGdlIF9XS0F0dGFjaG1lbnQgKilhdHRhY2htZW50LmdldCgpIF0pOwogICAgIH0K
IAogICAgIC8vIEZpcnN0LCB2ZXJpZnkgdGhhdCB0aGUgYXR0YWNobWVudCB3YXMgc3VjY2Vzc2Z1
bGx5IGluc2VydGVkIGZyb20gcmF3IGRhdGEuCi0gICAgW2F0dGFjaG1lbnQgZXhwZWN0UmVxdWVz
dGVkRGF0YVRvQmU6ZGF0YS5nZXQoKV07CisgICAgW2F0dGFjaG1lbnQgZXhwZWN0UmVxdWVzdGVk
RGF0YVRvQmU6KF9fYnJpZGdlIE5TRGF0YSAqKWRhdGEuZ2V0KCldOwogICAgIEVYUEVDVF9XS19T
VFJFUSgiZG9jdW1lbnQucGRmIiwgW3dlYlZpZXcgdmFsdWVPZkF0dHJpYnV0ZTpAInRpdGxlIiBm
b3JRdWVyeVNlbGVjdG9yOkAiYXR0YWNobWVudCJdKTsKICAgICBFWFBFQ1RfV0tfU1RSRVEoImFw
cGxpY2F0aW9uL3BkZiIsIFt3ZWJWaWV3IHZhbHVlT2ZBdHRyaWJ1dGU6QCJ0eXBlIiBmb3JRdWVy
eVNlbGVjdG9yOkAiYXR0YWNobWVudCJdKTsKIAogICAgIFt3ZWJWaWV3IGV2YWx1YXRlSmF2YVNj
cmlwdDpAImdldFNlbGVjdGlvbigpLnJlbW92ZUFsbFJhbmdlcygpIiBjb21wbGV0aW9uSGFuZGxl
cjpuaWxdOwotICAgIGF1dG8gZHJhZ0FuZERyb3BTaW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0Fu
ZERyb3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Cisg
ICAgYXV0byBkcmFnQW5kRHJvcFNpbXVsYXRvciA9IGFkb3B0TlMoW1tEcmFnQW5kRHJvcFNpbXVs
YXRvciBhbGxvY10gaW5pdFdpdGhXZWJWaWV3OihfX2JyaWRnZSBUZXN0V0tXZWJWaWV3ICopd2Vi
Vmlldy5nZXQoKV0pOwogICAgIFtkcmFnQW5kRHJvcFNpbXVsYXRvciBydW5Gcm9tOkNHUG9pbnRN
YWtlKDI1LCAyNSkgdG86Q0dQb2ludE1ha2UoLTEwMCwgLTEwMCldOwogCiAgICAgLy8gTmV4dCwg
dmVyaWZ5IHRoYXQgZHJhZ2dpbmcgdGhlIGF0dGFjaG1lbnQgcHJvZHVjZXMgYW4gaXRlbSBwcm92
aWRlciB3aXRoIGEgUERGIGF0dGFjaG1lbnQuCiAgICAgRVhQRUNUX0VRKDFVLCBbZHJhZ0FuZERy
b3BTaW11bGF0b3Igc291cmNlSXRlbVByb3ZpZGVyc10uY291bnQpOwogICAgIE5TSXRlbVByb3Zp
ZGVyICppdGVtUHJvdmlkZXIgPSBbZHJhZ0FuZERyb3BTaW11bGF0b3Igc291cmNlSXRlbVByb3Zp
ZGVyc10uZmlyc3RPYmplY3Q7CiAgICAgRVhQRUNUX0VRKFVJUHJlZmVycmVkUHJlc2VudGF0aW9u
U3R5bGVBdHRhY2htZW50LCBpdGVtUHJvdmlkZXIucHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGUp
OwotICAgIFtpdGVtUHJvdmlkZXIgZXhwZWN0VHlwZTooTlNTdHJpbmcgKilrVVRUeXBlUERGIHdp
dGhEYXRhOmRhdGEuZ2V0KCldOworICAgIFtpdGVtUHJvdmlkZXIgZXhwZWN0VHlwZTooX19icmlk
Z2UgTlNTdHJpbmcgKilrVVRUeXBlUERGIHdpdGhEYXRhOihfX2JyaWRnZSBOU0RhdGEgKilkYXRh
LmdldCgpXTsKICAgICBFWFBFQ1RfV0tfU1RSRVEoImRvY3VtZW50LnBkZiIsIFtpdGVtUHJvdmlk
ZXIgc3VnZ2VzdGVkTmFtZV0pOwogICAgIFtkcmFnQW5kRHJvcFNpbXVsYXRvciBlbmREYXRhVHJh
bnNmZXJdOwogfQpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9EcmFnQW5k
RHJvcFNpbXVsYXRvci5oIGIvVG9vbHMvVGVzdFdlYktpdEFQSS9jb2NvYS9EcmFnQW5kRHJvcFNp
bXVsYXRvci5oCmluZGV4IDc2MWEzNmYwZTFjMGRkNmI5M2FjYjU2NDllYzVlMmMwOGIzYmRhOTYu
LjFkN2UxMGU4OTI4YTE5YzYxZWMxMTZiNmIyYzVlY2E3MDdlNDU1ODkgMTAwNjQ0Ci0tLSBhL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvRHJhZ0FuZERyb3BTaW11bGF0b3IuaAorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL2NvY29hL0RyYWdBbmREcm9wU2ltdWxhdG9yLmgKQEAgLTgwLDYgKzgw
LDcgQEAgdHlwZWRlZiBOU0RpY3Rpb25hcnk8TlNOdW1iZXIgKiwgTlNWYWx1ZSAqPiAqUHJvZ3Jl
c3NUb0NHUG9pbnRWYWx1ZU1hcDsKIC8vIFRoZSBzdGFydCBsb2NhdGlvbiwgZW5kIGxvY2F0aW9u
LCBhbmQgbG9jYXRpb25zIG9mIGFkZGl0aW9uYWwgaXRlbSByZXF1ZXN0cyBhcmUgYWxsIGluIHdp
bmRvdyBjb29yZGluYXRlcy4KIC0gKHZvaWQpcnVuRnJvbTooQ0dQb2ludClzdGFydExvY2F0aW9u
IHRvOihDR1BvaW50KWVuZExvY2F0aW9uOwogLSAodm9pZCllbmREYXRhVHJhbnNmZXI7CistICh2
b2lkKWNsZWFyRXh0ZXJuYWxEcmFnSW5mb3JtYXRpb247CiBAcHJvcGVydHkgKG5vbmF0b21pYywg
cmVhZG9ubHkpIE5TQXJyYXk8X1dLQXR0YWNobWVudCAqPiAqaW5zZXJ0ZWRBdHRhY2htZW50czsK
IEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFkb25seSkgTlNBcnJheTxfV0tBdHRhY2htZW50ICo+
ICpyZW1vdmVkQXR0YWNobWVudHM7CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRl
c3RXS1dlYlZpZXcgKndlYlZpZXc7CmRpZmYgLS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2lv
cy9EcmFnQW5kRHJvcFNpbXVsYXRvcklPUy5tbSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL0Ry
YWdBbmREcm9wU2ltdWxhdG9ySU9TLm1tCmluZGV4IDBmOTdhMzlkYjYwYWIyOTAyYTU4ODM0MTQ1
YTc0MDliMjMxYjU3ZTYuLmNlYmQ0NjAwYTk0ODEwM2RmYjA1Nzk3YTNkNDRlYWYwNjM4NWRkNzIg
MTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL0RyYWdBbmREcm9wU2ltdWxhdG9y
SU9TLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL0RyYWdBbmREcm9wU2ltdWxhdG9y
SU9TLm1tCkBAIC01NjgsNiArNTY4LDExIEBAIHN0YXRpYyBOU0FycmF5ICpkcmFnQW5kRHJvcEV2
ZW50TmFtZXMoKQogICAgIFtzZWxmIF9zY2hlZHVsZUFkdmFuY2VQcm9ncmVzc107CiB9CiAKKy0g
KHZvaWQpY2xlYXJFeHRlcm5hbERyYWdJbmZvcm1hdGlvbgoreworICAgIF9leHRlcm5hbEl0ZW1Q
cm92aWRlcnMgPSBuaWw7Cit9CisKIC0gKENHUG9pbnQpX2N1cnJlbnRMb2NhdGlvbgogewogICAg
IENHRmxvYXQgZGlzdGFuY2VYID0gX2VuZExvY2F0aW9uLnggLSBfc3RhcnRMb2NhdGlvbi54Owpk
aWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktpdEFQSS9tYWMvRHJhZ0FuZERyb3BTaW11bGF0b3JN
YWMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJL21hYy9EcmFnQW5kRHJvcFNpbXVsYXRvck1hYy5t
bQppbmRleCBlNTI4MzAxZTU2ZDRiZDMzYmMwZWRiMDk4NWIxZDM3YjMzZWJhZjFmLi4yZWZiYjVj
OWViNjMyOGRmMmRkNzk4NDZkNjlkYzk5YjBhZmJjZTIyIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0
V2ViS2l0QVBJL21hYy9EcmFnQW5kRHJvcFNpbXVsYXRvck1hYy5tbQorKysgYi9Ub29scy9UZXN0
V2ViS2l0QVBJL21hYy9EcmFnQW5kRHJvcFNpbXVsYXRvck1hYy5tbQpAQCAtMzU4LDYgKzM1OCwx
MyBAQCBzdGF0aWMgTlNJbWFnZSAqZGVmYXVsdEV4dGVybmFsRHJhZ0ltYWdlKCkKICAgICByZXR1
cm4gX2V4dGVybmFsUHJvbWlzZWRGaWxlcy5nZXQoKTsKIH0KIAorLSAodm9pZCljbGVhckV4dGVy
bmFsRHJhZ0luZm9ybWF0aW9uCit7CisgICAgX2V4dGVybmFsUHJvbWlzZWRGaWxlcyA9IG5pbDsK
KyAgICBfZXh0ZXJuYWxEcmFnSW1hZ2UgPSBuaWw7CisgICAgX2V4dGVybmFsRHJhZ1Bhc3RlYm9h
cmQgPSBuaWw7Cit9CisKIHN0YXRpYyBCT09MIGdldEZpbGVQYXRoc0FuZFR5cGVJZGVudGlmaWVy
cyhOU0FycmF5PE5TVVJMICo+ICpmaWxlVVJMcywgTlNBcnJheTxOU1N0cmluZyAqPiAqKm91dEZp
bGVQYXRocywgTlNBcnJheTxOU1N0cmluZyAqPiAqKm91dFR5cGVJZGVudGlmaWVycykKIHsKICAg
ICBOU011dGFibGVBcnJheSAqZmlsZVBhdGhzID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENh
cGFjaXR5OmZpbGVVUkxzLmNvdW50XTsK
</data>
<flag name="review"
          id="365829"
          type_id="1"
          status="+"
          setter="thorton"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>348187</attachid>
            <date>2018-08-27 12:36:13 -0700</date>
            <delta_ts>2018-08-27 13:14:29 -0700</delta_ts>
            <desc>Patch for landing</desc>
            <filename>bug-188903-20180827123612.patch</filename>
            <type>text/plain</type>
            <size>64977</size>
            <attacher name="Wenson Hsieh">wenson_hsieh</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjM1Mzc1CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggZGZhMmNmMjExZmYxNGZj
NDI0NzIzOTE0MWNiYzkxNWE3NzYxZTg4Ny4uNWMyMWE3MWQzYmNjODZiMzgxMWM2OWY1YzI0ZWMx
OTI0YzI3YzFlNSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ1IEBACisyMDE4LTA4LTI3ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgorCisgICAgICAgIFtDb2NvYV0gRXhj
ZXB0aW9uIChmaWxlVHlwZSAnZHluLmFncTh1JyBpcyBub3QgYSB2YWxpZCBVVEkpIHJhaXNlZCB3
aGVuIGRyYWdnaW5nIGFuIGF0dGFjaG1lbnQgd2hvc2UgZmlsZSB3cmFwcGVyIGlzIGEgZGlyZWN0
b3J5CisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xODg5
MDMKKyAgICAgICAgPHJkYXI6Ly9wcm9ibGVtLzQzNzAyOTkzPgorCisgICAgICAgIFJldmlld2Vk
IGJ5IFRpbSBIb3J0b24uCisKKyAgICAgICAgRml4ZXMgdGhlIGV4Y2VwdGlvbiBmb3IgYXR0YWNo
bWVudHMgdGhhdCBhcmUgY3JlYXRlZCB3aGVuIGRyb3BwaW5nIGZpbGVzIHdpdGggZXh0ZW5zaW9u
cyB0aGF0IGRvbid0IG1hcCB0byBhbnkKKyAgICAgICAga25vd24gVVRJcywgYW5kIHdoZW4gZHJv
cHBpbmcgZm9sZGVycy4gU2VlIGJlbG93IGZvciBtb3JlIGRldGFpbC4KKworICAgICAgICBUZXN0
czogIFdLQXR0YWNobWVudFRlc3RzLkluc2VydEZvbGRlckFuZEZpbGVXaXRoVW5rbm93bkV4dGVu
c2lvbgorICAgICAgICAgICAgICAgIFdLQXR0YWNobWVudFRlc3RzLkRyb3BGb2xkZXJBc0F0dGFj
aG1lbnRBbmRNb3ZlQnlEcmFnZ2luZworICAgICAgICAgICAgICAgIFdLQXR0YWNobWVudFRlc3Rz
LkNoYW5nZUF0dGFjaG1lbnREYXRhQW5kRmlsZUluZm9ybWF0aW9uCisKKyAgICAgICAgKiBlZGl0
aW5nL0VkaXRvci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpFZGl0b3I6Omluc2VydEF0dGFjaG1l
bnQpOgorICAgICAgICAqIGVkaXRpbmcvRWRpdG9yLmg6CisgICAgICAgICogZWRpdGluZy9jb2Nv
YS9XZWJDb250ZW50UmVhZGVyQ29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpXZWJDb250ZW50
UmVhZGVyOjpyZWFkRmlsZVBhdGhzKToKKworICAgICAgICBXaGVuIGNyZWF0aW5nIGFuIGF0dGFj
aG1lbnQgYnkgZHJvcHBpbmcgb3IgcGFzdGluZyBhIGZpbGUgYmFja2VkIGJ5IGEgZmlsZSBwYXRo
LCBoYW5kbGUgdGhlIGNhc2VzIHdoZXJl4oCmCisgICAgICAgICgxKSAgICAgdGhlIGRyb3BwZWQg
cGF0aCBpcyBhIGRpcmVjdG9yeSwgYnkgc2V0dGluZyB0aGUgVVRJIHRvICJwdWJsaWMuZGlyZWN0
b3J5Ii4gVGhpcyBhbGxvd3MgdXMgdG8gc2hvdyBhCisgICAgICAgICAgICAgICAgZm9sZGVyIGlj
b24gZm9yIHRoZSBkcm9wcGVkIGF0dGFjaG1lbnQgZWxlbWVudCBvbiBtYWNPUy4KKyAgICAgICAg
KDIpICAgICB0aGUgZHJvcHBlZCBwYXRoIGlzIGEgZmlsZSB3aG9zZSBVVEkgaXMgdW5rbm93biwg
YnkgZGVmYXVsdGluZyB0byAicHVibGljLmRhdGEiLgorCisgICAgICAgIEJ5IGVuc3VyaW5nIHRo
YXQgdGhlIFVUSSBvZiBhIGRyb3BwZWQgZmlsZS1iYWNrZWQgYXR0YWNobWVudCBpcyBzZXQgdG8g
YSBjb25jcmV0ZSB0eXBlIGluIGFueSBjYXNlLCB3ZSBhdm9pZCBhbgorICAgICAgICBleGNlcHRp
b24gd2hlbiBkcmFnZ2luZyB0aGUgYXR0YWNobWVudCBvbiBtYWNPUywgYW5kIG9uIGlPUywgYXZv
aWQgc2lsZW50bHkgZmFpbGluZyB0byBkcmFnIGFuIGF0dGFjaG1lbnQuCisKKyAgICAgICAgKiBo
dG1sL0hUTUxBdHRhY2htZW50RWxlbWVudC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpIVE1MQXR0
YWNobWVudEVsZW1lbnQ6OnVwZGF0ZUF0dHJpYnV0ZXMpOgorCisgICAgICAgIENoYW5nZSB0aGlz
IG1ldGhvZCB0byB0YWtlIGFuIG9wdGlvbmFsIGZpbGUgc2l6ZSAodGhlIHN1YnRpdGxlIGF0dHJp
YnV0ZSB3aWxsIG9ubHkgYmUgc2V0IGlmIHRoZSBmaWxlIHNpemUgaXMKKyAgICAgICAgbm90IGBz
dGQ6Om51bGxvcHRgKS4gRnVydGhlcm1vcmUsIGFsbG93IGNhbGxlcnMgb2YgdGhpcyBtZXRob2Qg
dG8gY2xlYXIgYXR0cmlidXRlcyBvbiB0aGUgYXR0YWNobWVudCBlbGVtZW50IGJ5CisgICAgICAg
IHBhc3NpbmcgaW4gYHN0ZDo6bnVsbG9wdGAgZm9yIGFueSBvZiB0aGUgdGhyZWUgYXJndW1lbnRz
LiBUaGlzIGFsbG93cyB1cyB0byBoYW5kbGUgdGhlIGNhc2Ugd2hlcmUgYW4KKyAgICAgICAgYXR0
YWNobWVudCdzIGZpbGUgd3JhcHBlciBpcyBjaGFuZ2VkIGZyb20gYSByZWd1bGFyIGZpbGUgdG8g
YSBmb2xkZXIgd2hvc2UgdG90YWwgc2l6ZSBpcyBjdXJyZW50bHkgdW5rbm93bi4KKyAgICAgICAg
SW5zdGVhZCBvZiBzaG93aW5nICIwIGJ5dGVzIiwgd2UnbGwgc2ltcGx5IHJlZnJhaW4gZnJvbSBz
aG93aW5nIGEgc3VidGl0bGUgYXQgYWxsIChpbiB0aGUgZnV0dXJlLCB0aGlzIHNob3VsZAorICAg
ICAgICBiZSBpbXByb3ZlZCBieSBpbXBsZW1lbnRpbmcgYSB3YXkgdG8gZXN0aW1hdGUgdGhlIHNp
emUgb2YgdGhlIGZpbGVzIGluIHRoZSBmb2xkZXIsIG9yIHBlcmhhcHMgc2hvdyB0aGUgbnVtYmVy
IG9mCisgICAgICAgIGl0ZW1zIGluIHRoZSBmb2xkZXIgYXMgdGhlIHN1YnRpdGxlKS4KKworICAg
ICAgICAqIGh0bWwvSFRNTEF0dGFjaG1lbnRFbGVtZW50Lmg6CisKIDIwMTgtMDgtMjcgIFdlbnNv
biBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CiAKICAgICAgICAgW0F0dGFjaG1lbnQg
U3VwcG9ydF0gW1dLMl0gSW1hZ2VzIGNvcGllZCBmcm9tIE1haWwgbWVzc2FnZSB2aWV3IHBhc3Rl
IHdpdGggdGhlIHdyb25nIGZpbGUgbmFtZSBpbiBjb21wb3NlCmRpZmYgLS1naXQgYS9Tb3VyY2Uv
V2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IDY2Mzc2MTgx
MjI2NzM3NWQ5OGQ1MjQwODNiZmUxOWRhMGFhYWRjNDguLjkxZmI2MDZjMDY1YjBhMDE2NjU1MzZm
ZDkzODU1MTVjZGRhODc5MTQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisr
KyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsNzEgQEAKKzIwMTgtMDgtMjcg
IFdlbnNvbiBIc2llaCAgPHdlbnNvbl9oc2llaEBhcHBsZS5jb20+CisKKyAgICAgICAgW0NvY29h
XSBFeGNlcHRpb24gKGZpbGVUeXBlICdkeW4uYWdxOHUnIGlzIG5vdCBhIHZhbGlkIFVUSSkgcmFp
c2VkIHdoZW4gZHJhZ2dpbmcgYW4gYXR0YWNobWVudCB3aG9zZSBmaWxlIHdyYXBwZXIgaXMgYSBk
aXJlY3RvcnkKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTE4ODkwMworICAgICAgICA8cmRhcjovL3Byb2JsZW0vNDM3MDI5OTM+CisKKyAgICAgICAgUmV2
aWV3ZWQgYnkgVGltIEhvcnRvbi4KKworICAgICAgICBGaXhlcyB0aGUgYnVnIGJ5IHN1cHBvcnRp
bmcgTlNGaWxlV3JhcHBlcnMgb2YgdHlwZSBkaXJlY3RvcnksIGFzIHdlbGwgYXMgTlNGaWxlV3Jh
cHBlcnMgd2l0aCBmaWxlIHRoYXQgZG8gbm90CisgICAgICAgIG1hcCB0byBjb25jcmV0ZSB0eXBl
IGlkZW50aWZpZXJzLiBBbW9uZyBvdGhlciB0aGluZ3MsIHRoaXMgcGF0Y2ggZW5zdXJlcyB0aGF0
OgorICAgICAgICAtICAgICAgIEluc2VydGluZyBhIGRpcmVjdG9yeSBmaWxlIHdyYXBwZXIgKG9y
IHVzaW5nIC1zZXRGaWxlV3JhcHBlcjrigKY6IHRvIGNoYW5nZSBhbiBleGlzdGluZyBfV0tBdHRh
Y2htZW50J3MKKyAgICAgICAgICAgICAgICBmaWxlIHdyYXBwZXIgdG8gYSBkaXJlY3RvcnkpIGRv
ZXMgbm90IGNhdXNlIHRoZSBhdHRhY2htZW50IGVsZW1lbnQgdG8gc2hvdyAiMCBieXRlcyIgYXMg
dGhlIHN1YnRpdGxlLgorICAgICAgICAtICAgICAgIEluIHRoZSBhYm92ZSBzY2VuYXJpbywgd2Ug
YWxzbyB3b24ndCBlbmQgdXAgd2l0aCBhIG1pc3NpbmcgInR5cGUiIGF0dHJpYnV0ZSBmb3IgdGhl
IGF0dGFjaG1lbnQgZWxlbWVudCwKKyAgICAgICAgICAgICAgICBhcyB3ZWxsIGFzIGEgY29ycmVz
cG9uZGluZyBBUEk6OkF0dGFjaG1lbnQ6OmNvbnRlbnRUeXBlKCkgdGhhdCdzIGFuIGVtcHR5IHN0
cmluZy4KKyAgICAgICAgLSAgICAgICBEcm9wcGluZyBvciBwYXN0aW5nIGF0dGFjaG1lbnRzIGJh
Y2tlZCBieSBwYXRocyBvbiBkaXNrIGFsc28gZG9lc24ndCB0cmlnZ2VyIHRoZXNlIHByb2JsZW1z
LCBpZiB0aGUgcGF0aAorICAgICAgICAgICAgICAgIGlzIGEgZGlyZWN0b3J5IG9yIG9mIHVua25v
d24gZmlsZSB0eXBlLgorCisgICAgICAgIENoYW5nZXMgYXJlIHZlcmlmaWVkIGJ5IDIgbmV3IEFQ
SSB0ZXN0cy4KKworICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQVBJQXR0YWNobWVudC5jcHA6Cisg
ICAgICAgIChBUEk6OkF0dGFjaG1lbnQ6OnVwZGF0ZUF0dHJpYnV0ZXMpOgorICAgICAgICAoQVBJ
OjpBdHRhY2htZW50OjpmaWxlU2l6ZUZvckRpc3BsYXkgY29uc3QpOgorICAgICAgICAqIFVJUHJv
Y2Vzcy9BUEkvQVBJQXR0YWNobWVudC5oOgorICAgICAgICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2Ev
QVBJQXR0YWNobWVudENvY29hLm1tOgorICAgICAgICAoQVBJOjpBdHRhY2htZW50OjpzZXRGaWxl
V3JhcHBlckFuZFVwZGF0ZUNvbnRlbnRUeXBlKToKKworICAgICAgICBBZGQgYSBoZWxwZXIgdGhh
dCBzZXRzIHRoZSBmaWxlIHdyYXBwZXIgdG8gdGhlIGdpdmVuIE5TRmlsZVdyYXBwZXIsIGFuZCBl
aXRoZXIgc2V0cyB0aGUgY29udGVudCB0eXBlIHRvIHRoZQorICAgICAgICBnaXZlbiBjb250ZW50
IHR5cGUgaWYgaXQncyBzcGVjaWZpZWQsIG9yIGluZmVycyBpdCBmcm9tIHRoZSBmaWxlIGV4dGVu
c2lvbiBvZiB0aGUgbmV3IE5TRmlsZVdyYXBwZXIuIEludm9rZWQKKyAgICAgICAgd2hlbmV2ZXIg
YW4gTlNGaWxlV3JhcHBlciBhbmQgY29udGVudCB0eXBlIGNvbWJpbmF0aW9uIGlzIHNldCBvbiBh
biBBUEkgYXR0YWNobWVudCB2aWEgV2ViS2l0IFNQSS4KKworICAgICAgICAoQVBJOjpBdHRhY2ht
ZW50OjpmaWxlU2l6ZUZvckRpc3BsYXkgY29uc3QpOgorCisgICAgICAgIFJldHVybnMgYSBmaWxl
IHNpemUgdG8gYmUgZGlzcGxheWVkIGluIHRoZSBhdHRhY2htZW50IGVsZW1lbnQncyBzdWJ0aXRs
ZS4gVGhpcyByZXR1cm5zIGFuIG9wdGlvbmFsIGZpbGUgc2l6ZSwKKyAgICAgICAgd2hlcmUgYHN0
ZDo6bnVsbG9wdGAgaW5kaWNhdGVzIHRoYXQgdGhlcmUgc2hvdWxkIG5vdCBiZSBhIGZpbGUgc2l6
ZSBzaG93bi4gRm9yIG5vdywgdGhpcyByZXR1cm5zIGBzdGQ6Om51bGxvcHRgCisgICAgICAgIGZv
ciBkaXJlY3RvcnkgZmlsZSB3cmFwcGVycywgdGhvdWdoIGluIHRoZSBmdXR1cmUsIHRoaXMgc2hv
dWxkIGJlIGRvbmUgb25seSBpbiBjYXNlcyB3aGVyZSB3ZSBkb24ndCBpbW1lZGlhdGVseQorICAg
ICAgICBoYXZlIGEgc2l6ZSBlc3RpbWF0ZSBmb3IgdGhlIGZpbGUgd3JhcHBlci4KKworICAgICAg
ICAqIFVJUHJvY2Vzcy9BUEkvQ29jb2EvV0tXZWJWaWV3Lm1tOgorICAgICAgICAoLVtXS1dlYlZp
ZXcgX2luc2VydEF0dGFjaG1lbnRXaXRoRmlsZVdyYXBwZXI6Y29udGVudFR5cGU6b3B0aW9uczpj
b21wbGV0aW9uOl0pOgorCisgICAgICAgIFVzZSBBUEk6OkF0dGFjaG1lbnQ6OnNldEZpbGVXcmFw
cGVyQW5kVXBkYXRlQ29udGVudFR5cGUoKSBpbnN0ZWFkIG9mIHRyeWluZyB0byBjb21lIHVwIHdp
dGggYSBmYWxsYmFjayBVVEkuCisKKyAgICAgICAgKiBVSVByb2Nlc3MvQVBJL0NvY29hL19XS0F0
dGFjaG1lbnQubW06CisgICAgICAgICgtW19XS0F0dGFjaG1lbnQgc2V0RmlsZVdyYXBwZXI6Y29u
dGVudFR5cGU6Y29tcGxldGlvbjpdKToKKworICAgICAgICBVc2UgQVBJOjpBdHRhY2htZW50Ojpz
ZXRGaWxlV3JhcHBlckFuZFVwZGF0ZUNvbnRlbnRUeXBlKCkgaW5zdGVhZCBvZiB0cnlpbmcgdG8g
Y29tZSB1cCB3aXRoIGEgZmFsbGJhY2sgVVRJLgorCisgICAgICAgICogVUlQcm9jZXNzL1dlYlBh
Z2VQcm94eS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2VQcm94eTo6aW5zZXJ0QXR0YWNo
bWVudCk6CisKKyAgICAgICAgUmVtb3ZlIHRoZSBzZXBhcmF0ZSBhcmd1bWVudHMgZm9yIGZpbGUg
c2l6ZSwgY29udGVudCB0eXBlLCBhbmQgZmlsZSBuYW1lLCBhbmQgaW5zdGVhZCBnZXQgdGhlbSBm
cm9tIHRoZSBnaXZlbgorICAgICAgICBBUEkgQXR0YWNobWVudCBvYmplY3QuCisKKyAgICAgICAg
KFdlYktpdDo6V2ViUGFnZVByb3h5Ojp1cGRhdGVBdHRhY2htZW50QXR0cmlidXRlcyk6CisKKyAg
ICAgICAgUmVtb3ZlIHNlcGFyYXRlIGFyZ3VtZW50cyBmb3IgZmlsZSBzaXplLCBjb250ZW50IHR5
cGUgYW5kIGZpbGUgbmFtZSBhbmQganVzdCB0YWtlIGFuIEFQSTo6QXR0YWNobWVudCBpbnN0ZWFk
LgorICAgICAgICBUaGVzZSBzZXBhcmF0ZSBwaWVjZXMgb2YgaW5mb3JtYXRpb24gY2FuIHNpbXBs
eSBiZSBhc2tlZCBmcm9tIHRoZSBBdHRhY2htZW50IGl0c2VsZi4KKworICAgICAgICAqIFVJUHJv
Y2Vzcy9XZWJQYWdlUHJveHkuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFn
ZS5jcHA6CisgICAgICAgIChXZWJLaXQ6OldlYlBhZ2U6Omluc2VydEF0dGFjaG1lbnQpOgorICAg
ICAgICAoV2ViS2l0OjpXZWJQYWdlOjp1cGRhdGVBdHRhY2htZW50QXR0cmlidXRlcyk6CisKKyAg
ICAgICAgQWRqdXN0IHNvbWUgaW50ZXJmYWNlcyBoZXJlIHRvIGFsbG93IHRoZSBkaXNwbGF5ZWQg
ZmlsZSBzaXplIHRvIGJlIG9wdGlvbmFsLgorCisgICAgICAgICogV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UuaDoKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdl
cy5pbjoKKwogMjAxOC0wOC0yNyAgU2lodWkgTGl1ICA8c2lodWlfbGl1QGFwcGxlLmNvbT4KIAog
ICAgICAgICBEb24ndCBsYXVuY2ggbmV0d29yayBwcm9jZXNzIGluIFdlYkNvb2tpZU1hbmFnZXJQ
cm94eTo6c2V0SFRUUENvb2tpZUFjY2VwdFBvbGljeQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvZWRpdGluZy9FZGl0b3IuY3BwIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuY3Bw
CmluZGV4IDE3NmE0YTA1MjhiYzU5ZmFjYmEyZjExM2I1ZTY0MjZkOGYzZDZiMzEuLjRlY2E5MTUw
ZDZhNzk5MGRlYzI3NDFjYTM2ZDRjNjhhOWY1NzU2N2EgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL2VkaXRpbmcvRWRpdG9yLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRv
ci5jcHAKQEAgLTM4NzYsMTEgKzM4NzYsMTEgQEAgdm9pZCBFZGl0b3I6Om5vdGlmeUNsaWVudE9m
QXR0YWNobWVudFVwZGF0ZXMoKQogICAgIH0KIH0KIAotdm9pZCBFZGl0b3I6Omluc2VydEF0dGFj
aG1lbnQoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBBdHRhY2htZW50RGlzcGxheU9w
dGlvbnMmLCB1aW50NjRfdCBmaWxlU2l6ZSwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgc3RkOjpv
cHRpb25hbDxTdHJpbmc+JiYgZXhwbGljaXRDb250ZW50VHlwZSkKK3ZvaWQgRWRpdG9yOjppbnNl
cnRBdHRhY2htZW50KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgQXR0YWNobWVudERp
c3BsYXlPcHRpb25zJiwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4mJiBmaWxlU2l6ZSwgY29uc3Qg
U3RyaW5nJiBmaWxlTmFtZSwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSkKIHsKICAgICBhdXRv
IGF0dGFjaG1lbnQgPSBIVE1MQXR0YWNobWVudEVsZW1lbnQ6OmNyZWF0ZShIVE1MTmFtZXM6OmF0
dGFjaG1lbnRUYWcsIGRvY3VtZW50KCkpOwogICAgIGF0dGFjaG1lbnQtPnNldFVuaXF1ZUlkZW50
aWZpZXIoaWRlbnRpZmllcik7Ci0gICAgYXR0YWNobWVudC0+dXBkYXRlQXR0cmlidXRlcyhmaWxl
U2l6ZSwgV1RGTW92ZShleHBsaWNpdENvbnRlbnRUeXBlKSwgZmlsZU5hbWUpOworICAgIGF0dGFj
aG1lbnQtPnVwZGF0ZUF0dHJpYnV0ZXMoV1RGTW92ZShmaWxlU2l6ZSksIGNvbnRlbnRUeXBlLCBm
aWxlTmFtZSk7CiAKICAgICBhdXRvIGZyYWdtZW50VG9JbnNlcnQgPSBkb2N1bWVudCgpLmNyZWF0
ZURvY3VtZW50RnJhZ21lbnQoKTsKICAgICBmcmFnbWVudFRvSW5zZXJ0LT5hcHBlbmRDaGlsZChh
dHRhY2htZW50LmdldCgpKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRp
dG9yLmggYi9Tb3VyY2UvV2ViQ29yZS9lZGl0aW5nL0VkaXRvci5oCmluZGV4IDFlYzEyMGJlZjMz
ZGE4ZWNhYjVlODk0YWI1NWVmYWFiOTUxMjhjYWMuLjZmNWFiYmFjMmRhOTk2OTllN2E1MmU1MDBi
ZGVkNGJmZTQ2ZDEyODAgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2VkaXRpbmcvRWRpdG9y
LmgKKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9FZGl0b3IuaApAQCAtNTAzLDcgKzUwMyw3
IEBAIHB1YmxpYzoKICAgICBib29sIGlzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm8oKSBjb25z
dCB7IHJldHVybiBtX2lzR2V0dGluZ0RpY3Rpb25hcnlQb3B1cEluZm87IH0KIAogI2lmIEVOQUJM
RShBVFRBQ0hNRU5UX0VMRU1FTlQpCi0gICAgV0VCQ09SRV9FWFBPUlQgdm9pZCBpbnNlcnRBdHRh
Y2htZW50KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgQXR0YWNobWVudERpc3BsYXlP
cHRpb25zJiwgdWludDY0X3QgZmlsZVNpemUsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIHN0ZDo6
b3B0aW9uYWw8U3RyaW5nPiYmIGV4cGxpY2l0Q29udGVudFR5cGUgPSBzdGQ6Om51bGxvcHQpOwor
ICAgIFdFQkNPUkVfRVhQT1JUIHZvaWQgaW5zZXJ0QXR0YWNobWVudChjb25zdCBTdHJpbmcmIGlk
ZW50aWZpZXIsIGNvbnN0IEF0dGFjaG1lbnREaXNwbGF5T3B0aW9ucyYsIHN0ZDo6b3B0aW9uYWw8
dWludDY0X3Q+JiYgZmlsZVNpemUsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIGNvbnN0IFN0cmlu
ZyYgY29udGVudFR5cGUpOwogICAgIHZvaWQgcmVnaXN0ZXJBdHRhY2htZW50SWRlbnRpZmllcihj
b25zdCBTdHJpbmcmLCBjb25zdCBTdHJpbmcmIC8qIGNvbnRlbnRUeXBlICovLCBjb25zdCBTdHJp
bmcmIC8qIHByZWZlcnJlZEZpbGVOYW1lICovLCBSZWY8U2hhcmVkQnVmZmVyPiYmKTsKICAgICB2
b2lkIHJlZ2lzdGVyQXR0YWNobWVudElkZW50aWZpZXIoY29uc3QgU3RyaW5nJiwgY29uc3QgU3Ry
aW5nJiAvKiBjb250ZW50VHlwZSAqLywgY29uc3QgU3RyaW5nJiAvKiBmaWxlUGF0aCAqLyk7CiAg
ICAgdm9pZCBjbG9uZUF0dGFjaG1lbnREYXRhKGNvbnN0IFN0cmluZyYgZnJvbUlkZW50aWZpZXIs
IGNvbnN0IFN0cmluZyYgdG9JZGVudGlmaWVyKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2VkaXRpbmcvY29jb2EvV2ViQ29udGVudFJlYWRlckNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUv
ZWRpdGluZy9jb2NvYS9XZWJDb250ZW50UmVhZGVyQ29jb2EubW0KaW5kZXggNjEwOWMzODE1YTA3
NWYzZjkxMzgwMDgwOGUzODBkMmZjYzhkZTFlMS4uZTg4NTA4NDMwMTliMTc2ODkwZGE2MDY1ZmE1
ZjAwNDM0YzQ2Nzg1ZCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2NvYS9X
ZWJDb250ZW50UmVhZGVyQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvZWRpdGluZy9jb2Nv
YS9XZWJDb250ZW50UmVhZGVyQ29jb2EubW0KQEAgLTcwMyw5ICs3MDMsMTggQEAgYm9vbCBXZWJD
b250ZW50UmVhZGVyOjpyZWFkRmlsZVBhdGhzKGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocykK
ICAgICAgICAgZm9yIChhdXRvJiBwYXRoIDogcGF0aHMpIHsKICAgICAgICAgICAgIGF1dG8gYXR0
YWNobWVudCA9IEhUTUxBdHRhY2htZW50RWxlbWVudDo6Y3JlYXRlKEhUTUxOYW1lczo6YXR0YWNo
bWVudFRhZywgZG9jdW1lbnQpOwogICAgICAgICAgICAgaWYgKHN1cHBvcnRzQ2xpZW50U2lkZUF0
dGFjaG1lbnREYXRhKGZyYW1lKSkgewotICAgICAgICAgICAgICAgIGxvbmcgbG9uZyBmaWxlU2l6
ZSB7IDAgfTsKLSAgICAgICAgICAgICAgICBGaWxlU3lzdGVtOjpnZXRGaWxlU2l6ZShwYXRoLCBm
aWxlU2l6ZSk7Ci0gICAgICAgICAgICAgICAgYXV0byBjb250ZW50VHlwZSA9IEZpbGU6OmNvbnRl
bnRUeXBlRm9yRmlsZShwYXRoKTsKKyAgICAgICAgICAgICAgICBTdHJpbmcgY29udGVudFR5cGU7
CisgICAgICAgICAgICAgICAgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZmlsZVNpemVGb3JEaXNw
bGF5OworICAgICAgICAgICAgICAgIGlmIChGaWxlU3lzdGVtOjpmaWxlSXNEaXJlY3RvcnkocGF0
aCwgRmlsZVN5c3RlbTo6U2hvdWxkRm9sbG93U3ltYm9saWNMaW5rczo6WWVzKSkKKyAgICAgICAg
ICAgICAgICAgICAgY29udGVudFR5cGUgPSBrVVRUeXBlRGlyZWN0b3J5OworICAgICAgICAgICAg
ICAgIGVsc2UgeworICAgICAgICAgICAgICAgICAgICBsb25nIGxvbmcgZmlsZVNpemU7CisgICAg
ICAgICAgICAgICAgICAgIEZpbGVTeXN0ZW06OmdldEZpbGVTaXplKHBhdGgsIGZpbGVTaXplKTsK
KyAgICAgICAgICAgICAgICAgICAgZmlsZVNpemVGb3JEaXNwbGF5ID0gZmlsZVNpemU7CisgICAg
ICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlID0gRmlsZTo6Y29udGVudFR5cGVGb3JGaWxlKHBh
dGgpOworICAgICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGUuaXNFbXB0eSgpKQorICAg
ICAgICAgICAgICAgICAgICAgICAgY29udGVudFR5cGUgPSBrVVRUeXBlRGF0YTsKKyAgICAgICAg
ICAgICAgICB9CiAgICAgICAgICAgICAgICAgZnJhbWUuZWRpdG9yKCkucmVnaXN0ZXJBdHRhY2ht
ZW50SWRlbnRpZmllcihhdHRhY2htZW50LT5lbnN1cmVVbmlxdWVJZGVudGlmaWVyKCksIGNvbnRl
bnRUeXBlLCBwYXRoKTsKICAgICAgICAgICAgICAgICBpZiAoY29udGVudFR5cGVJc1N1aXRhYmxl
Rm9ySW5saW5lSW1hZ2VSZXByZXNlbnRhdGlvbihjb250ZW50VHlwZSkpIHsKICAgICAgICAgICAg
ICAgICAgICAgYXV0byBpbWFnZSA9IEhUTUxJbWFnZUVsZW1lbnQ6OmNyZWF0ZShkb2N1bWVudCk7
CkBAIC03MTMsNyArNzIyLDcgQEAgYm9vbCBXZWJDb250ZW50UmVhZGVyOjpyZWFkRmlsZVBhdGhz
KGNvbnN0IFZlY3RvcjxTdHJpbmc+JiBwYXRocykKICAgICAgICAgICAgICAgICAgICAgaW1hZ2Ut
PnNldEF0dGFjaG1lbnRFbGVtZW50KFdURk1vdmUoYXR0YWNobWVudCkpOwogICAgICAgICAgICAg
ICAgICAgICBmcmFnbWVudC0+YXBwZW5kQ2hpbGQoaW1hZ2UpOwogICAgICAgICAgICAgICAgIH0g
ZWxzZSB7Ci0gICAgICAgICAgICAgICAgICAgIGF0dGFjaG1lbnQtPnVwZGF0ZUF0dHJpYnV0ZXMo
ZmlsZVNpemUsIGNvbnRlbnRUeXBlLCBGaWxlU3lzdGVtOjpwYXRoR2V0RmlsZU5hbWUocGF0aCkp
OworICAgICAgICAgICAgICAgICAgICBhdHRhY2htZW50LT51cGRhdGVBdHRyaWJ1dGVzKFdURk1v
dmUoZmlsZVNpemVGb3JEaXNwbGF5KSwgY29udGVudFR5cGUsIEZpbGVTeXN0ZW06OnBhdGhHZXRG
aWxlTmFtZShwYXRoKSk7CiAgICAgICAgICAgICAgICAgICAgIGZyYWdtZW50LT5hcHBlbmRDaGls
ZChhdHRhY2htZW50KTsKICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICB9IGVsc2Ugewpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXR0YWNobWVudEVsZW1lbnQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXR0YWNobWVudEVsZW1lbnQuY3BwCmluZGV4IDQw
NWNiM2ViOWUyMTdiZTM5MjY1NzMzYmVjN2M1YjYwODJhOWVkYTEuLjNlZGJjNTFkYWQ4ODllZjZm
ODMwNGIwMjFhMWQ1MjU0Y2E3Y2Q4NjYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
SFRNTEF0dGFjaG1lbnRFbGVtZW50LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL0hUTUxB
dHRhY2htZW50RWxlbWVudC5jcHAKQEAgLTE0NCwxNSArMTQ0LDIzIEBAIFN0cmluZyBIVE1MQXR0
YWNobWVudEVsZW1lbnQ6OmF0dGFjaG1lbnRQYXRoKCkgY29uc3QKICAgICByZXR1cm4gYXR0cmli
dXRlV2l0aG91dFN5bmNocm9uaXphdGlvbih3ZWJraXRhdHRhY2htZW50cGF0aEF0dHIpOwogfQog
Ci12b2lkIEhUTUxBdHRhY2htZW50RWxlbWVudDo6dXBkYXRlQXR0cmlidXRlcyh1aW50NjRfdCBm
aWxlU2l6ZSwgc3RkOjpvcHRpb25hbDxTdHJpbmc+JiYgbmV3Q29udGVudFR5cGUsIHN0ZDo6b3B0
aW9uYWw8U3RyaW5nPiYmIG5ld0ZpbGVuYW1lKQordm9pZCBIVE1MQXR0YWNobWVudEVsZW1lbnQ6
OnVwZGF0ZUF0dHJpYnV0ZXMoc3RkOjpvcHRpb25hbDx1aW50NjRfdD4mJiBuZXdGaWxlU2l6ZSwg
c3RkOjpvcHRpb25hbDxTdHJpbmc+JiYgbmV3Q29udGVudFR5cGUsIHN0ZDo6b3B0aW9uYWw8U3Ry
aW5nPiYmIG5ld0ZpbGVuYW1lKQogewogICAgIGlmIChuZXdGaWxlbmFtZSkKICAgICAgICAgc2V0
QXR0cmlidXRlV2l0aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OnRpdGxlQXR0ciwgKm5l
d0ZpbGVuYW1lKTsKKyAgICBlbHNlCisgICAgICAgIHJlbW92ZUF0dHJpYnV0ZShIVE1MTmFtZXM6
OnRpdGxlQXR0cik7CiAKICAgICBpZiAobmV3Q29udGVudFR5cGUpCiAgICAgICAgIHNldEF0dHJp
YnV0ZVdpdGhvdXRTeW5jaHJvbml6YXRpb24oSFRNTE5hbWVzOjp0eXBlQXR0ciwgKm5ld0NvbnRl
bnRUeXBlKTsKKyAgICBlbHNlCisgICAgICAgIHJlbW92ZUF0dHJpYnV0ZShIVE1MTmFtZXM6OnR5
cGVBdHRyKTsKKworICAgIGlmIChuZXdGaWxlU2l6ZSkKKyAgICAgICAgc2V0QXR0cmlidXRlV2l0
aG91dFN5bmNocm9uaXphdGlvbihIVE1MTmFtZXM6OnN1YnRpdGxlQXR0ciwgZmlsZVNpemVEZXNj
cmlwdGlvbigqbmV3RmlsZVNpemUpKTsKKyAgICBlbHNlCisgICAgICAgIHJlbW92ZUF0dHJpYnV0
ZShIVE1MTmFtZXM6OnN1YnRpdGxlQXR0cik7CiAKLSAgICBzZXRBdHRyaWJ1dGVXaXRob3V0U3lu
Y2hyb25pemF0aW9uKEhUTUxOYW1lczo6c3VidGl0bGVBdHRyLCBmaWxlU2l6ZURlc2NyaXB0aW9u
KGZpbGVTaXplKSk7CiAgICAgaWYgKGF1dG8qIHJlbmRlcmVyID0gdGhpcy0+cmVuZGVyZXIoKSkK
ICAgICAgICAgcmVuZGVyZXItPmludmFsaWRhdGUoKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvSFRNTEF0dGFjaG1lbnRFbGVtZW50LmggYi9Tb3VyY2UvV2ViQ29yZS9odG1s
L0hUTUxBdHRhY2htZW50RWxlbWVudC5oCmluZGV4IDViNjQxOTJiYzU2Zjk0YTM2ZWMzZDEwYTg4
MjU3Mzc1ZTgzZjNiODUuLjYxZWExNWE5MjhmMGJhYTQ1MmU5ZGZmZTE3OWFjZjRlZWQzMjc2MmQg
MTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvSFRNTEF0dGFjaG1lbnRFbGVtZW50LmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9IVE1MQXR0YWNobWVudEVsZW1lbnQuaApAQCAtNDks
NyArNDksNyBAQCBwdWJsaWM6CiAgICAgY29uc3QgU3RyaW5nJiB1bmlxdWVJZGVudGlmaWVyKCkg
Y29uc3QgeyByZXR1cm4gbV91bmlxdWVJZGVudGlmaWVyOyB9CiAgICAgdm9pZCBzZXRVbmlxdWVJ
ZGVudGlmaWVyKGNvbnN0IFN0cmluZyYgdW5pcXVlSWRlbnRpZmllcikgeyBtX3VuaXF1ZUlkZW50
aWZpZXIgPSB1bmlxdWVJZGVudGlmaWVyOyB9CiAKLSAgICBXRUJDT1JFX0VYUE9SVCB2b2lkIHVw
ZGF0ZUF0dHJpYnV0ZXModWludDY0X3QgZmlsZVNpemUsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiYm
IG5ld0NvbnRlbnRUeXBlID0gc3RkOjpudWxsb3B0LCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4mJiBu
ZXdGaWxlbmFtZSA9IHN0ZDo6bnVsbG9wdCk7CisgICAgV0VCQ09SRV9FWFBPUlQgdm9pZCB1cGRh
dGVBdHRyaWJ1dGVzKHN0ZDo6b3B0aW9uYWw8dWludDY0X3Q+JiYgbmV3RmlsZVNpemUgPSBzdGQ6
Om51bGxvcHQsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiYmIG5ld0NvbnRlbnRUeXBlID0gc3RkOjpu
dWxsb3B0LCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4mJiBuZXdGaWxlbmFtZSA9IHN0ZDo6bnVsbG9w
dCk7CiAKICAgICBJbnNlcnRlZEludG9BbmNlc3RvclJlc3VsdCBpbnNlcnRlZEludG9BbmNlc3Rv
cihJbnNlcnRpb25UeXBlLCBDb250YWluZXJOb2RlJikgZmluYWw7CiAgICAgdm9pZCByZW1vdmVk
RnJvbUFuY2VzdG9yKFJlbW92YWxUeXBlLCBDb250YWluZXJOb2RlJikgZmluYWw7CmRpZmYgLS1n
aXQgYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQXR0YWNobWVudC5jcHAgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQXR0YWNobWVudC5jcHAKaW5kZXggYjYxNTA0ODNk
ZTVmNjZhZGVlN2NjNmY0YWJmZDBlMDM2NWI2YTQzMi4uMDczYTQ0Y2U0NDg2Y2FmZDYyZTI1Y2Jk
ZThlOWZiYzkzYmNjN2Y0NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJ
L0FQSUF0dGFjaG1lbnQuY3BwCisrKyBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElB
dHRhY2htZW50LmNwcApAQCAtNTcsMTcgKzU3LDE0IEBAIHZvaWQgQXR0YWNobWVudDo6c2V0RGlz
cGxheU9wdGlvbnMoV2ViQ29yZTo6QXR0YWNobWVudERpc3BsYXlPcHRpb25zIG9wdGlvbnMsIEZ1
CiAgICAgICAgIGNhbGxiYWNrKFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcjo6T3duZXJXYXNJ
bnZhbGlkYXRlZCk7CiB9CiAKLXZvaWQgQXR0YWNobWVudDo6dXBkYXRlQXR0cmlidXRlcyh1aW50
NjRfdCBmaWxlU2l6ZSwgY29uc3QgV1RGOjpTdHJpbmcmIG5ld0NvbnRlbnRUeXBlLCBjb25zdCBX
VEY6OlN0cmluZyYgbmV3RmlsZW5hbWUsIEZ1bmN0aW9uPHZvaWQoV2ViS2l0OjpDYWxsYmFja0Jh
c2U6OkVycm9yKT4mJiBjYWxsYmFjaykKK3ZvaWQgQXR0YWNobWVudDo6dXBkYXRlQXR0cmlidXRl
cyhGdW5jdGlvbjx2b2lkKFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2sp
CiB7Ci0gICAgc2V0Q29udGVudFR5cGUobmV3Q29udGVudFR5cGUpOwotICAgIHNldEZpbGVQYXRo
KHsgfSk7Ci0KLSAgICBhdXRvIG9wdGlvbmFsTmV3Q29udGVudFR5cGUgPSBuZXdDb250ZW50VHlw
ZS5pc051bGwoKSA/IHN0ZDo6bnVsbG9wdCA6IHN0ZDo6b3B0aW9uYWw8V1RGOjpTdHJpbmc+IHsg
bmV3Q29udGVudFR5cGUgfTsKLSAgICBhdXRvIG9wdGlvbmFsTmV3RmlsZW5hbWUgPSBuZXdGaWxl
bmFtZS5pc051bGwoKSA/IHN0ZDo6bnVsbG9wdCA6IHN0ZDo6b3B0aW9uYWw8V1RGOjpTdHJpbmc+
IHsgbmV3RmlsZW5hbWUgfTsKLSAgICBpZiAobV93ZWJQYWdlKQotICAgICAgICBtX3dlYlBhZ2Ut
PnVwZGF0ZUF0dGFjaG1lbnRBdHRyaWJ1dGVzKG1faWRlbnRpZmllciwgZmlsZVNpemUsIFdURk1v
dmUob3B0aW9uYWxOZXdDb250ZW50VHlwZSksIFdURk1vdmUob3B0aW9uYWxOZXdGaWxlbmFtZSks
IFdURk1vdmUoY2FsbGJhY2spKTsKLSAgICBlbHNlCisgICAgaWYgKCFtX3dlYlBhZ2UpIHsKICAg
ICAgICAgY2FsbGJhY2soV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yOjpPd25lcldhc0ludmFs
aWRhdGVkKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIG1fd2ViUGFnZS0+dXBkYXRl
QXR0YWNobWVudEF0dHJpYnV0ZXMoKnRoaXMsIFdURk1vdmUoY2FsbGJhY2spKTsKIH0KIAogdm9p
ZCBBdHRhY2htZW50OjppbnZhbGlkYXRlKCkKQEAgLTkzLDYgKzkwLDExIEBAIFdURjo6U3RyaW5n
IEF0dGFjaG1lbnQ6OmZpbGVOYW1lKCkgY29uc3QKICAgICByZXR1cm4geyB9OwogfQogCitzdGQ6
Om9wdGlvbmFsPHVpbnQ2NF90PiBBdHRhY2htZW50OjpmaWxlU2l6ZUZvckRpc3BsYXkoKSBjb25z
dAoreworICAgIHJldHVybiBzdGQ6Om51bGxvcHQ7Cit9CisKICNlbmRpZiAvLyAhUExBVEZPUk0o
Q09DT0EpCiAKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9BUElB
dHRhY2htZW50LmggYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQVBJQXR0YWNobWVudC5o
CmluZGV4IDcxNzQxZmY0MTM0ZGZhNDVlMmFkZDc3MjQ4ZDc4OTk3MWY1NDYzODQuLjg0NDNmNDMw
YmM5MzYzYjkzYjA4YTM3YTM0MzIxMGYwYmNjMmRmYzQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJL
aXQvVUlQcm9jZXNzL0FQSS9BUElBdHRhY2htZW50LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVBy
b2Nlc3MvQVBJL0FQSUF0dGFjaG1lbnQuaApAQCAtNTYsNyArNTYsNyBAQCBwdWJsaWM6CiAKICAg
ICBjb25zdCBXVEY6OlN0cmluZyYgaWRlbnRpZmllcigpIGNvbnN0IHsgcmV0dXJuIG1faWRlbnRp
ZmllcjsgfQogICAgIHZvaWQgc2V0RGlzcGxheU9wdGlvbnMoV2ViQ29yZTo6QXR0YWNobWVudERp
c3BsYXlPcHRpb25zLCBGdW5jdGlvbjx2b2lkKFdlYktpdDo6Q2FsbGJhY2tCYXNlOjpFcnJvcik+
JiYpOwotICAgIHZvaWQgdXBkYXRlQXR0cmlidXRlcyh1aW50NjRfdCBmaWxlU2l6ZSwgY29uc3Qg
V1RGOjpTdHJpbmcmIG5ld0NvbnRlbnRUeXBlLCBjb25zdCBXVEY6OlN0cmluZyYgbmV3RmlsZW5h
bWUsIEZ1bmN0aW9uPHZvaWQoV2ViS2l0OjpDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7CisgICAg
dm9pZCB1cGRhdGVBdHRyaWJ1dGVzKEZ1bmN0aW9uPHZvaWQoV2ViS2l0OjpDYWxsYmFja0Jhc2U6
OkVycm9yKT4mJik7CiAKICAgICB2b2lkIGludmFsaWRhdGUoKTsKICAgICBib29sIGlzVmFsaWQo
KSBjb25zdCB7IHJldHVybiAhIW1fd2ViUGFnZTsgfQpAQCAtNjQsNiArNjQsNyBAQCBwdWJsaWM6
CiAjaWYgUExBVEZPUk0oQ09DT0EpCiAgICAgTlNGaWxlV3JhcHBlciAqZmlsZVdyYXBwZXIoKSBj
b25zdCB7IHJldHVybiBtX2ZpbGVXcmFwcGVyLmdldCgpOyB9CiAgICAgdm9pZCBzZXRGaWxlV3Jh
cHBlcihOU0ZpbGVXcmFwcGVyICpmaWxlV3JhcHBlcikgeyBtX2ZpbGVXcmFwcGVyID0gZmlsZVdy
YXBwZXI7IH0KKyAgICB2b2lkIHNldEZpbGVXcmFwcGVyQW5kVXBkYXRlQ29udGVudFR5cGUoTlNG
aWxlV3JhcHBlciAqLCBOU1N0cmluZyAqY29udGVudFR5cGUpOwogICAgIFdURjo6U3RyaW5nIHV0
aVR5cGUoKSBjb25zdDsKICNlbmRpZgogICAgIFdURjo6U3RyaW5nIG1pbWVUeXBlKCkgY29uc3Q7
CkBAIC03OCw2ICs3OSw4IEBAIHB1YmxpYzoKICAgICBJbnNlcnRpb25TdGF0ZSBpbnNlcnRpb25T
dGF0ZSgpIGNvbnN0IHsgcmV0dXJuIG1faW5zZXJ0aW9uU3RhdGU7IH0KICAgICB2b2lkIHNldElu
c2VydGlvblN0YXRlKEluc2VydGlvblN0YXRlIHN0YXRlKSB7IG1faW5zZXJ0aW9uU3RhdGUgPSBz
dGF0ZTsgfQogCisgICAgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZmlsZVNpemVGb3JEaXNwbGF5
KCkgY29uc3Q7CisKIHByaXZhdGU6CiAgICAgZXhwbGljaXQgQXR0YWNobWVudChjb25zdCBXVEY6
OlN0cmluZyYgaWRlbnRpZmllciwgV2ViS2l0OjpXZWJQYWdlUHJveHkmKTsKIApkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL0FQSUF0dGFjaG1lbnRDb2NvYS5t
bSBiL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9BUElBdHRhY2htZW50Q29jb2Eu
bW0KaW5kZXggOWU4YjU4OGZlZDJhYWVkMDA0OWMwZDUwZTMxYWM0YzQxYTA1ZDUyMC4uNTE3NDBk
N2UyMmZmYWRjMjQ2NzY0MDIxNWNmYzgwYzk3MWI1ZTk1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dl
YktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL0FQSUF0dGFjaG1lbnRDb2NvYS5tbQorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvQVBJQXR0YWNobWVudENvY29hLm1tCkBAIC03
NCw0ICs3NCwzNCBAQCBXVEY6OlN0cmluZyBBdHRhY2htZW50OjpmaWxlTmFtZSgpIGNvbnN0CiAg
ICAgcmV0dXJuIFttX2ZpbGVXcmFwcGVyIHByZWZlcnJlZEZpbGVuYW1lXTsKIH0KIAordm9pZCBB
dHRhY2htZW50OjpzZXRGaWxlV3JhcHBlckFuZFVwZGF0ZUNvbnRlbnRUeXBlKE5TRmlsZVdyYXBw
ZXIgKmZpbGVXcmFwcGVyLCBOU1N0cmluZyAqY29udGVudFR5cGUpCit7CisgICAgaWYgKCFjb250
ZW50VHlwZS5sZW5ndGgpIHsKKyAgICAgICAgaWYgKGZpbGVXcmFwcGVyLmRpcmVjdG9yeSkKKyAg
ICAgICAgICAgIGNvbnRlbnRUeXBlID0gKE5TU3RyaW5nICopa1VUVHlwZURpcmVjdG9yeTsKKyAg
ICAgICAgZWxzZSBpZiAoZmlsZVdyYXBwZXIucmVndWxhckZpbGUpIHsKKyAgICAgICAgICAgIGlm
IChOU1N0cmluZyAqcGF0aEV4dGVuc2lvbiA9IChmaWxlV3JhcHBlci5maWxlbmFtZS5sZW5ndGgg
PyBmaWxlV3JhcHBlci5maWxlbmFtZSA6IGZpbGVXcmFwcGVyLnByZWZlcnJlZEZpbGVuYW1lKS5w
YXRoRXh0ZW5zaW9uKQorICAgICAgICAgICAgICAgIGNvbnRlbnRUeXBlID0gV2ViQ29yZTo6TUlN
RVR5cGVSZWdpc3RyeTo6Z2V0TUlNRVR5cGVGb3JFeHRlbnNpb24ocGF0aEV4dGVuc2lvbik7Cisg
ICAgICAgICAgICBpZiAoIWNvbnRlbnRUeXBlLmxlbmd0aCkKKyAgICAgICAgICAgICAgICBjb250
ZW50VHlwZSA9IChOU1N0cmluZyAqKWtVVFR5cGVEYXRhOworICAgICAgICB9CisgICAgfQorCisg
ICAgc2V0Q29udGVudFR5cGUoY29udGVudFR5cGUpOworICAgIHNldEZpbGVXcmFwcGVyKGZpbGVX
cmFwcGVyKTsKK30KKworc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gQXR0YWNobWVudDo6ZmlsZVNp
emVGb3JEaXNwbGF5KCkgY29uc3QKK3sKKyAgICBpZiAoIVttX2ZpbGVXcmFwcGVyIGlzUmVndWxh
ckZpbGVdKSB7CisgICAgICAgIC8vIEZJWE1FOiBXZSBzaG91bGQgZGlzcGxheSBhIHNpemUgZXN0
aW1hdGUgZm9yIGRpcmVjdG9yeS10eXBlIGZpbGUgd3JhcHBlcnMuCisgICAgICAgIHJldHVybiBz
dGQ6Om51bGxvcHQ7CisgICAgfQorCisgICAgaWYgKGF1dG8gZmlsZVNpemUgPSBbW21fZmlsZVdy
YXBwZXIgZmlsZUF0dHJpYnV0ZXNdW05TRmlsZVNpemVdIHVuc2lnbmVkTG9uZ0xvbmdWYWx1ZV0p
CisgICAgICAgIHJldHVybiBmaWxlU2l6ZTsKKworICAgIHJldHVybiBbbV9maWxlV3JhcHBlciBy
ZWd1bGFyRmlsZUNvbnRlbnRzXS5sZW5ndGg7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEFQSQpkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbSBi
L1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNzL0FQSS9Db2NvYS9XS1dlYlZpZXcubW0KaW5kZXggN2I2
Y2NiZTJkMGQ1YzE3ZDRmZTUyMDZhNjM2YzU2ZTUyYTY5ZTY1ZC4uMmZhNzgzZmZlYTJhNTMxYTk1
MmIxYzM0NjQ1NWJlMTI5MTAyMTJkYSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL1dLV2ViVmlldy5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvV0tXZWJWaWV3Lm1tCkBAIC00NDU0LDE4ICs0NDU0LDggQEAgV0VCQ09SRV9DT01N
QU5EKHlhbmtBbmRTZWxlY3QpCiAgICAgYXV0byBpZGVudGlmaWVyID0gY3JlYXRlQ2Fub25pY2Fs
VVVJRFN0cmluZygpOwogICAgIGF1dG8gY29yZU9wdGlvbnMgPSBvcHRpb25zID8gb3B0aW9ucy5j
b3JlRGlzcGxheU9wdGlvbnMgOiBXZWJDb3JlOjpBdHRhY2htZW50RGlzcGxheU9wdGlvbnMgeyB9
OwogICAgIGF1dG8gYXR0YWNobWVudCA9IEFQSTo6QXR0YWNobWVudDo6Y3JlYXRlKGlkZW50aWZp
ZXIsICpfcGFnZSk7Ci0gICAgYXR0YWNobWVudC0+c2V0RmlsZVdyYXBwZXIoZmlsZVdyYXBwZXIp
OwotCi0gICAgaWYgKCFjb250ZW50VHlwZS5sZW5ndGgpIHsKLSAgICAgICAgaWYgKE5TU3RyaW5n
ICpwYXRoRXh0ZW5zaW9uID0gKGZpbGVXcmFwcGVyLmZpbGVuYW1lLmxlbmd0aCA/IGZpbGVXcmFw
cGVyLmZpbGVuYW1lIDogZmlsZVdyYXBwZXIucHJlZmVycmVkRmlsZW5hbWUpLnBhdGhFeHRlbnNp
b24pCi0gICAgICAgICAgICBjb250ZW50VHlwZSA9IFdlYkNvcmU6Ok1JTUVUeXBlUmVnaXN0cnk6
OmdldE1JTUVUeXBlRm9yRXh0ZW5zaW9uKHBhdGhFeHRlbnNpb24pOwotICAgIH0KLQotICAgIGF1
dG8gZmlsZVNpemUgPSBbW1tmaWxlV3JhcHBlciBmaWxlQXR0cmlidXRlc10gb2JqZWN0Rm9yS2V5
Ok5TRmlsZVNpemVdIHVuc2lnbmVkTG9uZ0xvbmdWYWx1ZV07Ci0gICAgaWYgKCFmaWxlU2l6ZSAm
JiBmaWxlV3JhcHBlci5yZWd1bGFyRmlsZSkKLSAgICAgICAgZmlsZVNpemUgPSBmaWxlV3JhcHBl
ci5yZWd1bGFyRmlsZUNvbnRlbnRzLmxlbmd0aDsKLQotICAgIF9wYWdlLT5pbnNlcnRBdHRhY2ht
ZW50KGF0dGFjaG1lbnQuY29weVJlZigpLCBjb3JlT3B0aW9ucywgZmlsZVNpemUsIFtmaWxlV3Jh
cHBlciBwcmVmZXJyZWRGaWxlbmFtZV0sIGNvbnRlbnRUeXBlLmxlbmd0aCA/IHN0ZDo6b3B0aW9u
YWw8U3RyaW5nPiB7IGNvbnRlbnRUeXBlIH0gOiBzdGQ6Om51bGxvcHQsIFtjYXB0dXJlZEhhbmRs
ZXIgPSBtYWtlQmxvY2tQdHIoY29tcGxldGlvbkhhbmRsZXIpXSAoV2ViS2l0OjpDYWxsYmFja0Jh
c2U6OkVycm9yIGVycm9yKSB7CisgICAgYXR0YWNobWVudC0+c2V0RmlsZVdyYXBwZXJBbmRVcGRh
dGVDb250ZW50VHlwZShmaWxlV3JhcHBlciwgY29udGVudFR5cGUpOworICAgIF9wYWdlLT5pbnNl
cnRBdHRhY2htZW50KGF0dGFjaG1lbnQuY29weVJlZigpLCBjb3JlT3B0aW9ucywgW2NhcHR1cmVk
SGFuZGxlciA9IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIChXZWJLaXQ6OkNhbGxi
YWNrQmFzZTo6RXJyb3IgZXJyb3IpIHsKICAgICAgICAgaWYgKGNhcHR1cmVkSGFuZGxlcikKICAg
ICAgICAgICAgIGNhcHR1cmVkSGFuZGxlcihlcnJvciA9PSBXZWJLaXQ6OkNhbGxiYWNrQmFzZTo6
RXJyb3I6Ok5vbmUpOwogICAgIH0pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9VSVByb2Nl
c3MvQVBJL0NvY29hL19XS0F0dGFjaG1lbnQubW0gYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9B
UEkvQ29jb2EvX1dLQXR0YWNobWVudC5tbQppbmRleCA3ZGY0OGIyOTU1ZGFkOWVjZGM3ZTJlZGU2
NjJhNTFhZjBiZjRmZDNlLi4wY2EzZDUzOTM4NjE1NWM0YWE0MGE0OWRjMzg5NDU3MzYwYjYyZTRi
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXR0YWNo
bWVudC5tbQorKysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9BUEkvQ29jb2EvX1dLQXR0YWNo
bWVudC5tbQpAQCAtMTU3LDE3ICsxNTcsMTEgQEAgc3RhdGljIGNvbnN0IE5TSW50ZWdlciBJbnZh
bGlkQXR0YWNobWVudEVycm9yQ29kZSA9IDI7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAKLSAg
ICBhdXRvIGZpbGVTaXplID0gW2ZpbGVXcmFwcGVyLmZpbGVBdHRyaWJ1dGVzW05TRmlsZVNpemVd
IHVuc2lnbmVkTG9uZ0xvbmdWYWx1ZV07Ci0gICAgaWYgKCFmaWxlU2l6ZSAmJiBmaWxlV3JhcHBl
ci5yZWd1bGFyRmlsZSkKLSAgICAgICAgZmlsZVNpemUgPSBmaWxlV3JhcHBlci5yZWd1bGFyRmls
ZUNvbnRlbnRzLmxlbmd0aDsKLQotICAgIGlmICghY29udGVudFR5cGUubGVuZ3RoKSB7Ci0gICAg
ICAgIGlmIChOU1N0cmluZyAqcGF0aEV4dGVuc2lvbiA9IChmaWxlV3JhcHBlci5maWxlbmFtZS5s
ZW5ndGggPyBmaWxlV3JhcHBlci5maWxlbmFtZSA6IGZpbGVXcmFwcGVyLnByZWZlcnJlZEZpbGVu
YW1lKS5wYXRoRXh0ZW5zaW9uKQotICAgICAgICAgICAgY29udGVudFR5cGUgPSBXZWJDb3JlOjpN
SU1FVHlwZVJlZ2lzdHJ5OjpnZXRNSU1FVHlwZUZvckV4dGVuc2lvbihwYXRoRXh0ZW5zaW9uKTsK
LSAgICB9Ci0KLSAgICBfYXR0YWNobWVudC0+c2V0RmlsZVdyYXBwZXIoZmlsZVdyYXBwZXIpOwot
ICAgIF9hdHRhY2htZW50LT51cGRhdGVBdHRyaWJ1dGVzKGZpbGVTaXplLCBjb250ZW50VHlwZSwg
ZmlsZVdyYXBwZXIucHJlZmVycmVkRmlsZW5hbWUsIFtjYXB0dXJlZEJsb2NrID0gbWFrZUJsb2Nr
UHRyKGNvbXBsZXRpb25IYW5kbGVyKV0gKGF1dG8gZXJyb3IpIHsKKyAgICAvLyBUaGlzIGZpbGUg
cGF0aCBtZW1iZXIgaXMgb25seSBwb3B1bGF0ZWQgd2hlbiB0aGUgYXR0YWNobWVudCBpcyBnZW5l
cmF0ZWQgdXBvbiBkcm9wcGluZyBmaWxlcy4gV2hlbiBkYXRhIGlzIHNwZWNpZmllZCB2aWEgTlNG
aWxlV3JhcHBlcgorICAgIC8vIGZyb20gdGhlIFNQSSBjbGllbnQsIHRoZSBjb3JyZXNwb25kaW5n
IGZpbGUgcGF0aCBvZiB0aGUgZGF0YSBpcyB1bmtub3duLCBpZiBpdCBldmVuIGV4aXN0cyBhdCBh
bGwuCisgICAgX2F0dGFjaG1lbnQtPnNldEZpbGVQYXRoKHsgfSk7CisgICAgX2F0dGFjaG1lbnQt
PnNldEZpbGVXcmFwcGVyQW5kVXBkYXRlQ29udGVudFR5cGUoZmlsZVdyYXBwZXIsIGNvbnRlbnRU
eXBlKTsKKyAgICBfYXR0YWNobWVudC0+dXBkYXRlQXR0cmlidXRlcyhbY2FwdHVyZWRCbG9jayA9
IG1ha2VCbG9ja1B0cihjb21wbGV0aW9uSGFuZGxlcildIChhdXRvIGVycm9yKSB7CiAgICAgICAg
IGlmICghY2FwdHVyZWRCbG9jaykKICAgICAgICAgICAgIHJldHVybjsKIApkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcCBiL1NvdXJjZS9XZWJLaXQv
VUlQcm9jZXNzL1dlYlBhZ2VQcm94eS5jcHAKaW5kZXggYmY2Y2YwZmRmNTFiN2MyNmQzMGM5NDdh
MGQwMTQ3Yjc1ZGJjNjE3Yi4uZmE4MTI0YzYzNjc1YThhYzJlZjg1NjhiNzAzZjY2YmEzYzM0ZDU5
OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmNwcAor
KysgYi9Tb3VyY2UvV2ViS2l0L1VJUHJvY2Vzcy9XZWJQYWdlUHJveHkuY3BwCkBAIC03NzUxLDIx
ICs3NzUxLDE3IEBAIFJlZlB0cjxBUEk6OkF0dGFjaG1lbnQ+IFdlYlBhZ2VQcm94eTo6YXR0YWNo
bWVudEZvcklkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBpZGVuCiAgICAgcmV0dXJuIG1fYXR0YWNo
bWVudElkZW50aWZpZXJUb0F0dGFjaG1lbnRNYXAuZ2V0KGlkZW50aWZpZXIpOwogfQogCi12b2lk
IFdlYlBhZ2VQcm94eTo6aW5zZXJ0QXR0YWNobWVudChSZWY8QVBJOjpBdHRhY2htZW50PiYmIGF0
dGFjaG1lbnQsIGNvbnN0IEF0dGFjaG1lbnREaXNwbGF5T3B0aW9ucyYgb3B0aW9ucywgdWludDY0
X3QgZmlsZVNpemUsIGNvbnN0IFN0cmluZyYgZmlsZW5hbWUsIHN0ZDo6b3B0aW9uYWw8U3RyaW5n
PiBjb250ZW50VHlwZSwgRnVuY3Rpb248dm9pZChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJiBjYWxs
YmFjaykKK3ZvaWQgV2ViUGFnZVByb3h5OjppbnNlcnRBdHRhY2htZW50KFJlZjxBUEk6OkF0dGFj
aG1lbnQ+JiYgYXR0YWNobWVudCwgY29uc3QgQXR0YWNobWVudERpc3BsYXlPcHRpb25zJiBvcHRp
b25zLCBGdW5jdGlvbjx2b2lkKENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmIGNhbGxiYWNrKQogewog
ICAgIGlmICghaXNWYWxpZCgpKSB7CiAgICAgICAgIGNhbGxiYWNrKENhbGxiYWNrQmFzZTo6RXJy
b3I6Ok93bmVyV2FzSW52YWxpZGF0ZWQpOwogICAgICAgICByZXR1cm47CiAgICAgfQogCi0gICAg
aWYgKGNvbnRlbnRUeXBlKQotICAgICAgICBhdHRhY2htZW50LT5zZXRDb250ZW50VHlwZSgqY29u
dGVudFR5cGUpOwotCiAgICAgYXV0byBhdHRhY2htZW50SWRlbnRpZmllciA9IGF0dGFjaG1lbnQt
PmlkZW50aWZpZXIoKTsKLSAgICBtX2F0dGFjaG1lbnRJZGVudGlmaWVyVG9BdHRhY2htZW50TWFw
LnNldChhdHRhY2htZW50SWRlbnRpZmllciwgV1RGTW92ZShhdHRhY2htZW50KSk7Ci0KICAgICBh
dXRvIGNhbGxiYWNrSUQgPSBtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFjayksIG1fcHJv
Y2Vzcy0+dGhyb3R0bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5VG9rZW4oKSk7Ci0gICAgbV9wcm9j
ZXNzLT5zZW5kKE1lc3NhZ2VzOjpXZWJQYWdlOjpJbnNlcnRBdHRhY2htZW50KGF0dGFjaG1lbnRJ
ZGVudGlmaWVyLCBvcHRpb25zLCBmaWxlU2l6ZSwgZmlsZW5hbWUsIGNvbnRlbnRUeXBlLCBjYWxs
YmFja0lEKSwgbV9wYWdlSUQpOworICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFn
ZTo6SW5zZXJ0QXR0YWNobWVudChhdHRhY2htZW50SWRlbnRpZmllciwgb3B0aW9ucywgYXR0YWNo
bWVudC0+ZmlsZVNpemVGb3JEaXNwbGF5KCksIGF0dGFjaG1lbnQtPmZpbGVOYW1lKCksIGF0dGFj
aG1lbnQtPmNvbnRlbnRUeXBlKCksIGNhbGxiYWNrSUQpLCBtX3BhZ2VJRCk7CisgICAgbV9hdHRh
Y2htZW50SWRlbnRpZmllclRvQXR0YWNobWVudE1hcC5zZXQoYXR0YWNobWVudElkZW50aWZpZXIs
IFdURk1vdmUoYXR0YWNobWVudCkpOwogfQogCiB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0QXR0YWNo
bWVudERpc3BsYXlPcHRpb25zKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgQXR0YWNobWVudERp
c3BsYXlPcHRpb25zIG9wdGlvbnMsIEZ1bmN0aW9uPHZvaWQoQ2FsbGJhY2tCYXNlOjpFcnJvcik+
JiYgY2FsbGJhY2spCkBAIC03Nzc5LDcgKzc3NzUsNyBAQCB2b2lkIFdlYlBhZ2VQcm94eTo6c2V0
QXR0YWNobWVudERpc3BsYXlPcHRpb25zKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgQXR0YWNo
bQogICAgIG1fcHJvY2Vzcy0+c2VuZChNZXNzYWdlczo6V2ViUGFnZTo6U2V0QXR0YWNobWVudERp
c3BsYXlPcHRpb25zKGlkZW50aWZpZXIsIG9wdGlvbnMsIGNhbGxiYWNrSUQpLCBtX3BhZ2VJRCk7
CiB9CiAKLXZvaWQgV2ViUGFnZVByb3h5Ojp1cGRhdGVBdHRhY2htZW50QXR0cmlidXRlcyhjb25z
dCBTdHJpbmcmIGlkZW50aWZpZXIsIHVpbnQ2NF90IGZpbGVTaXplLCBzdGQ6Om9wdGlvbmFsPFN0
cmluZz4mJiBuZXdDb250ZW50VHlwZSwgc3RkOjpvcHRpb25hbDxTdHJpbmc+JiYgbmV3RmlsZW5h
bWUsIEZ1bmN0aW9uPHZvaWQoQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYgY2FsbGJhY2spCit2b2lk
IFdlYlBhZ2VQcm94eTo6dXBkYXRlQXR0YWNobWVudEF0dHJpYnV0ZXMoY29uc3QgQVBJOjpBdHRh
Y2htZW50JiBhdHRhY2htZW50LCBGdW5jdGlvbjx2b2lkKENhbGxiYWNrQmFzZTo6RXJyb3IpPiYm
IGNhbGxiYWNrKQogewogICAgIGlmICghaXNWYWxpZCgpKSB7CiAgICAgICAgIGNhbGxiYWNrKENh
bGxiYWNrQmFzZTo6RXJyb3I6Ok93bmVyV2FzSW52YWxpZGF0ZWQpOwpAQCAtNzc4Nyw3ICs3Nzgz
LDkgQEAgdm9pZCBXZWJQYWdlUHJveHk6OnVwZGF0ZUF0dGFjaG1lbnRBdHRyaWJ1dGVzKGNvbnN0
IFN0cmluZyYgaWRlbnRpZmllciwgdWludDY0X3QKICAgICB9CiAKICAgICBhdXRvIGNhbGxiYWNr
SUQgPSBtX2NhbGxiYWNrcy5wdXQoV1RGTW92ZShjYWxsYmFjayksIG1fcHJvY2Vzcy0+dGhyb3R0
bGVyKCkuYmFja2dyb3VuZEFjdGl2aXR5VG9rZW4oKSk7Ci0gICAgbV9wcm9jZXNzLT5zZW5kKE1l
c3NhZ2VzOjpXZWJQYWdlOjpVcGRhdGVBdHRhY2htZW50QXR0cmlidXRlcyhpZGVudGlmaWVyLCBm
aWxlU2l6ZSwgV1RGTW92ZShuZXdDb250ZW50VHlwZSksIFdURk1vdmUobmV3RmlsZW5hbWUpLCBj
YWxsYmFja0lEKSwgbV9wYWdlSUQpOworICAgIGF1dG8gbmFtZSA9IGF0dGFjaG1lbnQuZmlsZU5h
bWUoKTsKKyAgICBhdXRvIG9wdGlvbmFsTmFtZSA9IG5hbWUuaXNOdWxsKCkgPyBzdGQ6Om51bGxv
cHQgOiBzdGQ6Om9wdGlvbmFsPFdURjo6U3RyaW5nPiB7IG5hbWUgfTsKKyAgICBtX3Byb2Nlc3Mt
PnNlbmQoTWVzc2FnZXM6OldlYlBhZ2U6OlVwZGF0ZUF0dGFjaG1lbnRBdHRyaWJ1dGVzKGF0dGFj
aG1lbnQuaWRlbnRpZmllcigpLCBhdHRhY2htZW50LmZpbGVTaXplRm9yRGlzcGxheSgpLCBhdHRh
Y2htZW50LmNvbnRlbnRUeXBlKCksIFdURk1vdmUob3B0aW9uYWxOYW1lKSwgY2FsbGJhY2tJRCks
IG1fcGFnZUlEKTsKIH0KIAogdm9pZCBXZWJQYWdlUHJveHk6OnJlZ2lzdGVyQXR0YWNobWVudElk
ZW50aWZpZXJGcm9tRGF0YShjb25zdCBTdHJpbmcmIGlkZW50aWZpZXIsIGNvbnN0IFN0cmluZyYg
Y29udGVudFR5cGUsIGNvbnN0IFN0cmluZyYgcHJlZmVycmVkRmlsZU5hbWUsIGNvbnN0IElQQzo6
RGF0YVJlZmVyZW5jZSYgZGF0YSkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvVUlQcm9jZXNz
L1dlYlBhZ2VQcm94eS5oIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgK
aW5kZXggNzdiZDhkNzc1NjE4ZTA4ZTM2MmNiMTYxNGIzZDY1ZDdjZTk2MDE2Yy4uOGM1NWQyNTU4
ZjhiNmRlY2QwMGE0YzU4NzIxOWE0MDBmMWIwZTlhMSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktp
dC9VSVByb2Nlc3MvV2ViUGFnZVByb3h5LmgKKysrIGIvU291cmNlL1dlYktpdC9VSVByb2Nlc3Mv
V2ViUGFnZVByb3h5LmgKQEAgLTEzMTksOSArMTMxOSw5IEBAIHB1YmxpYzoKIAogI2lmIEVOQUJM
RShBVFRBQ0hNRU5UX0VMRU1FTlQpCiAgICAgUmVmUHRyPEFQSTo6QXR0YWNobWVudD4gYXR0YWNo
bWVudEZvcklkZW50aWZpZXIoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyKSBjb25zdDsKLSAgICB2
b2lkIGluc2VydEF0dGFjaG1lbnQoUmVmPEFQSTo6QXR0YWNobWVudD4mJiwgY29uc3QgV2ViQ29y
ZTo6QXR0YWNobWVudERpc3BsYXlPcHRpb25zJiwgdWludDY0X3QgZmlsZVNpemUsIGNvbnN0IFN0
cmluZyYgZmlsZU5hbWUsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBjb250ZW50VHlwZSwgRnVuY3Rp
b248dm9pZChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7CisgICAgdm9pZCBpbnNlcnRBdHRhY2ht
ZW50KFJlZjxBUEk6OkF0dGFjaG1lbnQ+JiYsIGNvbnN0IFdlYkNvcmU6OkF0dGFjaG1lbnREaXNw
bGF5T3B0aW9ucyYsIEZ1bmN0aW9uPHZvaWQoQ2FsbGJhY2tCYXNlOjpFcnJvcik+JiYpOwogICAg
IHZvaWQgc2V0QXR0YWNobWVudERpc3BsYXlPcHRpb25zKGNvbnN0IFN0cmluZyYgaWRlbnRpZmll
ciwgV2ViQ29yZTo6QXR0YWNobWVudERpc3BsYXlPcHRpb25zLCBGdW5jdGlvbjx2b2lkKENhbGxi
YWNrQmFzZTo6RXJyb3IpPiYmKTsKLSAgICB2b2lkIHVwZGF0ZUF0dGFjaG1lbnRBdHRyaWJ1dGVz
KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgdWludDY0X3QgZmlsZVNpemUsIHN0ZDo6b3B0aW9u
YWw8U3RyaW5nPiYmIG5ld0NvbnRlbnRUeXBlLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4mJiBuZXdG
aWxlbmFtZSwgRnVuY3Rpb248dm9pZChDYWxsYmFja0Jhc2U6OkVycm9yKT4mJik7CisgICAgdm9p
ZCB1cGRhdGVBdHRhY2htZW50QXR0cmlidXRlcyhjb25zdCBBUEk6OkF0dGFjaG1lbnQmLCBGdW5j
dGlvbjx2b2lkKENhbGxiYWNrQmFzZTo6RXJyb3IpPiYmKTsKICNlbmRpZgogCiAjaWYgRU5BQkxF
KEFQUExJQ0FUSU9OX01BTklGRVNUKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYktpdC9XZWJQcm9j
ZXNzL1dlYlBhZ2UvV2ViUGFnZS5jcHAgYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9XZWJQYWdlLmNwcAppbmRleCBiNWI3MTFhNmM2NThjNmRhMTJiN2Y0ZjZmNWE4ZDhmZWFlNGY4
ZDZmLi40YjVmNWFiODY5MGVmZTY5YWRjZDEzNjBlN2MxOTg4YWRmMDUwZmY1IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcAorKysgYi9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmNwcApAQCAtNjA2NiwxMCArNjA2
NiwxMCBAQCB2b2lkIFdlYlBhZ2U6OnN0b3JhZ2VBY2Nlc3NSZXNwb25zZShib29sIHdhc0dyYW50
ZWQsIHVpbnQ2NF90IGNvbnRleHRJZCkKIAogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQp
CiAKLXZvaWQgV2ViUGFnZTo6aW5zZXJ0QXR0YWNobWVudChjb25zdCBTdHJpbmcmIGlkZW50aWZp
ZXIsIGNvbnN0IEF0dGFjaG1lbnREaXNwbGF5T3B0aW9ucyYgb3B0aW9ucywgdWludDY0X3QgZmls
ZVNpemUsIGNvbnN0IFN0cmluZyYgZmlsZU5hbWUsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBjb250
ZW50VHlwZSwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQordm9pZCBXZWJQYWdlOjppbnNlcnRBdHRh
Y2htZW50KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgQXR0YWNobWVudERpc3BsYXlP
cHRpb25zJiBvcHRpb25zLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiYmIGZpbGVTaXplLCBjb25z
dCBTdHJpbmcmIGZpbGVOYW1lLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlLCBDYWxsYmFja0lE
IGNhbGxiYWNrSUQpCiB7CiAgICAgYXV0byYgZnJhbWUgPSBtX3BhZ2UtPmZvY3VzQ29udHJvbGxl
cigpLmZvY3VzZWRPck1haW5GcmFtZSgpOwotICAgIGZyYW1lLmVkaXRvcigpLmluc2VydEF0dGFj
aG1lbnQoaWRlbnRpZmllciwgb3B0aW9ucywgZmlsZVNpemUsIGZpbGVOYW1lLCBXVEZNb3ZlKGNv
bnRlbnRUeXBlKSk7CisgICAgZnJhbWUuZWRpdG9yKCkuaW5zZXJ0QXR0YWNobWVudChpZGVudGlm
aWVyLCBvcHRpb25zLCBXVEZNb3ZlKGZpbGVTaXplKSwgZmlsZU5hbWUsIGNvbnRlbnRUeXBlKTsK
ICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlZvaWRDYWxsYmFjayhjYWxsYmFja0lE
KSk7CiB9CiAKQEAgLTYwNzgsMTEgKzYwNzgsMTEgQEAgdm9pZCBXZWJQYWdlOjpzZXRBdHRhY2ht
ZW50RGlzcGxheU9wdGlvbnMoY29uc3QgU3RyaW5nJiwgY29uc3QgQXR0YWNobWVudERpc3BsYXkK
ICAgICBzZW5kKE1lc3NhZ2VzOjpXZWJQYWdlUHJveHk6OlZvaWRDYWxsYmFjayhjYWxsYmFja0lE
KSk7CiB9CiAKLXZvaWQgV2ViUGFnZTo6dXBkYXRlQXR0YWNobWVudEF0dHJpYnV0ZXMoY29uc3Qg
U3RyaW5nJiBpZGVudGlmaWVyLCB1aW50NjRfdCBmaWxlU2l6ZSwgc3RkOjpvcHRpb25hbDxTdHJp
bmc+IG5ld0NvbnRlbnRUeXBlLCBzdGQ6Om9wdGlvbmFsPFN0cmluZz4gbmV3RmlsZW5hbWUsIENh
bGxiYWNrSUQgY2FsbGJhY2tJRCkKK3ZvaWQgV2ViUGFnZTo6dXBkYXRlQXR0YWNobWVudEF0dHJp
YnV0ZXMoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiYm
IGZpbGVTaXplLCBjb25zdCBTdHJpbmcmIGNvbnRlbnRUeXBlLCBzdGQ6Om9wdGlvbmFsPFN0cmlu
Zz4mJiBuZXdGaWxlbmFtZSwgQ2FsbGJhY2tJRCBjYWxsYmFja0lEKQogewogICAgIGlmIChhdXRv
IGF0dGFjaG1lbnQgPSBhdHRhY2htZW50RWxlbWVudFdpdGhJZGVudGlmaWVyKGlkZW50aWZpZXIp
KSB7CiAgICAgICAgIGF0dGFjaG1lbnQtPmRvY3VtZW50KCkudXBkYXRlTGF5b3V0KCk7Ci0gICAg
ICAgIGF0dGFjaG1lbnQtPnVwZGF0ZUF0dHJpYnV0ZXMoZmlsZVNpemUsIFdURk1vdmUobmV3Q29u
dGVudFR5cGUpLCBXVEZNb3ZlKG5ld0ZpbGVuYW1lKSk7CisgICAgICAgIGF0dGFjaG1lbnQtPnVw
ZGF0ZUF0dHJpYnV0ZXMoV1RGTW92ZShmaWxlU2l6ZSksIGNvbnRlbnRUeXBlLCBXVEZNb3ZlKG5l
d0ZpbGVuYW1lKSk7CiAgICAgfQogICAgIHNlbmQoTWVzc2FnZXM6OldlYlBhZ2VQcm94eTo6Vm9p
ZENhbGxiYWNrKGNhbGxiYWNrSUQpKTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1dlYlBhZ2UuaCBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1dlYlBhZ2UuaAppbmRleCA2YmUxY2JmYzc2YzMzNjk3NmZiMWYyMWQ0MDkxYWQ3NjE2ZWQ4
ZjAyLi40ZDRhZTg1MWIyNjVlY2IzOWUwZjVlZWE0MGFlMDEwNjlkNDQwMDgxIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLmgKKysrIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5oCkBAIC0xMDc1LDkgKzEwNzUsOSBA
QCBwdWJsaWM6CiAjZW5kaWYKIAogI2lmIEVOQUJMRShBVFRBQ0hNRU5UX0VMRU1FTlQpCi0gICAg
dm9pZCBpbnNlcnRBdHRhY2htZW50KGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgY29uc3QgV2Vi
Q29yZTo6QXR0YWNobWVudERpc3BsYXlPcHRpb25zJiwgdWludDY0X3QgZmlsZVNpemUsIGNvbnN0
IFN0cmluZyYgZmlsZU5hbWUsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBjb250ZW50VHlwZSwgQ2Fs
bGJhY2tJRCk7CisgICAgdm9pZCBpbnNlcnRBdHRhY2htZW50KGNvbnN0IFN0cmluZyYgaWRlbnRp
ZmllciwgY29uc3QgV2ViQ29yZTo6QXR0YWNobWVudERpc3BsYXlPcHRpb25zJiwgc3RkOjpvcHRp
b25hbDx1aW50NjRfdD4mJiBmaWxlU2l6ZSwgY29uc3QgU3RyaW5nJiBmaWxlTmFtZSwgY29uc3Qg
U3RyaW5nJiBjb250ZW50VHlwZSwgQ2FsbGJhY2tJRCk7CiAgICAgdm9pZCBzZXRBdHRhY2htZW50
RGlzcGxheU9wdGlvbnMoY29uc3QgU3RyaW5nJiBpZGVudGlmaWVyLCBjb25zdCBXZWJDb3JlOjpB
dHRhY2htZW50RGlzcGxheU9wdGlvbnMmLCBDYWxsYmFja0lEKTsKLSAgICB2b2lkIHVwZGF0ZUF0
dGFjaG1lbnRBdHRyaWJ1dGVzKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgdWludDY0X3QgZmls
ZVNpemUsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBuZXdDb250ZW50VHlwZSwgc3RkOjpvcHRpb25h
bDxTdHJpbmc+IG5ld0ZpbGVuYW1lLCBDYWxsYmFja0lEKTsKKyAgICB2b2lkIHVwZGF0ZUF0dGFj
aG1lbnRBdHRyaWJ1dGVzKGNvbnN0IFN0cmluZyYgaWRlbnRpZmllciwgc3RkOjpvcHRpb25hbDx1
aW50NjRfdD4mJiBmaWxlU2l6ZSwgY29uc3QgU3RyaW5nJiBjb250ZW50VHlwZSwgc3RkOjpvcHRp
b25hbDxTdHJpbmc+JiYgbmV3RmlsZW5hbWUsIENhbGxiYWNrSUQpOwogI2VuZGlmCiAKICNpZiBF
TkFCTEUoQVBQTElDQVRJT05fTUFOSUZFU1QpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dl
YlByb2Nlc3MvV2ViUGFnZS9XZWJQYWdlLm1lc3NhZ2VzLmluIGIvU291cmNlL1dlYktpdC9XZWJQ
cm9jZXNzL1dlYlBhZ2UvV2ViUGFnZS5tZXNzYWdlcy5pbgppbmRleCA5NmU0ODdlZTYyZjVhMTQ2
ZGFkYTg3ZWQ5YThlMTlhZjRlZGRiZjFhLi4yODlhYmRhODdmMDUzYjRiYWMyNWJlYWQwNTUyNDY0
N2Q5NzQ2NTlmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9X
ZWJQYWdlLm1lc3NhZ2VzLmluCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1dlYlBhZ2UubWVzc2FnZXMuaW4KQEAgLTUxMCw5ICs1MTAsOSBAQCBtZXNzYWdlcyAtPiBXZWJQ
YWdlIExlZ2FjeVJlY2VpdmVyIHsKICNlbmRpZgogCiAjaWYgRU5BQkxFKEFUVEFDSE1FTlRfRUxF
TUVOVCkKLSAgICBJbnNlcnRBdHRhY2htZW50KFN0cmluZyBpZGVudGlmaWVyLCBzdHJ1Y3QgV2Vi
Q29yZTo6QXR0YWNobWVudERpc3BsYXlPcHRpb25zIG9wdGlvbnMsIHVpbnQ2NF90IGZpbGVTaXpl
LCBTdHJpbmcgZmlsZU5hbWUsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBjb250ZW50VHlwZSwgV2Vi
S2l0OjpDYWxsYmFja0lEIGNhbGxiYWNrSUQpCisgICAgSW5zZXJ0QXR0YWNobWVudChTdHJpbmcg
aWRlbnRpZmllciwgc3RydWN0IFdlYkNvcmU6OkF0dGFjaG1lbnREaXNwbGF5T3B0aW9ucyBvcHRp
b25zLCBzdGQ6Om9wdGlvbmFsPHVpbnQ2NF90PiBmaWxlU2l6ZSwgU3RyaW5nIGZpbGVOYW1lLCBT
dHJpbmcgY29udGVudFR5cGUsIFdlYktpdDo6Q2FsbGJhY2tJRCBjYWxsYmFja0lEKQogICAgIFNl
dEF0dGFjaG1lbnREaXNwbGF5T3B0aW9ucyhTdHJpbmcgaWRlbnRpZmllciwgc3RydWN0IFdlYkNv
cmU6OkF0dGFjaG1lbnREaXNwbGF5T3B0aW9ucyBvcHRpb25zLCBXZWJLaXQ6OkNhbGxiYWNrSUQg
Y2FsbGJhY2tJRCkKLSAgICBVcGRhdGVBdHRhY2htZW50QXR0cmlidXRlcyhTdHJpbmcgaWRlbnRp
ZmllciwgdWludDY0X3QgZmlsZVNpemUsIHN0ZDo6b3B0aW9uYWw8U3RyaW5nPiBuZXdDb250ZW50
VHlwZSwgc3RkOjpvcHRpb25hbDxTdHJpbmc+IG5ld0ZpbGVuYW1lLCBXZWJLaXQ6OkNhbGxiYWNr
SUQgY2FsbGJhY2tJRCkKKyAgICBVcGRhdGVBdHRhY2htZW50QXR0cmlidXRlcyhTdHJpbmcgaWRl
bnRpZmllciwgc3RkOjpvcHRpb25hbDx1aW50NjRfdD4gZmlsZVNpemUsIFN0cmluZyBuZXdDb250
ZW50VHlwZSwgc3RkOjpvcHRpb25hbDxTdHJpbmc+IG5ld0ZpbGVuYW1lLCBXZWJLaXQ6OkNhbGxi
YWNrSUQgY2FsbGJhY2tJRCkKICNlbmRpZgogCiAjaWYgRU5BQkxFKEFQUExJQ0FUSU9OX01BTklG
RVNUKQpkaWZmIC0tZ2l0IGEvVG9vbHMvQ2hhbmdlTG9nIGIvVG9vbHMvQ2hhbmdlTG9nCmluZGV4
IGQ1YmQzODU3MTdiMjNkYmY5NGJiNGE2NTI4YzNmZGFmNjNmM2IxMjUuLmZjZThjNTAyNTNiYjU2
YmIxZmViYmQzZjhjYTliN2U4NDM3ZDgxN2MgMTAwNjQ0Ci0tLSBhL1Rvb2xzL0NoYW5nZUxvZwor
KysgYi9Ub29scy9DaGFuZ2VMb2cKQEAgLTEsMyArMSw1MSBAQAorMjAxOC0wOC0yNyAgV2Vuc29u
IEhzaWVoICA8d2Vuc29uX2hzaWVoQGFwcGxlLmNvbT4KKworICAgICAgICBbQ29jb2FdIEV4Y2Vw
dGlvbiAoZmlsZVR5cGUgJ2R5bi5hZ3E4dScgaXMgbm90IGEgdmFsaWQgVVRJKSByYWlzZWQgd2hl
biBkcmFnZ2luZyBhbiBhdHRhY2htZW50IHdob3NlIGZpbGUgd3JhcHBlciBpcyBhIGRpcmVjdG9y
eQorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTg4OTAz
CisgICAgICAgIDxyZGFyOi8vcHJvYmxlbS80MzcwMjk5Mz4KKworICAgICAgICBSZXZpZXdlZCBi
eSBUaW0gSG9ydG9uLgorCisgICAgICAgIEFkZCB0d28gQVBJIHRlc3RzIGFuZCBhZGp1c3QgZXhp
c3RpbmcgV0tBdHRhY2htZW50IEFQSSB0ZXN0cy4gVGhlIG5ldyB0ZXN0cyBleGVyY2lzZSB0aGUg
Zm9sbG93aW5nIHNjZW5hcmlvcywgaW4KKyAgICAgICAgYm90aCBpT1MgYW5kIG1hY09TOgorICAg
ICAgICDigKIgICAgICAgRHJvcHBpbmcgYSBmb2xkZXIgYXMgYW4gYXR0YWNobWVudCBlbGVtZW50
LCBhbmQgdGhlbiBtb3ZpbmcgdGhhdCBhdHRhY2htZW50IGVsZW1lbnQgaW4gdGhlIGRvY3VtZW50
IGJ5CisgICAgICAgICAgICAgICAgZHJhZ2dpbmcgYW5kIGRyb3BwaW5nLgorICAgICAgICDigKIg
ICAgICAgVXNpbmcgV0tXZWJWaWV3IFNQSSB0byBpbnNlcnQgYSBmb2xkZXIgYW5kIGEgZmlsZSB3
aXRoIGFuIHVua25vd24gZXh0ZW5zaW9uLCBhbmQgdGhlbiB1c2luZyBtb3JlCisgICAgICAgICAg
ICAgICAgX1dLQXR0YWNobWVudCBTUEkgdG8gc3dhcCB0aGUgYXR0YWNobWVudHMnIGJhY2tpbmcg
ZmlsZSB3cmFwcGVycy4KKworICAgICAgICAqIFRlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29j
b2EvV0tBdHRhY2htZW50VGVzdHMubW06CisgICAgICAgIChydW5UZXN0V2l0aFRlbXBvcmFyeUZv
bGRlcik6CisKKyAgICAgICAgQWRkIGEgaGVscGVyIGZ1bmN0aW9uIHRvIHJ1biBhIHRlc3Qgd2l0
aCBhIG5ldyBmb2xkZXIgcGF0aCwgY3JlYXRlZCBpbiB0aGUgdGVtcG9yYXJ5IGRpcmVjdG9yeSBh
bmQgcG9wdWxhdGVkCisgICAgICAgIHdpdGggc29tZSBzYW1wbGUgY29udGVudC4gVGhpcyBmb2xk
ZXIgaXMgZGVsZXRlZCBhZnRlciBydW5uaW5nIHRoZSB0ZXN0LgorCisgICAgICAgIChzaW11bGF0
ZUZvbGRlckRyYWdXaXRoVVJMKToKKworICAgICAgICBBZGQgYSBoZWxwZXIgZnVuY3Rpb24gdG8g
cHJlcGFyZSBhIGdpdmVuIERyYWdBbmREcm9wU2ltdWxhdG9yIGZvciBzaW11bGF0aW5nIGEgZHJh
Z2dlZCBmb2xkZXIgZnJvbSBhIHNvdXJjZQorICAgICAgICBleHRlcm5hbCB0byB0aGUgd2ViIHZp
ZXcuCisKKyAgICAgICAgKHBsYXRmb3JtQ29weVJpY2hUZXh0V2l0aE11bHRpcGxlQXR0YWNobWVu
dHMpOgorICAgICAgICAocGxhdGZvcm1Db3B5UmljaFRleHRXaXRoSW1hZ2UpOgorICAgICAgICAo
cGxhdGZvcm1Db3B5UE5HKToKKyAgICAgICAgKFRlc3RXZWJLaXRBUEk6OlRFU1QpOgorCisgICAg
ICAgIEFkZCBuZXcgQVBJIHRlc3RzLCBhbmQgYWRqdXN0IGV4aXN0aW5nIHRlc3RzIHRvIHJlZmxl
Y3QgbmV3IC1zZXRGaWxlV3JhcHBlcjrigKY6IGJlaGF2aW9yLiBTcGVjaWZpY2FsbHksCisgICAg
ICAgIENoYW5nZUF0dGFjaG1lbnREYXRhQW5kRmlsZUluZm9ybWF0aW9uIHByZXZpb3VzbHkgcmVx
dWlyZWQgdGhhdCBjaGFuZ2luZyBhIF9XS0F0dGFjaG1lbnQncyBOU0ZpbGVXcmFwcGVyIHdvdWxk
CisgICAgICAgIHByZXNlcnZlIHRoZSBwcmV2aW91cyBOU0ZpbGVXcmFwcGVyJ3MgcHJlZmVycmVk
IG5hbWUgaWYgdGhlIG5ldyBmaWxlIHdyYXBwZXIgZG9lcyBub3QgaGF2ZSBhIHByZWZlcnJlZCBu
YW1lLCBidXQKKyAgICAgICAgdGhpcyBxdWlyayBpcyBubyBsb25nZXIgc3VwcG9ydGVkLgorCisg
ICAgICAgIEFsc28gYWRkIGEgZmV3IGJyaWRnaW5nIGNhc3RzIGZvciB0aGUgZXZlbnR1YWwgdHJh
bnNpdGlvbiBvZiBUZXN0V2ViS2l0QVBJIHRvIEFSQy4KKworICAgICAgICAqIFRlc3RXZWJLaXRB
UEkvY29jb2EvRHJhZ0FuZERyb3BTaW11bGF0b3IuaDoKKworICAgICAgICBBZGQgYSBuZXcgaG9v
ayB0byBjbGVhciBhbnkgZXh0ZXJuYWwgZHJhZyBpbmZvcm1hdGlvbiBvbiBhbiBleGlzdGluZyBE
cmFnQW5kRHJvcFNpbXVsYXRvci4gVGhpcyBpcyBjb252ZW5pZW50CisgICAgICAgIHdoZW4gdXNp
bmcgdGhlIHNhbWUgRHJhZ0FuZERyb3BTaW11bGF0b3IgdG8gcGVyZm9ybSBtdWx0aXBsZSBkcmFn
cyBpbiBhIHNpbmdsZSB0ZXN0LgorCisgICAgICAgICogVGVzdFdlYktpdEFQSS9pb3MvRHJhZ0Fu
ZERyb3BTaW11bGF0b3JJT1MubW06CisgICAgICAgICgtW0RyYWdBbmREcm9wU2ltdWxhdG9yIGNs
ZWFyRXh0ZXJuYWxEcmFnSW5mb3JtYXRpb25dKToKKyAgICAgICAgKiBUZXN0V2ViS2l0QVBJL21h
Yy9EcmFnQW5kRHJvcFNpbXVsYXRvck1hYy5tbToKKyAgICAgICAgKC1bRHJhZ0FuZERyb3BTaW11
bGF0b3IgY2xlYXJFeHRlcm5hbERyYWdJbmZvcm1hdGlvbl0pOgorCiAyMDE4LTA4LTI3ICBXZW5z
b24gSHNpZWggIDx3ZW5zb25faHNpZWhAYXBwbGUuY29tPgogCiAgICAgICAgIFtBdHRhY2htZW50
IFN1cHBvcnRdIFtXSzJdIEltYWdlcyBjb3BpZWQgZnJvbSBNYWlsIG1lc3NhZ2UgdmlldyBwYXN0
ZSB3aXRoIHRoZSB3cm9uZyBmaWxlIG5hbWUgaW4gY29tcG9zZQpkaWZmIC0tZ2l0IGEvVG9vbHMv
VGVzdFdlYktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0F0dGFjaG1lbnRUZXN0cy5tbSBiL1Rv
b2xzL1Rlc3RXZWJLaXRBUEkvVGVzdHMvV2ViS2l0Q29jb2EvV0tBdHRhY2htZW50VGVzdHMubW0K
aW5kZXggM2YxZTdlNjg0MmU3MzQxMzRiOGU0MGViNjhiNDcyZGIzODNlYmY4NS4uMGEwMTAzYjRi
MzgyZDNiNGNjN2I3NTFmYjI1MGY4ZWQ1OTc4OGQzZSAxMDA2NDQKLS0tIGEvVG9vbHMvVGVzdFdl
YktpdEFQSS9UZXN0cy9XZWJLaXRDb2NvYS9XS0F0dGFjaG1lbnRUZXN0cy5tbQorKysgYi9Ub29s
cy9UZXN0V2ViS2l0QVBJL1Rlc3RzL1dlYktpdENvY29hL1dLQXR0YWNobWVudFRlc3RzLm1tCkBA
IC00MDgsNiArNDA4LDM3IEBAIHN0YXRpYyBOU0RhdGEgKnRlc3RQREZEYXRhKCkKIAogQGVuZAog
CitzdGF0aWMgdm9pZCBydW5UZXN0V2l0aFRlbXBvcmFyeUZvbGRlcih2b2lkKF5ydW5UZXN0KShO
U1VSTCAqZm9sZGVyVVJMKSkKK3sKKyAgICBOU0ZpbGVNYW5hZ2VyICpkZWZhdWx0TWFuYWdlciA9
IFtOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXTsKKyAgICBhdXRvIHRlbXBvcmFyeUZvbGRl
ciA9IHJldGFpblB0cihbTlNVUkwgZmlsZVVSTFdpdGhQYXRoOltOU1RlbXBvcmFyeURpcmVjdG9y
eSgpIHN0cmluZ0J5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpbTlNTdHJpbmcgc3RyaW5nV2l0aEZv
cm1hdDpAImZvbGRlci0lQCIsIE5TVVVJRC5VVUlEXV0gaXNEaXJlY3Rvcnk6WUVTXSk7CisgICAg
W2RlZmF1bHRNYW5hZ2VyIHJlbW92ZUl0ZW1BdFVSTDp0ZW1wb3JhcnlGb2xkZXIuZ2V0KCkgZXJy
b3I6bmlsXTsKKyAgICBbZGVmYXVsdE1hbmFnZXIgY3JlYXRlRGlyZWN0b3J5QXRVUkw6dGVtcG9y
YXJ5Rm9sZGVyLmdldCgpIHdpdGhJbnRlcm1lZGlhdGVEaXJlY3RvcmllczpOTyBhdHRyaWJ1dGVz
Om5pbCBlcnJvcjpuaWxdOworICAgIFt0ZXN0SW1hZ2VEYXRhKCkgd3JpdGVUb1VSTDpbdGVtcG9y
YXJ5Rm9sZGVyLmdldCgpIFVSTEJ5QXBwZW5kaW5nUGF0aENvbXBvbmVudDpAImltYWdlLnBuZyIg
aXNEaXJlY3Rvcnk6Tk9dIGF0b21pY2FsbHk6WUVTXTsKKyAgICBbdGVzdFpJUERhdGEoKSB3cml0
ZVRvVVJMOlt0ZW1wb3JhcnlGb2xkZXIuZ2V0KCkgVVJMQnlBcHBlbmRpbmdQYXRoQ29tcG9uZW50
OkAiYXJjaGl2ZS56aXAiIGlzRGlyZWN0b3J5Ok5PXSBhdG9taWNhbGx5OllFU107CisgICAgQHRy
eSB7CisgICAgICAgIHJ1blRlc3QodGVtcG9yYXJ5Rm9sZGVyLmdldCgpKTsKKyAgICB9IEBmaW5h
bGx5IHsKKyAgICAgICAgW1tOU0ZpbGVNYW5hZ2VyIGRlZmF1bHRNYW5hZ2VyXSByZW1vdmVJdGVt
QXRVUkw6dGVtcG9yYXJ5Rm9sZGVyLmdldCgpIGVycm9yOm5pbF07CisgICAgfQorfQorCitzdGF0
aWMgdm9pZCBzaW11bGF0ZUZvbGRlckRyYWdXaXRoVVJMKERyYWdBbmREcm9wU2ltdWxhdG9yICpz
aW11bGF0b3IsIE5TVVJMICpmb2xkZXJVUkwpCit7CisjaWYgUExBVEZPUk0oTUFDKQorICAgIFtz
aW11bGF0b3Igd3JpdGVQcm9taXNlZEZpbGVzOkBbIGZvbGRlclVSTCBdXTsKKyNlbHNlCisgICAg
YXV0byBmb2xkZXJQcm92aWRlciA9IGFkb3B0TlMoW1tOU0l0ZW1Qcm92aWRlciBhbGxvY10gaW5p
dF0pOworICAgIFtmb2xkZXJQcm92aWRlciBzZXRTdWdnZXN0ZWROYW1lOmZvbGRlclVSTC5sYXN0
UGF0aENvbXBvbmVudF07CisgICAgW2ZvbGRlclByb3ZpZGVyIHNldFByZWZlcnJlZFByZXNlbnRh
dGlvblN0eWxlOlVJUHJlZmVycmVkUHJlc2VudGF0aW9uU3R5bGVBdHRhY2htZW50XTsKKyAgICBb
Zm9sZGVyUHJvdmlkZXIgcmVnaXN0ZXJGaWxlUmVwcmVzZW50YXRpb25Gb3JUeXBlSWRlbnRpZmll
cjooX19icmlkZ2UgTlNTdHJpbmcgKilrVVRUeXBlRm9sZGVyIGZpbGVPcHRpb25zOjAgdmlzaWJp
bGl0eTpOU0l0ZW1Qcm92aWRlclJlcHJlc2VudGF0aW9uVmlzaWJpbGl0eUFsbCBsb2FkSGFuZGxl
cjpbJl0gKHZvaWQoXmNvbXBsZXRpb24pKE5TVVJMICosIEJPT0wsIE5TRXJyb3IgKikpIC0+IE5T
UHJvZ3Jlc3MgKiB7CisgICAgICAgIGNvbXBsZXRpb24oZm9sZGVyVVJMLCBOTywgbmlsKTsKKyAg
ICAgICAgcmV0dXJuIG5pbDsKKyAgICB9XTsKKyAgICBzaW11bGF0b3IuZXh0ZXJuYWxJdGVtUHJv
dmlkZXJzID0gQFsgZm9sZGVyUHJvdmlkZXIuZ2V0KCkgXTsKKyNlbmRpZgorfQorCiAjcHJhZ21h
IG1hcmsgLSBQbGF0Zm9ybSB0ZXN0aW5nIGhlbHBlciBmdW5jdGlvbnMKIAogI2lmIFBMQVRGT1JN
KE1BQykKQEAgLTQ2OCw5ICs0OTksOSBAQCB0eXBlZGVmIHZvaWQoXkl0ZW1Qcm92aWRlckRhdGFM
b2FkSGFuZGxlcikoTlNEYXRhICosIE5TRXJyb3IgKik7CiAKIHZvaWQgcGxhdGZvcm1Db3B5Umlj
aFRleHRXaXRoTXVsdGlwbGVBdHRhY2htZW50cygpCiB7Ci0gICAgYXV0byBpbWFnZSA9IGFkb3B0
TlMoW1tOU1RleHRBdHRhY2htZW50IGFsbG9jXSBpbml0V2l0aERhdGE6dGVzdEltYWdlRGF0YSgp
IG9mVHlwZTooTlNTdHJpbmcgKilrVVRUeXBlUE5HXSk7Ci0gICAgYXV0byBwZGYgPSBhZG9wdE5T
KFtbTlNUZXh0QXR0YWNobWVudCBhbGxvY10gaW5pdFdpdGhEYXRhOnRlc3RQREZEYXRhKCkgb2ZU
eXBlOihOU1N0cmluZyAqKWtVVFR5cGVQREZdKTsKLSAgICBhdXRvIHppcCA9IGFkb3B0TlMoW1tO
U1RleHRBdHRhY2htZW50IGFsbG9jXSBpbml0V2l0aERhdGE6dGVzdFpJUERhdGEoKSBvZlR5cGU6
KE5TU3RyaW5nICopa1VUVHlwZVppcEFyY2hpdmVdKTsKKyAgICBhdXRvIGltYWdlID0gYWRvcHRO
UyhbW05TVGV4dEF0dGFjaG1lbnQgYWxsb2NdIGluaXRXaXRoRGF0YTp0ZXN0SW1hZ2VEYXRhKCkg
b2ZUeXBlOihfX2JyaWRnZSBOU1N0cmluZyAqKWtVVFR5cGVQTkddKTsKKyAgICBhdXRvIHBkZiA9
IGFkb3B0TlMoW1tOU1RleHRBdHRhY2htZW50IGFsbG9jXSBpbml0V2l0aERhdGE6dGVzdFBERkRh
dGEoKSBvZlR5cGU6KF9fYnJpZGdlIE5TU3RyaW5nICopa1VUVHlwZVBERl0pOworICAgIGF1dG8g
emlwID0gYWRvcHROUyhbW05TVGV4dEF0dGFjaG1lbnQgYWxsb2NdIGluaXRXaXRoRGF0YTp0ZXN0
WklQRGF0YSgpIG9mVHlwZTooX19icmlkZ2UgTlNTdHJpbmcgKilrVVRUeXBlWmlwQXJjaGl2ZV0p
OwogCiAgICAgYXV0byByaWNoVGV4dCA9IGFkb3B0TlMoW1tOU011dGFibGVBdHRyaWJ1dGVkU3Ry
aW5nIGFsbG9jXSBpbml0XSk7CiAgICAgW3JpY2hUZXh0IGFwcGVuZEF0dHJpYnV0ZWRTdHJpbmc6
W05TQXR0cmlidXRlZFN0cmluZyBhdHRyaWJ1dGVkU3RyaW5nV2l0aEF0dGFjaG1lbnQ6aW1hZ2Uu
Z2V0KCldXTsKQEAgLTQ5MSw3ICs1MjIsNyBAQCB2b2lkIHBsYXRmb3JtQ29weVJpY2hUZXh0V2l0
aE11bHRpcGxlQXR0YWNobWVudHMoKQogdm9pZCBwbGF0Zm9ybUNvcHlSaWNoVGV4dFdpdGhJbWFn
ZSgpCiB7CiAgICAgYXV0byByaWNoVGV4dCA9IGFkb3B0TlMoW1tOU011dGFibGVBdHRyaWJ1dGVk
U3RyaW5nIGFsbG9jXSBpbml0XSk7Ci0gICAgYXV0byBpbWFnZSA9IGFkb3B0TlMoW1tOU1RleHRB
dHRhY2htZW50IGFsbG9jXSBpbml0V2l0aERhdGE6dGVzdEltYWdlRGF0YSgpIG9mVHlwZTooTlNT
dHJpbmcgKilrVVRUeXBlUE5HXSk7CisgICAgYXV0byBpbWFnZSA9IGFkb3B0TlMoW1tOU1RleHRB
dHRhY2htZW50IGFsbG9jXSBpbml0V2l0aERhdGE6dGVzdEltYWdlRGF0YSgpIG9mVHlwZTooX19i
cmlkZ2UgTlNTdHJpbmcgKilrVVRUeXBlUE5HXSk7CiAKICAgICBbcmljaFRleHQgYXBwZW5kQXR0
cmlidXRlZFN0cmluZzpbW1tOU0F0dHJpYnV0ZWRTdHJpbmcgYWxsb2NdIGluaXRXaXRoU3RyaW5n
OkAiTG9yZW0gaXBzdW0gIl0gYXV0b3JlbGVhc2VdXTsKICAgICBbcmljaFRleHQgYXBwZW5kQXR0
cmlidXRlZFN0cmluZzpbTlNBdHRyaWJ1dGVkU3RyaW5nIGF0dHJpYnV0ZWRTdHJpbmdXaXRoQXR0
YWNobWVudDppbWFnZS5nZXQoKV1dOwpAQCAtNTE4LDcgKzU0OSw3IEBAIHZvaWQgcGxhdGZvcm1D
b3B5UE5HKCkKICAgICBVSVBhc3RlYm9hcmQgKnBhc3RlYm9hcmQgPSBbVUlQYXN0ZWJvYXJkIGdl
bmVyYWxQYXN0ZWJvYXJkXTsKICAgICBhdXRvIGl0ZW0gPSBhZG9wdE5TKFtbVUlJdGVtUHJvdmlk
ZXIgYWxsb2NdIGluaXRdKTsKICAgICBbaXRlbSBzZXRQcmVmZXJyZWRQcmVzZW50YXRpb25TdHls
ZTpVSVByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlQXR0YWNobWVudF07Ci0gICAgW2l0ZW0gcmVn
aXN0ZXJEYXRhOnRlc3RJbWFnZURhdGEoKSB0eXBlOihOU1N0cmluZyAqKWtVVFR5cGVQTkddOwor
ICAgIFtpdGVtIHJlZ2lzdGVyRGF0YTp0ZXN0SW1hZ2VEYXRhKCkgdHlwZTooX19icmlkZ2UgTlNT
dHJpbmcgKilrVVRUeXBlUE5HXTsKICAgICBwYXN0ZWJvYXJkLml0ZW1Qcm92aWRlcnMgPSBAWyBp
dGVtLmdldCgpIF07CiAjZW5kaWYKIH0KQEAgLTY0MSw3ICs2NzIsNyBAQCBURVNUKFdLQXR0YWNo
bWVudFRlc3RzLCBBdHRhY2htZW50VXBkYXRlc1doZW5DaGFuZ2luZ0ZvbnRTdHlsZXMpCiAgICAg
ewogICAgICAgICBPYnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcih3ZWJW
aWV3LmdldCgpKTsKICAgICAgICAgYXR0YWNobWVudCA9IFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlJ
bnNlcnRBdHRhY2htZW50V2l0aEZpbGVuYW1lOkAiZm9vLnR4dCIgY29udGVudFR5cGU6QCJ0ZXh0
L3BsYWluIiBkYXRhOnRlc3RIVE1MRGF0YSgpXTsKLSAgICAgICAgb2JzZXJ2ZXIuZXhwZWN0QXR0
YWNobWVudFVwZGF0ZXMoQFsgXSwgQFthdHRhY2htZW50LmdldCgpXSk7CisgICAgICAgIG9ic2Vy
dmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbIF0sIEBbIGF0dGFjaG1lbnQuZ2V0KCkgXSk7
CiAgICAgfQogICAgIFt3ZWJWaWV3IGV4cGVjdFVwZGF0ZXNBZnRlckNvbW1hbmQ6QCJJbnNlcnRU
ZXh0IiB3aXRoQXJndW1lbnQ6QCJXb3JsZCIgZXhwZWN0ZWRSZW1vdmFsczpAW10gZXhwZWN0ZWRJ
bnNlcnRpb25zOkBbXV07CiAgICAgW3dlYlZpZXcgX3N5bmNocm9ub3VzbHlFeGVjdXRlRWRpdENv
bW1hbmQ6QCJTZWxlY3RBbGwiIGFyZ3VtZW50Om5pbF07CkBAIC02NjUsNyArNjk2LDcgQEAgVEVT
VChXS0F0dGFjaG1lbnRUZXN0cywgQXR0YWNobWVudFVwZGF0ZXNXaGVuSW5zZXJ0aW5nTGlzdHMp
CiAgICAgewogICAgICAgICBPYnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZl
cih3ZWJWaWV3LmdldCgpKTsKICAgICAgICAgYXR0YWNobWVudCA9IFt3ZWJWaWV3IHN5bmNocm9u
b3VzbHlJbnNlcnRBdHRhY2htZW50V2l0aEZpbGVuYW1lOkAiZm9vLnR4dCIgY29udGVudFR5cGU6
QCJ0ZXh0L3BsYWluIiBkYXRhOnRlc3RIVE1MRGF0YSgpXTsKLSAgICAgICAgb2JzZXJ2ZXIuZXhw
ZWN0QXR0YWNobWVudFVwZGF0ZXMoQFsgXSwgQFthdHRhY2htZW50LmdldCgpXSk7CisgICAgICAg
IG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbIF0sIEBbIGF0dGFjaG1lbnQuZ2V0
KCkgXSk7CiAgICAgfQogICAgIFt3ZWJWaWV3IGV4cGVjdFVwZGF0ZXNBZnRlckNvbW1hbmQ6QCJJ
bnNlcnRPcmRlcmVkTGlzdCIgd2l0aEFyZ3VtZW50Om5pbCBleHBlY3RlZFJlbW92YWxzOkBbXSBl
eHBlY3RlZEluc2VydGlvbnM6QFtdXTsKICAgICAvLyBUaGlzIGVkaXQgY29tbWFuZCBiZWhhdmVz
IG1vcmUgbGlrZSBhICJ0b2dnbGUiLCBhbmQgd2lsbCBhY3R1YWxseSBicmVhayB1cyBvdXQgb2Yg
dGhlIGxpc3Qgd2UganVzdCBpbnNlcnRlZC4KQEAgLTY4Niw3ICs3MTcsNyBAQCBURVNUKFdLQXR0
YWNobWVudFRlc3RzLCBBdHRhY2htZW50VXBkYXRlc1doZW5JbnNlcnRpbmdSaWNoTWFya3VwKQog
ICAgICAgICBPYnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcih3ZWJWaWV3
LmdldCgpKTsKICAgICAgICAgW3dlYlZpZXcgX3N5bmNocm9ub3VzbHlFeGVjdXRlRWRpdENvbW1h
bmQ6QCJJbnNlcnRIVE1MIiBhcmd1bWVudDpAIjxkaXY+PHN0cm9uZz48YXR0YWNobWVudCBzcmM9
J2NpZDoxMjMtNDU2NycgdGl0bGU9J2EnPjwvYXR0YWNobWVudD48L3N0cm9uZz48L2Rpdj4iXTsK
ICAgICAgICAgYXR0YWNobWVudCA9IG9ic2VydmVyLm9ic2VydmVyKCkuaW5zZXJ0ZWRbMF07Ci0g
ICAgICAgIG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbIF0sIEBbYXR0YWNobWVu
dC5nZXQoKV0pOworICAgICAgICBvYnNlcnZlci5leHBlY3RBdHRhY2htZW50VXBkYXRlcyhAWyBd
LCBAWyBhdHRhY2htZW50LmdldCgpIF0pOwogICAgICAgICBvYnNlcnZlci5leHBlY3RTb3VyY2VG
b3JJZGVudGlmaWVyKEAiY2lkOjEyMy00NTY3IiwgW2F0dGFjaG1lbnQgdW5pcXVlSWRlbnRpZmll
cl0pOwogICAgIH0KICAgICBFWFBFQ1RfRkFMU0UoW3dlYlZpZXcgaGFzQXR0cmlidXRlOkAid2Vi
a2l0YXR0YWNobWVudGJsb2J1cmwiIGZvclF1ZXJ5U2VsZWN0b3I6QCJhdHRhY2htZW50Il0pOwpA
QCAtNjk3LDcgKzcyOCw3IEBAIFRFU1QoV0tBdHRhY2htZW50VGVzdHMsIEF0dGFjaG1lbnRVcGRh
dGVzV2hlbkluc2VydGluZ1JpY2hNYXJrdXApCiAgICAgICAgIE9ic2VydmVBdHRhY2htZW50VXBk
YXRlc0ZvclNjb3BlIG9ic2VydmVyKHdlYlZpZXcuZ2V0KCkpOwogICAgICAgICBbd2ViVmlldyBz
dHJpbmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYXR0
YWNobWVudCcpLnJlbW92ZSgpIl07CiAgICAgICAgIFt3ZWJWaWV3IHdhaXRGb3JOZXh0UHJlc2Vu
dGF0aW9uVXBkYXRlXTsKLSAgICAgICAgb2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMo
QFthdHRhY2htZW50LmdldCgpXSwgQFsgXSk7CisgICAgICAgIG9ic2VydmVyLmV4cGVjdEF0dGFj
aG1lbnRVcGRhdGVzKEBbIGF0dGFjaG1lbnQuZ2V0KCkgXSwgQFsgXSk7CiAgICAgfQogICAgIFth
dHRhY2htZW50IGV4cGVjdFJlcXVlc3RlZERhdGFUb0JlOm5pbF07CiB9CkBAIC03MDksNyArNzQw
LDcgQEAgVEVTVChXS0F0dGFjaG1lbnRUZXN0cywgQXR0YWNobWVudFVwZGF0ZXNXaGVuQ3V0dGlu
Z0FuZFBhc3RpbmcpCiAgICAgewogICAgICAgICBPYnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JT
Y29wZSBvYnNlcnZlcih3ZWJWaWV3LmdldCgpKTsKICAgICAgICAgYXR0YWNobWVudCA9IFt3ZWJW
aWV3IHN5bmNocm9ub3VzbHlJbnNlcnRBdHRhY2htZW50V2l0aEZpbGVuYW1lOkAiZm9vLnR4dCIg
Y29udGVudFR5cGU6QCJ0ZXh0L3BsYWluIiBkYXRhOnRlc3RIVE1MRGF0YSgpXTsKLSAgICAgICAg
b2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFtdLCBAW2F0dGFjaG1lbnQuZ2V0KCld
KTsKKyAgICAgICAgb2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFsgXSwgQFsgYXR0
YWNobWVudC5nZXQoKSBdKTsKICAgICB9CiAgICAgW2F0dGFjaG1lbnQgZXhwZWN0UmVxdWVzdGVk
RGF0YVRvQmU6dGVzdEhUTUxEYXRhKCldOwogICAgIEVYUEVDVF9XS19TVFJFUShbYXR0YWNobWVu
dCB1bmlxdWVJZGVudGlmaWVyXSwgW3dlYlZpZXcgc3RyaW5nQnlFdmFsdWF0aW5nSmF2YVNjcmlw
dDpAImRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2F0dGFjaG1lbnQnKS51bmlxdWVJZGVudGlmaWVy
Il0pOwpAQCAtNzE3LDEzICs3NDgsMTMgQEAgVEVTVChXS0F0dGFjaG1lbnRUZXN0cywgQXR0YWNo
bWVudFVwZGF0ZXNXaGVuQ3V0dGluZ0FuZFBhc3RpbmcpCiAgICAgewogICAgICAgICBPYnNlcnZl
QXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcih3ZWJWaWV3LmdldCgpKTsKICAgICAg
ICAgW3dlYlZpZXcgX3N5bmNocm9ub3VzbHlFeGVjdXRlRWRpdENvbW1hbmQ6QCJDdXQiIGFyZ3Vt
ZW50Om5pbF07Ci0gICAgICAgIG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbYXR0
YWNobWVudC5nZXQoKV0sIEBbXSk7CisgICAgICAgIG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRV
cGRhdGVzKEBbIGF0dGFjaG1lbnQuZ2V0KCkgXSwgQFsgXSk7CiAgICAgfQogICAgIFthdHRhY2ht
ZW50IGV4cGVjdFJlcXVlc3RlZERhdGFUb0JlOnRlc3RIVE1MRGF0YSgpXTsKICAgICB7CiAgICAg
ICAgIE9ic2VydmVBdHRhY2htZW50VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVyKHdlYlZpZXcuZ2V0
KCkpOwogICAgICAgICBbd2ViVmlldyBfc3luY2hyb25vdXNseUV4ZWN1dGVFZGl0Q29tbWFuZDpA
IlBhc3RlIiBhcmd1bWVudDpuaWxdOwotICAgICAgICBvYnNlcnZlci5leHBlY3RBdHRhY2htZW50
VXBkYXRlcyhAW10sIEBbYXR0YWNobWVudC5nZXQoKV0pOworICAgICAgICBvYnNlcnZlci5leHBl
Y3RBdHRhY2htZW50VXBkYXRlcyhAWyBdLCBAWyBhdHRhY2htZW50LmdldCgpIF0pOwogICAgIH0K
ICAgICBbYXR0YWNobWVudCBleHBlY3RSZXF1ZXN0ZWREYXRhVG9CZTp0ZXN0SFRNTERhdGEoKV07
CiAgICAgRVhQRUNUX0ZBTFNFKFt3ZWJWaWV3IGhhc0F0dHJpYnV0ZTpAIndlYmtpdGF0dGFjaG1l
bnRibG9idXJsIiBmb3JRdWVyeVNlbGVjdG9yOkAiYXR0YWNobWVudCJdKTsKQEAgLTczOCwxOCAr
NzY5LDk5IEBAIFRFU1QoV0tBdHRhY2htZW50VGVzdHMsIEF0dGFjaG1lbnREYXRhRm9yRW1wdHlG
aWxlKQogICAgIHsKICAgICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2NvcGUgb2Jz
ZXJ2ZXIod2ViVmlldy5nZXQoKSk7CiAgICAgICAgIGF0dGFjaG1lbnQgPSBbd2ViVmlldyBzeW5j
aHJvbm91c2x5SW5zZXJ0QXR0YWNobWVudFdpdGhGaWxlbmFtZTpAImVtcHR5LnR4dCIgY29udGVu
dFR5cGU6QCJ0ZXh0L3BsYWluIiBkYXRhOltOU0RhdGEgZGF0YV1dOwotICAgICAgICBvYnNlcnZl
ci5leHBlY3RBdHRhY2htZW50VXBkYXRlcyhAW10sIEBbYXR0YWNobWVudC5nZXQoKV0pOworICAg
ICAgICBvYnNlcnZlci5leHBlY3RBdHRhY2htZW50VXBkYXRlcyhAWyBdLCBAWyBhdHRhY2htZW50
LmdldCgpIF0pOwogICAgIH0KICAgICBbYXR0YWNobWVudCBleHBlY3RSZXF1ZXN0ZWREYXRhVG9C
ZTpbTlNEYXRhIGRhdGFdXTsKICAgICBFWFBFQ1RfV0tfU1RSRVEoW2F0dGFjaG1lbnQgdW5pcXVl
SWRlbnRpZmllcl0sIFt3ZWJWaWV3IHN0cmluZ0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1
bWVudC5xdWVyeVNlbGVjdG9yKCdhdHRhY2htZW50JykudW5pcXVlSWRlbnRpZmllciJdKTsKICAg
ICB7CiAgICAgICAgIE9ic2VydmVBdHRhY2htZW50VXBkYXRlc0ZvclNjb3BlIHNjb3BlKHdlYlZp
ZXcuZ2V0KCkpOwogICAgICAgICBbd2ViVmlldyBfc3luY2hyb25vdXNseUV4ZWN1dGVFZGl0Q29t
bWFuZDpAIkRlbGV0ZUJhY2t3YXJkIiBhcmd1bWVudDpuaWxdOwotICAgICAgICBzY29wZS5leHBl
Y3RBdHRhY2htZW50VXBkYXRlcyhAW2F0dGFjaG1lbnQuZ2V0KCldLCBAW10pOworICAgICAgICBz
Y29wZS5leHBlY3RBdHRhY2htZW50VXBkYXRlcyhAWyBhdHRhY2htZW50LmdldCgpIF0sIEBbIF0p
OwogICAgIH0KICAgICBbYXR0YWNobWVudCBleHBlY3RSZXF1ZXN0ZWREYXRhVG9CZTpbTlNEYXRh
IGRhdGFdXTsKIH0KIAorVEVTVChXS0F0dGFjaG1lbnRUZXN0cywgRHJvcEZvbGRlckFzQXR0YWNo
bWVudEFuZE1vdmVCeURyYWdnaW5nKQoreworICAgIGF1dG8gY29uZmlndXJhdGlvbiA9IGFkb3B0
TlMoW1tXS1dlYlZpZXdDb25maWd1cmF0aW9uIGFsbG9jXSBpbml0XSk7CisgICAgW2NvbmZpZ3Vy
YXRpb24gX3NldEF0dGFjaG1lbnRFbGVtZW50RW5hYmxlZDpZRVNdOworCisgICAgYXV0byBzaW11
bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRoV2Vi
Vmlld0ZyYW1lOk5TTWFrZVJlY3QoMCwgMCwgNDAwLCA0MDApIGNvbmZpZ3VyYXRpb246Y29uZmln
dXJhdGlvbi5nZXQoKV0pOworICAgIFtbc2ltdWxhdG9yIHdlYlZpZXddIHN5bmNocm9ub3VzbHlM
b2FkSFRNTFN0cmluZzphdHRhY2htZW50RWRpdGluZ1Rlc3RNYXJrdXBdOworCisgICAgcnVuVGVz
dFdpdGhUZW1wb3JhcnlGb2xkZXIoW3NpbXVsYXRvcl0gKE5TVVJMICpmb2xkZXJVUkwpIHsKKyAg
ICAgICAgc2ltdWxhdGVGb2xkZXJEcmFnV2l0aFVSTChzaW11bGF0b3IuZ2V0KCksIGZvbGRlclVS
TCk7CisgICAgICAgIFtzaW11bGF0b3IgcnVuRnJvbTpDR1BvaW50TWFrZSgwLCAwKSB0bzpDR1Bv
aW50TWFrZSg1MCwgNTApXTsKKworICAgICAgICBUZXN0V0tXZWJWaWV3ICp3ZWJWaWV3ID0gW3Np
bXVsYXRvciB3ZWJWaWV3XTsKKyAgICAgICAgYXV0byBhdHRhY2htZW50ID0gcmV0YWluUHRyKFtz
aW11bGF0b3IgaW5zZXJ0ZWRBdHRhY2htZW50c10uZmlyc3RPYmplY3QpOworICAgICAgICBFWFBF
Q1RfV0tfU1RSRVEoW2F0dGFjaG1lbnQgdW5pcXVlSWRlbnRpZmllcl0sIFt3ZWJWaWV3IHN0cmlu
Z0J5RXZhbHVhdGluZ0phdmFTY3JpcHQ6QCJkb2N1bWVudC5xdWVyeVNlbGVjdG9yKCdhdHRhY2ht
ZW50JykudW5pcXVlSWRlbnRpZmllciJdKTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKChfX2Jy
aWRnZSBOU1N0cmluZyAqKWtVVFR5cGVEaXJlY3RvcnksIFt3ZWJWaWV3IHZhbHVlT2ZBdHRyaWJ1
dGU6QCJ0eXBlIiBmb3JRdWVyeVNlbGVjdG9yOkAiYXR0YWNobWVudCJdKTsKKyAgICAgICAgRVhQ
RUNUX1dLX1NUUkVRKGZvbGRlclVSTC5sYXN0UGF0aENvbXBvbmVudCwgW3dlYlZpZXcgdmFsdWVP
ZkF0dHJpYnV0ZTpAInRpdGxlIiBmb3JRdWVyeVNlbGVjdG9yOkAiYXR0YWNobWVudCJdKTsKKwor
ICAgICAgICBOU0ZpbGVXcmFwcGVyICppbWFnZSA9IFthdHRhY2htZW50IGluZm9dLmZpbGVXcmFw
cGVyLmZpbGVXcmFwcGVyc1tAImltYWdlLnBuZyJdOworICAgICAgICBOU0ZpbGVXcmFwcGVyICph
cmNoaXZlID0gW2F0dGFjaG1lbnQgaW5mb10uZmlsZVdyYXBwZXIuZmlsZVdyYXBwZXJzW0AiYXJj
aGl2ZS56aXAiXTsKKyAgICAgICAgRVhQRUNUX1RSVUUoW2ltYWdlLnJlZ3VsYXJGaWxlQ29udGVu
dHMgaXNFcXVhbFRvRGF0YTp0ZXN0SW1hZ2VEYXRhKCldKTsKKyAgICAgICAgRVhQRUNUX1RSVUUo
W2FyY2hpdmUucmVndWxhckZpbGVDb250ZW50cyBpc0VxdWFsVG9EYXRhOnRlc3RaSVBEYXRhKCld
KTsKKworICAgICAgICBbd2ViVmlldyBldmFsdWF0ZUphdmFTY3JpcHQ6QCJnZXRTZWxlY3Rpb24o
KS5jb2xsYXBzZVRvRW5kKCkiIGNvbXBsZXRpb25IYW5kbGVyOm5pbF07CisgICAgICAgIFt3ZWJW
aWV3IF9leGVjdXRlRWRpdENvbW1hbmQ6QCJJbnNlcnRQYXJhZ3JhcGgiIGFyZ3VtZW50Om5pbCBj
b21wbGV0aW9uOm5pbF07CisgICAgICAgIFt3ZWJWaWV3IF9leGVjdXRlRWRpdENvbW1hbmQ6QCJJ
bnNlcnRIVE1MIiBhcmd1bWVudDpAIjxlbT5mb288L2VtPiIgY29tcGxldGlvbjpuaWxdOworICAg
ICAgICBbd2ViVmlldyBfZXhlY3V0ZUVkaXRDb21tYW5kOkAiSW5zZXJ0UGFyYWdyYXBoIiBhcmd1
bWVudDpuaWwgY29tcGxldGlvbjpuaWxdOworCisgICAgICAgIFt3ZWJWaWV3IGV4cGVjdEVsZW1l
bnRUYWc6QCJBVFRBQ0hNRU5UIiB0b0NvbWVCZWZvcmU6QCJFTSJdOworICAgICAgICBbc2ltdWxh
dG9yIGNsZWFyRXh0ZXJuYWxEcmFnSW5mb3JtYXRpb25dOworICAgICAgICBbc2ltdWxhdG9yIHJ1
bkZyb206d2ViVmlldy5hdHRhY2htZW50RWxlbWVudE1pZFBvaW50IHRvOkNHUG9pbnRNYWtlKDMw
MCwgMzAwKV07CisgICAgICAgIFt3ZWJWaWV3IGV4cGVjdEVsZW1lbnRUYWc6QCJFTSIgdG9Db21l
QmVmb3JlOkAiQVRUQUNITUVOVCJdOworICAgIH0pOworfQorCitURVNUKFdLQXR0YWNobWVudFRl
c3RzLCBJbnNlcnRGb2xkZXJBbmRGaWxlV2l0aFVua25vd25FeHRlbnNpb24pCit7CisgICAgYXV0
byB3ZWJWaWV3ID0gd2ViVmlld0ZvclRlc3RpbmdBdHRhY2htZW50cygpOworICAgIGF1dG8gZmls
ZSA9IGFkb3B0TlMoW1tOU0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0UmVndWxhckZpbGVXaXRoQ29u
dGVudHM6dGVzdEhUTUxEYXRhKCldKTsKKyAgICBbZmlsZSBzZXRQcmVmZXJyZWRGaWxlbmFtZTpA
InRlc3QuZm9vYmFyIl07CisgICAgYXV0byBpbWFnZSA9IGFkb3B0TlMoW1tOU0ZpbGVXcmFwcGVy
IGFsbG9jXSBpbml0UmVndWxhckZpbGVXaXRoQ29udGVudHM6dGVzdEltYWdlRGF0YSgpXSk7Cisg
ICAgYXV0byBkb2N1bWVudCA9IGFkb3B0TlMoW1tOU0ZpbGVXcmFwcGVyIGFsbG9jXSBpbml0UmVn
dWxhckZpbGVXaXRoQ29udGVudHM6dGVzdFBERkRhdGEoKV0pOworICAgIGF1dG8gZm9sZGVyID0g
YWRvcHROUyhbW05TRmlsZVdyYXBwZXIgYWxsb2NdIGluaXREaXJlY3RvcnlXaXRoRmlsZVdyYXBw
ZXJzOkB7IEAiaW1hZ2UucG5nIjogaW1hZ2UuZ2V0KCksIEAiZG9jdW1lbnQucGRmIjogZG9jdW1l
bnQuZ2V0KCkgfV0pOworICAgIFtmb2xkZXIgc2V0UHJlZmVycmVkRmlsZW5hbWU6QCJmb2xkZXIi
XTsKKworICAgIFJldGFpblB0cjxfV0tBdHRhY2htZW50PiBmaXJzdEF0dGFjaG1lbnQ7CisgICAg
UmV0YWluUHRyPF9XS0F0dGFjaG1lbnQ+IHNlY29uZEF0dGFjaG1lbnQ7CisgICAgeworICAgICAg
ICBPYnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcih3ZWJWaWV3LmdldCgp
KTsKKyAgICAgICAgZmlyc3RBdHRhY2htZW50ID0gW3dlYlZpZXcgc3luY2hyb25vdXNseUluc2Vy
dEF0dGFjaG1lbnRXaXRoRmlsZVdyYXBwZXI6ZmlsZS5nZXQoKSBjb250ZW50VHlwZTpuaWxdOwor
ICAgICAgICBvYnNlcnZlci5leHBlY3RBdHRhY2htZW50VXBkYXRlcyhAWyBdLCBAWyBmaXJzdEF0
dGFjaG1lbnQuZ2V0KCkgXSk7CisgICAgfQorICAgIHsKKyAgICAgICAgT2JzZXJ2ZUF0dGFjaG1l
bnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2ZXIod2ViVmlldy5nZXQoKSk7CisgICAgICAgIHNlY29u
ZEF0dGFjaG1lbnQgPSBbd2ViVmlldyBzeW5jaHJvbm91c2x5SW5zZXJ0QXR0YWNobWVudFdpdGhG
aWxlV3JhcHBlcjpmb2xkZXIuZ2V0KCkgY29udGVudFR5cGU6bmlsXTsKKyAgICAgICAgb2JzZXJ2
ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFsgXSwgQFsgc2Vjb25kQXR0YWNobWVudC5nZXQo
KSBdKTsKKyAgICB9CisKKyAgICBhdXRvIGNoZWNrQXR0YWNobWVudENvbnNpc3RlbmN5ID0gW3dl
YlZpZXcsIGZpbGUsIGZvbGRlcl0gKF9XS0F0dGFjaG1lbnQgKmV4cGVjdGVkRmlsZUF0dGFjaG1l
bnQsIF9XS0F0dGFjaG1lbnQgKmV4cGVjdGVkRm9sZGVyQXR0YWNobWVudCkgeworICAgICAgICBb
d2ViVmlldyBleHBlY3RFbGVtZW50Q291bnQ6MiB0YWdOYW1lOkAiQVRUQUNITUVOVCJdOworICAg
ICAgICBFWFBFQ1RfVFJVRShVVFR5cGVDb25mb3Jtc1RvKChfX2JyaWRnZSBDRlN0cmluZ1JlZilb
d2ViVmlldyB2YWx1ZU9mQXR0cmlidXRlOkAidHlwZSIgZm9yUXVlcnlTZWxlY3RvcjpAImF0dGFj
aG1lbnRbdGl0bGU9Zm9sZGVyXSJdLCBrVVRUeXBlRGlyZWN0b3J5KSk7CisgICAgICAgIEVYUEVD
VF9UUlVFKFVUVHlwZUNvbmZvcm1zVG8oKF9fYnJpZGdlIENGU3RyaW5nUmVmKVt3ZWJWaWV3IHZh
bHVlT2ZBdHRyaWJ1dGU6QCJ0eXBlIiBmb3JRdWVyeVNlbGVjdG9yOkAiYXR0YWNobWVudFt0aXRs
ZV49dGVzdF0iXSwga1VUVHlwZURhdGEpKTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVRKGV4cGVj
dGVkRmlsZUF0dGFjaG1lbnQudW5pcXVlSWRlbnRpZmllciwgW3dlYlZpZXcgc3RyaW5nQnlFdmFs
dWF0aW5nSmF2YVNjcmlwdDpAImRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoJ2F0dGFjaG1lbnRbdGl0
bGVePXRlc3RdJykudW5pcXVlSWRlbnRpZmllciJdKTsKKyAgICAgICAgRVhQRUNUX1dLX1NUUkVR
KGV4cGVjdGVkRm9sZGVyQXR0YWNobWVudC51bmlxdWVJZGVudGlmaWVyLCBbd2ViVmlldyBzdHJp
bmdCeUV2YWx1YXRpbmdKYXZhU2NyaXB0OkAiZG9jdW1lbnQucXVlcnlTZWxlY3RvcignYXR0YWNo
bWVudFt0aXRsZT1mb2xkZXJdJykudW5pcXVlSWRlbnRpZmllciJdKTsKKyAgICAgICAgRVhQRUNU
X1RSVUUoW2V4cGVjdGVkRmlsZUF0dGFjaG1lbnQuaW5mby5maWxlV3JhcHBlciBpc0VxdWFsOmZp
bGUuZ2V0KCldKTsKKyAgICAgICAgRVhQRUNUX1RSVUUoW2V4cGVjdGVkRm9sZGVyQXR0YWNobWVu
dC5pbmZvLmZpbGVXcmFwcGVyIGlzRXF1YWw6Zm9sZGVyLmdldCgpXSk7CisgICAgfTsKKworICAg
IGNoZWNrQXR0YWNobWVudENvbnNpc3RlbmN5KGZpcnN0QXR0YWNobWVudC5nZXQoKSwgc2Vjb25k
QXR0YWNobWVudC5nZXQoKSk7CisKKyAgICB7CisgICAgICAgIC8vIFN3YXAgdGhlIHR3byBhdHRh
Y2htZW50cycgZmlsZSB3cmFwcGVycyB3aXRob3V0IGNyZWF0aW5nIG9yIGRlc3Ryb3lpbmcgYXR0
YWNobWVudCBlbGVtZW50cy4KKyAgICAgICAgT2JzZXJ2ZUF0dGFjaG1lbnRVcGRhdGVzRm9yU2Nv
cGUgb2JzZXJ2ZXIod2ViVmlldy5nZXQoKSk7CisgICAgICAgIFtmaXJzdEF0dGFjaG1lbnQgc3lu
Y2hyb25vdXNseVNldEZpbGVXcmFwcGVyOmZvbGRlci5nZXQoKSBuZXdDb250ZW50VHlwZTpuaWwg
ZXJyb3I6bmlsXTsKKyAgICAgICAgW3NlY29uZEF0dGFjaG1lbnQgc3luY2hyb25vdXNseVNldEZp
bGVXcmFwcGVyOmZpbGUuZ2V0KCkgbmV3Q29udGVudFR5cGU6bmlsIGVycm9yOm5pbF07CisgICAg
ICAgIG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbIF0sIEBbIF0pOworICAgIH0K
KworICAgIGNoZWNrQXR0YWNobWVudENvbnNpc3RlbmN5KHNlY29uZEF0dGFjaG1lbnQuZ2V0KCks
IGZpcnN0QXR0YWNobWVudC5nZXQoKSk7Cit9CisKIFRFU1QoV0tBdHRhY2htZW50VGVzdHMsIENo
YW5nZUF0dGFjaG1lbnREYXRhQW5kRmlsZUluZm9ybWF0aW9uKQogewogICAgIGF1dG8gd2ViVmll
dyA9IHdlYlZpZXdGb3JUZXN0aW5nQXR0YWNobWVudHMoKTsKQEAgLTc2MSw3ICs4NzMsNyBAQCBU
RVNUKFdLQXR0YWNobWVudFRlc3RzLCBDaGFuZ2VBdHRhY2htZW50RGF0YUFuZEZpbGVJbmZvcm1h
dGlvbikKICAgICAgICAgW2F0dGFjaG1lbnQgZXhwZWN0UmVxdWVzdGVkRGF0YVRvQmU6cGRmRGF0
YS5nZXQoKV07CiAgICAgICAgIEVYUEVDVF9XS19TVFJFUShAInRlc3QucGRmIiwgW3dlYlZpZXcg
dmFsdWVPZkF0dHJpYnV0ZTpAInRpdGxlIiBmb3JRdWVyeVNlbGVjdG9yOkAiYXR0YWNobWVudCJd
KTsKICAgICAgICAgRVhQRUNUX1dLX1NUUkVRKEAiYXBwbGljYXRpb24vcGRmIiwgW3dlYlZpZXcg
dmFsdWVPZkF0dHJpYnV0ZTpAInR5cGUiIGZvclF1ZXJ5U2VsZWN0b3I6QCJhdHRhY2htZW50Il0p
OwotICAgICAgICBvYnNlcnZlci5leHBlY3RBdHRhY2htZW50VXBkYXRlcyhAW10sIEBbYXR0YWNo
bWVudC5nZXQoKV0pOworICAgICAgICBvYnNlcnZlci5leHBlY3RBdHRhY2htZW50VXBkYXRlcyhA
WyBdLCBAW2F0dGFjaG1lbnQuZ2V0KCldKTsKICAgICB9CiAgICAgewogICAgICAgICBSZXRhaW5Q
dHI8TlNEYXRhPiBpbWFnZURhdGEgPSB0ZXN0SW1hZ2VEYXRhKCk7CkBAIC03NzAsMjkgKzg4Miwy
OCBAQCBURVNUKFdLQXR0YWNobWVudFRlc3RzLCBDaGFuZ2VBdHRhY2htZW50RGF0YUFuZEZpbGVJ
bmZvcm1hdGlvbikKICAgICAgICAgW2F0dGFjaG1lbnQgZXhwZWN0UmVxdWVzdGVkRGF0YVRvQmU6
aW1hZ2VEYXRhLmdldCgpXTsKICAgICAgICAgRVhQRUNUX1dLX1NUUkVRKEAiaWNvbi5wbmciLCBb
d2ViVmlldyB2YWx1ZU9mQXR0cmlidXRlOkAidGl0bGUiIGZvclF1ZXJ5U2VsZWN0b3I6QCJhdHRh
Y2htZW50Il0pOwogICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJpbWFnZS9wbmciLCBbd2ViVmll
dyB2YWx1ZU9mQXR0cmlidXRlOkAidHlwZSIgZm9yUXVlcnlTZWxlY3RvcjpAImF0dGFjaG1lbnQi
XSk7Ci0gICAgICAgIG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbXSwgQFtdKTsK
KyAgICAgICAgb2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFsgXSwgQFsgXSk7CiAg
ICAgfQogICAgIHsKLSAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4gdGV4dERhdGEgPSB0ZXN0SFRN
TERhdGEoKTsKKyAgICAgICAgUmV0YWluUHRyPE5TRGF0YT4gdGV4dERhdGEgPSBbQCJIZWxsbyB3
b3JsZCIgZGF0YVVzaW5nRW5jb2Rpbmc6TlNVVEY4U3RyaW5nRW5jb2RpbmddOwogICAgICAgICBP
YnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcih3ZWJWaWV3LmdldCgpKTsK
ICAgICAgICAgLy8gVGhlIG5ldyBjb250ZW50IHR5cGUgc2hvdWxkIGJlIGluZmVycmVkIGZyb20g
dGhlIGZpbGUgbmFtZS4KICAgICAgICAgW2F0dGFjaG1lbnQgc3luY2hyb25vdXNseVNldERhdGE6
dGV4dERhdGEuZ2V0KCkgbmV3Q29udGVudFR5cGU6bmlsIG5ld0ZpbGVuYW1lOkAiZm9vLnR4dCIg
ZXJyb3I6bmlsXTsKICAgICAgICAgW2F0dGFjaG1lbnQgZXhwZWN0UmVxdWVzdGVkRGF0YVRvQmU6
dGV4dERhdGEuZ2V0KCldOwogICAgICAgICBFWFBFQ1RfV0tfU1RSRVEoQCJmb28udHh0IiwgW3dl
YlZpZXcgdmFsdWVPZkF0dHJpYnV0ZTpAInRpdGxlIiBmb3JRdWVyeVNlbGVjdG9yOkAiYXR0YWNo
bWVudCJdKTsKICAgICAgICAgRVhQRUNUX1dLX1NUUkVRKEAidGV4dC9wbGFpbiIsIFt3ZWJWaWV3
IHZhbHVlT2ZBdHRyaWJ1dGU6QCJ0eXBlIiBmb3JRdWVyeVNlbGVjdG9yOkAiYXR0YWNobWVudCJd
KTsKLSAgICAgICAgb2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFtdLCBAW10pOwor
ICAgICAgICBvYnNlcnZlci5leHBlY3RBdHRhY2htZW50VXBkYXRlcyhAWyBdLCBAWyBdKTsKICAg
ICB9CiAgICAgewotICAgICAgICBSZXRhaW5QdHI8TlNEYXRhPiBzZWNvbmRUZXh0RGF0YSA9IFtA
IkhlbGxvIHdvcmxkIiBkYXRhVXNpbmdFbmNvZGluZzpOU1VURjhTdHJpbmdFbmNvZGluZ107Cisg
ICAgICAgIFJldGFpblB0cjxOU0RhdGE+IGh0bWxEYXRhID0gdGVzdEhUTUxEYXRhKCk7CiAgICAg
ICAgIE9ic2VydmVBdHRhY2htZW50VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVyKHdlYlZpZXcuZ2V0
KCkpOwotICAgICAgICAvLyBCb3RoIHRoZSBwcmV2aW91cyBmaWxlIG5hbWUgYW5kIHR5cGUgc2hv
dWxkIGJlIGluZmVycmVkLgotICAgICAgICBbYXR0YWNobWVudCBzeW5jaHJvbm91c2x5U2V0RGF0
YTpzZWNvbmRUZXh0RGF0YS5nZXQoKSBuZXdDb250ZW50VHlwZTpuaWwgbmV3RmlsZW5hbWU6bmls
IGVycm9yOm5pbF07Ci0gICAgICAgIFthdHRhY2htZW50IGV4cGVjdFJlcXVlc3RlZERhdGFUb0Jl
OnNlY29uZFRleHREYXRhLmdldCgpXTsKLSAgICAgICAgRVhQRUNUX1dLX1NUUkVRKEAiZm9vLnR4
dCIsIFt3ZWJWaWV3IHZhbHVlT2ZBdHRyaWJ1dGU6QCJ0aXRsZSIgZm9yUXVlcnlTZWxlY3RvcjpA
ImF0dGFjaG1lbnQiXSk7Ci0gICAgICAgIEVYUEVDVF9XS19TVFJFUShAInRleHQvcGxhaW4iLCBb
d2ViVmlldyB2YWx1ZU9mQXR0cmlidXRlOkAidHlwZSIgZm9yUXVlcnlTZWxlY3RvcjpAImF0dGFj
aG1lbnQiXSk7Ci0gICAgICAgIG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbXSwg
QFtdKTsKKyAgICAgICAgW2F0dGFjaG1lbnQgc3luY2hyb25vdXNseVNldERhdGE6aHRtbERhdGEu
Z2V0KCkgbmV3Q29udGVudFR5cGU6QCJ0ZXh0L2h0bWwiIG5ld0ZpbGVuYW1lOkAiYmFyIiBlcnJv
cjpuaWxdOworICAgICAgICBbYXR0YWNobWVudCBleHBlY3RSZXF1ZXN0ZWREYXRhVG9CZTpodG1s
RGF0YS5nZXQoKV07CisgICAgICAgIEVYUEVDVF9XS19TVFJFUShAImJhciIsIFt3ZWJWaWV3IHZh
bHVlT2ZBdHRyaWJ1dGU6QCJ0aXRsZSIgZm9yUXVlcnlTZWxlY3RvcjpAImF0dGFjaG1lbnQiXSk7
CisgICAgICAgIEVYUEVDVF9XS19TVFJFUShAInRleHQvaHRtbCIsIFt3ZWJWaWV3IHZhbHVlT2ZB
dHRyaWJ1dGU6QCJ0eXBlIiBmb3JRdWVyeVNlbGVjdG9yOkAiYXR0YWNobWVudCJdKTsKKyAgICAg
ICAgb2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFsgXSwgQFsgXSk7CiAgICAgfQot
ICAgIFt3ZWJWaWV3IGV4cGVjdFVwZGF0ZXNBZnRlckNvbW1hbmQ6QCJEZWxldGVCYWNrd2FyZCIg
d2l0aEFyZ3VtZW50Om5pbCBleHBlY3RlZFJlbW92YWxzOkBbYXR0YWNobWVudC5nZXQoKV0gZXhw
ZWN0ZWRJbnNlcnRpb25zOkBbXV07CisgICAgW3dlYlZpZXcgZXhwZWN0VXBkYXRlc0FmdGVyQ29t
bWFuZDpAIkRlbGV0ZUJhY2t3YXJkIiB3aXRoQXJndW1lbnQ6bmlsIGV4cGVjdGVkUmVtb3ZhbHM6
QFthdHRhY2htZW50LmdldCgpXSBleHBlY3RlZEluc2VydGlvbnM6QFsgXV07CiB9CiAKIFRFU1Qo
V0tBdHRhY2htZW50VGVzdHMsIFJlbW92ZU5ld2xpbmVzQmVmb3JlUGFzdGVkSW1hZ2UpCkBAIC05
MDMsNyArMTAxNCw3IEBAIFRFU1QoV0tBdHRhY2htZW50VGVzdHMsIEluc2VydFBhc3RlZEF0dHJp
YnV0ZWRTdHJpbmdDb250YWluaW5nSW1hZ2UpCiAgICAgICAgIE9ic2VydmVBdHRhY2htZW50VXBk
YXRlc0ZvclNjb3BlIG9ic2VydmVyKHdlYlZpZXcuZ2V0KCkpOwogICAgICAgICBbd2ViVmlldyBf
c3luY2hyb25vdXNseUV4ZWN1dGVFZGl0Q29tbWFuZDpAIlNlbGVjdEFsbCIgYXJndW1lbnQ6bmls
XTsKICAgICAgICAgW3dlYlZpZXcgX3N5bmNocm9ub3VzbHlFeGVjdXRlRWRpdENvbW1hbmQ6QCJE
ZWxldGVCYWNrd2FyZCIgYXJndW1lbnQ6bmlsXTsKLSAgICAgICAgb2JzZXJ2ZXIuZXhwZWN0QXR0
YWNobWVudFVwZGF0ZXMoQFthdHRhY2htZW50LmdldCgpXSwgQFtdKTsKKyAgICAgICAgb2JzZXJ2
ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFsgYXR0YWNobWVudC5nZXQoKSBdLCBAWyBdKTsK
ICAgICB9CiB9CiAKQEAgLTk4OSw3ICsxMTAwLDcgQEAgVEVTVChXS0F0dGFjaG1lbnRUZXN0cywg
SW5zZXJ0QW5kUmVtb3ZlRHVwbGljYXRlQXR0YWNobWVudCkKICAgICAgICAgT2JzZXJ2ZUF0dGFj
aG1lbnRVcGRhdGVzRm9yU2NvcGUgb2JzZXJ2ZXIod2ViVmlldy5nZXQoKSk7CiAgICAgICAgIG9y
aWdpbmFsQXR0YWNobWVudCA9IFt3ZWJWaWV3IHN5bmNocm9ub3VzbHlJbnNlcnRBdHRhY2htZW50
V2l0aEZpbGVXcmFwcGVyOmZpbGVXcmFwcGVyLmdldCgpIGNvbnRlbnRUeXBlOkAidGV4dC9wbGFp
biJdOwogICAgICAgICBFWFBFQ1RfRVEoMFUsIG9ic2VydmVyLm9ic2VydmVyKCkucmVtb3ZlZC5j
b3VudCk7Ci0gICAgICAgIG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbXSwgQFtv
cmlnaW5hbEF0dGFjaG1lbnQuZ2V0KCldKTsKKyAgICAgICAgb2JzZXJ2ZXIuZXhwZWN0QXR0YWNo
bWVudFVwZGF0ZXMoQFsgXSwgQFsgb3JpZ2luYWxBdHRhY2htZW50LmdldCgpIF0pOwogICAgIH0K
ICAgICBbd2ViVmlldyBzZWxlY3RBbGw6bmlsXTsKICAgICBbd2ViVmlldyBfZXhlY3V0ZUVkaXRD
b21tYW5kOkAiQ29weSIgYXJndW1lbnQ6bmlsIGNvbXBsZXRpb246bmlsXTsKQEAgLTEwMDUsMTMg
KzExMTYsMTMgQEAgVEVTVChXS0F0dGFjaG1lbnRUZXN0cywgSW5zZXJ0QW5kUmVtb3ZlRHVwbGlj
YXRlQXR0YWNobWVudCkKICAgICB7CiAgICAgICAgIE9ic2VydmVBdHRhY2htZW50VXBkYXRlc0Zv
clNjb3BlIG9ic2VydmVyKHdlYlZpZXcuZ2V0KCkpOwogICAgICAgICBbd2ViVmlldyBfc3luY2hy
b25vdXNseUV4ZWN1dGVFZGl0Q29tbWFuZDpAIkRlbGV0ZUJhY2t3YXJkIiBhcmd1bWVudDpuaWxd
OwotICAgICAgICBvYnNlcnZlci5leHBlY3RBdHRhY2htZW50VXBkYXRlcyhAW3Bhc3RlZEF0dGFj
aG1lbnQuZ2V0KCldLCBAW10pOworICAgICAgICBvYnNlcnZlci5leHBlY3RBdHRhY2htZW50VXBk
YXRlcyhAWyBwYXN0ZWRBdHRhY2htZW50LmdldCgpIF0sIEBbIF0pOwogICAgICAgICBbb3JpZ2lu
YWxBdHRhY2htZW50IGV4cGVjdFJlcXVlc3RlZERhdGFUb0JlOmRhdGEuZ2V0KCldOwogICAgIH0K
ICAgICB7CiAgICAgICAgIE9ic2VydmVBdHRhY2htZW50VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVy
KHdlYlZpZXcuZ2V0KCkpOwogICAgICAgICBbd2ViVmlldyBfc3luY2hyb25vdXNseUV4ZWN1dGVF
ZGl0Q29tbWFuZDpAIkRlbGV0ZUJhY2t3YXJkIiBhcmd1bWVudDpuaWxdOwotICAgICAgICBvYnNl
cnZlci5leHBlY3RBdHRhY2htZW50VXBkYXRlcyhAW29yaWdpbmFsQXR0YWNobWVudC5nZXQoKV0s
IEBbXSk7CisgICAgICAgIG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbIG9yaWdp
bmFsQXR0YWNobWVudC5nZXQoKSBdLCBAWyBdKTsKICAgICB9CiAKICAgICBFWFBFQ1RfRkFMU0Uo
W29yaWdpbmFsQXR0YWNobWVudCBpc0VxdWFsOnBhc3RlZEF0dGFjaG1lbnQuZ2V0KCldKTsKQEAg
LTEwMzAsNyArMTE0MSw3IEBAIFRFU1QoV0tBdHRhY2htZW50VGVzdHMsIEluc2VydER1cGxpY2F0
ZUF0dGFjaG1lbnRBbmRVcGRhdGVEYXRhKQogICAgICAgICBPYnNlcnZlQXR0YWNobWVudFVwZGF0
ZXNGb3JTY29wZSBvYnNlcnZlcih3ZWJWaWV3LmdldCgpKTsKICAgICAgICAgb3JpZ2luYWxBdHRh
Y2htZW50ID0gW3dlYlZpZXcgc3luY2hyb25vdXNseUluc2VydEF0dGFjaG1lbnRXaXRoRmlsZVdy
YXBwZXI6ZmlsZVdyYXBwZXIuZ2V0KCkgY29udGVudFR5cGU6QCJ0ZXh0L3BsYWluIl07CiAgICAg
ICAgIEVYUEVDVF9FUSgwVSwgb2JzZXJ2ZXIub2JzZXJ2ZXIoKS5yZW1vdmVkLmNvdW50KTsKLSAg
ICAgICAgb2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFtdLCBAW29yaWdpbmFsQXR0
YWNobWVudC5nZXQoKV0pOworICAgICAgICBvYnNlcnZlci5leHBlY3RBdHRhY2htZW50VXBkYXRl
cyhAWyBdLCBAWyBvcmlnaW5hbEF0dGFjaG1lbnQuZ2V0KCkgXSk7CiAgICAgfQogICAgIFt3ZWJW
aWV3IHNlbGVjdEFsbDpuaWxdOwogICAgIFt3ZWJWaWV3IF9leGVjdXRlRWRpdENvbW1hbmQ6QCJD
b3B5IiBhcmd1bWVudDpuaWwgY29tcGxldGlvbjpuaWxdOwpAQCAtMTIxOSw3ICsxMzMwLDcgQEAg
VEVTVChXS0F0dGFjaG1lbnRUZXN0cywgUGFzdGVXZWJBcmNoaXZlQ29udGFpbmluZ0ltYWdlcykK
ICAgICBhdXRvIG1haW5SZXNvdXJjZSA9IGFkb3B0TlMoW1tXZWJSZXNvdXJjZSBhbGxvY10gaW5p
dFdpdGhEYXRhOm1hcmt1cERhdGEgVVJMOltOU1VSTCBVUkxXaXRoU3RyaW5nOkAiZm9vLmh0bWwi
XSBNSU1FVHlwZTpAInRleHQvaHRtbCIgdGV4dEVuY29kaW5nTmFtZTpAInV0Zi04IiBmcmFtZU5h
bWU6bmlsXSk7CiAgICAgYXV0byBwbmdSZXNvdXJjZSA9IGFkb3B0TlMoW1tXZWJSZXNvdXJjZSBh
bGxvY10gaW5pdFdpdGhEYXRhOnRlc3RJbWFnZURhdGEoKSBVUkw6W05TVVJMIFVSTFdpdGhTdHJp
bmc6QCIxLnBuZyJdIE1JTUVUeXBlOkAiaW1hZ2UvcG5nIiB0ZXh0RW5jb2RpbmdOYW1lOm5pbCBm
cmFtZU5hbWU6bmlsXSk7CiAgICAgYXV0byBnaWZSZXNvdXJjZSA9IGFkb3B0TlMoW1tXZWJSZXNv
dXJjZSBhbGxvY10gaW5pdFdpdGhEYXRhOnRlc3RHSUZEYXRhKCkgVVJMOltOU1VSTCBVUkxXaXRo
U3RyaW5nOkAiMi5naWYiXSBNSU1FVHlwZTpAImltYWdlL2dpZiIgdGV4dEVuY29kaW5nTmFtZTpu
aWwgZnJhbWVOYW1lOm5pbF0pOwotICAgIGF1dG8gYXJjaGl2ZSA9IGFkb3B0TlMoW1tXZWJBcmNo
aXZlIGFsbG9jXSBpbml0V2l0aE1haW5SZXNvdXJjZTooX19icmlkZ2UgV2ViUmVzb3VyY2UgKilt
YWluUmVzb3VyY2UuZ2V0KCkgc3VicmVzb3VyY2VzOkBbIChfX2JyaWRnZSBXZWJSZXNvdXJjZSAq
KXBuZ1Jlc291cmNlLmdldCgpLCAoX19icmlkZ2UgV2ViUmVzb3VyY2UgKilnaWZSZXNvdXJjZS5n
ZXQoKSBdIHN1YmZyYW1lQXJjaGl2ZXM6QFsgXV0pOworICAgIGF1dG8gYXJjaGl2ZSA9IGFkb3B0
TlMoW1tXZWJBcmNoaXZlIGFsbG9jXSBpbml0V2l0aE1haW5SZXNvdXJjZTptYWluUmVzb3VyY2Uu
Z2V0KCkgc3VicmVzb3VyY2VzOkBbIHBuZ1Jlc291cmNlLmdldCgpLCBnaWZSZXNvdXJjZS5nZXQo
KSBdIHN1YmZyYW1lQXJjaGl2ZXM6QFsgXV0pOwogCiAjaWYgUExBVEZPUk0oTUFDKQogICAgIE5T
UGFzdGVib2FyZCAqcGFzdGVib2FyZCA9IFtOU1Bhc3RlYm9hcmQgZ2VuZXJhbFBhc3RlYm9hcmRd
OwpAQCAtMTIzNCw3ICsxMzQ1LDcgQEAgVEVTVChXS0F0dGFjaG1lbnRUZXN0cywgUGFzdGVXZWJB
cmNoaXZlQ29udGFpbmluZ0ltYWdlcykKICAgICBSZXRhaW5QdHI8X1dLQXR0YWNobWVudD4gcG5n
QXR0YWNobWVudDsKICAgICBhdXRvIHdlYlZpZXcgPSB3ZWJWaWV3Rm9yVGVzdGluZ0F0dGFjaG1l
bnRzKCk7CiAKLSAgICBPYnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcigo
X19icmlkZ2UgVGVzdFdLV2ViVmlldyAqKXdlYlZpZXcuZ2V0KCkpOworICAgIE9ic2VydmVBdHRh
Y2htZW50VXBkYXRlc0ZvclNjb3BlIG9ic2VydmVyKHdlYlZpZXcuZ2V0KCkpOwogICAgIFt3ZWJW
aWV3IF9zeW5jaHJvbm91c2x5RXhlY3V0ZUVkaXRDb21tYW5kOkAiUGFzdGUiIGFyZ3VtZW50Om5p
bF07CiAgICAgW3dlYlZpZXcgZXhwZWN0RWxlbWVudENvdW50OjIgdGFnTmFtZTpAIklNRyJdOwog
CkBAIC0xMjQ5LDcgKzEzNjAsNyBAQCBURVNUKFdLQXR0YWNobWVudFRlc3RzLCBQYXN0ZVdlYkFy
Y2hpdmVDb250YWluaW5nSW1hZ2VzKQogICAgIEVYUEVDVF9XS19TVFJFUSgiYmFyIiwgW2dpZkF0
dGFjaG1lbnQgaW5mb10ubmFtZSk7CiAgICAgW3BuZ0F0dGFjaG1lbnQgZXhwZWN0UmVxdWVzdGVk
RGF0YVRvQmU6dGVzdEltYWdlRGF0YSgpXTsKICAgICBbZ2lmQXR0YWNobWVudCBleHBlY3RSZXF1
ZXN0ZWREYXRhVG9CZTp0ZXN0R0lGRGF0YSgpXTsKLSAgICBvYnNlcnZlci5leHBlY3RBdHRhY2ht
ZW50VXBkYXRlcyhAWyBdLCBAWyAoX19icmlkZ2UgX1dLQXR0YWNobWVudCAqKXBuZ0F0dGFjaG1l
bnQuZ2V0KCksIChfX2JyaWRnZSBfV0tBdHRhY2htZW50ICopZ2lmQXR0YWNobWVudC5nZXQoKSBd
KTsKKyAgICBvYnNlcnZlci5leHBlY3RBdHRhY2htZW50VXBkYXRlcyhAWyBdLCBAWyBwbmdBdHRh
Y2htZW50LmdldCgpLCBnaWZBdHRhY2htZW50LmdldCgpIF0pOwogfQogCiAjcHJhZ21hIG1hcmsg
LSBQbGF0Zm9ybS1zcGVjaWZpYyB0ZXN0cwpAQCAtMTM2Myw3ICsxNDc0LDcgQEAgVEVTVChXS0F0
dGFjaG1lbnRUZXN0c0lPUywgSW5zZXJ0RHJvcHBlZEltYWdlQXNBdHRhY2htZW50KQogICAgIGF1
dG8gd2ViVmlldyA9IHdlYlZpZXdGb3JUZXN0aW5nQXR0YWNobWVudHMoKTsKICAgICBhdXRvIGRy
YWdBbmREcm9wU2ltdWxhdG9yID0gYWRvcHROUyhbW0RyYWdBbmREcm9wU2ltdWxhdG9yIGFsbG9j
XSBpbml0V2l0aFdlYlZpZXc6d2ViVmlldy5nZXQoKV0pOwogICAgIGF1dG8gaXRlbSA9IGFkb3B0
TlMoW1tOU0l0ZW1Qcm92aWRlciBhbGxvY10gaW5pdF0pOwotICAgIFtpdGVtIHJlZ2lzdGVyRGF0
YTp0ZXN0SW1hZ2VEYXRhKCkgdHlwZTooTlNTdHJpbmcgKilrVVRUeXBlUE5HXTsKKyAgICBbaXRl
bSByZWdpc3RlckRhdGE6dGVzdEltYWdlRGF0YSgpIHR5cGU6KF9fYnJpZGdlIE5TU3RyaW5nICop
a1VUVHlwZVBOR107CiAgICAgW2RyYWdBbmREcm9wU2ltdWxhdG9yIHNldEV4dGVybmFsSXRlbVBy
b3ZpZGVyczpAWyBpdGVtLmdldCgpIF1dOwogICAgIFtkcmFnQW5kRHJvcFNpbXVsYXRvciBydW5G
cm9tOkNHUG9pbnRaZXJvIHRvOkNHUG9pbnRNYWtlKDUwLCA1MCldOwogCkBAIC0xMzc3LDcgKzE0
ODgsNyBAQCBURVNUKFdLQXR0YWNobWVudFRlc3RzSU9TLCBJbnNlcnREcm9wcGVkSW1hZ2VBc0F0
dGFjaG1lbnQpCiAgICAgICAgIE9ic2VydmVBdHRhY2htZW50VXBkYXRlc0ZvclNjb3BlIG9ic2Vy
dmVyKHdlYlZpZXcuZ2V0KCkpOwogICAgICAgICBbd2ViVmlldyBfc3luY2hyb25vdXNseUV4ZWN1
dGVFZGl0Q29tbWFuZDpAIlNlbGVjdEFsbCIgYXJndW1lbnQ6bmlsXTsKICAgICAgICAgW3dlYlZp
ZXcgX3N5bmNocm9ub3VzbHlFeGVjdXRlRWRpdENvbW1hbmQ6QCJEZWxldGVCYWNrd2FyZCIgYXJn
dW1lbnQ6bmlsXTsKLSAgICAgICAgb2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVudFVwZGF0ZXMoQFth
dHRhY2htZW50LmdldCgpXSwgQFtdKTsKKyAgICAgICAgb2JzZXJ2ZXIuZXhwZWN0QXR0YWNobWVu
dFVwZGF0ZXMoQFsgYXR0YWNobWVudC5nZXQoKSBdLCBAWyBdKTsKICAgICB9CiB9CiAKQEAgLTEz
ODUsNyArMTQ5Niw3IEBAIFRFU1QoV0tBdHRhY2htZW50VGVzdHNJT1MsIEluc2VydERyb3BwZWRB
dHRyaWJ1dGVkU3RyaW5nQ29udGFpbmluZ0F0dGFjaG1lbnQpCiB7CiAgICAgYXV0byB3ZWJWaWV3
ID0gd2ViVmlld0ZvclRlc3RpbmdBdHRhY2htZW50cygpOwogICAgIGF1dG8gZHJhZ0FuZERyb3BT
aW11bGF0b3IgPSBhZG9wdE5TKFtbRHJhZ0FuZERyb3BTaW11bGF0b3IgYWxsb2NdIGluaXRXaXRo
V2ViVmlldzp3ZWJWaWV3LmdldCgpXSk7Ci0gICAgYXV0byBpbWFnZSA9IGFkb3B0TlMoW1tOU1Rl
eHRBdHRhY2htZW50IGFsbG9jXSBpbml0V2l0aERhdGE6dGVzdEltYWdlRGF0YSgpIG9mVHlwZToo
TlNTdHJpbmcgKilrVVRUeXBlUE5HXSk7CisgICAgYXV0byBpbWFnZSA9IGFkb3B0TlMoW1tOU1Rl
eHRBdHRhY2htZW50IGFsbG9jXSBpbml0V2l0aERhdGE6dGVzdEltYWdlRGF0YSgpIG9mVHlwZToo
X19icmlkZ2UgTlNTdHJpbmcgKilrVVRUeXBlUE5HXSk7CiAgICAgYXV0byBpdGVtID0gYWRvcHRO
UyhbW05TSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0XSk7CiAgICAgW2l0ZW0gcmVnaXN0ZXJPYmpl
Y3Q6W05TQXR0cmlidXRlZFN0cmluZyBhdHRyaWJ1dGVkU3RyaW5nV2l0aEF0dGFjaG1lbnQ6aW1h
Z2UuZ2V0KCldIHZpc2liaWxpdHk6TlNJdGVtUHJvdmlkZXJSZXByZXNlbnRhdGlvblZpc2liaWxp
dHlBbGxdOwogCkBAIC0xNDA1LDcgKzE1MTYsNyBAQCBURVNUKFdLQXR0YWNobWVudFRlc3RzSU9T
LCBJbnNlcnREcm9wcGVkQXR0cmlidXRlZFN0cmluZ0NvbnRhaW5pbmdBdHRhY2htZW50KQogICAg
ICAgICBPYnNlcnZlQXR0YWNobWVudFVwZGF0ZXNGb3JTY29wZSBvYnNlcnZlcih3ZWJWaWV3Lmdl
dCgpKTsKICAgICAgICAgW3dlYlZpZXcgX3N5bmNocm9ub3VzbHlFeGVjdXRlRWRpdENvbW1hbmQ6
QCJTZWxlY3RBbGwiIGFyZ3VtZW50Om5pbF07CiAgICAgICAgIFt3ZWJWaWV3IF9zeW5jaHJvbm91
c2x5RXhlY3V0ZUVkaXRDb21tYW5kOkAiRGVsZXRlQmFja3dhcmQiIGFyZ3VtZW50Om5pbF07Ci0g
ICAgICAgIG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbYXR0YWNobWVudC5nZXQo
KV0sIEBbXSk7CisgICAgICAgIG9ic2VydmVyLmV4cGVjdEF0dGFjaG1lbnRVcGRhdGVzKEBbIGF0
dGFjaG1lbnQuZ2V0KCkgXSwgQFsgXSk7CiAgICAgfQogfQogCkBAIC0xNDUxLDcgKzE1NjIsNyBA
QCBURVNUKFdLQXR0YWNobWVudFRlc3RzSU9TLCBJbnNlcnREcm9wcGVkWmlwQXJjaGl2ZUFzQXR0
YWNobWVudCkKICAgICAvLyBwcmVzZW50YXRpb24gc3R5bGUgKGUuZy4gTm90ZXMpIGludG8gTWFp
bC4KICAgICBhdXRvIGl0ZW0gPSBhZG9wdE5TKFtbTlNJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRd
KTsKICAgICBOU0RhdGEgKmRhdGEgPSB0ZXN0WklQRGF0YSgpOwotICAgIFtpdGVtIHJlZ2lzdGVy
RGF0YTpkYXRhIHR5cGU6KE5TU3RyaW5nICopa1VUVHlwZVppcEFyY2hpdmVdOworICAgIFtpdGVt
IHJlZ2lzdGVyRGF0YTpkYXRhIHR5cGU6KF9fYnJpZGdlIE5TU3RyaW5nICopa1VUVHlwZVppcEFy
Y2hpdmVdOwogICAgIFtpdGVtIHNldFN1Z2dlc3RlZE5hbWU6QCJhcmNoaXZlLnppcCJdOwogCiAg
ICAgYXV0byB3ZWJWaWV3ID0gd2ViVmlld0ZvclRlc3RpbmdBdHRhY2htZW50cygpOwpAQCAtMTQ4
MSw3ICsxNTkyLDcgQEAgVEVTVChXS0F0dGFjaG1lbnRUZXN0c0lPUywgSW5zZXJ0RHJvcHBlZEl0
ZW1Qcm92aWRlcnNJbk9yZGVyKQogICAgIFtpbmxpbmVUZXh0SXRlbSByZWdpc3Rlck9iamVjdDph
cHBsZVVSTC5nZXQoKSB2aXNpYmlsaXR5Ok5TSXRlbVByb3ZpZGVyUmVwcmVzZW50YXRpb25WaXNp
YmlsaXR5QWxsXTsKIAogICAgIGF1dG8gc2Vjb25kQXR0YWNobWVudEl0ZW0gPSBhZG9wdE5TKFtb
TlNJdGVtUHJvdmlkZXIgYWxsb2NdIGluaXRdKTsKLSAgICBbc2Vjb25kQXR0YWNobWVudEl0ZW0g
cmVnaXN0ZXJEYXRhOnRlc3RQREZEYXRhKCkgdHlwZTooTlNTdHJpbmcgKilrVVRUeXBlUERGXTsK
KyAgICBbc2Vjb25kQXR0YWNobWVudEl0ZW0gcmVnaXN0ZXJEYXRhOnRlc3RQREZEYXRhKCkgdHlw
ZTooX19icmlkZ2UgTlNTdHJpbmcgKilrVVRUeXBlUERGXTsKICAgICBbc2Vjb25kQXR0YWNobWVu
dEl0ZW0gc2V0U3VnZ2VzdGVkTmFtZTpAInNlY29uZC5wZGYiXTsKIAogICAgIGF1dG8gd2ViVmll
dyA9IHdlYlZpZXdGb3JUZXN0aW5nQXR0YWNobWVudHMoKTsKQEAgLTE1MDgsNyArMTYxOSw3IEBA
IFRFU1QoV0tBdHRhY2htZW50VGVzdHNJT1MsIERyYWdBdHRhY2htZW50SW5zZXJ0ZWRBc0ZpbGUp
CiB7CiAgICAgYXV0byBpdGVtID0gYWRvcHROUyhbW05TSXRlbVByb3ZpZGVyIGFsbG9jXSBpbml0
XSk7CiAgICAgYXV0byBkYXRhID0gcmV0YWluUHRyKHRlc3RQREZEYXRhKCkpOwotICAgIFtpdGVt
IHJlZ2lzdGVyRGF0YTpkYXRhLmdldCgpIHR5cGU6KE5TU3RyaW5nICopa1VUVHlwZVBERl07Cisg
ICAgW2l0ZW0gcmVnaXN0ZXJEYXRhOmRhdGEuZ2V0KCkgdHlwZTooX19icmlkZ2UgTlNTdHJpbmcg
KilrVVRUeXBlUERGXTsKICAgICBbaXRlbSBzZXRTdWdnZXN0ZWROYW1lOkAiZG9jdW1lbnQucGRm
Il07CiAKICAgICBhdXRvIHdlYlZpZXcgPSB3ZWJWaWV3Rm9yVGVzdGluZ0F0dGFjaG1lbnRzKCk7
CkBAIC0xNTMxLDcgKzE2NDIsNyBAQCBURVNUKFdLQXR0YWNobWVudFRlc3RzSU9TLCBEcmFnQXR0
YWNobWVudEluc2VydGVkQXNGaWxlKQogICAgIEVYUEVDVF9FUSgxVSwgW2RyYWdBbmREcm9wU2lt
dWxhdG9yIHNvdXJjZUl0ZW1Qcm92aWRlcnNdLmNvdW50KTsKICAgICBOU0l0ZW1Qcm92aWRlciAq
aXRlbVByb3ZpZGVyID0gW2RyYWdBbmREcm9wU2ltdWxhdG9yIHNvdXJjZUl0ZW1Qcm92aWRlcnNd
LmZpcnN0T2JqZWN0OwogICAgIEVYUEVDVF9FUShVSVByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxl
QXR0YWNobWVudCwgaXRlbVByb3ZpZGVyLnByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlKTsKLSAg
ICBbaXRlbVByb3ZpZGVyIGV4cGVjdFR5cGU6KE5TU3RyaW5nICopa1VUVHlwZVBERiB3aXRoRGF0
YTpkYXRhLmdldCgpXTsKKyAgICBbaXRlbVByb3ZpZGVyIGV4cGVjdFR5cGU6KF9fYnJpZGdlIE5T
U3RyaW5nICopa1VUVHlwZVBERiB3aXRoRGF0YTpkYXRhLmdldCgpXTsKICAgICBFWFBFQ1RfV0tf
U1RSRVEoImRvY3VtZW50LnBkZiIsIFtpdGVtUHJvdmlkZXIgc3VnZ2VzdGVkTmFtZV0pOwogICAg
IFtkcmFnQW5kRHJvcFNpbXVsYXRvciBlbmREYXRhVHJhbnNmZXJdOwogfQpAQCAtMTU0NCw3ICsx
NjU1LDcgQEAgVEVTVChXS0F0dGFjaG1lbnRUZXN0c0lPUywgRHJhZ0F0dGFjaG1lbnRJbnNlcnRl
ZEFzRGF0YSkKICAgICB7CiAgICAgICAgIE9ic2VydmVBdHRhY2htZW50VXBkYXRlc0ZvclNjb3Bl
IG9ic2VydmVyKHdlYlZpZXcuZ2V0KCkpOwogICAgICAgICBhdHRhY2htZW50ID0gW3dlYlZpZXcg
c3luY2hyb25vdXNseUluc2VydEF0dGFjaG1lbnRXaXRoRmlsZW5hbWU6QCJkb2N1bWVudC5wZGYi
IGNvbnRlbnRUeXBlOkAiYXBwbGljYXRpb24vcGRmIiBkYXRhOmRhdGEuZ2V0KCldOwotICAgICAg
ICBvYnNlcnZlci5leHBlY3RBdHRhY2htZW50VXBkYXRlcyhAW10sIEBbYXR0YWNobWVudC5nZXQo
KV0pOworICAgICAgICBvYnNlcnZlci5leHBlY3RBdHRhY2htZW50VXBkYXRlcyhAWyBdLCBAWyBh
dHRhY2htZW50LmdldCgpIF0pOwogICAgIH0KIAogICAgIC8vIEZpcnN0LCB2ZXJpZnkgdGhhdCB0
aGUgYXR0YWNobWVudCB3YXMgc3VjY2Vzc2Z1bGx5IGluc2VydGVkIGZyb20gcmF3IGRhdGEuCkBA
IC0xNTYwLDcgKzE2NzEsNyBAQCBURVNUKFdLQXR0YWNobWVudFRlc3RzSU9TLCBEcmFnQXR0YWNo
bWVudEluc2VydGVkQXNEYXRhKQogICAgIEVYUEVDVF9FUSgxVSwgW2RyYWdBbmREcm9wU2ltdWxh
dG9yIHNvdXJjZUl0ZW1Qcm92aWRlcnNdLmNvdW50KTsKICAgICBOU0l0ZW1Qcm92aWRlciAqaXRl
bVByb3ZpZGVyID0gW2RyYWdBbmREcm9wU2ltdWxhdG9yIHNvdXJjZUl0ZW1Qcm92aWRlcnNdLmZp
cnN0T2JqZWN0OwogICAgIEVYUEVDVF9FUShVSVByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlQXR0
YWNobWVudCwgaXRlbVByb3ZpZGVyLnByZWZlcnJlZFByZXNlbnRhdGlvblN0eWxlKTsKLSAgICBb
aXRlbVByb3ZpZGVyIGV4cGVjdFR5cGU6KE5TU3RyaW5nICopa1VUVHlwZVBERiB3aXRoRGF0YTpk
YXRhLmdldCgpXTsKKyAgICBbaXRlbVByb3ZpZGVyIGV4cGVjdFR5cGU6KF9fYnJpZGdlIE5TU3Ry
aW5nICopa1VUVHlwZVBERiB3aXRoRGF0YTpkYXRhLmdldCgpXTsKICAgICBFWFBFQ1RfV0tfU1RS
RVEoImRvY3VtZW50LnBkZiIsIFtpdGVtUHJvdmlkZXIgc3VnZ2VzdGVkTmFtZV0pOwogICAgIFtk
cmFnQW5kRHJvcFNpbXVsYXRvciBlbmREYXRhVHJhbnNmZXJdOwogfQpkaWZmIC0tZ2l0IGEvVG9v
bHMvVGVzdFdlYktpdEFQSS9jb2NvYS9EcmFnQW5kRHJvcFNpbXVsYXRvci5oIGIvVG9vbHMvVGVz
dFdlYktpdEFQSS9jb2NvYS9EcmFnQW5kRHJvcFNpbXVsYXRvci5oCmluZGV4IDc2MWEzNmYwZTFj
MGRkNmI5M2FjYjU2NDllYzVlMmMwOGIzYmRhOTYuLjFkN2UxMGU4OTI4YTE5YzYxZWMxMTZiNmIy
YzVlY2E3MDdlNDU1ODkgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvY29jb2EvRHJh
Z0FuZERyb3BTaW11bGF0b3IuaAorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL2NvY29hL0RyYWdB
bmREcm9wU2ltdWxhdG9yLmgKQEAgLTgwLDYgKzgwLDcgQEAgdHlwZWRlZiBOU0RpY3Rpb25hcnk8
TlNOdW1iZXIgKiwgTlNWYWx1ZSAqPiAqUHJvZ3Jlc3NUb0NHUG9pbnRWYWx1ZU1hcDsKIC8vIFRo
ZSBzdGFydCBsb2NhdGlvbiwgZW5kIGxvY2F0aW9uLCBhbmQgbG9jYXRpb25zIG9mIGFkZGl0aW9u
YWwgaXRlbSByZXF1ZXN0cyBhcmUgYWxsIGluIHdpbmRvdyBjb29yZGluYXRlcy4KIC0gKHZvaWQp
cnVuRnJvbTooQ0dQb2ludClzdGFydExvY2F0aW9uIHRvOihDR1BvaW50KWVuZExvY2F0aW9uOwog
LSAodm9pZCllbmREYXRhVHJhbnNmZXI7CistICh2b2lkKWNsZWFyRXh0ZXJuYWxEcmFnSW5mb3Jt
YXRpb247CiBAcHJvcGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIE5TQXJyYXk8X1dLQXR0YWNo
bWVudCAqPiAqaW5zZXJ0ZWRBdHRhY2htZW50czsKIEBwcm9wZXJ0eSAobm9uYXRvbWljLCByZWFk
b25seSkgTlNBcnJheTxfV0tBdHRhY2htZW50ICo+ICpyZW1vdmVkQXR0YWNobWVudHM7CiBAcHJv
cGVydHkgKG5vbmF0b21pYywgcmVhZG9ubHkpIFRlc3RXS1dlYlZpZXcgKndlYlZpZXc7CmRpZmYg
LS1naXQgYS9Ub29scy9UZXN0V2ViS2l0QVBJL2lvcy9EcmFnQW5kRHJvcFNpbXVsYXRvcklPUy5t
bSBiL1Rvb2xzL1Rlc3RXZWJLaXRBUEkvaW9zL0RyYWdBbmREcm9wU2ltdWxhdG9ySU9TLm1tCmlu
ZGV4IDBmOTdhMzlkYjYwYWIyOTAyYTU4ODM0MTQ1YTc0MDliMjMxYjU3ZTYuLmNlYmQ0NjAwYTk0
ODEwM2RmYjA1Nzk3YTNkNDRlYWYwNjM4NWRkNzIgMTAwNjQ0Ci0tLSBhL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvaW9zL0RyYWdBbmREcm9wU2ltdWxhdG9ySU9TLm1tCisrKyBiL1Rvb2xzL1Rlc3RXZWJL
aXRBUEkvaW9zL0RyYWdBbmREcm9wU2ltdWxhdG9ySU9TLm1tCkBAIC01NjgsNiArNTY4LDExIEBA
IHN0YXRpYyBOU0FycmF5ICpkcmFnQW5kRHJvcEV2ZW50TmFtZXMoKQogICAgIFtzZWxmIF9zY2hl
ZHVsZUFkdmFuY2VQcm9ncmVzc107CiB9CiAKKy0gKHZvaWQpY2xlYXJFeHRlcm5hbERyYWdJbmZv
cm1hdGlvbgoreworICAgIF9leHRlcm5hbEl0ZW1Qcm92aWRlcnMgPSBuaWw7Cit9CisKIC0gKENH
UG9pbnQpX2N1cnJlbnRMb2NhdGlvbgogewogICAgIENHRmxvYXQgZGlzdGFuY2VYID0gX2VuZExv
Y2F0aW9uLnggLSBfc3RhcnRMb2NhdGlvbi54OwpkaWZmIC0tZ2l0IGEvVG9vbHMvVGVzdFdlYktp
dEFQSS9tYWMvRHJhZ0FuZERyb3BTaW11bGF0b3JNYWMubW0gYi9Ub29scy9UZXN0V2ViS2l0QVBJ
L21hYy9EcmFnQW5kRHJvcFNpbXVsYXRvck1hYy5tbQppbmRleCBlNTI4MzAxZTU2ZDRiZDMzYmMw
ZWRiMDk4NWIxZDM3YjMzZWJhZjFmLi4yZWZiYjVjOWViNjMyOGRmMmRkNzk4NDZkNjlkYzk5YjBh
ZmJjZTIyIDEwMDY0NAotLS0gYS9Ub29scy9UZXN0V2ViS2l0QVBJL21hYy9EcmFnQW5kRHJvcFNp
bXVsYXRvck1hYy5tbQorKysgYi9Ub29scy9UZXN0V2ViS2l0QVBJL21hYy9EcmFnQW5kRHJvcFNp
bXVsYXRvck1hYy5tbQpAQCAtMzU4LDYgKzM1OCwxMyBAQCBzdGF0aWMgTlNJbWFnZSAqZGVmYXVs
dEV4dGVybmFsRHJhZ0ltYWdlKCkKICAgICByZXR1cm4gX2V4dGVybmFsUHJvbWlzZWRGaWxlcy5n
ZXQoKTsKIH0KIAorLSAodm9pZCljbGVhckV4dGVybmFsRHJhZ0luZm9ybWF0aW9uCit7CisgICAg
X2V4dGVybmFsUHJvbWlzZWRGaWxlcyA9IG5pbDsKKyAgICBfZXh0ZXJuYWxEcmFnSW1hZ2UgPSBu
aWw7CisgICAgX2V4dGVybmFsRHJhZ1Bhc3RlYm9hcmQgPSBuaWw7Cit9CisKIHN0YXRpYyBCT09M
IGdldEZpbGVQYXRoc0FuZFR5cGVJZGVudGlmaWVycyhOU0FycmF5PE5TVVJMICo+ICpmaWxlVVJM
cywgTlNBcnJheTxOU1N0cmluZyAqPiAqKm91dEZpbGVQYXRocywgTlNBcnJheTxOU1N0cmluZyAq
PiAqKm91dFR5cGVJZGVudGlmaWVycykKIHsKICAgICBOU011dGFibGVBcnJheSAqZmlsZVBhdGhz
ID0gW05TTXV0YWJsZUFycmF5IGFycmF5V2l0aENhcGFjaXR5OmZpbGVVUkxzLmNvdW50XTsK
</data>

          </attachment>
      

    </bug>

</bugzilla>