<?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>221209</bug_id>
          
          <creation_ts>2021-02-01 08:13:14 -0800</creation_ts>
          <short_desc>Allow support for CAAnimationGroup</short_desc>
          <delta_ts>2021-02-01 14:57:14 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>Animations</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords>InRadar</keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          <blocked>219894</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="Antoine Quint">graouts</reporter>
          <assigned_to name="Antoine Quint">graouts</assigned_to>
          <cc>dino</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>graouts</cc>
    
    <cc>sam</cc>
    
    <cc>simon.fraser</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1724246</commentid>
    <comment_count>0</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2021-02-01 08:13:14 -0800</bug_when>
    <thetext>Allow support for CAAnimationGroup</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1724248</commentid>
    <comment_count>1</comment_count>
      <attachid>418877</attachid>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2021-02-01 08:16:42 -0800</bug_when>
    <thetext>Created attachment 418877
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1724250</commentid>
    <comment_count>2</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2021-02-01 08:17:19 -0800</bug_when>
    <thetext>This is required work towards bug 219894.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1724258</commentid>
    <comment_count>3</comment_count>
      <attachid>418877</attachid>
    <who name="Simon Fraser (smfr)">simon.fraser</who>
    <bug_when>2021-02-01 08:40:35 -0800</bug_when>
    <thetext>Comment on attachment 418877
Patch

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

&gt; Source/WebCore/platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm:244
&gt; +    if ([static_cast&lt;CAAnimation*&gt;(m_animation.get()) isKindOfClass:[CAPropertyAnimation class]])
&gt; +        return [static_cast&lt;CAPropertyAnimation*&gt;(m_animation.get()) keyPath];

Instead of isKindOfClass: with its Obj-C overhead, can we instead just check m_type?

&gt; Source/WebCore/platform/graphics/ca/win/PlatformCAAnimationWin.cpp:564
&gt; +    for (auto&amp; animation : value) {
&gt; +        RefPtr&lt;PlatformCAAnimation&gt; animation = value[i];

Seems wrong</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1724269</commentid>
    <comment_count>4</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2021-02-01 09:00:49 -0800</bug_when>
    <thetext>(In reply to Simon Fraser (smfr) from comment #3)
&gt; Comment on attachment 418877 [details]
&gt; Patch
&gt; 
&gt; View in context:
&gt; https://bugs.webkit.org/attachment.cgi?id=418877&amp;action=review
&gt; 
&gt; &gt; Source/WebCore/platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm:244
&gt; &gt; +    if ([static_cast&lt;CAAnimation*&gt;(m_animation.get()) isKindOfClass:[CAPropertyAnimation class]])
&gt; &gt; +        return [static_cast&lt;CAPropertyAnimation*&gt;(m_animation.get()) keyPath];
&gt; 
&gt; Instead of isKindOfClass: with its Obj-C overhead, can we instead just check
&gt; m_type?

I was following the approach taken with other methods such as PlatformCAAnimationCocoa::isAdditive(). Isn&apos;t it safer to use isKindOfClass here before casting? I suppose we could use the type for the test and have an ASSERT for the isKindOfClass test?

&gt; &gt; Source/WebCore/platform/graphics/ca/win/PlatformCAAnimationWin.cpp:564
&gt; &gt; +    for (auto&amp; animation : value) {
&gt; &gt; +        RefPtr&lt;PlatformCAAnimation&gt; animation = value[i];
&gt; 
&gt; Seems wrong

Oops! The bots won&apos;t be happy about that :) That was a refactor error after integrating some early review feedback provided in bug 219894.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1724272</commentid>
    <comment_count>5</comment_count>
      <attachid>418885</attachid>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2021-02-01 09:06:42 -0800</bug_when>
    <thetext>Created attachment 418885
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1724296</commentid>
    <comment_count>6</comment_count>
      <attachid>418892</attachid>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2021-02-01 10:04:51 -0800</bug_when>
    <thetext>Created attachment 418892
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1724309</commentid>
    <comment_count>7</comment_count>
      <attachid>418892</attachid>
    <who name="Sam Weinig">sam</who>
    <bug_when>2021-02-01 10:44:54 -0800</bug_when>
    <thetext>Comment on attachment 418892
Patch

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

&gt; Source/WebCore/platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.h:35
&gt; +OBJC_CLASS CAAnimationGroup;

This doesn&apos;t seemed used in the header, so you can probably leave it out.

&gt; Source/WebCore/platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm:191
&gt; +    else if ([static_cast&lt;CAAnimation*&gt;(animation) isKindOfClass:[CAAnimationGroup class]])

CAAnimation* -&gt; CAAnimation *

&gt; Source/WebCore/platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm:243
&gt; +    if (animationType() == Group) {

I think this should probably be `animationType() != Group`?

&gt; Source/WebCore/platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm:244
&gt; +        ASSERT([static_cast&lt;CAAnimation*&gt;(m_animation.get()) isKindOfClass:[CAPropertyAnimation class]]);

CAAnimation* -&gt; CAAnimation *

&gt; Source/WebCore/platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm:245
&gt; +        return [static_cast&lt;CAPropertyAnimation*&gt;(m_animation.get()) keyPath];

CAPropertyAnimation* -&gt; CAPropertyAnimation *

&gt; Source/WebCore/platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm:367
&gt; +    if ([static_cast&lt;CAAnimation*&gt;(m_animation.get()) isKindOfClass:[CAPropertyAnimation class]])

Why use isKindOfClass here (and below) rather than animationType() as you did in keyPath?

CAPropertyAnimation* -&gt; CAPropertyAnimation *

&gt; Source/WebCore/platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm:368
&gt; +        return [static_cast&lt;CAPropertyAnimation*&gt;(m_animation.get()) isAdditive];

CAPropertyAnimation* -&gt; CAPropertyAnimation *

&gt; Source/WebCore/platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm:374
&gt; +    if ([static_cast&lt;CAAnimation*&gt;(m_animation.get()) isKindOfClass:[CAPropertyAnimation class]])

CAPropertyAnimation* -&gt; CAPropertyAnimation *

&gt; Source/WebCore/platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm:375
&gt; +        return [static_cast&lt;CAPropertyAnimation*&gt;(m_animation.get()) setAdditive:value];

CAPropertyAnimation* -&gt; CAPropertyAnimation *

&gt; Source/WebCore/platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm:380
&gt; +    if ([static_cast&lt;CAAnimation*&gt;(m_animation.get()) isKindOfClass:[CAPropertyAnimation class]])

CAPropertyAnimation* -&gt; CAPropertyAnimation *

&gt; Source/WebCore/platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm:381
&gt; +        return fromCAValueFunctionType([[static_cast&lt;CAPropertyAnimation*&gt;(m_animation.get()) valueFunction] name]);

CAPropertyAnimation* -&gt; CAPropertyAnimation *

&gt; Source/WebCore/platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm:387
&gt; +    if ([static_cast&lt;CAAnimation*&gt;(m_animation.get()) isKindOfClass:[CAPropertyAnimation class]])

CAAnimation* -&gt; CAAnimation *

&gt; Source/WebCore/platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm:388
&gt; +        return [static_cast&lt;CAPropertyAnimation*&gt;(m_animation.get()) setValueFunction:[CAValueFunction functionWithName:toCAValueFunctionType(value)]];

CAPropertyAnimation* -&gt; CAPropertyAnimation *

&gt; Source/WebCore/platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm:568
&gt; +    [static_cast&lt;CAAnimationGroup*&gt;(m_animation.get()) setAnimations:createNSArray(value, [&amp;] (auto&amp; animation) -&gt; CAAnimation * {

Why is it safe to cast to CAAnimationGroup here?

Need space after CAAnimationGroup.

&gt; Source/WebCore/platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm:578
&gt; +    auto other = static_cast&lt;CAAnimationGroup*&gt;(downcast&lt;PlatformCAAnimationCocoa&gt;(value).m_animation.get());
&gt; +    [static_cast&lt;CAAnimationGroup*&gt;(m_animation.get()) setAnimations:[other animations]];

Should be a space after CAAnimationGroup:

    auto other = static_cast&lt;CAAnimationGroup *&gt;(downcast&lt;PlatformCAAnimationCocoa&gt;(value).m_animation.get());
    [static_cast&lt;CAAnimationGroup *&gt;(m_animation.get()) setAnimations:[other animations]];

Why are these casts without any checking safe to do here?

&gt; Source/WebCore/platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:514
&gt; +    CAAnimation* propertyAnimation = static_cast&lt;CAAnimation*&gt;(downcast&lt;PlatformCAAnimationCocoa&gt;(animation).platformAnimation());

This was wrong before as well, but the * should be on the other side when attached to an objective-c type. So this should be:

CAAnimation *propertyAnimation = static_cast&lt;CAAnimation *&gt;(downcast&lt;PlatformCAAnimationCocoa&gt;(animation).platformAnimation());

This same issue is quite prevalent in this code.

&gt; Source/WebCore/platform/graphics/ca/cocoa/PlatformCALayerCocoa.mm:532
&gt; +    CAAnimation* propertyAnimation = static_cast&lt;CAAnimation*&gt;([m_layer animationForKey:key]);

CAAnimation* -&gt; CAAnimation *

&gt; Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCAAnimationRemote.mm:850
&gt; +        [(CAPropertyAnimation*)caAnimation setAdditive:properties.additive];

CAPropertyAnimation* -&gt; CAPropertyAnimation *

&gt; Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCAAnimationRemote.mm:852
&gt; +            [(CAPropertyAnimation*)caAnimation setValueFunction:[CAValueFunction functionWithName:toCAValueFunctionType(properties.valueFunction)]];

CAPropertyAnimation* -&gt; CAPropertyAnimation *</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1724348</commentid>
    <comment_count>8</comment_count>
      <attachid>418908</attachid>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2021-02-01 12:02:06 -0800</bug_when>
    <thetext>Created attachment 418908
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1724364</commentid>
    <comment_count>9</comment_count>
      <attachid>418908</attachid>
    <who name="Dean Jackson">dino</who>
    <bug_when>2021-02-01 12:29:24 -0800</bug_when>
    <thetext>Comment on attachment 418908
Patch

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

&gt; Source/WebCore/platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm:184
&gt; +    if ([static_cast&lt;CAAnimation *&gt;(animation) isKindOfClass:[CABasicAnimation class]]) {

Why not make a local variable that is the result of static_cast&lt;CAAnimation *&gt;(animation) and use that in the 5 places below?

&gt; Source/WebCore/platform/graphics/ca/cocoa/PlatformCAAnimationCocoa.mm:247
&gt; +    if (animationType() == Group)
&gt; +        return emptyString();
&gt; +
&gt; +    ASSERT([static_cast&lt;CAAnimation *&gt;(m_animation.get()) isKindOfClass:[CAPropertyAnimation class]]);
&gt; +    return [static_cast&lt;CAPropertyAnimation *&gt;(m_animation.get()) keyPath];

Should you do this (and the versions below) the other way around?

auto animation = static_cast&lt;CAAnimation *&gt;(m_animation.get());
if ([animation isKindOfClass:whatever])
  return [animation keyPath];

return emptyString();

&gt; Source/WebKit/WebProcess/WebPage/RemoteLayerTree/PlatformCAAnimationRemote.mm:727
&gt; +    Vector&lt;Properties&gt; animations;
&gt; +    animations.reserveInitialCapacity(values.size());
&gt; +
&gt; +    for (auto&amp; value : values)
&gt; +        animations.uncheckedAppend(downcast&lt;PlatformCAAnimationRemote&gt;(value.get())-&gt;properties());

Use values.map(... ?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1724371</commentid>
    <comment_count>10</comment_count>
      <attachid>418913</attachid>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2021-02-01 12:51:09 -0800</bug_when>
    <thetext>Created attachment 418913
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1724431</commentid>
    <comment_count>11</comment_count>
    <who name="Antoine Quint">graouts</who>
    <bug_when>2021-02-01 14:56:11 -0800</bug_when>
    <thetext>Committed r272178: &lt;https://trac.webkit.org/changeset/272178&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1724432</commentid>
    <comment_count>12</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2021-02-01 14:57:14 -0800</bug_when>
    <thetext>&lt;rdar://problem/73848093&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418877</attachid>
            <date>2021-02-01 08:16:42 -0800</date>
            <delta_ts>2021-02-01 09:17:45 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221209-20210201171641.patch</filename>
            <type>text/plain</type>
            <size>26429</size>
            <attacher name="Antoine Quint">graouts</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyMTI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGExODc4NGNmNGVhZmYz
NjE2NzFlZjNhMWVhY2I5ZDRmMWYzNjBiYi4uOWVmZjEzNTI0ZjI5NmQ0NDY3Yjg0MGM0YzRjMGQy
N2VlNWJjNGRhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDIxLTAyLTAxICBBbnRv
aW5lIFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgorCisgICAgICAgIEFsbG93IHN1cHBvcnQg
Zm9yIENBQW5pbWF0aW9uR3JvdXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyMTIwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEluIG9yZGVyIHRvIGZpeCBidWcgMjE5ODk0LCB3ZSBuZWVkIHRvIHVzZSBD
b3JlIEFuaW1hdGlvbidzIENBQW5pbWF0aW9uR3JvdXAgYW5kIGl0cworICAgICAgICBzZXRBbmlt
YXRpb25zKCkgbWV0aG9kLiBUaGlzIHBhdGNoIGFkZHMgYSBuZXcgIkdyb3VwIiB0eXBlIHRvIFBs
YXRmb3JtQ0FBbmltYXRpb24gYW5kCisgICAgICAgIHBsYXRmb3JtLXNwZWNpZmljIGludGVncmF0
aW9uIGZvciBXaW5kb3dzIGFuZCBDb2NvYSBwb3J0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NhL1BsYXRmb3JtQ0FBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6b3Bl
cmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUFuaW1h
dGlvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FB
bmltYXRpb25Db2NvYS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1Bs
YXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FB
bmltYXRpb25Db2NvYTo6UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6a2V5UGF0aCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFRpbWluZ0Z1bmN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6aXNBZGRpdGl2ZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldEFkZGl0
aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6dmFsdWVG
dW5jdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29j
b2E6OnNldFZhbHVlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUFuaW1h
dGlvbkNvY29hOjpzZXRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FB
bmltYXRpb25Db2NvYTo6Y29weUFuaW1hdGlvbnNGcm9tKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5tbToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtQ0FMYXllckNvY29hOjphZGRBbmltYXRpb25Gb3JLZXkpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyQ29jb2E6OmFuaW1hdGlvbkZvcktleSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uY3BwOgor
ICAgICAgICAoUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6UGxhdGZvcm1DQUFuaW1hdGlvbldpbik6
CisgICAgICAgIChQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRBbmltYXRpb25zKToKKyAgICAg
ICAgKFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OmNvcHlBbmltYXRpb25zRnJvbSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uaDoKKwog
MjAyMS0wMS0zMSAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtM
RkNdW0lGQ10gSW5saW5lQ29udGVudEJyZWFrZXI6OnByb2Nlc3NPdmVyZmxvd2luZ1RleHRDb250
ZW50IHNob3VsZCBmaW5kIGJyZWFraW5nIHBvc2l0aW9ucyBldmVuIGFmdGVyIHRoZSBvdmVyZmxv
d2luZyBydW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKaW5kZXggZjhmNDVhM2RhZmU1YmEwZDFmNDhkOWQ2ZjY5ZDk1ZGVlMWI5
NDBjNi4uNmExYjEwODZhMTM3ZWIyYTc1YWE0MTM3MzllOTVmMjhkYTQyNjQ4ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyNSBAQAorMjAyMS0wMi0wMSAgQW50b2luZSBRdWludCAgPGdyYW91dHNAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBBbGxvdyBzdXBwb3J0IGZvciBDQUFuaW1hdGlvbkdyb3VwCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjEyMDkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbiBvcmRlciB0
byBmaXggYnVnIDIxOTg5NCwgd2UgbmVlZCB0byB1c2UgQ29yZSBBbmltYXRpb24ncyBDQUFuaW1h
dGlvbkdyb3VwIGFuZCBpdHMKKyAgICAgICAgc2V0QW5pbWF0aW9ucygpIG1ldGhvZC4gQWRkIHN1
cHBvcnQgZm9yIHRoZSBuZXcgIkdyb3VwIiBQbGF0Zm9ybUNBQW5pbWF0aW9uIHR5cGUgZm9yCisg
ICAgICAgIHRoZSByZW1vdGUgYW5pbWF0aW9ucy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5oOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlv
blJlbW90ZS5tbToKKyAgICAgICAgKFdlYktpdDo6UGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6
UHJvcGVydGllczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UGxhdGZvcm1DQUFu
aW1hdGlvblJlbW90ZTo6UHJvcGVydGllczo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6UGxh
dGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6Y29weSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlBs
YXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OnNldEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViS2l0
OjpQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpjb3B5QW5pbWF0aW9uc0Zyb20pOgorICAgICAg
ICAoV2ViS2l0OjpjcmVhdGVBbmltYXRpb24pOgorICAgICAgICAoV2ViS2l0OjphZGRBbmltYXRp
b25Ub0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3I8PCk6CisKIDIwMjEtMDEtMjkg
IERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIENoZWNrIGFjdGl2ZURv
Y3VtZW50TG9hZGVyKCkgZm9yIG51bGwgY29uc2lzdGVudGx5IGV2ZXJ5d2hlcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FBbmltYXRp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUFu
aW1hdGlvbi5jcHAKaW5kZXggZGE5YTcxYjcxMzVmZmJiODE1ODEyMGFhYTcyNzgyYWQ1YTc5ZWUz
My4uOTA1MWU3OThkZWQ2OGY5NTQ2YTNiOGE1OWIxYWNmNTNjOWQ3NDFmNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUFuaW1hdGlvbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUFu
aW1hdGlvbi5jcHAKQEAgLTM0LDYgKzM0LDcgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgUGxhdGZvcm1DQUFuaW1hdGlvbjo6QW5pbWF0aW9uVHlwZSB0eXBlKQogewog
ICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgUGxhdGZvcm1DQUFuaW1hdGlvbjo6QmFzaWM6
IHRzIDw8ICJiYXNpYyI7IGJyZWFrOworICAgIGNhc2UgUGxhdGZvcm1DQUFuaW1hdGlvbjo6R3Jv
dXA6IHRzIDw8ICJncm91cCI7IGJyZWFrOwogICAgIGNhc2UgUGxhdGZvcm1DQUFuaW1hdGlvbjo6
S2V5ZnJhbWU6IHRzIDw8ICJrZXlmcmFtZSI7IGJyZWFrOwogICAgIGNhc2UgUGxhdGZvcm1DQUFu
aW1hdGlvbjo6U3ByaW5nOiB0cyA8PCAic3ByaW5nIjsgYnJlYWs7CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUFuaW1hdGlv
bi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUFuaW1h
dGlvbi5oCmluZGV4IGZjM2VhODgxZDZjOGVhMGI1YmZjMjg1ODBmMjE3NzA0ODVhMmJjMjAuLmI1
NjgwZjk5ZjNjNDNiM2QyN2U5YjA3ZTBkOWNmMTE1ZGQxMDY5YTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FBbmltYXRpb24uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBQW5pbWF0aW9u
LmgKQEAgLTQyLDcgKzQyLDcgQEAgY2xhc3MgVGltaW5nRnVuY3Rpb247CiAKIGNsYXNzIFBsYXRm
b3JtQ0FBbmltYXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxQbGF0Zm9ybUNBQW5pbWF0aW9uPiB7
CiBwdWJsaWM6Ci0gICAgZW51bSBBbmltYXRpb25UeXBlIHsgQmFzaWMsIEtleWZyYW1lLCBTcHJp
bmcgfTsKKyAgICBlbnVtIEFuaW1hdGlvblR5cGUgeyBCYXNpYywgR3JvdXAsIEtleWZyYW1lLCBT
cHJpbmcgfTsKICAgICBlbnVtIEZpbGxNb2RlVHlwZSB7IE5vRmlsbE1vZGUsIEZvcndhcmRzLCBC
YWNrd2FyZHMsIEJvdGggfTsKICAgICBlbnVtIFZhbHVlRnVuY3Rpb25UeXBlIHsgTm9WYWx1ZUZ1
bmN0aW9uLCBSb3RhdGVYLCBSb3RhdGVZLCBSb3RhdGVaLCBTY2FsZVgsIFNjYWxlWSwgU2NhbGVa
LCBTY2FsZSwgVHJhbnNsYXRlWCwgVHJhbnNsYXRlWSwgVHJhbnNsYXRlWiwgVHJhbnNsYXRlIH07
CiAKQEAgLTExOSw2ICsxMTksMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRUaW1p
bmdGdW5jdGlvbnMoY29uc3QgVmVjdG9yPGNvbnN0IFRpbWluZ0Z1bmN0aW9uKj4mLCBib29sIHJl
dmVyc2UgPSBmYWxzZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjb3B5VGltaW5nRnVuY3Rpb25z
RnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJikgPSAwOwogCisgICAgLy8gQW5pbWF0aW9u
IGdyb3VwIHByb3BlcnRpZXMuCisgICAgdmlydHVhbCB2b2lkIHNldEFuaW1hdGlvbnMoY29uc3Qg
VmVjdG9yPFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPj4mKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGNvcHlBbmltYXRpb25zRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJikgPSAwOwor
CiAgICAgdm9pZCBzZXRBY3R1YWxTdGFydFRpbWVJZk5lZWRlZChDRlRpbWVJbnRlcnZhbCB0KQog
ICAgIHsKICAgICAgICAgaWYgKGJlZ2luVGltZSgpIDw9IDApCkBAIC0xMjYsNyArMTMwLDcgQEAg
cHVibGljOgogICAgIH0KIAogICAgIGJvb2wgaXNCYXNpY0FuaW1hdGlvbigpIGNvbnN0OwotICAg
IAorCiBwcm90ZWN0ZWQ6CiAgICAgUGxhdGZvcm1DQUFuaW1hdGlvbihBbmltYXRpb25UeXBlIHR5
cGUgPSBCYXNpYykKICAgICAgICAgOiBtX3R5cGUodHlwZSkKQEAgLTE1Niw2ICsxNjAsNyBAQCB0
ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb246
OkFuaW1hdGlvblR5cGU+IHsKICAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAogICAgICAg
ICBXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uOjpBbmltYXRpb25UeXBlLAogICAgICAgICBX
ZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uOjpBbmltYXRpb25UeXBlOjpCYXNpYywKKyAgICAg
ICAgV2ViQ29yZTo6UGxhdGZvcm1DQUFuaW1hdGlvbjo6QW5pbWF0aW9uVHlwZTo6R3JvdXAsCiAg
ICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb246OkFuaW1hdGlvblR5cGU6OktleWZy
YW1lLAogICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uOjpBbmltYXRpb25UeXBl
OjpTcHJpbmcKICAgICA+OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EuaApp
bmRleCAyOWJkZTVlOWVjMzYyMzBhNDJhZThjN2Q2ZGM3NzVmYzQ5MjQ1ZTk4Li5iNTE0YWVmNTI1
NjM3NjI2YWY5ODE1YTU1OTc3Y2JjZTZkZTVjOGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNB
QW5pbWF0aW9uQ29jb2EuaApAQCAtMzIsMTAgKzMyLDExIEBACiAKIE9CSkNfQ0xBU1MgQ0FNZWRp
YVRpbWluZ0Z1bmN0aW9uOwogT0JKQ19DTEFTUyBDQUFuaW1hdGlvbjsKK09CSkNfQ0xBU1MgQ0FB
bmltYXRpb25Hcm91cDsKIE9CSkNfQ0xBU1MgQ0FQcm9wZXJ0eUFuaW1hdGlvbjsKIE9CSkNfQ0xB
U1MgTlNTdHJpbmc7CiAKLXR5cGVkZWYgQ0FQcm9wZXJ0eUFuaW1hdGlvbiogUGxhdGZvcm1Bbmlt
YXRpb25SZWY7Cit0eXBlZGVmIENBQW5pbWF0aW9uKiBQbGF0Zm9ybUFuaW1hdGlvblJlZjsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMjMsMTEgKzEyNCwxNSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRUaW1pbmdGdW5jdGlvbnMoY29uc3QgVmVjdG9yPGNvbnN0IFRpbWluZ0Z1bmN0aW9u
Kj4mLCBib29sIHJldmVyc2UgPSBmYWxzZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBjb3B5VGltaW5n
RnVuY3Rpb25zRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJikgb3ZlcnJpZGU7CiAKKyAg
ICAvLyBBbmltYXRpb24gZ3JvdXAgcHJvcGVydGllcy4KKyAgICB2b2lkIHNldEFuaW1hdGlvbnMo
Y29uc3QgVmVjdG9yPFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPj4mKSBmaW5hbDsKKyAgICB2
b2lkIGNvcHlBbmltYXRpb25zRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJikgZmluYWw7
CisKIHByaXZhdGU6CiAgICAgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hKEFuaW1hdGlvblR5cGUs
IGNvbnN0IFN0cmluZyYga2V5UGF0aCk7CiAgICAgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hKFBs
YXRmb3JtQW5pbWF0aW9uUmVmKTsKIAotICAgIFJldGFpblB0cjxDQVByb3BlcnR5QW5pbWF0aW9u
PiBtX2FuaW1hdGlvbjsKKyAgICBSZXRhaW5QdHI8Q0FBbmltYXRpb24+IG1fYW5pbWF0aW9uOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1h
dGlvbkNvY29hLm1tCmluZGV4IGQ5ZDgxMDY3ODAwZWU3ZGU2MDcxNmY1ZjZhMzAzZDM4NWMyZTE3
ZGIuLmJmYWZiYTQ1YjcwZDFlM2RhNTQwODAyNTlhMjc0OWFjOGQ4YmE0OTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmlt
YXRpb25Db2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9j
b2NvYS9QbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EubW0KQEAgLTE2Nyw2ICsxNjcsOSBAQCBQbGF0
Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYShBbmltYXRpb25U
eXBlIHR5cGUsIGNvbnN0IFN0cgogICAgIGNhc2UgQmFzaWM6CiAgICAgICAgIG1fYW5pbWF0aW9u
ID0gW0NBQmFzaWNBbmltYXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6a2V5UGF0aF07CiAgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgR3JvdXA6CisgICAgICAgIG1fYW5pbWF0aW9uID0gW0NBQW5p
bWF0aW9uR3JvdXAgYW5pbWF0aW9uXTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBLZXlmcmFt
ZToKICAgICAgICAgbV9hbmltYXRpb24gPSBbQ0FLZXlmcmFtZUFuaW1hdGlvbiBhbmltYXRpb25X
aXRoS2V5UGF0aDprZXlQYXRoXTsKICAgICAgICAgYnJlYWs7CkBAIC0xODUsMTIgKzE4OCwxNCBA
QCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYShQbGF0
Zm9ybUFuaW1hdGlvblJlZiBhbmltYXRpbwogICAgICAgICAgICAgc2V0VHlwZShCYXNpYyk7CiAg
ICAgfSBlbHNlIGlmIChbc3RhdGljX2Nhc3Q8Q0FBbmltYXRpb24qPihhbmltYXRpb24pIGlzS2lu
ZE9mQ2xhc3M6W0NBS2V5ZnJhbWVBbmltYXRpb24gY2xhc3NdXSkKICAgICAgICAgc2V0VHlwZShL
ZXlmcmFtZSk7CisgICAgZWxzZSBpZiAoW3N0YXRpY19jYXN0PENBQW5pbWF0aW9uKj4oYW5pbWF0
aW9uKSBpc0tpbmRPZkNsYXNzOltDQUFuaW1hdGlvbkdyb3VwIGNsYXNzXV0pCisgICAgICAgIHNl
dFR5cGUoR3JvdXApOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBtX2FuaW1hdGlvbiA9IHN0YXRpY19j
YXN0PENBUHJvcGVydHlBbmltYXRpb24qPihhbmltYXRpb24pOworICAgIG1fYW5pbWF0aW9uID0g
c3RhdGljX2Nhc3Q8Q0FBbmltYXRpb24qPihhbmltYXRpb24pOwogfQogCiBQbGF0Zm9ybUNBQW5p
bWF0aW9uQ29jb2E6On5QbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EoKQpAQCAtMjM1LDcgKzI0MCw5
IEBAIFBsYXRmb3JtQW5pbWF0aW9uUmVmIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6cGxhdGZv
cm1BbmltYXRpb24oKSBjb25zdAogCiBTdHJpbmcgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpr
ZXlQYXRoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gW21fYW5pbWF0aW9uIGtleVBhdGhdOworICAg
IGlmIChbc3RhdGljX2Nhc3Q8Q0FBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgaXNLaW5k
T2ZDbGFzczpbQ0FQcm9wZXJ0eUFuaW1hdGlvbiBjbGFzc11dKQorICAgICAgICByZXR1cm4gW3N0
YXRpY19jYXN0PENBUHJvcGVydHlBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkga2V5UGF0
aF07CisgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiB9CiAKIENGVGltZUludGVydmFsIFBsYXRm
b3JtQ0FBbmltYXRpb25Db2NvYTo6YmVnaW5UaW1lKCkgY29uc3QKQEAgLTMzMyw2ICszNDAsOCBA
QCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VGltaW5nRnVuY3Rpb24oY29uc3Qg
VGltaW5nRnVuY3Rpb24qIHZhbHVlLCBibwogICAgICAgICAgICAgc3ByaW5nQW5pbWF0aW9uLmlu
aXRpYWxWZWxvY2l0eSA9IGZ1bmN0aW9uLmluaXRpYWxWZWxvY2l0eSgpOwogICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JvdXA6CisgICAgICAgIGJyZWFrOwogICAgIH0KIH0K
IApAQCAtMzUzLDIyICszNjIsMjggQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNl
dFJlbW92ZWRPbkNvbXBsZXRpb24oYm9vbCB2YWx1ZSkKIAogYm9vbCBQbGF0Zm9ybUNBQW5pbWF0
aW9uQ29jb2E6OmlzQWRkaXRpdmUoKSBjb25zdAogewotICAgIHJldHVybiBbbV9hbmltYXRpb24g
aXNBZGRpdGl2ZV07CisgICAgaWYgKFtzdGF0aWNfY2FzdDxDQUFuaW1hdGlvbio+KG1fYW5pbWF0
aW9uLmdldCgpKSBpc0tpbmRPZkNsYXNzOltDQVByb3BlcnR5QW5pbWF0aW9uIGNsYXNzXV0pCisg
ICAgICAgIHJldHVybiBbc3RhdGljX2Nhc3Q8Q0FQcm9wZXJ0eUFuaW1hdGlvbio+KG1fYW5pbWF0
aW9uLmdldCgpKSBpc0FkZGl0aXZlXTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgUGxh
dGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRBZGRpdGl2ZShib29sIHZhbHVlKQogewotICAgIFtt
X2FuaW1hdGlvbiBzZXRBZGRpdGl2ZTp2YWx1ZV07CisgICAgaWYgKFtzdGF0aWNfY2FzdDxDQUFu
aW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBpc0tpbmRPZkNsYXNzOltDQVByb3BlcnR5QW5p
bWF0aW9uIGNsYXNzXV0pCisgICAgICAgIHJldHVybiBbc3RhdGljX2Nhc3Q8Q0FQcm9wZXJ0eUFu
aW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRBZGRpdGl2ZTp2YWx1ZV07CiB9CiAKIFBs
YXRmb3JtQ0FBbmltYXRpb246OlZhbHVlRnVuY3Rpb25UeXBlIFBsYXRmb3JtQ0FBbmltYXRpb25D
b2NvYTo6dmFsdWVGdW5jdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZyb21DQVZhbHVlRnVu
Y3Rpb25UeXBlKFtbbV9hbmltYXRpb24gdmFsdWVGdW5jdGlvbl0gbmFtZV0pOworICAgIGlmIChb
c3RhdGljX2Nhc3Q8Q0FBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgaXNLaW5kT2ZDbGFz
czpbQ0FQcm9wZXJ0eUFuaW1hdGlvbiBjbGFzc11dKQorICAgICAgICByZXR1cm4gZnJvbUNBVmFs
dWVGdW5jdGlvblR5cGUoW1tzdGF0aWNfY2FzdDxDQVByb3BlcnR5QW5pbWF0aW9uKj4obV9hbmlt
YXRpb24uZ2V0KCkpIHZhbHVlRnVuY3Rpb25dIG5hbWVdKTsKKyAgICByZXR1cm4gTm9WYWx1ZUZ1
bmN0aW9uOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VmFsdWVGdW5j
dGlvbihWYWx1ZUZ1bmN0aW9uVHlwZSB2YWx1ZSkKIHsKLSAgICBbbV9hbmltYXRpb24gc2V0VmFs
dWVGdW5jdGlvbjpbQ0FWYWx1ZUZ1bmN0aW9uIGZ1bmN0aW9uV2l0aE5hbWU6dG9DQVZhbHVlRnVu
Y3Rpb25UeXBlKHZhbHVlKV1dOworICAgIGlmIChbc3RhdGljX2Nhc3Q8Q0FBbmltYXRpb24qPiht
X2FuaW1hdGlvbi5nZXQoKSkgaXNLaW5kT2ZDbGFzczpbQ0FQcm9wZXJ0eUFuaW1hdGlvbiBjbGFz
c11dKQorICAgICAgICByZXR1cm4gW3N0YXRpY19jYXN0PENBUHJvcGVydHlBbmltYXRpb24qPiht
X2FuaW1hdGlvbi5nZXQoKSkgc2V0VmFsdWVGdW5jdGlvbjpbQ0FWYWx1ZUZ1bmN0aW9uIGZ1bmN0
aW9uV2l0aE5hbWU6dG9DQVZhbHVlRnVuY3Rpb25UeXBlKHZhbHVlKV1dOwogfQogCiB2b2lkIFBs
YXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0RnJvbVZhbHVlKGZsb2F0IHZhbHVlKQpAQCAtNTQ2
LDQgKzU2MSwxOSBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6Y29weVRpbWluZ0Z1
bmN0aW9uc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbgogICAgIFtzdGF0aWNfY2FzdDxD
QUtleWZyYW1lQW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFRpbWluZ0Z1bmN0aW9u
czpbb3RoZXIgdGltaW5nRnVuY3Rpb25zXV07CiB9CiAKK3ZvaWQgUGxhdGZvcm1DQUFuaW1hdGlv
bkNvY29hOjpzZXRBbmltYXRpb25zKGNvbnN0IFZlY3RvcjxSZWZQdHI8UGxhdGZvcm1DQUFuaW1h
dGlvbj4+JiB2YWx1ZSkKK3sKKyAgICBbc3RhdGljX2Nhc3Q8Q0FBbmltYXRpb25Hcm91cCo+KG1f
YW5pbWF0aW9uLmdldCgpKSBzZXRBbmltYXRpb25zOmNyZWF0ZU5TQXJyYXkodmFsdWUsIFsmXSAo
YXV0byYgYW5pbWF0aW9uKSAtPiBDQUFuaW1hdGlvbiAqIHsKKyAgICAgICAgaWYgKGlzPFBsYXRm
b3JtQ0FBbmltYXRpb25Db2NvYT4oYW5pbWF0aW9uLmdldCgpKSkKKyAgICAgICAgICAgIHJldHVy
biBkb3duY2FzdDxQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E+KGFuaW1hdGlvbi5nZXQoKSktPm1f
YW5pbWF0aW9uLmdldCgpOworICAgICAgICByZXR1cm4gbmlsOworICAgIH0pLmdldCgpXTsKK30K
Kwordm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OmNvcHlBbmltYXRpb25zRnJvbShjb25z
dCBQbGF0Zm9ybUNBQW5pbWF0aW9uJiB2YWx1ZSkKK3sKKyAgICBhdXRvIG90aGVyID0gc3RhdGlj
X2Nhc3Q8Q0FBbmltYXRpb25Hcm91cCo+KGRvd25jYXN0PFBsYXRmb3JtQ0FBbmltYXRpb25Db2Nv
YT4odmFsdWUpLm1fYW5pbWF0aW9uLmdldCgpKTsKKyAgICBbc3RhdGljX2Nhc3Q8Q0FBbmltYXRp
b25Hcm91cCo+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRBbmltYXRpb25zOltvdGhlciBhbmltYXRp
b25zXV07Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxh
eWVyQ29jb2EubW0KaW5kZXggOGVhNDUzYmMxM2E1YmU3YmNhNjUwOTYxM2M5ZDMxODY4ZjdhOWIz
Mi4uMDZjYWZmODhiOGJiY2E2NWQzZjQxZmU2MTc5NTJkN2FlZmRhMzZhNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVy
Q29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2Ev
UGxhdGZvcm1DQUxheWVyQ29jb2EubW0KQEAgLTUxMSw3ICs1MTEsNyBAQCB2b2lkIFBsYXRmb3Jt
Q0FMYXllckNvY29hOjphZGRBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXksIFBsYXRm
b3JtQ0FBbmltYQogICAgICAgICBbd2ViQW5pbWF0aW9uRGVsZWdhdGUgc2V0T3duZXI6dGhpc107
CiAgICAgfQogICAgIAotICAgIENBUHJvcGVydHlBbmltYXRpb24qIHByb3BlcnR5QW5pbWF0aW9u
ID0gc3RhdGljX2Nhc3Q8Q0FQcm9wZXJ0eUFuaW1hdGlvbio+KGRvd25jYXN0PFBsYXRmb3JtQ0FB
bmltYXRpb25Db2NvYT4oYW5pbWF0aW9uKS5wbGF0Zm9ybUFuaW1hdGlvbigpKTsKKyAgICBDQUFu
aW1hdGlvbiogcHJvcGVydHlBbmltYXRpb24gPSBzdGF0aWNfY2FzdDxDQUFuaW1hdGlvbio+KGRv
d25jYXN0PFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYT4oYW5pbWF0aW9uKS5wbGF0Zm9ybUFuaW1h
dGlvbigpKTsKICAgICBpZiAoIVtwcm9wZXJ0eUFuaW1hdGlvbiBkZWxlZ2F0ZV0pCiAgICAgICAg
IFtwcm9wZXJ0eUFuaW1hdGlvbiBzZXREZWxlZ2F0ZTpzdGF0aWNfY2FzdDxpZD4obV9kZWxlZ2F0
ZS5nZXQoKSldOwogCkBAIC01MjksNyArNTI5LDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2Nv
YTo6cmVtb3ZlQW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5KQogCiBSZWZQdHI8UGxh
dGZvcm1DQUFuaW1hdGlvbj4gUGxhdGZvcm1DQUxheWVyQ29jb2E6OmFuaW1hdGlvbkZvcktleShj
b25zdCBTdHJpbmcmIGtleSkKIHsKLSAgICBDQVByb3BlcnR5QW5pbWF0aW9uKiBwcm9wZXJ0eUFu
aW1hdGlvbiA9IHN0YXRpY19jYXN0PENBUHJvcGVydHlBbmltYXRpb24qPihbbV9sYXllciBhbmlt
YXRpb25Gb3JLZXk6a2V5XSk7CisgICAgQ0FBbmltYXRpb24qIHByb3BlcnR5QW5pbWF0aW9uID0g
c3RhdGljX2Nhc3Q8Q0FBbmltYXRpb24qPihbbV9sYXllciBhbmltYXRpb25Gb3JLZXk6a2V5XSk7
CiAgICAgaWYgKCFwcm9wZXJ0eUFuaW1hdGlvbikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgcmV0dXJuIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6Y3JlYXRlKHByb3BlcnR5QW5pbWF0
aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dp
bi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcAppbmRleCAwNzQ0ZDc1MDc5
MGNlODEzZGJmOTE4NjZiODM0N2NlMzMzMDAwMzQ4Li45NTlhZjg2MTZjMzY1YjM4MzYxODE0NjQw
MjlhNDE4ZmRhMGNkOWJkIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uY3BwCkBA
IC0xNTcsOCArMTU3LDEwIEBAIFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OlBsYXRmb3JtQ0FBbmlt
YXRpb25XaW4oQW5pbWF0aW9uVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmCiB7CiAgICAgaWYgKHR5
cGUgPT0gQmFzaWMpCiAgICAgICAgIG1fYW5pbWF0aW9uID0gYWRvcHRDRihDQUNGQW5pbWF0aW9u
Q3JlYXRlKGtDQUNGQmFzaWNBbmltYXRpb24pKTsKLSAgICBlbHNlCisgICAgZWxzZSBpZiAodHlw
ZSA9PSBLZXlmcmFtZSkKICAgICAgICAgbV9hbmltYXRpb24gPSBhZG9wdENGKENBQ0ZBbmltYXRp
b25DcmVhdGUoa0NBQ0ZLZXlmcmFtZUFuaW1hdGlvbikpOworICAgIGVsc2UgaWYgKHR5cGUgPT0g
R3JvdXApCisgICAgICAgIG1fYW5pbWF0aW9uID0gYWRvcHRDRihDQUNGQW5pbWF0aW9uQ3JlYXRl
KGtDQUNGQW5pbWF0aW9uR3JvdXApKTsKICAgICAKICAgICBDQUNGQW5pbWF0aW9uU2V0S2V5UGF0
aChtX2FuaW1hdGlvbi5nZXQoKSwga2V5UGF0aC5jcmVhdGVDRlN0cmluZygpLmdldCgpKTsKIH0K
QEAgLTE2OSw2ICsxNzEsOCBAQCBQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpQbGF0Zm9ybUNBQW5p
bWF0aW9uV2luKFBsYXRmb3JtQW5pbWF0aW9uUmVmIGFuaW1hdGlvbikKICAgICAgICAgc2V0VHlw
ZShCYXNpYyk7CiAgICAgZWxzZSBpZiAoQ0FDRkFuaW1hdGlvbkdldENsYXNzKGFuaW1hdGlvbikg
PT0ga0NBQ0ZLZXlmcmFtZUFuaW1hdGlvbikKICAgICAgICAgc2V0VHlwZShLZXlmcmFtZSk7Cisg
ICAgZWxzZSBpZiAoQ0FDRkFuaW1hdGlvbkdldENsYXNzKGFuaW1hdGlvbikgPT0ga0NBQ0ZBbmlt
YXRpb25Hcm91cCkKKyAgICAgICAgc2V0VHlwZShHcm91cCk7CiAgICAgZWxzZSB7CiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CkBAIC01NTMsNCArNTU3LDIx
IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6Y29weVRpbWluZ0Z1bmN0aW9uc0Zyb20o
Y29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYKICAgICBDQUNGQW5pbWF0aW9uU2V0VGltaW5nRnVu
Y3Rpb25zKG1fYW5pbWF0aW9uLmdldCgpLCBDQUNGQW5pbWF0aW9uR2V0VGltaW5nRnVuY3Rpb25z
KGRvd25jYXN0PFBsYXRmb3JtQ0FBbmltYXRpb25XaW4+KHZhbHVlKS5wbGF0Zm9ybUFuaW1hdGlv
bigpKSk7CiB9CiAKK3ZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0QW5pbWF0aW9ucyhj
b25zdCBWZWN0b3I8UmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+PiYgdmFsdWUpCit7CisgICAg
YXV0byBhcnJheSA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZU11dGFibGUoMCwgdmFsdWUuc2l6ZSgp
LCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7CisgICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiB2
YWx1ZSkgeworICAgICAgICBSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4gYW5pbWF0aW9uID0g
dmFsdWVbaV07CisgICAgICAgIGlmIChpczxQbGF0Zm9ybUNBQW5pbWF0aW9uV2luPihhbmltYXRp
b24uZ2V0KCkpKQorICAgICAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGFycmF5LmdldCgpLCBk
b3duY2FzdDxQbGF0Zm9ybUNBQW5pbWF0aW9uV2luPigqYW5pbWF0aW9uKS5tX2FuaW1hdGlvbi5n
ZXQoKSk7CisgICAgfQorCisgICAgQ0FDRkFuaW1hdGlvblNldEFuaW1hdGlvbnMobV9hbmltYXRp
b24uZ2V0KCksIGFycmF5LmdldCgpKTsKK30KKwordm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uV2lu
Ojpjb3B5QW5pbWF0aW9uc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYgdmFsdWUpCit7
CisgICAgQ0FDRkFuaW1hdGlvblNldEFuaW1hdGlvbnMobV9hbmltYXRpb24uZ2V0KCksIENBQ0ZB
bmltYXRpb25HZXRBbmltYXRpb25zKGRvd25jYXN0PFBsYXRmb3JtQ0FBbmltYXRpb25XaW4+KHZh
bHVlKS5wbGF0Zm9ybUFuaW1hdGlvbigpKSk7Cit9CisKICNlbmRpZiAvLyBQTEFURk9STShXSU4p
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxh
dGZvcm1DQUFuaW1hdGlvbldpbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uaAppbmRleCAwOGJiN2E0MGZkMzEwNGQwNDk5
NDQ2Mjc5MzBiMDcwNjI0NTcyMmJiLi5mN2Q0YzRkNTI4NzUwM2ExYmU5ZTBjNTYwMDk5MjBiNjA0
N2VlMGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93
aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmgKQEAgLTExMyw2ICsxMTMs
MTAgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VGltaW5nRnVuY3Rpb25zKGNvbnN0IFZlY3Rvcjxj
b25zdCBUaW1pbmdGdW5jdGlvbio+JiwgYm9vbCByZXZlcnNlID0gZmFsc2UpIG92ZXJyaWRlOwog
ICAgIHZvaWQgY29weVRpbWluZ0Z1bmN0aW9uc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlv
biYpIG92ZXJyaWRlOwogCisgICAgLy8gQW5pbWF0aW9uIGdyb3VwIHByb3BlcnRpZXMuCisgICAg
dm9pZCBzZXRBbmltYXRpb25zKGNvbnN0IFZlY3RvcjxSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlv
bj4+JikgZmluYWw7CisgICAgdm9pZCBjb3B5QW5pbWF0aW9uc0Zyb20oY29uc3QgUGxhdGZvcm1D
QUFuaW1hdGlvbiYpIGZpbmFsOworCiBwcml2YXRlOgogICAgIFBsYXRmb3JtQ0FBbmltYXRpb25X
aW4oQW5pbWF0aW9uVHlwZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKTsKICAgICBQbGF0Zm9ybUNB
QW5pbWF0aW9uV2luKFBsYXRmb3JtQW5pbWF0aW9uUmVmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0
aW9uUmVtb3RlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXll
clRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5oCmluZGV4IDU4YjNlNzkwMzRjY2YwN2Ux
ZWYyMzZkNzllYTYxNTVhODY0NTVjYzQuLmYwMzFjZGUwOTU5NGJhYjM1MjMxYzAxYmUwMjQ2MjE5
N2Y4M2JiMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1Jl
bW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLmgKKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRp
b25SZW1vdGUuaApAQCAtMTE5LDYgKzExOSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRUaW1p
bmdGdW5jdGlvbnMoY29uc3QgVmVjdG9yPGNvbnN0IFdlYkNvcmU6OlRpbWluZ0Z1bmN0aW9uKj4m
LCBib29sIHJldmVyc2UgPSBmYWxzZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBjb3B5VGltaW5nRnVu
Y3Rpb25zRnJvbShjb25zdCBXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uJikgb3ZlcnJpZGU7
CiAKKyAgICAvLyBBbmltYXRpb24gZ3JvdXAgcHJvcGVydGllcy4KKyAgICB2b2lkIHNldEFuaW1h
dGlvbnMoY29uc3QgVmVjdG9yPFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPj4mKSBmaW5hbDsK
KyAgICB2b2lkIGNvcHlBbmltYXRpb25zRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJikg
ZmluYWw7CisKICAgICBBbmltYXRpb25UeXBlIGFuaW1hdGlvblR5cGUoKSBjb25zdCB7IHJldHVy
biBtX3Byb3BlcnRpZXMuYW5pbWF0aW9uVHlwZTsgfQogICAgIHZvaWQgc2V0SGFzRXhwbGljaXRC
ZWdpblRpbWUoYm9vbCBoYXNFeHBsaWNpdEJlZ2luVGltZSkgeyBtX3Byb3BlcnRpZXMuaGFzRXhw
bGljaXRCZWdpblRpbWUgPSBoYXNFeHBsaWNpdEJlZ2luVGltZTsgfQogICAgIGJvb2wgaGFzRXhw
bGljaXRCZWdpblRpbWUoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnRpZXMuaGFzRXhwbGljaXRC
ZWdpblRpbWU7IH0KQEAgLTI4OSw2ICsyOTMsOCBAQCBwdWJsaWM6CiAgICAgICAgIFZlY3RvcjxL
ZXlmcmFtZVZhbHVlPiBrZXlWYWx1ZXM7CiAgICAgICAgIFZlY3RvcjxmbG9hdD4ga2V5VGltZXM7
CiAgICAgICAgIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6VGltaW5nRnVuY3Rpb24+PiB0aW1pbmdG
dW5jdGlvbnM7CisKKyAgICAgICAgVmVjdG9yPFByb3BlcnRpZXM+IGFuaW1hdGlvbnM7CiAgICAg
fTsKIAogICAgIGNvbnN0IFByb3BlcnRpZXMmIHByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBt
X3Byb3BlcnRpZXM7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tIGIvU291cmNl
L1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmlt
YXRpb25SZW1vdGUubW0KaW5kZXggZGU3ZDcyODAyOTJkMDUwZDcyZDA2YWM5NGFiOTMxY2YyM2Zh
NGU4ZS4uMjg0YzFiZDU1NDYwMDMxYTkxYWQ5ODg0YTE2YTBjYWQ1MTg3NWEyZCAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRm
b3JtQ0FBbmltYXRpb25SZW1vdGUubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dl
YlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW0KQEAgLTI0
MSw2ICsyNDEsOCBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OlByb3BlcnRpZXM6
OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5jb2RlciA8PCBzdGF0
aWNfY2FzdDx1aW50NjRfdD4odGltaW5nRnVuY3Rpb25zLnNpemUoKSk7CiAgICAgZm9yIChjb25z
dCBhdXRvJiB0aW1pbmdGdW5jdGlvbiA6IHRpbWluZ0Z1bmN0aW9ucykKICAgICAgICAgZW5jb2Rl
VGltaW5nRnVuY3Rpb24oZW5jb2RlciwgdGltaW5nRnVuY3Rpb24uZ2V0KCkpOworCisgICAgZW5j
b2RlciA8PCBhbmltYXRpb25zOwogfQogCiBPcHRpb25hbDxQbGF0Zm9ybUNBQW5pbWF0aW9uUmVt
b3RlOjpQcm9wZXJ0aWVzPiBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpQcm9wZXJ0aWVzOjpk
ZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQpAQCAtMzIwLDYgKzMyMiw5IEBAIE9wdGlvbmFs
PFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OlByb3BlcnRpZXM+IFBsYXRmb3JtQ0FBbmltYXRp
b25SZW1vdGU6OlByb3BlCiAgICAgICAgIH0KICAgICB9CiAKKyAgICBpZiAoIWRlY29kZXIuZGVj
b2RlKHByb3BlcnRpZXMuYW5pbWF0aW9ucykpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7
CisKICAgICByZXR1cm4gV1RGTW92ZShwcm9wZXJ0aWVzKTsKIH0KICAgICAKQEAgLTM1NSw3ICsz
NjAsOSBAQCBSZWY8UGxhdGZvcm1DQUFuaW1hdGlvbj4gUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90
ZTo6Y29weSgpIGNvbnN0CiAgICAgICAgIGFuaW1hdGlvbi0+Y29weUZyb21WYWx1ZUZyb20oKnRo
aXMpOwogICAgICAgICBhbmltYXRpb24tPmNvcHlUb1ZhbHVlRnJvbSgqdGhpcyk7CiAgICAgfQot
ICAgIAorCisgICAgYW5pbWF0aW9uLT5jb3B5QW5pbWF0aW9uc0Zyb20oKnRoaXMpOworCiAgICAg
cmV0dXJuIGFuaW1hdGlvbjsKIH0KIApAQCAtNzExLDYgKzcxOCwyMyBAQCB2b2lkIFBsYXRmb3Jt
Q0FBbmltYXRpb25SZW1vdGU6OmNvcHlUaW1pbmdGdW5jdGlvbnNGcm9tKGNvbnN0IFBsYXRmb3Jt
Q0FBbmltYXRpbwogICAgIG1fcHJvcGVydGllcy5yZXZlcnNlVGltaW5nRnVuY3Rpb25zID0gb3Ro
ZXIubV9wcm9wZXJ0aWVzLnJldmVyc2VUaW1pbmdGdW5jdGlvbnM7CiB9CiAKK3ZvaWQgUGxhdGZv
cm1DQUFuaW1hdGlvblJlbW90ZTo6c2V0QW5pbWF0aW9ucyhjb25zdCBWZWN0b3I8UmVmUHRyPFBs
YXRmb3JtQ0FBbmltYXRpb24+PiYgdmFsdWVzKQoreworICAgIFZlY3RvcjxQcm9wZXJ0aWVzPiBh
bmltYXRpb25zOworICAgIGFuaW1hdGlvbnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh2YWx1ZXMu
c2l6ZSgpKTsKKworICAgIGZvciAoYXV0byYgdmFsdWUgOiB2YWx1ZXMpCisgICAgICAgIGFuaW1h
dGlvbnMudW5jaGVja2VkQXBwZW5kKGRvd25jYXN0PFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU+
KHZhbHVlLmdldCgpKS0+cHJvcGVydGllcygpKTsKKworICAgIG1fcHJvcGVydGllcy5hbmltYXRp
b25zID0gV1RGTW92ZShhbmltYXRpb25zKTsKK30KKwordm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9u
UmVtb3RlOjpjb3B5QW5pbWF0aW9uc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYgdmFs
dWUpCit7CisgICAgY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZSYgb3RoZXIgPSBkb3du
Y2FzdDxQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlPih2YWx1ZSk7CisgICAgbV9wcm9wZXJ0aWVz
LmFuaW1hdGlvbnMgPSBvdGhlci5tX3Byb3BlcnRpZXMuYW5pbWF0aW9uczsKK30KKwogc3RhdGlj
IE5TT2JqZWN0KiBhbmltYXRpb25WYWx1ZUZyb21LZXlmcmFtZVZhbHVlKGNvbnN0IFBsYXRmb3Jt
Q0FBbmltYXRpb25SZW1vdGU6OktleWZyYW1lVmFsdWUmIGtleWZyYW1lVmFsdWUpCiB7CiAgICAg
c3dpdGNoIChrZXlmcmFtZVZhbHVlLmtleWZyYW1lVHlwZSgpKSB7CkBAIC03MzQsMTMgKzc1OCwx
MyBAQCBzdGF0aWMgTlNPYmplY3QqIGFuaW1hdGlvblZhbHVlRnJvbUtleWZyYW1lVmFsdWUoY29u
c3QgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZQogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgYWRk
QW5pbWF0aW9uVG9MYXllcihDQUxheWVyICpsYXllciwgUmVtb3RlTGF5ZXJUcmVlSG9zdCogbGF5
ZXJUcmVlSG9zdCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb25S
ZW1vdGU6OlByb3BlcnRpZXMmIHByb3BlcnRpZXMpCitzdGF0aWMgUmV0YWluUHRyPENBQW5pbWF0
aW9uPiBjcmVhdGVBbmltYXRpb24oQ0FMYXllciAqbGF5ZXIsIFJlbW90ZUxheWVyVHJlZUhvc3Qq
IGxheWVyVHJlZUhvc3QsIGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OlByb3BlcnRp
ZXMmIHByb3BlcnRpZXMpCiB7Ci0gICAgUmV0YWluUHRyPENBUHJvcGVydHlBbmltYXRpb24+IGNh
QW5pbWF0aW9uOworICAgIFJldGFpblB0cjxDQUFuaW1hdGlvbj4gY2FBbmltYXRpb247CiAgICAg
c3dpdGNoIChwcm9wZXJ0aWVzLmFuaW1hdGlvblR5cGUpIHsKICAgICBjYXNlIFBsYXRmb3JtQ0FB
bmltYXRpb246OkJhc2ljOiB7CiAgICAgICAgIGF1dG8gYmFzaWNBbmltYXRpb24gPSBbQ0FCYXNp
Y0FuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5UGF0aDpwcm9wZXJ0aWVzLmtleVBhdGhdOwotICAg
ICAgICAKKwogICAgICAgICBpZiAocHJvcGVydGllcy5rZXlWYWx1ZXMuc2l6ZSgpID4gMSkgewog
ICAgICAgICAgICAgW2Jhc2ljQW5pbWF0aW9uIHNldEZyb21WYWx1ZTphbmltYXRpb25WYWx1ZUZy
b21LZXlmcmFtZVZhbHVlKHByb3BlcnRpZXMua2V5VmFsdWVzWzBdKV07CiAgICAgICAgICAgICBb
YmFzaWNBbmltYXRpb24gc2V0VG9WYWx1ZTphbmltYXRpb25WYWx1ZUZyb21LZXlmcmFtZVZhbHVl
KHByb3BlcnRpZXMua2V5VmFsdWVzWzFdKV07CkBAIC03NTIsNiArNzc2LDE4IEBAIHN0YXRpYyB2
b2lkIGFkZEFuaW1hdGlvblRvTGF5ZXIoQ0FMYXllciAqbGF5ZXIsIFJlbW90ZUxheWVyVHJlZUhv
c3QqIGxheWVyVHJlZUhvCiAgICAgICAgIGNhQW5pbWF0aW9uID0gYmFzaWNBbmltYXRpb247CiAg
ICAgICAgIGJyZWFrOwogICAgIH0KKyAgICBjYXNlIFBsYXRmb3JtQ0FBbmltYXRpb246Okdyb3Vw
OiB7CisgICAgICAgIGF1dG8gYW5pbWF0aW9uR3JvdXAgPSBbQ0FBbmltYXRpb25Hcm91cCBhbmlt
YXRpb25dOworCisgICAgICAgIGlmIChwcm9wZXJ0aWVzLmFuaW1hdGlvbnMuc2l6ZSgpKSB7Cisg
ICAgICAgICAgICBbYW5pbWF0aW9uR3JvdXAgc2V0QW5pbWF0aW9uczpjcmVhdGVOU0FycmF5KHBy
b3BlcnRpZXMuYW5pbWF0aW9ucywgWyZdIChhdXRvJiBhbmltYXRpb25Qcm9wZXJ0aWVzKSB7Cisg
ICAgICAgICAgICAgICAgcmV0dXJuIGNyZWF0ZUFuaW1hdGlvbihsYXllciwgbGF5ZXJUcmVlSG9z
dCwgYW5pbWF0aW9uUHJvcGVydGllcykuZ2V0KCk7CisgICAgICAgICAgICB9KS5nZXQoKV07Cisg
ICAgICAgIH0KKworICAgICAgICBjYUFuaW1hdGlvbiA9IGFuaW1hdGlvbkdyb3VwOworICAgICAg
ICBicmVhazsKKyAgICB9CiAgICAgY2FzZSBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpLZXlmcmFtZTog
ewogICAgICAgICBhdXRvIGtleWZyYW1lQW5pbWF0aW9uID0gW0NBS2V5ZnJhbWVBbmltYXRpb24g
YW5pbWF0aW9uV2l0aEtleVBhdGg6cHJvcGVydGllcy5rZXlQYXRoXTsKIApAQCAtNzc1LDE4ICs4
MTEsMTggQEAgc3RhdGljIHZvaWQgYWRkQW5pbWF0aW9uVG9MYXllcihDQUxheWVyICpsYXllciwg
UmVtb3RlTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG8KICAgICAgICAgICAgICAgICByZXR1cm4g
dG9DQU1lZGlhVGltaW5nRnVuY3Rpb24oZnVuY3Rpb24uZ2V0KCksIHByb3BlcnRpZXMucmV2ZXJz
ZVRpbWluZ0Z1bmN0aW9ucyk7CiAgICAgICAgICAgICB9KS5nZXQoKV07CiAgICAgICAgIH0KLSAg
ICAgICAgCisKICAgICAgICAgY2FBbmltYXRpb24gPSBrZXlmcmFtZUFuaW1hdGlvbjsKICAgICAg
ICAgYnJlYWs7CiAgICAgfQogICAgIGNhc2UgUGxhdGZvcm1DQUFuaW1hdGlvbjo6U3ByaW5nOiB7
CiAgICAgICAgIGF1dG8gc3ByaW5nQW5pbWF0aW9uID0gW0NBU3ByaW5nQW5pbWF0aW9uIGFuaW1h
dGlvbldpdGhLZXlQYXRoOnByb3BlcnRpZXMua2V5UGF0aF07Ci0gICAgICAgIAorCiAgICAgICAg
IGlmIChwcm9wZXJ0aWVzLmtleVZhbHVlcy5zaXplKCkgPiAxKSB7CiAgICAgICAgICAgICBbc3By
aW5nQW5pbWF0aW9uIHNldEZyb21WYWx1ZTphbmltYXRpb25WYWx1ZUZyb21LZXlmcmFtZVZhbHVl
KHByb3BlcnRpZXMua2V5VmFsdWVzWzBdKV07CiAgICAgICAgICAgICBbc3ByaW5nQW5pbWF0aW9u
IHNldFRvVmFsdWU6YW5pbWF0aW9uVmFsdWVGcm9tS2V5ZnJhbWVWYWx1ZShwcm9wZXJ0aWVzLmtl
eVZhbHVlc1sxXSldOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChwcm9wZXJ0
aWVzLnRpbWluZ0Z1bmN0aW9ucy5zaXplKCkpIHsKICAgICAgICAgICAgIGF1dG8mIHRpbWluZ0Z1
bmN0aW9uID0gcHJvcGVydGllcy50aW1pbmdGdW5jdGlvbnNbMF07CiAgICAgICAgICAgICBpZiAo
dGltaW5nRnVuY3Rpb24tPmlzU3ByaW5nVGltaW5nRnVuY3Rpb24oKSkgewpAQCAtODAxLDcgKzgz
Nyw3IEBAIHN0YXRpYyB2b2lkIGFkZEFuaW1hdGlvblRvTGF5ZXIoQ0FMYXllciAqbGF5ZXIsIFJl
bW90ZUxheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAg
ICB9Ci0gICAgCisKICAgICBbY2FBbmltYXRpb24gc2V0QmVnaW5UaW1lOnByb3BlcnRpZXMuYmVn
aW5UaW1lXTsKICAgICBbY2FBbmltYXRpb24gc2V0RHVyYXRpb246cHJvcGVydGllcy5kdXJhdGlv
bl07CiAgICAgW2NhQW5pbWF0aW9uIHNldFRpbWVPZmZzZXQ6cHJvcGVydGllcy50aW1lT2Zmc2V0
XTsKQEAgLTgwOSwyOCArODQ1LDM1IEBAIHN0YXRpYyB2b2lkIGFkZEFuaW1hdGlvblRvTGF5ZXIo
Q0FMYXllciAqbGF5ZXIsIFJlbW90ZUxheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvCiAgICAgW2Nh
QW5pbWF0aW9uIHNldFNwZWVkOnByb3BlcnRpZXMuc3BlZWRdOwogICAgIFtjYUFuaW1hdGlvbiBz
ZXRBdXRvcmV2ZXJzZXM6cHJvcGVydGllcy5hdXRvUmV2ZXJzZXNdOwogICAgIFtjYUFuaW1hdGlv
biBzZXRSZW1vdmVkT25Db21wbGV0aW9uOnByb3BlcnRpZXMucmVtb3ZlZE9uQ29tcGxldGlvbl07
Ci0gICAgW2NhQW5pbWF0aW9uIHNldEFkZGl0aXZlOnByb3BlcnRpZXMuYWRkaXRpdmVdOwotICAg
IAorCisgICAgaWYgKFtjYUFuaW1hdGlvbiBpc0tpbmRPZkNsYXNzOltDQVByb3BlcnR5QW5pbWF0
aW9uIGNsYXNzXV0pIHsKKyAgICAgICAgWyhDQVByb3BlcnR5QW5pbWF0aW9uKiljYUFuaW1hdGlv
biBzZXRBZGRpdGl2ZTpwcm9wZXJ0aWVzLmFkZGl0aXZlXTsKKyAgICAgICAgaWYgKHByb3BlcnRp
ZXMudmFsdWVGdW5jdGlvbiAhPSBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpOb1ZhbHVlRnVuY3Rpb24p
CisgICAgICAgICAgICBbKENBUHJvcGVydHlBbmltYXRpb24qKWNhQW5pbWF0aW9uIHNldFZhbHVl
RnVuY3Rpb246W0NBVmFsdWVGdW5jdGlvbiBmdW5jdGlvbldpdGhOYW1lOnRvQ0FWYWx1ZUZ1bmN0
aW9uVHlwZShwcm9wZXJ0aWVzLnZhbHVlRnVuY3Rpb24pXV07CisgICAgfQorCiAgICAgaWYgKHBy
b3BlcnRpZXMuZmlsbE1vZGUgIT0gUGxhdGZvcm1DQUFuaW1hdGlvbjo6Tm9GaWxsTW9kZSkKICAg
ICAgICAgW2NhQW5pbWF0aW9uIHNldEZpbGxNb2RlOnRvQ0FGaWxsTW9kZVR5cGUocHJvcGVydGll
cy5maWxsTW9kZSldOwogCi0gICAgaWYgKHByb3BlcnRpZXMudmFsdWVGdW5jdGlvbiAhPSBQbGF0
Zm9ybUNBQW5pbWF0aW9uOjpOb1ZhbHVlRnVuY3Rpb24pCi0gICAgICAgIFtjYUFuaW1hdGlvbiBz
ZXRWYWx1ZUZ1bmN0aW9uOltDQVZhbHVlRnVuY3Rpb24gZnVuY3Rpb25XaXRoTmFtZTp0b0NBVmFs
dWVGdW5jdGlvblR5cGUocHJvcGVydGllcy52YWx1ZUZ1bmN0aW9uKV1dOwotICAgIAogICAgIGlm
IChwcm9wZXJ0aWVzLmhhc0V4cGxpY2l0QmVnaW5UaW1lKQogICAgICAgICBbY2FBbmltYXRpb24g
c2V0VmFsdWU6QFlFUyBmb3JLZXk6V0tFeHBsaWNpdEJlZ2luVGltZUZsYWddOwotICAgIAorCiAg
ICAgaWYgKGxheWVyVHJlZUhvc3QpIHsKICAgICAgICAgR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1M
YXllcklEIGxheWVySUQgPSBSZW1vdGVMYXllclRyZWVOb2RlOjpsYXllcklEKGxheWVyKTsKLSAg
ICAKKwogICAgICAgICBSZXRhaW5QdHI8V0tBbmltYXRpb25EZWxlZ2F0ZT4mIGRlbGVnYXRlID0g
bGF5ZXJUcmVlSG9zdC0+YW5pbWF0aW9uRGVsZWdhdGVzKCkuYWRkKGxheWVySUQsIG51bGxwdHIp
Lml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgICAgIGRl
bGVnYXRlID0gYWRvcHROUyhbW1dLQW5pbWF0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoTGF5
ZXJJRDpsYXllcklEIGxheWVyVHJlZUhvc3Q6bGF5ZXJUcmVlSG9zdF0pOwogCiAgICAgICAgIFtj
YUFuaW1hdGlvbiBzZXREZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CiAgICAgfQotICAgIAotICAg
IFtsYXllciBhZGRBbmltYXRpb246Y2FBbmltYXRpb24uZ2V0KCkgZm9yS2V5OmtleV07CisKKyAg
ICByZXR1cm4gY2FBbmltYXRpb247Cit9CisKK3N0YXRpYyB2b2lkIGFkZEFuaW1hdGlvblRvTGF5
ZXIoQ0FMYXllciAqbGF5ZXIsIFJlbW90ZUxheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QsIGNv
bnN0IFN0cmluZyYga2V5LCBjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpQcm9wZXJ0
aWVzJiBwcm9wZXJ0aWVzKQoreworICAgIFtsYXllciBhZGRBbmltYXRpb246Y3JlYXRlQW5pbWF0
aW9uKGxheWVyLCBsYXllclRyZWVIb3N0LCBwcm9wZXJ0aWVzKS5nZXQoKSBmb3JLZXk6a2V5XTsK
IH0KIAogdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjp1cGRhdGVMYXllckFuaW1hdGlv
bnMoQ0FMYXllciAqbGF5ZXIsIFJlbW90ZUxheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QsIGNv
bnN0IEFuaW1hdGlvbnNMaXN0JiBhbmltYXRpb25zVG9BZGQsIGNvbnN0IEhhc2hTZXQ8U3RyaW5n
PiYgYW5pbWF0aW9uc1RvUmVtb3ZlKQpAQCAtOTQzLDYgKzk4NiwyNCBAQCBUZXh0U3RyZWFtJiBv
cGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3Rl
OjpQcm9wZXJ0aQogICAgIHRzLmRlY3JlYXNlSW5kZW50KCk7CiAgICAgdHMuZGVjcmVhc2VJbmRl
bnQoKTsKIAorICAgIGlmICghYW5pbWF0aW9uLmFuaW1hdGlvbnMuaXNFbXB0eSgpKSB7CisgICAg
ICAgIHRzIDw8ICJcbiI7CisgICAgICAgIHRzLmluY3JlYXNlSW5kZW50KCk7CisgICAgICAgIHRz
LndyaXRlSW5kZW50KCk7CisgICAgICAgIHRzIDw8ICIoIiA8PCAiYW5pbWF0aW9ucyI7CisgICAg
ICAgIHRzLmluY3JlYXNlSW5kZW50KCk7CisKKyAgICAgICAgZm9yIChhdXRvJiBjaGlsZEFuaW1h
dGlvbiA6IGFuaW1hdGlvbi5hbmltYXRpb25zKSB7CisgICAgICAgICAgICB0cyA8PCAiXG4iOwor
ICAgICAgICAgICAgdHMud3JpdGVJbmRlbnQoKTsKKyAgICAgICAgICAgIHRzIDw8ICIoYW5pbWF0
aW9uICIgPDwgY2hpbGRBbmltYXRpb247CisgICAgICAgICAgICB0cyA8PCAiKSI7CisgICAgICAg
IH0KKworICAgICAgICB0cy5kZWNyZWFzZUluZGVudCgpOworICAgICAgICB0cy5kZWNyZWFzZUlu
ZGVudCgpOworICAgIH0KKwogICAgIHJldHVybiB0czsKIH0KIAo=
</data>
<flag name="commit-queue"
          id="436978"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418885</attachid>
            <date>2021-02-01 09:06:42 -0800</date>
            <delta_ts>2021-02-01 10:04:48 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221209-20210201180641.patch</filename>
            <type>text/plain</type>
            <size>26370</size>
            <attacher name="Antoine Quint">graouts</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyMTI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGExODc4NGNmNGVhZmYz
NjE2NzFlZjNhMWVhY2I5ZDRmMWYzNjBiYi4uOWVmZjEzNTI0ZjI5NmQ0NDY3Yjg0MGM0YzRjMGQy
N2VlNWJjNGRhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDIxLTAyLTAxICBBbnRv
aW5lIFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgorCisgICAgICAgIEFsbG93IHN1cHBvcnQg
Zm9yIENBQW5pbWF0aW9uR3JvdXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyMTIwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEluIG9yZGVyIHRvIGZpeCBidWcgMjE5ODk0LCB3ZSBuZWVkIHRvIHVzZSBD
b3JlIEFuaW1hdGlvbidzIENBQW5pbWF0aW9uR3JvdXAgYW5kIGl0cworICAgICAgICBzZXRBbmlt
YXRpb25zKCkgbWV0aG9kLiBUaGlzIHBhdGNoIGFkZHMgYSBuZXcgIkdyb3VwIiB0eXBlIHRvIFBs
YXRmb3JtQ0FBbmltYXRpb24gYW5kCisgICAgICAgIHBsYXRmb3JtLXNwZWNpZmljIGludGVncmF0
aW9uIGZvciBXaW5kb3dzIGFuZCBDb2NvYSBwb3J0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NhL1BsYXRmb3JtQ0FBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6b3Bl
cmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUFuaW1h
dGlvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FB
bmltYXRpb25Db2NvYS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1Bs
YXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FB
bmltYXRpb25Db2NvYTo6UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6a2V5UGF0aCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFRpbWluZ0Z1bmN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6aXNBZGRpdGl2ZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldEFkZGl0
aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6dmFsdWVG
dW5jdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29j
b2E6OnNldFZhbHVlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUFuaW1h
dGlvbkNvY29hOjpzZXRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FB
bmltYXRpb25Db2NvYTo6Y29weUFuaW1hdGlvbnNGcm9tKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5tbToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtQ0FMYXllckNvY29hOjphZGRBbmltYXRpb25Gb3JLZXkpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyQ29jb2E6OmFuaW1hdGlvbkZvcktleSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uY3BwOgor
ICAgICAgICAoUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6UGxhdGZvcm1DQUFuaW1hdGlvbldpbik6
CisgICAgICAgIChQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRBbmltYXRpb25zKToKKyAgICAg
ICAgKFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OmNvcHlBbmltYXRpb25zRnJvbSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uaDoKKwog
MjAyMS0wMS0zMSAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtM
RkNdW0lGQ10gSW5saW5lQ29udGVudEJyZWFrZXI6OnByb2Nlc3NPdmVyZmxvd2luZ1RleHRDb250
ZW50IHNob3VsZCBmaW5kIGJyZWFraW5nIHBvc2l0aW9ucyBldmVuIGFmdGVyIHRoZSBvdmVyZmxv
d2luZyBydW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKaW5kZXggZjhmNDVhM2RhZmU1YmEwZDFmNDhkOWQ2ZjY5ZDk1ZGVlMWI5
NDBjNi4uNmExYjEwODZhMTM3ZWIyYTc1YWE0MTM3MzllOTVmMjhkYTQyNjQ4ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyNSBAQAorMjAyMS0wMi0wMSAgQW50b2luZSBRdWludCAgPGdyYW91dHNAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBBbGxvdyBzdXBwb3J0IGZvciBDQUFuaW1hdGlvbkdyb3VwCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjEyMDkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbiBvcmRlciB0
byBmaXggYnVnIDIxOTg5NCwgd2UgbmVlZCB0byB1c2UgQ29yZSBBbmltYXRpb24ncyBDQUFuaW1h
dGlvbkdyb3VwIGFuZCBpdHMKKyAgICAgICAgc2V0QW5pbWF0aW9ucygpIG1ldGhvZC4gQWRkIHN1
cHBvcnQgZm9yIHRoZSBuZXcgIkdyb3VwIiBQbGF0Zm9ybUNBQW5pbWF0aW9uIHR5cGUgZm9yCisg
ICAgICAgIHRoZSByZW1vdGUgYW5pbWF0aW9ucy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5oOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlv
blJlbW90ZS5tbToKKyAgICAgICAgKFdlYktpdDo6UGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6
UHJvcGVydGllczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UGxhdGZvcm1DQUFu
aW1hdGlvblJlbW90ZTo6UHJvcGVydGllczo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6UGxh
dGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6Y29weSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlBs
YXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OnNldEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViS2l0
OjpQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpjb3B5QW5pbWF0aW9uc0Zyb20pOgorICAgICAg
ICAoV2ViS2l0OjpjcmVhdGVBbmltYXRpb24pOgorICAgICAgICAoV2ViS2l0OjphZGRBbmltYXRp
b25Ub0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3I8PCk6CisKIDIwMjEtMDEtMjkg
IERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIENoZWNrIGFjdGl2ZURv
Y3VtZW50TG9hZGVyKCkgZm9yIG51bGwgY29uc2lzdGVudGx5IGV2ZXJ5d2hlcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FBbmltYXRp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUFu
aW1hdGlvbi5jcHAKaW5kZXggZGE5YTcxYjcxMzVmZmJiODE1ODEyMGFhYTcyNzgyYWQ1YTc5ZWUz
My4uOTA1MWU3OThkZWQ2OGY5NTQ2YTNiOGE1OWIxYWNmNTNjOWQ3NDFmNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUFuaW1hdGlvbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUFu
aW1hdGlvbi5jcHAKQEAgLTM0LDYgKzM0LDcgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgUGxhdGZvcm1DQUFuaW1hdGlvbjo6QW5pbWF0aW9uVHlwZSB0eXBlKQogewog
ICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgUGxhdGZvcm1DQUFuaW1hdGlvbjo6QmFzaWM6
IHRzIDw8ICJiYXNpYyI7IGJyZWFrOworICAgIGNhc2UgUGxhdGZvcm1DQUFuaW1hdGlvbjo6R3Jv
dXA6IHRzIDw8ICJncm91cCI7IGJyZWFrOwogICAgIGNhc2UgUGxhdGZvcm1DQUFuaW1hdGlvbjo6
S2V5ZnJhbWU6IHRzIDw8ICJrZXlmcmFtZSI7IGJyZWFrOwogICAgIGNhc2UgUGxhdGZvcm1DQUFu
aW1hdGlvbjo6U3ByaW5nOiB0cyA8PCAic3ByaW5nIjsgYnJlYWs7CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUFuaW1hdGlv
bi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUFuaW1h
dGlvbi5oCmluZGV4IGZjM2VhODgxZDZjOGVhMGI1YmZjMjg1ODBmMjE3NzA0ODVhMmJjMjAuLmI1
NjgwZjk5ZjNjNDNiM2QyN2U5YjA3ZTBkOWNmMTE1ZGQxMDY5YTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FBbmltYXRpb24uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBQW5pbWF0aW9u
LmgKQEAgLTQyLDcgKzQyLDcgQEAgY2xhc3MgVGltaW5nRnVuY3Rpb247CiAKIGNsYXNzIFBsYXRm
b3JtQ0FBbmltYXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxQbGF0Zm9ybUNBQW5pbWF0aW9uPiB7
CiBwdWJsaWM6Ci0gICAgZW51bSBBbmltYXRpb25UeXBlIHsgQmFzaWMsIEtleWZyYW1lLCBTcHJp
bmcgfTsKKyAgICBlbnVtIEFuaW1hdGlvblR5cGUgeyBCYXNpYywgR3JvdXAsIEtleWZyYW1lLCBT
cHJpbmcgfTsKICAgICBlbnVtIEZpbGxNb2RlVHlwZSB7IE5vRmlsbE1vZGUsIEZvcndhcmRzLCBC
YWNrd2FyZHMsIEJvdGggfTsKICAgICBlbnVtIFZhbHVlRnVuY3Rpb25UeXBlIHsgTm9WYWx1ZUZ1
bmN0aW9uLCBSb3RhdGVYLCBSb3RhdGVZLCBSb3RhdGVaLCBTY2FsZVgsIFNjYWxlWSwgU2NhbGVa
LCBTY2FsZSwgVHJhbnNsYXRlWCwgVHJhbnNsYXRlWSwgVHJhbnNsYXRlWiwgVHJhbnNsYXRlIH07
CiAKQEAgLTExOSw2ICsxMTksMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRUaW1p
bmdGdW5jdGlvbnMoY29uc3QgVmVjdG9yPGNvbnN0IFRpbWluZ0Z1bmN0aW9uKj4mLCBib29sIHJl
dmVyc2UgPSBmYWxzZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjb3B5VGltaW5nRnVuY3Rpb25z
RnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJikgPSAwOwogCisgICAgLy8gQW5pbWF0aW9u
IGdyb3VwIHByb3BlcnRpZXMuCisgICAgdmlydHVhbCB2b2lkIHNldEFuaW1hdGlvbnMoY29uc3Qg
VmVjdG9yPFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPj4mKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGNvcHlBbmltYXRpb25zRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJikgPSAwOwor
CiAgICAgdm9pZCBzZXRBY3R1YWxTdGFydFRpbWVJZk5lZWRlZChDRlRpbWVJbnRlcnZhbCB0KQog
ICAgIHsKICAgICAgICAgaWYgKGJlZ2luVGltZSgpIDw9IDApCkBAIC0xMjYsNyArMTMwLDcgQEAg
cHVibGljOgogICAgIH0KIAogICAgIGJvb2wgaXNCYXNpY0FuaW1hdGlvbigpIGNvbnN0OwotICAg
IAorCiBwcm90ZWN0ZWQ6CiAgICAgUGxhdGZvcm1DQUFuaW1hdGlvbihBbmltYXRpb25UeXBlIHR5
cGUgPSBCYXNpYykKICAgICAgICAgOiBtX3R5cGUodHlwZSkKQEAgLTE1Niw2ICsxNjAsNyBAQCB0
ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb246
OkFuaW1hdGlvblR5cGU+IHsKICAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAogICAgICAg
ICBXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uOjpBbmltYXRpb25UeXBlLAogICAgICAgICBX
ZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uOjpBbmltYXRpb25UeXBlOjpCYXNpYywKKyAgICAg
ICAgV2ViQ29yZTo6UGxhdGZvcm1DQUFuaW1hdGlvbjo6QW5pbWF0aW9uVHlwZTo6R3JvdXAsCiAg
ICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb246OkFuaW1hdGlvblR5cGU6OktleWZy
YW1lLAogICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uOjpBbmltYXRpb25UeXBl
OjpTcHJpbmcKICAgICA+OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EuaApp
bmRleCAyOWJkZTVlOWVjMzYyMzBhNDJhZThjN2Q2ZGM3NzVmYzQ5MjQ1ZTk4Li5iNTE0YWVmNTI1
NjM3NjI2YWY5ODE1YTU1OTc3Y2JjZTZkZTVjOGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNB
QW5pbWF0aW9uQ29jb2EuaApAQCAtMzIsMTAgKzMyLDExIEBACiAKIE9CSkNfQ0xBU1MgQ0FNZWRp
YVRpbWluZ0Z1bmN0aW9uOwogT0JKQ19DTEFTUyBDQUFuaW1hdGlvbjsKK09CSkNfQ0xBU1MgQ0FB
bmltYXRpb25Hcm91cDsKIE9CSkNfQ0xBU1MgQ0FQcm9wZXJ0eUFuaW1hdGlvbjsKIE9CSkNfQ0xB
U1MgTlNTdHJpbmc7CiAKLXR5cGVkZWYgQ0FQcm9wZXJ0eUFuaW1hdGlvbiogUGxhdGZvcm1Bbmlt
YXRpb25SZWY7Cit0eXBlZGVmIENBQW5pbWF0aW9uKiBQbGF0Zm9ybUFuaW1hdGlvblJlZjsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMjMsMTEgKzEyNCwxNSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRUaW1pbmdGdW5jdGlvbnMoY29uc3QgVmVjdG9yPGNvbnN0IFRpbWluZ0Z1bmN0aW9u
Kj4mLCBib29sIHJldmVyc2UgPSBmYWxzZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBjb3B5VGltaW5n
RnVuY3Rpb25zRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJikgb3ZlcnJpZGU7CiAKKyAg
ICAvLyBBbmltYXRpb24gZ3JvdXAgcHJvcGVydGllcy4KKyAgICB2b2lkIHNldEFuaW1hdGlvbnMo
Y29uc3QgVmVjdG9yPFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPj4mKSBmaW5hbDsKKyAgICB2
b2lkIGNvcHlBbmltYXRpb25zRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJikgZmluYWw7
CisKIHByaXZhdGU6CiAgICAgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hKEFuaW1hdGlvblR5cGUs
IGNvbnN0IFN0cmluZyYga2V5UGF0aCk7CiAgICAgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hKFBs
YXRmb3JtQW5pbWF0aW9uUmVmKTsKIAotICAgIFJldGFpblB0cjxDQVByb3BlcnR5QW5pbWF0aW9u
PiBtX2FuaW1hdGlvbjsKKyAgICBSZXRhaW5QdHI8Q0FBbmltYXRpb24+IG1fYW5pbWF0aW9uOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1h
dGlvbkNvY29hLm1tCmluZGV4IGQ5ZDgxMDY3ODAwZWU3ZGU2MDcxNmY1ZjZhMzAzZDM4NWMyZTE3
ZGIuLmJmYWZiYTQ1YjcwZDFlM2RhNTQwODAyNTlhMjc0OWFjOGQ4YmE0OTkgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmlt
YXRpb25Db2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9j
b2NvYS9QbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EubW0KQEAgLTE2Nyw2ICsxNjcsOSBAQCBQbGF0
Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYShBbmltYXRpb25U
eXBlIHR5cGUsIGNvbnN0IFN0cgogICAgIGNhc2UgQmFzaWM6CiAgICAgICAgIG1fYW5pbWF0aW9u
ID0gW0NBQmFzaWNBbmltYXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6a2V5UGF0aF07CiAgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgR3JvdXA6CisgICAgICAgIG1fYW5pbWF0aW9uID0gW0NBQW5p
bWF0aW9uR3JvdXAgYW5pbWF0aW9uXTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBLZXlmcmFt
ZToKICAgICAgICAgbV9hbmltYXRpb24gPSBbQ0FLZXlmcmFtZUFuaW1hdGlvbiBhbmltYXRpb25X
aXRoS2V5UGF0aDprZXlQYXRoXTsKICAgICAgICAgYnJlYWs7CkBAIC0xODUsMTIgKzE4OCwxNCBA
QCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYShQbGF0
Zm9ybUFuaW1hdGlvblJlZiBhbmltYXRpbwogICAgICAgICAgICAgc2V0VHlwZShCYXNpYyk7CiAg
ICAgfSBlbHNlIGlmIChbc3RhdGljX2Nhc3Q8Q0FBbmltYXRpb24qPihhbmltYXRpb24pIGlzS2lu
ZE9mQ2xhc3M6W0NBS2V5ZnJhbWVBbmltYXRpb24gY2xhc3NdXSkKICAgICAgICAgc2V0VHlwZShL
ZXlmcmFtZSk7CisgICAgZWxzZSBpZiAoW3N0YXRpY19jYXN0PENBQW5pbWF0aW9uKj4oYW5pbWF0
aW9uKSBpc0tpbmRPZkNsYXNzOltDQUFuaW1hdGlvbkdyb3VwIGNsYXNzXV0pCisgICAgICAgIHNl
dFR5cGUoR3JvdXApOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBtX2FuaW1hdGlvbiA9IHN0YXRpY19j
YXN0PENBUHJvcGVydHlBbmltYXRpb24qPihhbmltYXRpb24pOworICAgIG1fYW5pbWF0aW9uID0g
c3RhdGljX2Nhc3Q8Q0FBbmltYXRpb24qPihhbmltYXRpb24pOwogfQogCiBQbGF0Zm9ybUNBQW5p
bWF0aW9uQ29jb2E6On5QbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EoKQpAQCAtMjM1LDcgKzI0MCw5
IEBAIFBsYXRmb3JtQW5pbWF0aW9uUmVmIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6cGxhdGZv
cm1BbmltYXRpb24oKSBjb25zdAogCiBTdHJpbmcgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpr
ZXlQYXRoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gW21fYW5pbWF0aW9uIGtleVBhdGhdOworICAg
IGlmIChbc3RhdGljX2Nhc3Q8Q0FBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgaXNLaW5k
T2ZDbGFzczpbQ0FQcm9wZXJ0eUFuaW1hdGlvbiBjbGFzc11dKQorICAgICAgICByZXR1cm4gW3N0
YXRpY19jYXN0PENBUHJvcGVydHlBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkga2V5UGF0
aF07CisgICAgcmV0dXJuIGVtcHR5U3RyaW5nKCk7CiB9CiAKIENGVGltZUludGVydmFsIFBsYXRm
b3JtQ0FBbmltYXRpb25Db2NvYTo6YmVnaW5UaW1lKCkgY29uc3QKQEAgLTMzMyw2ICszNDAsOCBA
QCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VGltaW5nRnVuY3Rpb24oY29uc3Qg
VGltaW5nRnVuY3Rpb24qIHZhbHVlLCBibwogICAgICAgICAgICAgc3ByaW5nQW5pbWF0aW9uLmlu
aXRpYWxWZWxvY2l0eSA9IGZ1bmN0aW9uLmluaXRpYWxWZWxvY2l0eSgpOwogICAgICAgICB9CiAg
ICAgICAgIGJyZWFrOworICAgIGNhc2UgR3JvdXA6CisgICAgICAgIGJyZWFrOwogICAgIH0KIH0K
IApAQCAtMzUzLDIyICszNjIsMjggQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNl
dFJlbW92ZWRPbkNvbXBsZXRpb24oYm9vbCB2YWx1ZSkKIAogYm9vbCBQbGF0Zm9ybUNBQW5pbWF0
aW9uQ29jb2E6OmlzQWRkaXRpdmUoKSBjb25zdAogewotICAgIHJldHVybiBbbV9hbmltYXRpb24g
aXNBZGRpdGl2ZV07CisgICAgaWYgKFtzdGF0aWNfY2FzdDxDQUFuaW1hdGlvbio+KG1fYW5pbWF0
aW9uLmdldCgpKSBpc0tpbmRPZkNsYXNzOltDQVByb3BlcnR5QW5pbWF0aW9uIGNsYXNzXV0pCisg
ICAgICAgIHJldHVybiBbc3RhdGljX2Nhc3Q8Q0FQcm9wZXJ0eUFuaW1hdGlvbio+KG1fYW5pbWF0
aW9uLmdldCgpKSBpc0FkZGl0aXZlXTsKKyAgICByZXR1cm4gZmFsc2U7CiB9CiAKIHZvaWQgUGxh
dGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRBZGRpdGl2ZShib29sIHZhbHVlKQogewotICAgIFtt
X2FuaW1hdGlvbiBzZXRBZGRpdGl2ZTp2YWx1ZV07CisgICAgaWYgKFtzdGF0aWNfY2FzdDxDQUFu
aW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBpc0tpbmRPZkNsYXNzOltDQVByb3BlcnR5QW5p
bWF0aW9uIGNsYXNzXV0pCisgICAgICAgIHJldHVybiBbc3RhdGljX2Nhc3Q8Q0FQcm9wZXJ0eUFu
aW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRBZGRpdGl2ZTp2YWx1ZV07CiB9CiAKIFBs
YXRmb3JtQ0FBbmltYXRpb246OlZhbHVlRnVuY3Rpb25UeXBlIFBsYXRmb3JtQ0FBbmltYXRpb25D
b2NvYTo6dmFsdWVGdW5jdGlvbigpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIGZyb21DQVZhbHVlRnVu
Y3Rpb25UeXBlKFtbbV9hbmltYXRpb24gdmFsdWVGdW5jdGlvbl0gbmFtZV0pOworICAgIGlmIChb
c3RhdGljX2Nhc3Q8Q0FBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgaXNLaW5kT2ZDbGFz
czpbQ0FQcm9wZXJ0eUFuaW1hdGlvbiBjbGFzc11dKQorICAgICAgICByZXR1cm4gZnJvbUNBVmFs
dWVGdW5jdGlvblR5cGUoW1tzdGF0aWNfY2FzdDxDQVByb3BlcnR5QW5pbWF0aW9uKj4obV9hbmlt
YXRpb24uZ2V0KCkpIHZhbHVlRnVuY3Rpb25dIG5hbWVdKTsKKyAgICByZXR1cm4gTm9WYWx1ZUZ1
bmN0aW9uOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VmFsdWVGdW5j
dGlvbihWYWx1ZUZ1bmN0aW9uVHlwZSB2YWx1ZSkKIHsKLSAgICBbbV9hbmltYXRpb24gc2V0VmFs
dWVGdW5jdGlvbjpbQ0FWYWx1ZUZ1bmN0aW9uIGZ1bmN0aW9uV2l0aE5hbWU6dG9DQVZhbHVlRnVu
Y3Rpb25UeXBlKHZhbHVlKV1dOworICAgIGlmIChbc3RhdGljX2Nhc3Q8Q0FBbmltYXRpb24qPiht
X2FuaW1hdGlvbi5nZXQoKSkgaXNLaW5kT2ZDbGFzczpbQ0FQcm9wZXJ0eUFuaW1hdGlvbiBjbGFz
c11dKQorICAgICAgICByZXR1cm4gW3N0YXRpY19jYXN0PENBUHJvcGVydHlBbmltYXRpb24qPiht
X2FuaW1hdGlvbi5nZXQoKSkgc2V0VmFsdWVGdW5jdGlvbjpbQ0FWYWx1ZUZ1bmN0aW9uIGZ1bmN0
aW9uV2l0aE5hbWU6dG9DQVZhbHVlRnVuY3Rpb25UeXBlKHZhbHVlKV1dOwogfQogCiB2b2lkIFBs
YXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0RnJvbVZhbHVlKGZsb2F0IHZhbHVlKQpAQCAtNTQ2
LDQgKzU2MSwxOSBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6Y29weVRpbWluZ0Z1
bmN0aW9uc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbgogICAgIFtzdGF0aWNfY2FzdDxD
QUtleWZyYW1lQW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFRpbWluZ0Z1bmN0aW9u
czpbb3RoZXIgdGltaW5nRnVuY3Rpb25zXV07CiB9CiAKK3ZvaWQgUGxhdGZvcm1DQUFuaW1hdGlv
bkNvY29hOjpzZXRBbmltYXRpb25zKGNvbnN0IFZlY3RvcjxSZWZQdHI8UGxhdGZvcm1DQUFuaW1h
dGlvbj4+JiB2YWx1ZSkKK3sKKyAgICBbc3RhdGljX2Nhc3Q8Q0FBbmltYXRpb25Hcm91cCo+KG1f
YW5pbWF0aW9uLmdldCgpKSBzZXRBbmltYXRpb25zOmNyZWF0ZU5TQXJyYXkodmFsdWUsIFsmXSAo
YXV0byYgYW5pbWF0aW9uKSAtPiBDQUFuaW1hdGlvbiAqIHsKKyAgICAgICAgaWYgKGlzPFBsYXRm
b3JtQ0FBbmltYXRpb25Db2NvYT4oYW5pbWF0aW9uLmdldCgpKSkKKyAgICAgICAgICAgIHJldHVy
biBkb3duY2FzdDxQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E+KGFuaW1hdGlvbi5nZXQoKSktPm1f
YW5pbWF0aW9uLmdldCgpOworICAgICAgICByZXR1cm4gbmlsOworICAgIH0pLmdldCgpXTsKK30K
Kwordm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OmNvcHlBbmltYXRpb25zRnJvbShjb25z
dCBQbGF0Zm9ybUNBQW5pbWF0aW9uJiB2YWx1ZSkKK3sKKyAgICBhdXRvIG90aGVyID0gc3RhdGlj
X2Nhc3Q8Q0FBbmltYXRpb25Hcm91cCo+KGRvd25jYXN0PFBsYXRmb3JtQ0FBbmltYXRpb25Db2Nv
YT4odmFsdWUpLm1fYW5pbWF0aW9uLmdldCgpKTsKKyAgICBbc3RhdGljX2Nhc3Q8Q0FBbmltYXRp
b25Hcm91cCo+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRBbmltYXRpb25zOltvdGhlciBhbmltYXRp
b25zXV07Cit9CisKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1t
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxh
eWVyQ29jb2EubW0KaW5kZXggOGVhNDUzYmMxM2E1YmU3YmNhNjUwOTYxM2M5ZDMxODY4ZjdhOWIz
Mi4uMDZjYWZmODhiOGJiY2E2NWQzZjQxZmU2MTc5NTJkN2FlZmRhMzZhNiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVy
Q29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2Ev
UGxhdGZvcm1DQUxheWVyQ29jb2EubW0KQEAgLTUxMSw3ICs1MTEsNyBAQCB2b2lkIFBsYXRmb3Jt
Q0FMYXllckNvY29hOjphZGRBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXksIFBsYXRm
b3JtQ0FBbmltYQogICAgICAgICBbd2ViQW5pbWF0aW9uRGVsZWdhdGUgc2V0T3duZXI6dGhpc107
CiAgICAgfQogICAgIAotICAgIENBUHJvcGVydHlBbmltYXRpb24qIHByb3BlcnR5QW5pbWF0aW9u
ID0gc3RhdGljX2Nhc3Q8Q0FQcm9wZXJ0eUFuaW1hdGlvbio+KGRvd25jYXN0PFBsYXRmb3JtQ0FB
bmltYXRpb25Db2NvYT4oYW5pbWF0aW9uKS5wbGF0Zm9ybUFuaW1hdGlvbigpKTsKKyAgICBDQUFu
aW1hdGlvbiogcHJvcGVydHlBbmltYXRpb24gPSBzdGF0aWNfY2FzdDxDQUFuaW1hdGlvbio+KGRv
d25jYXN0PFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYT4oYW5pbWF0aW9uKS5wbGF0Zm9ybUFuaW1h
dGlvbigpKTsKICAgICBpZiAoIVtwcm9wZXJ0eUFuaW1hdGlvbiBkZWxlZ2F0ZV0pCiAgICAgICAg
IFtwcm9wZXJ0eUFuaW1hdGlvbiBzZXREZWxlZ2F0ZTpzdGF0aWNfY2FzdDxpZD4obV9kZWxlZ2F0
ZS5nZXQoKSldOwogCkBAIC01MjksNyArNTI5LDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2Nv
YTo6cmVtb3ZlQW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5KQogCiBSZWZQdHI8UGxh
dGZvcm1DQUFuaW1hdGlvbj4gUGxhdGZvcm1DQUxheWVyQ29jb2E6OmFuaW1hdGlvbkZvcktleShj
b25zdCBTdHJpbmcmIGtleSkKIHsKLSAgICBDQVByb3BlcnR5QW5pbWF0aW9uKiBwcm9wZXJ0eUFu
aW1hdGlvbiA9IHN0YXRpY19jYXN0PENBUHJvcGVydHlBbmltYXRpb24qPihbbV9sYXllciBhbmlt
YXRpb25Gb3JLZXk6a2V5XSk7CisgICAgQ0FBbmltYXRpb24qIHByb3BlcnR5QW5pbWF0aW9uID0g
c3RhdGljX2Nhc3Q8Q0FBbmltYXRpb24qPihbbV9sYXllciBhbmltYXRpb25Gb3JLZXk6a2V5XSk7
CiAgICAgaWYgKCFwcm9wZXJ0eUFuaW1hdGlvbikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAg
ICAgcmV0dXJuIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6Y3JlYXRlKHByb3BlcnR5QW5pbWF0
aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dp
bi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcAppbmRleCAwNzQ0ZDc1MDc5
MGNlODEzZGJmOTE4NjZiODM0N2NlMzMzMDAwMzQ4Li5mNTU0YTQ2NDZkNDViZDY0YjhjM2Q3YjVj
NDI1ODlhYjliZGFhNGY1IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFw
aGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uY3BwCkBA
IC0xNTcsOCArMTU3LDEwIEBAIFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OlBsYXRmb3JtQ0FBbmlt
YXRpb25XaW4oQW5pbWF0aW9uVHlwZSB0eXBlLCBjb25zdCBTdHJpbmcmCiB7CiAgICAgaWYgKHR5
cGUgPT0gQmFzaWMpCiAgICAgICAgIG1fYW5pbWF0aW9uID0gYWRvcHRDRihDQUNGQW5pbWF0aW9u
Q3JlYXRlKGtDQUNGQmFzaWNBbmltYXRpb24pKTsKLSAgICBlbHNlCisgICAgZWxzZSBpZiAodHlw
ZSA9PSBLZXlmcmFtZSkKICAgICAgICAgbV9hbmltYXRpb24gPSBhZG9wdENGKENBQ0ZBbmltYXRp
b25DcmVhdGUoa0NBQ0ZLZXlmcmFtZUFuaW1hdGlvbikpOworICAgIGVsc2UgaWYgKHR5cGUgPT0g
R3JvdXApCisgICAgICAgIG1fYW5pbWF0aW9uID0gYWRvcHRDRihDQUNGQW5pbWF0aW9uQ3JlYXRl
KGtDQUNGQW5pbWF0aW9uR3JvdXApKTsKICAgICAKICAgICBDQUNGQW5pbWF0aW9uU2V0S2V5UGF0
aChtX2FuaW1hdGlvbi5nZXQoKSwga2V5UGF0aC5jcmVhdGVDRlN0cmluZygpLmdldCgpKTsKIH0K
QEAgLTE2OSw2ICsxNzEsOCBAQCBQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpQbGF0Zm9ybUNBQW5p
bWF0aW9uV2luKFBsYXRmb3JtQW5pbWF0aW9uUmVmIGFuaW1hdGlvbikKICAgICAgICAgc2V0VHlw
ZShCYXNpYyk7CiAgICAgZWxzZSBpZiAoQ0FDRkFuaW1hdGlvbkdldENsYXNzKGFuaW1hdGlvbikg
PT0ga0NBQ0ZLZXlmcmFtZUFuaW1hdGlvbikKICAgICAgICAgc2V0VHlwZShLZXlmcmFtZSk7Cisg
ICAgZWxzZSBpZiAoQ0FDRkFuaW1hdGlvbkdldENsYXNzKGFuaW1hdGlvbikgPT0ga0NBQ0ZBbmlt
YXRpb25Hcm91cCkKKyAgICAgICAgc2V0VHlwZShHcm91cCk7CiAgICAgZWxzZSB7CiAgICAgICAg
IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CkBAIC01NTMsNCArNTU3LDIw
IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6Y29weVRpbWluZ0Z1bmN0aW9uc0Zyb20o
Y29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYKICAgICBDQUNGQW5pbWF0aW9uU2V0VGltaW5nRnVu
Y3Rpb25zKG1fYW5pbWF0aW9uLmdldCgpLCBDQUNGQW5pbWF0aW9uR2V0VGltaW5nRnVuY3Rpb25z
KGRvd25jYXN0PFBsYXRmb3JtQ0FBbmltYXRpb25XaW4+KHZhbHVlKS5wbGF0Zm9ybUFuaW1hdGlv
bigpKSk7CiB9CiAKK3ZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0QW5pbWF0aW9ucyhj
b25zdCBWZWN0b3I8UmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+PiYgdmFsdWUpCit7CisgICAg
YXV0byBhcnJheSA9IGFkb3B0Q0YoQ0ZBcnJheUNyZWF0ZU11dGFibGUoMCwgdmFsdWUuc2l6ZSgp
LCAma0NGVHlwZUFycmF5Q2FsbEJhY2tzKSk7CisgICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiB2
YWx1ZSkgeworICAgICAgICBpZiAoaXM8UGxhdGZvcm1DQUFuaW1hdGlvbldpbj4oYW5pbWF0aW9u
LmdldCgpKSkKKyAgICAgICAgICAgIENGQXJyYXlBcHBlbmRWYWx1ZShhcnJheS5nZXQoKSwgZG93
bmNhc3Q8UGxhdGZvcm1DQUFuaW1hdGlvbldpbj4oKmFuaW1hdGlvbikubV9hbmltYXRpb24uZ2V0
KCkpOworICAgIH0KKworICAgIENBQ0ZBbmltYXRpb25TZXRBbmltYXRpb25zKG1fYW5pbWF0aW9u
LmdldCgpLCBhcnJheS5nZXQoKSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6
Y29weUFuaW1hdGlvbnNGcm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb24mIHZhbHVlKQorewor
ICAgIENBQ0ZBbmltYXRpb25TZXRBbmltYXRpb25zKG1fYW5pbWF0aW9uLmdldCgpLCBDQUNGQW5p
bWF0aW9uR2V0QW5pbWF0aW9ucyhkb3duY2FzdDxQbGF0Zm9ybUNBQW5pbWF0aW9uV2luPih2YWx1
ZSkucGxhdGZvcm1BbmltYXRpb24oKSkpOworfQorCiAjZW5kaWYgLy8gUExBVEZPUk0oV0lOKQpk
aWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRm
b3JtQ0FBbmltYXRpb25XaW4uaCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2Nh
L3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmgKaW5kZXggMDhiYjdhNDBmZDMxMDRkMDQ5OTQ0
NjI3OTMwYjA3MDYyNDU3MjJiYi4uZjdkNGM0ZDUyODc1MDNhMWJlOWUwYzU2MDA5OTIwYjYwNDdl
ZTBlNCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2lu
L1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uaAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5oCkBAIC0xMTMsNiArMTEzLDEw
IEBAIHB1YmxpYzoKICAgICB2b2lkIHNldFRpbWluZ0Z1bmN0aW9ucyhjb25zdCBWZWN0b3I8Y29u
c3QgVGltaW5nRnVuY3Rpb24qPiYsIGJvb2wgcmV2ZXJzZSA9IGZhbHNlKSBvdmVycmlkZTsKICAg
ICB2b2lkIGNvcHlUaW1pbmdGdW5jdGlvbnNGcm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb24m
KSBvdmVycmlkZTsKIAorICAgIC8vIEFuaW1hdGlvbiBncm91cCBwcm9wZXJ0aWVzLgorICAgIHZv
aWQgc2V0QW5pbWF0aW9ucyhjb25zdCBWZWN0b3I8UmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+
PiYpIGZpbmFsOworICAgIHZvaWQgY29weUFuaW1hdGlvbnNGcm9tKGNvbnN0IFBsYXRmb3JtQ0FB
bmltYXRpb24mKSBmaW5hbDsKKwogcHJpdmF0ZToKICAgICBQbGF0Zm9ybUNBQW5pbWF0aW9uV2lu
KEFuaW1hdGlvblR5cGUsIGNvbnN0IFN0cmluZyYga2V5UGF0aCk7CiAgICAgUGxhdGZvcm1DQUFu
aW1hdGlvbldpbihQbGF0Zm9ybUFuaW1hdGlvblJlZik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlv
blJlbW90ZS5oIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJU
cmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUuaAppbmRleCA1OGIzZTc5MDM0Y2NmMDdlMWVm
MjM2ZDc5ZWE2MTU1YTg2NDU1Y2M0Li5mMDMxY2RlMDk1OTRiYWIzNTIzMWMwMWJlMDI0NjIxOTdm
ODNiYjFlIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1v
dGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5oCisrKyBiL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9u
UmVtb3RlLmgKQEAgLTExOSw2ICsxMTksMTAgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VGltaW5n
RnVuY3Rpb25zKGNvbnN0IFZlY3Rvcjxjb25zdCBXZWJDb3JlOjpUaW1pbmdGdW5jdGlvbio+Jiwg
Ym9vbCByZXZlcnNlID0gZmFsc2UpIG92ZXJyaWRlOwogICAgIHZvaWQgY29weVRpbWluZ0Z1bmN0
aW9uc0Zyb20oY29uc3QgV2ViQ29yZTo6UGxhdGZvcm1DQUFuaW1hdGlvbiYpIG92ZXJyaWRlOwog
CisgICAgLy8gQW5pbWF0aW9uIGdyb3VwIHByb3BlcnRpZXMuCisgICAgdm9pZCBzZXRBbmltYXRp
b25zKGNvbnN0IFZlY3RvcjxSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4+JikgZmluYWw7Cisg
ICAgdm9pZCBjb3B5QW5pbWF0aW9uc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYpIGZp
bmFsOworCiAgICAgQW5pbWF0aW9uVHlwZSBhbmltYXRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4g
bV9wcm9wZXJ0aWVzLmFuaW1hdGlvblR5cGU7IH0KICAgICB2b2lkIHNldEhhc0V4cGxpY2l0QmVn
aW5UaW1lKGJvb2wgaGFzRXhwbGljaXRCZWdpblRpbWUpIHsgbV9wcm9wZXJ0aWVzLmhhc0V4cGxp
Y2l0QmVnaW5UaW1lID0gaGFzRXhwbGljaXRCZWdpblRpbWU7IH0KICAgICBib29sIGhhc0V4cGxp
Y2l0QmVnaW5UaW1lKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0aWVzLmhhc0V4cGxpY2l0QmVn
aW5UaW1lOyB9CkBAIC0yODksNiArMjkzLDggQEAgcHVibGljOgogICAgICAgICBWZWN0b3I8S2V5
ZnJhbWVWYWx1ZT4ga2V5VmFsdWVzOwogICAgICAgICBWZWN0b3I8ZmxvYXQ+IGtleVRpbWVzOwog
ICAgICAgICBWZWN0b3I8UmVmUHRyPFdlYkNvcmU6OlRpbWluZ0Z1bmN0aW9uPj4gdGltaW5nRnVu
Y3Rpb25zOworCisgICAgICAgIFZlY3RvcjxQcm9wZXJ0aWVzPiBhbmltYXRpb25zOwogICAgIH07
CiAKICAgICBjb25zdCBQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4gbV9w
cm9wZXJ0aWVzOyB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFn
ZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5tbSBiL1NvdXJjZS9X
ZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0
aW9uUmVtb3RlLm1tCmluZGV4IGRlN2Q3MjgwMjkyZDA1MGQ3MmQwNmFjOTRhYjkzMWNmMjNmYTRl
OGUuLjI4NGMxYmQ1NTQ2MDAzMWE5MWFkOTg4NGExNmEwY2FkNTE4NzVhMmQgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9y
bUNBQW5pbWF0aW9uUmVtb3RlLm1tCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQ
YWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tCkBAIC0yNDEs
NiArMjQxLDggQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpQcm9wZXJ0aWVzOjpl
bmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNvZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwgc3RhdGlj
X2Nhc3Q8dWludDY0X3Q+KHRpbWluZ0Z1bmN0aW9ucy5zaXplKCkpOwogICAgIGZvciAoY29uc3Qg
YXV0byYgdGltaW5nRnVuY3Rpb24gOiB0aW1pbmdGdW5jdGlvbnMpCiAgICAgICAgIGVuY29kZVRp
bWluZ0Z1bmN0aW9uKGVuY29kZXIsIHRpbWluZ0Z1bmN0aW9uLmdldCgpKTsKKworICAgIGVuY29k
ZXIgPDwgYW5pbWF0aW9uczsKIH0KIAogT3B0aW9uYWw8UGxhdGZvcm1DQUFuaW1hdGlvblJlbW90
ZTo6UHJvcGVydGllcz4gUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6UHJvcGVydGllczo6ZGVj
b2RlKElQQzo6RGVjb2RlciYgZGVjb2RlcikKQEAgLTMyMCw2ICszMjIsOSBAQCBPcHRpb25hbDxQ
bGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpQcm9wZXJ0aWVzPiBQbGF0Zm9ybUNBQW5pbWF0aW9u
UmVtb3RlOjpQcm9wZQogICAgICAgICB9CiAgICAgfQogCisgICAgaWYgKCFkZWNvZGVyLmRlY29k
ZShwcm9wZXJ0aWVzLmFuaW1hdGlvbnMpKQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0Owor
CiAgICAgcmV0dXJuIFdURk1vdmUocHJvcGVydGllcyk7CiB9CiAgICAgCkBAIC0zNTUsNyArMzYw
LDkgQEAgUmVmPFBsYXRmb3JtQ0FBbmltYXRpb24+IFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6
OmNvcHkoKSBjb25zdAogICAgICAgICBhbmltYXRpb24tPmNvcHlGcm9tVmFsdWVGcm9tKCp0aGlz
KTsKICAgICAgICAgYW5pbWF0aW9uLT5jb3B5VG9WYWx1ZUZyb20oKnRoaXMpOwogICAgIH0KLSAg
ICAKKworICAgIGFuaW1hdGlvbi0+Y29weUFuaW1hdGlvbnNGcm9tKCp0aGlzKTsKKwogICAgIHJl
dHVybiBhbmltYXRpb247CiB9CiAKQEAgLTcxMSw2ICs3MTgsMjMgQEAgdm9pZCBQbGF0Zm9ybUNB
QW5pbWF0aW9uUmVtb3RlOjpjb3B5VGltaW5nRnVuY3Rpb25zRnJvbShjb25zdCBQbGF0Zm9ybUNB
QW5pbWF0aW8KICAgICBtX3Byb3BlcnRpZXMucmV2ZXJzZVRpbWluZ0Z1bmN0aW9ucyA9IG90aGVy
Lm1fcHJvcGVydGllcy5yZXZlcnNlVGltaW5nRnVuY3Rpb25zOwogfQogCit2b2lkIFBsYXRmb3Jt
Q0FBbmltYXRpb25SZW1vdGU6OnNldEFuaW1hdGlvbnMoY29uc3QgVmVjdG9yPFJlZlB0cjxQbGF0
Zm9ybUNBQW5pbWF0aW9uPj4mIHZhbHVlcykKK3sKKyAgICBWZWN0b3I8UHJvcGVydGllcz4gYW5p
bWF0aW9uczsKKyAgICBhbmltYXRpb25zLnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodmFsdWVzLnNp
emUoKSk7CisKKyAgICBmb3IgKGF1dG8mIHZhbHVlIDogdmFsdWVzKQorICAgICAgICBhbmltYXRp
b25zLnVuY2hlY2tlZEFwcGVuZChkb3duY2FzdDxQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlPih2
YWx1ZS5nZXQoKSktPnByb3BlcnRpZXMoKSk7CisKKyAgICBtX3Byb3BlcnRpZXMuYW5pbWF0aW9u
cyA9IFdURk1vdmUoYW5pbWF0aW9ucyk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvblJl
bW90ZTo6Y29weUFuaW1hdGlvbnNGcm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb24mIHZhbHVl
KQoreworICAgIGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUmIG90aGVyID0gZG93bmNh
c3Q8UGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZT4odmFsdWUpOworICAgIG1fcHJvcGVydGllcy5h
bmltYXRpb25zID0gb3RoZXIubV9wcm9wZXJ0aWVzLmFuaW1hdGlvbnM7Cit9CisKIHN0YXRpYyBO
U09iamVjdCogYW5pbWF0aW9uVmFsdWVGcm9tS2V5ZnJhbWVWYWx1ZShjb25zdCBQbGF0Zm9ybUNB
QW5pbWF0aW9uUmVtb3RlOjpLZXlmcmFtZVZhbHVlJiBrZXlmcmFtZVZhbHVlKQogewogICAgIHN3
aXRjaCAoa2V5ZnJhbWVWYWx1ZS5rZXlmcmFtZVR5cGUoKSkgewpAQCAtNzM0LDEzICs3NTgsMTMg
QEAgc3RhdGljIE5TT2JqZWN0KiBhbmltYXRpb25WYWx1ZUZyb21LZXlmcmFtZVZhbHVlKGNvbnN0
IFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIGFkZEFu
aW1hdGlvblRvTGF5ZXIoQ0FMYXllciAqbGF5ZXIsIFJlbW90ZUxheWVyVHJlZUhvc3QqIGxheWVy
VHJlZUhvc3QsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVt
b3RlOjpQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzKQorc3RhdGljIFJldGFpblB0cjxDQUFuaW1hdGlv
bj4gY3JlYXRlQW5pbWF0aW9uKENBTGF5ZXIgKmxheWVyLCBSZW1vdGVMYXllclRyZWVIb3N0KiBs
YXllclRyZWVIb3N0LCBjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpQcm9wZXJ0aWVz
JiBwcm9wZXJ0aWVzKQogewotICAgIFJldGFpblB0cjxDQVByb3BlcnR5QW5pbWF0aW9uPiBjYUFu
aW1hdGlvbjsKKyAgICBSZXRhaW5QdHI8Q0FBbmltYXRpb24+IGNhQW5pbWF0aW9uOwogICAgIHN3
aXRjaCAocHJvcGVydGllcy5hbmltYXRpb25UeXBlKSB7CiAgICAgY2FzZSBQbGF0Zm9ybUNBQW5p
bWF0aW9uOjpCYXNpYzogewogICAgICAgICBhdXRvIGJhc2ljQW5pbWF0aW9uID0gW0NBQmFzaWNB
bmltYXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6cHJvcGVydGllcy5rZXlQYXRoXTsKLSAgICAg
ICAgCisKICAgICAgICAgaWYgKHByb3BlcnRpZXMua2V5VmFsdWVzLnNpemUoKSA+IDEpIHsKICAg
ICAgICAgICAgIFtiYXNpY0FuaW1hdGlvbiBzZXRGcm9tVmFsdWU6YW5pbWF0aW9uVmFsdWVGcm9t
S2V5ZnJhbWVWYWx1ZShwcm9wZXJ0aWVzLmtleVZhbHVlc1swXSldOwogICAgICAgICAgICAgW2Jh
c2ljQW5pbWF0aW9uIHNldFRvVmFsdWU6YW5pbWF0aW9uVmFsdWVGcm9tS2V5ZnJhbWVWYWx1ZShw
cm9wZXJ0aWVzLmtleVZhbHVlc1sxXSldOwpAQCAtNzUyLDYgKzc3NiwxOCBAQCBzdGF0aWMgdm9p
ZCBhZGRBbmltYXRpb25Ub0xheWVyKENBTGF5ZXIgKmxheWVyLCBSZW1vdGVMYXllclRyZWVIb3N0
KiBsYXllclRyZWVIbwogICAgICAgICBjYUFuaW1hdGlvbiA9IGJhc2ljQW5pbWF0aW9uOwogICAg
ICAgICBicmVhazsKICAgICB9CisgICAgY2FzZSBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpHcm91cDog
eworICAgICAgICBhdXRvIGFuaW1hdGlvbkdyb3VwID0gW0NBQW5pbWF0aW9uR3JvdXAgYW5pbWF0
aW9uXTsKKworICAgICAgICBpZiAocHJvcGVydGllcy5hbmltYXRpb25zLnNpemUoKSkgeworICAg
ICAgICAgICAgW2FuaW1hdGlvbkdyb3VwIHNldEFuaW1hdGlvbnM6Y3JlYXRlTlNBcnJheShwcm9w
ZXJ0aWVzLmFuaW1hdGlvbnMsIFsmXSAoYXV0byYgYW5pbWF0aW9uUHJvcGVydGllcykgeworICAg
ICAgICAgICAgICAgIHJldHVybiBjcmVhdGVBbmltYXRpb24obGF5ZXIsIGxheWVyVHJlZUhvc3Qs
IGFuaW1hdGlvblByb3BlcnRpZXMpLmdldCgpOworICAgICAgICAgICAgfSkuZ2V0KCldOworICAg
ICAgICB9CisKKyAgICAgICAgY2FBbmltYXRpb24gPSBhbmltYXRpb25Hcm91cDsKKyAgICAgICAg
YnJlYWs7CisgICAgfQogICAgIGNhc2UgUGxhdGZvcm1DQUFuaW1hdGlvbjo6S2V5ZnJhbWU6IHsK
ICAgICAgICAgYXV0byBrZXlmcmFtZUFuaW1hdGlvbiA9IFtDQUtleWZyYW1lQW5pbWF0aW9uIGFu
aW1hdGlvbldpdGhLZXlQYXRoOnByb3BlcnRpZXMua2V5UGF0aF07CiAKQEAgLTc3NSwxOCArODEx
LDE4IEBAIHN0YXRpYyB2b2lkIGFkZEFuaW1hdGlvblRvTGF5ZXIoQ0FMYXllciAqbGF5ZXIsIFJl
bW90ZUxheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRv
Q0FNZWRpYVRpbWluZ0Z1bmN0aW9uKGZ1bmN0aW9uLmdldCgpLCBwcm9wZXJ0aWVzLnJldmVyc2VU
aW1pbmdGdW5jdGlvbnMpOwogICAgICAgICAgICAgfSkuZ2V0KCldOwogICAgICAgICB9Ci0gICAg
ICAgIAorCiAgICAgICAgIGNhQW5pbWF0aW9uID0ga2V5ZnJhbWVBbmltYXRpb247CiAgICAgICAg
IGJyZWFrOwogICAgIH0KICAgICBjYXNlIFBsYXRmb3JtQ0FBbmltYXRpb246OlNwcmluZzogewog
ICAgICAgICBhdXRvIHNwcmluZ0FuaW1hdGlvbiA9IFtDQVNwcmluZ0FuaW1hdGlvbiBhbmltYXRp
b25XaXRoS2V5UGF0aDpwcm9wZXJ0aWVzLmtleVBhdGhdOwotICAgICAgICAKKwogICAgICAgICBp
ZiAocHJvcGVydGllcy5rZXlWYWx1ZXMuc2l6ZSgpID4gMSkgewogICAgICAgICAgICAgW3Nwcmlu
Z0FuaW1hdGlvbiBzZXRGcm9tVmFsdWU6YW5pbWF0aW9uVmFsdWVGcm9tS2V5ZnJhbWVWYWx1ZShw
cm9wZXJ0aWVzLmtleVZhbHVlc1swXSldOwogICAgICAgICAgICAgW3NwcmluZ0FuaW1hdGlvbiBz
ZXRUb1ZhbHVlOmFuaW1hdGlvblZhbHVlRnJvbUtleWZyYW1lVmFsdWUocHJvcGVydGllcy5rZXlW
YWx1ZXNbMV0pXTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAocHJvcGVydGll
cy50aW1pbmdGdW5jdGlvbnMuc2l6ZSgpKSB7CiAgICAgICAgICAgICBhdXRvJiB0aW1pbmdGdW5j
dGlvbiA9IHByb3BlcnRpZXMudGltaW5nRnVuY3Rpb25zWzBdOwogICAgICAgICAgICAgaWYgKHRp
bWluZ0Z1bmN0aW9uLT5pc1NwcmluZ1RpbWluZ0Z1bmN0aW9uKCkpIHsKQEAgLTgwMSw3ICs4Mzcs
NyBAQCBzdGF0aWMgdm9pZCBhZGRBbmltYXRpb25Ub0xheWVyKENBTGF5ZXIgKmxheWVyLCBSZW1v
dGVMYXllclRyZWVIb3N0KiBsYXllclRyZWVIbwogICAgICAgICBicmVhazsKICAgICB9CiAgICAg
fQotICAgIAorCiAgICAgW2NhQW5pbWF0aW9uIHNldEJlZ2luVGltZTpwcm9wZXJ0aWVzLmJlZ2lu
VGltZV07CiAgICAgW2NhQW5pbWF0aW9uIHNldER1cmF0aW9uOnByb3BlcnRpZXMuZHVyYXRpb25d
OwogICAgIFtjYUFuaW1hdGlvbiBzZXRUaW1lT2Zmc2V0OnByb3BlcnRpZXMudGltZU9mZnNldF07
CkBAIC04MDksMjggKzg0NSwzNSBAQCBzdGF0aWMgdm9pZCBhZGRBbmltYXRpb25Ub0xheWVyKENB
TGF5ZXIgKmxheWVyLCBSZW1vdGVMYXllclRyZWVIb3N0KiBsYXllclRyZWVIbwogICAgIFtjYUFu
aW1hdGlvbiBzZXRTcGVlZDpwcm9wZXJ0aWVzLnNwZWVkXTsKICAgICBbY2FBbmltYXRpb24gc2V0
QXV0b3JldmVyc2VzOnByb3BlcnRpZXMuYXV0b1JldmVyc2VzXTsKICAgICBbY2FBbmltYXRpb24g
c2V0UmVtb3ZlZE9uQ29tcGxldGlvbjpwcm9wZXJ0aWVzLnJlbW92ZWRPbkNvbXBsZXRpb25dOwot
ICAgIFtjYUFuaW1hdGlvbiBzZXRBZGRpdGl2ZTpwcm9wZXJ0aWVzLmFkZGl0aXZlXTsKLSAgICAK
KworICAgIGlmIChbY2FBbmltYXRpb24gaXNLaW5kT2ZDbGFzczpbQ0FQcm9wZXJ0eUFuaW1hdGlv
biBjbGFzc11dKSB7CisgICAgICAgIFsoQ0FQcm9wZXJ0eUFuaW1hdGlvbiopY2FBbmltYXRpb24g
c2V0QWRkaXRpdmU6cHJvcGVydGllcy5hZGRpdGl2ZV07CisgICAgICAgIGlmIChwcm9wZXJ0aWVz
LnZhbHVlRnVuY3Rpb24gIT0gUGxhdGZvcm1DQUFuaW1hdGlvbjo6Tm9WYWx1ZUZ1bmN0aW9uKQor
ICAgICAgICAgICAgWyhDQVByb3BlcnR5QW5pbWF0aW9uKiljYUFuaW1hdGlvbiBzZXRWYWx1ZUZ1
bmN0aW9uOltDQVZhbHVlRnVuY3Rpb24gZnVuY3Rpb25XaXRoTmFtZTp0b0NBVmFsdWVGdW5jdGlv
blR5cGUocHJvcGVydGllcy52YWx1ZUZ1bmN0aW9uKV1dOworICAgIH0KKwogICAgIGlmIChwcm9w
ZXJ0aWVzLmZpbGxNb2RlICE9IFBsYXRmb3JtQ0FBbmltYXRpb246Ok5vRmlsbE1vZGUpCiAgICAg
ICAgIFtjYUFuaW1hdGlvbiBzZXRGaWxsTW9kZTp0b0NBRmlsbE1vZGVUeXBlKHByb3BlcnRpZXMu
ZmlsbE1vZGUpXTsKIAotICAgIGlmIChwcm9wZXJ0aWVzLnZhbHVlRnVuY3Rpb24gIT0gUGxhdGZv
cm1DQUFuaW1hdGlvbjo6Tm9WYWx1ZUZ1bmN0aW9uKQotICAgICAgICBbY2FBbmltYXRpb24gc2V0
VmFsdWVGdW5jdGlvbjpbQ0FWYWx1ZUZ1bmN0aW9uIGZ1bmN0aW9uV2l0aE5hbWU6dG9DQVZhbHVl
RnVuY3Rpb25UeXBlKHByb3BlcnRpZXMudmFsdWVGdW5jdGlvbildXTsKLSAgICAKICAgICBpZiAo
cHJvcGVydGllcy5oYXNFeHBsaWNpdEJlZ2luVGltZSkKICAgICAgICAgW2NhQW5pbWF0aW9uIHNl
dFZhbHVlOkBZRVMgZm9yS2V5OldLRXhwbGljaXRCZWdpblRpbWVGbGFnXTsKLSAgICAKKwogICAg
IGlmIChsYXllclRyZWVIb3N0KSB7CiAgICAgICAgIEdyYXBoaWNzTGF5ZXI6OlBsYXRmb3JtTGF5
ZXJJRCBsYXllcklEID0gUmVtb3RlTGF5ZXJUcmVlTm9kZTo6bGF5ZXJJRChsYXllcik7Ci0gICAg
CisKICAgICAgICAgUmV0YWluUHRyPFdLQW5pbWF0aW9uRGVsZWdhdGU+JiBkZWxlZ2F0ZSA9IGxh
eWVyVHJlZUhvc3QtPmFuaW1hdGlvbkRlbGVnYXRlcygpLmFkZChsYXllcklELCBudWxscHRyKS5p
dGVyYXRvci0+dmFsdWU7CiAgICAgICAgIGlmICghZGVsZWdhdGUpCiAgICAgICAgICAgICBkZWxl
Z2F0ZSA9IGFkb3B0TlMoW1tXS0FuaW1hdGlvbkRlbGVnYXRlIGFsbG9jXSBpbml0V2l0aExheWVy
SUQ6bGF5ZXJJRCBsYXllclRyZWVIb3N0OmxheWVyVHJlZUhvc3RdKTsKIAogICAgICAgICBbY2FB
bmltYXRpb24gc2V0RGVsZWdhdGU6ZGVsZWdhdGUuZ2V0KCldOwogICAgIH0KLSAgICAKLSAgICBb
bGF5ZXIgYWRkQW5pbWF0aW9uOmNhQW5pbWF0aW9uLmdldCgpIGZvcktleTprZXldOworCisgICAg
cmV0dXJuIGNhQW5pbWF0aW9uOworfQorCitzdGF0aWMgdm9pZCBhZGRBbmltYXRpb25Ub0xheWVy
KENBTGF5ZXIgKmxheWVyLCBSZW1vdGVMYXllclRyZWVIb3N0KiBsYXllclRyZWVIb3N0LCBjb25z
dCBTdHJpbmcmIGtleSwgY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6UHJvcGVydGll
cyYgcHJvcGVydGllcykKK3sKKyAgICBbbGF5ZXIgYWRkQW5pbWF0aW9uOmNyZWF0ZUFuaW1hdGlv
bihsYXllciwgbGF5ZXJUcmVlSG9zdCwgcHJvcGVydGllcykuZ2V0KCkgZm9yS2V5OmtleV07CiB9
CiAKIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6dXBkYXRlTGF5ZXJBbmltYXRpb25z
KENBTGF5ZXIgKmxheWVyLCBSZW1vdGVMYXllclRyZWVIb3N0KiBsYXllclRyZWVIb3N0LCBjb25z
dCBBbmltYXRpb25zTGlzdCYgYW5pbWF0aW9uc1RvQWRkLCBjb25zdCBIYXNoU2V0PFN0cmluZz4m
IGFuaW1hdGlvbnNUb1JlbW92ZSkKQEAgLTk0Myw2ICs5ODYsMjQgQEAgVGV4dFN0cmVhbSYgb3Bl
cmF0b3I8PChUZXh0U3RyZWFtJiB0cywgY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6
UHJvcGVydGkKICAgICB0cy5kZWNyZWFzZUluZGVudCgpOwogICAgIHRzLmRlY3JlYXNlSW5kZW50
KCk7CiAKKyAgICBpZiAoIWFuaW1hdGlvbi5hbmltYXRpb25zLmlzRW1wdHkoKSkgeworICAgICAg
ICB0cyA8PCAiXG4iOworICAgICAgICB0cy5pbmNyZWFzZUluZGVudCgpOworICAgICAgICB0cy53
cml0ZUluZGVudCgpOworICAgICAgICB0cyA8PCAiKCIgPDwgImFuaW1hdGlvbnMiOworICAgICAg
ICB0cy5pbmNyZWFzZUluZGVudCgpOworCisgICAgICAgIGZvciAoYXV0byYgY2hpbGRBbmltYXRp
b24gOiBhbmltYXRpb24uYW5pbWF0aW9ucykgeworICAgICAgICAgICAgdHMgPDwgIlxuIjsKKyAg
ICAgICAgICAgIHRzLndyaXRlSW5kZW50KCk7CisgICAgICAgICAgICB0cyA8PCAiKGFuaW1hdGlv
biAiIDw8IGNoaWxkQW5pbWF0aW9uOworICAgICAgICAgICAgdHMgPDwgIikiOworICAgICAgICB9
CisKKyAgICAgICAgdHMuZGVjcmVhc2VJbmRlbnQoKTsKKyAgICAgICAgdHMuZGVjcmVhc2VJbmRl
bnQoKTsKKyAgICB9CisKICAgICByZXR1cm4gdHM7CiB9CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418892</attachid>
            <date>2021-02-01 10:04:51 -0800</date>
            <delta_ts>2021-02-01 12:02:03 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221209-20210201190450.patch</filename>
            <type>text/plain</type>
            <size>26423</size>
            <attacher name="Antoine Quint">graouts</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyMTI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGExODc4NGNmNGVhZmYz
NjE2NzFlZjNhMWVhY2I5ZDRmMWYzNjBiYi4uOWVmZjEzNTI0ZjI5NmQ0NDY3Yjg0MGM0YzRjMGQy
N2VlNWJjNGRhMyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDM3IEBACisyMDIxLTAyLTAxICBBbnRv
aW5lIFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgorCisgICAgICAgIEFsbG93IHN1cHBvcnQg
Zm9yIENBQW5pbWF0aW9uR3JvdXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyMTIwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEluIG9yZGVyIHRvIGZpeCBidWcgMjE5ODk0LCB3ZSBuZWVkIHRvIHVzZSBD
b3JlIEFuaW1hdGlvbidzIENBQW5pbWF0aW9uR3JvdXAgYW5kIGl0cworICAgICAgICBzZXRBbmlt
YXRpb25zKCkgbWV0aG9kLiBUaGlzIHBhdGNoIGFkZHMgYSBuZXcgIkdyb3VwIiB0eXBlIHRvIFBs
YXRmb3JtQ0FBbmltYXRpb24gYW5kCisgICAgICAgIHBsYXRmb3JtLXNwZWNpZmljIGludGVncmF0
aW9uIGZvciBXaW5kb3dzIGFuZCBDb2NvYSBwb3J0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NhL1BsYXRmb3JtQ0FBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6b3Bl
cmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUFuaW1h
dGlvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FB
bmltYXRpb25Db2NvYS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1Bs
YXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FB
bmltYXRpb25Db2NvYTo6UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6a2V5UGF0aCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFRpbWluZ0Z1bmN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6aXNBZGRpdGl2ZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldEFkZGl0
aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6dmFsdWVG
dW5jdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29j
b2E6OnNldFZhbHVlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUFuaW1h
dGlvbkNvY29hOjpzZXRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FB
bmltYXRpb25Db2NvYTo6Y29weUFuaW1hdGlvbnNGcm9tKToKKyAgICAgICAgKiBwbGF0Zm9ybS9n
cmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5tbToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtQ0FMYXllckNvY29hOjphZGRBbmltYXRpb25Gb3JLZXkpOgorICAgICAgICAo
V2ViQ29yZTo6UGxhdGZvcm1DQUxheWVyQ29jb2E6OmFuaW1hdGlvbkZvcktleSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uY3BwOgor
ICAgICAgICAoUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6UGxhdGZvcm1DQUFuaW1hdGlvbldpbik6
CisgICAgICAgIChQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRBbmltYXRpb25zKToKKyAgICAg
ICAgKFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OmNvcHlBbmltYXRpb25zRnJvbSk6CisgICAgICAg
ICogcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uaDoKKwog
MjAyMS0wMS0zMSAgWmFsYW4gQnVqdGFzICA8emFsYW5AYXBwbGUuY29tPgogCiAgICAgICAgIFtM
RkNdW0lGQ10gSW5saW5lQ29udGVudEJyZWFrZXI6OnByb2Nlc3NPdmVyZmxvd2luZ1RleHRDb250
ZW50IHNob3VsZCBmaW5kIGJyZWFraW5nIHBvc2l0aW9ucyBldmVuIGFmdGVyIHRoZSBvdmVyZmxv
d2luZyBydW4KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nIGIvU291cmNlL1dl
YktpdC9DaGFuZ2VMb2cKaW5kZXggZjhmNDVhM2RhZmU1YmEwZDFmNDhkOWQ2ZjY5ZDk1ZGVlMWI5
NDBjNi4uNmExYjEwODZhMTM3ZWIyYTc1YWE0MTM3MzllOTVmMjhkYTQyNjQ4ZiAxMDA2NDQKLS0t
IGEvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYktpdC9DaGFuZ2VMb2cK
QEAgLTEsMyArMSwyNSBAQAorMjAyMS0wMi0wMSAgQW50b2luZSBRdWludCAgPGdyYW91dHNAd2Vi
a2l0Lm9yZz4KKworICAgICAgICBBbGxvdyBzdXBwb3J0IGZvciBDQUFuaW1hdGlvbkdyb3VwCisg
ICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMjEyMDkKKwor
ICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBJbiBvcmRlciB0
byBmaXggYnVnIDIxOTg5NCwgd2UgbmVlZCB0byB1c2UgQ29yZSBBbmltYXRpb24ncyBDQUFuaW1h
dGlvbkdyb3VwIGFuZCBpdHMKKyAgICAgICAgc2V0QW5pbWF0aW9ucygpIG1ldGhvZC4gQWRkIHN1
cHBvcnQgZm9yIHRoZSBuZXcgIkdyb3VwIiBQbGF0Zm9ybUNBQW5pbWF0aW9uIHR5cGUgZm9yCisg
ICAgICAgIHRoZSByZW1vdGUgYW5pbWF0aW9ucy4KKworICAgICAgICAqIFdlYlByb2Nlc3MvV2Vi
UGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5oOgorICAgICAg
ICAqIFdlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlv
blJlbW90ZS5tbToKKyAgICAgICAgKFdlYktpdDo6UGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6
UHJvcGVydGllczo6ZW5jb2RlIGNvbnN0KToKKyAgICAgICAgKFdlYktpdDo6UGxhdGZvcm1DQUFu
aW1hdGlvblJlbW90ZTo6UHJvcGVydGllczo6ZGVjb2RlKToKKyAgICAgICAgKFdlYktpdDo6UGxh
dGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6Y29weSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlBs
YXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OnNldEFuaW1hdGlvbnMpOgorICAgICAgICAoV2ViS2l0
OjpQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpjb3B5QW5pbWF0aW9uc0Zyb20pOgorICAgICAg
ICAoV2ViS2l0OjpjcmVhdGVBbmltYXRpb24pOgorICAgICAgICAoV2ViS2l0OjphZGRBbmltYXRp
b25Ub0xheWVyKToKKyAgICAgICAgKFdlYktpdDo6b3BlcmF0b3I8PCk6CisKIDIwMjEtMDEtMjkg
IERhcmluIEFkbGVyICA8ZGFyaW5AYXBwbGUuY29tPgogCiAgICAgICAgIENoZWNrIGFjdGl2ZURv
Y3VtZW50TG9hZGVyKCkgZm9yIG51bGwgY29uc2lzdGVudGx5IGV2ZXJ5d2hlcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FBbmltYXRp
b24uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUFu
aW1hdGlvbi5jcHAKaW5kZXggZGE5YTcxYjcxMzVmZmJiODE1ODEyMGFhYTcyNzgyYWQ1YTc5ZWUz
My4uOTA1MWU3OThkZWQ2OGY5NTQ2YTNiOGE1OWIxYWNmNTNjOWQ3NDFmNCAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUFuaW1hdGlvbi5j
cHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUFu
aW1hdGlvbi5jcHAKQEAgLTM0LDYgKzM0LDcgQEAgVGV4dFN0cmVhbSYgb3BlcmF0b3I8PChUZXh0
U3RyZWFtJiB0cywgUGxhdGZvcm1DQUFuaW1hdGlvbjo6QW5pbWF0aW9uVHlwZSB0eXBlKQogewog
ICAgIHN3aXRjaCAodHlwZSkgewogICAgIGNhc2UgUGxhdGZvcm1DQUFuaW1hdGlvbjo6QmFzaWM6
IHRzIDw8ICJiYXNpYyI7IGJyZWFrOworICAgIGNhc2UgUGxhdGZvcm1DQUFuaW1hdGlvbjo6R3Jv
dXA6IHRzIDw8ICJncm91cCI7IGJyZWFrOwogICAgIGNhc2UgUGxhdGZvcm1DQUFuaW1hdGlvbjo6
S2V5ZnJhbWU6IHRzIDw8ICJrZXlmcmFtZSI7IGJyZWFrOwogICAgIGNhc2UgUGxhdGZvcm1DQUFu
aW1hdGlvbjo6U3ByaW5nOiB0cyA8PCAic3ByaW5nIjsgYnJlYWs7CiAgICAgfQpkaWZmIC0tZ2l0
IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUFuaW1hdGlv
bi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUFuaW1h
dGlvbi5oCmluZGV4IGZjM2VhODgxZDZjOGVhMGI1YmZjMjg1ODBmMjE3NzA0ODVhMmJjMjAuLmI1
NjgwZjk5ZjNjNDNiM2QyN2U5YjA3ZTBkOWNmMTE1ZGQxMDY5YTggMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FBbmltYXRpb24uaAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBQW5pbWF0aW9u
LmgKQEAgLTQyLDcgKzQyLDcgQEAgY2xhc3MgVGltaW5nRnVuY3Rpb247CiAKIGNsYXNzIFBsYXRm
b3JtQ0FBbmltYXRpb24gOiBwdWJsaWMgUmVmQ291bnRlZDxQbGF0Zm9ybUNBQW5pbWF0aW9uPiB7
CiBwdWJsaWM6Ci0gICAgZW51bSBBbmltYXRpb25UeXBlIHsgQmFzaWMsIEtleWZyYW1lLCBTcHJp
bmcgfTsKKyAgICBlbnVtIEFuaW1hdGlvblR5cGUgeyBCYXNpYywgR3JvdXAsIEtleWZyYW1lLCBT
cHJpbmcgfTsKICAgICBlbnVtIEZpbGxNb2RlVHlwZSB7IE5vRmlsbE1vZGUsIEZvcndhcmRzLCBC
YWNrd2FyZHMsIEJvdGggfTsKICAgICBlbnVtIFZhbHVlRnVuY3Rpb25UeXBlIHsgTm9WYWx1ZUZ1
bmN0aW9uLCBSb3RhdGVYLCBSb3RhdGVZLCBSb3RhdGVaLCBTY2FsZVgsIFNjYWxlWSwgU2NhbGVa
LCBTY2FsZSwgVHJhbnNsYXRlWCwgVHJhbnNsYXRlWSwgVHJhbnNsYXRlWiwgVHJhbnNsYXRlIH07
CiAKQEAgLTExOSw2ICsxMTksMTAgQEAgcHVibGljOgogICAgIHZpcnR1YWwgdm9pZCBzZXRUaW1p
bmdGdW5jdGlvbnMoY29uc3QgVmVjdG9yPGNvbnN0IFRpbWluZ0Z1bmN0aW9uKj4mLCBib29sIHJl
dmVyc2UgPSBmYWxzZSkgPSAwOwogICAgIHZpcnR1YWwgdm9pZCBjb3B5VGltaW5nRnVuY3Rpb25z
RnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJikgPSAwOwogCisgICAgLy8gQW5pbWF0aW9u
IGdyb3VwIHByb3BlcnRpZXMuCisgICAgdmlydHVhbCB2b2lkIHNldEFuaW1hdGlvbnMoY29uc3Qg
VmVjdG9yPFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPj4mKSA9IDA7CisgICAgdmlydHVhbCB2
b2lkIGNvcHlBbmltYXRpb25zRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJikgPSAwOwor
CiAgICAgdm9pZCBzZXRBY3R1YWxTdGFydFRpbWVJZk5lZWRlZChDRlRpbWVJbnRlcnZhbCB0KQog
ICAgIHsKICAgICAgICAgaWYgKGJlZ2luVGltZSgpIDw9IDApCkBAIC0xMjYsNyArMTMwLDcgQEAg
cHVibGljOgogICAgIH0KIAogICAgIGJvb2wgaXNCYXNpY0FuaW1hdGlvbigpIGNvbnN0OwotICAg
IAorCiBwcm90ZWN0ZWQ6CiAgICAgUGxhdGZvcm1DQUFuaW1hdGlvbihBbmltYXRpb25UeXBlIHR5
cGUgPSBCYXNpYykKICAgICAgICAgOiBtX3R5cGUodHlwZSkKQEAgLTE1Niw2ICsxNjAsNyBAQCB0
ZW1wbGF0ZTw+IHN0cnVjdCBFbnVtVHJhaXRzPFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb246
OkFuaW1hdGlvblR5cGU+IHsKICAgICB1c2luZyB2YWx1ZXMgPSBFbnVtVmFsdWVzPAogICAgICAg
ICBXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uOjpBbmltYXRpb25UeXBlLAogICAgICAgICBX
ZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uOjpBbmltYXRpb25UeXBlOjpCYXNpYywKKyAgICAg
ICAgV2ViQ29yZTo6UGxhdGZvcm1DQUFuaW1hdGlvbjo6QW5pbWF0aW9uVHlwZTo6R3JvdXAsCiAg
ICAgICAgIFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb246OkFuaW1hdGlvblR5cGU6OktleWZy
YW1lLAogICAgICAgICBXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uOjpBbmltYXRpb25UeXBl
OjpTcHJpbmcKICAgICA+OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLmggYi9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EuaApp
bmRleCAyOWJkZTVlOWVjMzYyMzBhNDJhZThjN2Q2ZGM3NzVmYzQ5MjQ1ZTk4Li5iNTE0YWVmNTI1
NjM3NjI2YWY5ODE1YTU1OTc3Y2JjZTZkZTVjOGFmIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EuaAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNB
QW5pbWF0aW9uQ29jb2EuaApAQCAtMzIsMTAgKzMyLDExIEBACiAKIE9CSkNfQ0xBU1MgQ0FNZWRp
YVRpbWluZ0Z1bmN0aW9uOwogT0JKQ19DTEFTUyBDQUFuaW1hdGlvbjsKK09CSkNfQ0xBU1MgQ0FB
bmltYXRpb25Hcm91cDsKIE9CSkNfQ0xBU1MgQ0FQcm9wZXJ0eUFuaW1hdGlvbjsKIE9CSkNfQ0xB
U1MgTlNTdHJpbmc7CiAKLXR5cGVkZWYgQ0FQcm9wZXJ0eUFuaW1hdGlvbiogUGxhdGZvcm1Bbmlt
YXRpb25SZWY7Cit0eXBlZGVmIENBQW5pbWF0aW9uKiBQbGF0Zm9ybUFuaW1hdGlvblJlZjsKIAog
bmFtZXNwYWNlIFdlYkNvcmUgewogCkBAIC0xMjMsMTEgKzEyNCwxNSBAQCBwdWJsaWM6CiAgICAg
dm9pZCBzZXRUaW1pbmdGdW5jdGlvbnMoY29uc3QgVmVjdG9yPGNvbnN0IFRpbWluZ0Z1bmN0aW9u
Kj4mLCBib29sIHJldmVyc2UgPSBmYWxzZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBjb3B5VGltaW5n
RnVuY3Rpb25zRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJikgb3ZlcnJpZGU7CiAKKyAg
ICAvLyBBbmltYXRpb24gZ3JvdXAgcHJvcGVydGllcy4KKyAgICB2b2lkIHNldEFuaW1hdGlvbnMo
Y29uc3QgVmVjdG9yPFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPj4mKSBmaW5hbDsKKyAgICB2
b2lkIGNvcHlBbmltYXRpb25zRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJikgZmluYWw7
CisKIHByaXZhdGU6CiAgICAgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hKEFuaW1hdGlvblR5cGUs
IGNvbnN0IFN0cmluZyYga2V5UGF0aCk7CiAgICAgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hKFBs
YXRmb3JtQW5pbWF0aW9uUmVmKTsKIAotICAgIFJldGFpblB0cjxDQVByb3BlcnR5QW5pbWF0aW9u
PiBtX2FuaW1hdGlvbjsKKyAgICBSZXRhaW5QdHI8Q0FBbmltYXRpb24+IG1fYW5pbWF0aW9uOwog
fTsKIAogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1h
dGlvbkNvY29hLm1tCmluZGV4IGQ5ZDgxMDY3ODAwZWU3ZGU2MDcxNmY1ZjZhMzAzZDM4NWMyZTE3
ZGIuLjhjMDRjZTVjODJkODhhODNmMWUwNGVmNTc2NGY1YjM4MjczMzYzNTUgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmlt
YXRpb25Db2NvYS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9j
b2NvYS9QbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EubW0KQEAgLTE2Nyw2ICsxNjcsOSBAQCBQbGF0
Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYShBbmltYXRpb25U
eXBlIHR5cGUsIGNvbnN0IFN0cgogICAgIGNhc2UgQmFzaWM6CiAgICAgICAgIG1fYW5pbWF0aW9u
ID0gW0NBQmFzaWNBbmltYXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6a2V5UGF0aF07CiAgICAg
ICAgIGJyZWFrOworICAgIGNhc2UgR3JvdXA6CisgICAgICAgIG1fYW5pbWF0aW9uID0gW0NBQW5p
bWF0aW9uR3JvdXAgYW5pbWF0aW9uXTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBLZXlmcmFt
ZToKICAgICAgICAgbV9hbmltYXRpb24gPSBbQ0FLZXlmcmFtZUFuaW1hdGlvbiBhbmltYXRpb25X
aXRoS2V5UGF0aDprZXlQYXRoXTsKICAgICAgICAgYnJlYWs7CkBAIC0xODUsMTIgKzE4OCwxNCBA
QCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYShQbGF0
Zm9ybUFuaW1hdGlvblJlZiBhbmltYXRpbwogICAgICAgICAgICAgc2V0VHlwZShCYXNpYyk7CiAg
ICAgfSBlbHNlIGlmIChbc3RhdGljX2Nhc3Q8Q0FBbmltYXRpb24qPihhbmltYXRpb24pIGlzS2lu
ZE9mQ2xhc3M6W0NBS2V5ZnJhbWVBbmltYXRpb24gY2xhc3NdXSkKICAgICAgICAgc2V0VHlwZShL
ZXlmcmFtZSk7CisgICAgZWxzZSBpZiAoW3N0YXRpY19jYXN0PENBQW5pbWF0aW9uKj4oYW5pbWF0
aW9uKSBpc0tpbmRPZkNsYXNzOltDQUFuaW1hdGlvbkdyb3VwIGNsYXNzXV0pCisgICAgICAgIHNl
dFR5cGUoR3JvdXApOwogICAgIGVsc2UgewogICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsK
ICAgICAgICAgcmV0dXJuOwogICAgIH0KICAgICAKLSAgICBtX2FuaW1hdGlvbiA9IHN0YXRpY19j
YXN0PENBUHJvcGVydHlBbmltYXRpb24qPihhbmltYXRpb24pOworICAgIG1fYW5pbWF0aW9uID0g
c3RhdGljX2Nhc3Q8Q0FBbmltYXRpb24qPihhbmltYXRpb24pOwogfQogCiBQbGF0Zm9ybUNBQW5p
bWF0aW9uQ29jb2E6On5QbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2EoKQpAQCAtMjM1LDcgKzI0MCwx
MSBAQCBQbGF0Zm9ybUFuaW1hdGlvblJlZiBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnBsYXRm
b3JtQW5pbWF0aW9uKCkgY29uc3QKIAogU3RyaW5nIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6
a2V5UGF0aCgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFttX2FuaW1hdGlvbiBrZXlQYXRoXTsKKyAg
ICBpZiAoYW5pbWF0aW9uVHlwZSgpID09IEdyb3VwKSB7CisgICAgICAgIEFTU0VSVChbc3RhdGlj
X2Nhc3Q8Q0FBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgaXNLaW5kT2ZDbGFzczpbQ0FQ
cm9wZXJ0eUFuaW1hdGlvbiBjbGFzc11dKTsKKyAgICAgICAgcmV0dXJuIFtzdGF0aWNfY2FzdDxD
QVByb3BlcnR5QW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIGtleVBhdGhdOworICAgIH0K
KyAgICByZXR1cm4gZW1wdHlTdHJpbmcoKTsKIH0KIAogQ0ZUaW1lSW50ZXJ2YWwgUGxhdGZvcm1D
QUFuaW1hdGlvbkNvY29hOjpiZWdpblRpbWUoKSBjb25zdApAQCAtMzMzLDYgKzM0Miw4IEBAIHZv
aWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRUaW1pbmdGdW5jdGlvbihjb25zdCBUaW1p
bmdGdW5jdGlvbiogdmFsdWUsIGJvCiAgICAgICAgICAgICBzcHJpbmdBbmltYXRpb24uaW5pdGlh
bFZlbG9jaXR5ID0gZnVuY3Rpb24uaW5pdGlhbFZlbG9jaXR5KCk7CiAgICAgICAgIH0KICAgICAg
ICAgYnJlYWs7CisgICAgY2FzZSBHcm91cDoKKyAgICAgICAgYnJlYWs7CiAgICAgfQogfQogCkBA
IC0zNTMsMjIgKzM2NCwyOCBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0UmVt
b3ZlZE9uQ29tcGxldGlvbihib29sIHZhbHVlKQogCiBib29sIFBsYXRmb3JtQ0FBbmltYXRpb25D
b2NvYTo6aXNBZGRpdGl2ZSgpIGNvbnN0CiB7Ci0gICAgcmV0dXJuIFttX2FuaW1hdGlvbiBpc0Fk
ZGl0aXZlXTsKKyAgICBpZiAoW3N0YXRpY19jYXN0PENBQW5pbWF0aW9uKj4obV9hbmltYXRpb24u
Z2V0KCkpIGlzS2luZE9mQ2xhc3M6W0NBUHJvcGVydHlBbmltYXRpb24gY2xhc3NdXSkKKyAgICAg
ICAgcmV0dXJuIFtzdGF0aWNfY2FzdDxDQVByb3BlcnR5QW5pbWF0aW9uKj4obV9hbmltYXRpb24u
Z2V0KCkpIGlzQWRkaXRpdmVdOworICAgIHJldHVybiBmYWxzZTsKIH0KIAogdm9pZCBQbGF0Zm9y
bUNBQW5pbWF0aW9uQ29jb2E6OnNldEFkZGl0aXZlKGJvb2wgdmFsdWUpCiB7Ci0gICAgW21fYW5p
bWF0aW9uIHNldEFkZGl0aXZlOnZhbHVlXTsKKyAgICBpZiAoW3N0YXRpY19jYXN0PENBQW5pbWF0
aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIGlzS2luZE9mQ2xhc3M6W0NBUHJvcGVydHlBbmltYXRp
b24gY2xhc3NdXSkKKyAgICAgICAgcmV0dXJuIFtzdGF0aWNfY2FzdDxDQVByb3BlcnR5QW5pbWF0
aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldEFkZGl0aXZlOnZhbHVlXTsKIH0KIAogUGxhdGZv
cm1DQUFuaW1hdGlvbjo6VmFsdWVGdW5jdGlvblR5cGUgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29h
Ojp2YWx1ZUZ1bmN0aW9uKCkgY29uc3QKIHsKLSAgICByZXR1cm4gZnJvbUNBVmFsdWVGdW5jdGlv
blR5cGUoW1ttX2FuaW1hdGlvbiB2YWx1ZUZ1bmN0aW9uXSBuYW1lXSk7CisgICAgaWYgKFtzdGF0
aWNfY2FzdDxDQUFuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBpc0tpbmRPZkNsYXNzOltD
QVByb3BlcnR5QW5pbWF0aW9uIGNsYXNzXV0pCisgICAgICAgIHJldHVybiBmcm9tQ0FWYWx1ZUZ1
bmN0aW9uVHlwZShbW3N0YXRpY19jYXN0PENBUHJvcGVydHlBbmltYXRpb24qPihtX2FuaW1hdGlv
bi5nZXQoKSkgdmFsdWVGdW5jdGlvbl0gbmFtZV0pOworICAgIHJldHVybiBOb1ZhbHVlRnVuY3Rp
b247CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRWYWx1ZUZ1bmN0aW9u
KFZhbHVlRnVuY3Rpb25UeXBlIHZhbHVlKQogewotICAgIFttX2FuaW1hdGlvbiBzZXRWYWx1ZUZ1
bmN0aW9uOltDQVZhbHVlRnVuY3Rpb24gZnVuY3Rpb25XaXRoTmFtZTp0b0NBVmFsdWVGdW5jdGlv
blR5cGUodmFsdWUpXV07CisgICAgaWYgKFtzdGF0aWNfY2FzdDxDQUFuaW1hdGlvbio+KG1fYW5p
bWF0aW9uLmdldCgpKSBpc0tpbmRPZkNsYXNzOltDQVByb3BlcnR5QW5pbWF0aW9uIGNsYXNzXV0p
CisgICAgICAgIHJldHVybiBbc3RhdGljX2Nhc3Q8Q0FQcm9wZXJ0eUFuaW1hdGlvbio+KG1fYW5p
bWF0aW9uLmdldCgpKSBzZXRWYWx1ZUZ1bmN0aW9uOltDQVZhbHVlRnVuY3Rpb24gZnVuY3Rpb25X
aXRoTmFtZTp0b0NBVmFsdWVGdW5jdGlvblR5cGUodmFsdWUpXV07CiB9CiAKIHZvaWQgUGxhdGZv
cm1DQUFuaW1hdGlvbkNvY29hOjpzZXRGcm9tVmFsdWUoZmxvYXQgdmFsdWUpCkBAIC01NDYsNCAr
NTYzLDE5IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpjb3B5VGltaW5nRnVuY3Rp
b25zRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uCiAgICAgW3N0YXRpY19jYXN0PENBS2V5
ZnJhbWVBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VGltaW5nRnVuY3Rpb25zOltv
dGhlciB0aW1pbmdGdW5jdGlvbnNdXTsKIH0KIAordm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29j
b2E6OnNldEFuaW1hdGlvbnMoY29uc3QgVmVjdG9yPFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9u
Pj4mIHZhbHVlKQoreworICAgIFtzdGF0aWNfY2FzdDxDQUFuaW1hdGlvbkdyb3VwKj4obV9hbmlt
YXRpb24uZ2V0KCkpIHNldEFuaW1hdGlvbnM6Y3JlYXRlTlNBcnJheSh2YWx1ZSwgWyZdIChhdXRv
JiBhbmltYXRpb24pIC0+IENBQW5pbWF0aW9uICogeworICAgICAgICBpZiAoaXM8UGxhdGZvcm1D
QUFuaW1hdGlvbkNvY29hPihhbmltYXRpb24uZ2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIGRv
d25jYXN0PFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYT4oYW5pbWF0aW9uLmdldCgpKS0+bV9hbmlt
YXRpb24uZ2V0KCk7CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfSkuZ2V0KCldOworfQorCit2
b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6Y29weUFuaW1hdGlvbnNGcm9tKGNvbnN0IFBs
YXRmb3JtQ0FBbmltYXRpb24mIHZhbHVlKQoreworICAgIGF1dG8gb3RoZXIgPSBzdGF0aWNfY2Fz
dDxDQUFuaW1hdGlvbkdyb3VwKj4oZG93bmNhc3Q8UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hPih2
YWx1ZSkubV9hbmltYXRpb24uZ2V0KCkpOworICAgIFtzdGF0aWNfY2FzdDxDQUFuaW1hdGlvbkdy
b3VwKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldEFuaW1hdGlvbnM6W290aGVyIGFuaW1hdGlvbnNd
XTsKK30KKwogfSAvLyBuYW1lc3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVyQ29jb2EubW0gYi9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJD
b2NvYS5tbQppbmRleCA4ZWE0NTNiYzEzYTViZTdiY2E2NTA5NjEzYzlkMzE4NjhmN2E5YjMyLi4w
NmNhZmY4OGI4YmJjYTY1ZDNmNDFmZTYxNzk1MmQ3YWVmZGEzNmE2IDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2Nv
YS5tbQorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0
Zm9ybUNBTGF5ZXJDb2NvYS5tbQpAQCAtNTExLDcgKzUxMSw3IEBAIHZvaWQgUGxhdGZvcm1DQUxh
eWVyQ29jb2E6OmFkZEFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcmIGtleSwgUGxhdGZvcm1D
QUFuaW1hCiAgICAgICAgIFt3ZWJBbmltYXRpb25EZWxlZ2F0ZSBzZXRPd25lcjp0aGlzXTsKICAg
ICB9CiAgICAgCi0gICAgQ0FQcm9wZXJ0eUFuaW1hdGlvbiogcHJvcGVydHlBbmltYXRpb24gPSBz
dGF0aWNfY2FzdDxDQVByb3BlcnR5QW5pbWF0aW9uKj4oZG93bmNhc3Q8UGxhdGZvcm1DQUFuaW1h
dGlvbkNvY29hPihhbmltYXRpb24pLnBsYXRmb3JtQW5pbWF0aW9uKCkpOworICAgIENBQW5pbWF0
aW9uKiBwcm9wZXJ0eUFuaW1hdGlvbiA9IHN0YXRpY19jYXN0PENBQW5pbWF0aW9uKj4oZG93bmNh
c3Q8UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hPihhbmltYXRpb24pLnBsYXRmb3JtQW5pbWF0aW9u
KCkpOwogICAgIGlmICghW3Byb3BlcnR5QW5pbWF0aW9uIGRlbGVnYXRlXSkKICAgICAgICAgW3By
b3BlcnR5QW5pbWF0aW9uIHNldERlbGVnYXRlOnN0YXRpY19jYXN0PGlkPihtX2RlbGVnYXRlLmdl
dCgpKV07CiAKQEAgLTUyOSw3ICs1MjksNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllckNvY29hOjpy
ZW1vdmVBbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpCiAKIFJlZlB0cjxQbGF0Zm9y
bUNBQW5pbWF0aW9uPiBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6YW5pbWF0aW9uRm9yS2V5KGNvbnN0
IFN0cmluZyYga2V5KQogewotICAgIENBUHJvcGVydHlBbmltYXRpb24qIHByb3BlcnR5QW5pbWF0
aW9uID0gc3RhdGljX2Nhc3Q8Q0FQcm9wZXJ0eUFuaW1hdGlvbio+KFttX2xheWVyIGFuaW1hdGlv
bkZvcktleTprZXldKTsKKyAgICBDQUFuaW1hdGlvbiogcHJvcGVydHlBbmltYXRpb24gPSBzdGF0
aWNfY2FzdDxDQUFuaW1hdGlvbio+KFttX2xheWVyIGFuaW1hdGlvbkZvcktleTprZXldKTsKICAg
ICBpZiAoIXByb3BlcnR5QW5pbWF0aW9uKQogICAgICAgICByZXR1cm4gbnVsbHB0cjsKICAgICBy
ZXR1cm4gUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpjcmVhdGUocHJvcGVydHlBbmltYXRpb24p
OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1Bs
YXRmb3JtQ0FBbmltYXRpb25XaW4uY3BwIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uY3BwCmluZGV4IDA3NDRkNzUwNzkwY2U4
MTNkYmY5MTg2NmI4MzQ3Y2UzMzMwMDAzNDguLmY1NTRhNDY0NmQ0NWJkNjRiOGMzZDdiNWM0MjU4
OWFiOWJkYWE0ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9w
bGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5jcHAKQEAgLTE1
Nyw4ICsxNTcsMTAgQEAgUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6UGxhdGZvcm1DQUFuaW1hdGlv
bldpbihBbmltYXRpb25UeXBlIHR5cGUsIGNvbnN0IFN0cmluZyYKIHsKICAgICBpZiAodHlwZSA9
PSBCYXNpYykKICAgICAgICAgbV9hbmltYXRpb24gPSBhZG9wdENGKENBQ0ZBbmltYXRpb25DcmVh
dGUoa0NBQ0ZCYXNpY0FuaW1hdGlvbikpOwotICAgIGVsc2UKKyAgICBlbHNlIGlmICh0eXBlID09
IEtleWZyYW1lKQogICAgICAgICBtX2FuaW1hdGlvbiA9IGFkb3B0Q0YoQ0FDRkFuaW1hdGlvbkNy
ZWF0ZShrQ0FDRktleWZyYW1lQW5pbWF0aW9uKSk7CisgICAgZWxzZSBpZiAodHlwZSA9PSBHcm91
cCkKKyAgICAgICAgbV9hbmltYXRpb24gPSBhZG9wdENGKENBQ0ZBbmltYXRpb25DcmVhdGUoa0NB
Q0ZBbmltYXRpb25Hcm91cCkpOwogICAgIAogICAgIENBQ0ZBbmltYXRpb25TZXRLZXlQYXRoKG1f
YW5pbWF0aW9uLmdldCgpLCBrZXlQYXRoLmNyZWF0ZUNGU3RyaW5nKCkuZ2V0KCkpOwogfQpAQCAt
MTY5LDYgKzE3MSw4IEBAIFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OlBsYXRmb3JtQ0FBbmltYXRp
b25XaW4oUGxhdGZvcm1BbmltYXRpb25SZWYgYW5pbWF0aW9uKQogICAgICAgICBzZXRUeXBlKEJh
c2ljKTsKICAgICBlbHNlIGlmIChDQUNGQW5pbWF0aW9uR2V0Q2xhc3MoYW5pbWF0aW9uKSA9PSBr
Q0FDRktleWZyYW1lQW5pbWF0aW9uKQogICAgICAgICBzZXRUeXBlKEtleWZyYW1lKTsKKyAgICBl
bHNlIGlmIChDQUNGQW5pbWF0aW9uR2V0Q2xhc3MoYW5pbWF0aW9uKSA9PSBrQ0FDRkFuaW1hdGlv
bkdyb3VwKQorICAgICAgICBzZXRUeXBlKEdyb3VwKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNT
RVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKQEAgLTU1Myw0ICs1NTcsMjAgQEAg
dm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpjb3B5VGltaW5nRnVuY3Rpb25zRnJvbShjb25z
dCBQbGF0Zm9ybUNBQW5pbWF0aW9uJgogICAgIENBQ0ZBbmltYXRpb25TZXRUaW1pbmdGdW5jdGlv
bnMobV9hbmltYXRpb24uZ2V0KCksIENBQ0ZBbmltYXRpb25HZXRUaW1pbmdGdW5jdGlvbnMoZG93
bmNhc3Q8UGxhdGZvcm1DQUFuaW1hdGlvbldpbj4odmFsdWUpLnBsYXRmb3JtQW5pbWF0aW9uKCkp
KTsKIH0KIAordm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpzZXRBbmltYXRpb25zKGNvbnN0
IFZlY3RvcjxSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4+JiB2YWx1ZSkKK3sKKyAgICBhdXRv
IGFycmF5ID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0YWJsZSgwLCB2YWx1ZS5zaXplKCksICZr
Q0ZUeXBlQXJyYXlDYWxsQmFja3MpKTsKKyAgICBmb3IgKGF1dG8mIGFuaW1hdGlvbiA6IHZhbHVl
KSB7CisgICAgICAgIGlmIChpczxQbGF0Zm9ybUNBQW5pbWF0aW9uV2luPihhbmltYXRpb24uZ2V0
KCkpKQorICAgICAgICAgICAgQ0ZBcnJheUFwcGVuZFZhbHVlKGFycmF5LmdldCgpLCBkb3duY2Fz
dDxQbGF0Zm9ybUNBQW5pbWF0aW9uV2luPigqYW5pbWF0aW9uKS5tX2FuaW1hdGlvbi5nZXQoKSk7
CisgICAgfQorCisgICAgQ0FDRkFuaW1hdGlvblNldEFuaW1hdGlvbnMobV9hbmltYXRpb24uZ2V0
KCksIGFycmF5LmdldCgpKTsKK30KKwordm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpjb3B5
QW5pbWF0aW9uc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYgdmFsdWUpCit7CisgICAg
Q0FDRkFuaW1hdGlvblNldEFuaW1hdGlvbnMobV9hbmltYXRpb24uZ2V0KCksIENBQ0ZBbmltYXRp
b25HZXRBbmltYXRpb25zKGRvd25jYXN0PFBsYXRmb3JtQ0FBbmltYXRpb25XaW4+KHZhbHVlKS5w
bGF0Zm9ybUFuaW1hdGlvbigpKSk7Cit9CisKICNlbmRpZiAvLyBQTEFURk9STShXSU4pCmRpZmYg
LS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1D
QUFuaW1hdGlvbldpbi5oIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2lu
L1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uaAppbmRleCAwOGJiN2E0MGZkMzEwNGQwNDk5NDQ2Mjc5
MzBiMDcwNjI0NTcyMmJiLi5mN2Q0YzRkNTI4NzUwM2ExYmU5ZTBjNTYwMDk5MjBiNjA0N2VlMGU0
IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxh
dGZvcm1DQUFuaW1hdGlvbldpbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmgKQEAgLTExMyw2ICsxMTMsMTAgQEAg
cHVibGljOgogICAgIHZvaWQgc2V0VGltaW5nRnVuY3Rpb25zKGNvbnN0IFZlY3Rvcjxjb25zdCBU
aW1pbmdGdW5jdGlvbio+JiwgYm9vbCByZXZlcnNlID0gZmFsc2UpIG92ZXJyaWRlOwogICAgIHZv
aWQgY29weVRpbWluZ0Z1bmN0aW9uc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYpIG92
ZXJyaWRlOwogCisgICAgLy8gQW5pbWF0aW9uIGdyb3VwIHByb3BlcnRpZXMuCisgICAgdm9pZCBz
ZXRBbmltYXRpb25zKGNvbnN0IFZlY3RvcjxSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4+Jikg
ZmluYWw7CisgICAgdm9pZCBjb3B5QW5pbWF0aW9uc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1h
dGlvbiYpIGZpbmFsOworCiBwcml2YXRlOgogICAgIFBsYXRmb3JtQ0FBbmltYXRpb25XaW4oQW5p
bWF0aW9uVHlwZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRoKTsKICAgICBQbGF0Zm9ybUNBQW5pbWF0
aW9uV2luKFBsYXRmb3JtQW5pbWF0aW9uUmVmKTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQv
V2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVt
b3RlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUv
UGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5oCmluZGV4IDU4YjNlNzkwMzRjY2YwN2UxZWYyMzZk
NzllYTYxNTVhODY0NTVjYzQuLmYwMzFjZGUwOTU5NGJhYjM1MjMxYzAxYmUwMjQ2MjE5N2Y4M2Ji
MWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxh
eWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLmgKKysrIGIvU291cmNlL1dlYktpdC9X
ZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1v
dGUuaApAQCAtMTE5LDYgKzExOSwxMCBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRUaW1pbmdGdW5j
dGlvbnMoY29uc3QgVmVjdG9yPGNvbnN0IFdlYkNvcmU6OlRpbWluZ0Z1bmN0aW9uKj4mLCBib29s
IHJldmVyc2UgPSBmYWxzZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBjb3B5VGltaW5nRnVuY3Rpb25z
RnJvbShjb25zdCBXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uJikgb3ZlcnJpZGU7CiAKKyAg
ICAvLyBBbmltYXRpb24gZ3JvdXAgcHJvcGVydGllcy4KKyAgICB2b2lkIHNldEFuaW1hdGlvbnMo
Y29uc3QgVmVjdG9yPFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPj4mKSBmaW5hbDsKKyAgICB2
b2lkIGNvcHlBbmltYXRpb25zRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJikgZmluYWw7
CisKICAgICBBbmltYXRpb25UeXBlIGFuaW1hdGlvblR5cGUoKSBjb25zdCB7IHJldHVybiBtX3By
b3BlcnRpZXMuYW5pbWF0aW9uVHlwZTsgfQogICAgIHZvaWQgc2V0SGFzRXhwbGljaXRCZWdpblRp
bWUoYm9vbCBoYXNFeHBsaWNpdEJlZ2luVGltZSkgeyBtX3Byb3BlcnRpZXMuaGFzRXhwbGljaXRC
ZWdpblRpbWUgPSBoYXNFeHBsaWNpdEJlZ2luVGltZTsgfQogICAgIGJvb2wgaGFzRXhwbGljaXRC
ZWdpblRpbWUoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnRpZXMuaGFzRXhwbGljaXRCZWdpblRp
bWU7IH0KQEAgLTI4OSw2ICsyOTMsOCBAQCBwdWJsaWM6CiAgICAgICAgIFZlY3RvcjxLZXlmcmFt
ZVZhbHVlPiBrZXlWYWx1ZXM7CiAgICAgICAgIFZlY3RvcjxmbG9hdD4ga2V5VGltZXM7CiAgICAg
ICAgIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6VGltaW5nRnVuY3Rpb24+PiB0aW1pbmdGdW5jdGlv
bnM7CisKKyAgICAgICAgVmVjdG9yPFByb3BlcnRpZXM+IGFuaW1hdGlvbnM7CiAgICAgfTsKIAog
ICAgIGNvbnN0IFByb3BlcnRpZXMmIHByb3BlcnRpZXMoKSBjb25zdCB7IHJldHVybiBtX3Byb3Bl
cnRpZXM7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1Jl
bW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25S
ZW1vdGUubW0KaW5kZXggZGU3ZDcyODAyOTJkMDUwZDcyZDA2YWM5NGFiOTMxY2YyM2ZhNGU4ZS4u
Mjg0YzFiZDU1NDYwMDMxYTkxYWQ5ODg0YTE2YTBjYWQ1MTg3NWEyZCAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FB
bmltYXRpb25SZW1vdGUubW0KKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2Uv
UmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW0KQEAgLTI0MSw2ICsy
NDEsOCBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OlByb3BlcnRpZXM6OmVuY29k
ZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAgICAgZW5jb2RlciA8PCBzdGF0aWNfY2Fz
dDx1aW50NjRfdD4odGltaW5nRnVuY3Rpb25zLnNpemUoKSk7CiAgICAgZm9yIChjb25zdCBhdXRv
JiB0aW1pbmdGdW5jdGlvbiA6IHRpbWluZ0Z1bmN0aW9ucykKICAgICAgICAgZW5jb2RlVGltaW5n
RnVuY3Rpb24oZW5jb2RlciwgdGltaW5nRnVuY3Rpb24uZ2V0KCkpOworCisgICAgZW5jb2RlciA8
PCBhbmltYXRpb25zOwogfQogCiBPcHRpb25hbDxQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpQ
cm9wZXJ0aWVzPiBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpQcm9wZXJ0aWVzOjpkZWNvZGUo
SVBDOjpEZWNvZGVyJiBkZWNvZGVyKQpAQCAtMzIwLDYgKzMyMiw5IEBAIE9wdGlvbmFsPFBsYXRm
b3JtQ0FBbmltYXRpb25SZW1vdGU6OlByb3BlcnRpZXM+IFBsYXRmb3JtQ0FBbmltYXRpb25SZW1v
dGU6OlByb3BlCiAgICAgICAgIH0KICAgICB9CiAKKyAgICBpZiAoIWRlY29kZXIuZGVjb2RlKHBy
b3BlcnRpZXMuYW5pbWF0aW9ucykpCisgICAgICAgIHJldHVybiBXVEY6Om51bGxvcHQ7CisKICAg
ICByZXR1cm4gV1RGTW92ZShwcm9wZXJ0aWVzKTsKIH0KICAgICAKQEAgLTM1NSw3ICszNjAsOSBA
QCBSZWY8UGxhdGZvcm1DQUFuaW1hdGlvbj4gUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6Y29w
eSgpIGNvbnN0CiAgICAgICAgIGFuaW1hdGlvbi0+Y29weUZyb21WYWx1ZUZyb20oKnRoaXMpOwog
ICAgICAgICBhbmltYXRpb24tPmNvcHlUb1ZhbHVlRnJvbSgqdGhpcyk7CiAgICAgfQotICAgIAor
CisgICAgYW5pbWF0aW9uLT5jb3B5QW5pbWF0aW9uc0Zyb20oKnRoaXMpOworCiAgICAgcmV0dXJu
IGFuaW1hdGlvbjsKIH0KIApAQCAtNzExLDYgKzcxOCwyMyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmlt
YXRpb25SZW1vdGU6OmNvcHlUaW1pbmdGdW5jdGlvbnNGcm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmlt
YXRpbwogICAgIG1fcHJvcGVydGllcy5yZXZlcnNlVGltaW5nRnVuY3Rpb25zID0gb3RoZXIubV9w
cm9wZXJ0aWVzLnJldmVyc2VUaW1pbmdGdW5jdGlvbnM7CiB9CiAKK3ZvaWQgUGxhdGZvcm1DQUFu
aW1hdGlvblJlbW90ZTo6c2V0QW5pbWF0aW9ucyhjb25zdCBWZWN0b3I8UmVmUHRyPFBsYXRmb3Jt
Q0FBbmltYXRpb24+PiYgdmFsdWVzKQoreworICAgIFZlY3RvcjxQcm9wZXJ0aWVzPiBhbmltYXRp
b25zOworICAgIGFuaW1hdGlvbnMucmVzZXJ2ZUluaXRpYWxDYXBhY2l0eSh2YWx1ZXMuc2l6ZSgp
KTsKKworICAgIGZvciAoYXV0byYgdmFsdWUgOiB2YWx1ZXMpCisgICAgICAgIGFuaW1hdGlvbnMu
dW5jaGVja2VkQXBwZW5kKGRvd25jYXN0PFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU+KHZhbHVl
LmdldCgpKS0+cHJvcGVydGllcygpKTsKKworICAgIG1fcHJvcGVydGllcy5hbmltYXRpb25zID0g
V1RGTW92ZShhbmltYXRpb25zKTsKK30KKwordm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3Rl
Ojpjb3B5QW5pbWF0aW9uc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYgdmFsdWUpCit7
CisgICAgY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZSYgb3RoZXIgPSBkb3duY2FzdDxQ
bGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlPih2YWx1ZSk7CisgICAgbV9wcm9wZXJ0aWVzLmFuaW1h
dGlvbnMgPSBvdGhlci5tX3Byb3BlcnRpZXMuYW5pbWF0aW9uczsKK30KKwogc3RhdGljIE5TT2Jq
ZWN0KiBhbmltYXRpb25WYWx1ZUZyb21LZXlmcmFtZVZhbHVlKGNvbnN0IFBsYXRmb3JtQ0FBbmlt
YXRpb25SZW1vdGU6OktleWZyYW1lVmFsdWUmIGtleWZyYW1lVmFsdWUpCiB7CiAgICAgc3dpdGNo
IChrZXlmcmFtZVZhbHVlLmtleWZyYW1lVHlwZSgpKSB7CkBAIC03MzQsMTMgKzc1OCwxMyBAQCBz
dGF0aWMgTlNPYmplY3QqIGFuaW1hdGlvblZhbHVlRnJvbUtleWZyYW1lVmFsdWUoY29uc3QgUGxh
dGZvcm1DQUFuaW1hdGlvblJlbW90ZQogICAgIH0KIH0KIAotc3RhdGljIHZvaWQgYWRkQW5pbWF0
aW9uVG9MYXllcihDQUxheWVyICpsYXllciwgUmVtb3RlTGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVl
SG9zdCwgY29uc3QgU3RyaW5nJiBrZXksIGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6
OlByb3BlcnRpZXMmIHByb3BlcnRpZXMpCitzdGF0aWMgUmV0YWluUHRyPENBQW5pbWF0aW9uPiBj
cmVhdGVBbmltYXRpb24oQ0FMYXllciAqbGF5ZXIsIFJlbW90ZUxheWVyVHJlZUhvc3QqIGxheWVy
VHJlZUhvc3QsIGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OlByb3BlcnRpZXMmIHBy
b3BlcnRpZXMpCiB7Ci0gICAgUmV0YWluUHRyPENBUHJvcGVydHlBbmltYXRpb24+IGNhQW5pbWF0
aW9uOworICAgIFJldGFpblB0cjxDQUFuaW1hdGlvbj4gY2FBbmltYXRpb247CiAgICAgc3dpdGNo
IChwcm9wZXJ0aWVzLmFuaW1hdGlvblR5cGUpIHsKICAgICBjYXNlIFBsYXRmb3JtQ0FBbmltYXRp
b246OkJhc2ljOiB7CiAgICAgICAgIGF1dG8gYmFzaWNBbmltYXRpb24gPSBbQ0FCYXNpY0FuaW1h
dGlvbiBhbmltYXRpb25XaXRoS2V5UGF0aDpwcm9wZXJ0aWVzLmtleVBhdGhdOwotICAgICAgICAK
KwogICAgICAgICBpZiAocHJvcGVydGllcy5rZXlWYWx1ZXMuc2l6ZSgpID4gMSkgewogICAgICAg
ICAgICAgW2Jhc2ljQW5pbWF0aW9uIHNldEZyb21WYWx1ZTphbmltYXRpb25WYWx1ZUZyb21LZXlm
cmFtZVZhbHVlKHByb3BlcnRpZXMua2V5VmFsdWVzWzBdKV07CiAgICAgICAgICAgICBbYmFzaWNB
bmltYXRpb24gc2V0VG9WYWx1ZTphbmltYXRpb25WYWx1ZUZyb21LZXlmcmFtZVZhbHVlKHByb3Bl
cnRpZXMua2V5VmFsdWVzWzFdKV07CkBAIC03NTIsNiArNzc2LDE4IEBAIHN0YXRpYyB2b2lkIGFk
ZEFuaW1hdGlvblRvTGF5ZXIoQ0FMYXllciAqbGF5ZXIsIFJlbW90ZUxheWVyVHJlZUhvc3QqIGxh
eWVyVHJlZUhvCiAgICAgICAgIGNhQW5pbWF0aW9uID0gYmFzaWNBbmltYXRpb247CiAgICAgICAg
IGJyZWFrOwogICAgIH0KKyAgICBjYXNlIFBsYXRmb3JtQ0FBbmltYXRpb246Okdyb3VwOiB7Cisg
ICAgICAgIGF1dG8gYW5pbWF0aW9uR3JvdXAgPSBbQ0FBbmltYXRpb25Hcm91cCBhbmltYXRpb25d
OworCisgICAgICAgIGlmIChwcm9wZXJ0aWVzLmFuaW1hdGlvbnMuc2l6ZSgpKSB7CisgICAgICAg
ICAgICBbYW5pbWF0aW9uR3JvdXAgc2V0QW5pbWF0aW9uczpjcmVhdGVOU0FycmF5KHByb3BlcnRp
ZXMuYW5pbWF0aW9ucywgWyZdIChhdXRvJiBhbmltYXRpb25Qcm9wZXJ0aWVzKSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGNyZWF0ZUFuaW1hdGlvbihsYXllciwgbGF5ZXJUcmVlSG9zdCwgYW5p
bWF0aW9uUHJvcGVydGllcykuZ2V0KCk7CisgICAgICAgICAgICB9KS5nZXQoKV07CisgICAgICAg
IH0KKworICAgICAgICBjYUFuaW1hdGlvbiA9IGFuaW1hdGlvbkdyb3VwOworICAgICAgICBicmVh
azsKKyAgICB9CiAgICAgY2FzZSBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpLZXlmcmFtZTogewogICAg
ICAgICBhdXRvIGtleWZyYW1lQW5pbWF0aW9uID0gW0NBS2V5ZnJhbWVBbmltYXRpb24gYW5pbWF0
aW9uV2l0aEtleVBhdGg6cHJvcGVydGllcy5rZXlQYXRoXTsKIApAQCAtNzc1LDE4ICs4MTEsMTgg
QEAgc3RhdGljIHZvaWQgYWRkQW5pbWF0aW9uVG9MYXllcihDQUxheWVyICpsYXllciwgUmVtb3Rl
TGF5ZXJUcmVlSG9zdCogbGF5ZXJUcmVlSG8KICAgICAgICAgICAgICAgICByZXR1cm4gdG9DQU1l
ZGlhVGltaW5nRnVuY3Rpb24oZnVuY3Rpb24uZ2V0KCksIHByb3BlcnRpZXMucmV2ZXJzZVRpbWlu
Z0Z1bmN0aW9ucyk7CiAgICAgICAgICAgICB9KS5nZXQoKV07CiAgICAgICAgIH0KLSAgICAgICAg
CisKICAgICAgICAgY2FBbmltYXRpb24gPSBrZXlmcmFtZUFuaW1hdGlvbjsKICAgICAgICAgYnJl
YWs7CiAgICAgfQogICAgIGNhc2UgUGxhdGZvcm1DQUFuaW1hdGlvbjo6U3ByaW5nOiB7CiAgICAg
ICAgIGF1dG8gc3ByaW5nQW5pbWF0aW9uID0gW0NBU3ByaW5nQW5pbWF0aW9uIGFuaW1hdGlvbldp
dGhLZXlQYXRoOnByb3BlcnRpZXMua2V5UGF0aF07Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChw
cm9wZXJ0aWVzLmtleVZhbHVlcy5zaXplKCkgPiAxKSB7CiAgICAgICAgICAgICBbc3ByaW5nQW5p
bWF0aW9uIHNldEZyb21WYWx1ZTphbmltYXRpb25WYWx1ZUZyb21LZXlmcmFtZVZhbHVlKHByb3Bl
cnRpZXMua2V5VmFsdWVzWzBdKV07CiAgICAgICAgICAgICBbc3ByaW5nQW5pbWF0aW9uIHNldFRv
VmFsdWU6YW5pbWF0aW9uVmFsdWVGcm9tS2V5ZnJhbWVWYWx1ZShwcm9wZXJ0aWVzLmtleVZhbHVl
c1sxXSldOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGlmIChwcm9wZXJ0aWVzLnRp
bWluZ0Z1bmN0aW9ucy5zaXplKCkpIHsKICAgICAgICAgICAgIGF1dG8mIHRpbWluZ0Z1bmN0aW9u
ID0gcHJvcGVydGllcy50aW1pbmdGdW5jdGlvbnNbMF07CiAgICAgICAgICAgICBpZiAodGltaW5n
RnVuY3Rpb24tPmlzU3ByaW5nVGltaW5nRnVuY3Rpb24oKSkgewpAQCAtODAxLDcgKzgzNyw3IEBA
IHN0YXRpYyB2b2lkIGFkZEFuaW1hdGlvblRvTGF5ZXIoQ0FMYXllciAqbGF5ZXIsIFJlbW90ZUxh
eWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICB9Ci0g
ICAgCisKICAgICBbY2FBbmltYXRpb24gc2V0QmVnaW5UaW1lOnByb3BlcnRpZXMuYmVnaW5UaW1l
XTsKICAgICBbY2FBbmltYXRpb24gc2V0RHVyYXRpb246cHJvcGVydGllcy5kdXJhdGlvbl07CiAg
ICAgW2NhQW5pbWF0aW9uIHNldFRpbWVPZmZzZXQ6cHJvcGVydGllcy50aW1lT2Zmc2V0XTsKQEAg
LTgwOSwyOCArODQ1LDM1IEBAIHN0YXRpYyB2b2lkIGFkZEFuaW1hdGlvblRvTGF5ZXIoQ0FMYXll
ciAqbGF5ZXIsIFJlbW90ZUxheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvCiAgICAgW2NhQW5pbWF0
aW9uIHNldFNwZWVkOnByb3BlcnRpZXMuc3BlZWRdOwogICAgIFtjYUFuaW1hdGlvbiBzZXRBdXRv
cmV2ZXJzZXM6cHJvcGVydGllcy5hdXRvUmV2ZXJzZXNdOwogICAgIFtjYUFuaW1hdGlvbiBzZXRS
ZW1vdmVkT25Db21wbGV0aW9uOnByb3BlcnRpZXMucmVtb3ZlZE9uQ29tcGxldGlvbl07Ci0gICAg
W2NhQW5pbWF0aW9uIHNldEFkZGl0aXZlOnByb3BlcnRpZXMuYWRkaXRpdmVdOwotICAgIAorCisg
ICAgaWYgKFtjYUFuaW1hdGlvbiBpc0tpbmRPZkNsYXNzOltDQVByb3BlcnR5QW5pbWF0aW9uIGNs
YXNzXV0pIHsKKyAgICAgICAgWyhDQVByb3BlcnR5QW5pbWF0aW9uKiljYUFuaW1hdGlvbiBzZXRB
ZGRpdGl2ZTpwcm9wZXJ0aWVzLmFkZGl0aXZlXTsKKyAgICAgICAgaWYgKHByb3BlcnRpZXMudmFs
dWVGdW5jdGlvbiAhPSBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpOb1ZhbHVlRnVuY3Rpb24pCisgICAg
ICAgICAgICBbKENBUHJvcGVydHlBbmltYXRpb24qKWNhQW5pbWF0aW9uIHNldFZhbHVlRnVuY3Rp
b246W0NBVmFsdWVGdW5jdGlvbiBmdW5jdGlvbldpdGhOYW1lOnRvQ0FWYWx1ZUZ1bmN0aW9uVHlw
ZShwcm9wZXJ0aWVzLnZhbHVlRnVuY3Rpb24pXV07CisgICAgfQorCiAgICAgaWYgKHByb3BlcnRp
ZXMuZmlsbE1vZGUgIT0gUGxhdGZvcm1DQUFuaW1hdGlvbjo6Tm9GaWxsTW9kZSkKICAgICAgICAg
W2NhQW5pbWF0aW9uIHNldEZpbGxNb2RlOnRvQ0FGaWxsTW9kZVR5cGUocHJvcGVydGllcy5maWxs
TW9kZSldOwogCi0gICAgaWYgKHByb3BlcnRpZXMudmFsdWVGdW5jdGlvbiAhPSBQbGF0Zm9ybUNB
QW5pbWF0aW9uOjpOb1ZhbHVlRnVuY3Rpb24pCi0gICAgICAgIFtjYUFuaW1hdGlvbiBzZXRWYWx1
ZUZ1bmN0aW9uOltDQVZhbHVlRnVuY3Rpb24gZnVuY3Rpb25XaXRoTmFtZTp0b0NBVmFsdWVGdW5j
dGlvblR5cGUocHJvcGVydGllcy52YWx1ZUZ1bmN0aW9uKV1dOwotICAgIAogICAgIGlmIChwcm9w
ZXJ0aWVzLmhhc0V4cGxpY2l0QmVnaW5UaW1lKQogICAgICAgICBbY2FBbmltYXRpb24gc2V0VmFs
dWU6QFlFUyBmb3JLZXk6V0tFeHBsaWNpdEJlZ2luVGltZUZsYWddOwotICAgIAorCiAgICAgaWYg
KGxheWVyVHJlZUhvc3QpIHsKICAgICAgICAgR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklE
IGxheWVySUQgPSBSZW1vdGVMYXllclRyZWVOb2RlOjpsYXllcklEKGxheWVyKTsKLSAgICAKKwog
ICAgICAgICBSZXRhaW5QdHI8V0tBbmltYXRpb25EZWxlZ2F0ZT4mIGRlbGVnYXRlID0gbGF5ZXJU
cmVlSG9zdC0+YW5pbWF0aW9uRGVsZWdhdGVzKCkuYWRkKGxheWVySUQsIG51bGxwdHIpLml0ZXJh
dG9yLT52YWx1ZTsKICAgICAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgICAgIGRlbGVnYXRl
ID0gYWRvcHROUyhbW1dLQW5pbWF0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoTGF5ZXJJRDps
YXllcklEIGxheWVyVHJlZUhvc3Q6bGF5ZXJUcmVlSG9zdF0pOwogCiAgICAgICAgIFtjYUFuaW1h
dGlvbiBzZXREZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CiAgICAgfQotICAgIAotICAgIFtsYXll
ciBhZGRBbmltYXRpb246Y2FBbmltYXRpb24uZ2V0KCkgZm9yS2V5OmtleV07CisKKyAgICByZXR1
cm4gY2FBbmltYXRpb247Cit9CisKK3N0YXRpYyB2b2lkIGFkZEFuaW1hdGlvblRvTGF5ZXIoQ0FM
YXllciAqbGF5ZXIsIFJlbW90ZUxheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QsIGNvbnN0IFN0
cmluZyYga2V5LCBjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpQcm9wZXJ0aWVzJiBw
cm9wZXJ0aWVzKQoreworICAgIFtsYXllciBhZGRBbmltYXRpb246Y3JlYXRlQW5pbWF0aW9uKGxh
eWVyLCBsYXllclRyZWVIb3N0LCBwcm9wZXJ0aWVzKS5nZXQoKSBmb3JLZXk6a2V5XTsKIH0KIAog
dm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjp1cGRhdGVMYXllckFuaW1hdGlvbnMoQ0FM
YXllciAqbGF5ZXIsIFJlbW90ZUxheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QsIGNvbnN0IEFu
aW1hdGlvbnNMaXN0JiBhbmltYXRpb25zVG9BZGQsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYW5p
bWF0aW9uc1RvUmVtb3ZlKQpAQCAtOTQzLDYgKzk4NiwyNCBAQCBUZXh0U3RyZWFtJiBvcGVyYXRv
cjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpQcm9w
ZXJ0aQogICAgIHRzLmRlY3JlYXNlSW5kZW50KCk7CiAgICAgdHMuZGVjcmVhc2VJbmRlbnQoKTsK
IAorICAgIGlmICghYW5pbWF0aW9uLmFuaW1hdGlvbnMuaXNFbXB0eSgpKSB7CisgICAgICAgIHRz
IDw8ICJcbiI7CisgICAgICAgIHRzLmluY3JlYXNlSW5kZW50KCk7CisgICAgICAgIHRzLndyaXRl
SW5kZW50KCk7CisgICAgICAgIHRzIDw8ICIoIiA8PCAiYW5pbWF0aW9ucyI7CisgICAgICAgIHRz
LmluY3JlYXNlSW5kZW50KCk7CisKKyAgICAgICAgZm9yIChhdXRvJiBjaGlsZEFuaW1hdGlvbiA6
IGFuaW1hdGlvbi5hbmltYXRpb25zKSB7CisgICAgICAgICAgICB0cyA8PCAiXG4iOworICAgICAg
ICAgICAgdHMud3JpdGVJbmRlbnQoKTsKKyAgICAgICAgICAgIHRzIDw8ICIoYW5pbWF0aW9uICIg
PDwgY2hpbGRBbmltYXRpb247CisgICAgICAgICAgICB0cyA8PCAiKSI7CisgICAgICAgIH0KKwor
ICAgICAgICB0cy5kZWNyZWFzZUluZGVudCgpOworICAgICAgICB0cy5kZWNyZWFzZUluZGVudCgp
OworICAgIH0KKwogICAgIHJldHVybiB0czsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418908</attachid>
            <date>2021-02-01 12:02:06 -0800</date>
            <delta_ts>2021-02-01 12:51:05 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221209-20210201210205.patch</filename>
            <type>text/plain</type>
            <size>37691</size>
            <attacher name="Antoine Quint">graouts</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyMTI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGExODc4NGNmNGVhZmYz
NjE2NzFlZjNhMWVhY2I5ZDRmMWYzNjBiYi4uMzc3ZjVjMjI0NzZiODk2M2Q4OTFmZWE1ZjY4OGE3
N2ExNjFiZDM5OSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDIxLTAyLTAxICBBbnRv
aW5lIFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgorCisgICAgICAgIEFsbG93IHN1cHBvcnQg
Zm9yIENBQW5pbWF0aW9uR3JvdXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyMTIwOQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEp
LgorCisgICAgICAgIEluIG9yZGVyIHRvIGZpeCBidWcgMjE5ODk0LCB3ZSBuZWVkIHRvIHVzZSBD
b3JlIEFuaW1hdGlvbidzIENBQW5pbWF0aW9uR3JvdXAgYW5kIGl0cworICAgICAgICBzZXRBbmlt
YXRpb25zKCkgbWV0aG9kLiBUaGlzIHBhdGNoIGFkZHMgYSBuZXcgIkdyb3VwIiB0eXBlIHRvIFBs
YXRmb3JtQ0FBbmltYXRpb24gYW5kCisgICAgICAgIHBsYXRmb3JtLXNwZWNpZmljIGludGVncmF0
aW9uIGZvciBXaW5kb3dzIGFuZCBDb2NvYSBwb3J0cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NhL1BsYXRmb3JtQ0FBbmltYXRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6b3Bl
cmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUFuaW1h
dGlvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FB
bmltYXRpb25Db2NvYS5oOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1Bs
YXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FB
bmltYXRpb25Db2NvYTo6UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hKToKKyAgICAgICAgKFdlYkNv
cmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6a2V5UGF0aCBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFRpbWluZ0Z1bmN0aW9uKToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6aXNBZGRpdGl2ZSBjb25z
dCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldEFkZGl0
aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6dmFsdWVG
dW5jdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29j
b2E6OnNldFZhbHVlRnVuY3Rpb24pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUFuaW1h
dGlvbkNvY29hOjpzZXRGcm9tVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUFu
aW1hdGlvbkNvY29hOjpjb3B5RnJvbVZhbHVlRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFRvVmFsdWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxh
dGZvcm1DQUFuaW1hdGlvbkNvY29hOjpjb3B5VG9WYWx1ZUZyb20pOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRWYWx1ZXMpOgorICAgICAgICAoV2ViQ29y
ZTo6UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpjb3B5VmFsdWVzRnJvbSk6CisgICAgICAgIChX
ZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldEtleVRpbWVzKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6Y29weUtleVRpbWVzRnJvbSk6Cisg
ICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFRpbWluZ0Z1bmN0
aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OmNvcHlU
aW1pbmdGdW5jdGlvbnNGcm9tKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRp
b25Db2NvYTo6c2V0QW5pbWF0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBQW5p
bWF0aW9uQ29jb2E6OmNvcHlBbmltYXRpb25zRnJvbSk6CisgICAgICAgICogcGxhdGZvcm0vZ3Jh
cGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVyQ29jb2EubW06CisgICAgICAgIChXZWJDb3Jl
OjpQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6YWRkQW5pbWF0aW9uRm9yS2V5KToKKyAgICAgICAgKFdl
YkNvcmU6OlBsYXRmb3JtQ0FMYXllckNvY29hOjphbmltYXRpb25Gb3JLZXkpOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNwcDoKKyAg
ICAgICAgKFBsYXRmb3JtQ0FBbmltYXRpb25XaW46OlBsYXRmb3JtQ0FBbmltYXRpb25XaW4pOgor
ICAgICAgICAoUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6c2V0QW5pbWF0aW9ucyk6CisgICAgICAg
IChQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpjb3B5QW5pbWF0aW9uc0Zyb20pOgorICAgICAgICAq
IHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmg6CisKIDIw
MjEtMDEtMzEgIFphbGFuIEJ1anRhcyAgPHphbGFuQGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZD
XVtJRkNdIElubGluZUNvbnRlbnRCcmVha2VyOjpwcm9jZXNzT3ZlcmZsb3dpbmdUZXh0Q29udGVu
dCBzaG91bGQgZmluZCBicmVha2luZyBwb3NpdGlvbnMgZXZlbiBhZnRlciB0aGUgb3ZlcmZsb3dp
bmcgcnVuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJL
aXQvQ2hhbmdlTG9nCmluZGV4IGY4ZjQ1YTNkYWZlNWJhMGQxZjQ4ZDlkNmY2OWQ5NWRlZTFiOTQw
YzYuLjZhMWIxMDg2YTEzN2ViMmE3NWFhNDEzNzM5ZTk1ZjI4ZGE0MjY0OGYgMTAwNjQ0Ci0tLSBh
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBA
IC0xLDMgKzEsMjUgQEAKKzIwMjEtMDItMDEgIEFudG9pbmUgUXVpbnQgIDxncmFvdXRzQHdlYmtp
dC5vcmc+CisKKyAgICAgICAgQWxsb3cgc3VwcG9ydCBmb3IgQ0FBbmltYXRpb25Hcm91cAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjIxMjA5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgSW4gb3JkZXIgdG8g
Zml4IGJ1ZyAyMTk4OTQsIHdlIG5lZWQgdG8gdXNlIENvcmUgQW5pbWF0aW9uJ3MgQ0FBbmltYXRp
b25Hcm91cCBhbmQgaXRzCisgICAgICAgIHNldEFuaW1hdGlvbnMoKSBtZXRob2QuIEFkZCBzdXBw
b3J0IGZvciB0aGUgbmV3ICJHcm91cCIgUGxhdGZvcm1DQUFuaW1hdGlvbiB0eXBlIGZvcgorICAg
ICAgICB0aGUgcmVtb3RlIGFuaW1hdGlvbnMuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBh
Z2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUuaDoKKyAgICAgICAg
KiBXZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25S
ZW1vdGUubW06CisgICAgICAgIChXZWJLaXQ6OlBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OlBy
b3BlcnRpZXM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXRmb3JtQ0FBbmlt
YXRpb25SZW1vdGU6OlByb3BlcnRpZXM6OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXRm
b3JtQ0FBbmltYXRpb25SZW1vdGU6OmNvcHkgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpQbGF0
Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpzZXRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYktpdDo6
UGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6Y29weUFuaW1hdGlvbnNGcm9tKToKKyAgICAgICAg
KFdlYktpdDo6Y3JlYXRlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6YWRkQW5pbWF0aW9u
VG9MYXllcik6CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yPDwpOgorCiAyMDIxLTAxLTI5ICBE
YXJpbiBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBDaGVjayBhY3RpdmVEb2N1
bWVudExvYWRlcigpIGZvciBudWxsIGNvbnNpc3RlbnRseSBldmVyeXdoZXJlCmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBQW5pbWF0aW9u
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FBbmlt
YXRpb24uY3BwCmluZGV4IGRhOWE3MWI3MTM1ZmZiYjgxNTgxMjBhYWE3Mjc4MmFkNWE3OWVlMzMu
LjkwNTFlNzk4ZGVkNjhmOTU0NmEzYjhhNTliMWFjZjUzYzlkNzQxZjQgMTAwNjQ0Ci0tLSBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FBbmltYXRpb24uY3Bw
CisrKyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FBbmlt
YXRpb24uY3BwCkBAIC0zNCw2ICszNCw3IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0
cmVhbSYgdHMsIFBsYXRmb3JtQ0FBbmltYXRpb246OkFuaW1hdGlvblR5cGUgdHlwZSkKIHsKICAg
ICBzd2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIFBsYXRmb3JtQ0FBbmltYXRpb246OkJhc2ljOiB0
cyA8PCAiYmFzaWMiOyBicmVhazsKKyAgICBjYXNlIFBsYXRmb3JtQ0FBbmltYXRpb246Okdyb3Vw
OiB0cyA8PCAiZ3JvdXAiOyBicmVhazsKICAgICBjYXNlIFBsYXRmb3JtQ0FBbmltYXRpb246Oktl
eWZyYW1lOiB0cyA8PCAia2V5ZnJhbWUiOyBicmVhazsKICAgICBjYXNlIFBsYXRmb3JtQ0FBbmlt
YXRpb246OlNwcmluZzogdHMgPDwgInNwcmluZyI7IGJyZWFrOwogICAgIH0KZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FBbmltYXRpb24u
aCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FBbmltYXRp
b24uaAppbmRleCBmYzNlYTg4MWQ2YzhlYTBiNWJmYzI4NTgwZjIxNzcwNDg1YTJiYzIwLi5iNTY4
MGY5OWYzYzQzYjNkMjdlOWIwN2UwZDljZjExNWRkMTA2OWE4IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBQW5pbWF0aW9uLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUFuaW1hdGlvbi5o
CkBAIC00Miw3ICs0Miw3IEBAIGNsYXNzIFRpbWluZ0Z1bmN0aW9uOwogCiBjbGFzcyBQbGF0Zm9y
bUNBQW5pbWF0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8UGxhdGZvcm1DQUFuaW1hdGlvbj4gewog
cHVibGljOgotICAgIGVudW0gQW5pbWF0aW9uVHlwZSB7IEJhc2ljLCBLZXlmcmFtZSwgU3ByaW5n
IH07CisgICAgZW51bSBBbmltYXRpb25UeXBlIHsgQmFzaWMsIEdyb3VwLCBLZXlmcmFtZSwgU3By
aW5nIH07CiAgICAgZW51bSBGaWxsTW9kZVR5cGUgeyBOb0ZpbGxNb2RlLCBGb3J3YXJkcywgQmFj
a3dhcmRzLCBCb3RoIH07CiAgICAgZW51bSBWYWx1ZUZ1bmN0aW9uVHlwZSB7IE5vVmFsdWVGdW5j
dGlvbiwgUm90YXRlWCwgUm90YXRlWSwgUm90YXRlWiwgU2NhbGVYLCBTY2FsZVksIFNjYWxlWiwg
U2NhbGUsIFRyYW5zbGF0ZVgsIFRyYW5zbGF0ZVksIFRyYW5zbGF0ZVosIFRyYW5zbGF0ZSB9Owog
CkBAIC0xMTksNiArMTE5LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0VGltaW5n
RnVuY3Rpb25zKGNvbnN0IFZlY3Rvcjxjb25zdCBUaW1pbmdGdW5jdGlvbio+JiwgYm9vbCByZXZl
cnNlID0gZmFsc2UpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY29weVRpbWluZ0Z1bmN0aW9uc0Zy
b20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYpID0gMDsKIAorICAgIC8vIEFuaW1hdGlvbiBn
cm91cCBwcm9wZXJ0aWVzLgorICAgIHZpcnR1YWwgdm9pZCBzZXRBbmltYXRpb25zKGNvbnN0IFZl
Y3RvcjxSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4+JikgPSAwOworICAgIHZpcnR1YWwgdm9p
ZCBjb3B5QW5pbWF0aW9uc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYpID0gMDsKKwog
ICAgIHZvaWQgc2V0QWN0dWFsU3RhcnRUaW1lSWZOZWVkZWQoQ0ZUaW1lSW50ZXJ2YWwgdCkKICAg
ICB7CiAgICAgICAgIGlmIChiZWdpblRpbWUoKSA8PSAwKQpAQCAtMTI2LDcgKzEzMCw3IEBAIHB1
YmxpYzoKICAgICB9CiAKICAgICBib29sIGlzQmFzaWNBbmltYXRpb24oKSBjb25zdDsKLSAgICAK
KwogcHJvdGVjdGVkOgogICAgIFBsYXRmb3JtQ0FBbmltYXRpb24oQW5pbWF0aW9uVHlwZSB0eXBl
ID0gQmFzaWMpCiAgICAgICAgIDogbV90eXBlKHR5cGUpCkBAIC0xNTYsNiArMTYwLDcgQEAgdGVt
cGxhdGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uOjpB
bmltYXRpb25UeXBlPiB7CiAgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKICAgICAgICAg
V2ViQ29yZTo6UGxhdGZvcm1DQUFuaW1hdGlvbjo6QW5pbWF0aW9uVHlwZSwKICAgICAgICAgV2Vi
Q29yZTo6UGxhdGZvcm1DQUFuaW1hdGlvbjo6QW5pbWF0aW9uVHlwZTo6QmFzaWMsCisgICAgICAg
IFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb246OkFuaW1hdGlvblR5cGU6Okdyb3VwLAogICAg
ICAgICBXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uOjpBbmltYXRpb25UeXBlOjpLZXlmcmFt
ZSwKICAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1DQUFuaW1hdGlvbjo6QW5pbWF0aW9uVHlwZTo6
U3ByaW5nCiAgICAgPjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBo
aWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLmgKaW5k
ZXggMjliZGU1ZTllYzM2MjMwYTQyYWU4YzdkNmRjNzc1ZmM0OTI0NWU5OC4uNjdmOGE2MTBjNGNh
NTJkMjEwYmI0M2M0ZTFkYzVhNzQ4MDljMmY2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLmgKKysr
IGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFu
aW1hdGlvbkNvY29hLmgKQEAgLTM1LDcgKzM1LDcgQEAgT0JKQ19DTEFTUyBDQUFuaW1hdGlvbjsK
IE9CSkNfQ0xBU1MgQ0FQcm9wZXJ0eUFuaW1hdGlvbjsKIE9CSkNfQ0xBU1MgTlNTdHJpbmc7CiAK
LXR5cGVkZWYgQ0FQcm9wZXJ0eUFuaW1hdGlvbiogUGxhdGZvcm1BbmltYXRpb25SZWY7Cit0eXBl
ZGVmIENBQW5pbWF0aW9uKiBQbGF0Zm9ybUFuaW1hdGlvblJlZjsKIAogbmFtZXNwYWNlIFdlYkNv
cmUgewogCkBAIC0xMjMsMTEgKzEyMywxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRUaW1pbmdG
dW5jdGlvbnMoY29uc3QgVmVjdG9yPGNvbnN0IFRpbWluZ0Z1bmN0aW9uKj4mLCBib29sIHJldmVy
c2UgPSBmYWxzZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBjb3B5VGltaW5nRnVuY3Rpb25zRnJvbShj
b25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJikgb3ZlcnJpZGU7CiAKKyAgICAvLyBBbmltYXRpb24g
Z3JvdXAgcHJvcGVydGllcy4KKyAgICB2b2lkIHNldEFuaW1hdGlvbnMoY29uc3QgVmVjdG9yPFJl
ZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPj4mKSBmaW5hbDsKKyAgICB2b2lkIGNvcHlBbmltYXRp
b25zRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJikgZmluYWw7CisKIHByaXZhdGU6CiAg
ICAgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hKEFuaW1hdGlvblR5cGUsIGNvbnN0IFN0cmluZyYg
a2V5UGF0aCk7CiAgICAgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hKFBsYXRmb3JtQW5pbWF0aW9u
UmVmKTsKIAotICAgIFJldGFpblB0cjxDQVByb3BlcnR5QW5pbWF0aW9uPiBtX2FuaW1hdGlvbjsK
KyAgICBSZXRhaW5QdHI8Q0FBbmltYXRpb24+IG1fYW5pbWF0aW9uOwogfTsKIAogfSAvLyBuYW1l
c3BhY2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhp
Y3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tCmlu
ZGV4IGQ5ZDgxMDY3ODAwZWU3ZGU2MDcxNmY1ZjZhMzAzZDM4NWMyZTE3ZGIuLmQ4NzlmYmNiYWNk
MWZjNDMyNTY5ZTk1NGQ5ZWQ4NDM2MGZkOTcyY2IgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3Jl
L3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbQor
KysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNB
QW5pbWF0aW9uQ29jb2EubW0KQEAgLTE2Nyw2ICsxNjcsOSBAQCBQbGF0Zm9ybUNBQW5pbWF0aW9u
Q29jb2E6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYShBbmltYXRpb25UeXBlIHR5cGUsIGNvbnN0
IFN0cgogICAgIGNhc2UgQmFzaWM6CiAgICAgICAgIG1fYW5pbWF0aW9uID0gW0NBQmFzaWNBbmlt
YXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6a2V5UGF0aF07CiAgICAgICAgIGJyZWFrOworICAg
IGNhc2UgR3JvdXA6CisgICAgICAgIG1fYW5pbWF0aW9uID0gW0NBQW5pbWF0aW9uR3JvdXAgYW5p
bWF0aW9uXTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBLZXlmcmFtZToKICAgICAgICAgbV9h
bmltYXRpb24gPSBbQ0FLZXlmcmFtZUFuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5UGF0aDprZXlQ
YXRoXTsKICAgICAgICAgYnJlYWs7CkBAIC0xNzgsMTkgKzE4MSwyMSBAQCBQbGF0Zm9ybUNBQW5p
bWF0aW9uQ29jb2E6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYShBbmltYXRpb25UeXBlIHR5cGUs
IGNvbnN0IFN0cgogCiBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OlBsYXRmb3JtQ0FBbmltYXRp
b25Db2NvYShQbGF0Zm9ybUFuaW1hdGlvblJlZiBhbmltYXRpb24pCiB7Ci0gICAgaWYgKFtzdGF0
aWNfY2FzdDxDQUFuaW1hdGlvbio+KGFuaW1hdGlvbikgaXNLaW5kT2ZDbGFzczpbQ0FCYXNpY0Fu
aW1hdGlvbiBjbGFzc11dKSB7Ci0gICAgICAgIGlmIChbc3RhdGljX2Nhc3Q8Q0FBbmltYXRpb24q
PihhbmltYXRpb24pIGlzS2luZE9mQ2xhc3M6W0NBU3ByaW5nQW5pbWF0aW9uIGNsYXNzXV0pCisg
ICAgaWYgKFtzdGF0aWNfY2FzdDxDQUFuaW1hdGlvbiAqPihhbmltYXRpb24pIGlzS2luZE9mQ2xh
c3M6W0NBQmFzaWNBbmltYXRpb24gY2xhc3NdXSkgeworICAgICAgICBpZiAoW3N0YXRpY19jYXN0
PENBQW5pbWF0aW9uICo+KGFuaW1hdGlvbikgaXNLaW5kT2ZDbGFzczpbQ0FTcHJpbmdBbmltYXRp
b24gY2xhc3NdXSkKICAgICAgICAgICAgIHNldFR5cGUoU3ByaW5nKTsKICAgICAgICAgZWxzZQog
ICAgICAgICAgICAgc2V0VHlwZShCYXNpYyk7Ci0gICAgfSBlbHNlIGlmIChbc3RhdGljX2Nhc3Q8
Q0FBbmltYXRpb24qPihhbmltYXRpb24pIGlzS2luZE9mQ2xhc3M6W0NBS2V5ZnJhbWVBbmltYXRp
b24gY2xhc3NdXSkKKyAgICB9IGVsc2UgaWYgKFtzdGF0aWNfY2FzdDxDQUFuaW1hdGlvbiAqPihh
bmltYXRpb24pIGlzS2luZE9mQ2xhc3M6W0NBS2V5ZnJhbWVBbmltYXRpb24gY2xhc3NdXSkKICAg
ICAgICAgc2V0VHlwZShLZXlmcmFtZSk7CisgICAgZWxzZSBpZiAoW3N0YXRpY19jYXN0PENBQW5p
bWF0aW9uICo+KGFuaW1hdGlvbikgaXNLaW5kT2ZDbGFzczpbQ0FBbmltYXRpb25Hcm91cCBjbGFz
c11dKQorICAgICAgICBzZXRUeXBlKEdyb3VwKTsKICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJU
X05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVybjsKICAgICB9CiAgICAgCi0gICAgbV9hbmlt
YXRpb24gPSBzdGF0aWNfY2FzdDxDQVByb3BlcnR5QW5pbWF0aW9uKj4oYW5pbWF0aW9uKTsKKyAg
ICBtX2FuaW1hdGlvbiA9IHN0YXRpY19jYXN0PENBQW5pbWF0aW9uICo+KGFuaW1hdGlvbik7CiB9
CiAKIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6flBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYSgp
CkBAIC0yMzUsNyArMjQwLDExIEBAIFBsYXRmb3JtQW5pbWF0aW9uUmVmIFBsYXRmb3JtQ0FBbmlt
YXRpb25Db2NvYTo6cGxhdGZvcm1BbmltYXRpb24oKSBjb25zdAogCiBTdHJpbmcgUGxhdGZvcm1D
QUFuaW1hdGlvbkNvY29hOjprZXlQYXRoKCkgY29uc3QKIHsKLSAgICByZXR1cm4gW21fYW5pbWF0
aW9uIGtleVBhdGhdOworICAgIGlmIChhbmltYXRpb25UeXBlKCkgPT0gR3JvdXApCisgICAgICAg
IHJldHVybiBlbXB0eVN0cmluZygpOworCisgICAgQVNTRVJUKFtzdGF0aWNfY2FzdDxDQUFuaW1h
dGlvbiAqPihtX2FuaW1hdGlvbi5nZXQoKSkgaXNLaW5kT2ZDbGFzczpbQ0FQcm9wZXJ0eUFuaW1h
dGlvbiBjbGFzc11dKTsKKyAgICByZXR1cm4gW3N0YXRpY19jYXN0PENBUHJvcGVydHlBbmltYXRp
b24gKj4obV9hbmltYXRpb24uZ2V0KCkpIGtleVBhdGhdOwogfQogCiBDRlRpbWVJbnRlcnZhbCBQ
bGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OmJlZ2luVGltZSgpIGNvbnN0CkBAIC0zMzMsNiArMzQy
LDggQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFRpbWluZ0Z1bmN0aW9uKGNv
bnN0IFRpbWluZ0Z1bmN0aW9uKiB2YWx1ZSwgYm8KICAgICAgICAgICAgIHNwcmluZ0FuaW1hdGlv
bi5pbml0aWFsVmVsb2NpdHkgPSBmdW5jdGlvbi5pbml0aWFsVmVsb2NpdHkoKTsKICAgICAgICAg
fQogICAgICAgICBicmVhazsKKyAgICBjYXNlIEdyb3VwOgorICAgICAgICBicmVhazsKICAgICB9
CiB9CiAKQEAgLTM1Myw0MyArMzY0LDU5IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29h
OjpzZXRSZW1vdmVkT25Db21wbGV0aW9uKGJvb2wgdmFsdWUpCiAKIGJvb2wgUGxhdGZvcm1DQUFu
aW1hdGlvbkNvY29hOjppc0FkZGl0aXZlKCkgY29uc3QKIHsKLSAgICByZXR1cm4gW21fYW5pbWF0
aW9uIGlzQWRkaXRpdmVdOworICAgIGlmIChhbmltYXRpb25UeXBlKCkgPT0gR3JvdXApCisgICAg
ICAgIHJldHVybiBmYWxzZTsKKworICAgIEFTU0VSVChbc3RhdGljX2Nhc3Q8Q0FBbmltYXRpb24g
Kj4obV9hbmltYXRpb24uZ2V0KCkpIGlzS2luZE9mQ2xhc3M6W0NBUHJvcGVydHlBbmltYXRpb24g
Y2xhc3NdXSk7CisgICAgcmV0dXJuIFtzdGF0aWNfY2FzdDxDQVByb3BlcnR5QW5pbWF0aW9uICo+
KG1fYW5pbWF0aW9uLmdldCgpKSBpc0FkZGl0aXZlXTsKIH0KIAogdm9pZCBQbGF0Zm9ybUNBQW5p
bWF0aW9uQ29jb2E6OnNldEFkZGl0aXZlKGJvb2wgdmFsdWUpCiB7Ci0gICAgW21fYW5pbWF0aW9u
IHNldEFkZGl0aXZlOnZhbHVlXTsKKyAgICBpZiAoYW5pbWF0aW9uVHlwZSgpID09IEdyb3VwKQor
ICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoW3N0YXRpY19jYXN0PENBQW5pbWF0aW9uICo+
KG1fYW5pbWF0aW9uLmdldCgpKSBpc0tpbmRPZkNsYXNzOltDQVByb3BlcnR5QW5pbWF0aW9uIGNs
YXNzXV0pOworICAgIHJldHVybiBbc3RhdGljX2Nhc3Q8Q0FQcm9wZXJ0eUFuaW1hdGlvbiAqPiht
X2FuaW1hdGlvbi5nZXQoKSkgc2V0QWRkaXRpdmU6dmFsdWVdOwogfQogCiBQbGF0Zm9ybUNBQW5p
bWF0aW9uOjpWYWx1ZUZ1bmN0aW9uVHlwZSBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnZhbHVl
RnVuY3Rpb24oKSBjb25zdAogewotICAgIHJldHVybiBmcm9tQ0FWYWx1ZUZ1bmN0aW9uVHlwZShb
W21fYW5pbWF0aW9uIHZhbHVlRnVuY3Rpb25dIG5hbWVdKTsKKyAgICBpZiAoYW5pbWF0aW9uVHlw
ZSgpID09IEdyb3VwKQorICAgICAgICByZXR1cm4gTm9WYWx1ZUZ1bmN0aW9uOworCisgICAgQVNT
RVJUKFtzdGF0aWNfY2FzdDxDQUFuaW1hdGlvbiAqPihtX2FuaW1hdGlvbi5nZXQoKSkgaXNLaW5k
T2ZDbGFzczpbQ0FQcm9wZXJ0eUFuaW1hdGlvbiBjbGFzc11dKTsKKyAgICByZXR1cm4gZnJvbUNB
VmFsdWVGdW5jdGlvblR5cGUoW1tzdGF0aWNfY2FzdDxDQVByb3BlcnR5QW5pbWF0aW9uICo+KG1f
YW5pbWF0aW9uLmdldCgpKSB2YWx1ZUZ1bmN0aW9uXSBuYW1lXSk7CiB9CiAKIHZvaWQgUGxhdGZv
cm1DQUFuaW1hdGlvbkNvY29hOjpzZXRWYWx1ZUZ1bmN0aW9uKFZhbHVlRnVuY3Rpb25UeXBlIHZh
bHVlKQogewotICAgIFttX2FuaW1hdGlvbiBzZXRWYWx1ZUZ1bmN0aW9uOltDQVZhbHVlRnVuY3Rp
b24gZnVuY3Rpb25XaXRoTmFtZTp0b0NBVmFsdWVGdW5jdGlvblR5cGUodmFsdWUpXV07CisgICAg
aWYgKGFuaW1hdGlvblR5cGUoKSA9PSBHcm91cCkKKyAgICAgICAgcmV0dXJuOworCisgICAgQVNT
RVJUKFtzdGF0aWNfY2FzdDxDQUFuaW1hdGlvbiAqPihtX2FuaW1hdGlvbi5nZXQoKSkgaXNLaW5k
T2ZDbGFzczpbQ0FQcm9wZXJ0eUFuaW1hdGlvbiBjbGFzc11dKTsKKyAgICByZXR1cm4gW3N0YXRp
Y19jYXN0PENBUHJvcGVydHlBbmltYXRpb24gKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFZhbHVl
RnVuY3Rpb246W0NBVmFsdWVGdW5jdGlvbiBmdW5jdGlvbldpdGhOYW1lOnRvQ0FWYWx1ZUZ1bmN0
aW9uVHlwZSh2YWx1ZSldXTsKIH0KIAogdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNl
dEZyb21WYWx1ZShmbG9hdCB2YWx1ZSkKIHsKICAgICBpZiAoIWlzQmFzaWNBbmltYXRpb24oKSkK
ICAgICAgICAgcmV0dXJuOwotICAgIFtzdGF0aWNfY2FzdDxDQUJhc2ljQW5pbWF0aW9uKj4obV9h
bmltYXRpb24uZ2V0KCkpIHNldEZyb21WYWx1ZTpAKHZhbHVlKV07CisgICAgW3N0YXRpY19jYXN0
PENBQmFzaWNBbmltYXRpb24gKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldEZyb21WYWx1ZTpAKHZh
bHVlKV07CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRGcm9tVmFsdWUo
Y29uc3QgVHJhbnNmb3JtYXRpb25NYXRyaXgmIHZhbHVlKQogewogICAgIGlmICghaXNCYXNpY0Fu
aW1hdGlvbigpKQogICAgICAgICByZXR1cm47Ci0gICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmlt
YXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0RnJvbVZhbHVlOltOU1ZhbHVlIHZhbHVlV2l0
aENBVHJhbnNmb3JtM0Q6dmFsdWVdXTsKKyAgICBbc3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1hdGlv
biAqPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0RnJvbVZhbHVlOltOU1ZhbHVlIHZhbHVlV2l0aENB
VHJhbnNmb3JtM0Q6dmFsdWVdXTsKIH0KIAogdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6
OnNldEZyb21WYWx1ZShjb25zdCBGbG9hdFBvaW50M0QmIHZhbHVlKQogewogICAgIGlmICghaXNC
YXNpY0FuaW1hdGlvbigpKQogICAgICAgICByZXR1cm47Ci0gICAgW3N0YXRpY19jYXN0PENBQmFz
aWNBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0RnJvbVZhbHVlOkBbIEAodmFsdWUu
eCgpKSwgQCh2YWx1ZS55KCkpLCBAKHZhbHVlLnooKSkgXV07CisgICAgW3N0YXRpY19jYXN0PENB
QmFzaWNBbmltYXRpb24gKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldEZyb21WYWx1ZTpAWyBAKHZh
bHVlLngoKSksIEAodmFsdWUueSgpKSwgQCh2YWx1ZS56KCkpIF1dOwogfQogCiB2b2lkIFBsYXRm
b3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0RnJvbVZhbHVlKGNvbnN0IENvbG9yJiB2YWx1ZSkKQEAg
LTM5Nyw0MiArNDI0LDQyIEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRGcm9t
VmFsdWUoY29uc3QgQ29sb3ImIHZhbHVlKQogICAgIGlmICghaXNCYXNpY0FuaW1hdGlvbigpKQog
ICAgICAgICByZXR1cm47CiAgICAgYXV0byBbciwgZywgYiwgYV0gPSB2YWx1ZS50b1NSR0JBTG9z
c3k8dWludDhfdD4oKTsKLSAgICBbc3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1hdGlvbio+KG1fYW5p
bWF0aW9uLmdldCgpKSBzZXRGcm9tVmFsdWU6QFtAKHIpLCBAKGcpLCBAKGIpLCBAKGEpXV07Cisg
ICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24gKj4obV9hbmltYXRpb24uZ2V0KCkpIHNl
dEZyb21WYWx1ZTpAW0AociksIEAoZyksIEAoYiksIEAoYSldXTsKIH0KIAogdm9pZCBQbGF0Zm9y
bUNBQW5pbWF0aW9uQ29jb2E6OnNldEZyb21WYWx1ZShjb25zdCBGaWx0ZXJPcGVyYXRpb24qIG9w
ZXJhdGlvbiwgaW50IGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCkKIHsKICAgICBhdXRvIHZh
bHVlID0gUGxhdGZvcm1DQUZpbHRlcnM6OmZpbHRlclZhbHVlRm9yT3BlcmF0aW9uKG9wZXJhdGlv
biwgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KTsKLSAgICBbc3RhdGljX2Nhc3Q8Q0FCYXNp
Y0FuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRGcm9tVmFsdWU6dmFsdWUuZ2V0KCld
OworICAgIFtzdGF0aWNfY2FzdDxDQUJhc2ljQW5pbWF0aW9uICo+KG1fYW5pbWF0aW9uLmdldCgp
KSBzZXRGcm9tVmFsdWU6dmFsdWUuZ2V0KCldOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FBbmltYXRp
b25Db2NvYTo6Y29weUZyb21WYWx1ZUZyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYgdmFs
dWUpCiB7CiAgICAgaWYgKCFpc0Jhc2ljQW5pbWF0aW9uKCkgfHwgIXZhbHVlLmlzQmFzaWNBbmlt
YXRpb24oKSkKICAgICAgICAgcmV0dXJuOwotICAgIGF1dG8gb3RoZXJBbmltYXRpb24gPSBzdGF0
aWNfY2FzdDxDQUJhc2ljQW5pbWF0aW9uKj4oZG93bmNhc3Q8UGxhdGZvcm1DQUFuaW1hdGlvbkNv
Y29hPih2YWx1ZSkubV9hbmltYXRpb24uZ2V0KCkpOwotICAgIFtzdGF0aWNfY2FzdDxDQUJhc2lj
QW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldEZyb21WYWx1ZTpbb3RoZXJBbmltYXRp
b24gZnJvbVZhbHVlXV07CisgICAgYXV0byBvdGhlckFuaW1hdGlvbiA9IHN0YXRpY19jYXN0PENB
QmFzaWNBbmltYXRpb24gKj4oZG93bmNhc3Q8UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hPih2YWx1
ZSkubV9hbmltYXRpb24uZ2V0KCkpOworICAgIFtzdGF0aWNfY2FzdDxDQUJhc2ljQW5pbWF0aW9u
ICo+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRGcm9tVmFsdWU6W290aGVyQW5pbWF0aW9uIGZyb21W
YWx1ZV1dOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VG9WYWx1ZShm
bG9hdCB2YWx1ZSkKIHsKICAgICBpZiAoIWlzQmFzaWNBbmltYXRpb24oKSkKICAgICAgICAgcmV0
dXJuOwotICAgIFtzdGF0aWNfY2FzdDxDQUJhc2ljQW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0
KCkpIHNldFRvVmFsdWU6QCh2YWx1ZSldOworICAgIFtzdGF0aWNfY2FzdDxDQUJhc2ljQW5pbWF0
aW9uICo+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRUb1ZhbHVlOkAodmFsdWUpXTsKIH0KIAogdm9p
ZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFRvVmFsdWUoY29uc3QgVHJhbnNmb3JtYXRp
b25NYXRyaXgmIHZhbHVlKQogewogICAgIGlmICghaXNCYXNpY0FuaW1hdGlvbigpKQogICAgICAg
ICByZXR1cm47Ci0gICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24qPihtX2FuaW1hdGlv
bi5nZXQoKSkgc2V0VG9WYWx1ZTpbTlNWYWx1ZSB2YWx1ZVdpdGhDQVRyYW5zZm9ybTNEOnZhbHVl
XV07CisgICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24gKj4obV9hbmltYXRpb24uZ2V0
KCkpIHNldFRvVmFsdWU6W05TVmFsdWUgdmFsdWVXaXRoQ0FUcmFuc2Zvcm0zRDp2YWx1ZV1dOwog
fQogCiB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VG9WYWx1ZShjb25zdCBGbG9h
dFBvaW50M0QmIHZhbHVlKQogewogICAgIGlmICghaXNCYXNpY0FuaW1hdGlvbigpKQogICAgICAg
ICByZXR1cm47Ci0gICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24qPihtX2FuaW1hdGlv
bi5nZXQoKSkgc2V0VG9WYWx1ZTpAWyBAKHZhbHVlLngoKSksIEAodmFsdWUueSgpKSwgQCh2YWx1
ZS56KCkpIF1dOworICAgIFtzdGF0aWNfY2FzdDxDQUJhc2ljQW5pbWF0aW9uICo+KG1fYW5pbWF0
aW9uLmdldCgpKSBzZXRUb1ZhbHVlOkBbIEAodmFsdWUueCgpKSwgQCh2YWx1ZS55KCkpLCBAKHZh
bHVlLnooKSkgXV07CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRUb1Zh
bHVlKGNvbnN0IENvbG9yJiB2YWx1ZSkKQEAgLTQ0MCwxMyArNDY3LDEzIEBAIHZvaWQgUGxhdGZv
cm1DQUFuaW1hdGlvbkNvY29hOjpzZXRUb1ZhbHVlKGNvbnN0IENvbG9yJiB2YWx1ZSkKICAgICBp
ZiAoIWlzQmFzaWNBbmltYXRpb24oKSkKICAgICAgICAgcmV0dXJuOwogICAgIGF1dG8gW3IsIGcs
IGIsIGFdID0gdmFsdWUudG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7Ci0gICAgW3N0YXRpY19jYXN0
PENBQmFzaWNBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VG9WYWx1ZTpAW0Aociks
IEAoZyksIEAoYiksIEAoYSldXTsKKyAgICBbc3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1hdGlvbiAq
PihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VG9WYWx1ZTpAW0AociksIEAoZyksIEAoYiksIEAoYSld
XTsKIH0KIAogdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFRvVmFsdWUoY29uc3Qg
RmlsdGVyT3BlcmF0aW9uKiBvcGVyYXRpb24sIGludCBpbnRlcm5hbEZpbHRlclByb3BlcnR5SW5k
ZXgpCiB7CiAgICAgYXV0byB2YWx1ZSA9IFBsYXRmb3JtQ0FGaWx0ZXJzOjpmaWx0ZXJWYWx1ZUZv
ck9wZXJhdGlvbihvcGVyYXRpb24sIGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCk7Ci0gICAg
W3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VG9W
YWx1ZTp2YWx1ZS5nZXQoKV07CisgICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24gKj4o
bV9hbmltYXRpb24uZ2V0KCkpIHNldFRvVmFsdWU6dmFsdWUuZ2V0KCldOwogfQogCiB2b2lkIFBs
YXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6Y29weVRvVmFsdWVGcm9tKGNvbnN0IFBsYXRmb3JtQ0FB
bmltYXRpb24mIHZhbHVlKQpAQCAtNDU0LDggKzQ4MSw4IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1h
dGlvbkNvY29hOjpjb3B5VG9WYWx1ZUZyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYgdmFs
dWUpCiAgICAgaWYgKCFpc0Jhc2ljQW5pbWF0aW9uKCkgfHwgIXZhbHVlLmlzQmFzaWNBbmltYXRp
b24oKSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgYXV0byBvdGhlckFuaW1hdGlvbiA9IHN0YXRp
Y19jYXN0PENBQmFzaWNBbmltYXRpb24qPihkb3duY2FzdDxQbGF0Zm9ybUNBQW5pbWF0aW9uQ29j
b2E+KHZhbHVlKS5tX2FuaW1hdGlvbi5nZXQoKSk7Ci0gICAgW3N0YXRpY19jYXN0PENBQmFzaWNB
bmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VG9WYWx1ZTpbb3RoZXJBbmltYXRpb24g
dG9WYWx1ZV1dOworICAgIGF1dG8gb3RoZXJBbmltYXRpb24gPSBzdGF0aWNfY2FzdDxDQUJhc2lj
QW5pbWF0aW9uICo+KGRvd25jYXN0PFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYT4odmFsdWUpLm1f
YW5pbWF0aW9uLmdldCgpKTsKKyAgICBbc3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1hdGlvbiAqPiht
X2FuaW1hdGlvbi5nZXQoKSkgc2V0VG9WYWx1ZTpbb3RoZXJBbmltYXRpb24gdG9WYWx1ZV1dOwog
fQogCiAKQEAgLTQ2NSw3ICs0OTIsNyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6
c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxmbG9hdD4mIHZhbHVlKQogICAgIGlmIChhbmltYXRpb25U
eXBlKCkgIT0gS2V5ZnJhbWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFtzdGF0aWNfY2FzdDxD
QUtleWZyYW1lQW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFZhbHVlczpjcmVhdGVO
U0FycmF5KHZhbHVlLCBbXSAoZmxvYXQgbnVtYmVyKSB7CisgICAgW3N0YXRpY19jYXN0PENBS2V5
ZnJhbWVBbmltYXRpb24gKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFZhbHVlczpjcmVhdGVOU0Fy
cmF5KHZhbHVlLCBbXSAoZmxvYXQgbnVtYmVyKSB7CiAgICAgICAgIHJldHVybiBAKG51bWJlcik7
CiAgICAgfSkuZ2V0KCldOwogfQpAQCAtNDc1LDcgKzUwMiw3IEBAIHZvaWQgUGxhdGZvcm1DQUFu
aW1hdGlvbkNvY29hOjpzZXRWYWx1ZXMoY29uc3QgVmVjdG9yPFRyYW5zZm9ybWF0aW9uTWF0cml4
PiYgdmFsCiAgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBLZXlmcmFtZSkKICAgICAgICAgcmV0
dXJuOwogCi0gICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24qPihtX2FuaW1hdGlv
bi5nZXQoKSkgc2V0VmFsdWVzOmNyZWF0ZU5TQXJyYXkodmFsdWUsIFtdIChhdXRvJiBtYXRyaXgp
IHsKKyAgICBbc3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbiAqPihtX2FuaW1hdGlvbi5n
ZXQoKSkgc2V0VmFsdWVzOmNyZWF0ZU5TQXJyYXkodmFsdWUsIFtdIChhdXRvJiBtYXRyaXgpIHsK
ICAgICAgICAgcmV0dXJuIFtOU1ZhbHVlIHZhbHVlV2l0aENBVHJhbnNmb3JtM0Q6bWF0cml4XTsK
ICAgICB9KS5nZXQoKV07CiB9CkBAIC00ODUsNyArNTEyLDcgQEAgdm9pZCBQbGF0Zm9ybUNBQW5p
bWF0aW9uQ29jb2E6OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8RmxvYXRQb2ludDNEPiYgdmFsdWUp
CiAgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBLZXlmcmFtZSkKICAgICAgICAgcmV0dXJuOwog
Ci0gICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQo
KSkgc2V0VmFsdWVzOmNyZWF0ZU5TQXJyYXkodmFsdWUsIFtdIChhdXRvJiBwb2ludCkgeworICAg
IFtzdGF0aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0aW9uICo+KG1fYW5pbWF0aW9uLmdldCgpKSBz
ZXRWYWx1ZXM6Y3JlYXRlTlNBcnJheSh2YWx1ZSwgW10gKGF1dG8mIHBvaW50KSB7CiAgICAgICAg
IHJldHVybiBAW0AocG9pbnQueCgpKSwgQChwb2ludC55KCkpLCBAKHBvaW50LnooKSldOwogICAg
IH0pLmdldCgpXTsKIH0KQEAgLTQ5NSw3ICs1MjIsNyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRp
b25Db2NvYTo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxDb2xvcj4mIHZhbHVlKQogICAgIGlmIChh
bmltYXRpb25UeXBlKCkgIT0gS2V5ZnJhbWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFtzdGF0
aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFZhbHVl
czpjcmVhdGVOU0FycmF5KHZhbHVlLCBbXSAoYXV0byYgY29sb3IpIHsKKyAgICBbc3RhdGljX2Nh
c3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbiAqPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VmFsdWVzOmNy
ZWF0ZU5TQXJyYXkodmFsdWUsIFtdIChhdXRvJiBjb2xvcikgewogICAgICAgICBhdXRvIFtyLCBn
LCBiLCBhXSA9IGNvbG9yLnRlbXBsYXRlIHRvU1JHQkFMb3NzeTx1aW50OF90PigpOwogICAgICAg
ICByZXR1cm4gQFtAKHIpLCBAKGcpLCBAKGIpLCBAKGEpXTsKICAgICB9KS5nZXQoKV07CkBAIC01
MDYsNyArNTMzLDcgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFZhbHVlcyhj
b25zdCBWZWN0b3I8UmVmUHRyPEZpbHRlck9wZXJhdGlvbj4+JgogICAgIGlmIChhbmltYXRpb25U
eXBlKCkgIT0gS2V5ZnJhbWUpCiAgICAgICAgIHJldHVybjsKIAotICAgIFtzdGF0aWNfY2FzdDxD
QUtleWZyYW1lQW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFZhbHVlczpjcmVhdGVO
U0FycmF5KHZhbHVlcywgWyZdIChhdXRvJiB2YWx1ZSkgeworICAgIFtzdGF0aWNfY2FzdDxDQUtl
eWZyYW1lQW5pbWF0aW9uICo+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRWYWx1ZXM6Y3JlYXRlTlNB
cnJheSh2YWx1ZXMsIFsmXSAoYXV0byYgdmFsdWUpIHsKICAgICAgICAgcmV0dXJuIFBsYXRmb3Jt
Q0FGaWx0ZXJzOjpmaWx0ZXJWYWx1ZUZvck9wZXJhdGlvbih2YWx1ZS5nZXQoKSwgaW50ZXJuYWxG
aWx0ZXJQcm9wZXJ0eUluZGV4KTsKICAgICB9KS5nZXQoKV07CiB9CkBAIC01MTYsMzQgKzU0Myw1
NyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6Y29weVZhbHVlc0Zyb20oY29uc3Qg
UGxhdGZvcm1DQUFuaW1hdGlvbiYgdmFsdWUpCiAgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBL
ZXlmcmFtZSB8fCB2YWx1ZS5hbmltYXRpb25UeXBlKCkgIT0gS2V5ZnJhbWUpCiAgICAgICAgIHJl
dHVybjsKIAotICAgIGF1dG8gb3RoZXJBbmltYXRpb24gPSBzdGF0aWNfY2FzdDxDQUtleWZyYW1l
QW5pbWF0aW9uKj4oZG93bmNhc3Q8UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hPih2YWx1ZSkubV9h
bmltYXRpb24uZ2V0KCkpOwotICAgIFtzdGF0aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0aW9uKj4o
bV9hbmltYXRpb24uZ2V0KCkpIHNldFZhbHVlczpbb3RoZXJBbmltYXRpb24gdmFsdWVzXV07Cisg
ICAgYXV0byBvdGhlckFuaW1hdGlvbiA9IHN0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24g
Kj4oZG93bmNhc3Q8UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hPih2YWx1ZSkubV9hbmltYXRpb24u
Z2V0KCkpOworICAgIFtzdGF0aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0aW9uICo+KG1fYW5pbWF0
aW9uLmdldCgpKSBzZXRWYWx1ZXM6W290aGVyQW5pbWF0aW9uIHZhbHVlc11dOwogfQogCiB2b2lk
IFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0S2V5VGltZXMoY29uc3QgVmVjdG9yPGZsb2F0
PiYgdmFsdWUpCiB7Ci0gICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24qPihtX2Fu
aW1hdGlvbi5nZXQoKSkgc2V0S2V5VGltZXM6Y3JlYXRlTlNBcnJheSh2YWx1ZSwgW10gKGZsb2F0
IHRpbWUpIHsKKyAgICBbc3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbiAqPihtX2FuaW1h
dGlvbi5nZXQoKSkgc2V0S2V5VGltZXM6Y3JlYXRlTlNBcnJheSh2YWx1ZSwgW10gKGZsb2F0IHRp
bWUpIHsKICAgICAgICAgcmV0dXJuIEAodGltZSk7CiAgICAgfSkuZ2V0KCldOwogfQogCiB2b2lk
IFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6Y29weUtleVRpbWVzRnJvbShjb25zdCBQbGF0Zm9y
bUNBQW5pbWF0aW9uJiB2YWx1ZSkKIHsKLSAgICBhdXRvIG90aGVyID0gc3RhdGljX2Nhc3Q8Q0FL
ZXlmcmFtZUFuaW1hdGlvbio+KGRvd25jYXN0PFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYT4odmFs
dWUpLm1fYW5pbWF0aW9uLmdldCgpKTsKLSAgICBbc3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFuaW1h
dGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRLZXlUaW1lczpbb3RoZXIga2V5VGltZXNdXTsK
KyAgICBhdXRvIG90aGVyID0gc3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbiAqPihkb3du
Y2FzdDxQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E+KHZhbHVlKS5tX2FuaW1hdGlvbi5nZXQoKSk7
CisgICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24gKj4obV9hbmltYXRpb24uZ2V0
KCkpIHNldEtleVRpbWVzOltvdGhlciBrZXlUaW1lc11dOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FB
bmltYXRpb25Db2NvYTo6c2V0VGltaW5nRnVuY3Rpb25zKGNvbnN0IFZlY3Rvcjxjb25zdCBUaW1p
bmdGdW5jdGlvbio+JiB2YWx1ZSwgYm9vbCByZXZlcnNlKQogewotICAgIFtzdGF0aWNfY2FzdDxD
QUtleWZyYW1lQW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFRpbWluZ0Z1bmN0aW9u
czpjcmVhdGVOU0FycmF5KHZhbHVlLCBbJl0gKGF1dG8mIGZ1bmN0aW9uKSB7CisgICAgW3N0YXRp
Y19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24gKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFRpbWlu
Z0Z1bmN0aW9uczpjcmVhdGVOU0FycmF5KHZhbHVlLCBbJl0gKGF1dG8mIGZ1bmN0aW9uKSB7CiAg
ICAgICAgIHJldHVybiB0b0NBTWVkaWFUaW1pbmdGdW5jdGlvbihmdW5jdGlvbiwgcmV2ZXJzZSk7
CiAgICAgfSkuZ2V0KCldOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6Y29w
eVRpbWluZ0Z1bmN0aW9uc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYgdmFsdWUpCiB7
Ci0gICAgYXV0byBvdGhlciA9IHN0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24qPihkb3du
Y2FzdDxQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E+KHZhbHVlKS5tX2FuaW1hdGlvbi5nZXQoKSk7
Ci0gICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQo
KSkgc2V0VGltaW5nRnVuY3Rpb25zOltvdGhlciB0aW1pbmdGdW5jdGlvbnNdXTsKKyAgICBhdXRv
IG90aGVyID0gc3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbiAqPihkb3duY2FzdDxQbGF0
Zm9ybUNBQW5pbWF0aW9uQ29jb2E+KHZhbHVlKS5tX2FuaW1hdGlvbi5nZXQoKSk7CisgICAgW3N0
YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24gKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFRp
bWluZ0Z1bmN0aW9uczpbb3RoZXIgdGltaW5nRnVuY3Rpb25zXV07Cit9CisKK3ZvaWQgUGxhdGZv
cm1DQUFuaW1hdGlvbkNvY29hOjpzZXRBbmltYXRpb25zKGNvbnN0IFZlY3RvcjxSZWZQdHI8UGxh
dGZvcm1DQUFuaW1hdGlvbj4+JiB2YWx1ZSkKK3sKKyAgICBBU1NFUlQoYW5pbWF0aW9uVHlwZSgp
ID09IEdyb3VwKTsKKyAgICBBU1NFUlQoW3N0YXRpY19jYXN0PENBQW5pbWF0aW9uICo+KG1fYW5p
bWF0aW9uLmdldCgpKSBpc0tpbmRPZkNsYXNzOltDQUFuaW1hdGlvbkdyb3VwIGNsYXNzXV0pOwor
CisgICAgW3N0YXRpY19jYXN0PENBQW5pbWF0aW9uR3JvdXAgKj4obV9hbmltYXRpb24uZ2V0KCkp
IHNldEFuaW1hdGlvbnM6Y3JlYXRlTlNBcnJheSh2YWx1ZSwgWyZdIChhdXRvJiBhbmltYXRpb24p
IC0+IENBQW5pbWF0aW9uICogeworICAgICAgICBpZiAoaXM8UGxhdGZvcm1DQUFuaW1hdGlvbkNv
Y29hPihhbmltYXRpb24uZ2V0KCkpKQorICAgICAgICAgICAgcmV0dXJuIGRvd25jYXN0PFBsYXRm
b3JtQ0FBbmltYXRpb25Db2NvYT4oYW5pbWF0aW9uLmdldCgpKS0+bV9hbmltYXRpb24uZ2V0KCk7
CisgICAgICAgIHJldHVybiBuaWw7CisgICAgfSkuZ2V0KCldOworfQorCit2b2lkIFBsYXRmb3Jt
Q0FBbmltYXRpb25Db2NvYTo6Y29weUFuaW1hdGlvbnNGcm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmlt
YXRpb24mIHZhbHVlKQoreworICAgIEFTU0VSVChhbmltYXRpb25UeXBlKCkgPT0gR3JvdXApOwor
ICAgIEFTU0VSVCh2YWx1ZS5hbmltYXRpb25UeXBlKCkgPT0gR3JvdXApOworICAgIEFTU0VSVChb
c3RhdGljX2Nhc3Q8Q0FBbmltYXRpb24gKj4obV9hbmltYXRpb24uZ2V0KCkpIGlzS2luZE9mQ2xh
c3M6W0NBQW5pbWF0aW9uR3JvdXAgY2xhc3NdXSk7CisgICAgQVNTRVJUKFtzdGF0aWNfY2FzdDxD
QUFuaW1hdGlvbiAqPihkb3duY2FzdDxQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E+KHZhbHVlKS5t
X2FuaW1hdGlvbi5nZXQoKSkgaXNLaW5kT2ZDbGFzczpbQ0FBbmltYXRpb25Hcm91cCBjbGFzc11d
KTsKKworICAgIGF1dG8gb3RoZXIgPSBzdGF0aWNfY2FzdDxDQUFuaW1hdGlvbkdyb3VwICo+KGRv
d25jYXN0PFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYT4odmFsdWUpLm1fYW5pbWF0aW9uLmdldCgp
KTsKKyAgICBbc3RhdGljX2Nhc3Q8Q0FBbmltYXRpb25Hcm91cCAqPihtX2FuaW1hdGlvbi5nZXQo
KSkgc2V0QW5pbWF0aW9uczpbb3RoZXIgYW5pbWF0aW9uc11dOwogfQogCiB9IC8vIG5hbWVzcGFj
ZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9j
YS9jb2NvYS9QbGF0Zm9ybUNBTGF5ZXJDb2NvYS5tbSBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3Jt
L2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1tCmluZGV4IDhlYTQ1M2Jj
MTNhNWJlN2JjYTY1MDk2MTNjOWQzMTg2OGY3YTliMzIuLjI0YjllZGU0YWI2ZjZkYmE3MDFmNmMz
YTQ5YWNmZjc0MTRjY2E0MmYgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dy
YXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1tCisrKyBiL1NvdXJjZS9XZWJD
b3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FMYXllckNvY29hLm1tCkBA
IC01MTEsNyArNTExLDcgQEAgdm9pZCBQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6YWRkQW5pbWF0aW9u
Rm9yS2V5KGNvbnN0IFN0cmluZyYga2V5LCBQbGF0Zm9ybUNBQW5pbWEKICAgICAgICAgW3dlYkFu
aW1hdGlvbkRlbGVnYXRlIHNldE93bmVyOnRoaXNdOwogICAgIH0KICAgICAKLSAgICBDQVByb3Bl
cnR5QW5pbWF0aW9uKiBwcm9wZXJ0eUFuaW1hdGlvbiA9IHN0YXRpY19jYXN0PENBUHJvcGVydHlB
bmltYXRpb24qPihkb3duY2FzdDxQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E+KGFuaW1hdGlvbiku
cGxhdGZvcm1BbmltYXRpb24oKSk7CisgICAgQ0FBbmltYXRpb24gKnByb3BlcnR5QW5pbWF0aW9u
ID0gc3RhdGljX2Nhc3Q8Q0FBbmltYXRpb24gKj4oZG93bmNhc3Q8UGxhdGZvcm1DQUFuaW1hdGlv
bkNvY29hPihhbmltYXRpb24pLnBsYXRmb3JtQW5pbWF0aW9uKCkpOwogICAgIGlmICghW3Byb3Bl
cnR5QW5pbWF0aW9uIGRlbGVnYXRlXSkKICAgICAgICAgW3Byb3BlcnR5QW5pbWF0aW9uIHNldERl
bGVnYXRlOnN0YXRpY19jYXN0PGlkPihtX2RlbGVnYXRlLmdldCgpKV07CiAKQEAgLTUyOSw3ICs1
MjksNyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllckNvY29hOjpyZW1vdmVBbmltYXRpb25Gb3JLZXko
Y29uc3QgU3RyaW5nJiBrZXkpCiAKIFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPiBQbGF0Zm9y
bUNBTGF5ZXJDb2NvYTo6YW5pbWF0aW9uRm9yS2V5KGNvbnN0IFN0cmluZyYga2V5KQogewotICAg
IENBUHJvcGVydHlBbmltYXRpb24qIHByb3BlcnR5QW5pbWF0aW9uID0gc3RhdGljX2Nhc3Q8Q0FQ
cm9wZXJ0eUFuaW1hdGlvbio+KFttX2xheWVyIGFuaW1hdGlvbkZvcktleTprZXldKTsKKyAgICBD
QUFuaW1hdGlvbiAqcHJvcGVydHlBbmltYXRpb24gPSBzdGF0aWNfY2FzdDxDQUFuaW1hdGlvbiAq
PihbbV9sYXllciBhbmltYXRpb25Gb3JLZXk6a2V5XSk7CiAgICAgaWYgKCFwcm9wZXJ0eUFuaW1h
dGlvbikKICAgICAgICAgcmV0dXJuIG51bGxwdHI7CiAgICAgcmV0dXJuIFBsYXRmb3JtQ0FBbmlt
YXRpb25Db2NvYTo6Y3JlYXRlKHByb3BlcnR5QW5pbWF0aW9uKTsKZGlmZiAtLWdpdCBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2lu
LmNwcCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNB
QW5pbWF0aW9uV2luLmNwcAppbmRleCAwNzQ0ZDc1MDc5MGNlODEzZGJmOTE4NjZiODM0N2NlMzMz
MDAwMzQ4Li5mNTU0YTQ2NDZkNDViZDY0YjhjM2Q3YjVjNDI1ODlhYjliZGFhNGY1IDEwMDY0NAot
LS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUFu
aW1hdGlvbldpbi5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
d2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uY3BwCkBAIC0xNTcsOCArMTU3LDEwIEBAIFBsYXRm
b3JtQ0FBbmltYXRpb25XaW46OlBsYXRmb3JtQ0FBbmltYXRpb25XaW4oQW5pbWF0aW9uVHlwZSB0
eXBlLCBjb25zdCBTdHJpbmcmCiB7CiAgICAgaWYgKHR5cGUgPT0gQmFzaWMpCiAgICAgICAgIG1f
YW5pbWF0aW9uID0gYWRvcHRDRihDQUNGQW5pbWF0aW9uQ3JlYXRlKGtDQUNGQmFzaWNBbmltYXRp
b24pKTsKLSAgICBlbHNlCisgICAgZWxzZSBpZiAodHlwZSA9PSBLZXlmcmFtZSkKICAgICAgICAg
bV9hbmltYXRpb24gPSBhZG9wdENGKENBQ0ZBbmltYXRpb25DcmVhdGUoa0NBQ0ZLZXlmcmFtZUFu
aW1hdGlvbikpOworICAgIGVsc2UgaWYgKHR5cGUgPT0gR3JvdXApCisgICAgICAgIG1fYW5pbWF0
aW9uID0gYWRvcHRDRihDQUNGQW5pbWF0aW9uQ3JlYXRlKGtDQUNGQW5pbWF0aW9uR3JvdXApKTsK
ICAgICAKICAgICBDQUNGQW5pbWF0aW9uU2V0S2V5UGF0aChtX2FuaW1hdGlvbi5nZXQoKSwga2V5
UGF0aC5jcmVhdGVDRlN0cmluZygpLmdldCgpKTsKIH0KQEAgLTE2OSw2ICsxNzEsOCBAQCBQbGF0
Zm9ybUNBQW5pbWF0aW9uV2luOjpQbGF0Zm9ybUNBQW5pbWF0aW9uV2luKFBsYXRmb3JtQW5pbWF0
aW9uUmVmIGFuaW1hdGlvbikKICAgICAgICAgc2V0VHlwZShCYXNpYyk7CiAgICAgZWxzZSBpZiAo
Q0FDRkFuaW1hdGlvbkdldENsYXNzKGFuaW1hdGlvbikgPT0ga0NBQ0ZLZXlmcmFtZUFuaW1hdGlv
bikKICAgICAgICAgc2V0VHlwZShLZXlmcmFtZSk7CisgICAgZWxzZSBpZiAoQ0FDRkFuaW1hdGlv
bkdldENsYXNzKGFuaW1hdGlvbikgPT0ga0NBQ0ZBbmltYXRpb25Hcm91cCkKKyAgICAgICAgc2V0
VHlwZShHcm91cCk7CiAgICAgZWxzZSB7CiAgICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwog
ICAgICAgICByZXR1cm47CkBAIC01NTMsNCArNTU3LDIwIEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1h
dGlvbldpbjo6Y29weVRpbWluZ0Z1bmN0aW9uc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlv
biYKICAgICBDQUNGQW5pbWF0aW9uU2V0VGltaW5nRnVuY3Rpb25zKG1fYW5pbWF0aW9uLmdldCgp
LCBDQUNGQW5pbWF0aW9uR2V0VGltaW5nRnVuY3Rpb25zKGRvd25jYXN0PFBsYXRmb3JtQ0FBbmlt
YXRpb25XaW4+KHZhbHVlKS5wbGF0Zm9ybUFuaW1hdGlvbigpKSk7CiB9CiAKK3ZvaWQgUGxhdGZv
cm1DQUFuaW1hdGlvbldpbjo6c2V0QW5pbWF0aW9ucyhjb25zdCBWZWN0b3I8UmVmUHRyPFBsYXRm
b3JtQ0FBbmltYXRpb24+PiYgdmFsdWUpCit7CisgICAgYXV0byBhcnJheSA9IGFkb3B0Q0YoQ0ZB
cnJheUNyZWF0ZU11dGFibGUoMCwgdmFsdWUuc2l6ZSgpLCAma0NGVHlwZUFycmF5Q2FsbEJhY2tz
KSk7CisgICAgZm9yIChhdXRvJiBhbmltYXRpb24gOiB2YWx1ZSkgeworICAgICAgICBpZiAoaXM8
UGxhdGZvcm1DQUFuaW1hdGlvbldpbj4oYW5pbWF0aW9uLmdldCgpKSkKKyAgICAgICAgICAgIENG
QXJyYXlBcHBlbmRWYWx1ZShhcnJheS5nZXQoKSwgZG93bmNhc3Q8UGxhdGZvcm1DQUFuaW1hdGlv
bldpbj4oKmFuaW1hdGlvbikubV9hbmltYXRpb24uZ2V0KCkpOworICAgIH0KKworICAgIENBQ0ZB
bmltYXRpb25TZXRBbmltYXRpb25zKG1fYW5pbWF0aW9uLmdldCgpLCBhcnJheS5nZXQoKSk7Cit9
CisKK3ZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbldpbjo6Y29weUFuaW1hdGlvbnNGcm9tKGNvbnN0
IFBsYXRmb3JtQ0FBbmltYXRpb24mIHZhbHVlKQoreworICAgIENBQ0ZBbmltYXRpb25TZXRBbmlt
YXRpb25zKG1fYW5pbWF0aW9uLmdldCgpLCBDQUNGQW5pbWF0aW9uR2V0QW5pbWF0aW9ucyhkb3du
Y2FzdDxQbGF0Zm9ybUNBQW5pbWF0aW9uV2luPih2YWx1ZSkucGxhdGZvcm1BbmltYXRpb24oKSkp
OworfQorCiAjZW5kaWYgLy8gUExBVEZPUk0oV0lOKQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNv
cmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uaCBiL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9u
V2luLmgKaW5kZXggMDhiYjdhNDBmZDMxMDRkMDQ5OTQ0NjI3OTMwYjA3MDYyNDU3MjJiYi4uZjdk
NGM0ZDUyODc1MDNhMWJlOWUwYzU2MDA5OTIwYjYwNDdlZTBlNCAxMDA2NDQKLS0tIGEvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4u
aAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1D
QUFuaW1hdGlvbldpbi5oCkBAIC0xMTMsNiArMTEzLDEwIEBAIHB1YmxpYzoKICAgICB2b2lkIHNl
dFRpbWluZ0Z1bmN0aW9ucyhjb25zdCBWZWN0b3I8Y29uc3QgVGltaW5nRnVuY3Rpb24qPiYsIGJv
b2wgcmV2ZXJzZSA9IGZhbHNlKSBvdmVycmlkZTsKICAgICB2b2lkIGNvcHlUaW1pbmdGdW5jdGlv
bnNGcm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb24mKSBvdmVycmlkZTsKIAorICAgIC8vIEFu
aW1hdGlvbiBncm91cCBwcm9wZXJ0aWVzLgorICAgIHZvaWQgc2V0QW5pbWF0aW9ucyhjb25zdCBW
ZWN0b3I8UmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+PiYpIGZpbmFsOworICAgIHZvaWQgY29w
eUFuaW1hdGlvbnNGcm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb24mKSBmaW5hbDsKKwogcHJp
dmF0ZToKICAgICBQbGF0Zm9ybUNBQW5pbWF0aW9uV2luKEFuaW1hdGlvblR5cGUsIGNvbnN0IFN0
cmluZyYga2V5UGF0aCk7CiAgICAgUGxhdGZvcm1DQUFuaW1hdGlvbldpbihQbGF0Zm9ybUFuaW1h
dGlvblJlZik7CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9S
ZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5oIGIvU291cmNlL1dlYktp
dC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25S
ZW1vdGUuaAppbmRleCA1OGIzZTc5MDM0Y2NmMDdlMWVmMjM2ZDc5ZWE2MTU1YTg2NDU1Y2M0Li5m
MDMxY2RlMDk1OTRiYWIzNTIzMWMwMWJlMDI0NjIxOTdmODNiYjFlIDEwMDY0NAotLS0gYS9Tb3Vy
Y2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFu
aW1hdGlvblJlbW90ZS5oCisrKyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1Jl
bW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLmgKQEAgLTExOSw2ICsxMTks
MTAgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VGltaW5nRnVuY3Rpb25zKGNvbnN0IFZlY3Rvcjxj
b25zdCBXZWJDb3JlOjpUaW1pbmdGdW5jdGlvbio+JiwgYm9vbCByZXZlcnNlID0gZmFsc2UpIG92
ZXJyaWRlOwogICAgIHZvaWQgY29weVRpbWluZ0Z1bmN0aW9uc0Zyb20oY29uc3QgV2ViQ29yZTo6
UGxhdGZvcm1DQUFuaW1hdGlvbiYpIG92ZXJyaWRlOwogCisgICAgLy8gQW5pbWF0aW9uIGdyb3Vw
IHByb3BlcnRpZXMuCisgICAgdm9pZCBzZXRBbmltYXRpb25zKGNvbnN0IFZlY3RvcjxSZWZQdHI8
UGxhdGZvcm1DQUFuaW1hdGlvbj4+JikgZmluYWw7CisgICAgdm9pZCBjb3B5QW5pbWF0aW9uc0Zy
b20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYpIGZpbmFsOworCiAgICAgQW5pbWF0aW9uVHlw
ZSBhbmltYXRpb25UeXBlKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0aWVzLmFuaW1hdGlvblR5
cGU7IH0KICAgICB2b2lkIHNldEhhc0V4cGxpY2l0QmVnaW5UaW1lKGJvb2wgaGFzRXhwbGljaXRC
ZWdpblRpbWUpIHsgbV9wcm9wZXJ0aWVzLmhhc0V4cGxpY2l0QmVnaW5UaW1lID0gaGFzRXhwbGlj
aXRCZWdpblRpbWU7IH0KICAgICBib29sIGhhc0V4cGxpY2l0QmVnaW5UaW1lKCkgY29uc3QgeyBy
ZXR1cm4gbV9wcm9wZXJ0aWVzLmhhc0V4cGxpY2l0QmVnaW5UaW1lOyB9CkBAIC0yODksNiArMjkz
LDggQEAgcHVibGljOgogICAgICAgICBWZWN0b3I8S2V5ZnJhbWVWYWx1ZT4ga2V5VmFsdWVzOwog
ICAgICAgICBWZWN0b3I8ZmxvYXQ+IGtleVRpbWVzOwogICAgICAgICBWZWN0b3I8UmVmUHRyPFdl
YkNvcmU6OlRpbWluZ0Z1bmN0aW9uPj4gdGltaW5nRnVuY3Rpb25zOworCisgICAgICAgIFZlY3Rv
cjxQcm9wZXJ0aWVzPiBhbmltYXRpb25zOwogICAgIH07CiAKICAgICBjb25zdCBQcm9wZXJ0aWVz
JiBwcm9wZXJ0aWVzKCkgY29uc3QgeyByZXR1cm4gbV9wcm9wZXJ0aWVzOyB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3MvV2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZv
cm1DQUFuaW1hdGlvblJlbW90ZS5tbSBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdl
L1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tCmluZGV4IGRlN2Q3
MjgwMjkyZDA1MGQ3MmQwNmFjOTRhYjkzMWNmMjNmYTRlOGUuLjk0YjkzMWRmZWU2ZGUxNmQ5YjJm
ZDJhNDFiMjRlM2VmZTUyM2ViMWMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vz
cy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tCisr
KyBiL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0
Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLm1tCkBAIC0yNDEsNiArMjQxLDggQEAgdm9pZCBQbGF0Zm9y
bUNBQW5pbWF0aW9uUmVtb3RlOjpQcm9wZXJ0aWVzOjplbmNvZGUoSVBDOjpFbmNvZGVyJiBlbmNv
ZGVyKSBjb25zdAogICAgIGVuY29kZXIgPDwgc3RhdGljX2Nhc3Q8dWludDY0X3Q+KHRpbWluZ0Z1
bmN0aW9ucy5zaXplKCkpOwogICAgIGZvciAoY29uc3QgYXV0byYgdGltaW5nRnVuY3Rpb24gOiB0
aW1pbmdGdW5jdGlvbnMpCiAgICAgICAgIGVuY29kZVRpbWluZ0Z1bmN0aW9uKGVuY29kZXIsIHRp
bWluZ0Z1bmN0aW9uLmdldCgpKTsKKworICAgIGVuY29kZXIgPDwgYW5pbWF0aW9uczsKIH0KIAog
T3B0aW9uYWw8UGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6UHJvcGVydGllcz4gUGxhdGZvcm1D
QUFuaW1hdGlvblJlbW90ZTo6UHJvcGVydGllczo6ZGVjb2RlKElQQzo6RGVjb2RlciYgZGVjb2Rl
cikKQEAgLTMyMCw2ICszMjIsOSBAQCBPcHRpb25hbDxQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3Rl
OjpQcm9wZXJ0aWVzPiBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpQcm9wZQogICAgICAgICB9
CiAgICAgfQogCisgICAgaWYgKCFkZWNvZGVyLmRlY29kZShwcm9wZXJ0aWVzLmFuaW1hdGlvbnMp
KQorICAgICAgICByZXR1cm4gV1RGOjpudWxsb3B0OworCiAgICAgcmV0dXJuIFdURk1vdmUocHJv
cGVydGllcyk7CiB9CiAgICAgCkBAIC0zNTUsNyArMzYwLDkgQEAgUmVmPFBsYXRmb3JtQ0FBbmlt
YXRpb24+IFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OmNvcHkoKSBjb25zdAogICAgICAgICBh
bmltYXRpb24tPmNvcHlGcm9tVmFsdWVGcm9tKCp0aGlzKTsKICAgICAgICAgYW5pbWF0aW9uLT5j
b3B5VG9WYWx1ZUZyb20oKnRoaXMpOwogICAgIH0KLSAgICAKKworICAgIGFuaW1hdGlvbi0+Y29w
eUFuaW1hdGlvbnNGcm9tKCp0aGlzKTsKKwogICAgIHJldHVybiBhbmltYXRpb247CiB9CiAKQEAg
LTcxMSw2ICs3MTgsMjMgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpjb3B5VGlt
aW5nRnVuY3Rpb25zRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW8KICAgICBtX3Byb3BlcnRp
ZXMucmV2ZXJzZVRpbWluZ0Z1bmN0aW9ucyA9IG90aGVyLm1fcHJvcGVydGllcy5yZXZlcnNlVGlt
aW5nRnVuY3Rpb25zOwogfQogCit2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OnNldEFu
aW1hdGlvbnMoY29uc3QgVmVjdG9yPFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPj4mIHZhbHVl
cykKK3sKKyAgICBWZWN0b3I8UHJvcGVydGllcz4gYW5pbWF0aW9uczsKKyAgICBhbmltYXRpb25z
LnJlc2VydmVJbml0aWFsQ2FwYWNpdHkodmFsdWVzLnNpemUoKSk7CisKKyAgICBmb3IgKGF1dG8m
IHZhbHVlIDogdmFsdWVzKQorICAgICAgICBhbmltYXRpb25zLnVuY2hlY2tlZEFwcGVuZChkb3du
Y2FzdDxQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlPih2YWx1ZS5nZXQoKSktPnByb3BlcnRpZXMo
KSk7CisKKyAgICBtX3Byb3BlcnRpZXMuYW5pbWF0aW9ucyA9IFdURk1vdmUoYW5pbWF0aW9ucyk7
Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6Y29weUFuaW1hdGlvbnNGcm9t
KGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb24mIHZhbHVlKQoreworICAgIGNvbnN0IFBsYXRmb3Jt
Q0FBbmltYXRpb25SZW1vdGUmIG90aGVyID0gZG93bmNhc3Q8UGxhdGZvcm1DQUFuaW1hdGlvblJl
bW90ZT4odmFsdWUpOworICAgIG1fcHJvcGVydGllcy5hbmltYXRpb25zID0gb3RoZXIubV9wcm9w
ZXJ0aWVzLmFuaW1hdGlvbnM7Cit9CisKIHN0YXRpYyBOU09iamVjdCogYW5pbWF0aW9uVmFsdWVG
cm9tS2V5ZnJhbWVWYWx1ZShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpLZXlmcmFt
ZVZhbHVlJiBrZXlmcmFtZVZhbHVlKQogewogICAgIHN3aXRjaCAoa2V5ZnJhbWVWYWx1ZS5rZXlm
cmFtZVR5cGUoKSkgewpAQCAtNzM0LDEzICs3NTgsMTMgQEAgc3RhdGljIE5TT2JqZWN0KiBhbmlt
YXRpb25WYWx1ZUZyb21LZXlmcmFtZVZhbHVlKGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb25SZW1v
dGUKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIGFkZEFuaW1hdGlvblRvTGF5ZXIoQ0FMYXllciAq
bGF5ZXIsIFJlbW90ZUxheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QsIGNvbnN0IFN0cmluZyYg
a2V5LCBjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpQcm9wZXJ0aWVzJiBwcm9wZXJ0
aWVzKQorc3RhdGljIFJldGFpblB0cjxDQUFuaW1hdGlvbj4gY3JlYXRlQW5pbWF0aW9uKENBTGF5
ZXIgKmxheWVyLCBSZW1vdGVMYXllclRyZWVIb3N0KiBsYXllclRyZWVIb3N0LCBjb25zdCBQbGF0
Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzKQogewotICAgIFJl
dGFpblB0cjxDQVByb3BlcnR5QW5pbWF0aW9uPiBjYUFuaW1hdGlvbjsKKyAgICBSZXRhaW5QdHI8
Q0FBbmltYXRpb24+IGNhQW5pbWF0aW9uOwogICAgIHN3aXRjaCAocHJvcGVydGllcy5hbmltYXRp
b25UeXBlKSB7CiAgICAgY2FzZSBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpCYXNpYzogewogICAgICAg
ICBhdXRvIGJhc2ljQW5pbWF0aW9uID0gW0NBQmFzaWNBbmltYXRpb24gYW5pbWF0aW9uV2l0aEtl
eVBhdGg6cHJvcGVydGllcy5rZXlQYXRoXTsKLSAgICAgICAgCisKICAgICAgICAgaWYgKHByb3Bl
cnRpZXMua2V5VmFsdWVzLnNpemUoKSA+IDEpIHsKICAgICAgICAgICAgIFtiYXNpY0FuaW1hdGlv
biBzZXRGcm9tVmFsdWU6YW5pbWF0aW9uVmFsdWVGcm9tS2V5ZnJhbWVWYWx1ZShwcm9wZXJ0aWVz
LmtleVZhbHVlc1swXSldOwogICAgICAgICAgICAgW2Jhc2ljQW5pbWF0aW9uIHNldFRvVmFsdWU6
YW5pbWF0aW9uVmFsdWVGcm9tS2V5ZnJhbWVWYWx1ZShwcm9wZXJ0aWVzLmtleVZhbHVlc1sxXSld
OwpAQCAtNzUyLDYgKzc3NiwxOCBAQCBzdGF0aWMgdm9pZCBhZGRBbmltYXRpb25Ub0xheWVyKENB
TGF5ZXIgKmxheWVyLCBSZW1vdGVMYXllclRyZWVIb3N0KiBsYXllclRyZWVIbwogICAgICAgICBj
YUFuaW1hdGlvbiA9IGJhc2ljQW5pbWF0aW9uOwogICAgICAgICBicmVhazsKICAgICB9CisgICAg
Y2FzZSBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpHcm91cDogeworICAgICAgICBhdXRvIGFuaW1hdGlv
bkdyb3VwID0gW0NBQW5pbWF0aW9uR3JvdXAgYW5pbWF0aW9uXTsKKworICAgICAgICBpZiAocHJv
cGVydGllcy5hbmltYXRpb25zLnNpemUoKSkgeworICAgICAgICAgICAgW2FuaW1hdGlvbkdyb3Vw
IHNldEFuaW1hdGlvbnM6Y3JlYXRlTlNBcnJheShwcm9wZXJ0aWVzLmFuaW1hdGlvbnMsIFsmXSAo
YXV0byYgYW5pbWF0aW9uUHJvcGVydGllcykgeworICAgICAgICAgICAgICAgIHJldHVybiBjcmVh
dGVBbmltYXRpb24obGF5ZXIsIGxheWVyVHJlZUhvc3QsIGFuaW1hdGlvblByb3BlcnRpZXMpLmdl
dCgpOworICAgICAgICAgICAgfSkuZ2V0KCldOworICAgICAgICB9CisKKyAgICAgICAgY2FBbmlt
YXRpb24gPSBhbmltYXRpb25Hcm91cDsKKyAgICAgICAgYnJlYWs7CisgICAgfQogICAgIGNhc2Ug
UGxhdGZvcm1DQUFuaW1hdGlvbjo6S2V5ZnJhbWU6IHsKICAgICAgICAgYXV0byBrZXlmcmFtZUFu
aW1hdGlvbiA9IFtDQUtleWZyYW1lQW5pbWF0aW9uIGFuaW1hdGlvbldpdGhLZXlQYXRoOnByb3Bl
cnRpZXMua2V5UGF0aF07CiAKQEAgLTc3NSwxOCArODExLDE4IEBAIHN0YXRpYyB2b2lkIGFkZEFu
aW1hdGlvblRvTGF5ZXIoQ0FMYXllciAqbGF5ZXIsIFJlbW90ZUxheWVyVHJlZUhvc3QqIGxheWVy
VHJlZUhvCiAgICAgICAgICAgICAgICAgcmV0dXJuIHRvQ0FNZWRpYVRpbWluZ0Z1bmN0aW9uKGZ1
bmN0aW9uLmdldCgpLCBwcm9wZXJ0aWVzLnJldmVyc2VUaW1pbmdGdW5jdGlvbnMpOwogICAgICAg
ICAgICAgfSkuZ2V0KCldOwogICAgICAgICB9Ci0gICAgICAgIAorCiAgICAgICAgIGNhQW5pbWF0
aW9uID0ga2V5ZnJhbWVBbmltYXRpb247CiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNl
IFBsYXRmb3JtQ0FBbmltYXRpb246OlNwcmluZzogewogICAgICAgICBhdXRvIHNwcmluZ0FuaW1h
dGlvbiA9IFtDQVNwcmluZ0FuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5UGF0aDpwcm9wZXJ0aWVz
LmtleVBhdGhdOwotICAgICAgICAKKwogICAgICAgICBpZiAocHJvcGVydGllcy5rZXlWYWx1ZXMu
c2l6ZSgpID4gMSkgewogICAgICAgICAgICAgW3NwcmluZ0FuaW1hdGlvbiBzZXRGcm9tVmFsdWU6
YW5pbWF0aW9uVmFsdWVGcm9tS2V5ZnJhbWVWYWx1ZShwcm9wZXJ0aWVzLmtleVZhbHVlc1swXSld
OwogICAgICAgICAgICAgW3NwcmluZ0FuaW1hdGlvbiBzZXRUb1ZhbHVlOmFuaW1hdGlvblZhbHVl
RnJvbUtleWZyYW1lVmFsdWUocHJvcGVydGllcy5rZXlWYWx1ZXNbMV0pXTsKICAgICAgICAgfQot
ICAgICAgICAKKwogICAgICAgICBpZiAocHJvcGVydGllcy50aW1pbmdGdW5jdGlvbnMuc2l6ZSgp
KSB7CiAgICAgICAgICAgICBhdXRvJiB0aW1pbmdGdW5jdGlvbiA9IHByb3BlcnRpZXMudGltaW5n
RnVuY3Rpb25zWzBdOwogICAgICAgICAgICAgaWYgKHRpbWluZ0Z1bmN0aW9uLT5pc1NwcmluZ1Rp
bWluZ0Z1bmN0aW9uKCkpIHsKQEAgLTgwMSw3ICs4MzcsNyBAQCBzdGF0aWMgdm9pZCBhZGRBbmlt
YXRpb25Ub0xheWVyKENBTGF5ZXIgKmxheWVyLCBSZW1vdGVMYXllclRyZWVIb3N0KiBsYXllclRy
ZWVIbwogICAgICAgICBicmVhazsKICAgICB9CiAgICAgfQotICAgIAorCiAgICAgW2NhQW5pbWF0
aW9uIHNldEJlZ2luVGltZTpwcm9wZXJ0aWVzLmJlZ2luVGltZV07CiAgICAgW2NhQW5pbWF0aW9u
IHNldER1cmF0aW9uOnByb3BlcnRpZXMuZHVyYXRpb25dOwogICAgIFtjYUFuaW1hdGlvbiBzZXRU
aW1lT2Zmc2V0OnByb3BlcnRpZXMudGltZU9mZnNldF07CkBAIC04MDksMjggKzg0NSwzNSBAQCBz
dGF0aWMgdm9pZCBhZGRBbmltYXRpb25Ub0xheWVyKENBTGF5ZXIgKmxheWVyLCBSZW1vdGVMYXll
clRyZWVIb3N0KiBsYXllclRyZWVIbwogICAgIFtjYUFuaW1hdGlvbiBzZXRTcGVlZDpwcm9wZXJ0
aWVzLnNwZWVkXTsKICAgICBbY2FBbmltYXRpb24gc2V0QXV0b3JldmVyc2VzOnByb3BlcnRpZXMu
YXV0b1JldmVyc2VzXTsKICAgICBbY2FBbmltYXRpb24gc2V0UmVtb3ZlZE9uQ29tcGxldGlvbjpw
cm9wZXJ0aWVzLnJlbW92ZWRPbkNvbXBsZXRpb25dOwotICAgIFtjYUFuaW1hdGlvbiBzZXRBZGRp
dGl2ZTpwcm9wZXJ0aWVzLmFkZGl0aXZlXTsKLSAgICAKKworICAgIGlmIChbY2FBbmltYXRpb24g
aXNLaW5kT2ZDbGFzczpbQ0FQcm9wZXJ0eUFuaW1hdGlvbiBjbGFzc11dKSB7CisgICAgICAgIFso
Q0FQcm9wZXJ0eUFuaW1hdGlvbiAqKWNhQW5pbWF0aW9uIHNldEFkZGl0aXZlOnByb3BlcnRpZXMu
YWRkaXRpdmVdOworICAgICAgICBpZiAocHJvcGVydGllcy52YWx1ZUZ1bmN0aW9uICE9IFBsYXRm
b3JtQ0FBbmltYXRpb246Ok5vVmFsdWVGdW5jdGlvbikKKyAgICAgICAgICAgIFsoQ0FQcm9wZXJ0
eUFuaW1hdGlvbiAqKWNhQW5pbWF0aW9uIHNldFZhbHVlRnVuY3Rpb246W0NBVmFsdWVGdW5jdGlv
biBmdW5jdGlvbldpdGhOYW1lOnRvQ0FWYWx1ZUZ1bmN0aW9uVHlwZShwcm9wZXJ0aWVzLnZhbHVl
RnVuY3Rpb24pXV07CisgICAgfQorCiAgICAgaWYgKHByb3BlcnRpZXMuZmlsbE1vZGUgIT0gUGxh
dGZvcm1DQUFuaW1hdGlvbjo6Tm9GaWxsTW9kZSkKICAgICAgICAgW2NhQW5pbWF0aW9uIHNldEZp
bGxNb2RlOnRvQ0FGaWxsTW9kZVR5cGUocHJvcGVydGllcy5maWxsTW9kZSldOwogCi0gICAgaWYg
KHByb3BlcnRpZXMudmFsdWVGdW5jdGlvbiAhPSBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpOb1ZhbHVl
RnVuY3Rpb24pCi0gICAgICAgIFtjYUFuaW1hdGlvbiBzZXRWYWx1ZUZ1bmN0aW9uOltDQVZhbHVl
RnVuY3Rpb24gZnVuY3Rpb25XaXRoTmFtZTp0b0NBVmFsdWVGdW5jdGlvblR5cGUocHJvcGVydGll
cy52YWx1ZUZ1bmN0aW9uKV1dOwotICAgIAogICAgIGlmIChwcm9wZXJ0aWVzLmhhc0V4cGxpY2l0
QmVnaW5UaW1lKQogICAgICAgICBbY2FBbmltYXRpb24gc2V0VmFsdWU6QFlFUyBmb3JLZXk6V0tF
eHBsaWNpdEJlZ2luVGltZUZsYWddOwotICAgIAorCiAgICAgaWYgKGxheWVyVHJlZUhvc3QpIHsK
ICAgICAgICAgR3JhcGhpY3NMYXllcjo6UGxhdGZvcm1MYXllcklEIGxheWVySUQgPSBSZW1vdGVM
YXllclRyZWVOb2RlOjpsYXllcklEKGxheWVyKTsKLSAgICAKKwogICAgICAgICBSZXRhaW5QdHI8
V0tBbmltYXRpb25EZWxlZ2F0ZT4mIGRlbGVnYXRlID0gbGF5ZXJUcmVlSG9zdC0+YW5pbWF0aW9u
RGVsZWdhdGVzKCkuYWRkKGxheWVySUQsIG51bGxwdHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICAg
ICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgICAgIGRlbGVnYXRlID0gYWRvcHROUyhbW1dLQW5p
bWF0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRoTGF5ZXJJRDpsYXllcklEIGxheWVyVHJlZUhv
c3Q6bGF5ZXJUcmVlSG9zdF0pOwogCiAgICAgICAgIFtjYUFuaW1hdGlvbiBzZXREZWxlZ2F0ZTpk
ZWxlZ2F0ZS5nZXQoKV07CiAgICAgfQotICAgIAotICAgIFtsYXllciBhZGRBbmltYXRpb246Y2FB
bmltYXRpb24uZ2V0KCkgZm9yS2V5OmtleV07CisKKyAgICByZXR1cm4gY2FBbmltYXRpb247Cit9
CisKK3N0YXRpYyB2b2lkIGFkZEFuaW1hdGlvblRvTGF5ZXIoQ0FMYXllciAqbGF5ZXIsIFJlbW90
ZUxheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBQ
bGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzKQoreworICAg
IFtsYXllciBhZGRBbmltYXRpb246Y3JlYXRlQW5pbWF0aW9uKGxheWVyLCBsYXllclRyZWVIb3N0
LCBwcm9wZXJ0aWVzKS5nZXQoKSBmb3JLZXk6a2V5XTsKIH0KIAogdm9pZCBQbGF0Zm9ybUNBQW5p
bWF0aW9uUmVtb3RlOjp1cGRhdGVMYXllckFuaW1hdGlvbnMoQ0FMYXllciAqbGF5ZXIsIFJlbW90
ZUxheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3QsIGNvbnN0IEFuaW1hdGlvbnNMaXN0JiBhbmlt
YXRpb25zVG9BZGQsIGNvbnN0IEhhc2hTZXQ8U3RyaW5nPiYgYW5pbWF0aW9uc1RvUmVtb3ZlKQpA
QCAtOTQzLDYgKzk4NiwyNCBAQCBUZXh0U3RyZWFtJiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRz
LCBjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpQcm9wZXJ0aQogICAgIHRzLmRlY3Jl
YXNlSW5kZW50KCk7CiAgICAgdHMuZGVjcmVhc2VJbmRlbnQoKTsKIAorICAgIGlmICghYW5pbWF0
aW9uLmFuaW1hdGlvbnMuaXNFbXB0eSgpKSB7CisgICAgICAgIHRzIDw8ICJcbiI7CisgICAgICAg
IHRzLmluY3JlYXNlSW5kZW50KCk7CisgICAgICAgIHRzLndyaXRlSW5kZW50KCk7CisgICAgICAg
IHRzIDw8ICIoIiA8PCAiYW5pbWF0aW9ucyI7CisgICAgICAgIHRzLmluY3JlYXNlSW5kZW50KCk7
CisKKyAgICAgICAgZm9yIChhdXRvJiBjaGlsZEFuaW1hdGlvbiA6IGFuaW1hdGlvbi5hbmltYXRp
b25zKSB7CisgICAgICAgICAgICB0cyA8PCAiXG4iOworICAgICAgICAgICAgdHMud3JpdGVJbmRl
bnQoKTsKKyAgICAgICAgICAgIHRzIDw8ICIoYW5pbWF0aW9uICIgPDwgY2hpbGRBbmltYXRpb247
CisgICAgICAgICAgICB0cyA8PCAiKSI7CisgICAgICAgIH0KKworICAgICAgICB0cy5kZWNyZWFz
ZUluZGVudCgpOworICAgICAgICB0cy5kZWNyZWFzZUluZGVudCgpOworICAgIH0KKwogICAgIHJl
dHVybiB0czsKIH0KIAo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>418913</attachid>
            <date>2021-02-01 12:51:09 -0800</date>
            <delta_ts>2021-02-01 12:51:09 -0800</delta_ts>
            <desc>Patch</desc>
            <filename>bug-221209-20210201215107.patch</filename>
            <type>text/plain</type>
            <size>37547</size>
            <attacher name="Antoine Quint">graouts</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjcyMTI4CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKaW5kZXggNGExODc4NGNmNGVhZmYz
NjE2NzFlZjNhMWVhY2I5ZDRmMWYzNjBiYi4uMTUxZjgxMzVhZGNhMGMwY2JmNjI4YmI2MTczNjIw
ZmZhZDA3ZWQwOSAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL0NoYW5nZUxvZwpAQCAtMSwzICsxLDQ3IEBACisyMDIxLTAyLTAxICBBbnRv
aW5lIFF1aW50ICA8Z3Jhb3V0c0B3ZWJraXQub3JnPgorCisgICAgICAgIEFsbG93IHN1cHBvcnQg
Zm9yIENBQW5pbWF0aW9uR3JvdXAKKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTIyMTIwOQorCisgICAgICAgIFJldmlld2VkIGJ5IERlYW4gSmFja3Nvbiwg
U2FtIFdlaW5pZyBhbmQgU2ltb24gRnJhc2VyLgorCisgICAgICAgIEluIG9yZGVyIHRvIGZpeCBi
dWcgMjE5ODk0LCB3ZSBuZWVkIHRvIHVzZSBDb3JlIEFuaW1hdGlvbidzIENBQW5pbWF0aW9uR3Jv
dXAgYW5kIGl0cworICAgICAgICBzZXRBbmltYXRpb25zKCkgbWV0aG9kLiBUaGlzIHBhdGNoIGFk
ZHMgYSBuZXcgIkdyb3VwIiB0eXBlIHRvIFBsYXRmb3JtQ0FBbmltYXRpb24gYW5kCisgICAgICAg
IHBsYXRmb3JtLXNwZWNpZmljIGludGVncmF0aW9uIGZvciBXaW5kb3dzIGFuZCBDb2NvYSBwb3J0
cy4KKworICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FBbmltYXRpb24u
Y3BwOgorICAgICAgICAoV2ViQ29yZTo6b3BlcmF0b3I8PCk6CisgICAgICAgICogcGxhdGZvcm0v
Z3JhcGhpY3MvY2EvUGxhdGZvcm1DQUFuaW1hdGlvbi5oOgorICAgICAgICAqIHBsYXRmb3JtL2dy
YXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5oOgorICAgICAgICAqIHBs
YXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbToKKyAg
ICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6UGxhdGZvcm1DQUFuaW1h
dGlvbkNvY29hKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6
a2V5UGF0aCBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29j
b2E6OnNldFRpbWluZ0Z1bmN0aW9uKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmlt
YXRpb25Db2NvYTo6aXNBZGRpdGl2ZSBjb25zdCk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9y
bUNBQW5pbWF0aW9uQ29jb2E6OnNldEFkZGl0aXZlKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRm
b3JtQ0FBbmltYXRpb25Db2NvYTo6dmFsdWVGdW5jdGlvbiBjb25zdCk6CisgICAgICAgIChXZWJD
b3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFZhbHVlRnVuY3Rpb24pOgorICAgICAg
ICAoV2ViQ29yZTo6UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRGcm9tVmFsdWUpOgorICAg
ICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpjb3B5RnJvbVZhbHVlRnJv
bSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFRvVmFs
dWUpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpjb3B5VG9W
YWx1ZUZyb20pOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpz
ZXRWYWx1ZXMpOgorICAgICAgICAoV2ViQ29yZTo6UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpj
b3B5VmFsdWVzRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29j
b2E6OnNldEtleVRpbWVzKToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25D
b2NvYTo6Y29weUtleVRpbWVzRnJvbSk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBQW5p
bWF0aW9uQ29jb2E6OnNldFRpbWluZ0Z1bmN0aW9ucyk6CisgICAgICAgIChXZWJDb3JlOjpQbGF0
Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OmNvcHlUaW1pbmdGdW5jdGlvbnNGcm9tKToKKyAgICAgICAg
KFdlYkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0QW5pbWF0aW9ucyk6CisgICAg
ICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OmNvcHlBbmltYXRpb25zRnJv
bSk6CisgICAgICAgICogcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVy
Q29jb2EubW06CisgICAgICAgIChXZWJDb3JlOjpQbGF0Zm9ybUNBTGF5ZXJDb2NvYTo6YWRkQW5p
bWF0aW9uRm9yS2V5KToKKyAgICAgICAgKFdlYkNvcmU6OlBsYXRmb3JtQ0FMYXllckNvY29hOjph
bmltYXRpb25Gb3JLZXkpOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0
Zm9ybUNBQW5pbWF0aW9uV2luLmNwcDoKKyAgICAgICAgKFBsYXRmb3JtQ0FBbmltYXRpb25XaW46
OlBsYXRmb3JtQ0FBbmltYXRpb25XaW4pOgorICAgICAgICAoUGxhdGZvcm1DQUFuaW1hdGlvbldp
bjo6c2V0QW5pbWF0aW9ucyk6CisgICAgICAgIChQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpjb3B5
QW5pbWF0aW9uc0Zyb20pOgorICAgICAgICAqIHBsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0
Zm9ybUNBQW5pbWF0aW9uV2luLmg6CisKIDIwMjEtMDEtMzEgIFphbGFuIEJ1anRhcyAgPHphbGFu
QGFwcGxlLmNvbT4KIAogICAgICAgICBbTEZDXVtJRkNdIElubGluZUNvbnRlbnRCcmVha2VyOjpw
cm9jZXNzT3ZlcmZsb3dpbmdUZXh0Q29udGVudCBzaG91bGQgZmluZCBicmVha2luZyBwb3NpdGlv
bnMgZXZlbiBhZnRlciB0aGUgb3ZlcmZsb3dpbmcgcnVuCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2Vi
S2l0L0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCmluZGV4IGY4ZjQ1YTNkYWZl
NWJhMGQxZjQ4ZDlkNmY2OWQ5NWRlZTFiOTQwYzYuLjIyM2ZlNzJmZTg0NDIzNzc3NjMwYTA0ZWFk
MmVhM2NjYmY2MDhiOGIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCisrKyBi
L1NvdXJjZS9XZWJLaXQvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMjUgQEAKKzIwMjEtMDItMDEgIEFu
dG9pbmUgUXVpbnQgIDxncmFvdXRzQHdlYmtpdC5vcmc+CisKKyAgICAgICAgQWxsb3cgc3VwcG9y
dCBmb3IgQ0FBbmltYXRpb25Hcm91cAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9z
aG93X2J1Zy5jZ2k/aWQ9MjIxMjA5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgRGVhbiBKYWNrc29u
LCBTYW0gV2VpbmlnIGFuZCBTaW1vbiBGcmFzZXIuCisKKyAgICAgICAgSW4gb3JkZXIgdG8gZml4
IGJ1ZyAyMTk4OTQsIHdlIG5lZWQgdG8gdXNlIENvcmUgQW5pbWF0aW9uJ3MgQ0FBbmltYXRpb25H
cm91cCBhbmQgaXRzCisgICAgICAgIHNldEFuaW1hdGlvbnMoKSBtZXRob2QuIEFkZCBzdXBwb3J0
IGZvciB0aGUgbmV3ICJHcm91cCIgUGxhdGZvcm1DQUFuaW1hdGlvbiB0eXBlIGZvcgorICAgICAg
ICB0aGUgcmVtb3RlIGFuaW1hdGlvbnMuCisKKyAgICAgICAgKiBXZWJQcm9jZXNzL1dlYlBhZ2Uv
UmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUuaDoKKyAgICAgICAgKiBX
ZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1v
dGUubW06CisgICAgICAgIChXZWJLaXQ6OlBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OlByb3Bl
cnRpZXM6OmVuY29kZSBjb25zdCk6CisgICAgICAgIChXZWJLaXQ6OlBsYXRmb3JtQ0FBbmltYXRp
b25SZW1vdGU6OlByb3BlcnRpZXM6OmRlY29kZSk6CisgICAgICAgIChXZWJLaXQ6OlBsYXRmb3Jt
Q0FBbmltYXRpb25SZW1vdGU6OmNvcHkgY29uc3QpOgorICAgICAgICAoV2ViS2l0OjpQbGF0Zm9y
bUNBQW5pbWF0aW9uUmVtb3RlOjpzZXRBbmltYXRpb25zKToKKyAgICAgICAgKFdlYktpdDo6UGxh
dGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6Y29weUFuaW1hdGlvbnNGcm9tKToKKyAgICAgICAgKFdl
YktpdDo6Y3JlYXRlQW5pbWF0aW9uKToKKyAgICAgICAgKFdlYktpdDo6YWRkQW5pbWF0aW9uVG9M
YXllcik6CisgICAgICAgIChXZWJLaXQ6Om9wZXJhdG9yPDwpOgorCiAyMDIxLTAxLTI5ICBEYXJp
biBBZGxlciAgPGRhcmluQGFwcGxlLmNvbT4KIAogICAgICAgICBDaGVjayBhY3RpdmVEb2N1bWVu
dExvYWRlcigpIGZvciBudWxsIGNvbnNpc3RlbnRseSBldmVyeXdoZXJlCmRpZmYgLS1naXQgYS9T
b3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBQW5pbWF0aW9uLmNw
cCBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FBbmltYXRp
b24uY3BwCmluZGV4IGRhOWE3MWI3MTM1ZmZiYjgxNTgxMjBhYWE3Mjc4MmFkNWE3OWVlMzMuLjkw
NTFlNzk4ZGVkNjhmOTU0NmEzYjhhNTliMWFjZjUzYzlkNzQxZjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FBbmltYXRpb24uY3BwCisr
KyBiL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FBbmltYXRp
b24uY3BwCkBAIC0zNCw2ICszNCw3IEBAIFRleHRTdHJlYW0mIG9wZXJhdG9yPDwoVGV4dFN0cmVh
bSYgdHMsIFBsYXRmb3JtQ0FBbmltYXRpb246OkFuaW1hdGlvblR5cGUgdHlwZSkKIHsKICAgICBz
d2l0Y2ggKHR5cGUpIHsKICAgICBjYXNlIFBsYXRmb3JtQ0FBbmltYXRpb246OkJhc2ljOiB0cyA8
PCAiYmFzaWMiOyBicmVhazsKKyAgICBjYXNlIFBsYXRmb3JtQ0FBbmltYXRpb246Okdyb3VwOiB0
cyA8PCAiZ3JvdXAiOyBicmVhazsKICAgICBjYXNlIFBsYXRmb3JtQ0FBbmltYXRpb246OktleWZy
YW1lOiB0cyA8PCAia2V5ZnJhbWUiOyBicmVhazsKICAgICBjYXNlIFBsYXRmb3JtQ0FBbmltYXRp
b246OlNwcmluZzogdHMgPDwgInNwcmluZyI7IGJyZWFrOwogICAgIH0KZGlmZiAtLWdpdCBhL1Nv
dXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FBbmltYXRpb24uaCBi
L1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL1BsYXRmb3JtQ0FBbmltYXRpb24u
aAppbmRleCBmYzNlYTg4MWQ2YzhlYTBiNWJmYzI4NTgwZjIxNzcwNDg1YTJiYzIwLi5iNTY4MGY5
OWYzYzQzYjNkMjdlOWIwN2UwZDljZjExNWRkMTA2OWE4IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9QbGF0Zm9ybUNBQW5pbWF0aW9uLmgKKysrIGIvU291
cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvUGxhdGZvcm1DQUFuaW1hdGlvbi5oCkBA
IC00Miw3ICs0Miw3IEBAIGNsYXNzIFRpbWluZ0Z1bmN0aW9uOwogCiBjbGFzcyBQbGF0Zm9ybUNB
QW5pbWF0aW9uIDogcHVibGljIFJlZkNvdW50ZWQ8UGxhdGZvcm1DQUFuaW1hdGlvbj4gewogcHVi
bGljOgotICAgIGVudW0gQW5pbWF0aW9uVHlwZSB7IEJhc2ljLCBLZXlmcmFtZSwgU3ByaW5nIH07
CisgICAgZW51bSBBbmltYXRpb25UeXBlIHsgQmFzaWMsIEdyb3VwLCBLZXlmcmFtZSwgU3ByaW5n
IH07CiAgICAgZW51bSBGaWxsTW9kZVR5cGUgeyBOb0ZpbGxNb2RlLCBGb3J3YXJkcywgQmFja3dh
cmRzLCBCb3RoIH07CiAgICAgZW51bSBWYWx1ZUZ1bmN0aW9uVHlwZSB7IE5vVmFsdWVGdW5jdGlv
biwgUm90YXRlWCwgUm90YXRlWSwgUm90YXRlWiwgU2NhbGVYLCBTY2FsZVksIFNjYWxlWiwgU2Nh
bGUsIFRyYW5zbGF0ZVgsIFRyYW5zbGF0ZVksIFRyYW5zbGF0ZVosIFRyYW5zbGF0ZSB9OwogCkBA
IC0xMTksNiArMTE5LDEwIEBAIHB1YmxpYzoKICAgICB2aXJ0dWFsIHZvaWQgc2V0VGltaW5nRnVu
Y3Rpb25zKGNvbnN0IFZlY3Rvcjxjb25zdCBUaW1pbmdGdW5jdGlvbio+JiwgYm9vbCByZXZlcnNl
ID0gZmFsc2UpID0gMDsKICAgICB2aXJ0dWFsIHZvaWQgY29weVRpbWluZ0Z1bmN0aW9uc0Zyb20o
Y29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYpID0gMDsKIAorICAgIC8vIEFuaW1hdGlvbiBncm91
cCBwcm9wZXJ0aWVzLgorICAgIHZpcnR1YWwgdm9pZCBzZXRBbmltYXRpb25zKGNvbnN0IFZlY3Rv
cjxSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlvbj4+JikgPSAwOworICAgIHZpcnR1YWwgdm9pZCBj
b3B5QW5pbWF0aW9uc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYpID0gMDsKKwogICAg
IHZvaWQgc2V0QWN0dWFsU3RhcnRUaW1lSWZOZWVkZWQoQ0ZUaW1lSW50ZXJ2YWwgdCkKICAgICB7
CiAgICAgICAgIGlmIChiZWdpblRpbWUoKSA8PSAwKQpAQCAtMTI2LDcgKzEzMCw3IEBAIHB1Ymxp
YzoKICAgICB9CiAKICAgICBib29sIGlzQmFzaWNBbmltYXRpb24oKSBjb25zdDsKLSAgICAKKwog
cHJvdGVjdGVkOgogICAgIFBsYXRmb3JtQ0FBbmltYXRpb24oQW5pbWF0aW9uVHlwZSB0eXBlID0g
QmFzaWMpCiAgICAgICAgIDogbV90eXBlKHR5cGUpCkBAIC0xNTYsNiArMTYwLDcgQEAgdGVtcGxh
dGU8PiBzdHJ1Y3QgRW51bVRyYWl0czxXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uOjpBbmlt
YXRpb25UeXBlPiB7CiAgICAgdXNpbmcgdmFsdWVzID0gRW51bVZhbHVlczwKICAgICAgICAgV2Vi
Q29yZTo6UGxhdGZvcm1DQUFuaW1hdGlvbjo6QW5pbWF0aW9uVHlwZSwKICAgICAgICAgV2ViQ29y
ZTo6UGxhdGZvcm1DQUFuaW1hdGlvbjo6QW5pbWF0aW9uVHlwZTo6QmFzaWMsCisgICAgICAgIFdl
YkNvcmU6OlBsYXRmb3JtQ0FBbmltYXRpb246OkFuaW1hdGlvblR5cGU6Okdyb3VwLAogICAgICAg
ICBXZWJDb3JlOjpQbGF0Zm9ybUNBQW5pbWF0aW9uOjpBbmltYXRpb25UeXBlOjpLZXlmcmFtZSwK
ICAgICAgICAgV2ViQ29yZTo6UGxhdGZvcm1DQUFuaW1hdGlvbjo6QW5pbWF0aW9uVHlwZTo6U3By
aW5nCiAgICAgPjsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNz
L2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5oIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLmgKaW5kZXgg
MjliZGU1ZTllYzM2MjMwYTQyYWU4YzdkNmRjNzc1ZmM0OTI0NWU5OC4uNjdmOGE2MTBjNGNhNTJk
MjEwYmI0M2M0ZTFkYzVhNzQ4MDljMmY2NiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLmgKKysrIGIv
U291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1h
dGlvbkNvY29hLmgKQEAgLTM1LDcgKzM1LDcgQEAgT0JKQ19DTEFTUyBDQUFuaW1hdGlvbjsKIE9C
SkNfQ0xBU1MgQ0FQcm9wZXJ0eUFuaW1hdGlvbjsKIE9CSkNfQ0xBU1MgTlNTdHJpbmc7CiAKLXR5
cGVkZWYgQ0FQcm9wZXJ0eUFuaW1hdGlvbiogUGxhdGZvcm1BbmltYXRpb25SZWY7Cit0eXBlZGVm
IENBQW5pbWF0aW9uKiBQbGF0Zm9ybUFuaW1hdGlvblJlZjsKIAogbmFtZXNwYWNlIFdlYkNvcmUg
ewogCkBAIC0xMjMsMTEgKzEyMywxNSBAQCBwdWJsaWM6CiAgICAgdm9pZCBzZXRUaW1pbmdGdW5j
dGlvbnMoY29uc3QgVmVjdG9yPGNvbnN0IFRpbWluZ0Z1bmN0aW9uKj4mLCBib29sIHJldmVyc2Ug
PSBmYWxzZSkgb3ZlcnJpZGU7CiAgICAgdm9pZCBjb3B5VGltaW5nRnVuY3Rpb25zRnJvbShjb25z
dCBQbGF0Zm9ybUNBQW5pbWF0aW9uJikgb3ZlcnJpZGU7CiAKKyAgICAvLyBBbmltYXRpb24gZ3Jv
dXAgcHJvcGVydGllcy4KKyAgICB2b2lkIHNldEFuaW1hdGlvbnMoY29uc3QgVmVjdG9yPFJlZlB0
cjxQbGF0Zm9ybUNBQW5pbWF0aW9uPj4mKSBmaW5hbDsKKyAgICB2b2lkIGNvcHlBbmltYXRpb25z
RnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJikgZmluYWw7CisKIHByaXZhdGU6CiAgICAg
UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hKEFuaW1hdGlvblR5cGUsIGNvbnN0IFN0cmluZyYga2V5
UGF0aCk7CiAgICAgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hKFBsYXRmb3JtQW5pbWF0aW9uUmVm
KTsKIAotICAgIFJldGFpblB0cjxDQVByb3BlcnR5QW5pbWF0aW9uPiBtX2FuaW1hdGlvbjsKKyAg
ICBSZXRhaW5QdHI8Q0FBbmltYXRpb24+IG1fYW5pbWF0aW9uOwogfTsKIAogfSAvLyBuYW1lc3Bh
Y2UgV2ViQ29yZQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3Mv
Y2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hLm1tCmluZGV4
IGQ5ZDgxMDY3ODAwZWU3ZGU2MDcxNmY1ZjZhMzAzZDM4NWMyZTE3ZGIuLmIzZTY2OGMyMWRlYmQx
NTk2M2FmZDhlYTcxODYyM2Q2ZjM1Mzk0NDkgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL3Bs
YXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRmb3JtQ0FBbmltYXRpb25Db2NvYS5tbQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS9jb2NvYS9QbGF0Zm9ybUNBQW5p
bWF0aW9uQ29jb2EubW0KQEAgLTE2Nyw2ICsxNjcsOSBAQCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29j
b2E6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYShBbmltYXRpb25UeXBlIHR5cGUsIGNvbnN0IFN0
cgogICAgIGNhc2UgQmFzaWM6CiAgICAgICAgIG1fYW5pbWF0aW9uID0gW0NBQmFzaWNBbmltYXRp
b24gYW5pbWF0aW9uV2l0aEtleVBhdGg6a2V5UGF0aF07CiAgICAgICAgIGJyZWFrOworICAgIGNh
c2UgR3JvdXA6CisgICAgICAgIG1fYW5pbWF0aW9uID0gW0NBQW5pbWF0aW9uR3JvdXAgYW5pbWF0
aW9uXTsKKyAgICAgICAgYnJlYWs7CiAgICAgY2FzZSBLZXlmcmFtZToKICAgICAgICAgbV9hbmlt
YXRpb24gPSBbQ0FLZXlmcmFtZUFuaW1hdGlvbiBhbmltYXRpb25XaXRoS2V5UGF0aDprZXlQYXRo
XTsKICAgICAgICAgYnJlYWs7CkBAIC0xNzgsMTkgKzE4MSwyMiBAQCBQbGF0Zm9ybUNBQW5pbWF0
aW9uQ29jb2E6OlBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYShBbmltYXRpb25UeXBlIHR5cGUsIGNv
bnN0IFN0cgogCiBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OlBsYXRmb3JtQ0FBbmltYXRpb25D
b2NvYShQbGF0Zm9ybUFuaW1hdGlvblJlZiBhbmltYXRpb24pCiB7Ci0gICAgaWYgKFtzdGF0aWNf
Y2FzdDxDQUFuaW1hdGlvbio+KGFuaW1hdGlvbikgaXNLaW5kT2ZDbGFzczpbQ0FCYXNpY0FuaW1h
dGlvbiBjbGFzc11dKSB7Ci0gICAgICAgIGlmIChbc3RhdGljX2Nhc3Q8Q0FBbmltYXRpb24qPihh
bmltYXRpb24pIGlzS2luZE9mQ2xhc3M6W0NBU3ByaW5nQW5pbWF0aW9uIGNsYXNzXV0pCisgICAg
YXV0byBjYUFuaW1hdGlvbiA9IHN0YXRpY19jYXN0PENBQW5pbWF0aW9uICo+KGFuaW1hdGlvbik7
CisgICAgaWYgKFtjYUFuaW1hdGlvbiBpc0tpbmRPZkNsYXNzOltDQUJhc2ljQW5pbWF0aW9uIGNs
YXNzXV0pIHsKKyAgICAgICAgaWYgKFtjYUFuaW1hdGlvbiBpc0tpbmRPZkNsYXNzOltDQVNwcmlu
Z0FuaW1hdGlvbiBjbGFzc11dKQogICAgICAgICAgICAgc2V0VHlwZShTcHJpbmcpOwogICAgICAg
ICBlbHNlCiAgICAgICAgICAgICBzZXRUeXBlKEJhc2ljKTsKLSAgICB9IGVsc2UgaWYgKFtzdGF0
aWNfY2FzdDxDQUFuaW1hdGlvbio+KGFuaW1hdGlvbikgaXNLaW5kT2ZDbGFzczpbQ0FLZXlmcmFt
ZUFuaW1hdGlvbiBjbGFzc11dKQorICAgIH0gZWxzZSBpZiAoW2NhQW5pbWF0aW9uIGlzS2luZE9m
Q2xhc3M6W0NBS2V5ZnJhbWVBbmltYXRpb24gY2xhc3NdXSkKICAgICAgICAgc2V0VHlwZShLZXlm
cmFtZSk7CisgICAgZWxzZSBpZiAoW2NhQW5pbWF0aW9uIGlzS2luZE9mQ2xhc3M6W0NBQW5pbWF0
aW9uR3JvdXAgY2xhc3NdXSkKKyAgICAgICAgc2V0VHlwZShHcm91cCk7CiAgICAgZWxzZSB7CiAg
ICAgICAgIEFTU0VSVF9OT1RfUkVBQ0hFRCgpOwogICAgICAgICByZXR1cm47CiAgICAgfQogICAg
IAotICAgIG1fYW5pbWF0aW9uID0gc3RhdGljX2Nhc3Q8Q0FQcm9wZXJ0eUFuaW1hdGlvbio+KGFu
aW1hdGlvbik7CisgICAgbV9hbmltYXRpb24gPSBjYUFuaW1hdGlvbjsKIH0KIAogUGxhdGZvcm1D
QUFuaW1hdGlvbkNvY29hOjp+UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hKCkKQEAgLTIzNSw3ICsy
NDEsMTEgQEAgUGxhdGZvcm1BbmltYXRpb25SZWYgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpw
bGF0Zm9ybUFuaW1hdGlvbigpIGNvbnN0CiAKIFN0cmluZyBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29j
b2E6OmtleVBhdGgoKSBjb25zdAogewotICAgIHJldHVybiBbbV9hbmltYXRpb24ga2V5UGF0aF07
CisgICAgaWYgKGFuaW1hdGlvblR5cGUoKSA9PSBHcm91cCkKKyAgICAgICAgcmV0dXJuIGVtcHR5
U3RyaW5nKCk7CisKKyAgICBBU1NFUlQoW3N0YXRpY19jYXN0PENBQW5pbWF0aW9uICo+KG1fYW5p
bWF0aW9uLmdldCgpKSBpc0tpbmRPZkNsYXNzOltDQVByb3BlcnR5QW5pbWF0aW9uIGNsYXNzXV0p
OworICAgIHJldHVybiBbc3RhdGljX2Nhc3Q8Q0FQcm9wZXJ0eUFuaW1hdGlvbiAqPihtX2FuaW1h
dGlvbi5nZXQoKSkga2V5UGF0aF07CiB9CiAKIENGVGltZUludGVydmFsIFBsYXRmb3JtQ0FBbmlt
YXRpb25Db2NvYTo6YmVnaW5UaW1lKCkgY29uc3QKQEAgLTMzMyw2ICszNDMsOCBAQCB2b2lkIFBs
YXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VGltaW5nRnVuY3Rpb24oY29uc3QgVGltaW5nRnVu
Y3Rpb24qIHZhbHVlLCBibwogICAgICAgICAgICAgc3ByaW5nQW5pbWF0aW9uLmluaXRpYWxWZWxv
Y2l0eSA9IGZ1bmN0aW9uLmluaXRpYWxWZWxvY2l0eSgpOwogICAgICAgICB9CiAgICAgICAgIGJy
ZWFrOworICAgIGNhc2UgR3JvdXA6CisgICAgICAgIGJyZWFrOwogICAgIH0KIH0KIApAQCAtMzUz
LDQzICszNjUsNTkgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFJlbW92ZWRP
bkNvbXBsZXRpb24oYm9vbCB2YWx1ZSkKIAogYm9vbCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6
OmlzQWRkaXRpdmUoKSBjb25zdAogewotICAgIHJldHVybiBbbV9hbmltYXRpb24gaXNBZGRpdGl2
ZV07CisgICAgaWYgKGFuaW1hdGlvblR5cGUoKSA9PSBHcm91cCkKKyAgICAgICAgcmV0dXJuIGZh
bHNlOworCisgICAgQVNTRVJUKFtzdGF0aWNfY2FzdDxDQUFuaW1hdGlvbiAqPihtX2FuaW1hdGlv
bi5nZXQoKSkgaXNLaW5kT2ZDbGFzczpbQ0FQcm9wZXJ0eUFuaW1hdGlvbiBjbGFzc11dKTsKKyAg
ICByZXR1cm4gW3N0YXRpY19jYXN0PENBUHJvcGVydHlBbmltYXRpb24gKj4obV9hbmltYXRpb24u
Z2V0KCkpIGlzQWRkaXRpdmVdOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6
c2V0QWRkaXRpdmUoYm9vbCB2YWx1ZSkKIHsKLSAgICBbbV9hbmltYXRpb24gc2V0QWRkaXRpdmU6
dmFsdWVdOworICAgIGlmIChhbmltYXRpb25UeXBlKCkgPT0gR3JvdXApCisgICAgICAgIHJldHVy
bjsKKworICAgIEFTU0VSVChbc3RhdGljX2Nhc3Q8Q0FBbmltYXRpb24gKj4obV9hbmltYXRpb24u
Z2V0KCkpIGlzS2luZE9mQ2xhc3M6W0NBUHJvcGVydHlBbmltYXRpb24gY2xhc3NdXSk7CisgICAg
cmV0dXJuIFtzdGF0aWNfY2FzdDxDQVByb3BlcnR5QW5pbWF0aW9uICo+KG1fYW5pbWF0aW9uLmdl
dCgpKSBzZXRBZGRpdGl2ZTp2YWx1ZV07CiB9CiAKIFBsYXRmb3JtQ0FBbmltYXRpb246OlZhbHVl
RnVuY3Rpb25UeXBlIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6dmFsdWVGdW5jdGlvbigpIGNv
bnN0CiB7Ci0gICAgcmV0dXJuIGZyb21DQVZhbHVlRnVuY3Rpb25UeXBlKFtbbV9hbmltYXRpb24g
dmFsdWVGdW5jdGlvbl0gbmFtZV0pOworICAgIGlmIChhbmltYXRpb25UeXBlKCkgPT0gR3JvdXAp
CisgICAgICAgIHJldHVybiBOb1ZhbHVlRnVuY3Rpb247CisKKyAgICBBU1NFUlQoW3N0YXRpY19j
YXN0PENBQW5pbWF0aW9uICo+KG1fYW5pbWF0aW9uLmdldCgpKSBpc0tpbmRPZkNsYXNzOltDQVBy
b3BlcnR5QW5pbWF0aW9uIGNsYXNzXV0pOworICAgIHJldHVybiBmcm9tQ0FWYWx1ZUZ1bmN0aW9u
VHlwZShbW3N0YXRpY19jYXN0PENBUHJvcGVydHlBbmltYXRpb24gKj4obV9hbmltYXRpb24uZ2V0
KCkpIHZhbHVlRnVuY3Rpb25dIG5hbWVdKTsKIH0KIAogdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9u
Q29jb2E6OnNldFZhbHVlRnVuY3Rpb24oVmFsdWVGdW5jdGlvblR5cGUgdmFsdWUpCiB7Ci0gICAg
W21fYW5pbWF0aW9uIHNldFZhbHVlRnVuY3Rpb246W0NBVmFsdWVGdW5jdGlvbiBmdW5jdGlvbldp
dGhOYW1lOnRvQ0FWYWx1ZUZ1bmN0aW9uVHlwZSh2YWx1ZSldXTsKKyAgICBpZiAoYW5pbWF0aW9u
VHlwZSgpID09IEdyb3VwKQorICAgICAgICByZXR1cm47CisKKyAgICBBU1NFUlQoW3N0YXRpY19j
YXN0PENBQW5pbWF0aW9uICo+KG1fYW5pbWF0aW9uLmdldCgpKSBpc0tpbmRPZkNsYXNzOltDQVBy
b3BlcnR5QW5pbWF0aW9uIGNsYXNzXV0pOworICAgIHJldHVybiBbc3RhdGljX2Nhc3Q8Q0FQcm9w
ZXJ0eUFuaW1hdGlvbiAqPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VmFsdWVGdW5jdGlvbjpbQ0FW
YWx1ZUZ1bmN0aW9uIGZ1bmN0aW9uV2l0aE5hbWU6dG9DQVZhbHVlRnVuY3Rpb25UeXBlKHZhbHVl
KV1dOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0RnJvbVZhbHVlKGZs
b2F0IHZhbHVlKQogewogICAgIGlmICghaXNCYXNpY0FuaW1hdGlvbigpKQogICAgICAgICByZXR1
cm47Ci0gICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQo
KSkgc2V0RnJvbVZhbHVlOkAodmFsdWUpXTsKKyAgICBbc3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1h
dGlvbiAqPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0RnJvbVZhbHVlOkAodmFsdWUpXTsKIH0KIAog
dm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldEZyb21WYWx1ZShjb25zdCBUcmFuc2Zv
cm1hdGlvbk1hdHJpeCYgdmFsdWUpCiB7CiAgICAgaWYgKCFpc0Jhc2ljQW5pbWF0aW9uKCkpCiAg
ICAgICAgIHJldHVybjsKLSAgICBbc3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1hdGlvbio+KG1fYW5p
bWF0aW9uLmdldCgpKSBzZXRGcm9tVmFsdWU6W05TVmFsdWUgdmFsdWVXaXRoQ0FUcmFuc2Zvcm0z
RDp2YWx1ZV1dOworICAgIFtzdGF0aWNfY2FzdDxDQUJhc2ljQW5pbWF0aW9uICo+KG1fYW5pbWF0
aW9uLmdldCgpKSBzZXRGcm9tVmFsdWU6W05TVmFsdWUgdmFsdWVXaXRoQ0FUcmFuc2Zvcm0zRDp2
YWx1ZV1dOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0RnJvbVZhbHVl
KGNvbnN0IEZsb2F0UG9pbnQzRCYgdmFsdWUpCiB7CiAgICAgaWYgKCFpc0Jhc2ljQW5pbWF0aW9u
KCkpCiAgICAgICAgIHJldHVybjsKLSAgICBbc3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1hdGlvbio+
KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRGcm9tVmFsdWU6QFsgQCh2YWx1ZS54KCkpLCBAKHZhbHVl
LnkoKSksIEAodmFsdWUueigpKSBdXTsKKyAgICBbc3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1hdGlv
biAqPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0RnJvbVZhbHVlOkBbIEAodmFsdWUueCgpKSwgQCh2
YWx1ZS55KCkpLCBAKHZhbHVlLnooKSkgXV07CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlv
bkNvY29hOjpzZXRGcm9tVmFsdWUoY29uc3QgQ29sb3ImIHZhbHVlKQpAQCAtMzk3LDQyICs0MjUs
NDIgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldEZyb21WYWx1ZShjb25zdCBD
b2xvciYgdmFsdWUpCiAgICAgaWYgKCFpc0Jhc2ljQW5pbWF0aW9uKCkpCiAgICAgICAgIHJldHVy
bjsKICAgICBhdXRvIFtyLCBnLCBiLCBhXSA9IHZhbHVlLnRvU1JHQkFMb3NzeTx1aW50OF90Pigp
OwotICAgIFtzdGF0aWNfY2FzdDxDQUJhc2ljQW5pbWF0aW9uKj4obV9hbmltYXRpb24uZ2V0KCkp
IHNldEZyb21WYWx1ZTpAW0AociksIEAoZyksIEAoYiksIEAoYSldXTsKKyAgICBbc3RhdGljX2Nh
c3Q8Q0FCYXNpY0FuaW1hdGlvbiAqPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0RnJvbVZhbHVlOkBb
QChyKSwgQChnKSwgQChiKSwgQChhKV1dOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25D
b2NvYTo6c2V0RnJvbVZhbHVlKGNvbnN0IEZpbHRlck9wZXJhdGlvbiogb3BlcmF0aW9uLCBpbnQg
aW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KQogewogICAgIGF1dG8gdmFsdWUgPSBQbGF0Zm9y
bUNBRmlsdGVyczo6ZmlsdGVyVmFsdWVGb3JPcGVyYXRpb24ob3BlcmF0aW9uLCBpbnRlcm5hbEZp
bHRlclByb3BlcnR5SW5kZXgpOwotICAgIFtzdGF0aWNfY2FzdDxDQUJhc2ljQW5pbWF0aW9uKj4o
bV9hbmltYXRpb24uZ2V0KCkpIHNldEZyb21WYWx1ZTp2YWx1ZS5nZXQoKV07CisgICAgW3N0YXRp
Y19jYXN0PENBQmFzaWNBbmltYXRpb24gKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldEZyb21WYWx1
ZTp2YWx1ZS5nZXQoKV07CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpjb3B5
RnJvbVZhbHVlRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJiB2YWx1ZSkKIHsKICAgICBp
ZiAoIWlzQmFzaWNBbmltYXRpb24oKSB8fCAhdmFsdWUuaXNCYXNpY0FuaW1hdGlvbigpKQogICAg
ICAgICByZXR1cm47Ci0gICAgYXV0byBvdGhlckFuaW1hdGlvbiA9IHN0YXRpY19jYXN0PENBQmFz
aWNBbmltYXRpb24qPihkb3duY2FzdDxQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E+KHZhbHVlKS5t
X2FuaW1hdGlvbi5nZXQoKSk7Ci0gICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24qPiht
X2FuaW1hdGlvbi5nZXQoKSkgc2V0RnJvbVZhbHVlOltvdGhlckFuaW1hdGlvbiBmcm9tVmFsdWVd
XTsKKyAgICBhdXRvIG90aGVyQW5pbWF0aW9uID0gc3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1hdGlv
biAqPihkb3duY2FzdDxQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E+KHZhbHVlKS5tX2FuaW1hdGlv
bi5nZXQoKSk7CisgICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24gKj4obV9hbmltYXRp
b24uZ2V0KCkpIHNldEZyb21WYWx1ZTpbb3RoZXJBbmltYXRpb24gZnJvbVZhbHVlXV07CiB9CiAK
IHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRUb1ZhbHVlKGZsb2F0IHZhbHVlKQog
ewogICAgIGlmICghaXNCYXNpY0FuaW1hdGlvbigpKQogICAgICAgICByZXR1cm47Ci0gICAgW3N0
YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VG9WYWx1
ZTpAKHZhbHVlKV07CisgICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24gKj4obV9hbmlt
YXRpb24uZ2V0KCkpIHNldFRvVmFsdWU6QCh2YWx1ZSldOwogfQogCiB2b2lkIFBsYXRmb3JtQ0FB
bmltYXRpb25Db2NvYTo6c2V0VG9WYWx1ZShjb25zdCBUcmFuc2Zvcm1hdGlvbk1hdHJpeCYgdmFs
dWUpCiB7CiAgICAgaWYgKCFpc0Jhc2ljQW5pbWF0aW9uKCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBbc3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRU
b1ZhbHVlOltOU1ZhbHVlIHZhbHVlV2l0aENBVHJhbnNmb3JtM0Q6dmFsdWVdXTsKKyAgICBbc3Rh
dGljX2Nhc3Q8Q0FCYXNpY0FuaW1hdGlvbiAqPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VG9WYWx1
ZTpbTlNWYWx1ZSB2YWx1ZVdpdGhDQVRyYW5zZm9ybTNEOnZhbHVlXV07CiB9CiAKIHZvaWQgUGxh
dGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRUb1ZhbHVlKGNvbnN0IEZsb2F0UG9pbnQzRCYgdmFs
dWUpCiB7CiAgICAgaWYgKCFpc0Jhc2ljQW5pbWF0aW9uKCkpCiAgICAgICAgIHJldHVybjsKLSAg
ICBbc3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRU
b1ZhbHVlOkBbIEAodmFsdWUueCgpKSwgQCh2YWx1ZS55KCkpLCBAKHZhbHVlLnooKSkgXV07Cisg
ICAgW3N0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24gKj4obV9hbmltYXRpb24uZ2V0KCkpIHNl
dFRvVmFsdWU6QFsgQCh2YWx1ZS54KCkpLCBAKHZhbHVlLnkoKSksIEAodmFsdWUueigpKSBdXTsK
IH0KIAogdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OnNldFRvVmFsdWUoY29uc3QgQ29s
b3ImIHZhbHVlKQpAQCAtNDQwLDEzICs0NjgsMTMgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9u
Q29jb2E6OnNldFRvVmFsdWUoY29uc3QgQ29sb3ImIHZhbHVlKQogICAgIGlmICghaXNCYXNpY0Fu
aW1hdGlvbigpKQogICAgICAgICByZXR1cm47CiAgICAgYXV0byBbciwgZywgYiwgYV0gPSB2YWx1
ZS50b1NSR0JBTG9zc3k8dWludDhfdD4oKTsKLSAgICBbc3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1h
dGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRUb1ZhbHVlOkBbQChyKSwgQChnKSwgQChiKSwg
QChhKV1dOworICAgIFtzdGF0aWNfY2FzdDxDQUJhc2ljQW5pbWF0aW9uICo+KG1fYW5pbWF0aW9u
LmdldCgpKSBzZXRUb1ZhbHVlOkBbQChyKSwgQChnKSwgQChiKSwgQChhKV1dOwogfQogCiB2b2lk
IFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VG9WYWx1ZShjb25zdCBGaWx0ZXJPcGVyYXRp
b24qIG9wZXJhdGlvbiwgaW50IGludGVybmFsRmlsdGVyUHJvcGVydHlJbmRleCkKIHsKICAgICBh
dXRvIHZhbHVlID0gUGxhdGZvcm1DQUZpbHRlcnM6OmZpbHRlclZhbHVlRm9yT3BlcmF0aW9uKG9w
ZXJhdGlvbiwgaW50ZXJuYWxGaWx0ZXJQcm9wZXJ0eUluZGV4KTsKLSAgICBbc3RhdGljX2Nhc3Q8
Q0FCYXNpY0FuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRUb1ZhbHVlOnZhbHVlLmdl
dCgpXTsKKyAgICBbc3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1hdGlvbiAqPihtX2FuaW1hdGlvbi5n
ZXQoKSkgc2V0VG9WYWx1ZTp2YWx1ZS5nZXQoKV07CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUFuaW1h
dGlvbkNvY29hOjpjb3B5VG9WYWx1ZUZyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYgdmFs
dWUpCkBAIC00NTQsOCArNDgyLDggQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6OmNv
cHlUb1ZhbHVlRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJiB2YWx1ZSkKICAgICBpZiAo
IWlzQmFzaWNBbmltYXRpb24oKSB8fCAhdmFsdWUuaXNCYXNpY0FuaW1hdGlvbigpKQogICAgICAg
ICByZXR1cm47CiAKLSAgICBhdXRvIG90aGVyQW5pbWF0aW9uID0gc3RhdGljX2Nhc3Q8Q0FCYXNp
Y0FuaW1hdGlvbio+KGRvd25jYXN0PFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYT4odmFsdWUpLm1f
YW5pbWF0aW9uLmdldCgpKTsKLSAgICBbc3RhdGljX2Nhc3Q8Q0FCYXNpY0FuaW1hdGlvbio+KG1f
YW5pbWF0aW9uLmdldCgpKSBzZXRUb1ZhbHVlOltvdGhlckFuaW1hdGlvbiB0b1ZhbHVlXV07Cisg
ICAgYXV0byBvdGhlckFuaW1hdGlvbiA9IHN0YXRpY19jYXN0PENBQmFzaWNBbmltYXRpb24gKj4o
ZG93bmNhc3Q8UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hPih2YWx1ZSkubV9hbmltYXRpb24uZ2V0
KCkpOworICAgIFtzdGF0aWNfY2FzdDxDQUJhc2ljQW5pbWF0aW9uICo+KG1fYW5pbWF0aW9uLmdl
dCgpKSBzZXRUb1ZhbHVlOltvdGhlckFuaW1hdGlvbiB0b1ZhbHVlXV07CiB9CiAKIApAQCAtNDY1
LDcgKzQ5Myw3IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRWYWx1ZXMoY29u
c3QgVmVjdG9yPGZsb2F0PiYgdmFsdWUpCiAgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBLZXlm
cmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmlt
YXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VmFsdWVzOmNyZWF0ZU5TQXJyYXkodmFsdWUs
IFtdIChmbG9hdCBudW1iZXIpIHsKKyAgICBbc3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlv
biAqPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VmFsdWVzOmNyZWF0ZU5TQXJyYXkodmFsdWUsIFtd
IChmbG9hdCBudW1iZXIpIHsKICAgICAgICAgcmV0dXJuIEAobnVtYmVyKTsKICAgICB9KS5nZXQo
KV07CiB9CkBAIC00NzUsNyArNTAzLDcgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E6
OnNldFZhbHVlcyhjb25zdCBWZWN0b3I8VHJhbnNmb3JtYXRpb25NYXRyaXg+JiB2YWwKICAgICBp
ZiAoYW5pbWF0aW9uVHlwZSgpICE9IEtleWZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBb
c3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRW
YWx1ZXM6Y3JlYXRlTlNBcnJheSh2YWx1ZSwgW10gKGF1dG8mIG1hdHJpeCkgeworICAgIFtzdGF0
aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0aW9uICo+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRWYWx1
ZXM6Y3JlYXRlTlNBcnJheSh2YWx1ZSwgW10gKGF1dG8mIG1hdHJpeCkgewogICAgICAgICByZXR1
cm4gW05TVmFsdWUgdmFsdWVXaXRoQ0FUcmFuc2Zvcm0zRDptYXRyaXhdOwogICAgIH0pLmdldCgp
XTsKIH0KQEAgLTQ4NSw3ICs1MTMsNyBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6
c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxGbG9hdFBvaW50M0Q+JiB2YWx1ZSkKICAgICBpZiAoYW5p
bWF0aW9uVHlwZSgpICE9IEtleWZyYW1lKQogICAgICAgICByZXR1cm47CiAKLSAgICBbc3RhdGlj
X2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRWYWx1ZXM6
Y3JlYXRlTlNBcnJheSh2YWx1ZSwgW10gKGF1dG8mIHBvaW50KSB7CisgICAgW3N0YXRpY19jYXN0
PENBS2V5ZnJhbWVBbmltYXRpb24gKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFZhbHVlczpjcmVh
dGVOU0FycmF5KHZhbHVlLCBbXSAoYXV0byYgcG9pbnQpIHsKICAgICAgICAgcmV0dXJuIEBbQChw
b2ludC54KCkpLCBAKHBvaW50LnkoKSksIEAocG9pbnQueigpKV07CiAgICAgfSkuZ2V0KCldOwog
fQpAQCAtNDk1LDcgKzUyMyw3IEBAIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpzZXRW
YWx1ZXMoY29uc3QgVmVjdG9yPENvbG9yPiYgdmFsdWUpCiAgICAgaWYgKGFuaW1hdGlvblR5cGUo
KSAhPSBLZXlmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgW3N0YXRpY19jYXN0PENBS2V5
ZnJhbWVBbmltYXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VmFsdWVzOmNyZWF0ZU5TQXJy
YXkodmFsdWUsIFtdIChhdXRvJiBjb2xvcikgeworICAgIFtzdGF0aWNfY2FzdDxDQUtleWZyYW1l
QW5pbWF0aW9uICo+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRWYWx1ZXM6Y3JlYXRlTlNBcnJheSh2
YWx1ZSwgW10gKGF1dG8mIGNvbG9yKSB7CiAgICAgICAgIGF1dG8gW3IsIGcsIGIsIGFdID0gY29s
b3IudGVtcGxhdGUgdG9TUkdCQUxvc3N5PHVpbnQ4X3Q+KCk7CiAgICAgICAgIHJldHVybiBAW0Ao
ciksIEAoZyksIEAoYiksIEAoYSldOwogICAgIH0pLmdldCgpXTsKQEAgLTUwNiw3ICs1MzQsNyBA
QCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYTo6c2V0VmFsdWVzKGNvbnN0IFZlY3RvcjxS
ZWZQdHI8RmlsdGVyT3BlcmF0aW9uPj4mCiAgICAgaWYgKGFuaW1hdGlvblR5cGUoKSAhPSBLZXlm
cmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmlt
YXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VmFsdWVzOmNyZWF0ZU5TQXJyYXkodmFsdWVz
LCBbJl0gKGF1dG8mIHZhbHVlKSB7CisgICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRp
b24gKj4obV9hbmltYXRpb24uZ2V0KCkpIHNldFZhbHVlczpjcmVhdGVOU0FycmF5KHZhbHVlcywg
WyZdIChhdXRvJiB2YWx1ZSkgewogICAgICAgICByZXR1cm4gUGxhdGZvcm1DQUZpbHRlcnM6OmZp
bHRlclZhbHVlRm9yT3BlcmF0aW9uKHZhbHVlLmdldCgpLCBpbnRlcm5hbEZpbHRlclByb3BlcnR5
SW5kZXgpOwogICAgIH0pLmdldCgpXTsKIH0KQEAgLTUxNiwzNCArNTQ0LDU3IEBAIHZvaWQgUGxh
dGZvcm1DQUFuaW1hdGlvbkNvY29hOjpjb3B5VmFsdWVzRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5p
bWF0aW9uJiB2YWx1ZSkKICAgICBpZiAoYW5pbWF0aW9uVHlwZSgpICE9IEtleWZyYW1lIHx8IHZh
bHVlLmFuaW1hdGlvblR5cGUoKSAhPSBLZXlmcmFtZSkKICAgICAgICAgcmV0dXJuOwogCi0gICAg
YXV0byBvdGhlckFuaW1hdGlvbiA9IHN0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24qPihk
b3duY2FzdDxQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E+KHZhbHVlKS5tX2FuaW1hdGlvbi5nZXQo
KSk7Ci0gICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24qPihtX2FuaW1hdGlvbi5n
ZXQoKSkgc2V0VmFsdWVzOltvdGhlckFuaW1hdGlvbiB2YWx1ZXNdXTsKKyAgICBhdXRvIG90aGVy
QW5pbWF0aW9uID0gc3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbiAqPihkb3duY2FzdDxQ
bGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E+KHZhbHVlKS5tX2FuaW1hdGlvbi5nZXQoKSk7CisgICAg
W3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmltYXRpb24gKj4obV9hbmltYXRpb24uZ2V0KCkpIHNl
dFZhbHVlczpbb3RoZXJBbmltYXRpb24gdmFsdWVzXV07CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUFu
aW1hdGlvbkNvY29hOjpzZXRLZXlUaW1lcyhjb25zdCBWZWN0b3I8ZmxvYXQ+JiB2YWx1ZSkKIHsK
LSAgICBbc3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgp
KSBzZXRLZXlUaW1lczpjcmVhdGVOU0FycmF5KHZhbHVlLCBbXSAoZmxvYXQgdGltZSkgeworICAg
IFtzdGF0aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0aW9uICo+KG1fYW5pbWF0aW9uLmdldCgpKSBz
ZXRLZXlUaW1lczpjcmVhdGVOU0FycmF5KHZhbHVlLCBbXSAoZmxvYXQgdGltZSkgewogICAgICAg
ICByZXR1cm4gQCh0aW1lKTsKICAgICB9KS5nZXQoKV07CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUFu
aW1hdGlvbkNvY29hOjpjb3B5S2V5VGltZXNGcm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb24m
IHZhbHVlKQogewotICAgIGF1dG8gb3RoZXIgPSBzdGF0aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0
aW9uKj4oZG93bmNhc3Q8UGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hPih2YWx1ZSkubV9hbmltYXRp
b24uZ2V0KCkpOwotICAgIFtzdGF0aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0aW9uKj4obV9hbmlt
YXRpb24uZ2V0KCkpIHNldEtleVRpbWVzOltvdGhlciBrZXlUaW1lc11dOworICAgIGF1dG8gb3Ro
ZXIgPSBzdGF0aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0aW9uICo+KGRvd25jYXN0PFBsYXRmb3Jt
Q0FBbmltYXRpb25Db2NvYT4odmFsdWUpLm1fYW5pbWF0aW9uLmdldCgpKTsKKyAgICBbc3RhdGlj
X2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbiAqPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0S2V5VGlt
ZXM6W290aGVyIGtleVRpbWVzXV07CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29h
OjpzZXRUaW1pbmdGdW5jdGlvbnMoY29uc3QgVmVjdG9yPGNvbnN0IFRpbWluZ0Z1bmN0aW9uKj4m
IHZhbHVlLCBib29sIHJldmVyc2UpCiB7Ci0gICAgW3N0YXRpY19jYXN0PENBS2V5ZnJhbWVBbmlt
YXRpb24qPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VGltaW5nRnVuY3Rpb25zOmNyZWF0ZU5TQXJy
YXkodmFsdWUsIFsmXSAoYXV0byYgZnVuY3Rpb24pIHsKKyAgICBbc3RhdGljX2Nhc3Q8Q0FLZXlm
cmFtZUFuaW1hdGlvbiAqPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VGltaW5nRnVuY3Rpb25zOmNy
ZWF0ZU5TQXJyYXkodmFsdWUsIFsmXSAoYXV0byYgZnVuY3Rpb24pIHsKICAgICAgICAgcmV0dXJu
IHRvQ0FNZWRpYVRpbWluZ0Z1bmN0aW9uKGZ1bmN0aW9uLCByZXZlcnNlKTsKICAgICB9KS5nZXQo
KV07CiB9CiAKIHZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpjb3B5VGltaW5nRnVuY3Rp
b25zRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJiB2YWx1ZSkKIHsKLSAgICBhdXRvIG90
aGVyID0gc3RhdGljX2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+KGRvd25jYXN0PFBsYXRmb3Jt
Q0FBbmltYXRpb25Db2NvYT4odmFsdWUpLm1fYW5pbWF0aW9uLmdldCgpKTsKLSAgICBbc3RhdGlj
X2Nhc3Q8Q0FLZXlmcmFtZUFuaW1hdGlvbio+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRUaW1pbmdG
dW5jdGlvbnM6W290aGVyIHRpbWluZ0Z1bmN0aW9uc11dOworICAgIGF1dG8gb3RoZXIgPSBzdGF0
aWNfY2FzdDxDQUtleWZyYW1lQW5pbWF0aW9uICo+KGRvd25jYXN0PFBsYXRmb3JtQ0FBbmltYXRp
b25Db2NvYT4odmFsdWUpLm1fYW5pbWF0aW9uLmdldCgpKTsKKyAgICBbc3RhdGljX2Nhc3Q8Q0FL
ZXlmcmFtZUFuaW1hdGlvbiAqPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0VGltaW5nRnVuY3Rpb25z
OltvdGhlciB0aW1pbmdGdW5jdGlvbnNdXTsKK30KKwordm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9u
Q29jb2E6OnNldEFuaW1hdGlvbnMoY29uc3QgVmVjdG9yPFJlZlB0cjxQbGF0Zm9ybUNBQW5pbWF0
aW9uPj4mIHZhbHVlKQoreworICAgIEFTU0VSVChhbmltYXRpb25UeXBlKCkgPT0gR3JvdXApOwor
ICAgIEFTU0VSVChbc3RhdGljX2Nhc3Q8Q0FBbmltYXRpb24gKj4obV9hbmltYXRpb24uZ2V0KCkp
IGlzS2luZE9mQ2xhc3M6W0NBQW5pbWF0aW9uR3JvdXAgY2xhc3NdXSk7CisKKyAgICBbc3RhdGlj
X2Nhc3Q8Q0FBbmltYXRpb25Hcm91cCAqPihtX2FuaW1hdGlvbi5nZXQoKSkgc2V0QW5pbWF0aW9u
czpjcmVhdGVOU0FycmF5KHZhbHVlLCBbJl0gKGF1dG8mIGFuaW1hdGlvbikgLT4gQ0FBbmltYXRp
b24gKiB7CisgICAgICAgIGlmIChpczxQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E+KGFuaW1hdGlv
bi5nZXQoKSkpCisgICAgICAgICAgICByZXR1cm4gZG93bmNhc3Q8UGxhdGZvcm1DQUFuaW1hdGlv
bkNvY29hPihhbmltYXRpb24uZ2V0KCkpLT5tX2FuaW1hdGlvbi5nZXQoKTsKKyAgICAgICAgcmV0
dXJuIG5pbDsKKyAgICB9KS5nZXQoKV07Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvbkNv
Y29hOjpjb3B5QW5pbWF0aW9uc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYgdmFsdWUp
Cit7CisgICAgQVNTRVJUKGFuaW1hdGlvblR5cGUoKSA9PSBHcm91cCk7CisgICAgQVNTRVJUKHZh
bHVlLmFuaW1hdGlvblR5cGUoKSA9PSBHcm91cCk7CisgICAgQVNTRVJUKFtzdGF0aWNfY2FzdDxD
QUFuaW1hdGlvbiAqPihtX2FuaW1hdGlvbi5nZXQoKSkgaXNLaW5kT2ZDbGFzczpbQ0FBbmltYXRp
b25Hcm91cCBjbGFzc11dKTsKKyAgICBBU1NFUlQoW3N0YXRpY19jYXN0PENBQW5pbWF0aW9uICo+
KGRvd25jYXN0PFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYT4odmFsdWUpLm1fYW5pbWF0aW9uLmdl
dCgpKSBpc0tpbmRPZkNsYXNzOltDQUFuaW1hdGlvbkdyb3VwIGNsYXNzXV0pOworCisgICAgYXV0
byBvdGhlciA9IHN0YXRpY19jYXN0PENBQW5pbWF0aW9uR3JvdXAgKj4oZG93bmNhc3Q8UGxhdGZv
cm1DQUFuaW1hdGlvbkNvY29hPih2YWx1ZSkubV9hbmltYXRpb24uZ2V0KCkpOworICAgIFtzdGF0
aWNfY2FzdDxDQUFuaW1hdGlvbkdyb3VwICo+KG1fYW5pbWF0aW9uLmdldCgpKSBzZXRBbmltYXRp
b25zOltvdGhlciBhbmltYXRpb25zXV07CiB9CiAKIH0gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL2NvY29hL1BsYXRm
b3JtQ0FMYXllckNvY29hLm1tIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Ev
Y29jb2EvUGxhdGZvcm1DQUxheWVyQ29jb2EubW0KaW5kZXggOGVhNDUzYmMxM2E1YmU3YmNhNjUw
OTYxM2M5ZDMxODY4ZjdhOWIzMi4uMjRiOWVkZTRhYjZmNmRiYTcwMWY2YzNhNDlhY2ZmNzQxNGNj
YTQyZiAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2EvY29j
b2EvUGxhdGZvcm1DQUxheWVyQ29jb2EubW0KKysrIGIvU291cmNlL1dlYkNvcmUvcGxhdGZvcm0v
Z3JhcGhpY3MvY2EvY29jb2EvUGxhdGZvcm1DQUxheWVyQ29jb2EubW0KQEAgLTUxMSw3ICs1MTEs
NyBAQCB2b2lkIFBsYXRmb3JtQ0FMYXllckNvY29hOjphZGRBbmltYXRpb25Gb3JLZXkoY29uc3Qg
U3RyaW5nJiBrZXksIFBsYXRmb3JtQ0FBbmltYQogICAgICAgICBbd2ViQW5pbWF0aW9uRGVsZWdh
dGUgc2V0T3duZXI6dGhpc107CiAgICAgfQogICAgIAotICAgIENBUHJvcGVydHlBbmltYXRpb24q
IHByb3BlcnR5QW5pbWF0aW9uID0gc3RhdGljX2Nhc3Q8Q0FQcm9wZXJ0eUFuaW1hdGlvbio+KGRv
d25jYXN0PFBsYXRmb3JtQ0FBbmltYXRpb25Db2NvYT4oYW5pbWF0aW9uKS5wbGF0Zm9ybUFuaW1h
dGlvbigpKTsKKyAgICBDQUFuaW1hdGlvbiAqcHJvcGVydHlBbmltYXRpb24gPSBzdGF0aWNfY2Fz
dDxDQUFuaW1hdGlvbiAqPihkb3duY2FzdDxQbGF0Zm9ybUNBQW5pbWF0aW9uQ29jb2E+KGFuaW1h
dGlvbikucGxhdGZvcm1BbmltYXRpb24oKSk7CiAgICAgaWYgKCFbcHJvcGVydHlBbmltYXRpb24g
ZGVsZWdhdGVdKQogICAgICAgICBbcHJvcGVydHlBbmltYXRpb24gc2V0RGVsZWdhdGU6c3RhdGlj
X2Nhc3Q8aWQ+KG1fZGVsZWdhdGUuZ2V0KCkpXTsKIApAQCAtNTI5LDcgKzUyOSw3IEBAIHZvaWQg
UGxhdGZvcm1DQUxheWVyQ29jb2E6OnJlbW92ZUFuaW1hdGlvbkZvcktleShjb25zdCBTdHJpbmcm
IGtleSkKIAogUmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+IFBsYXRmb3JtQ0FMYXllckNvY29h
OjphbmltYXRpb25Gb3JLZXkoY29uc3QgU3RyaW5nJiBrZXkpCiB7Ci0gICAgQ0FQcm9wZXJ0eUFu
aW1hdGlvbiogcHJvcGVydHlBbmltYXRpb24gPSBzdGF0aWNfY2FzdDxDQVByb3BlcnR5QW5pbWF0
aW9uKj4oW21fbGF5ZXIgYW5pbWF0aW9uRm9yS2V5OmtleV0pOworICAgIENBQW5pbWF0aW9uICpw
cm9wZXJ0eUFuaW1hdGlvbiA9IHN0YXRpY19jYXN0PENBQW5pbWF0aW9uICo+KFttX2xheWVyIGFu
aW1hdGlvbkZvcktleTprZXldKTsKICAgICBpZiAoIXByb3BlcnR5QW5pbWF0aW9uKQogICAgICAg
ICByZXR1cm4gbnVsbHB0cjsKICAgICByZXR1cm4gUGxhdGZvcm1DQUFuaW1hdGlvbkNvY29hOjpj
cmVhdGUocHJvcGVydHlBbmltYXRpb24pOwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvcGxh
dGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uY3BwIGIvU291cmNl
L1dlYkNvcmUvcGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4u
Y3BwCmluZGV4IDA3NDRkNzUwNzkwY2U4MTNkYmY5MTg2NmI4MzQ3Y2UzMzMwMDAzNDguLmY1NTRh
NDY0NmQ0NWJkNjRiOGMzZDdiNWM0MjU4OWFiOWJkYWE0ZjUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9X
ZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2luLmNw
cAorKysgYi9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1D
QUFuaW1hdGlvbldpbi5jcHAKQEAgLTE1Nyw4ICsxNTcsMTAgQEAgUGxhdGZvcm1DQUFuaW1hdGlv
bldpbjo6UGxhdGZvcm1DQUFuaW1hdGlvbldpbihBbmltYXRpb25UeXBlIHR5cGUsIGNvbnN0IFN0
cmluZyYKIHsKICAgICBpZiAodHlwZSA9PSBCYXNpYykKICAgICAgICAgbV9hbmltYXRpb24gPSBh
ZG9wdENGKENBQ0ZBbmltYXRpb25DcmVhdGUoa0NBQ0ZCYXNpY0FuaW1hdGlvbikpOwotICAgIGVs
c2UKKyAgICBlbHNlIGlmICh0eXBlID09IEtleWZyYW1lKQogICAgICAgICBtX2FuaW1hdGlvbiA9
IGFkb3B0Q0YoQ0FDRkFuaW1hdGlvbkNyZWF0ZShrQ0FDRktleWZyYW1lQW5pbWF0aW9uKSk7Cisg
ICAgZWxzZSBpZiAodHlwZSA9PSBHcm91cCkKKyAgICAgICAgbV9hbmltYXRpb24gPSBhZG9wdENG
KENBQ0ZBbmltYXRpb25DcmVhdGUoa0NBQ0ZBbmltYXRpb25Hcm91cCkpOwogICAgIAogICAgIENB
Q0ZBbmltYXRpb25TZXRLZXlQYXRoKG1fYW5pbWF0aW9uLmdldCgpLCBrZXlQYXRoLmNyZWF0ZUNG
U3RyaW5nKCkuZ2V0KCkpOwogfQpAQCAtMTY5LDYgKzE3MSw4IEBAIFBsYXRmb3JtQ0FBbmltYXRp
b25XaW46OlBsYXRmb3JtQ0FBbmltYXRpb25XaW4oUGxhdGZvcm1BbmltYXRpb25SZWYgYW5pbWF0
aW9uKQogICAgICAgICBzZXRUeXBlKEJhc2ljKTsKICAgICBlbHNlIGlmIChDQUNGQW5pbWF0aW9u
R2V0Q2xhc3MoYW5pbWF0aW9uKSA9PSBrQ0FDRktleWZyYW1lQW5pbWF0aW9uKQogICAgICAgICBz
ZXRUeXBlKEtleWZyYW1lKTsKKyAgICBlbHNlIGlmIChDQUNGQW5pbWF0aW9uR2V0Q2xhc3MoYW5p
bWF0aW9uKSA9PSBrQ0FDRkFuaW1hdGlvbkdyb3VwKQorICAgICAgICBzZXRUeXBlKEdyb3VwKTsK
ICAgICBlbHNlIHsKICAgICAgICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7CiAgICAgICAgIHJldHVy
bjsKQEAgLTU1Myw0ICs1NTcsMjAgQEAgdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uV2luOjpjb3B5
VGltaW5nRnVuY3Rpb25zRnJvbShjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uJgogICAgIENBQ0ZB
bmltYXRpb25TZXRUaW1pbmdGdW5jdGlvbnMobV9hbmltYXRpb24uZ2V0KCksIENBQ0ZBbmltYXRp
b25HZXRUaW1pbmdGdW5jdGlvbnMoZG93bmNhc3Q8UGxhdGZvcm1DQUFuaW1hdGlvbldpbj4odmFs
dWUpLnBsYXRmb3JtQW5pbWF0aW9uKCkpKTsKIH0KIAordm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9u
V2luOjpzZXRBbmltYXRpb25zKGNvbnN0IFZlY3RvcjxSZWZQdHI8UGxhdGZvcm1DQUFuaW1hdGlv
bj4+JiB2YWx1ZSkKK3sKKyAgICBhdXRvIGFycmF5ID0gYWRvcHRDRihDRkFycmF5Q3JlYXRlTXV0
YWJsZSgwLCB2YWx1ZS5zaXplKCksICZrQ0ZUeXBlQXJyYXlDYWxsQmFja3MpKTsKKyAgICBmb3Ig
KGF1dG8mIGFuaW1hdGlvbiA6IHZhbHVlKSB7CisgICAgICAgIGlmIChpczxQbGF0Zm9ybUNBQW5p
bWF0aW9uV2luPihhbmltYXRpb24uZ2V0KCkpKQorICAgICAgICAgICAgQ0ZBcnJheUFwcGVuZFZh
bHVlKGFycmF5LmdldCgpLCBkb3duY2FzdDxQbGF0Zm9ybUNBQW5pbWF0aW9uV2luPigqYW5pbWF0
aW9uKS5tX2FuaW1hdGlvbi5nZXQoKSk7CisgICAgfQorCisgICAgQ0FDRkFuaW1hdGlvblNldEFu
aW1hdGlvbnMobV9hbmltYXRpb24uZ2V0KCksIGFycmF5LmdldCgpKTsKK30KKwordm9pZCBQbGF0
Zm9ybUNBQW5pbWF0aW9uV2luOjpjb3B5QW5pbWF0aW9uc0Zyb20oY29uc3QgUGxhdGZvcm1DQUFu
aW1hdGlvbiYgdmFsdWUpCit7CisgICAgQ0FDRkFuaW1hdGlvblNldEFuaW1hdGlvbnMobV9hbmlt
YXRpb24uZ2V0KCksIENBQ0ZBbmltYXRpb25HZXRBbmltYXRpb25zKGRvd25jYXN0PFBsYXRmb3Jt
Q0FBbmltYXRpb25XaW4+KHZhbHVlKS5wbGF0Zm9ybUFuaW1hdGlvbigpKSk7Cit9CisKICNlbmRp
ZiAvLyBQTEFURk9STShXSU4pCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9wbGF0Zm9ybS9n
cmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5oIGIvU291cmNlL1dlYkNvcmUv
cGxhdGZvcm0vZ3JhcGhpY3MvY2Evd2luL1BsYXRmb3JtQ0FBbmltYXRpb25XaW4uaAppbmRleCAw
OGJiN2E0MGZkMzEwNGQwNDk5NDQ2Mjc5MzBiMDcwNjI0NTcyMmJiLi5mN2Q0YzRkNTI4NzUwM2Ex
YmU5ZTBjNTYwMDk5MjBiNjA0N2VlMGU0IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9wbGF0
Zm9ybS9ncmFwaGljcy9jYS93aW4vUGxhdGZvcm1DQUFuaW1hdGlvbldpbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL3BsYXRmb3JtL2dyYXBoaWNzL2NhL3dpbi9QbGF0Zm9ybUNBQW5pbWF0aW9uV2lu
LmgKQEAgLTExMyw2ICsxMTMsMTAgQEAgcHVibGljOgogICAgIHZvaWQgc2V0VGltaW5nRnVuY3Rp
b25zKGNvbnN0IFZlY3Rvcjxjb25zdCBUaW1pbmdGdW5jdGlvbio+JiwgYm9vbCByZXZlcnNlID0g
ZmFsc2UpIG92ZXJyaWRlOwogICAgIHZvaWQgY29weVRpbWluZ0Z1bmN0aW9uc0Zyb20oY29uc3Qg
UGxhdGZvcm1DQUFuaW1hdGlvbiYpIG92ZXJyaWRlOwogCisgICAgLy8gQW5pbWF0aW9uIGdyb3Vw
IHByb3BlcnRpZXMuCisgICAgdm9pZCBzZXRBbmltYXRpb25zKGNvbnN0IFZlY3RvcjxSZWZQdHI8
UGxhdGZvcm1DQUFuaW1hdGlvbj4+JikgZmluYWw7CisgICAgdm9pZCBjb3B5QW5pbWF0aW9uc0Zy
b20oY29uc3QgUGxhdGZvcm1DQUFuaW1hdGlvbiYpIGZpbmFsOworCiBwcml2YXRlOgogICAgIFBs
YXRmb3JtQ0FBbmltYXRpb25XaW4oQW5pbWF0aW9uVHlwZSwgY29uc3QgU3RyaW5nJiBrZXlQYXRo
KTsKICAgICBQbGF0Zm9ybUNBQW5pbWF0aW9uV2luKFBsYXRmb3JtQW5pbWF0aW9uUmVmKTsKZGlm
ZiAtLWdpdCBhL1NvdXJjZS9XZWJLaXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJl
ZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlLmggYi9Tb3VyY2UvV2ViS2l0L1dlYlByb2Nlc3Mv
V2ViUGFnZS9SZW1vdGVMYXllclRyZWUvUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZS5oCmluZGV4
IDU4YjNlNzkwMzRjY2YwN2UxZWYyMzZkNzllYTYxNTVhODY0NTVjYzQuLmYwMzFjZGUwOTU5NGJh
YjM1MjMxYzAxYmUwMjQ2MjE5N2Y4M2JiMWUgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJLaXQvV2Vi
UHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3Rl
LmgKKysrIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVl
L1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUuaApAQCAtMTE5LDYgKzExOSwxMCBAQCBwdWJsaWM6
CiAgICAgdm9pZCBzZXRUaW1pbmdGdW5jdGlvbnMoY29uc3QgVmVjdG9yPGNvbnN0IFdlYkNvcmU6
OlRpbWluZ0Z1bmN0aW9uKj4mLCBib29sIHJldmVyc2UgPSBmYWxzZSkgb3ZlcnJpZGU7CiAgICAg
dm9pZCBjb3B5VGltaW5nRnVuY3Rpb25zRnJvbShjb25zdCBXZWJDb3JlOjpQbGF0Zm9ybUNBQW5p
bWF0aW9uJikgb3ZlcnJpZGU7CiAKKyAgICAvLyBBbmltYXRpb24gZ3JvdXAgcHJvcGVydGllcy4K
KyAgICB2b2lkIHNldEFuaW1hdGlvbnMoY29uc3QgVmVjdG9yPFJlZlB0cjxQbGF0Zm9ybUNBQW5p
bWF0aW9uPj4mKSBmaW5hbDsKKyAgICB2b2lkIGNvcHlBbmltYXRpb25zRnJvbShjb25zdCBQbGF0
Zm9ybUNBQW5pbWF0aW9uJikgZmluYWw7CisKICAgICBBbmltYXRpb25UeXBlIGFuaW1hdGlvblR5
cGUoKSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnRpZXMuYW5pbWF0aW9uVHlwZTsgfQogICAgIHZv
aWQgc2V0SGFzRXhwbGljaXRCZWdpblRpbWUoYm9vbCBoYXNFeHBsaWNpdEJlZ2luVGltZSkgeyBt
X3Byb3BlcnRpZXMuaGFzRXhwbGljaXRCZWdpblRpbWUgPSBoYXNFeHBsaWNpdEJlZ2luVGltZTsg
fQogICAgIGJvb2wgaGFzRXhwbGljaXRCZWdpblRpbWUoKSBjb25zdCB7IHJldHVybiBtX3Byb3Bl
cnRpZXMuaGFzRXhwbGljaXRCZWdpblRpbWU7IH0KQEAgLTI4OSw2ICsyOTMsOCBAQCBwdWJsaWM6
CiAgICAgICAgIFZlY3RvcjxLZXlmcmFtZVZhbHVlPiBrZXlWYWx1ZXM7CiAgICAgICAgIFZlY3Rv
cjxmbG9hdD4ga2V5VGltZXM7CiAgICAgICAgIFZlY3RvcjxSZWZQdHI8V2ViQ29yZTo6VGltaW5n
RnVuY3Rpb24+PiB0aW1pbmdGdW5jdGlvbnM7CisKKyAgICAgICAgVmVjdG9yPFByb3BlcnRpZXM+
IGFuaW1hdGlvbnM7CiAgICAgfTsKIAogICAgIGNvbnN0IFByb3BlcnRpZXMmIHByb3BlcnRpZXMo
KSBjb25zdCB7IHJldHVybiBtX3Byb3BlcnRpZXM7IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJL
aXQvV2ViUHJvY2Vzcy9XZWJQYWdlL1JlbW90ZUxheWVyVHJlZS9QbGF0Zm9ybUNBQW5pbWF0aW9u
UmVtb3RlLm1tIGIvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJU
cmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW0KaW5kZXggZGU3ZDcyODAyOTJkMDUwZDcy
ZDA2YWM5NGFiOTMxY2YyM2ZhNGU4ZS4uZWE5OTJhYmM2ODZiZWRjYmRlYThlMzJjYjgzY2Y4ZmUw
YzYwYjQ1OCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVt
b3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUubW0KKysrIGIvU291cmNlL1dl
YktpdC9XZWJQcm9jZXNzL1dlYlBhZ2UvUmVtb3RlTGF5ZXJUcmVlL1BsYXRmb3JtQ0FBbmltYXRp
b25SZW1vdGUubW0KQEAgLTI0MSw2ICsyNDEsOCBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25S
ZW1vdGU6OlByb3BlcnRpZXM6OmVuY29kZShJUEM6OkVuY29kZXImIGVuY29kZXIpIGNvbnN0CiAg
ICAgZW5jb2RlciA8PCBzdGF0aWNfY2FzdDx1aW50NjRfdD4odGltaW5nRnVuY3Rpb25zLnNpemUo
KSk7CiAgICAgZm9yIChjb25zdCBhdXRvJiB0aW1pbmdGdW5jdGlvbiA6IHRpbWluZ0Z1bmN0aW9u
cykKICAgICAgICAgZW5jb2RlVGltaW5nRnVuY3Rpb24oZW5jb2RlciwgdGltaW5nRnVuY3Rpb24u
Z2V0KCkpOworCisgICAgZW5jb2RlciA8PCBhbmltYXRpb25zOwogfQogCiBPcHRpb25hbDxQbGF0
Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpQcm9wZXJ0aWVzPiBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVt
b3RlOjpQcm9wZXJ0aWVzOjpkZWNvZGUoSVBDOjpEZWNvZGVyJiBkZWNvZGVyKQpAQCAtMzIwLDYg
KzMyMiw5IEBAIE9wdGlvbmFsPFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OlByb3BlcnRpZXM+
IFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OlByb3BlCiAgICAgICAgIH0KICAgICB9CiAKKyAg
ICBpZiAoIWRlY29kZXIuZGVjb2RlKHByb3BlcnRpZXMuYW5pbWF0aW9ucykpCisgICAgICAgIHJl
dHVybiBXVEY6Om51bGxvcHQ7CisKICAgICByZXR1cm4gV1RGTW92ZShwcm9wZXJ0aWVzKTsKIH0K
ICAgICAKQEAgLTM1NSw3ICszNjAsOSBAQCBSZWY8UGxhdGZvcm1DQUFuaW1hdGlvbj4gUGxhdGZv
cm1DQUFuaW1hdGlvblJlbW90ZTo6Y29weSgpIGNvbnN0CiAgICAgICAgIGFuaW1hdGlvbi0+Y29w
eUZyb21WYWx1ZUZyb20oKnRoaXMpOwogICAgICAgICBhbmltYXRpb24tPmNvcHlUb1ZhbHVlRnJv
bSgqdGhpcyk7CiAgICAgfQotICAgIAorCisgICAgYW5pbWF0aW9uLT5jb3B5QW5pbWF0aW9uc0Zy
b20oKnRoaXMpOworCiAgICAgcmV0dXJuIGFuaW1hdGlvbjsKIH0KIApAQCAtNzExLDYgKzcxOCwx
OSBAQCB2b2lkIFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGU6OmNvcHlUaW1pbmdGdW5jdGlvbnNG
cm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpbwogICAgIG1fcHJvcGVydGllcy5yZXZlcnNlVGlt
aW5nRnVuY3Rpb25zID0gb3RoZXIubV9wcm9wZXJ0aWVzLnJldmVyc2VUaW1pbmdGdW5jdGlvbnM7
CiB9CiAKK3ZvaWQgUGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZTo6c2V0QW5pbWF0aW9ucyhjb25z
dCBWZWN0b3I8UmVmUHRyPFBsYXRmb3JtQ0FBbmltYXRpb24+PiYgdmFsdWVzKQoreworICAgIG1f
cHJvcGVydGllcy5hbmltYXRpb25zID0gdmFsdWVzLm1hcChbXShhdXRvJiB2YWx1ZSkgeworICAg
ICAgICByZXR1cm4gZG93bmNhc3Q8UGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZT4odmFsdWUuZ2V0
KCkpLT5wcm9wZXJ0aWVzKCk7CisgICAgfSk7Cit9CisKK3ZvaWQgUGxhdGZvcm1DQUFuaW1hdGlv
blJlbW90ZTo6Y29weUFuaW1hdGlvbnNGcm9tKGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb24mIHZh
bHVlKQoreworICAgIGNvbnN0IFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUmIG90aGVyID0gZG93
bmNhc3Q8UGxhdGZvcm1DQUFuaW1hdGlvblJlbW90ZT4odmFsdWUpOworICAgIG1fcHJvcGVydGll
cy5hbmltYXRpb25zID0gb3RoZXIubV9wcm9wZXJ0aWVzLmFuaW1hdGlvbnM7Cit9CisKIHN0YXRp
YyBOU09iamVjdCogYW5pbWF0aW9uVmFsdWVGcm9tS2V5ZnJhbWVWYWx1ZShjb25zdCBQbGF0Zm9y
bUNBQW5pbWF0aW9uUmVtb3RlOjpLZXlmcmFtZVZhbHVlJiBrZXlmcmFtZVZhbHVlKQogewogICAg
IHN3aXRjaCAoa2V5ZnJhbWVWYWx1ZS5rZXlmcmFtZVR5cGUoKSkgewpAQCAtNzM0LDEzICs3NTQs
MTMgQEAgc3RhdGljIE5TT2JqZWN0KiBhbmltYXRpb25WYWx1ZUZyb21LZXlmcmFtZVZhbHVlKGNv
bnN0IFBsYXRmb3JtQ0FBbmltYXRpb25SZW1vdGUKICAgICB9CiB9CiAKLXN0YXRpYyB2b2lkIGFk
ZEFuaW1hdGlvblRvTGF5ZXIoQ0FMYXllciAqbGF5ZXIsIFJlbW90ZUxheWVyVHJlZUhvc3QqIGxh
eWVyVHJlZUhvc3QsIGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9u
UmVtb3RlOjpQcm9wZXJ0aWVzJiBwcm9wZXJ0aWVzKQorc3RhdGljIFJldGFpblB0cjxDQUFuaW1h
dGlvbj4gY3JlYXRlQW5pbWF0aW9uKENBTGF5ZXIgKmxheWVyLCBSZW1vdGVMYXllclRyZWVIb3N0
KiBsYXllclRyZWVIb3N0LCBjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpQcm9wZXJ0
aWVzJiBwcm9wZXJ0aWVzKQogewotICAgIFJldGFpblB0cjxDQVByb3BlcnR5QW5pbWF0aW9uPiBj
YUFuaW1hdGlvbjsKKyAgICBSZXRhaW5QdHI8Q0FBbmltYXRpb24+IGNhQW5pbWF0aW9uOwogICAg
IHN3aXRjaCAocHJvcGVydGllcy5hbmltYXRpb25UeXBlKSB7CiAgICAgY2FzZSBQbGF0Zm9ybUNB
QW5pbWF0aW9uOjpCYXNpYzogewogICAgICAgICBhdXRvIGJhc2ljQW5pbWF0aW9uID0gW0NBQmFz
aWNBbmltYXRpb24gYW5pbWF0aW9uV2l0aEtleVBhdGg6cHJvcGVydGllcy5rZXlQYXRoXTsKLSAg
ICAgICAgCisKICAgICAgICAgaWYgKHByb3BlcnRpZXMua2V5VmFsdWVzLnNpemUoKSA+IDEpIHsK
ICAgICAgICAgICAgIFtiYXNpY0FuaW1hdGlvbiBzZXRGcm9tVmFsdWU6YW5pbWF0aW9uVmFsdWVG
cm9tS2V5ZnJhbWVWYWx1ZShwcm9wZXJ0aWVzLmtleVZhbHVlc1swXSldOwogICAgICAgICAgICAg
W2Jhc2ljQW5pbWF0aW9uIHNldFRvVmFsdWU6YW5pbWF0aW9uVmFsdWVGcm9tS2V5ZnJhbWVWYWx1
ZShwcm9wZXJ0aWVzLmtleVZhbHVlc1sxXSldOwpAQCAtNzUyLDYgKzc3MiwxOCBAQCBzdGF0aWMg
dm9pZCBhZGRBbmltYXRpb25Ub0xheWVyKENBTGF5ZXIgKmxheWVyLCBSZW1vdGVMYXllclRyZWVI
b3N0KiBsYXllclRyZWVIbwogICAgICAgICBjYUFuaW1hdGlvbiA9IGJhc2ljQW5pbWF0aW9uOwog
ICAgICAgICBicmVhazsKICAgICB9CisgICAgY2FzZSBQbGF0Zm9ybUNBQW5pbWF0aW9uOjpHcm91
cDogeworICAgICAgICBhdXRvIGFuaW1hdGlvbkdyb3VwID0gW0NBQW5pbWF0aW9uR3JvdXAgYW5p
bWF0aW9uXTsKKworICAgICAgICBpZiAocHJvcGVydGllcy5hbmltYXRpb25zLnNpemUoKSkgewor
ICAgICAgICAgICAgW2FuaW1hdGlvbkdyb3VwIHNldEFuaW1hdGlvbnM6Y3JlYXRlTlNBcnJheShw
cm9wZXJ0aWVzLmFuaW1hdGlvbnMsIFsmXSAoYXV0byYgYW5pbWF0aW9uUHJvcGVydGllcykgewor
ICAgICAgICAgICAgICAgIHJldHVybiBjcmVhdGVBbmltYXRpb24obGF5ZXIsIGxheWVyVHJlZUhv
c3QsIGFuaW1hdGlvblByb3BlcnRpZXMpLmdldCgpOworICAgICAgICAgICAgfSkuZ2V0KCldOwor
ICAgICAgICB9CisKKyAgICAgICAgY2FBbmltYXRpb24gPSBhbmltYXRpb25Hcm91cDsKKyAgICAg
ICAgYnJlYWs7CisgICAgfQogICAgIGNhc2UgUGxhdGZvcm1DQUFuaW1hdGlvbjo6S2V5ZnJhbWU6
IHsKICAgICAgICAgYXV0byBrZXlmcmFtZUFuaW1hdGlvbiA9IFtDQUtleWZyYW1lQW5pbWF0aW9u
IGFuaW1hdGlvbldpdGhLZXlQYXRoOnByb3BlcnRpZXMua2V5UGF0aF07CiAKQEAgLTc3NSwxOCAr
ODA3LDE4IEBAIHN0YXRpYyB2b2lkIGFkZEFuaW1hdGlvblRvTGF5ZXIoQ0FMYXllciAqbGF5ZXIs
IFJlbW90ZUxheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvCiAgICAgICAgICAgICAgICAgcmV0dXJu
IHRvQ0FNZWRpYVRpbWluZ0Z1bmN0aW9uKGZ1bmN0aW9uLmdldCgpLCBwcm9wZXJ0aWVzLnJldmVy
c2VUaW1pbmdGdW5jdGlvbnMpOwogICAgICAgICAgICAgfSkuZ2V0KCldOwogICAgICAgICB9Ci0g
ICAgICAgIAorCiAgICAgICAgIGNhQW5pbWF0aW9uID0ga2V5ZnJhbWVBbmltYXRpb247CiAgICAg
ICAgIGJyZWFrOwogICAgIH0KICAgICBjYXNlIFBsYXRmb3JtQ0FBbmltYXRpb246OlNwcmluZzog
ewogICAgICAgICBhdXRvIHNwcmluZ0FuaW1hdGlvbiA9IFtDQVNwcmluZ0FuaW1hdGlvbiBhbmlt
YXRpb25XaXRoS2V5UGF0aDpwcm9wZXJ0aWVzLmtleVBhdGhdOwotICAgICAgICAKKwogICAgICAg
ICBpZiAocHJvcGVydGllcy5rZXlWYWx1ZXMuc2l6ZSgpID4gMSkgewogICAgICAgICAgICAgW3Nw
cmluZ0FuaW1hdGlvbiBzZXRGcm9tVmFsdWU6YW5pbWF0aW9uVmFsdWVGcm9tS2V5ZnJhbWVWYWx1
ZShwcm9wZXJ0aWVzLmtleVZhbHVlc1swXSldOwogICAgICAgICAgICAgW3NwcmluZ0FuaW1hdGlv
biBzZXRUb1ZhbHVlOmFuaW1hdGlvblZhbHVlRnJvbUtleWZyYW1lVmFsdWUocHJvcGVydGllcy5r
ZXlWYWx1ZXNbMV0pXTsKICAgICAgICAgfQotICAgICAgICAKKwogICAgICAgICBpZiAocHJvcGVy
dGllcy50aW1pbmdGdW5jdGlvbnMuc2l6ZSgpKSB7CiAgICAgICAgICAgICBhdXRvJiB0aW1pbmdG
dW5jdGlvbiA9IHByb3BlcnRpZXMudGltaW5nRnVuY3Rpb25zWzBdOwogICAgICAgICAgICAgaWYg
KHRpbWluZ0Z1bmN0aW9uLT5pc1NwcmluZ1RpbWluZ0Z1bmN0aW9uKCkpIHsKQEAgLTgwMSw3ICs4
MzMsNyBAQCBzdGF0aWMgdm9pZCBhZGRBbmltYXRpb25Ub0xheWVyKENBTGF5ZXIgKmxheWVyLCBS
ZW1vdGVMYXllclRyZWVIb3N0KiBsYXllclRyZWVIbwogICAgICAgICBicmVhazsKICAgICB9CiAg
ICAgfQotICAgIAorCiAgICAgW2NhQW5pbWF0aW9uIHNldEJlZ2luVGltZTpwcm9wZXJ0aWVzLmJl
Z2luVGltZV07CiAgICAgW2NhQW5pbWF0aW9uIHNldER1cmF0aW9uOnByb3BlcnRpZXMuZHVyYXRp
b25dOwogICAgIFtjYUFuaW1hdGlvbiBzZXRUaW1lT2Zmc2V0OnByb3BlcnRpZXMudGltZU9mZnNl
dF07CkBAIC04MDksMjggKzg0MSwzNSBAQCBzdGF0aWMgdm9pZCBhZGRBbmltYXRpb25Ub0xheWVy
KENBTGF5ZXIgKmxheWVyLCBSZW1vdGVMYXllclRyZWVIb3N0KiBsYXllclRyZWVIbwogICAgIFtj
YUFuaW1hdGlvbiBzZXRTcGVlZDpwcm9wZXJ0aWVzLnNwZWVkXTsKICAgICBbY2FBbmltYXRpb24g
c2V0QXV0b3JldmVyc2VzOnByb3BlcnRpZXMuYXV0b1JldmVyc2VzXTsKICAgICBbY2FBbmltYXRp
b24gc2V0UmVtb3ZlZE9uQ29tcGxldGlvbjpwcm9wZXJ0aWVzLnJlbW92ZWRPbkNvbXBsZXRpb25d
OwotICAgIFtjYUFuaW1hdGlvbiBzZXRBZGRpdGl2ZTpwcm9wZXJ0aWVzLmFkZGl0aXZlXTsKLSAg
ICAKKworICAgIGlmIChbY2FBbmltYXRpb24gaXNLaW5kT2ZDbGFzczpbQ0FQcm9wZXJ0eUFuaW1h
dGlvbiBjbGFzc11dKSB7CisgICAgICAgIFsoQ0FQcm9wZXJ0eUFuaW1hdGlvbiAqKWNhQW5pbWF0
aW9uIHNldEFkZGl0aXZlOnByb3BlcnRpZXMuYWRkaXRpdmVdOworICAgICAgICBpZiAocHJvcGVy
dGllcy52YWx1ZUZ1bmN0aW9uICE9IFBsYXRmb3JtQ0FBbmltYXRpb246Ok5vVmFsdWVGdW5jdGlv
bikKKyAgICAgICAgICAgIFsoQ0FQcm9wZXJ0eUFuaW1hdGlvbiAqKWNhQW5pbWF0aW9uIHNldFZh
bHVlRnVuY3Rpb246W0NBVmFsdWVGdW5jdGlvbiBmdW5jdGlvbldpdGhOYW1lOnRvQ0FWYWx1ZUZ1
bmN0aW9uVHlwZShwcm9wZXJ0aWVzLnZhbHVlRnVuY3Rpb24pXV07CisgICAgfQorCiAgICAgaWYg
KHByb3BlcnRpZXMuZmlsbE1vZGUgIT0gUGxhdGZvcm1DQUFuaW1hdGlvbjo6Tm9GaWxsTW9kZSkK
ICAgICAgICAgW2NhQW5pbWF0aW9uIHNldEZpbGxNb2RlOnRvQ0FGaWxsTW9kZVR5cGUocHJvcGVy
dGllcy5maWxsTW9kZSldOwogCi0gICAgaWYgKHByb3BlcnRpZXMudmFsdWVGdW5jdGlvbiAhPSBQ
bGF0Zm9ybUNBQW5pbWF0aW9uOjpOb1ZhbHVlRnVuY3Rpb24pCi0gICAgICAgIFtjYUFuaW1hdGlv
biBzZXRWYWx1ZUZ1bmN0aW9uOltDQVZhbHVlRnVuY3Rpb24gZnVuY3Rpb25XaXRoTmFtZTp0b0NB
VmFsdWVGdW5jdGlvblR5cGUocHJvcGVydGllcy52YWx1ZUZ1bmN0aW9uKV1dOwotICAgIAogICAg
IGlmIChwcm9wZXJ0aWVzLmhhc0V4cGxpY2l0QmVnaW5UaW1lKQogICAgICAgICBbY2FBbmltYXRp
b24gc2V0VmFsdWU6QFlFUyBmb3JLZXk6V0tFeHBsaWNpdEJlZ2luVGltZUZsYWddOwotICAgIAor
CiAgICAgaWYgKGxheWVyVHJlZUhvc3QpIHsKICAgICAgICAgR3JhcGhpY3NMYXllcjo6UGxhdGZv
cm1MYXllcklEIGxheWVySUQgPSBSZW1vdGVMYXllclRyZWVOb2RlOjpsYXllcklEKGxheWVyKTsK
LSAgICAKKwogICAgICAgICBSZXRhaW5QdHI8V0tBbmltYXRpb25EZWxlZ2F0ZT4mIGRlbGVnYXRl
ID0gbGF5ZXJUcmVlSG9zdC0+YW5pbWF0aW9uRGVsZWdhdGVzKCkuYWRkKGxheWVySUQsIG51bGxw
dHIpLml0ZXJhdG9yLT52YWx1ZTsKICAgICAgICAgaWYgKCFkZWxlZ2F0ZSkKICAgICAgICAgICAg
IGRlbGVnYXRlID0gYWRvcHROUyhbW1dLQW5pbWF0aW9uRGVsZWdhdGUgYWxsb2NdIGluaXRXaXRo
TGF5ZXJJRDpsYXllcklEIGxheWVyVHJlZUhvc3Q6bGF5ZXJUcmVlSG9zdF0pOwogCiAgICAgICAg
IFtjYUFuaW1hdGlvbiBzZXREZWxlZ2F0ZTpkZWxlZ2F0ZS5nZXQoKV07CiAgICAgfQotICAgIAot
ICAgIFtsYXllciBhZGRBbmltYXRpb246Y2FBbmltYXRpb24uZ2V0KCkgZm9yS2V5OmtleV07CisK
KyAgICByZXR1cm4gY2FBbmltYXRpb247Cit9CisKK3N0YXRpYyB2b2lkIGFkZEFuaW1hdGlvblRv
TGF5ZXIoQ0FMYXllciAqbGF5ZXIsIFJlbW90ZUxheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3Qs
IGNvbnN0IFN0cmluZyYga2V5LCBjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjpQcm9w
ZXJ0aWVzJiBwcm9wZXJ0aWVzKQoreworICAgIFtsYXllciBhZGRBbmltYXRpb246Y3JlYXRlQW5p
bWF0aW9uKGxheWVyLCBsYXllclRyZWVIb3N0LCBwcm9wZXJ0aWVzKS5nZXQoKSBmb3JLZXk6a2V5
XTsKIH0KIAogdm9pZCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVtb3RlOjp1cGRhdGVMYXllckFuaW1h
dGlvbnMoQ0FMYXllciAqbGF5ZXIsIFJlbW90ZUxheWVyVHJlZUhvc3QqIGxheWVyVHJlZUhvc3Qs
IGNvbnN0IEFuaW1hdGlvbnNMaXN0JiBhbmltYXRpb25zVG9BZGQsIGNvbnN0IEhhc2hTZXQ8U3Ry
aW5nPiYgYW5pbWF0aW9uc1RvUmVtb3ZlKQpAQCAtOTQzLDYgKzk4MiwyNCBAQCBUZXh0U3RyZWFt
JiBvcGVyYXRvcjw8KFRleHRTdHJlYW0mIHRzLCBjb25zdCBQbGF0Zm9ybUNBQW5pbWF0aW9uUmVt
b3RlOjpQcm9wZXJ0aQogICAgIHRzLmRlY3JlYXNlSW5kZW50KCk7CiAgICAgdHMuZGVjcmVhc2VJ
bmRlbnQoKTsKIAorICAgIGlmICghYW5pbWF0aW9uLmFuaW1hdGlvbnMuaXNFbXB0eSgpKSB7Cisg
ICAgICAgIHRzIDw8ICJcbiI7CisgICAgICAgIHRzLmluY3JlYXNlSW5kZW50KCk7CisgICAgICAg
IHRzLndyaXRlSW5kZW50KCk7CisgICAgICAgIHRzIDw8ICIoIiA8PCAiYW5pbWF0aW9ucyI7Cisg
ICAgICAgIHRzLmluY3JlYXNlSW5kZW50KCk7CisKKyAgICAgICAgZm9yIChhdXRvJiBjaGlsZEFu
aW1hdGlvbiA6IGFuaW1hdGlvbi5hbmltYXRpb25zKSB7CisgICAgICAgICAgICB0cyA8PCAiXG4i
OworICAgICAgICAgICAgdHMud3JpdGVJbmRlbnQoKTsKKyAgICAgICAgICAgIHRzIDw8ICIoYW5p
bWF0aW9uICIgPDwgY2hpbGRBbmltYXRpb247CisgICAgICAgICAgICB0cyA8PCAiKSI7CisgICAg
ICAgIH0KKworICAgICAgICB0cy5kZWNyZWFzZUluZGVudCgpOworICAgICAgICB0cy5kZWNyZWFz
ZUluZGVudCgpOworICAgIH0KKwogICAgIHJldHVybiB0czsKIH0KIAo=
</data>

          </attachment>
      

    </bug>

</bugzilla>