<?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>216949</bug_id>
          
          <creation_ts>2020-09-24 16:35:07 -0700</creation_ts>
          <short_desc>Support EXT_float_blend</short_desc>
          <delta_ts>2020-12-15 12:20:35 -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>WebGL</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>216014</blocked>
          <everconfirmed>1</everconfirmed>
          <reporter name="James Darpinian">jdarpinian</reporter>
          <assigned_to name="James Darpinian">jdarpinian</assigned_to>
          <cc>annulen</cc>
    
    <cc>cdumez</cc>
    
    <cc>changseok</cc>
    
    <cc>dino</cc>
    
    <cc>enowak</cc>
    
    <cc>esprehn+autocc</cc>
    
    <cc>ews-watchlist</cc>
    
    <cc>graouts</cc>
    
    <cc>gyuyoung.kim</cc>
    
    <cc>kbr</cc>
    
    <cc>kondapallykalyan</cc>
    
    <cc>ryuan.choi</cc>
    
    <cc>sergio</cc>
    
    <cc>webkit-bug-importer</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1691709</commentid>
    <comment_count>0</comment_count>
    <who name="James Darpinian">jdarpinian</who>
    <bug_when>2020-09-24 16:35:07 -0700</bug_when>
    <thetext>Support EXT_float_blend</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691716</commentid>
    <comment_count>1</comment_count>
      <attachid>409636</attachid>
    <who name="James Darpinian">jdarpinian</who>
    <bug_when>2020-09-24 16:44:41 -0700</bug_when>
    <thetext>Created attachment 409636
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691717</commentid>
    <comment_count>2</comment_count>
    <who name="EWS Watchlist">ews-watchlist</who>
    <bug_when>2020-09-24 16:45:46 -0700</bug_when>
    <thetext>Note that there are important steps to take when updating ANGLE. See https://trac.webkit.org/wiki/UpdatingANGLE</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691719</commentid>
    <comment_count>3</comment_count>
      <attachid>409637</attachid>
    <who name="James Darpinian">jdarpinian</who>
    <bug_when>2020-09-24 17:02:57 -0700</bug_when>
    <thetext>Created attachment 409637
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1691735</commentid>
    <comment_count>4</comment_count>
      <attachid>409637</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2020-09-24 17:57:20 -0700</bug_when>
    <thetext>Comment on attachment 409637
Patch

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

Looks good overall! The bulk of this patch is new conformance suite files which it looks like were automatically and maybe accidentally imported; please remove those so that the patch can stay better focused. Thanks.

&gt; Source/ThirdParty/ANGLE/src/libANGLE/renderer/gl/renderergl_utils.cpp:1485
&gt; +                             functions-&gt;isAtLeastGLES(gl::Version(3, 2));

Double-checked the ES 3.2 spec, and the reason this is implicitly supported is that floating-point framebuffers were subsumed into the core ES 3.2 spec without the restrictions listed in EXT_color_buffer_float. Not sure whether that&apos;s worth a comment.

&gt; Source/WebCore/html/canvas/EXTFloatBlend.cpp:2
&gt; + * Copyright (C) 2014 Apple Inc. All rights reserved.

2020? Here and below.

&gt; LayoutTests/webgl/resources/webgl_test_files/js/desktop-gl-constants.js:1
&gt; +/*

Could you remove the addition of this file? It looks like it&apos;s unreferenced.

Actually it looks like many new files were accidentally imported from the top-of-tree conformance suite. Please remove them to keep this patch better focused.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692037</commentid>
    <comment_count>5</comment_count>
      <attachid>409741</attachid>
    <who name="James Darpinian">jdarpinian</who>
    <bug_when>2020-09-25 14:35:38 -0700</bug_when>
    <thetext>Created attachment 409741
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692039</commentid>
    <comment_count>6</comment_count>
      <attachid>409637</attachid>
    <who name="James Darpinian">jdarpinian</who>
    <bug_when>2020-09-25 14:40:08 -0700</bug_when>
    <thetext>Comment on attachment 409637
Patch

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

&gt;&gt; Source/WebCore/html/canvas/EXTFloatBlend.cpp:2
&gt;&gt; + * Copyright (C) 2014 Apple Inc. All rights reserved.
&gt; 
&gt; 2020? Here and below.

Done.

&gt;&gt; LayoutTests/webgl/resources/webgl_test_files/js/desktop-gl-constants.js:1
&gt;&gt; +/*
&gt; 
&gt; Could you remove the addition of this file? It looks like it&apos;s unreferenced.
&gt; 
&gt; Actually it looks like many new files were accidentally imported from the top-of-tree conformance suite. Please remove them to keep this patch better focused.

You&apos;re right, this particular file is unnecessary. But I did intentionally import some files from top-of-tree conformance. ext-float-blend.html is not present in the 2.0.0 or 1.0.3 snapshots, so it is not automatically imported. There were already some manually imported tests, so I manually imported ext-float-blend.html alongside them, with some of the supporting files it needs.

I went through and deleted a couple of files that were unused. The rest are used by ext-float-blend.html. Hopefully in the future WebKit will import the 2.0.1 suite and then ext-float-blend.html will be automatically imported.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692045</commentid>
    <comment_count>7</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-09-25 14:47:53 -0700</bug_when>
    <thetext>ChangeLog entry in LayoutTests/ChangeLog contains OOPS!.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692049</commentid>
    <comment_count>8</comment_count>
      <attachid>409744</attachid>
    <who name="James Darpinian">jdarpinian</who>
    <bug_when>2020-09-25 14:53:37 -0700</bug_when>
    <thetext>Created attachment 409744
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692050</commentid>
    <comment_count>9</comment_count>
      <attachid>409637</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2020-09-25 14:57:50 -0700</bug_when>
    <thetext>Comment on attachment 409637
Patch

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

&gt;&gt;&gt; LayoutTests/webgl/resources/webgl_test_files/js/desktop-gl-constants.js:1
&gt;&gt;&gt; +/*
&gt;&gt; 
&gt;&gt; Could you remove the addition of this file? It looks like it&apos;s unreferenced.
&gt;&gt; 
&gt;&gt; Actually it looks like many new files were accidentally imported from the top-of-tree conformance suite. Please remove them to keep this patch better focused.
&gt; 
&gt; You&apos;re right, this particular file is unnecessary. But I did intentionally import some files from top-of-tree conformance. ext-float-blend.html is not present in the 2.0.0 or 1.0.3 snapshots, so it is not automatically imported. There were already some manually imported tests, so I manually imported ext-float-blend.html alongside them, with some of the supporting files it needs.
&gt; 
&gt; I went through and deleted a couple of files that were unused. The rest are used by ext-float-blend.html. Hopefully in the future WebKit will import the 2.0.1 suite and then ext-float-blend.html will be automatically imported.

Thanks, I understand now. Sounds fine.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692068</commentid>
    <comment_count>10</comment_count>
    <who name="EWS">ews-feeder</who>
    <bug_when>2020-09-25 15:41:32 -0700</bug_when>
    <thetext>Committed r267601: &lt;https://trac.webkit.org/changeset/267601&gt;

All reviewed patches have been landed. Closing bug and clearing flags on attachment 409744.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1692069</commentid>
    <comment_count>11</comment_count>
    <who name="Radar WebKit Bug Importer">webkit-bug-importer</who>
    <bug_when>2020-09-25 15:42:21 -0700</bug_when>
    <thetext>&lt;rdar://problem/69598086&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1714872</commentid>
    <comment_count>12</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2020-12-15 12:20:35 -0800</bug_when>
    <thetext>*** Bug 219851 has been marked as a duplicate of this bug. ***</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409636</attachid>
            <date>2020-09-24 16:44:41 -0700</date>
            <delta_ts>2020-09-24 17:02:56 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216949-20200924164441.patch</filename>
            <type>text/plain</type>
            <size>22452</size>
            <attacher name="James Darpinian">jdarpinian</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3Mzg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggYTNmYjY4OWRlNjEwNTlmMzdkZTRhMTkwMTJhZmUzZWI1ZmExMTM0MS4uMjhhMjNlNjYyZGE4
MDY3ZGE2ZWQ5ZjJlOWQ0NWE3ZWNjYzY4Yjc4YSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA5LTI0ICBKYW1lcyBEYXJwaW5pYW4gIDxqZGFycGlu
aWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBTdXBwb3J0IEVYVF9mbG9hdF9ibGVuZAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2OTQ5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzcmMvbGliQU5H
TEUvcmVuZGVyZXIvZ2wvcmVuZGVyZXJnbF91dGlscy5jcHA6CisgICAgICAgIChyeDo6bmF0aXZl
Z2xfZ2w6OkdlbmVyYXRlQ2Fwcyk6CisKIDIwMjAtMDktMTEgIEphbWVzIERhcnBpbmlhbiAgPGpk
YXJwaW5pYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtXZWJHTDJdIFN1cHBvcnQgRVhUX2Nv
bG9yX2J1ZmZlcl9oYWxmX2Zsb2F0IG9uIFdlYkdMIDIuMCBjb250ZXh0cwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IDJiODkxNGY3NDhlYjkzNjg2Y2MzZjUzMDQ2M2M5ZTAyYzJiYjgzNjEuLjliOWM3MzYwNmI4Mzhm
ZTk4ZWQ4NDkzZDJlMTk2YTY0NGE4ODkwMTMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAor
MjAyMC0wOS0yNCAgSmFtZXMgRGFycGluaWFuICA8amRhcnBpbmlhbkBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgU3VwcG9ydCBFWFRfZmxvYXRfYmxlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjk0OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIE5vIG5ldyB0ZXN0cyAoT09QUyEpLgorCisgICAgICAg
ICogQ01ha2VMaXN0cy50eHQ6CisgICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAg
ICAgKiBTb3VyY2VzLnR4dDoKKyAgICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBi
eHByb2o6CisgICAgICAgICogYmluZGluZ3MvanMvSlNET01Db252ZXJ0V2ViR0wuY3BwOgorICAg
ICAgICAoV2ViQ29yZTo6Y29udmVydFRvSlNWYWx1ZSk6CisgICAgICAgICogaHRtbC9jYW52YXMv
RVhURmxvYXRCbGVuZC5jcHA6IEFkZGVkLgorICAgICAgICAoV2ViQ29yZTo6RVhURmxvYXRCbGVu
ZDo6RVhURmxvYXRCbGVuZCk6CisgICAgICAgIChXZWJDb3JlOjpFWFRGbG9hdEJsZW5kOjpnZXRO
YW1lIGNvbnN0KToKKyAgICAgICAgKFdlYkNvcmU6OkVYVEZsb2F0QmxlbmQ6OnN1cHBvcnRlZCk6
CisgICAgICAgICogaHRtbC9jYW52YXMvRVhURmxvYXRCbGVuZC5oOiBBZGRlZC4KKyAgICAgICAg
KiBodG1sL2NhbnZhcy9FWFRGbG9hdEJsZW5kLmlkbDogQWRkZWQuCisgICAgICAgICogaHRtbC9j
YW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJH
TDJSZW5kZXJpbmdDb250ZXh0OjpnZXRFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2Vi
R0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0U3VwcG9ydGVkRXh0ZW5zaW9ucyk6CisgICAgICAgICog
aHRtbC9jYW52YXMvV2ViR0xFeHRlbnNpb24uaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdD
b250ZXh0OjpnZXRTdXBwb3J0ZWRFeHRlbnNpb25zKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9X
ZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVu
ZGVyaW5nQ29udGV4dEJhc2U6OmV4dGVuc2lvbklzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3Jl
OjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpsb3NlRXh0ZW5zaW9ucyk6CisgICAgICAgICog
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oOgorCiAyMDIwLTA5LTIxICBD
aHJpcyBEdW1leiAgPGNkdW1lekBhcHBsZS5jb20+CiAKICAgICAgICAgVmFsdWVzIHJldHVybmVk
IGJ5IEZGVEZyYW1lOjpkb0ZGVCgpIGFyZSB0d2ljZSBhcyBsYXJnZSBhcyB0aGV5IHNob3VsZCBi
ZQpkaWZmIC0tZ2l0IGEvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRl
cmVyL2dsL3JlbmRlcmVyZ2xfdXRpbHMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3Jj
L2xpYkFOR0xFL3JlbmRlcmVyL2dsL3JlbmRlcmVyZ2xfdXRpbHMuY3BwCmluZGV4IDRlYTEwNmFj
ZTg4NGUzNWViMWQ0MjI0Y2VlZjkwOGExNzYxY2UzMDEuLjNhYjY1Nzk1YmI2NjkwNDE1YzkwN2Rl
ZjY1ZmVmZmI4MjIwMjIwYjIgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3Ny
Yy9saWJBTkdMRS9yZW5kZXJlci9nbC9yZW5kZXJlcmdsX3V0aWxzLmNwcAorKysgYi9Tb3VyY2Uv
VGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wvcmVuZGVyZXJnbF91dGls
cy5jcHAKQEAgLTE0ODEsNyArMTQ4MSw4IEBAIHZvaWQgR2VuZXJhdGVDYXBzKGNvbnN0IEZ1bmN0
aW9uc0dMICpmdW5jdGlvbnMsCiAgICAgLy8gRVhUX2Zsb2F0X2JsZW5kCiAgICAgLy8gQXNzdW1l
IGFsbCBkZXNrdG9wIGRyaXZlciBzdXBwb3J0cyB0aGlzIGJ5IGRlZmF1bHQuCiAgICAgZXh0ZW5z
aW9ucy0+ZmxvYXRCbGVuZCA9IGZ1bmN0aW9ucy0+c3RhbmRhcmQgPT0gU1RBTkRBUkRfR0xfREVT
S1RPUCB8fAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbnMtPmhhc0dMRVNF
eHRlbnNpb24oIkdMX0VYVF9mbG9hdF9ibGVuZCIpOworICAgICAgICAgICAgICAgICAgICAgICAg
ICAgICBmdW5jdGlvbnMtPmhhc0dMRVNFeHRlbnNpb24oIkdMX0VYVF9mbG9hdF9ibGVuZCIpIHx8
CisgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGZ1bmN0aW9ucy0+aXNBdExlYXN0R0xFUyhn
bDo6VmVyc2lvbigzLCAyKSk7CiAKICAgICAvLyBBTkdMRV9iYXNlX3ZlcnRleF9iYXNlX2luc3Rh
bmNlCiAgICAgZXh0ZW5zaW9ucy0+YmFzZVZlcnRleEJhc2VJbnN0YW5jZSA9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlz
dHMudHh0CmluZGV4IDUwNzljYjE5ZjQ0NjA0N2JlNjg1YThmOGY0YTlhYjVhZmVkNjI3Y2MuLjUy
NjlkYzdkMWFmZGJhMjdlNGFmOTM0MmM2OTAwNDNlMDEzOGQyMzMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CkBAIC0xNDM4LDYgKzE0MzgsNyBAQCBpZiAoRU5BQkxFX1dFQkdMKQogICAgICAgICBodG1s
L2NhbnZhcy9FWFRCbGVuZE1pbk1heC5jcHAKICAgICAgICAgaHRtbC9jYW52YXMvRVhUQ29sb3JC
dWZmZXJGbG9hdC5jcHAKICAgICAgICAgaHRtbC9jYW52YXMvRVhUQ29sb3JCdWZmZXJIYWxmRmxv
YXQuY3BwCisgICAgICAgIGh0bWwvY2FudmFzL0VYVEZsb2F0QmxlbmQuY3BwCiAgICAgICAgIGh0
bWwvY2FudmFzL0VYVEZyYWdEZXB0aC5jcHAKICAgICAgICAgaHRtbC9jYW52YXMvRVhUU2hhZGVy
VGV4dHVyZUxPRC5jcHAKICAgICAgICAgaHRtbC9jYW52YXMvRVhUVGV4dHVyZUZpbHRlckFuaXNv
dHJvcGljLmNwcApAQCAtMTQ5NCw2ICsxNDk1LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9JRExf
RklMRVMKICAgICBodG1sL2NhbnZhcy9FWFRCbGVuZE1pbk1heC5pZGwKICAgICBodG1sL2NhbnZh
cy9FWFRDb2xvckJ1ZmZlckZsb2F0LmlkbAogICAgIGh0bWwvY2FudmFzL0VYVENvbG9yQnVmZmVy
SGFsZkZsb2F0LmlkbAorICAgIGh0bWwvY2FudmFzL0VYVEZsb2F0QmxlbmQuaWRsCiAgICAgaHRt
bC9jYW52YXMvRVhURnJhZ0RlcHRoLmlkbAogICAgIGh0bWwvY2FudmFzL0VYVFNoYWRlclRleHR1
cmVMT0QuaWRsCiAgICAgaHRtbC9jYW52YXMvRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmlk
bApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJj
ZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKaW5kZXggZTBhZjIwZjVkODI3MDc3MDhhNzQ3
NzY3NTRlYmJkY2UyZTA0MzRlMC4uYjE1NjVmYjBjMTRmMjJiMThjZmU0ZWIyYTFlYTJjODViMjJj
ZDIxYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNlcy5tYWtlCkBAIC05NDUsNiArOTQ1LDcgQEAg
SlNfQklORElOR19JRExTID0gXAogICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvRVhUQmxlbmRN
aW5NYXguaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0VYVENvbG9yQnVmZmVyRmxv
YXQuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0VYVENvbG9yQnVmZmVySGFsZkZs
b2F0LmlkbCBcCisgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9FWFRGbG9hdEJsZW5kLmlkbCBc
CiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9FWFRGcmFnRGVwdGguaWRsIFwKICAgICAkKFdl
YkNvcmUpL2h0bWwvY2FudmFzL0VYVFNoYWRlclRleHR1cmVMT0QuaWRsIFwKICAgICAkKFdlYkNv
cmUpL2h0bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5pZGwgXApkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2Vz
LnR4dAppbmRleCA3Mjc1NjNlNWZiNzdhNDU5NDMxMGM0MGUzM2VlNDY2OGNiODVhOGY4Li40MDdm
NmI1NDdiMDc4MjhiMTU2NGYwYWU3YmNhMGVmYmQzOTdhOGYwIDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9Tb3VyY2VzLnR4dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAt
MTIzOSw2ICsxMjM5LDcgQEAgaHRtbC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwCiBodG1sL2NhbnZh
cy9FWFRCbGVuZE1pbk1heC5jcHAKIGh0bWwvY2FudmFzL0VYVENvbG9yQnVmZmVyRmxvYXQuY3Bw
CiBodG1sL2NhbnZhcy9FWFRDb2xvckJ1ZmZlckhhbGZGbG9hdC5jcHAKK2h0bWwvY2FudmFzL0VY
VEZsb2F0QmxlbmQuY3BwCiBodG1sL2NhbnZhcy9FWFRGcmFnRGVwdGguY3BwCiBodG1sL2NhbnZh
cy9FWFRTaGFkZXJUZXh0dXJlTE9ELmNwcAogaHRtbC9jYW52YXMvRVhUVGV4dHVyZUZpbHRlckFu
aXNvdHJvcGljLmNwcApAQCAtMjg0OSw2ICsyODUwLDcgQEAgSlNEeW5hbWljc0NvbXByZXNzb3JP
cHRpb25zLmNwcAogSlNFWFRCbGVuZE1pbk1heC5jcHAKIEpTRVhUQ29sb3JCdWZmZXJGbG9hdC5j
cHAKIEpTRVhUQ29sb3JCdWZmZXJIYWxmRmxvYXQuY3BwCitKU0VYVEZsb2F0QmxlbmQuY3BwCiBK
U0VYVEZyYWdEZXB0aC5jcHAKIEpTRVhUU2hhZGVyVGV4dHVyZUxPRC5jcHAKIEpTRVhUVGV4dHVy
ZUZpbHRlckFuaXNvdHJvcGljLmNwcApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29y
ZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCmluZGV4IDNkY2M1ZTcxYjhiMTMzOTAwMjYyMWFjN2I2Y2Fi
NzQwYWRmY2UyMWIuLmNhMzk3NzRiNDA0OTlkMjIyYjc3ODg2MzI5YjJkOGZhNjg4MGI4MGMgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agorKysgYi9Tb3VyY2UvV2ViQ29yZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oK
QEAgLTEyMDQzLDYgKzEyMDQzLDkgQEAKIAkJQTMzQzlGOTEyNEY4MzVBQTAwMEYwODQ1IC8qIFdl
YkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDc1JHQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVu
Y2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7
IHBhdGggPSBXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQ3NSR0IuaDsgc291cmNlVHJlZSA9ICI8
Z3JvdXA+IjsgfTsKIAkJQTMzQzlGOTMyNEY4MzVBQjAwMEYwODQ1IC8qIFdlYkdMQ29tcHJlc3Nl
ZFRleHR1cmVTM1RDc1JHQi5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGgg
PSBXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQ3NSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB9OwogCQlBMzNDOUY5NDI0RjgzNUFCMDAwRjA4NDUgLyogV2ViR0xDb21wcmVzc2VkVGV4
dHVyZVMzVENzUkdCLmlkbCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHRleHQ7IHBhdGggPSBXZWJHTENvbXByZXNzZWRU
ZXh0dXJlUzNUQ3NSR0IuaWRsOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMzcwNDlE
ODI1MUQ0QjhFMDA5QkExQjMgLyogRVhURmxvYXRCbGVuZC5pZGwgKi8gPSB7aXNhID0gUEJYRmls
ZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBw
YXRoID0gRVhURmxvYXRCbGVuZC5pZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEz
NzA0OURBMjUxRDRCOEUwMDlCQTFCMyAvKiBFWFRGbG9hdEJsZW5kLmggKi8gPSB7aXNhID0gUEJY
RmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3Vy
Y2Vjb2RlLmMuaDsgcGF0aCA9IEVYVEZsb2F0QmxlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+
IjsgfTsKKwkJQTM3MDQ5REIyNTFENEI4RjAwOUJBMUIzIC8qIEVYVEZsb2F0QmxlbmQuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gRVhURmxvYXRCbGVuZC5jcHA7IHNv
dXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEzQUY5RDgxMjAzMjUyRUUwMDZDQUQwNiAvKiBV
c2VyQWdlbnRDb2NvYS5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFVzZXJBZ2VudENvY29hLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBM0FGOUQ4
MjIwMzI1MzI0MDA2Q0FEMDYgLyogVXNlckFnZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVy
ZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMu
aDsgcGF0aCA9IFVzZXJBZ2VudC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBM0FG
OUQ4MzIwMzI1NjkxMDA2Q0FEMDYgLyogVXNlckFnZW50SU9TLm1tICovID0ge2lzYSA9IFBCWEZp
bGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNl
Y29kZS5jcHAub2JqY3BwOyBwYXRoID0gVXNlckFnZW50SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxn
cm91cD4iOyB9OwpAQCAtMTkzMzAsNiArMTkzMzMsOSBAQAogCQkJCTZFNTM4OERBMjQ1OEFFMTkw
MDc2QUUwMyAvKiBFWFRDb2xvckJ1ZmZlckhhbGZGbG9hdC5jcHAgKi8sCiAJCQkJNkU1Mzg4REUy
NDU4QUUxQzAwNzZBRTAzIC8qIEVYVENvbG9yQnVmZmVySGFsZkZsb2F0LmggKi8sCiAJCQkJNkU1
Mzg4REYyNDU4QUUxQzAwNzZBRTAzIC8qIEVYVENvbG9yQnVmZmVySGFsZkZsb2F0LmlkbCAqLywK
KwkJCQlBMzcwNDlEQjI1MUQ0QjhGMDA5QkExQjMgLyogRVhURmxvYXRCbGVuZC5jcHAgKi8sCisJ
CQkJQTM3MDQ5REEyNTFENEI4RTAwOUJBMUIzIC8qIEVYVEZsb2F0QmxlbmQuaCAqLywKKwkJCQlB
MzcwNDlEODI1MUQ0QjhFMDA5QkExQjMgLyogRVhURmxvYXRCbGVuZC5pZGwgKi8sCiAJCQkJNzJG
MUFEOUYxQTM5MDRDMzAwMDE0RTE4IC8qIEVYVEZyYWdEZXB0aC5jcHAgKi8sCiAJCQkJNzJGMUFE
QTAxQTM5MDRDMzAwMDE0RTE4IC8qIEVYVEZyYWdEZXB0aC5oICovLAogCQkJCTcyRjFBREExMUEz
OTA0QzMwMDAxNEUxOCAvKiBFWFRGcmFnRGVwdGguaWRsICovLApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0V2ViR0wuY3BwIGIvU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0V2ViR0wuY3BwCmluZGV4IGQwNTZhMjY4ZTY3YWYy
MTcyNzFkOTYwMjdmMTk2MGEyNjU4YjFmMzEuLjg3NWFmMzQ0ZjY3MDNmM2Q2YTMwMTQxN2Q0ODc3
YTIzZjA2NTU3ODcgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9N
Q29udmVydFdlYkdMLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNv
bnZlcnRXZWJHTC5jcHAKQEAgLTMzLDYgKzMzLDcgQEAKICNpbmNsdWRlICJKU0VYVEJsZW5kTWlu
TWF4LmgiCiAjaW5jbHVkZSAiSlNFWFRDb2xvckJ1ZmZlckZsb2F0LmgiCiAjaW5jbHVkZSAiSlNF
WFRDb2xvckJ1ZmZlckhhbGZGbG9hdC5oIgorI2luY2x1ZGUgIkpTRVhURmxvYXRCbGVuZC5oIgog
I2luY2x1ZGUgIkpTRVhURnJhZ0RlcHRoLmgiCiAjaW5jbHVkZSAiSlNFWFRTaGFkZXJUZXh0dXJl
TE9ELmgiCiAjaW5jbHVkZSAiSlNFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCIKQEAgLTIx
Nyw2ICsyMTgsOCBAQCBKU1ZhbHVlIGNvbnZlcnRUb0pTVmFsdWUoSlNHbG9iYWxPYmplY3QmIGxl
eGljYWxHbG9iYWxPYmplY3QsIEpTRE9NR2xvYmFsT2JqZWN0JgogICAgICAgICByZXR1cm4gdG9K
UygmbGV4aWNhbEdsb2JhbE9iamVjdCwgJmdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8QU5HTEVJ
bnN0YW5jZWRBcnJheXMmPihleHRlbnNpb24pKTsKICAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpF
WFRDb2xvckJ1ZmZlckhhbGZGbG9hdE5hbWU6CiAgICAgICAgIHJldHVybiB0b0pTKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAmZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxFWFRDb2xvckJ1ZmZlckhh
bGZGbG9hdCY+KGV4dGVuc2lvbikpOworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkVYVEZsb2F0
QmxlbmROYW1lOgorICAgICAgICByZXR1cm4gdG9KUygmbGV4aWNhbEdsb2JhbE9iamVjdCwgJmds
b2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8RVhURmxvYXRCbGVuZCY+KGV4dGVuc2lvbikpOwogICAg
IGNhc2UgV2ViR0xFeHRlbnNpb246OldlYkdMQ29sb3JCdWZmZXJGbG9hdE5hbWU6CiAgICAgICAg
IHJldHVybiB0b0pTKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAmZ2xvYmFsT2JqZWN0LCBzdGF0aWNf
Y2FzdDxXZWJHTENvbG9yQnVmZmVyRmxvYXQmPihleHRlbnNpb24pKTsKICAgICBjYXNlIFdlYkdM
RXh0ZW5zaW9uOjpFWFRDb2xvckJ1ZmZlckZsb2F0TmFtZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL2h0bWwvY2FudmFzL0VYVEZsb2F0QmxlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRt
bC9jYW52YXMvRVhURmxvYXRCbGVuZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNGZmNzhhYmVlOGJjOGQwOGQ5
YWM4NDU4YWE5NjMwYmU4NGQ1NDhhNQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0VYVEZsb2F0QmxlbmQuY3BwCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBD
b3B5cmlnaHQgKEMpIDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAq
IFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGgg
b3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQg
dGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3Ry
aWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAor
ICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcg
ZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCBy
ZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9m
IGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBk
b2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlz
dHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5E
IElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQg
V0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisg
KiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNV
TEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBP
UiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNU
LCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdF
UworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJT
VElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJ
VFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBB
TlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJ
TElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJ
U0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVO
IElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNp
bmNsdWRlICJjb25maWcuaCIKKworI2lmIEVOQUJMRShXRUJHTCkKKyNpbmNsdWRlICJFWFRGbG9h
dEJsZW5kLmgiCisKKyNpbmNsdWRlICJFeHRlbnNpb25zR0wuaCIKKyNpbmNsdWRlIDx3dGYvSXNv
TWFsbG9jSW5saW5lcy5oPgorCituYW1lc3BhY2UgV2ViQ29yZSB7CisKK1dURl9NQUtFX0lTT19B
TExPQ0FURURfSU1QTChFWFRGbG9hdEJsZW5kKTsKKworRVhURmxvYXRCbGVuZDo6RVhURmxvYXRC
bGVuZChXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0KQorICAgIDogV2ViR0xFeHRl
bnNpb24oY29udGV4dCkKK3sKKyAgICBjb250ZXh0LmdyYXBoaWNzQ29udGV4dEdMKCktPmdldEV4
dGVuc2lvbnMoKS5lbnN1cmVFbmFibGVkKCJHTF9FWFRfZmxvYXRfYmxlbmQiX3MpOworfQorCitF
WFRGbG9hdEJsZW5kOjp+RVhURmxvYXRCbGVuZCgpID0gZGVmYXVsdDsKKworV2ViR0xFeHRlbnNp
b246OkV4dGVuc2lvbk5hbWUgRVhURmxvYXRCbGVuZDo6Z2V0TmFtZSgpIGNvbnN0Cit7CisgICAg
cmV0dXJuIEVYVEZsb2F0QmxlbmROYW1lOworfQorCitib29sIEVYVEZsb2F0QmxlbmQ6OnN1cHBv
cnRlZChjb25zdCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJiBjb250ZXh0KQoreworICAgIHJl
dHVybiBjb250ZXh0LmdyYXBoaWNzQ29udGV4dEdMKCktPmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0
cygiR0xfRVhUX2Zsb2F0X2JsZW5kIl9zKTsKK30KKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNv
cmUKKworI2VuZGlmIC8vIEVOQUJMRShXRUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3Jl
L2h0bWwvY2FudmFzL0VYVEZsb2F0QmxlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFz
L0VYVEZsb2F0QmxlbmQuaApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYjAzMWI3MWFjZGRjNTI2MmExODg0YmU1MzI4
OGI2ZjY1MmQ4MzI1Ci0tLSAvZGV2L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52
YXMvRVhURmxvYXRCbGVuZC5oCkBAIC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
ICogbW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2lu
ZyBjb25kaXRpb25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Yg
c291cmNlIGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGlj
ZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4K
KyAqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhl
IGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMg
YW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9u
IGFuZC9vciBvdGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgor
ICoKKyAqIFRISVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklC
VVRPUlMgIkFTIElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywg
SU5DTFVESU5HLCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVT
IE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0Ug
QVJFCisgKiBESVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJ
QlVUT1JTIEJFIExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFM
LCBTUEVDSUFMLCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xV
RElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RT
IE9SIFNFUlZJQ0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lO
RVNTIElOVEVSUlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9G
IExJQUJJTElUWSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9S
VAorICogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkg
V0FZIE9VVCBPRiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQg
T0YgVEhFIFBPU1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQor
CisjaW5jbHVkZSAiV2ViR0xFeHRlbnNpb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitj
bGFzcyBFWFRGbG9hdEJsZW5kIGZpbmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKKyAgICBX
VEZfTUFLRV9JU09fQUxMT0NBVEVEKEVYVEZsb2F0QmxlbmQpOworcHVibGljOgorICAgIGV4cGxp
Y2l0IEVYVEZsb2F0QmxlbmQoV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZSYpOworICAgIHZpcnR1
YWwgfkVYVEZsb2F0QmxlbmQoKTsKKworICAgIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0
IG92ZXJyaWRlOworCisgICAgc3RhdGljIGJvb2wgc3VwcG9ydGVkKGNvbnN0IFdlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UmKTsKK307CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVEZsb2F0QmxlbmQuaWRsIGIvU291cmNl
L1dlYkNvcmUvaHRtbC9jYW52YXMvRVhURmxvYXRCbGVuZC5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2
NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uM2ExMzli
N2JlYmRlOWFmYWJhMTZlMGY5NmQ5ODM4NGVmZjVmNTBkNgotLS0gL2Rldi9udWxsCisrKyBiL1Nv
dXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVEZsb2F0QmxlbmQuaWRsCkBAIC0wLDAgKzEsMzEg
QEAKKy8qCisqIENvcHlyaWdodCAoQykgMjAxNCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCisqCisqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9y
bXMsIHdpdGggb3Igd2l0aG91dAorKiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlk
ZWQgdGhhdCB0aGUgZm9sbG93aW5nIGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyoKKyogMS4gIFJl
ZGlzdHJpYnV0aW9ucyBvZiBzb3VyY2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJp
Z2h0CisqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93
aW5nIGRpc2NsYWltZXIuCisqIDIuICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVz
dCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qg
b2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICAg
ZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRp
c3RyaWJ1dGlvbi4KKyoKKyogVEhJUyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQg
SVRTIENPTlRSSUJVVE9SUyAiQVMgSVMiIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdB
UlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorKiBX
QVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFS
IFBVUlBPU0UgQVJFCisqIERJU0NMQUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElU
UyBDT05UUklCVVRPUlMgQkUgTElBQkxFIEZPUiBBTlkKKyogRElSRUNULCBJTkRJUkVDVCwgSU5D
SURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyog
KElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRF
IEdPT0RTIE9SIFNFUlZJQ0VTOworKiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1Ig
QlVTSU5FU1MgSU5URVJSVVBUSU9OKSBIT1dFVkVSIENBVVNFRCBBTkQKKyogT04gQU5ZIFRIRU9S
WSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9S
IFRPUlQKKyogKElOQ0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBB
TlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9GCisqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNF
RCBPRiBUSEUgUE9TU0lCSUxJVFkgT0YgU1VDSCBEQU1BR0UuCisqLworCitbCisgICAgQ29uZGl0
aW9uYWw9V0VCR0wsCisgICAgR2VuZXJhdGVJc1JlYWNoYWJsZT1JbXBsV2ViR0xSZW5kZXJpbmdD
b250ZXh0LAorICAgIExlZ2FjeU5vSW50ZXJmYWNlT2JqZWN0LAorXSBpbnRlcmZhY2UgRVhURmxv
YXRCbGVuZCB7Cit9OwpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TDJSZW5kZXJpbmdDb250ZXh0LmNwcAppbmRleCA0NDVkMDk2ZGEwOGQ2OGM2N2IyODU3MzAwODgw
NWY2NDY2NDYwMzAzLi5mMTNmY2JmMTJmOTc4MTUxZGYyMzMwMzIyMDFhZTQzZDk2ZTFjYWJjIDEw
MDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250
ZXh0LmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdD
b250ZXh0LmNwcApAQCAtMzEsNiArMzEsNyBAQAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAj
aW5jbHVkZSAiRVhUQ29sb3JCdWZmZXJGbG9hdC5oIgogI2luY2x1ZGUgIkVYVENvbG9yQnVmZmVy
SGFsZkZsb2F0LmgiCisjaW5jbHVkZSAiRVhURmxvYXRCbGVuZC5oIgogI2luY2x1ZGUgIkVYVFRl
eHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5oIgogI2luY2x1ZGUgIkV2ZW50TG9vcC5oIgogI2luY2x1
ZGUgIkV4dGVuc2lvbnNHTC5oIgpAQCAtMjY5MCw2ICsyNjkxLDcgQEAgV2ViR0xFeHRlbnNpb24q
IFdlYkdMMlJlbmRlcmluZ0NvbnRleHQ6OmdldEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUp
CiAgICAgRU5BQkxFX0lGX1JFUVVFU1RFRChXZWJHTERlYnVnU2hhZGVycywgbV93ZWJnbERlYnVn
U2hhZGVycywgIldFQkdMX2RlYnVnX3NoYWRlcnMiLCBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMo
KS5zdXBwb3J0cygiR0xfQU5HTEVfdHJhbnNsYXRlZF9zaGFkZXJfc291cmNlIl9zKSk7CiAgICAg
RU5BQkxFX0lGX1JFUVVFU1RFRChFWFRDb2xvckJ1ZmZlckZsb2F0LCBtX2V4dENvbG9yQnVmZmVy
RmxvYXQsICJFWFRfY29sb3JfYnVmZmVyX2Zsb2F0IiwgRVhUQ29sb3JCdWZmZXJGbG9hdDo6c3Vw
cG9ydGVkKCp0aGlzKSk7CiAgICAgRU5BQkxFX0lGX1JFUVVFU1RFRChFWFRDb2xvckJ1ZmZlckhh
bGZGbG9hdCwgbV9leHRDb2xvckJ1ZmZlckhhbGZGbG9hdCwgIkVYVF9jb2xvcl9idWZmZXJfaGFs
Zl9mbG9hdCIsIEVYVENvbG9yQnVmZmVySGFsZkZsb2F0OjpzdXBwb3J0ZWQoKnRoaXMpKTsKKyAg
ICBFTkFCTEVfSUZfUkVRVUVTVEVEKEVYVEZsb2F0QmxlbmQsIG1fZXh0RmxvYXRCbGVuZCwgIkVY
VF9mbG9hdF9ibGVuZCIsIEVYVEZsb2F0QmxlbmQ6OnN1cHBvcnRlZCgqdGhpcykpOwogICAgIHJl
dHVybiBudWxscHRyOwogfQogCkBAIC0yNzM2LDYgKzI3MzgsOCBAQCBPcHRpb25hbDxWZWN0b3I8
U3RyaW5nPj4gV2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygp
CiAgICAgICAgIHJlc3VsdC5hcHBlbmQoIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiX3MpOwogICAg
IGlmIChFWFRDb2xvckJ1ZmZlckhhbGZGbG9hdDo6c3VwcG9ydGVkKCp0aGlzKSkKICAgICAgICAg
cmVzdWx0LmFwcGVuZCgiRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0Il9zKTsKKyAgICBpZiAo
RVhURmxvYXRCbGVuZDo6c3VwcG9ydGVkKCp0aGlzKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgi
RVhUX2Zsb2F0X2JsZW5kIl9zKTsKIAogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQg
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEV4dGVuc2lvbi5oIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0xFeHRlbnNpb24uaAppbmRleCBkMzM0Y2M4MDI2MjgwODAw
YWU4OWYyMTA2YjBiNzdlYmQ5ZjhjM2FiLi5kMDg2MDM4YzdlOGYzY2Y2OWU3MDlkY2ZlZmU1NWZk
ZjQ1NzcxY2ExIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEV4
dGVuc2lvbi5oCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRXh0ZW5zaW9u
LmgKQEAgLTYzLDYgKzYzLDcgQEAgcHVibGljOgogICAgICAgICBXZWJHTENvbXByZXNzZWRUZXh0
dXJlQVNUQ05hbWUsCiAgICAgICAgIEFOR0xFSW5zdGFuY2VkQXJyYXlzTmFtZSwKICAgICAgICAg
RVhUQ29sb3JCdWZmZXJIYWxmRmxvYXROYW1lLAorICAgICAgICBFWFRGbG9hdEJsZW5kTmFtZSwK
ICAgICAgICAgV2ViR0xDb2xvckJ1ZmZlckZsb2F0TmFtZSwKICAgICAgICAgRVhUQ29sb3JCdWZm
ZXJGbG9hdE5hbWUsCiAgICAgfTsKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCmluZGV4IDk0ZTlhYTJiNTdkMzlhYjY2YzUyOGNm
MDI0ZmE1ZDAzZjUxMjJiMzIuLmM2MjA5YjVlNjVmMjkxNGMwNGY2NTQxMjEzZDk0ZDFlZDk2NjQ1
NjQgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dC5jcHAKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJp
bmdDb250ZXh0LmNwcApAQCAtMzIsNiArMzIsNyBAQAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgi
CiAjaW5jbHVkZSAiRVhUQmxlbmRNaW5NYXguaCIKICNpbmNsdWRlICJFWFRDb2xvckJ1ZmZlckhh
bGZGbG9hdC5oIgorI2luY2x1ZGUgIkVYVEZsb2F0QmxlbmQuaCIKICNpbmNsdWRlICJFWFRGcmFn
RGVwdGguaCIKICNpbmNsdWRlICJFWFRTaGFkZXJUZXh0dXJlTE9ELmgiCiAjaW5jbHVkZSAiRVhU
VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmgiCkBAIC0xOTQsNiArMTk1LDcgQEAgV2ViR0xFeHRl
bnNpb24qIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYg
bmFtZSkKICAgICBFTkFCTEVfSUZfUkVRVUVTVEVEKFdlYkdMRGVidWdSZW5kZXJlckluZm8sIG1f
d2ViZ2xEZWJ1Z1JlbmRlcmVySW5mbywgIldFQkdMX2RlYnVnX3JlbmRlcmVyX2luZm8iLCB0cnVl
KTsKICAgICBFTkFCTEVfSUZfUkVRVUVTVEVEKFdlYkdMRGVidWdTaGFkZXJzLCBtX3dlYmdsRGVi
dWdTaGFkZXJzLCAiV0VCR0xfZGVidWdfc2hhZGVycyIsIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9u
cygpLnN1cHBvcnRzKCJHTF9BTkdMRV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UiX3MpKTsKICAg
ICBFTkFCTEVfSUZfUkVRVUVTVEVEKEVYVENvbG9yQnVmZmVySGFsZkZsb2F0LCBtX2V4dENvbG9y
QnVmZmVySGFsZkZsb2F0LCAiRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0IiwgRVhUQ29sb3JC
dWZmZXJIYWxmRmxvYXQ6OnN1cHBvcnRlZCgqdGhpcykpOworICAgIEVOQUJMRV9JRl9SRVFVRVNU
RUQoRVhURmxvYXRCbGVuZCwgbV9leHRGbG9hdEJsZW5kLCAiRVhUX2Zsb2F0X2JsZW5kIiwgRVhU
RmxvYXRCbGVuZDo6c3VwcG9ydGVkKCp0aGlzKSk7CiAgICAgRU5BQkxFX0lGX1JFUVVFU1RFRChX
ZWJHTENvbG9yQnVmZmVyRmxvYXQsIG1fd2ViZ2xDb2xvckJ1ZmZlckZsb2F0LCAiV0VCR0xfY29s
b3JfYnVmZmVyX2Zsb2F0IiwgV2ViR0xDb2xvckJ1ZmZlckZsb2F0OjpzdXBwb3J0ZWQoKnRoaXMp
KTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KQEAgLTI1OCw2ICsyNjAsOCBAQCBPcHRpb25hbDxW
ZWN0b3I8U3RyaW5nPj4gV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTdXBwb3J0ZWRFeHRlbnNp
b25zKCkKICAgICByZXN1bHQuYXBwZW5kKCJXRUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIl9zKTsK
ICAgICBpZiAoRVhUQ29sb3JCdWZmZXJIYWxmRmxvYXQ6OnN1cHBvcnRlZCgqdGhpcykpCiAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoIkVYVF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCJfcyk7CisgICAg
aWYgKEVYVEZsb2F0QmxlbmQ6OnN1cHBvcnRlZCgqdGhpcykpCisgICAgICAgIHJlc3VsdC5hcHBl
bmQoIkVYVF9mbG9hdF9ibGVuZCJfcyk7CiAgICAgaWYgKFdlYkdMQ29sb3JCdWZmZXJGbG9hdDo6
c3VwcG9ydGVkKCp0aGlzKSkKICAgICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfY29sb3JfYnVm
ZmVyX2Zsb2F0Il9zKTsKIApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
V2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAppbmRleCA4MDU0YWQzMzNlOGQxNDRkMTY5
MDZjYmVhMGVlOWE4N2FjOTRjZTg2Li5kOWE4YmRkYWNhYTEyOTliNGM2MDdiNTRjZjliMDZkMDgw
ZWEwOTU3IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlLmNwcAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJH
TFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkVY
VEJsZW5kTWluTWF4LmgiCiAjaW5jbHVkZSAiRVhUQ29sb3JCdWZmZXJGbG9hdC5oIgogI2luY2x1
ZGUgIkVYVENvbG9yQnVmZmVySGFsZkZsb2F0LmgiCisjaW5jbHVkZSAiRVhURmxvYXRCbGVuZC5o
IgogI2luY2x1ZGUgIkVYVEZyYWdEZXB0aC5oIgogI2luY2x1ZGUgIkVYVFNoYWRlclRleHR1cmVM
T0QuaCIKICNpbmNsdWRlICJFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCIKQEAgLTM3MzYs
NiArMzczNyw3IEBAIGJvb2wgV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZXh0ZW5zaW9uSXNF
bmFibGVkKGNvbnN0IFN0cmluZyYgbmFtZSkKICAgICBDSEVDS19FWFRFTlNJT04obV93ZWJnbERy
YXdCdWZmZXJzLCAiV0VCR0xfZHJhd19idWZmZXJzIik7CiAgICAgQ0hFQ0tfRVhURU5TSU9OKG1f
YW5nbGVJbnN0YW5jZWRBcnJheXMsICJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIik7CiAgICAgQ0hF
Q0tfRVhURU5TSU9OKG1fZXh0Q29sb3JCdWZmZXJIYWxmRmxvYXQsICJFWFRfY29sb3JfYnVmZmVy
X2hhbGZfZmxvYXQiKTsKKyAgICBDSEVDS19FWFRFTlNJT04obV9leHRGbG9hdEJsZW5kLCAiRVhU
X2Zsb2F0X2JsZW5kIik7CiAgICAgQ0hFQ0tfRVhURU5TSU9OKG1fd2ViZ2xDb2xvckJ1ZmZlckZs
b2F0LCAiV0VCR0xfY29sb3JfYnVmZmVyX2Zsb2F0Iik7CiAgICAgQ0hFQ0tfRVhURU5TSU9OKG1f
ZXh0Q29sb3JCdWZmZXJGbG9hdCwgIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKTsKICAgICByZXR1
cm4gZmFsc2U7CkBAIC03ODAyLDYgKzc4MDQsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4
dEJhc2U6Omxvc2VFeHRlbnNpb25zKExvc3RDb250ZXh0TW9kZSBtb2RlKQogICAgIExPU0VfRVhU
RU5TSU9OKG1fd2ViZ2xEcmF3QnVmZmVycyk7CiAgICAgTE9TRV9FWFRFTlNJT04obV9hbmdsZUlu
c3RhbmNlZEFycmF5cyk7CiAgICAgTE9TRV9FWFRFTlNJT04obV9leHRDb2xvckJ1ZmZlckhhbGZG
bG9hdCk7CisgICAgTE9TRV9FWFRFTlNJT04obV9leHRGbG9hdEJsZW5kKTsKICAgICBMT1NFX0VY
VEVOU0lPTihtX3dlYmdsQ29sb3JCdWZmZXJGbG9hdCk7CiAgICAgTE9TRV9FWFRFTlNJT04obV9l
eHRDb2xvckJ1ZmZlckZsb2F0KTsKIH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwv
Y2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UuaAppbmRleCBmZDgwMWQwYWJhMWYwNjc2
ZmZiMWE0NWFlNzg3M2JhZmMxMjUzMzcxLi4zZTA0NTVmYzg0ODg5M2I5ZTVlOWIwYzc5NjNhNDJh
MTEwZDJjNzViIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJl
bmRlcmluZ0NvbnRleHRCYXNlLmgKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCkBAIC03MSw2ICs3MSw3IEBAIGNsYXNzIEFOR0xFSW5z
dGFuY2VkQXJyYXlzOwogY2xhc3MgRVhUQmxlbmRNaW5NYXg7CiBjbGFzcyBFWFRDb2xvckJ1ZmZl
ckZsb2F0OwogY2xhc3MgRVhUQ29sb3JCdWZmZXJIYWxmRmxvYXQ7CitjbGFzcyBFWFRGbG9hdEJs
ZW5kOwogY2xhc3MgRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljOwogY2xhc3MgRVhUU2hhZGVy
VGV4dHVyZUxPRDsKIGNsYXNzIEVYVHNSR0I7CkBAIC02OTAsNiArNjkxLDcgQEAgcHJvdGVjdGVk
OgogICAgIFJlZlB0cjxXZWJHTERyYXdCdWZmZXJzPiBtX3dlYmdsRHJhd0J1ZmZlcnM7CiAgICAg
UmVmUHRyPEFOR0xFSW5zdGFuY2VkQXJyYXlzPiBtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzOwogICAg
IFJlZlB0cjxFWFRDb2xvckJ1ZmZlckhhbGZGbG9hdD4gbV9leHRDb2xvckJ1ZmZlckhhbGZGbG9h
dDsKKyAgICBSZWZQdHI8RVhURmxvYXRCbGVuZD4gbV9leHRGbG9hdEJsZW5kOwogICAgIFJlZlB0
cjxXZWJHTENvbG9yQnVmZmVyRmxvYXQ+IG1fd2ViZ2xDb2xvckJ1ZmZlckZsb2F0OwogICAgIFJl
ZlB0cjxFWFRDb2xvckJ1ZmZlckZsb2F0PiBtX2V4dENvbG9yQnVmZmVyRmxvYXQ7CiAK
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409637</attachid>
            <date>2020-09-24 17:02:57 -0700</date>
            <delta_ts>2020-09-25 14:35:37 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216949-20200924170256.patch</filename>
            <type>text/plain</type>
            <size>390368</size>
            <attacher name="James Darpinian">jdarpinian</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3Mzg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggYTNmYjY4OWRlNjEwNTlmMzdkZTRhMTkwMTJhZmUzZWI1ZmExMTM0MS4uMjhhMjNlNjYyZGE4
MDY3ZGE2ZWQ5ZjJlOWQ0NWE3ZWNjYzY4Yjc4YSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA5LTI0ICBKYW1lcyBEYXJwaW5pYW4gIDxqZGFycGlu
aWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBTdXBwb3J0IEVYVF9mbG9hdF9ibGVuZAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2OTQ5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzcmMvbGliQU5H
TEUvcmVuZGVyZXIvZ2wvcmVuZGVyZXJnbF91dGlscy5jcHA6CisgICAgICAgIChyeDo6bmF0aXZl
Z2xfZ2w6OkdlbmVyYXRlQ2Fwcyk6CisKIDIwMjAtMDktMTEgIEphbWVzIERhcnBpbmlhbiAgPGpk
YXJwaW5pYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtXZWJHTDJdIFN1cHBvcnQgRVhUX2Nv
bG9yX2J1ZmZlcl9oYWxmX2Zsb2F0IG9uIFdlYkdMIDIuMCBjb250ZXh0cwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IDJiODkxNGY3NDhlYjkzNjg2Y2MzZjUzMDQ2M2M5ZTAyYzJiYjgzNjEuLjJlYTE4NGQ4Y2UzMjc2
ODZhZDBlZWEwZGU5ZmQ4YjVjMjJhNGUwYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAor
MjAyMC0wOS0yNCAgSmFtZXMgRGFycGluaWFuICA8amRhcnBpbmlhbkBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgU3VwcG9ydCBFWFRfZmxvYXRfYmxlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjk0OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IHdlYmdsL2NvbmZvcm1hbmNlL2V4dGVuc2lv
bnMvZXh0LWZsb2F0LWJsZW5kLmh0bWwKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAg
ICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTRE9NQ29udmVydFdlYkdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRU
b0pTVmFsdWUpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0VYVEZsb2F0QmxlbmQuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkVYVEZsb2F0QmxlbmQ6OkVYVEZsb2F0QmxlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6RVhURmxvYXRCbGVuZDo6Z2V0TmFtZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpFWFRGbG9hdEJsZW5kOjpzdXBwb3J0ZWQpOgorICAgICAgICAqIGh0bWwvY2FudmFz
L0VYVEZsb2F0QmxlbmQuaDogQWRkZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvRVhURmxvYXRC
bGVuZC5pZGw6IEFkZGVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0Nv
bnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0
RXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMMlJlbmRlcmluZ0NvbnRleHQ6Omdl
dFN1cHBvcnRlZEV4dGVuc2lvbnMpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRXh0ZW5z
aW9uLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RXh0ZW5zaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U3VwcG9ydGVkRXh0
ZW5zaW9ucyk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpleHRl
bnNpb25Jc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6bG9zZUV4dGVuc2lvbnMpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UuaDoKKwogMjAyMC0wOS0yMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBw
bGUuY29tPgogCiAgICAgICAgIFZhbHVlcyByZXR1cm5lZCBieSBGRlRGcmFtZTo6ZG9GRlQoKSBh
cmUgdHdpY2UgYXMgbGFyZ2UgYXMgdGhleSBzaG91bGQgYmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9yZW5kZXJlcmdsX3V0aWxz
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9y
ZW5kZXJlcmdsX3V0aWxzLmNwcAppbmRleCA0ZWExMDZhY2U4ODRlMzVlYjFkNDIyNGNlZWY5MDhh
MTc2MWNlMzAxLi4zYWI2NTc5NWJiNjY5MDQxNWM5MDdkZWY2NWZlZmZiODIyMDIyMGIyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wv
cmVuZGVyZXJnbF91dGlscy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL2dsL3JlbmRlcmVyZ2xfdXRpbHMuY3BwCkBAIC0xNDgxLDcgKzE0ODEs
OCBAQCB2b2lkIEdlbmVyYXRlQ2Fwcyhjb25zdCBGdW5jdGlvbnNHTCAqZnVuY3Rpb25zLAogICAg
IC8vIEVYVF9mbG9hdF9ibGVuZAogICAgIC8vIEFzc3VtZSBhbGwgZGVza3RvcCBkcml2ZXIgc3Vw
cG9ydHMgdGhpcyBieSBkZWZhdWx0LgogICAgIGV4dGVuc2lvbnMtPmZsb2F0QmxlbmQgPSBmdW5j
dGlvbnMtPnN0YW5kYXJkID09IFNUQU5EQVJEX0dMX0RFU0tUT1AgfHwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZnVuY3Rpb25zLT5oYXNHTEVTRXh0ZW5zaW9uKCJHTF9FWFRfZmxvYXRf
YmxlbmQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25zLT5oYXNHTEVT
RXh0ZW5zaW9uKCJHTF9FWFRfZmxvYXRfYmxlbmQiKSB8fAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmdW5jdGlvbnMtPmlzQXRMZWFzdEdMRVMoZ2w6OlZlcnNpb24oMywgMikpOwogCiAg
ICAgLy8gQU5HTEVfYmFzZV92ZXJ0ZXhfYmFzZV9pbnN0YW5jZQogICAgIGV4dGVuc2lvbnMtPmJh
c2VWZXJ0ZXhCYXNlSW5zdGFuY2UgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA1MDc5Y2IxOWY0
NDYwNDdiZTY4NWE4ZjhmNGE5YWI1YWZlZDYyN2NjLi41MjY5ZGM3ZDFhZmRiYTI3ZTRhZjkzNDJj
NjkwMDQzZTAxMzhkMjMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTQzOCw2ICsxNDM4LDcg
QEAgaWYgKEVOQUJMRV9XRUJHTCkKICAgICAgICAgaHRtbC9jYW52YXMvRVhUQmxlbmRNaW5NYXgu
Y3BwCiAgICAgICAgIGh0bWwvY2FudmFzL0VYVENvbG9yQnVmZmVyRmxvYXQuY3BwCiAgICAgICAg
IGh0bWwvY2FudmFzL0VYVENvbG9yQnVmZmVySGFsZkZsb2F0LmNwcAorICAgICAgICBodG1sL2Nh
bnZhcy9FWFRGbG9hdEJsZW5kLmNwcAogICAgICAgICBodG1sL2NhbnZhcy9FWFRGcmFnRGVwdGgu
Y3BwCiAgICAgICAgIGh0bWwvY2FudmFzL0VYVFNoYWRlclRleHR1cmVMT0QuY3BwCiAgICAgICAg
IGh0bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5jcHAKQEAgLTE0OTQsNiAr
MTQ5NSw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfSURMX0ZJTEVTCiAgICAgaHRtbC9jYW52YXMv
RVhUQmxlbmRNaW5NYXguaWRsCiAgICAgaHRtbC9jYW52YXMvRVhUQ29sb3JCdWZmZXJGbG9hdC5p
ZGwKICAgICBodG1sL2NhbnZhcy9FWFRDb2xvckJ1ZmZlckhhbGZGbG9hdC5pZGwKKyAgICBodG1s
L2NhbnZhcy9FWFRGbG9hdEJsZW5kLmlkbAogICAgIGh0bWwvY2FudmFzL0VYVEZyYWdEZXB0aC5p
ZGwKICAgICBodG1sL2NhbnZhcy9FWFRTaGFkZXJUZXh0dXJlTE9ELmlkbAogICAgIGh0bWwvY2Fu
dmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5pZGwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNl
cy5tYWtlCmluZGV4IGUwYWYyMGY1ZDgyNzA3NzA4YTc0Nzc2NzU0ZWJiZGNlMmUwNDM0ZTAuLmIx
NTY1ZmIwYzE0ZjIyYjE4Y2ZlNGViMmExZWEyYzg1YjIyY2QyMWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvRGVyaXZl
ZFNvdXJjZXMubWFrZQpAQCAtOTQ1LDYgKzk0NSw3IEBAIEpTX0JJTkRJTkdfSURMUyA9IFwKICAg
ICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0VYVEJsZW5kTWluTWF4LmlkbCBcCiAgICAgJChXZWJD
b3JlKS9odG1sL2NhbnZhcy9FWFRDb2xvckJ1ZmZlckZsb2F0LmlkbCBcCiAgICAgJChXZWJDb3Jl
KS9odG1sL2NhbnZhcy9FWFRDb2xvckJ1ZmZlckhhbGZGbG9hdC5pZGwgXAorICAgICQoV2ViQ29y
ZSkvaHRtbC9jYW52YXMvRVhURmxvYXRCbGVuZC5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9j
YW52YXMvRVhURnJhZ0RlcHRoLmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9FWFRT
aGFkZXJUZXh0dXJlTE9ELmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9FWFRUZXh0
dXJlRmlsdGVyQW5pc290cm9waWMuaWRsIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggNzI3NTYzZTVmYjc3
YTQ1OTQzMTBjNDBlMzNlZTQ2NjhjYjg1YThmOC4uNDA3ZjZiNTQ3YjA3ODI4YjE1NjRmMGFlN2Jj
YTBlZmJkMzk3YThmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTEyMzksNiArMTIzOSw3IEBAIGh0bWwv
Y2FudmFzL0NhbnZhc1N0eWxlLmNwcAogaHRtbC9jYW52YXMvRVhUQmxlbmRNaW5NYXguY3BwCiBo
dG1sL2NhbnZhcy9FWFRDb2xvckJ1ZmZlckZsb2F0LmNwcAogaHRtbC9jYW52YXMvRVhUQ29sb3JC
dWZmZXJIYWxmRmxvYXQuY3BwCitodG1sL2NhbnZhcy9FWFRGbG9hdEJsZW5kLmNwcAogaHRtbC9j
YW52YXMvRVhURnJhZ0RlcHRoLmNwcAogaHRtbC9jYW52YXMvRVhUU2hhZGVyVGV4dHVyZUxPRC5j
cHAKIGh0bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5jcHAKQEAgLTI4NDks
NiArMjg1MCw3IEBAIEpTRHluYW1pY3NDb21wcmVzc29yT3B0aW9ucy5jcHAKIEpTRVhUQmxlbmRN
aW5NYXguY3BwCiBKU0VYVENvbG9yQnVmZmVyRmxvYXQuY3BwCiBKU0VYVENvbG9yQnVmZmVySGFs
ZkZsb2F0LmNwcAorSlNFWFRGbG9hdEJsZW5kLmNwcAogSlNFWFRGcmFnRGVwdGguY3BwCiBKU0VY
VFNoYWRlclRleHR1cmVMT0QuY3BwCiBKU0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCAzZGNjNWU3MWI4YjEzMzkwMDI2MjFhYzdiNmNhYjc0MGFkZmNlMjFiLi5jYTM5Nzc0YjQw
NDk5ZDIyMmI3Nzg4NjMyOWIyZDhmYTY4ODBiODBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMjA0Myw2ICsxMjA0Myw5IEBA
CiAJCUEzM0M5RjkxMjRGODM1QUEwMDBGMDg0NSAvKiBXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNU
Q3NSR0IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR0xDb21wcmVzc2Vk
VGV4dHVyZVMzVENzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEzM0M5Rjkz
MjRGODM1QUIwMDBGMDg0NSAvKiBXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQ3NSR0IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR0xDb21wcmVzc2VkVGV4dHVy
ZVMzVENzUkdCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTMzQzlGOTQyNEY4
MzVBQjAwMEYwODQ1IC8qIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDc1JHQi5pZGwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVENzUkdCLmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTM3MDQ5RDgyNTFENEI4RTAwOUJBMUIzIC8qIEVY
VEZsb2F0QmxlbmQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVYVEZsb2F0QmxlbmQuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMzcwNDlEQTI1MUQ0QjhFMDA5QkExQjMg
LyogRVhURmxvYXRCbGVuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFWFRG
bG9hdEJsZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEzNzA0OURCMjUxRDRC
OEYwMDlCQTFCMyAvKiBFWFRGbG9hdEJsZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEVYVEZsb2F0QmxlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBM0FGOUQ4MTIwMzI1MkVFMDA2Q0FEMDYgLyogVXNlckFnZW50Q29jb2EubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBVc2VyQWdlbnRDb2NvYS5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTNBRjlEODIyMDMyNTMyNDAwNkNBRDA2IC8qIFVz
ZXJBZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVc2VyQWdlbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTNBRjlEODMyMDMyNTY5MTAwNkNBRDA2IC8q
IFVzZXJBZ2VudElPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFVzZXJBZ2VudElPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5MzMwLDYg
KzE5MzMzLDkgQEAKIAkJCQk2RTUzODhEQTI0NThBRTE5MDA3NkFFMDMgLyogRVhUQ29sb3JCdWZm
ZXJIYWxmRmxvYXQuY3BwICovLAogCQkJCTZFNTM4OERFMjQ1OEFFMUMwMDc2QUUwMyAvKiBFWFRD
b2xvckJ1ZmZlckhhbGZGbG9hdC5oICovLAogCQkJCTZFNTM4OERGMjQ1OEFFMUMwMDc2QUUwMyAv
KiBFWFRDb2xvckJ1ZmZlckhhbGZGbG9hdC5pZGwgKi8sCisJCQkJQTM3MDQ5REIyNTFENEI4RjAw
OUJBMUIzIC8qIEVYVEZsb2F0QmxlbmQuY3BwICovLAorCQkJCUEzNzA0OURBMjUxRDRCOEUwMDlC
QTFCMyAvKiBFWFRGbG9hdEJsZW5kLmggKi8sCisJCQkJQTM3MDQ5RDgyNTFENEI4RTAwOUJBMUIz
IC8qIEVYVEZsb2F0QmxlbmQuaWRsICovLAogCQkJCTcyRjFBRDlGMUEzOTA0QzMwMDAxNEUxOCAv
KiBFWFRGcmFnRGVwdGguY3BwICovLAogCQkJCTcyRjFBREEwMUEzOTA0QzMwMDAxNEUxOCAvKiBF
WFRGcmFnRGVwdGguaCAqLywKIAkJCQk3MkYxQURBMTFBMzkwNEMzMDAwMTRFMTggLyogRVhURnJh
Z0RlcHRoLmlkbCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQ29udmVydFdlYkdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29u
dmVydFdlYkdMLmNwcAppbmRleCBkMDU2YTI2OGU2N2FmMjE3MjcxZDk2MDI3ZjE5NjBhMjY1OGIx
ZjMxLi44NzVhZjM0NGY2NzAzZjNkNmEzMDE0MTdkNDg3N2EyM2YwNjU1Nzg3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRXZWJHTC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0V2ViR0wuY3BwCkBAIC0zMyw2
ICszMyw3IEBACiAjaW5jbHVkZSAiSlNFWFRCbGVuZE1pbk1heC5oIgogI2luY2x1ZGUgIkpTRVhU
Q29sb3JCdWZmZXJGbG9hdC5oIgogI2luY2x1ZGUgIkpTRVhUQ29sb3JCdWZmZXJIYWxmRmxvYXQu
aCIKKyNpbmNsdWRlICJKU0VYVEZsb2F0QmxlbmQuaCIKICNpbmNsdWRlICJKU0VYVEZyYWdEZXB0
aC5oIgogI2luY2x1ZGUgIkpTRVhUU2hhZGVyVGV4dHVyZUxPRC5oIgogI2luY2x1ZGUgIkpTRVhU
VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmgiCkBAIC0yMTcsNiArMjE4LDggQEAgSlNWYWx1ZSBj
b252ZXJ0VG9KU1ZhbHVlKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RP
TUdsb2JhbE9iamVjdCYKICAgICAgICAgcmV0dXJuIHRvSlMoJmxleGljYWxHbG9iYWxPYmplY3Qs
ICZnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEFOR0xFSW5zdGFuY2VkQXJyYXlzJj4oZXh0ZW5z
aW9uKSk7CiAgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6RVhUQ29sb3JCdWZmZXJIYWxmRmxvYXRO
YW1lOgogICAgICAgICByZXR1cm4gdG9KUygmbGV4aWNhbEdsb2JhbE9iamVjdCwgJmdsb2JhbE9i
amVjdCwgc3RhdGljX2Nhc3Q8RVhUQ29sb3JCdWZmZXJIYWxmRmxvYXQmPihleHRlbnNpb24pKTsK
KyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpFWFRGbG9hdEJsZW5kTmFtZToKKyAgICAgICAgcmV0
dXJuIHRvSlMoJmxleGljYWxHbG9iYWxPYmplY3QsICZnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0
PEVYVEZsb2F0QmxlbmQmPihleHRlbnNpb24pKTsKICAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpX
ZWJHTENvbG9yQnVmZmVyRmxvYXROYW1lOgogICAgICAgICByZXR1cm4gdG9KUygmbGV4aWNhbEds
b2JhbE9iamVjdCwgJmdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xDb2xvckJ1ZmZlckZs
b2F0Jj4oZXh0ZW5zaW9uKSk7CiAgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6RVhUQ29sb3JCdWZm
ZXJGbG9hdE5hbWU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRG
bG9hdEJsZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVEZsb2F0QmxlbmQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjRmZjc4YWJlZThiYzhkMDhkOWFjODQ1OGFhOTYzMGJlODRkNTQ4YTUK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRGbG9hdEJs
ZW5kLmNwcApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBFTkFCTEUoV0VCR0wpCisjaW5jbHVkZSAiRVhURmxvYXRCbGVuZC5oIgorCisjaW5jbHVkZSAi
RXh0ZW5zaW9uc0dMLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoRVhURmxvYXRC
bGVuZCk7CisKK0VYVEZsb2F0QmxlbmQ6OkVYVEZsb2F0QmxlbmQoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSYgY29udGV4dCkKKyAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCit7CisgICAg
Y29udGV4dC5ncmFwaGljc0NvbnRleHRHTCgpLT5nZXRFeHRlbnNpb25zKCkuZW5zdXJlRW5hYmxl
ZCgiR0xfRVhUX2Zsb2F0X2JsZW5kIl9zKTsKK30KKworRVhURmxvYXRCbGVuZDo6fkVYVEZsb2F0
QmxlbmQoKSA9IGRlZmF1bHQ7CisKK1dlYkdMRXh0ZW5zaW9uOjpFeHRlbnNpb25OYW1lIEVYVEZs
b2F0QmxlbmQ6OmdldE5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBFWFRGbG9hdEJsZW5kTmFt
ZTsKK30KKworYm9vbCBFWFRGbG9hdEJsZW5kOjpzdXBwb3J0ZWQoY29uc3QgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZSYgY29udGV4dCkKK3sKKyAgICByZXR1cm4gY29udGV4dC5ncmFwaGljc0Nv
bnRleHRHTCgpLT5nZXRFeHRlbnNpb25zKCkuc3VwcG9ydHMoIkdMX0VYVF9mbG9hdF9ibGVuZCJf
cyk7Cit9CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRGbG9hdEJs
ZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRGbG9hdEJsZW5kLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMWIwMzFiNzFhY2RkYzUyNjJhMTg4NGJlNTMyODhiNmY2NTJkODMyNQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVEZsb2F0QmxlbmQuaApAQCAt
MCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDE0IEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldlYkdMRXh0ZW5z
aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRVhURmxvYXRCbGVuZCBmaW5h
bCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChF
WFRGbG9hdEJsZW5kKTsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBFWFRGbG9hdEJsZW5kKFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UmKTsKKyAgICB2aXJ0dWFsIH5FWFRGbG9hdEJsZW5kKCk7CisK
KyAgICBFeHRlbnNpb25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZTsKKworICAgIHN0YXRp
YyBib29sIHN1cHBvcnRlZChjb25zdCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJik7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9FWFRGbG9hdEJsZW5kLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VY
VEZsb2F0QmxlbmQuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjNhMTM5YjdiZWJkZTlhZmFiYTE2ZTBmOTZkOTgz
ODRlZmY1ZjUwZDYKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9FWFRGbG9hdEJsZW5kLmlkbApAQCAtMCwwICsxLDMxIEBACisvKgorKiBDb3B5cmlnaHQgKEMp
IDIwMTQgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisqIGFyZSBtZXQ6CisqCisqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorKi8KKworWworICAgIENvbmRpdGlvbmFsPVdFQkdMLAorICAgIEdlbmVy
YXRlSXNSZWFjaGFibGU9SW1wbFdlYkdMUmVuZGVyaW5nQ29udGV4dCwKKyAgICBMZWdhY3lOb0lu
dGVyZmFjZU9iamVjdCwKK10gaW50ZXJmYWNlIEVYVEZsb2F0QmxlbmQgeworfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAK
aW5kZXggNDQ1ZDA5NmRhMDhkNjhjNjdiMjg1NzMwMDg4MDVmNjQ2NjQ2MDMwMy4uZjEzZmNiZjEy
Zjk3ODE1MWRmMjMzMDMyMjAxYWU0M2Q5NmUxY2FiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTMxLDYgKzMx
LDcgQEAKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkVYVENvbG9yQnVmZmVy
RmxvYXQuaCIKICNpbmNsdWRlICJFWFRDb2xvckJ1ZmZlckhhbGZGbG9hdC5oIgorI2luY2x1ZGUg
IkVYVEZsb2F0QmxlbmQuaCIKICNpbmNsdWRlICJFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMu
aCIKICNpbmNsdWRlICJFdmVudExvb3AuaCIKICNpbmNsdWRlICJFeHRlbnNpb25zR0wuaCIKQEAg
LTI2OTAsNiArMjY5MSw3IEBAIFdlYkdMRXh0ZW5zaW9uKiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0
OjpnZXRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKQogICAgIEVOQUJMRV9JRl9SRVFVRVNU
RUQoV2ViR0xEZWJ1Z1NoYWRlcnMsIG1fd2ViZ2xEZWJ1Z1NoYWRlcnMsICJXRUJHTF9kZWJ1Z19z
aGFkZXJzIiwgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkuc3VwcG9ydHMoIkdMX0FOR0xFX3Ry
YW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSJfcykpOwogICAgIEVOQUJMRV9JRl9SRVFVRVNURUQoRVhU
Q29sb3JCdWZmZXJGbG9hdCwgbV9leHRDb2xvckJ1ZmZlckZsb2F0LCAiRVhUX2NvbG9yX2J1ZmZl
cl9mbG9hdCIsIEVYVENvbG9yQnVmZmVyRmxvYXQ6OnN1cHBvcnRlZCgqdGhpcykpOwogICAgIEVO
QUJMRV9JRl9SRVFVRVNURUQoRVhUQ29sb3JCdWZmZXJIYWxmRmxvYXQsIG1fZXh0Q29sb3JCdWZm
ZXJIYWxmRmxvYXQsICJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiLCBFWFRDb2xvckJ1ZmZl
ckhhbGZGbG9hdDo6c3VwcG9ydGVkKCp0aGlzKSk7CisgICAgRU5BQkxFX0lGX1JFUVVFU1RFRChF
WFRGbG9hdEJsZW5kLCBtX2V4dEZsb2F0QmxlbmQsICJFWFRfZmxvYXRfYmxlbmQiLCBFWFRGbG9h
dEJsZW5kOjpzdXBwb3J0ZWQoKnRoaXMpKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAt
MjczNiw2ICsyNzM4LDggQEAgT3B0aW9uYWw8VmVjdG9yPFN0cmluZz4+IFdlYkdMMlJlbmRlcmlu
Z0NvbnRleHQ6OmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKQogICAgICAgICByZXN1bHQuYXBwZW5k
KCJFWFRfY29sb3JfYnVmZmVyX2Zsb2F0Il9zKTsKICAgICBpZiAoRVhUQ29sb3JCdWZmZXJIYWxm
RmxvYXQ6OnN1cHBvcnRlZCgqdGhpcykpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoIkVYVF9jb2xv
cl9idWZmZXJfaGFsZl9mbG9hdCJfcyk7CisgICAgaWYgKEVYVEZsb2F0QmxlbmQ6OnN1cHBvcnRl
ZCgqdGhpcykpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIkVYVF9mbG9hdF9ibGVuZCJfcyk7CiAK
ICAgICByZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xFeHRlbnNpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
RXh0ZW5zaW9uLmgKaW5kZXggZDMzNGNjODAyNjI4MDgwMGFlODlmMjEwNmIwYjc3ZWJkOWY4YzNh
Yi4uZDA4NjAzOGM3ZThmM2NmNjllNzA5ZGNmZWZlNTVmZGY0NTc3MWNhMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xFeHRlbnNpb24uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEV4dGVuc2lvbi5oCkBAIC02Myw2ICs2Myw3IEBAIHB1
YmxpYzoKICAgICAgICAgV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFTVENOYW1lLAogICAgICAgICBB
TkdMRUluc3RhbmNlZEFycmF5c05hbWUsCiAgICAgICAgIEVYVENvbG9yQnVmZmVySGFsZkZsb2F0
TmFtZSwKKyAgICAgICAgRVhURmxvYXRCbGVuZE5hbWUsCiAgICAgICAgIFdlYkdMQ29sb3JCdWZm
ZXJGbG9hdE5hbWUsCiAgICAgICAgIEVYVENvbG9yQnVmZmVyRmxvYXROYW1lLAogICAgIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmNwcAppbmRleCA5NGU5YWEyYjU3ZDM5YWI2NmM1MjhjZjAyNGZhNWQwM2Y1MTIyYjMyLi5jNjIw
OWI1ZTY1ZjI5MTRjMDRmNjU0MTIxM2Q5NGQxZWQ5NjY0NTY0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTMyLDYg
KzMyLDcgQEAKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkVYVEJsZW5kTWlu
TWF4LmgiCiAjaW5jbHVkZSAiRVhUQ29sb3JCdWZmZXJIYWxmRmxvYXQuaCIKKyNpbmNsdWRlICJF
WFRGbG9hdEJsZW5kLmgiCiAjaW5jbHVkZSAiRVhURnJhZ0RlcHRoLmgiCiAjaW5jbHVkZSAiRVhU
U2hhZGVyVGV4dHVyZUxPRC5oIgogI2luY2x1ZGUgIkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3Bp
Yy5oIgpAQCAtMTk0LDYgKzE5NSw3IEBAIFdlYkdMRXh0ZW5zaW9uKiBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCiAgICAgRU5BQkxFX0lGX1JF
UVVFU1RFRChXZWJHTERlYnVnUmVuZGVyZXJJbmZvLCBtX3dlYmdsRGVidWdSZW5kZXJlckluZm8s
ICJXRUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIiwgdHJ1ZSk7CiAgICAgRU5BQkxFX0lGX1JFUVVF
U1RFRChXZWJHTERlYnVnU2hhZGVycywgbV93ZWJnbERlYnVnU2hhZGVycywgIldFQkdMX2RlYnVn
X3NoYWRlcnMiLCBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfQU5HTEVf
dHJhbnNsYXRlZF9zaGFkZXJfc291cmNlIl9zKSk7CiAgICAgRU5BQkxFX0lGX1JFUVVFU1RFRChF
WFRDb2xvckJ1ZmZlckhhbGZGbG9hdCwgbV9leHRDb2xvckJ1ZmZlckhhbGZGbG9hdCwgIkVYVF9j
b2xvcl9idWZmZXJfaGFsZl9mbG9hdCIsIEVYVENvbG9yQnVmZmVySGFsZkZsb2F0OjpzdXBwb3J0
ZWQoKnRoaXMpKTsKKyAgICBFTkFCTEVfSUZfUkVRVUVTVEVEKEVYVEZsb2F0QmxlbmQsIG1fZXh0
RmxvYXRCbGVuZCwgIkVYVF9mbG9hdF9ibGVuZCIsIEVYVEZsb2F0QmxlbmQ6OnN1cHBvcnRlZCgq
dGhpcykpOwogICAgIEVOQUJMRV9JRl9SRVFVRVNURUQoV2ViR0xDb2xvckJ1ZmZlckZsb2F0LCBt
X3dlYmdsQ29sb3JCdWZmZXJGbG9hdCwgIldFQkdMX2NvbG9yX2J1ZmZlcl9mbG9hdCIsIFdlYkdM
Q29sb3JCdWZmZXJGbG9hdDo6c3VwcG9ydGVkKCp0aGlzKSk7CiAgICAgcmV0dXJuIG51bGxwdHI7
CiB9CkBAIC0yNTgsNiArMjYwLDggQEAgT3B0aW9uYWw8VmVjdG9yPFN0cmluZz4+IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpCiAgICAgcmVzdWx0LmFwcGVu
ZCgiV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyJfcyk7CiAgICAgaWYgKEVYVENvbG9yQnVmZmVy
SGFsZkZsb2F0OjpzdXBwb3J0ZWQoKnRoaXMpKQogICAgICAgICByZXN1bHQuYXBwZW5kKCJFWFRf
Y29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiX3MpOworICAgIGlmIChFWFRGbG9hdEJsZW5kOjpzdXBw
b3J0ZWQoKnRoaXMpKQorICAgICAgICByZXN1bHQuYXBwZW5kKCJFWFRfZmxvYXRfYmxlbmQiX3Mp
OwogICAgIGlmIChXZWJHTENvbG9yQnVmZmVyRmxvYXQ6OnN1cHBvcnRlZCgqdGhpcykpCiAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoIldFQkdMX2NvbG9yX2J1ZmZlcl9mbG9hdCJfcyk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5jcHAKaW5kZXggODA1NGFkMzMzZThkMTQ0ZDE2OTA2Y2JlYTBlZTlhODdhYzk0Y2U4Ni4u
ZDlhOGJkZGFjYWExMjk5YjRjNjA3YjU0Y2Y5YjA2ZDA4MGVhMDk1NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5j
cHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJFWFRCbGVuZE1pbk1heC5oIgogI2luY2x1
ZGUgIkVYVENvbG9yQnVmZmVyRmxvYXQuaCIKICNpbmNsdWRlICJFWFRDb2xvckJ1ZmZlckhhbGZG
bG9hdC5oIgorI2luY2x1ZGUgIkVYVEZsb2F0QmxlbmQuaCIKICNpbmNsdWRlICJFWFRGcmFnRGVw
dGguaCIKICNpbmNsdWRlICJFWFRTaGFkZXJUZXh0dXJlTE9ELmgiCiAjaW5jbHVkZSAiRVhUVGV4
dHVyZUZpbHRlckFuaXNvdHJvcGljLmgiCkBAIC0zNzM2LDYgKzM3MzcsNyBAQCBib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmV4dGVuc2lvbklzRW5hYmxlZChjb25zdCBTdHJpbmcmIG5h
bWUpCiAgICAgQ0hFQ0tfRVhURU5TSU9OKG1fd2ViZ2xEcmF3QnVmZmVycywgIldFQkdMX2RyYXdf
YnVmZmVycyIpOwogICAgIENIRUNLX0VYVEVOU0lPTihtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzLCAi
QU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpOwogICAgIENIRUNLX0VYVEVOU0lPTihtX2V4dENvbG9y
QnVmZmVySGFsZkZsb2F0LCAiRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0Iik7CisgICAgQ0hF
Q0tfRVhURU5TSU9OKG1fZXh0RmxvYXRCbGVuZCwgIkVYVF9mbG9hdF9ibGVuZCIpOwogICAgIENI
RUNLX0VYVEVOU0lPTihtX3dlYmdsQ29sb3JCdWZmZXJGbG9hdCwgIldFQkdMX2NvbG9yX2J1ZmZl
cl9mbG9hdCIpOwogICAgIENIRUNLX0VYVEVOU0lPTihtX2V4dENvbG9yQnVmZmVyRmxvYXQsICJF
WFRfY29sb3JfYnVmZmVyX2Zsb2F0Iik7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzgwMiw2ICs3
ODA0LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpsb3NlRXh0ZW5zaW9ucyhM
b3N0Q29udGV4dE1vZGUgbW9kZSkKICAgICBMT1NFX0VYVEVOU0lPTihtX3dlYmdsRHJhd0J1ZmZl
cnMpOwogICAgIExPU0VfRVhURU5TSU9OKG1fYW5nbGVJbnN0YW5jZWRBcnJheXMpOwogICAgIExP
U0VfRVhURU5TSU9OKG1fZXh0Q29sb3JCdWZmZXJIYWxmRmxvYXQpOworICAgIExPU0VfRVhURU5T
SU9OKG1fZXh0RmxvYXRCbGVuZCk7CiAgICAgTE9TRV9FWFRFTlNJT04obV93ZWJnbENvbG9yQnVm
ZmVyRmxvYXQpOwogICAgIExPU0VfRVhURU5TSU9OKG1fZXh0Q29sb3JCdWZmZXJGbG9hdCk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlLmgKaW5kZXggZmQ4MDFkMGFiYTFmMDY3NmZmYjFhNDVhZTc4NzNiYWZjMTI1MzM3
MS4uM2UwNDU1ZmM4NDg4OTNiOWU1ZTliMGM3OTYzYTQyYTExMGQyYzc1YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uu
aApAQCAtNzEsNiArNzEsNyBAQCBjbGFzcyBBTkdMRUluc3RhbmNlZEFycmF5czsKIGNsYXNzIEVY
VEJsZW5kTWluTWF4OwogY2xhc3MgRVhUQ29sb3JCdWZmZXJGbG9hdDsKIGNsYXNzIEVYVENvbG9y
QnVmZmVySGFsZkZsb2F0OworY2xhc3MgRVhURmxvYXRCbGVuZDsKIGNsYXNzIEVYVFRleHR1cmVG
aWx0ZXJBbmlzb3Ryb3BpYzsKIGNsYXNzIEVYVFNoYWRlclRleHR1cmVMT0Q7CiBjbGFzcyBFWFRz
UkdCOwpAQCAtNjkwLDYgKzY5MSw3IEBAIHByb3RlY3RlZDoKICAgICBSZWZQdHI8V2ViR0xEcmF3
QnVmZmVycz4gbV93ZWJnbERyYXdCdWZmZXJzOwogICAgIFJlZlB0cjxBTkdMRUluc3RhbmNlZEFy
cmF5cz4gbV9hbmdsZUluc3RhbmNlZEFycmF5czsKICAgICBSZWZQdHI8RVhUQ29sb3JCdWZmZXJI
YWxmRmxvYXQ+IG1fZXh0Q29sb3JCdWZmZXJIYWxmRmxvYXQ7CisgICAgUmVmUHRyPEVYVEZsb2F0
QmxlbmQ+IG1fZXh0RmxvYXRCbGVuZDsKICAgICBSZWZQdHI8V2ViR0xDb2xvckJ1ZmZlckZsb2F0
PiBtX3dlYmdsQ29sb3JCdWZmZXJGbG9hdDsKICAgICBSZWZQdHI8RVhUQ29sb3JCdWZmZXJGbG9h
dD4gbV9leHRDb2xvckJ1ZmZlckZsb2F0OwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNjlhNzk4MWYxNmU4NGRiNjU0ZWI3
NmExZDZiZTc1MWFlNzNkMGI0NC4uY2Y3YzVjZDUzODdiY2RlNjdkYzcwZWRmMzZhMDBiNjgwOTc1
ZWUwMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIwLTA5LTI0ICBKYW1lcyBEYXJwaW5pYW4g
IDxqZGFycGluaWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBTdXBwb3J0IEVYVF9mbG9hdF9i
bGVuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2
OTQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3
ZWJnbC9jb25mb3JtYW5jZS9leHRlbnNpb25zL2V4dC1mbG9hdC1ibGVuZC1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIHdlYmdsL2NvbmZvcm1hbmNlL2V4dGVuc2lvbnMvZXh0LWZsb2F0
LWJsZW5kLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdsL3Jlc291cmNlcy8uLi46IEFkZGVk
IHNvbWUgc3VwcG9ydCBmaWxlcy4KKwogMjAyMC0wOS0yMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpA
YXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHVuc2tpcCB3ZWJhdWRpby9BbmFseXNl
ci9oYW5kbGUtc2lsZW50LWlucHV0cy5odG1sLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
Z2wvY29uZm9ybWFuY2UvZXh0ZW5zaW9ucy9leHQtZmxvYXQtYmxlbmQtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvd2ViZ2wvY29uZm9ybWFuY2UvZXh0ZW5zaW9ucy9leHQtZmxvYXQtYmxlbmQt
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMxOWExM2E5YmY5ZTUyYmUwNGQ3MzUwMGVmOTYxMGY4
OWJhOTBlNTEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJnbC9jb25mb3JtYW5j
ZS9leHRlbnNpb25zL2V4dC1mbG9hdC1ibGVuZC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBA
CitUaGlzIHRlc3QgcnVucyB0aGUgV2ViR0wgVGVzdCBsaXN0ZWQgYmVsb3cgaW4gYW4gaWZyYW1l
IGFuZCByZXBvcnRzIFBBU1Mgb3IgRkFJTC4KKworVGVzdDogLi4vLi4vcmVzb3VyY2VzL3dlYmds
X3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvZXh0ZW5zaW9ucy9leHQtZmxvYXQtYmxlbmQuaHRtbAor
UEFTUworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJnbC9jb25mb3JtYW5jZS9leHRlbnNp
b25zL2V4dC1mbG9hdC1ibGVuZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ2wvY29uZm9ybWFuY2Uv
ZXh0ZW5zaW9ucy9leHQtZmxvYXQtYmxlbmQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYWIzMjU5MTdkMTlm
M2ZlMTJmMzExMjY5YzRlMDUxOTkxM2Q2YjRlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvd2ViZ2wvY29uZm9ybWFuY2UvZXh0ZW5zaW9ucy9leHQtZmxvYXQtYmxlbmQuaHRtbApAQCAt
MCwwICsxLDE4IEBACis8IS0tIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0
ZS13ZWJnbC10ZXN0cy5weS4gRE8gTk9UIEVESVQgLS0+Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cis8dGl0bGU+V2ViR0wgQ29uZm9ybWFu
Y2UgVGVzdCBXcmFwcGVyIGZvciBleHQtZmxvYXQtYmxlbmQuaHRtbDwvdGl0bGU+Cis8c2NyaXB0
IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4v
Li4vcmVzb3VyY2VzL3dlYmtpdC13ZWJnbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+Cis8cD5UaGlzIHRlc3QgcnVucyB0aGUgV2ViR0wgVGVzdCBsaXN0ZWQgYmVs
b3cgaW4gYW4gaWZyYW1lIGFuZCByZXBvcnRzIFBBU1Mgb3IgRkFJTC48L3A+CitUZXN0OiA8YSBo
cmVmPSIuLi8uLi9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS9leHRlbnNp
b25zL2V4dC1mbG9hdC1ibGVuZC5odG1sIj4uLi8uLi9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxl
cy9jb25mb3JtYW5jZS9leHRlbnNpb25zL2V4dC1mbG9hdC1ibGVuZC5odG1sPC9hPgorPGRpdiBp
ZD0icmVzdWx0Ij48L2Rpdj4KKzxkaXYgaWQ9ImlmcmFtZSI+Cis8aWZyYW1lIHNyYz0iLi4vLi4v
cmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvZXh0ZW5zaW9ucy9leHQtZmxv
YXQtYmxlbmQuaHRtbCIgd2lkdGg9IjgwMCIgaGVpZ2h0PSI2MDAiPjwvaWZyYW1lPgorPC9kaXY+
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJnbC9yZXNvdXJj
ZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS9leHRlbnNpb25zL2V4dC1mbG9hdC1ibGVu
ZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29u
Zm9ybWFuY2UvZXh0ZW5zaW9ucy9leHQtZmxvYXQtYmxlbmQuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hODI1
ZDc4YmVmNmU5Yzg5MTc4NGNkNWEzODE0ZjE1MGQ1MmY5MTFlCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2Uv
ZXh0ZW5zaW9ucy9leHQtZmxvYXQtYmxlbmQuaHRtbApAQCAtMCwwICsxLDk4IEBACis8IURPQ1RZ
UEUgaHRtbD4NCis8aHRtbD4NCis8aGVhZD4NCis8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+DQorPHRp
dGxlPldlYkdMIEVYVF9mbG9hdF9ibGVuZCBDb25mb3JtYW5jZSBUZXN0czwvdGl0bGU+DQorPGxp
bmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5j
c3MiLz4NCis8c2NyaXB0IHNyYz0iLi4vLi4vanMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pg0K
KzxzY3JpcHQgc3JjPSIuLi8uLi9qcy93ZWJnbC10ZXN0LXV0aWxzLmpzIj48L3NjcmlwdD4NCis8
c2NyaXB0IHNyYz0iLi4vLi4vanMvdGVzdHMvZXh0LWZsb2F0LWJsZW5kLmpzIj48L3NjcmlwdD4N
Cis8L2hlYWQ+DQorPGJvZHk+DQorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2Pg0KKzxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2Pg0KKzxzY3JpcHQ+DQorInVzZSBzdHJpY3QiOw0KK2Rlc2NyaXB0
aW9uKCJUaGlzIHRlc3QgdmVyaWZpZXMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIEVYVF9mbG9h
dF9ibGVuZCBleHRlbnNpb24sIGlmIGl0IGlzIGF2YWlsYWJsZS4iKTsNCisNCit2YXIgd3R1ID0g
V2ViR0xUZXN0VXRpbHM7DQordmFyIGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJj
YW52YXMiKTsNCit2YXIgZ2wgPSB3dHUuY3JlYXRlM0RDb250ZXh0KGNhbnZhcyk7DQordmFyIGV4
dCA9IG51bGw7DQorDQorZnVuY3Rpb24gZXh0RmxvYXRCbGVuZFRlc3RzKHZlcnNpb24sIGNvbmZp
Zykgew0KKyAgICBkZWJ1ZygiIik7DQorICAgIGRlYnVnKCJUZXN0aW5nIGZsb2F0MzIgYmxlbmRp
bmcgd2l0aG91dCBFWFRfZmxvYXRfYmxlbmQiKTsNCisgICAgdGVzdEV4dEZsb2F0QmxlbmQoY29u
ZmlnLmludGVybmFsRm9ybWF0KTsNCisgICAgdGVzdEV4dEZsb2F0QmxlbmRNUlQodmVyc2lvbiwg
Y29uZmlnLmRyYXdCdWZmZXJzKTsNCisgICAgdGVzdEV4dEZsb2F0QmxlbmROb25GbG9hdDMyVHlw
ZSh2ZXJzaW9uLCBjb25maWcub2VzVGV4dHVyZUhhbGZGbG9hdCk7DQorDQorICAgIGNvbnN0IGZs
b2F0QmxlbmQgPSBnbC5nZXRFeHRlbnNpb24oIkVYVF9mbG9hdF9ibGVuZCIpOw0KKyAgICBpZiAo
IWZsb2F0QmxlbmQpIHsNCisgICAgICAgIHRlc3RQYXNzZWQoIkVYVF9mbG9hdF9ibGVuZCBpcyBh
bGxvd2VkIHRvIGJlIG1pc3NpbmcuIik7DQorICAgICAgICByZXR1cm47DQorICAgIH0NCisNCisg
ICAgZGVidWcoIiIpOw0KKyAgICBkZWJ1ZygiVGVzdGluZyB0aGF0IGZsb2F0MzIgYmxlbmRpbmcg
aXMgYWxsb3dlZCB3aXRoIEVYVF9mbG9hdF9ibGVuZCIpOw0KKyAgICB0ZXN0RXh0RmxvYXRCbGVu
ZChjb25maWcuaW50ZXJuYWxGb3JtYXQpOw0KKyAgICB0ZXN0RXh0RmxvYXRCbGVuZE1SVCh2ZXJz
aW9uLCBjb25maWcuZHJhd0J1ZmZlcnMpOw0KKyAgICB0ZXN0RXh0RmxvYXRCbGVuZE5vbkZsb2F0
MzJUeXBlKHZlcnNpb24sIGNvbmZpZy5vZXNUZXh0dXJlSGFsZkZsb2F0KTsNCit9DQorDQorKGZ1
bmN0aW9uKCl7DQorICAgIGlmICh3dHUuZ2V0RGVmYXVsdDNEQ29udGV4dFZlcnNpb24oKSA8IDIp
IHsNCisgICAgICAgIGNvbnN0IG9lc1RleHR1cmVGbG9hdCA9IGdsLmdldEV4dGVuc2lvbigiT0VT
X3RleHR1cmVfZmxvYXQiKTsNCisgICAgICAgIGlmICghb2VzVGV4dHVyZUZsb2F0KSB7DQorICAg
ICAgICAgICAgdGVzdFBhc3NlZCgiT0VTX3RleHR1cmVfZmxvYXQgaXMgYWxsb3dlZCB0byBiZSBt
aXNzaW5nLiIpOw0KKyAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgIH0NCisNCisgICAgICAg
IGNvbnN0IGNvbG9yQnVmZmVyRmxvYXQgPSBnbC5nZXRFeHRlbnNpb24oIldFQkdMX2NvbG9yX2J1
ZmZlcl9mbG9hdCIpOw0KKyAgICAgICAgaWYgKCFjb2xvckJ1ZmZlckZsb2F0KSB7DQorICAgICAg
ICAgICAgdGVzdFBhc3NlZCgiV0VCR0xfY29sb3JfYnVmZmVyX2Zsb2F0IGlzIGFsbG93ZWQgdG8g
YmUgbWlzc2luZy4iKTsNCisgICAgICAgICAgICByZXR1cm47DQorICAgICAgICB9DQorDQorICAg
ICAgICBjb25zdCBkcmF3QnVmZmVycyA9IGdsLmdldEV4dGVuc2lvbigiV0VCR0xfZHJhd19idWZm
ZXJzIik7DQorICAgICAgICBpZiAoIWRyYXdCdWZmZXJzKSB7DQorICAgICAgICAgICAgZGVidWco
IldFQkdMX2RyYXdfYnVmZmVycyBpcyBhbGxvd2VkIHRvIGJlIG1pc3NpbmcuIE1SVCB0ZXN0cyB3
aWxsIGJlIHNraXBwZWQuIik7DQorICAgICAgICB9DQorDQorICAgICAgICBjb25zdCBvZXNUZXh0
dXJlSGFsZkZsb2F0ID0gZ2wuZ2V0RXh0ZW5zaW9uKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Iik7
DQorICAgICAgICBjb25zdCBleHRDb2xvckJ1ZmZlckhhbGZGbG9hdCA9IGdsLmdldEV4dGVuc2lv
bigiRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0Iik7DQorICAgICAgICBjb25zdCB0ZXN0SGFs
ZkZsb2F0ID0gISghb2VzVGV4dHVyZUhhbGZGbG9hdCB8fCAhZXh0Q29sb3JCdWZmZXJIYWxmRmxv
YXQpOw0KKyAgICAgICAgaWYgKCF0ZXN0SGFsZkZsb2F0KSB7DQorICAgICAgICAgICAgZGVidWco
Ik9FU190ZXh0dXJlX2hhbGZfZmxvYXQgb3IgRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0IGlz
IGFsbG93ZWQgdG8gYmUgbWlzc2luZy4gTm9uRmxvYXQzMlR5cGUgdGVzdHMgd2lsbCBiZSBza2lw
cGVkLiIpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgY29uc3QgaW50ZXJuYWxGb3JtYXQgPSBn
bC5SR0JBOw0KKyAgICAgICAgZXh0RmxvYXRCbGVuZFRlc3RzKDEsIHsNCisgICAgICAgICAgICBp
bnRlcm5hbEZvcm1hdCwgZHJhd0J1ZmZlcnMsIG9lc1RleHR1cmVIYWxmRmxvYXQNCisgICAgICAg
IH0pOw0KKyAgICB9IGVsc2Ugew0KKyAgICAgICAgY29uc3QgY29sb3JCdWZmZXJGbG9hdCA9IGds
LmdldEV4dGVuc2lvbigiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpOw0KKyAgICAgICAgaWYgKCFj
b2xvckJ1ZmZlckZsb2F0KSB7DQorICAgICAgICAgICAgdGVzdFBhc3NlZCgiRVhUX2NvbG9yX2J1
ZmZlcl9mbG9hdCBpcyBhbGxvd2VkIHRvIGJlIG1pc3NpbmcuIik7DQorICAgICAgICAgICAgcmV0
dXJuOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgY29uc3QgaW50ZXJuYWxGb3JtYXQgPSBnbC5S
R0JBMzJGOw0KKyAgICAgICAgZXh0RmxvYXRCbGVuZFRlc3RzKDIsIHsNCisgICAgICAgICAgICBp
bnRlcm5hbEZvcm1hdA0KKyAgICAgICAgfSk7DQorICAgIH0NCit9KSgpOw0KKw0KK2RlYnVnKCIi
KTsNCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsNCis8L3NjcmlwdD4NCis8c2NyaXB0
IHNyYz0iLi4vLi4vanMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4NCisNCis8L2JvZHk+DQor
PC9odG1sPg0KKzwhLS0NCitDb3B5cmlnaHQgKGMpIDIwMTkgVGhlIEtocm9ub3MgR3JvdXAgSW5j
Lg0KK1VzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlDQorZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUuDQorLS0+
DQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmls
ZXMvanMvZGVza3RvcC1nbC1jb25zdGFudHMuanMgYi9MYXlvdXRUZXN0cy93ZWJnbC9yZXNvdXJj
ZXMvd2ViZ2xfdGVzdF9maWxlcy9qcy9kZXNrdG9wLWdsLWNvbnN0YW50cy5qcwpuZXcgZmlsZSBt
b2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
Li40ZDQ4MzNjMmNlZTE5NjQxOWYxZTFhOTY0MzFjMjYxOWZmMzhhYWY1Ci0tLSAvZGV2L251bGwK
KysrIGIvTGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvanMvZGVz
a3RvcC1nbC1jb25zdGFudHMuanMKQEAgLTAsMCArMSwyNjM5IEBACisvKgorQ29weXJpZ2h0IChj
KSAyMDE5IFRoZSBLaHJvbm9zIEdyb3VwIEluYy4KK1VzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlz
IGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCitmb3VuZCBpbiB0
aGUgTElDRU5TRS50eHQgZmlsZS4KKyovCisKKy8vIERlZmluZXMgYSBidW5jaCBvZiBEZXNrdG9w
R0wgY29uc3RhbnRzIHNvIHdlIGNhbiBtYWtlIHN1cmUgV2ViR0wKKy8vIGltcGxlbWVudGF0aW9u
cyBkaXNhbGxvdyB0aGVtLgorCisvLyBTb21lIG9mIHRoZXNlIGFyZSBhbHNvIEdMRVMyL0dMRVMz
IGNvbnN0YW50cyB0aGF0IGhhdmUgYmVlbiByZW1vdmVkIGZyb20KKy8vIFdlYkdMLgorCit2YXIg
ZGVza3RvcEdMID0geworICAnTUlOJzogMHg4MDA3LAorICAnTUFYJzogMHg4MDA4LAorICAnUVVB
RFMnOiAweDAwMDcsCisgICdRVUFEX1NUUklQJzogMHgwMDA4LAorICAnUE9MWUdPTic6IDB4MDAw
OSwKKyAgJzEnOiAweDAwMDEsCisgICcyJzogMHgwMDAyLAorICAnMyc6IDB4MDAwMywKKyAgJzQn
OiAweDAwMDQsCisgICdTVEFUSUNfUkVBRCc6IDB4ODhFNSwKKyAgJ0NMSVBfUExBTkUwJzogMHgz
MDAwLAorICAnUEVSU1BFQ1RJVkVfQ09SUkVDVElPTl9ISU5UJzogMHgwQzUwLAorICAnQUNDVU1f
QlVGRkVSX0JJVCc6IDB4MDIwMCwKKyAgJ1JHQjQnOiAweDgwNEYsCisgICdSR0I1JzogMHg4MDUw
LAorICAnUkdCOCc6IDB4ODA1MSwKKyAgJ1JHQjEwJzogMHg4MDUyLAorICAnUkdCMTInOiAweDgw
NTMsCisgICdSR0IxNic6IDB4ODA1NCwKKyAgJ1JHQkEyJzogMHg4MDU1LAorICAnUkdCQTQnOiAw
eDgwNTYsCisgICdSR0I1X0ExJzogMHg4MDU3LAorICAnUkdCQTgnOiAweDgwNTgsCisgICdSR0Ix
MF9BMic6IDB4ODA1OSwKKyAgJ1JHQkExMic6IDB4ODA1QSwKKyAgJ1JHQkExNic6IDB4ODA1QiwK
KyAgJ1NNT09USF9QT0lOVF9TSVpFX1JBTkdFJzogMHgwQjEyLAorICAnU01PT1RIX1BPSU5UX1NJ
WkVfR1JBTlVMQVJJVFknOiAweDBCMTMsCisgICdTTU9PVEhfTElORV9XSURUSF9SQU5HRSc6IDB4
MEIyMiwKKyAgJ1NNT09USF9MSU5FX1dJRFRIX0dSQU5VTEFSSVRZJzogMHgwQjIzLAorICAnVU5T
SUdORURfQllURV8zXzNfMic6IDB4ODAzMiwKKyAgJ1VOU0lHTkVEX1NIT1JUXzRfNF80XzQnOiAw
eDgwMzMsCisgICdVTlNJR05FRF9TSE9SVF81XzVfNV8xJzogMHg4MDM0LAorICAnVU5TSUdORURf
SU5UXzhfOF84XzgnOiAweDgwMzUsCisgICdVTlNJR05FRF9JTlRfMTBfMTBfMTBfMic6IDB4ODAz
NiwKKyAgJ1JFU0NBTEVfTk9STUFMJzogMHg4MDNBLAorICAnVEVYVFVSRV9CSU5ESU5HXzNEJzog
MHg4MDZBLAorICAnUEFDS19TS0lQX0lNQUdFUyc6IDB4ODA2QiwKKyAgJ1BBQ0tfSU1BR0VfSEVJ
R0hUJzogMHg4MDZDLAorICAnVU5QQUNLX1NLSVBfSU1BR0VTJzogMHg4MDZELAorICAnVU5QQUNL
X0lNQUdFX0hFSUdIVCc6IDB4ODA2RSwKKyAgJ1RFWFRVUkVfM0QnOiAweDgwNkYsCisgICdQUk9Y
WV9URVhUVVJFXzNEJzogMHg4MDcwLAorICAnVEVYVFVSRV9ERVBUSCc6IDB4ODA3MSwKKyAgJ1RF
WFRVUkVfV1JBUF9SJzogMHg4MDcyLAorICAnTUFYXzNEX1RFWFRVUkVfU0laRSc6IDB4ODA3MywK
KyAgJ0JHUic6IDB4ODBFMCwKKyAgJ0JHUkEnOiAweDgwRTEsCisgICdNQVhfRUxFTUVOVFNfVkVS
VElDRVMnOiAweDgwRTgsCisgICdNQVhfRUxFTUVOVFNfSU5ESUNFUyc6IDB4ODBFOSwKKyAgJ0NM
QU1QX1RPX0VER0UnOiAweDgxMkYsCisgICdURVhUVVJFX01JTl9MT0QnOiAweDgxM0EsCisgICdU
RVhUVVJFX01BWF9MT0QnOiAweDgxM0IsCisgICdURVhUVVJFX0JBU0VfTEVWRUwnOiAweDgxM0Ms
CisgICdURVhUVVJFX01BWF9MRVZFTCc6IDB4ODEzRCwKKyAgJ0xJR0hUX01PREVMX0NPTE9SX0NP
TlRST0wnOiAweDgxRjgsCisgICdTSU5HTEVfQ09MT1InOiAweDgxRjksCisgICdTRVBBUkFURV9T
UEVDVUxBUl9DT0xPUic6IDB4ODFGQSwKKyAgJ1VOU0lHTkVEX0JZVEVfMl8zXzNfUkVWJzogMHg4
MzYyLAorICAnVU5TSUdORURfU0hPUlRfNV82XzUnOiAweDgzNjMsCisgICdVTlNJR05FRF9TSE9S
VF81XzZfNV9SRVYnOiAweDgzNjQsCisgICdVTlNJR05FRF9TSE9SVF80XzRfNF80X1JFVic6IDB4
ODM2NSwKKyAgJ1VOU0lHTkVEX1NIT1JUXzFfNV81XzVfUkVWJzogMHg4MzY2LAorICAnVU5TSUdO
RURfSU5UXzhfOF84XzhfUkVWJzogMHg4MzY3LAorICAnVU5TSUdORURfSU5UXzJfMTBfMTBfMTBf
UkVWJzogMHg4MzY4LAorICAnQUxJQVNFRF9QT0lOVF9TSVpFX1JBTkdFJzogMHg4NDZELAorICAn
QUxJQVNFRF9MSU5FX1dJRFRIX1JBTkdFJzogMHg4NDZFLAorICAnTVVMVElTQU1QTEUnOiAweDgw
OUQsCisgICdTQU1QTEVfQUxQSEFfVE9fQ09WRVJBR0UnOiAweDgwOUUsCisgICdTQU1QTEVfQUxQ
SEFfVE9fT05FJzogMHg4MDlGLAorICAnU0FNUExFX0NPVkVSQUdFJzogMHg4MEEwLAorICAnU0FN
UExFX0JVRkZFUlMnOiAweDgwQTgsCisgICdTQU1QTEVTJzogMHg4MEE5LAorICAnU0FNUExFX0NP
VkVSQUdFX1ZBTFVFJzogMHg4MEFBLAorICAnU0FNUExFX0NPVkVSQUdFX0lOVkVSVCc6IDB4ODBB
QiwKKyAgJ0NMQU1QX1RPX0JPUkRFUic6IDB4ODEyRCwKKyAgJ1RFWFRVUkUwJzogMHg4NEMwLAor
ICAnVEVYVFVSRTEnOiAweDg0QzEsCisgICdURVhUVVJFMic6IDB4ODRDMiwKKyAgJ1RFWFRVUkUz
JzogMHg4NEMzLAorICAnVEVYVFVSRTQnOiAweDg0QzQsCisgICdURVhUVVJFNSc6IDB4ODRDNSwK
KyAgJ1RFWFRVUkU2JzogMHg4NEM2LAorICAnVEVYVFVSRTcnOiAweDg0QzcsCisgICdURVhUVVJF
OCc6IDB4ODRDOCwKKyAgJ1RFWFRVUkU5JzogMHg4NEM5LAorICAnVEVYVFVSRTEwJzogMHg4NENB
LAorICAnVEVYVFVSRTExJzogMHg4NENCLAorICAnVEVYVFVSRTEyJzogMHg4NENDLAorICAnVEVY
VFVSRTEzJzogMHg4NENELAorICAnVEVYVFVSRTE0JzogMHg4NENFLAorICAnVEVYVFVSRTE1Jzog
MHg4NENGLAorICAnVEVYVFVSRTE2JzogMHg4NEQwLAorICAnVEVYVFVSRTE3JzogMHg4NEQxLAor
ICAnVEVYVFVSRTE4JzogMHg4NEQyLAorICAnVEVYVFVSRTE5JzogMHg4NEQzLAorICAnVEVYVFVS
RTIwJzogMHg4NEQ0LAorICAnVEVYVFVSRTIxJzogMHg4NEQ1LAorICAnVEVYVFVSRTIyJzogMHg4
NEQ2LAorICAnVEVYVFVSRTIzJzogMHg4NEQ3LAorICAnVEVYVFVSRTI0JzogMHg4NEQ4LAorICAn
VEVYVFVSRTI1JzogMHg4NEQ5LAorICAnVEVYVFVSRTI2JzogMHg4NERBLAorICAnVEVYVFVSRTI3
JzogMHg4NERCLAorICAnVEVYVFVSRTI4JzogMHg4NERDLAorICAnVEVYVFVSRTI5JzogMHg4NERE
LAorICAnVEVYVFVSRTMwJzogMHg4NERFLAorICAnVEVYVFVSRTMxJzogMHg4NERGLAorICAnQUNU
SVZFX1RFWFRVUkUnOiAweDg0RTAsCisgICdDTElFTlRfQUNUSVZFX1RFWFRVUkUnOiAweDg0RTEs
CisgICdNQVhfVEVYVFVSRV9VTklUUyc6IDB4ODRFMiwKKyAgJ1RSQU5TUE9TRV9NT0RFTFZJRVdf
TUFUUklYJzogMHg4NEUzLAorICAnVFJBTlNQT1NFX1BST0pFQ1RJT05fTUFUUklYJzogMHg4NEU0
LAorICAnVFJBTlNQT1NFX1RFWFRVUkVfTUFUUklYJzogMHg4NEU1LAorICAnVFJBTlNQT1NFX0NP
TE9SX01BVFJJWCc6IDB4ODRFNiwKKyAgJ1NVQlRSQUNUJzogMHg4NEU3LAorICAnQ09NUFJFU1NF
RF9BTFBIQSc6IDB4ODRFOSwKKyAgJ0NPTVBSRVNTRURfTFVNSU5BTkNFJzogMHg4NEVBLAorICAn
Q09NUFJFU1NFRF9MVU1JTkFOQ0VfQUxQSEEnOiAweDg0RUIsCisgICdDT01QUkVTU0VEX0lOVEVO
U0lUWSc6IDB4ODRFQywKKyAgJ0NPTVBSRVNTRURfUkdCJzogMHg4NEVELAorICAnQ09NUFJFU1NF
RF9SR0JBJzogMHg4NEVFLAorICAnVEVYVFVSRV9DT01QUkVTU0lPTl9ISU5UJzogMHg4NEVGLAor
ICAnTk9STUFMX01BUCc6IDB4ODUxMSwKKyAgJ1JFRkxFQ1RJT05fTUFQJzogMHg4NTEyLAorICAn
VEVYVFVSRV9DVUJFX01BUCc6IDB4ODUxMywKKyAgJ1RFWFRVUkVfQklORElOR19DVUJFX01BUCc6
IDB4ODUxNCwKKyAgJ1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWCc6IDB4ODUxNSwKKyAgJ1RF
WFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWCc6IDB4ODUxNiwKKyAgJ1RFWFRVUkVfQ1VCRV9NQVBf
UE9TSVRJVkVfWSc6IDB4ODUxNywKKyAgJ1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWSc6IDB4
ODUxOCwKKyAgJ1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVfWic6IDB4ODUxOSwKKyAgJ1RFWFRV
UkVfQ1VCRV9NQVBfTkVHQVRJVkVfWic6IDB4ODUxQSwKKyAgJ1BST1hZX1RFWFRVUkVfQ1VCRV9N
QVAnOiAweDg1MUIsCisgICdNQVhfQ1VCRV9NQVBfVEVYVFVSRV9TSVpFJzogMHg4NTFDLAorICAn
Q09NQklORSc6IDB4ODU3MCwKKyAgJ0NPTUJJTkVfUkdCJzogMHg4NTcxLAorICAnQ09NQklORV9B
TFBIQSc6IDB4ODU3MiwKKyAgJ1JHQl9TQ0FMRSc6IDB4ODU3MywKKyAgJ0FERF9TSUdORUQnOiAw
eDg1NzQsCisgICdJTlRFUlBPTEFURSc6IDB4ODU3NSwKKyAgJ0NPTlNUQU5UJzogMHg4NTc2LAor
ICAnUFJJTUFSWV9DT0xPUic6IDB4ODU3NywKKyAgJ1BSRVZJT1VTJzogMHg4NTc4LAorICAnU09V
UkNFMF9SR0InOiAweDg1ODAsCisgICdTT1VSQ0UxX1JHQic6IDB4ODU4MSwKKyAgJ1NPVVJDRTJf
UkdCJzogMHg4NTgyLAorICAnU09VUkNFMF9BTFBIQSc6IDB4ODU4OCwKKyAgJ1NPVVJDRTFfQUxQ
SEEnOiAweDg1ODksCisgICdTT1VSQ0UyX0FMUEhBJzogMHg4NThBLAorICAnT1BFUkFORDBfUkdC
JzogMHg4NTkwLAorICAnT1BFUkFORDFfUkdCJzogMHg4NTkxLAorICAnT1BFUkFORDJfUkdCJzog
MHg4NTkyLAorICAnT1BFUkFORDBfQUxQSEEnOiAweDg1OTgsCisgICdPUEVSQU5EMV9BTFBIQSc6
IDB4ODU5OSwKKyAgJ09QRVJBTkQyX0FMUEhBJzogMHg4NTlBLAorICAnVEVYVFVSRV9DT01QUkVT
U0VEX0lNQUdFX1NJWkUnOiAweDg2QTAsCisgICdURVhUVVJFX0NPTVBSRVNTRUQnOiAweDg2QTEs
CisgICdOVU1fQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFMnOiAweDg2QTIsCisgICdDT01QUkVT
U0VEX1RFWFRVUkVfRk9STUFUUyc6IDB4ODZBMywKKyAgJ0RPVDNfUkdCJzogMHg4NkFFLAorICAn
RE9UM19SR0JBJzogMHg4NkFGLAorICAnTVVMVElTQU1QTEVfQklUJzogMHgyMDAwMDAwMCwKKyAg
J0JMRU5EX0RTVF9SR0InOiAweDgwQzgsCisgICdCTEVORF9TUkNfUkdCJzogMHg4MEM5LAorICAn
QkxFTkRfRFNUX0FMUEhBJzogMHg4MENBLAorICAnQkxFTkRfU1JDX0FMUEhBJzogMHg4MENCLAor
ICAnUE9JTlRfU0laRV9NSU4nOiAweDgxMjYsCisgICdQT0lOVF9TSVpFX01BWCc6IDB4ODEyNywK
KyAgJ1BPSU5UX0ZBREVfVEhSRVNIT0xEX1NJWkUnOiAweDgxMjgsCisgICdQT0lOVF9ESVNUQU5D
RV9BVFRFTlVBVElPTic6IDB4ODEyOSwKKyAgJ0dFTkVSQVRFX01JUE1BUCc6IDB4ODE5MSwKKyAg
J0dFTkVSQVRFX01JUE1BUF9ISU5UJzogMHg4MTkyLAorICAnREVQVEhfQ09NUE9ORU5UMTYnOiAw
eDgxQTUsCisgICdERVBUSF9DT01QT05FTlQyNCc6IDB4ODFBNiwKKyAgJ0RFUFRIX0NPTVBPTkVO
VDMyJzogMHg4MUE3LAorICAnTUlSUk9SRURfUkVQRUFUJzogMHg4MzcwLAorICAnRk9HX0NPT1JE
SU5BVEVfU09VUkNFJzogMHg4NDUwLAorICAnRk9HX0NPT1JESU5BVEUnOiAweDg0NTEsCisgICdG
UkFHTUVOVF9ERVBUSCc6IDB4ODQ1MiwKKyAgJ0NVUlJFTlRfRk9HX0NPT1JESU5BVEUnOiAweDg0
NTMsCisgICdGT0dfQ09PUkRJTkFURV9BUlJBWV9UWVBFJzogMHg4NDU0LAorICAnRk9HX0NPT1JE
SU5BVEVfQVJSQVlfU1RSSURFJzogMHg4NDU1LAorICAnRk9HX0NPT1JESU5BVEVfQVJSQVlfUE9J
TlRFUic6IDB4ODQ1NiwKKyAgJ0ZPR19DT09SRElOQVRFX0FSUkFZJzogMHg4NDU3LAorICAnQ09M
T1JfU1VNJzogMHg4NDU4LAorICAnQ1VSUkVOVF9TRUNPTkRBUllfQ09MT1InOiAweDg0NTksCisg
ICdTRUNPTkRBUllfQ09MT1JfQVJSQVlfU0laRSc6IDB4ODQ1QSwKKyAgJ1NFQ09OREFSWV9DT0xP
Ul9BUlJBWV9UWVBFJzogMHg4NDVCLAorICAnU0VDT05EQVJZX0NPTE9SX0FSUkFZX1NUUklERSc6
IDB4ODQ1QywKKyAgJ1NFQ09OREFSWV9DT0xPUl9BUlJBWV9QT0lOVEVSJzogMHg4NDVELAorICAn
U0VDT05EQVJZX0NPTE9SX0FSUkFZJzogMHg4NDVFLAorICAnTUFYX1RFWFRVUkVfTE9EX0JJQVMn
OiAweDg0RkQsCisgICdURVhUVVJFX0ZJTFRFUl9DT05UUk9MJzogMHg4NTAwLAorICAnVEVYVFVS
RV9MT0RfQklBUyc6IDB4ODUwMSwKKyAgJ0lOQ1JfV1JBUCc6IDB4ODUwNywKKyAgJ0RFQ1JfV1JB
UCc6IDB4ODUwOCwKKyAgJ1RFWFRVUkVfREVQVEhfU0laRSc6IDB4ODg0QSwKKyAgJ0RFUFRIX1RF
WFRVUkVfTU9ERSc6IDB4ODg0QiwKKyAgJ1RFWFRVUkVfQ09NUEFSRV9NT0RFJzogMHg4ODRDLAor
ICAnVEVYVFVSRV9DT01QQVJFX0ZVTkMnOiAweDg4NEQsCisgICdDT01QQVJFX1JfVE9fVEVYVFVS
RSc6IDB4ODg0RSwKKyAgJ0JVRkZFUl9TSVpFJzogMHg4NzY0LAorICAnQlVGRkVSX1VTQUdFJzog
MHg4NzY1LAorICAnUVVFUllfQ09VTlRFUl9CSVRTJzogMHg4ODY0LAorICAnQ1VSUkVOVF9RVUVS
WSc6IDB4ODg2NSwKKyAgJ1FVRVJZX1JFU1VMVCc6IDB4ODg2NiwKKyAgJ1FVRVJZX1JFU1VMVF9B
VkFJTEFCTEUnOiAweDg4NjcsCisgICdBUlJBWV9CVUZGRVInOiAweDg4OTIsCisgICdFTEVNRU5U
X0FSUkFZX0JVRkZFUic6IDB4ODg5MywKKyAgJ0FSUkFZX0JVRkZFUl9CSU5ESU5HJzogMHg4ODk0
LAorICAnRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElORyc6IDB4ODg5NSwKKyAgJ1ZFUlRFWF9B
UlJBWV9CVUZGRVJfQklORElORyc6IDB4ODg5NiwKKyAgJ05PUk1BTF9BUlJBWV9CVUZGRVJfQklO
RElORyc6IDB4ODg5NywKKyAgJ0NPTE9SX0FSUkFZX0JVRkZFUl9CSU5ESU5HJzogMHg4ODk4LAor
ICAnSU5ERVhfQVJSQVlfQlVGRkVSX0JJTkRJTkcnOiAweDg4OTksCisgICdURVhUVVJFX0NPT1JE
X0FSUkFZX0JVRkZFUl9CSU5ESU5HJzogMHg4ODlBLAorICAnRURHRV9GTEFHX0FSUkFZX0JVRkZF
Ul9CSU5ESU5HJzogMHg4ODlCLAorICAnU0VDT05EQVJZX0NPTE9SX0FSUkFZX0JVRkZFUl9CSU5E
SU5HJzogMHg4ODlDLAorICAnRk9HX0NPT1JESU5BVEVfQVJSQVlfQlVGRkVSX0JJTkRJTkcnOiAw
eDg4OUQsCisgICdXRUlHSFRfQVJSQVlfQlVGRkVSX0JJTkRJTkcnOiAweDg4OUUsCisgICdWRVJU
RVhfQVRUUklCX0FSUkFZX0JVRkZFUl9CSU5ESU5HJzogMHg4ODlGLAorICAnUkVBRF9PTkxZJzog
MHg4OEI4LAorICAnV1JJVEVfT05MWSc6IDB4ODhCOSwKKyAgJ1JFQURfV1JJVEUnOiAweDg4QkEs
CisgICdCVUZGRVJfQUNDRVNTJzogMHg4OEJCLAorICAnQlVGRkVSX01BUFBFRCc6IDB4ODhCQywK
KyAgJ0JVRkZFUl9NQVBfUE9JTlRFUic6IDB4ODhCRCwKKyAgJ1NUUkVBTV9EUkFXJzogMHg4OEUw
LAorICAnU1RSRUFNX1JFQUQnOiAweDg4RTEsCisgICdTVFJFQU1fQ09QWSc6IDB4ODhFMiwKKyAg
J1NUQVRJQ19EUkFXJzogMHg4OEU0LAorICAnU1RBVElDX1JFQUQnOiAweDg4RTUsCisgICdTVEFU
SUNfQ09QWSc6IDB4ODhFNiwKKyAgJ0RZTkFNSUNfRFJBVyc6IDB4ODhFOCwKKyAgJ0RZTkFNSUNf
UkVBRCc6IDB4ODhFOSwKKyAgJ0RZTkFNSUNfQ09QWSc6IDB4ODhFQSwKKyAgJ1NBTVBMRVNfUEFT
U0VEJzogMHg4OTE0LAorICAnVkVSVEVYX0FUVFJJQl9BUlJBWV9FTkFCTEVEJzogMHg4NjIyLAor
ICAnVkVSVEVYX0FUVFJJQl9BUlJBWV9TSVpFJzogMHg4NjIzLAorICAnVkVSVEVYX0FUVFJJQl9B
UlJBWV9TVFJJREUnOiAweDg2MjQsCisgICdWRVJURVhfQVRUUklCX0FSUkFZX1RZUEUnOiAweDg2
MjUsCisgICdDVVJSRU5UX1ZFUlRFWF9BVFRSSUInOiAweDg2MjYsCisgICdWRVJURVhfUFJPR1JB
TV9QT0lOVF9TSVpFJzogMHg4NjQyLAorICAnVkVSVEVYX1BST0dSQU1fVFdPX1NJREUnOiAweDg2
NDMsCisgICdWRVJURVhfQVRUUklCX0FSUkFZX1BPSU5URVInOiAweDg2NDUsCisgICdTVEVOQ0lM
X0JBQ0tfRlVOQyc6IDB4ODgwMCwKKyAgJ1NURU5DSUxfQkFDS19GQUlMJzogMHg4ODAxLAorICAn
U1RFTkNJTF9CQUNLX1BBU1NfREVQVEhfRkFJTCc6IDB4ODgwMiwKKyAgJ1NURU5DSUxfQkFDS19Q
QVNTX0RFUFRIX1BBU1MnOiAweDg4MDMsCisgICdNQVhfRFJBV19CVUZGRVJTJzogMHg4ODI0LAor
ICAnRFJBV19CVUZGRVIwJzogMHg4ODI1LAorICAnRFJBV19CVUZGRVIxJzogMHg4ODI2LAorICAn
RFJBV19CVUZGRVIyJzogMHg4ODI3LAorICAnRFJBV19CVUZGRVIzJzogMHg4ODI4LAorICAnRFJB
V19CVUZGRVI0JzogMHg4ODI5LAorICAnRFJBV19CVUZGRVI1JzogMHg4ODJBLAorICAnRFJBV19C
VUZGRVI2JzogMHg4ODJCLAorICAnRFJBV19CVUZGRVI3JzogMHg4ODJDLAorICAnRFJBV19CVUZG
RVI4JzogMHg4ODJELAorICAnRFJBV19CVUZGRVI5JzogMHg4ODJFLAorICAnRFJBV19CVUZGRVIx
MCc6IDB4ODgyRiwKKyAgJ0RSQVdfQlVGRkVSMTEnOiAweDg4MzAsCisgICdEUkFXX0JVRkZFUjEy
JzogMHg4ODMxLAorICAnRFJBV19CVUZGRVIxMyc6IDB4ODgzMiwKKyAgJ0RSQVdfQlVGRkVSMTQn
OiAweDg4MzMsCisgICdEUkFXX0JVRkZFUjE1JzogMHg4ODM0LAorICAnQkxFTkRfRVFVQVRJT05f
QUxQSEEnOiAweDg4M0QsCisgICdQT0lOVF9TUFJJVEUnOiAweDg4NjEsCisgICdDT09SRF9SRVBM
QUNFJzogMHg4ODYyLAorICAnTUFYX1ZFUlRFWF9BVFRSSUJTJzogMHg4ODY5LAorICAnVkVSVEVY
X0FUVFJJQl9BUlJBWV9OT1JNQUxJWkVEJzogMHg4ODZBLAorICAnTUFYX1RFWFRVUkVfQ09PUkRT
JzogMHg4ODcxLAorICAnTUFYX1RFWFRVUkVfSU1BR0VfVU5JVFMnOiAweDg4NzIsCisgICdGUkFH
TUVOVF9TSEFERVInOiAweDhCMzAsCisgICdWRVJURVhfU0hBREVSJzogMHg4QjMxLAorICAnTUFY
X0ZSQUdNRU5UX1VOSUZPUk1fQ09NUE9ORU5UUyc6IDB4OEI0OSwKKyAgJ01BWF9WRVJURVhfVU5J
Rk9STV9DT01QT05FTlRTJzogMHg4QjRBLAorICAnTUFYX1ZBUllJTkdfRkxPQVRTJzogMHg4QjRC
LAorICAnTUFYX1ZFUlRFWF9URVhUVVJFX0lNQUdFX1VOSVRTJzogMHg4QjRDLAorICAnTUFYX0NP
TUJJTkVEX1RFWFRVUkVfSU1BR0VfVU5JVFMnOiAweDhCNEQsCisgICdTSEFERVJfVFlQRSc6IDB4
OEI0RiwKKyAgJ0ZMT0FUX1ZFQzInOiAweDhCNTAsCisgICdGTE9BVF9WRUMzJzogMHg4QjUxLAor
ICAnRkxPQVRfVkVDNCc6IDB4OEI1MiwKKyAgJ0lOVF9WRUMyJzogMHg4QjUzLAorICAnSU5UX1ZF
QzMnOiAweDhCNTQsCisgICdJTlRfVkVDNCc6IDB4OEI1NSwKKyAgJ0JPT0wnOiAweDhCNTYsCisg
ICdCT09MX1ZFQzInOiAweDhCNTcsCisgICdCT09MX1ZFQzMnOiAweDhCNTgsCisgICdCT09MX1ZF
QzQnOiAweDhCNTksCisgICdGTE9BVF9NQVQyJzogMHg4QjVBLAorICAnRkxPQVRfTUFUMyc6IDB4
OEI1QiwKKyAgJ0ZMT0FUX01BVDQnOiAweDhCNUMsCisgICdTQU1QTEVSXzFEJzogMHg4QjVELAor
ICAnU0FNUExFUl8yRCc6IDB4OEI1RSwKKyAgJ1NBTVBMRVJfM0QnOiAweDhCNUYsCisgICdTQU1Q
TEVSX0NVQkUnOiAweDhCNjAsCisgICdTQU1QTEVSXzFEX1NIQURPVyc6IDB4OEI2MSwKKyAgJ1NB
TVBMRVJfMkRfU0hBRE9XJzogMHg4QjYyLAorICAnREVMRVRFX1NUQVRVUyc6IDB4OEI4MCwKKyAg
J0NPTVBJTEVfU1RBVFVTJzogMHg4QjgxLAorICAnTElOS19TVEFUVVMnOiAweDhCODIsCisgICdW
QUxJREFURV9TVEFUVVMnOiAweDhCODMsCisgICdJTkZPX0xPR19MRU5HVEgnOiAweDhCODQsCisg
ICdBVFRBQ0hFRF9TSEFERVJTJzogMHg4Qjg1LAorICAnQUNUSVZFX1VOSUZPUk1TJzogMHg4Qjg2
LAorICAnQUNUSVZFX1VOSUZPUk1fTUFYX0xFTkdUSCc6IDB4OEI4NywKKyAgJ1NIQURFUl9TT1VS
Q0VfTEVOR1RIJzogMHg4Qjg4LAorICAnQUNUSVZFX0FUVFJJQlVURVMnOiAweDhCODksCisgICdB
Q1RJVkVfQVRUUklCVVRFX01BWF9MRU5HVEgnOiAweDhCOEEsCisgICdGUkFHTUVOVF9TSEFERVJf
REVSSVZBVElWRV9ISU5UJzogMHg4QjhCLAorICAnU0hBRElOR19MQU5HVUFHRV9WRVJTSU9OJzog
MHg4QjhDLAorICAnQ1VSUkVOVF9QUk9HUkFNJzogMHg4QjhELAorICAnUE9JTlRfU1BSSVRFX0NP
T1JEX09SSUdJTic6IDB4OENBMCwKKyAgJ0xPV0VSX0xFRlQnOiAweDhDQTEsCisgICdVUFBFUl9M
RUZUJzogMHg4Q0EyLAorICAnU1RFTkNJTF9CQUNLX1JFRic6IDB4OENBMywKKyAgJ1NURU5DSUxf
QkFDS19WQUxVRV9NQVNLJzogMHg4Q0E0LAorICAnU1RFTkNJTF9CQUNLX1dSSVRFTUFTSyc6IDB4
OENBNSwKKyAgJ0NVUlJFTlRfUkFTVEVSX1NFQ09OREFSWV9DT0xPUic6IDB4ODQ1RiwKKyAgJ1BJ
WEVMX1BBQ0tfQlVGRkVSJzogMHg4OEVCLAorICAnUElYRUxfVU5QQUNLX0JVRkZFUic6IDB4ODhF
QywKKyAgJ1BJWEVMX1BBQ0tfQlVGRkVSX0JJTkRJTkcnOiAweDg4RUQsCisgICdQSVhFTF9VTlBB
Q0tfQlVGRkVSX0JJTkRJTkcnOiAweDg4RUYsCisgICdGTE9BVF9NQVQyeDMnOiAweDhCNjUsCisg
ICdGTE9BVF9NQVQyeDQnOiAweDhCNjYsCisgICdGTE9BVF9NQVQzeDInOiAweDhCNjcsCisgICdG
TE9BVF9NQVQzeDQnOiAweDhCNjgsCisgICdGTE9BVF9NQVQ0eDInOiAweDhCNjksCisgICdGTE9B
VF9NQVQ0eDMnOiAweDhCNkEsCisgICdTUkdCJzogMHg4QzQwLAorICAnU1JHQjgnOiAweDhDNDEs
CisgICdTUkdCX0FMUEhBJzogMHg4QzQyLAorICAnU1JHQjhfQUxQSEE4JzogMHg4QzQzLAorICAn
U0xVTUlOQU5DRV9BTFBIQSc6IDB4OEM0NCwKKyAgJ1NMVU1JTkFOQ0U4X0FMUEhBOCc6IDB4OEM0
NSwKKyAgJ1NMVU1JTkFOQ0UnOiAweDhDNDYsCisgICdTTFVNSU5BTkNFOCc6IDB4OEM0NywKKyAg
J0NPTVBSRVNTRURfU1JHQic6IDB4OEM0OCwKKyAgJ0NPTVBSRVNTRURfU1JHQl9BTFBIQSc6IDB4
OEM0OSwKKyAgJ0NPTVBSRVNTRURfU0xVTUlOQU5DRSc6IDB4OEM0QSwKKyAgJ0NPTVBSRVNTRURf
U0xVTUlOQU5DRV9BTFBIQSc6IDB4OEM0QiwKKyAgJ0NPTlRFWFRfRkxBR19GT1JXQVJEX0NPTVBB
VElCTEVfQklUJzogMHgwMDAxLAorICAnTUFKT1JfVkVSU0lPTic6IDB4ODIxQiwKKyAgJ01JTk9S
X1ZFUlNJT04nOiAweDgyMUMsCisgICdOVU1fRVhURU5TSU9OUyc6IDB4ODIxRCwKKyAgJ0NPTlRF
WFRfRkxBR1MnOiAweDgyMUUsCisgICdERVBUSF9CVUZGRVInOiAweDgyMjMsCisgICdTVEVOQ0lM
X0JVRkZFUic6IDB4ODIyNCwKKyAgJ0NPTVBSRVNTRURfUkVEJzogMHg4MjI1LAorICAnQ09NUFJF
U1NFRF9SRyc6IDB4ODIyNiwKKyAgJ1JHQkEzMkYnOiAweDg4MTQsCisgICdSR0IzMkYnOiAweDg4
MTUsCisgICdSR0JBMTZGJzogMHg4ODFBLAorICAnUkdCMTZGJzogMHg4ODFCLAorICAnVkVSVEVY
X0FUVFJJQl9BUlJBWV9JTlRFR0VSJzogMHg4OEZELAorICAnTUFYX0FSUkFZX1RFWFRVUkVfTEFZ
RVJTJzogMHg4OEZGLAorICAnTUlOX1BST0dSQU1fVEVYRUxfT0ZGU0VUJzogMHg4OTA0LAorICAn
TUFYX1BST0dSQU1fVEVYRUxfT0ZGU0VUJzogMHg4OTA1LAorICAnQ0xBTVBfVkVSVEVYX0NPTE9S
JzogMHg4OTFBLAorICAnQ0xBTVBfRlJBR01FTlRfQ09MT1InOiAweDg5MUIsCisgICdDTEFNUF9S
RUFEX0NPTE9SJzogMHg4OTFDLAorICAnRklYRURfT05MWSc6IDB4ODkxRCwKKyAgJ1RFWFRVUkVf
UkVEX1RZUEUnOiAweDhDMTAsCisgICdURVhUVVJFX0dSRUVOX1RZUEUnOiAweDhDMTEsCisgICdU
RVhUVVJFX0JMVUVfVFlQRSc6IDB4OEMxMiwKKyAgJ1RFWFRVUkVfQUxQSEFfVFlQRSc6IDB4OEMx
MywKKyAgJ1RFWFRVUkVfTFVNSU5BTkNFX1RZUEUnOiAweDhDMTQsCisgICdURVhUVVJFX0lOVEVO
U0lUWV9UWVBFJzogMHg4QzE1LAorICAnVEVYVFVSRV9ERVBUSF9UWVBFJzogMHg4QzE2LAorICAn
VU5TSUdORURfTk9STUFMSVpFRCc6IDB4OEMxNywKKyAgJ1RFWFRVUkVfMURfQVJSQVknOiAweDhD
MTgsCisgICdQUk9YWV9URVhUVVJFXzFEX0FSUkFZJzogMHg4QzE5LAorICAnVEVYVFVSRV8yRF9B
UlJBWSc6IDB4OEMxQSwKKyAgJ1BST1hZX1RFWFRVUkVfMkRfQVJSQVknOiAweDhDMUIsCisgICdU
RVhUVVJFX0JJTkRJTkdfMURfQVJSQVknOiAweDhDMUMsCisgICdURVhUVVJFX0JJTkRJTkdfMkRf
QVJSQVknOiAweDhDMUQsCisgICdSMTFGX0cxMUZfQjEwRic6IDB4OEMzQSwKKyAgJ1VOU0lHTkVE
X0lOVF8xMEZfMTFGXzExRl9SRVYnOiAweDhDM0IsCisgICdSR0I5X0U1JzogMHg4QzNELAorICAn
VU5TSUdORURfSU5UXzVfOV85XzlfUkVWJzogMHg4QzNFLAorICAnVEVYVFVSRV9TSEFSRURfU0la
RSc6IDB4OEMzRiwKKyAgJ1RSQU5TRk9STV9GRUVEQkFDS19WQVJZSU5HX01BWF9MRU5HVEgnOiAw
eDhDNzYsCisgICdUUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX01PREUnOiAweDhDN0YsCisgICdN
QVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0NPTVBPTkVOVFMnOiAweDhDODAsCisgICdU
UkFOU0ZPUk1fRkVFREJBQ0tfVkFSWUlOR1MnOiAweDhDODMsCisgICdUUkFOU0ZPUk1fRkVFREJB
Q0tfQlVGRkVSX1NUQVJUJzogMHg4Qzg0LAorICAnVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9T
SVpFJzogMHg4Qzg1LAorICAnUFJJTUlUSVZFU19HRU5FUkFURUQnOiAweDhDODcsCisgICdUUkFO
U0ZPUk1fRkVFREJBQ0tfUFJJTUlUSVZFU19XUklUVEVOJzogMHg4Qzg4LAorICAnUkFTVEVSSVpF
Ul9ESVNDQVJEJzogMHg4Qzg5LAorICAnTUFYX1RSQU5TRk9STV9GRUVEQkFDS19JTlRFUkxFQVZF
RF9DT01QT05FTlRTJzogMHg4QzhBLAorICAnTUFYX1RSQU5TRk9STV9GRUVEQkFDS19TRVBBUkFU
RV9BVFRSSUJTJzogMHg4QzhCLAorICAnSU5URVJMRUFWRURfQVRUUklCUyc6IDB4OEM4QywKKyAg
J1NFUEFSQVRFX0FUVFJJQlMnOiAweDhDOEQsCisgICdUUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVS
JzogMHg4QzhFLAorICAnVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9CSU5ESU5HJzogMHg4QzhG
LAorICAnUkdCQTMyVUknOiAweDhENzAsCisgICdSR0IzMlVJJzogMHg4RDcxLAorICAnUkdCQTE2
VUknOiAweDhENzYsCisgICdSR0IxNlVJJzogMHg4RDc3LAorICAnUkdCQThVSSc6IDB4OEQ3QywK
KyAgJ1JHQjhVSSc6IDB4OEQ3RCwKKyAgJ1JHQkEzMkknOiAweDhEODIsCisgICdSR0IzMkknOiAw
eDhEODMsCisgICdSR0JBMTZJJzogMHg4RDg4LAorICAnUkdCMTZJJzogMHg4RDg5LAorICAnUkdC
QThJJzogMHg4RDhFLAorICAnUkdCOEknOiAweDhEOEYsCisgICdSRURfSU5URUdFUic6IDB4OEQ5
NCwKKyAgJ0dSRUVOX0lOVEVHRVInOiAweDhEOTUsCisgICdCTFVFX0lOVEVHRVInOiAweDhEOTYs
CisgICdBTFBIQV9JTlRFR0VSJzogMHg4RDk3LAorICAnUkdCX0lOVEVHRVInOiAweDhEOTgsCisg
ICdSR0JBX0lOVEVHRVInOiAweDhEOTksCisgICdCR1JfSU5URUdFUic6IDB4OEQ5QSwKKyAgJ0JH
UkFfSU5URUdFUic6IDB4OEQ5QiwKKyAgJ1NBTVBMRVJfMURfQVJSQVknOiAweDhEQzAsCisgICdT
QU1QTEVSXzJEX0FSUkFZJzogMHg4REMxLAorICAnU0FNUExFUl8xRF9BUlJBWV9TSEFET1cnOiAw
eDhEQzMsCisgICdTQU1QTEVSXzJEX0FSUkFZX1NIQURPVyc6IDB4OERDNCwKKyAgJ1NBTVBMRVJf
Q1VCRV9TSEFET1cnOiAweDhEQzUsCisgICdVTlNJR05FRF9JTlRfVkVDMic6IDB4OERDNiwKKyAg
J1VOU0lHTkVEX0lOVF9WRUMzJzogMHg4REM3LAorICAnVU5TSUdORURfSU5UX1ZFQzQnOiAweDhE
QzgsCisgICdJTlRfU0FNUExFUl8xRCc6IDB4OERDOSwKKyAgJ0lOVF9TQU1QTEVSXzJEJzogMHg4
RENBLAorICAnSU5UX1NBTVBMRVJfM0QnOiAweDhEQ0IsCisgICdJTlRfU0FNUExFUl9DVUJFJzog
MHg4RENDLAorICAnSU5UX1NBTVBMRVJfMURfQVJSQVknOiAweDhEQ0UsCisgICdJTlRfU0FNUExF
Ul8yRF9BUlJBWSc6IDB4OERDRiwKKyAgJ1VOU0lHTkVEX0lOVF9TQU1QTEVSXzFEJzogMHg4REQx
LAorICAnVU5TSUdORURfSU5UX1NBTVBMRVJfMkQnOiAweDhERDIsCisgICdVTlNJR05FRF9JTlRf
U0FNUExFUl8zRCc6IDB4OEREMywKKyAgJ1VOU0lHTkVEX0lOVF9TQU1QTEVSX0NVQkUnOiAweDhE
RDQsCisgICdVTlNJR05FRF9JTlRfU0FNUExFUl8xRF9BUlJBWSc6IDB4OERENiwKKyAgJ1VOU0lH
TkVEX0lOVF9TQU1QTEVSXzJEX0FSUkFZJzogMHg4REQ3LAorICAnUVVFUllfV0FJVCc6IDB4OEUx
MywKKyAgJ1FVRVJZX05PX1dBSVQnOiAweDhFMTQsCisgICdRVUVSWV9CWV9SRUdJT05fV0FJVCc6
IDB4OEUxNSwKKyAgJ1FVRVJZX0JZX1JFR0lPTl9OT19XQUlUJzogMHg4RTE2LAorICAnTVVMVElT
QU1QTEVfM0RGWCc6IDB4ODZCMiwKKyAgJ1NBTVBMRV9CVUZGRVJTXzNERlgnOiAweDg2QjMsCisg
ICdTQU1QTEVTXzNERlgnOiAweDg2QjQsCisgICdNVUxUSVNBTVBMRV9CSVRfM0RGWCc6IDB4MjAw
MDAwMDAsCisgICdDT01QUkVTU0VEX1JHQl9GWFQxXzNERlgnOiAweDg2QjAsCisgICdDT01QUkVT
U0VEX1JHQkFfRlhUMV8zREZYJzogMHg4NkIxLAorICAnVU5QQUNLX0NMSUVOVF9TVE9SQUdFX0FQ
UExFJzogMHg4NUIyLAorICAnRUxFTUVOVF9BUlJBWV9BUFBMRSc6IDB4ODc2OCwKKyAgJ0VMRU1F
TlRfQVJSQVlfVFlQRV9BUFBMRSc6IDB4ODc2OSwKKyAgJ0VMRU1FTlRfQVJSQVlfUE9JTlRFUl9B
UFBMRSc6IDB4ODc2QSwKKyAgJ0hBTEZfQVBQTEUnOiAweDE0MEIsCisgICdSR0JBX0ZMT0FUMzJf
QVBQTEUnOiAweDg4MTQsCisgICdSR0JfRkxPQVQzMl9BUFBMRSc6IDB4ODgxNSwKKyAgJ0FMUEhB
X0ZMT0FUMzJfQVBQTEUnOiAweDg4MTYsCisgICdJTlRFTlNJVFlfRkxPQVQzMl9BUFBMRSc6IDB4
ODgxNywKKyAgJ0xVTUlOQU5DRV9GTE9BVDMyX0FQUExFJzogMHg4ODE4LAorICAnTFVNSU5BTkNF
X0FMUEhBX0ZMT0FUMzJfQVBQTEUnOiAweDg4MTksCisgICdSR0JBX0ZMT0FUMTZfQVBQTEUnOiAw
eDg4MUEsCisgICdSR0JfRkxPQVQxNl9BUFBMRSc6IDB4ODgxQiwKKyAgJ0FMUEhBX0ZMT0FUMTZf
QVBQTEUnOiAweDg4MUMsCisgICdJTlRFTlNJVFlfRkxPQVQxNl9BUFBMRSc6IDB4ODgxRCwKKyAg
J0xVTUlOQU5DRV9GTE9BVDE2X0FQUExFJzogMHg4ODFFLAorICAnTFVNSU5BTkNFX0FMUEhBX0ZM
T0FUMTZfQVBQTEUnOiAweDg4MUYsCisgICdDT0xPUl9GTE9BVF9BUFBMRSc6IDB4OEEwRiwKKyAg
J0JVRkZFUl9TRVJJQUxJWkVEX01PRElGWV9BUFBMRSc6IDB4OEExMiwKKyAgJ0JVRkZFUl9GTFVT
SElOR19VTk1BUF9BUFBMRSc6IDB4OEExMywKKyAgJ01JTl9QQlVGRkVSX1ZJRVdQT1JUX0RJTVNf
QVBQTEUnOiAweDhBMTAsCisgICdMSUdIVF9NT0RFTF9TUEVDVUxBUl9WRUNUT1JfQVBQTEUnOiAw
eDg1QjAsCisgICdURVhUVVJFX1JBTkdFX0xFTkdUSF9BUFBMRSc6IDB4ODVCNywKKyAgJ1RFWFRV
UkVfUkFOR0VfUE9JTlRFUl9BUFBMRSc6IDB4ODVCOCwKKyAgJ1RFWFRVUkVfU1RPUkFHRV9ISU5U
X0FQUExFJzogMHg4NUJDLAorICAnU1RPUkFHRV9QUklWQVRFX0FQUExFJzogMHg4NUJELAorICAn
U1RPUkFHRV9DQUNIRURfQVBQTEUnOiAweDg1QkUsCisgICdTVE9SQUdFX1NIQVJFRF9BUFBMRSc6
IDB4ODVCRiwKKyAgJ1RSQU5TRk9STV9ISU5UX0FQUExFJzogMHg4NUIxLAorICAnVkVSVEVYX0FS
UkFZX0JJTkRJTkdfQVBQTEUnOiAweDg1QjUsCisgICdWRVJURVhfQVJSQVlfUkFOR0VfQVBQTEUn
OiAweDg1MUQsCisgICdWRVJURVhfQVJSQVlfUkFOR0VfTEVOR1RIX0FQUExFJzogMHg4NTFFLAor
ICAnVkVSVEVYX0FSUkFZX1NUT1JBR0VfSElOVF9BUFBMRSc6IDB4ODUxRiwKKyAgJ01BWF9WRVJU
RVhfQVJSQVlfUkFOR0VfRUxFTUVOVF9BUFBMRSc6IDB4ODUyMCwKKyAgJ1ZFUlRFWF9BUlJBWV9S
QU5HRV9QT0lOVEVSX0FQUExFJzogMHg4NTIxLAorICAnU1RPUkFHRV9DQUNIRURfQVBQTEUnOiAw
eDg1QkUsCisgICdTVE9SQUdFX1NIQVJFRF9BUFBMRSc6IDB4ODVCRiwKKyAgJ1lDQkNSXzQyMl9B
UFBMRSc6IDB4ODVCOSwKKyAgJ1VOU0lHTkVEX1NIT1JUXzhfOF9BUFBMRSc6IDB4ODVCQSwKKyAg
J1VOU0lHTkVEX1NIT1JUXzhfOF9SRVZfQVBQTEUnOiAweDg1QkIsCisgICdSR0JBX0ZMT0FUX01P
REVfQVJCJzogMHg4ODIwLAorICAnQ0xBTVBfVkVSVEVYX0NPTE9SX0FSQic6IDB4ODkxQSwKKyAg
J0NMQU1QX0ZSQUdNRU5UX0NPTE9SX0FSQic6IDB4ODkxQiwKKyAgJ0NMQU1QX1JFQURfQ09MT1Jf
QVJCJzogMHg4OTFDLAorICAnRklYRURfT05MWV9BUkInOiAweDg5MUQsCisgICdERVBUSF9DT01Q
T05FTlQzMkYnOiAweDhDQUMsCisgICdERVBUSDMyRl9TVEVOQ0lMOCc6IDB4OENBRCwKKyAgJ0ZM
T0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFVic6IDB4OERBRCwKKyAgJ0RFUFRIX0NPTVBPTkVO
VDE2X0FSQic6IDB4ODFBNSwKKyAgJ0RFUFRIX0NPTVBPTkVOVDI0X0FSQic6IDB4ODFBNiwKKyAg
J0RFUFRIX0NPTVBPTkVOVDMyX0FSQic6IDB4ODFBNywKKyAgJ1RFWFRVUkVfREVQVEhfU0laRV9B
UkInOiAweDg4NEEsCisgICdERVBUSF9URVhUVVJFX01PREVfQVJCJzogMHg4ODRCLAorICAnTUFY
X0RSQVdfQlVGRkVSU19BUkInOiAweDg4MjQsCisgICdEUkFXX0JVRkZFUjBfQVJCJzogMHg4ODI1
LAorICAnRFJBV19CVUZGRVIxX0FSQic6IDB4ODgyNiwKKyAgJ0RSQVdfQlVGRkVSMl9BUkInOiAw
eDg4MjcsCisgICdEUkFXX0JVRkZFUjNfQVJCJzogMHg4ODI4LAorICAnRFJBV19CVUZGRVI0X0FS
Qic6IDB4ODgyOSwKKyAgJ0RSQVdfQlVGRkVSNV9BUkInOiAweDg4MkEsCisgICdEUkFXX0JVRkZF
UjZfQVJCJzogMHg4ODJCLAorICAnRFJBV19CVUZGRVI3X0FSQic6IDB4ODgyQywKKyAgJ0RSQVdf
QlVGRkVSOF9BUkInOiAweDg4MkQsCisgICdEUkFXX0JVRkZFUjlfQVJCJzogMHg4ODJFLAorICAn
RFJBV19CVUZGRVIxMF9BUkInOiAweDg4MkYsCisgICdEUkFXX0JVRkZFUjExX0FSQic6IDB4ODgz
MCwKKyAgJ0RSQVdfQlVGRkVSMTJfQVJCJzogMHg4ODMxLAorICAnRFJBV19CVUZGRVIxM19BUkIn
OiAweDg4MzIsCisgICdEUkFXX0JVRkZFUjE0X0FSQic6IDB4ODgzMywKKyAgJ0RSQVdfQlVGRkVS
MTVfQVJCJzogMHg4ODM0LAorICAnRlJBR01FTlRfUFJPR1JBTV9BUkInOiAweDg4MDQsCisgICdQ
Uk9HUkFNX0FMVV9JTlNUUlVDVElPTlNfQVJCJzogMHg4ODA1LAorICAnUFJPR1JBTV9URVhfSU5T
VFJVQ1RJT05TX0FSQic6IDB4ODgwNiwKKyAgJ1BST0dSQU1fVEVYX0lORElSRUNUSU9OU19BUkIn
OiAweDg4MDcsCisgICdQUk9HUkFNX05BVElWRV9BTFVfSU5TVFJVQ1RJT05TX0FSQic6IDB4ODgw
OCwKKyAgJ1BST0dSQU1fTkFUSVZFX1RFWF9JTlNUUlVDVElPTlNfQVJCJzogMHg4ODA5LAorICAn
UFJPR1JBTV9OQVRJVkVfVEVYX0lORElSRUNUSU9OU19BUkInOiAweDg4MEEsCisgICdNQVhfUFJP
R1JBTV9BTFVfSU5TVFJVQ1RJT05TX0FSQic6IDB4ODgwQiwKKyAgJ01BWF9QUk9HUkFNX1RFWF9J
TlNUUlVDVElPTlNfQVJCJzogMHg4ODBDLAorICAnTUFYX1BST0dSQU1fVEVYX0lORElSRUNUSU9O
U19BUkInOiAweDg4MEQsCisgICdNQVhfUFJPR1JBTV9OQVRJVkVfQUxVX0lOU1RSVUNUSU9OU19B
UkInOiAweDg4MEUsCisgICdNQVhfUFJPR1JBTV9OQVRJVkVfVEVYX0lOU1RSVUNUSU9OU19BUkIn
OiAweDg4MEYsCisgICdNQVhfUFJPR1JBTV9OQVRJVkVfVEVYX0lORElSRUNUSU9OU19BUkInOiAw
eDg4MTAsCisgICdNQVhfVEVYVFVSRV9DT09SRFNfQVJCJzogMHg4ODcxLAorICAnTUFYX1RFWFRV
UkVfSU1BR0VfVU5JVFNfQVJCJzogMHg4ODcyLAorICAnRlJBR01FTlRfU0hBREVSX0FSQic6IDB4
OEIzMCwKKyAgJ01BWF9GUkFHTUVOVF9VTklGT1JNX0NPTVBPTkVOVFNfQVJCJzogMHg4QjQ5LAor
ICAnRlJBR01FTlRfU0hBREVSX0RFUklWQVRJVkVfSElOVF9BUkInOiAweDhCOEIsCisgICdJTlZB
TElEX0ZSQU1FQlVGRkVSX09QRVJBVElPTic6IDB4MDUwNiwKKyAgJ0ZSQU1FQlVGRkVSX0FUVEFD
SE1FTlRfQ09MT1JfRU5DT0RJTkcnOiAweDgyMTAsCisgICdGUkFNRUJVRkZFUl9BVFRBQ0hNRU5U
X0NPTVBPTkVOVF9UWVBFJzogMHg4MjExLAorICAnRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9SRURf
U0laRSc6IDB4ODIxMiwKKyAgJ0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfR1JFRU5fU0laRSc6IDB4
ODIxMywKKyAgJ0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfQkxVRV9TSVpFJzogMHg4MjE0LAorICAn
RlJBTUVCVUZGRVJfQVRUQUNITUVOVF9BTFBIQV9TSVpFJzogMHg4MjE1LAorICAnRlJBTUVCVUZG
RVJfQVRUQUNITUVOVF9ERVBUSF9TSVpFJzogMHg4MjE2LAorICAnRlJBTUVCVUZGRVJfQVRUQUNI
TUVOVF9TVEVOQ0lMX1NJWkUnOiAweDgyMTcsCisgICdGUkFNRUJVRkZFUl9ERUZBVUxUJzogMHg4
MjE4LAorICAnRlJBTUVCVUZGRVJfVU5ERUZJTkVEJzogMHg4MjE5LAorICAnREVQVEhfU1RFTkNJ
TF9BVFRBQ0hNRU5UJzogMHg4MjFBLAorICAnSU5ERVgnOiAweDgyMjIsCisgICdNQVhfUkVOREVS
QlVGRkVSX1NJWkUnOiAweDg0RTgsCisgICdERVBUSF9TVEVOQ0lMJzogMHg4NEY5LAorICAnVU5T
SUdORURfSU5UXzI0XzgnOiAweDg0RkEsCisgICdERVBUSDI0X1NURU5DSUw4JzogMHg4OEYwLAor
ICAnVEVYVFVSRV9TVEVOQ0lMX1NJWkUnOiAweDg4RjEsCisgICdVTlNJR05FRF9OT1JNQUxJWkVE
JzogMHg4QzE3LAorICAnU1JHQic6IDB4OEM0MCwKKyAgJ0RSQVdfRlJBTUVCVUZGRVJfQklORElO
Ryc6IDB4OENBNiwKKyAgJ0ZSQU1FQlVGRkVSX0JJTkRJTkcnOiAweDhDQTYsCisgICdSRU5ERVJC
VUZGRVJfQklORElORyc6IDB4OENBNywKKyAgJ1JFQURfRlJBTUVCVUZGRVInOiAweDhDQTgsCisg
ICdEUkFXX0ZSQU1FQlVGRkVSJzogMHg4Q0E5LAorICAnUkVBRF9GUkFNRUJVRkZFUl9CSU5ESU5H
JzogMHg4Q0FBLAorICAnUkVOREVSQlVGRkVSX1NBTVBMRVMnOiAweDhDQUIsCisgICdGUkFNRUJV
RkZFUl9BVFRBQ0hNRU5UX09CSkVDVF9UWVBFJzogMHg4Q0QwLAorICAnRlJBTUVCVUZGRVJfQVRU
QUNITUVOVF9PQkpFQ1RfTkFNRSc6IDB4OENEMSwKKyAgJ0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRf
VEVYVFVSRV9MRVZFTCc6IDB4OENEMiwKKyAgJ0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVS
RV9DVUJFX01BUF9GQUNFJzogMHg4Q0QzLAorICAnRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhU
VVJFX0xBWUVSJzogMHg4Q0Q0LAorICAnRlJBTUVCVUZGRVJfQ09NUExFVEUnOiAweDhDRDUsCisg
ICdGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0FUVEFDSE1FTlQnOiAweDhDRDYsCisgICdGUkFNRUJV
RkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVCc6IDB4OENENywKKyAgJ0ZSQU1FQlVG
RkVSX0lOQ09NUExFVEVfRFJBV19CVUZGRVInOiAweDhDREIsCisgICdGUkFNRUJVRkZFUl9JTkNP
TVBMRVRFX1JFQURfQlVGRkVSJzogMHg4Q0RDLAorICAnRlJBTUVCVUZGRVJfVU5TVVBQT1JURUQn
OiAweDhDREQsCisgICdNQVhfQ09MT1JfQVRUQUNITUVOVFMnOiAweDhDREYsCisgICdDT0xPUl9B
VFRBQ0hNRU5UMCc6IDB4OENFMCwKKyAgJ0NPTE9SX0FUVEFDSE1FTlQxJzogMHg4Q0UxLAorICAn
Q09MT1JfQVRUQUNITUVOVDInOiAweDhDRTIsCisgICdDT0xPUl9BVFRBQ0hNRU5UMyc6IDB4OENF
MywKKyAgJ0NPTE9SX0FUVEFDSE1FTlQ0JzogMHg4Q0U0LAorICAnQ09MT1JfQVRUQUNITUVOVDUn
OiAweDhDRTUsCisgICdDT0xPUl9BVFRBQ0hNRU5UNic6IDB4OENFNiwKKyAgJ0NPTE9SX0FUVEFD
SE1FTlQ3JzogMHg4Q0U3LAorICAnQ09MT1JfQVRUQUNITUVOVDgnOiAweDhDRTgsCisgICdDT0xP
Ul9BVFRBQ0hNRU5UOSc6IDB4OENFOSwKKyAgJ0NPTE9SX0FUVEFDSE1FTlQxMCc6IDB4OENFQSwK
KyAgJ0NPTE9SX0FUVEFDSE1FTlQxMSc6IDB4OENFQiwKKyAgJ0NPTE9SX0FUVEFDSE1FTlQxMic6
IDB4OENFQywKKyAgJ0NPTE9SX0FUVEFDSE1FTlQxMyc6IDB4OENFRCwKKyAgJ0NPTE9SX0FUVEFD
SE1FTlQxNCc6IDB4OENFRSwKKyAgJ0NPTE9SX0FUVEFDSE1FTlQxNSc6IDB4OENFRiwKKyAgJ0RF
UFRIX0FUVEFDSE1FTlQnOiAweDhEMDAsCisgICdTVEVOQ0lMX0FUVEFDSE1FTlQnOiAweDhEMjAs
CisgICdGUkFNRUJVRkZFUic6IDB4OEQ0MCwKKyAgJ1JFTkRFUkJVRkZFUic6IDB4OEQ0MSwKKyAg
J1JFTkRFUkJVRkZFUl9XSURUSCc6IDB4OEQ0MiwKKyAgJ1JFTkRFUkJVRkZFUl9IRUlHSFQnOiAw
eDhENDMsCisgICdSRU5ERVJCVUZGRVJfSU5URVJOQUxfRk9STUFUJzogMHg4RDQ0LAorICAnU1RF
TkNJTF9JTkRFWDEnOiAweDhENDYsCisgICdTVEVOQ0lMX0lOREVYNCc6IDB4OEQ0NywKKyAgJ1NU
RU5DSUxfSU5ERVg4JzogMHg4RDQ4LAorICAnU1RFTkNJTF9JTkRFWDE2JzogMHg4RDQ5LAorICAn
UkVOREVSQlVGRkVSX1JFRF9TSVpFJzogMHg4RDUwLAorICAnUkVOREVSQlVGRkVSX0dSRUVOX1NJ
WkUnOiAweDhENTEsCisgICdSRU5ERVJCVUZGRVJfQkxVRV9TSVpFJzogMHg4RDUyLAorICAnUkVO
REVSQlVGRkVSX0FMUEhBX1NJWkUnOiAweDhENTMsCisgICdSRU5ERVJCVUZGRVJfREVQVEhfU0la
RSc6IDB4OEQ1NCwKKyAgJ1JFTkRFUkJVRkZFUl9TVEVOQ0lMX1NJWkUnOiAweDhENTUsCisgICdG
UkFNRUJVRkZFUl9JTkNPTVBMRVRFX01VTFRJU0FNUExFJzogMHg4RDU2LAorICAnTUFYX1NBTVBM
RVMnOiAweDhENTcsCisgICdGUkFNRUJVRkZFUl9TUkdCJzogMHg4REI5LAorICAnTElORVNfQURK
QUNFTkNZX0FSQic6IDB4QSwKKyAgJ0xJTkVfU1RSSVBfQURKQUNFTkNZX0FSQic6IDB4QiwKKyAg
J1RSSUFOR0xFU19BREpBQ0VOQ1lfQVJCJzogMHhDLAorICAnVFJJQU5HTEVfU1RSSVBfQURKQUNF
TkNZX0FSQic6IDB4RCwKKyAgJ1BST0dSQU1fUE9JTlRfU0laRV9BUkInOiAweDg2NDIsCisgICdN
QVhfR0VPTUVUUllfVEVYVFVSRV9JTUFHRV9VTklUU19BUkInOiAweDhDMjksCisgICdGUkFNRUJV
RkZFUl9BVFRBQ0hNRU5UX1RFWFRVUkVfTEFZRVInOiAweDhDRDQsCisgICdGUkFNRUJVRkZFUl9B
VFRBQ0hNRU5UX0xBWUVSRURfQVJCJzogMHg4REE3LAorICAnRlJBTUVCVUZGRVJfSU5DT01QTEVU
RV9MQVlFUl9UQVJHRVRTX0FSQic6IDB4OERBOCwKKyAgJ0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVf
TEFZRVJfQ09VTlRfQVJCJzogMHg4REE5LAorICAnR0VPTUVUUllfU0hBREVSX0FSQic6IDB4OERE
OSwKKyAgJ0dFT01FVFJZX1ZFUlRJQ0VTX09VVF9BUkInOiAweDhEREEsCisgICdHRU9NRVRSWV9J
TlBVVF9UWVBFX0FSQic6IDB4OEREQiwKKyAgJ0dFT01FVFJZX09VVFBVVF9UWVBFX0FSQic6IDB4
OEREQywKKyAgJ01BWF9HRU9NRVRSWV9WQVJZSU5HX0NPTVBPTkVOVFNfQVJCJzogMHg4RERELAor
ICAnTUFYX1ZFUlRFWF9WQVJZSU5HX0NPTVBPTkVOVFNfQVJCJzogMHg4RERFLAorICAnTUFYX0dF
T01FVFJZX1VOSUZPUk1fQ09NUE9ORU5UU19BUkInOiAweDhEREYsCisgICdNQVhfR0VPTUVUUllf
T1VUUFVUX1ZFUlRJQ0VTX0FSQic6IDB4OERFMCwKKyAgJ01BWF9HRU9NRVRSWV9UT1RBTF9PVVRQ
VVRfQ09NUE9ORU5UU19BUkInOiAweDhERTEsCisgICdIQUxGX0ZMT0FUX0FSQic6IDB4MTQwQiwK
KyAgJ0hBTEZfRkxPQVQnOiAweDE0MEIsCisgICdDT05TVEFOVF9DT0xPUic6IDB4ODAwMSwKKyAg
J09ORV9NSU5VU19DT05TVEFOVF9DT0xPUic6IDB4ODAwMiwKKyAgJ0NPTlNUQU5UX0FMUEhBJzog
MHg4MDAzLAorICAnT05FX01JTlVTX0NPTlNUQU5UX0FMUEhBJzogMHg4MDA0LAorICAnQkxFTkRf
Q09MT1InOiAweDgwMDUsCisgICdGVU5DX0FERCc6IDB4ODAwNiwKKyAgJ01JTic6IDB4ODAwNywK
KyAgJ01BWCc6IDB4ODAwOCwKKyAgJ0JMRU5EX0VRVUFUSU9OJzogMHg4MDA5LAorICAnRlVOQ19T
VUJUUkFDVCc6IDB4ODAwQSwKKyAgJ0ZVTkNfUkVWRVJTRV9TVUJUUkFDVCc6IDB4ODAwQiwKKyAg
J0NPTlZPTFVUSU9OXzFEJzogMHg4MDEwLAorICAnQ09OVk9MVVRJT05fMkQnOiAweDgwMTEsCisg
ICdTRVBBUkFCTEVfMkQnOiAweDgwMTIsCisgICdDT05WT0xVVElPTl9CT1JERVJfTU9ERSc6IDB4
ODAxMywKKyAgJ0NPTlZPTFVUSU9OX0ZJTFRFUl9TQ0FMRSc6IDB4ODAxNCwKKyAgJ0NPTlZPTFVU
SU9OX0ZJTFRFUl9CSUFTJzogMHg4MDE1LAorICAnUkVEVUNFJzogMHg4MDE2LAorICAnQ09OVk9M
VVRJT05fRk9STUFUJzogMHg4MDE3LAorICAnQ09OVk9MVVRJT05fV0lEVEgnOiAweDgwMTgsCisg
ICdDT05WT0xVVElPTl9IRUlHSFQnOiAweDgwMTksCisgICdNQVhfQ09OVk9MVVRJT05fV0lEVEgn
OiAweDgwMUEsCisgICdNQVhfQ09OVk9MVVRJT05fSEVJR0hUJzogMHg4MDFCLAorICAnUE9TVF9D
T05WT0xVVElPTl9SRURfU0NBTEUnOiAweDgwMUMsCisgICdQT1NUX0NPTlZPTFVUSU9OX0dSRUVO
X1NDQUxFJzogMHg4MDFELAorICAnUE9TVF9DT05WT0xVVElPTl9CTFVFX1NDQUxFJzogMHg4MDFF
LAorICAnUE9TVF9DT05WT0xVVElPTl9BTFBIQV9TQ0FMRSc6IDB4ODAxRiwKKyAgJ1BPU1RfQ09O
Vk9MVVRJT05fUkVEX0JJQVMnOiAweDgwMjAsCisgICdQT1NUX0NPTlZPTFVUSU9OX0dSRUVOX0JJ
QVMnOiAweDgwMjEsCisgICdQT1NUX0NPTlZPTFVUSU9OX0JMVUVfQklBUyc6IDB4ODAyMiwKKyAg
J1BPU1RfQ09OVk9MVVRJT05fQUxQSEFfQklBUyc6IDB4ODAyMywKKyAgJ0hJU1RPR1JBTSc6IDB4
ODAyNCwKKyAgJ1BST1hZX0hJU1RPR1JBTSc6IDB4ODAyNSwKKyAgJ0hJU1RPR1JBTV9XSURUSCc6
IDB4ODAyNiwKKyAgJ0hJU1RPR1JBTV9GT1JNQVQnOiAweDgwMjcsCisgICdISVNUT0dSQU1fUkVE
X1NJWkUnOiAweDgwMjgsCisgICdISVNUT0dSQU1fR1JFRU5fU0laRSc6IDB4ODAyOSwKKyAgJ0hJ
U1RPR1JBTV9CTFVFX1NJWkUnOiAweDgwMkEsCisgICdISVNUT0dSQU1fQUxQSEFfU0laRSc6IDB4
ODAyQiwKKyAgJ0hJU1RPR1JBTV9MVU1JTkFOQ0VfU0laRSc6IDB4ODAyQywKKyAgJ0hJU1RPR1JB
TV9TSU5LJzogMHg4MDJELAorICAnTUlOTUFYJzogMHg4MDJFLAorICAnTUlOTUFYX0ZPUk1BVCc6
IDB4ODAyRiwKKyAgJ01JTk1BWF9TSU5LJzogMHg4MDMwLAorICAnVEFCTEVfVE9PX0xBUkdFJzog
MHg4MDMxLAorICAnQ09MT1JfTUFUUklYJzogMHg4MEIxLAorICAnQ09MT1JfTUFUUklYX1NUQUNL
X0RFUFRIJzogMHg4MEIyLAorICAnTUFYX0NPTE9SX01BVFJJWF9TVEFDS19ERVBUSCc6IDB4ODBC
MywKKyAgJ1BPU1RfQ09MT1JfTUFUUklYX1JFRF9TQ0FMRSc6IDB4ODBCNCwKKyAgJ1BPU1RfQ09M
T1JfTUFUUklYX0dSRUVOX1NDQUxFJzogMHg4MEI1LAorICAnUE9TVF9DT0xPUl9NQVRSSVhfQkxV
RV9TQ0FMRSc6IDB4ODBCNiwKKyAgJ1BPU1RfQ09MT1JfTUFUUklYX0FMUEhBX1NDQUxFJzogMHg4
MEI3LAorICAnUE9TVF9DT0xPUl9NQVRSSVhfUkVEX0JJQVMnOiAweDgwQjgsCisgICdQT1NUX0NP
TE9SX01BVFJJWF9HUkVFTl9CSUFTJzogMHg4MEI5LAorICAnUE9TVF9DT0xPUl9NQVRSSVhfQkxV
RV9CSUFTJzogMHg4MEJBLAorICAnUE9TVF9DT0xPUl9NQVRSSVhfQUxQSEFfQklBUyc6IDB4ODBC
QiwKKyAgJ0NPTE9SX1RBQkxFJzogMHg4MEQwLAorICAnUE9TVF9DT05WT0xVVElPTl9DT0xPUl9U
QUJMRSc6IDB4ODBEMSwKKyAgJ1BPU1RfQ09MT1JfTUFUUklYX0NPTE9SX1RBQkxFJzogMHg4MEQy
LAorICAnUFJPWFlfQ09MT1JfVEFCTEUnOiAweDgwRDMsCisgICdQUk9YWV9QT1NUX0NPTlZPTFVU
SU9OX0NPTE9SX1RBQkxFJzogMHg4MEQ0LAorICAnUFJPWFlfUE9TVF9DT0xPUl9NQVRSSVhfQ09M
T1JfVEFCTEUnOiAweDgwRDUsCisgICdDT0xPUl9UQUJMRV9TQ0FMRSc6IDB4ODBENiwKKyAgJ0NP
TE9SX1RBQkxFX0JJQVMnOiAweDgwRDcsCisgICdDT0xPUl9UQUJMRV9GT1JNQVQnOiAweDgwRDgs
CisgICdDT0xPUl9UQUJMRV9XSURUSCc6IDB4ODBEOSwKKyAgJ0NPTE9SX1RBQkxFX1JFRF9TSVpF
JzogMHg4MERBLAorICAnQ09MT1JfVEFCTEVfR1JFRU5fU0laRSc6IDB4ODBEQiwKKyAgJ0NPTE9S
X1RBQkxFX0JMVUVfU0laRSc6IDB4ODBEQywKKyAgJ0NPTE9SX1RBQkxFX0FMUEhBX1NJWkUnOiAw
eDgwREQsCisgICdDT0xPUl9UQUJMRV9MVU1JTkFOQ0VfU0laRSc6IDB4ODBERSwKKyAgJ0NPTE9S
X1RBQkxFX0lOVEVOU0lUWV9TSVpFJzogMHg4MERGLAorICAnSUdOT1JFX0JPUkRFUic6IDB4ODE1
MCwKKyAgJ0NPTlNUQU5UX0JPUkRFUic6IDB4ODE1MSwKKyAgJ1dSQVBfQk9SREVSJzogMHg4MTUy
LAorICAnUkVQTElDQVRFX0JPUkRFUic6IDB4ODE1MywKKyAgJ0NPTlZPTFVUSU9OX0JPUkRFUl9D
T0xPUic6IDB4ODE1NCwKKyAgJ1ZFUlRFWF9BVFRSSUJfQVJSQVlfRElWSVNPUl9BUkInOiAweDg4
RkUsCisgICdNQVBfUkVBRF9CSVQnOiAweDAwMDEsCisgICdNQVBfV1JJVEVfQklUJzogMHgwMDAy
LAorICAnTUFQX0lOVkFMSURBVEVfUkFOR0VfQklUJzogMHgwMDA0LAorICAnTUFQX0lOVkFMSURB
VEVfQlVGRkVSX0JJVCc6IDB4MDAwOCwKKyAgJ01BUF9GTFVTSF9FWFBMSUNJVF9CSVQnOiAweDAw
MTAsCisgICdNQVBfVU5TWU5DSFJPTklaRURfQklUJzogMHgwMDIwLAorICAnTUFUUklYX1BBTEVU
VEVfQVJCJzogMHg4ODQwLAorICAnTUFYX01BVFJJWF9QQUxFVFRFX1NUQUNLX0RFUFRIX0FSQic6
IDB4ODg0MSwKKyAgJ01BWF9QQUxFVFRFX01BVFJJQ0VTX0FSQic6IDB4ODg0MiwKKyAgJ0NVUlJF
TlRfUEFMRVRURV9NQVRSSVhfQVJCJzogMHg4ODQzLAorICAnTUFUUklYX0lOREVYX0FSUkFZX0FS
Qic6IDB4ODg0NCwKKyAgJ0NVUlJFTlRfTUFUUklYX0lOREVYX0FSQic6IDB4ODg0NSwKKyAgJ01B
VFJJWF9JTkRFWF9BUlJBWV9TSVpFX0FSQic6IDB4ODg0NiwKKyAgJ01BVFJJWF9JTkRFWF9BUlJB
WV9UWVBFX0FSQic6IDB4ODg0NywKKyAgJ01BVFJJWF9JTkRFWF9BUlJBWV9TVFJJREVfQVJCJzog
MHg4ODQ4LAorICAnTUFUUklYX0lOREVYX0FSUkFZX1BPSU5URVJfQVJCJzogMHg4ODQ5LAorICAn
TVVMVElTQU1QTEVfQVJCJzogMHg4MDlELAorICAnU0FNUExFX0FMUEhBX1RPX0NPVkVSQUdFX0FS
Qic6IDB4ODA5RSwKKyAgJ1NBTVBMRV9BTFBIQV9UT19PTkVfQVJCJzogMHg4MDlGLAorICAnU0FN
UExFX0NPVkVSQUdFX0FSQic6IDB4ODBBMCwKKyAgJ1NBTVBMRV9CVUZGRVJTX0FSQic6IDB4ODBB
OCwKKyAgJ1NBTVBMRVNfQVJCJzogMHg4MEE5LAorICAnU0FNUExFX0NPVkVSQUdFX1ZBTFVFX0FS
Qic6IDB4ODBBQSwKKyAgJ1NBTVBMRV9DT1ZFUkFHRV9JTlZFUlRfQVJCJzogMHg4MEFCLAorICAn
TVVMVElTQU1QTEVfQklUX0FSQic6IDB4MjAwMDAwMDAsCisgICdURVhUVVJFMF9BUkInOiAweDg0
QzAsCisgICdURVhUVVJFMV9BUkInOiAweDg0QzEsCisgICdURVhUVVJFMl9BUkInOiAweDg0QzIs
CisgICdURVhUVVJFM19BUkInOiAweDg0QzMsCisgICdURVhUVVJFNF9BUkInOiAweDg0QzQsCisg
ICdURVhUVVJFNV9BUkInOiAweDg0QzUsCisgICdURVhUVVJFNl9BUkInOiAweDg0QzYsCisgICdU
RVhUVVJFN19BUkInOiAweDg0QzcsCisgICdURVhUVVJFOF9BUkInOiAweDg0QzgsCisgICdURVhU
VVJFOV9BUkInOiAweDg0QzksCisgICdURVhUVVJFMTBfQVJCJzogMHg4NENBLAorICAnVEVYVFVS
RTExX0FSQic6IDB4ODRDQiwKKyAgJ1RFWFRVUkUxMl9BUkInOiAweDg0Q0MsCisgICdURVhUVVJF
MTNfQVJCJzogMHg4NENELAorICAnVEVYVFVSRTE0X0FSQic6IDB4ODRDRSwKKyAgJ1RFWFRVUkUx
NV9BUkInOiAweDg0Q0YsCisgICdURVhUVVJFMTZfQVJCJzogMHg4NEQwLAorICAnVEVYVFVSRTE3
X0FSQic6IDB4ODREMSwKKyAgJ1RFWFRVUkUxOF9BUkInOiAweDg0RDIsCisgICdURVhUVVJFMTlf
QVJCJzogMHg4NEQzLAorICAnVEVYVFVSRTIwX0FSQic6IDB4ODRENCwKKyAgJ1RFWFRVUkUyMV9B
UkInOiAweDg0RDUsCisgICdURVhUVVJFMjJfQVJCJzogMHg4NEQ2LAorICAnVEVYVFVSRTIzX0FS
Qic6IDB4ODRENywKKyAgJ1RFWFRVUkUyNF9BUkInOiAweDg0RDgsCisgICdURVhUVVJFMjVfQVJC
JzogMHg4NEQ5LAorICAnVEVYVFVSRTI2X0FSQic6IDB4ODREQSwKKyAgJ1RFWFRVUkUyN19BUkIn
OiAweDg0REIsCisgICdURVhUVVJFMjhfQVJCJzogMHg4NERDLAorICAnVEVYVFVSRTI5X0FSQic6
IDB4ODRERCwKKyAgJ1RFWFRVUkUzMF9BUkInOiAweDg0REUsCisgICdURVhUVVJFMzFfQVJCJzog
MHg4NERGLAorICAnQUNUSVZFX1RFWFRVUkVfQVJCJzogMHg4NEUwLAorICAnQ0xJRU5UX0FDVElW
RV9URVhUVVJFX0FSQic6IDB4ODRFMSwKKyAgJ01BWF9URVhUVVJFX1VOSVRTX0FSQic6IDB4ODRF
MiwKKyAgJ1FVRVJZX0NPVU5URVJfQklUU19BUkInOiAweDg4NjQsCisgICdDVVJSRU5UX1FVRVJZ
X0FSQic6IDB4ODg2NSwKKyAgJ1FVRVJZX1JFU1VMVF9BUkInOiAweDg4NjYsCisgICdRVUVSWV9S
RVNVTFRfQVZBSUxBQkxFX0FSQic6IDB4ODg2NywKKyAgJ1NBTVBMRVNfUEFTU0VEX0FSQic6IDB4
ODkxNCwKKyAgJ1BJWEVMX1BBQ0tfQlVGRkVSX0FSQic6IDB4ODhFQiwKKyAgJ1BJWEVMX1VOUEFD
S19CVUZGRVJfQVJCJzogMHg4OEVDLAorICAnUElYRUxfUEFDS19CVUZGRVJfQklORElOR19BUkIn
OiAweDg4RUQsCisgICdQSVhFTF9VTlBBQ0tfQlVGRkVSX0JJTkRJTkdfQVJCJzogMHg4OEVGLAor
ICAnUE9JTlRfU0laRV9NSU5fQVJCJzogMHg4MTI2LAorICAnUE9JTlRfU0laRV9NQVhfQVJCJzog
MHg4MTI3LAorICAnUE9JTlRfRkFERV9USFJFU0hPTERfU0laRV9BUkInOiAweDgxMjgsCisgICdQ
T0lOVF9ESVNUQU5DRV9BVFRFTlVBVElPTl9BUkInOiAweDgxMjksCisgICdQT0lOVF9TUFJJVEVf
QVJCJzogMHg4ODYxLAorICAnQ09PUkRfUkVQTEFDRV9BUkInOiAweDg4NjIsCisgICdQUk9HUkFN
X09CSkVDVF9BUkInOiAweDhCNDAsCisgICdTSEFERVJfT0JKRUNUX0FSQic6IDB4OEI0OCwKKyAg
J09CSkVDVF9UWVBFX0FSQic6IDB4OEI0RSwKKyAgJ09CSkVDVF9TVUJUWVBFX0FSQic6IDB4OEI0
RiwKKyAgJ0ZMT0FUX1ZFQzJfQVJCJzogMHg4QjUwLAorICAnRkxPQVRfVkVDM19BUkInOiAweDhC
NTEsCisgICdGTE9BVF9WRUM0X0FSQic6IDB4OEI1MiwKKyAgJ0lOVF9WRUMyX0FSQic6IDB4OEI1
MywKKyAgJ0lOVF9WRUMzX0FSQic6IDB4OEI1NCwKKyAgJ0lOVF9WRUM0X0FSQic6IDB4OEI1NSwK
KyAgJ0JPT0xfQVJCJzogMHg4QjU2LAorICAnQk9PTF9WRUMyX0FSQic6IDB4OEI1NywKKyAgJ0JP
T0xfVkVDM19BUkInOiAweDhCNTgsCisgICdCT09MX1ZFQzRfQVJCJzogMHg4QjU5LAorICAnRkxP
QVRfTUFUMl9BUkInOiAweDhCNUEsCisgICdGTE9BVF9NQVQzX0FSQic6IDB4OEI1QiwKKyAgJ0ZM
T0FUX01BVDRfQVJCJzogMHg4QjVDLAorICAnU0FNUExFUl8xRF9BUkInOiAweDhCNUQsCisgICdT
QU1QTEVSXzJEX0FSQic6IDB4OEI1RSwKKyAgJ1NBTVBMRVJfM0RfQVJCJzogMHg4QjVGLAorICAn
U0FNUExFUl9DVUJFX0FSQic6IDB4OEI2MCwKKyAgJ1NBTVBMRVJfMURfU0hBRE9XX0FSQic6IDB4
OEI2MSwKKyAgJ1NBTVBMRVJfMkRfU0hBRE9XX0FSQic6IDB4OEI2MiwKKyAgJ1NBTVBMRVJfMkRf
UkVDVF9BUkInOiAweDhCNjMsCisgICdTQU1QTEVSXzJEX1JFQ1RfU0hBRE9XX0FSQic6IDB4OEI2
NCwKKyAgJ09CSkVDVF9ERUxFVEVfU1RBVFVTX0FSQic6IDB4OEI4MCwKKyAgJ09CSkVDVF9DT01Q
SUxFX1NUQVRVU19BUkInOiAweDhCODEsCisgICdPQkpFQ1RfTElOS19TVEFUVVNfQVJCJzogMHg4
QjgyLAorICAnT0JKRUNUX1ZBTElEQVRFX1NUQVRVU19BUkInOiAweDhCODMsCisgICdPQkpFQ1Rf
SU5GT19MT0dfTEVOR1RIX0FSQic6IDB4OEI4NCwKKyAgJ09CSkVDVF9BVFRBQ0hFRF9PQkpFQ1RT
X0FSQic6IDB4OEI4NSwKKyAgJ09CSkVDVF9BQ1RJVkVfVU5JRk9STVNfQVJCJzogMHg4Qjg2LAor
ICAnT0JKRUNUX0FDVElWRV9VTklGT1JNX01BWF9MRU5HVEhfQVJCJzogMHg4Qjg3LAorICAnQUNU
SVZFX1VOSUZPUk1fQkxPQ0tfTUFYX05BTUVfTEVOR1RIJzogMHg4QTM1LAorICAnVU5JRk9STV9O
QU1FX0xFTkdUSCc6IDB4OEEzOSwKKyAgJ1VOSUZPUk1fQkxPQ0tfTkFNRV9MRU5HVEgnOiAweDhB
NDEsCisgICdPQkpFQ1RfU0hBREVSX1NPVVJDRV9MRU5HVEhfQVJCJzogMHg4Qjg4LAorICAnU0hB
RElOR19MQU5HVUFHRV9WRVJTSU9OX0FSQic6IDB4OEI4QywKKyAgJ1RFWFRVUkVfQ09NUEFSRV9N
T0RFX0FSQic6IDB4ODg0QywKKyAgJ1RFWFRVUkVfQ09NUEFSRV9GVU5DX0FSQic6IDB4ODg0RCwK
KyAgJ0NPTVBBUkVfUl9UT19URVhUVVJFX0FSQic6IDB4ODg0RSwKKyAgJ1RFWFRVUkVfQ09NUEFS
RV9GQUlMX1ZBTFVFX0FSQic6IDB4ODBCRiwKKyAgJ0NMQU1QX1RPX0JPUkRFUl9BUkInOiAweDgx
MkQsCisgICdURVhUVVJFX0JVRkZFUl9BUkInOiAweDhDMkEsCisgICdNQVhfVEVYVFVSRV9CVUZG
RVJfU0laRV9BUkInOiAweDhDMkIsCisgICdURVhUVVJFX0JJTkRJTkdfQlVGRkVSX0FSQic6IDB4
OEMyQywKKyAgJ1RFWFRVUkVfQlVGRkVSX0RBVEFfU1RPUkVfQklORElOR19BUkInOiAweDhDMkQs
CisgICdURVhUVVJFX0JVRkZFUl9GT1JNQVRfQVJCJzogMHg4QzJFLAorICAnQ09NUFJFU1NFRF9B
TFBIQV9BUkInOiAweDg0RTksCisgICdDT01QUkVTU0VEX0xVTUlOQU5DRV9BUkInOiAweDg0RUEs
CisgICdDT01QUkVTU0VEX0xVTUlOQU5DRV9BTFBIQV9BUkInOiAweDg0RUIsCisgICdDT01QUkVT
U0VEX0lOVEVOU0lUWV9BUkInOiAweDg0RUMsCisgICdDT01QUkVTU0VEX1JHQl9BUkInOiAweDg0
RUQsCisgICdDT01QUkVTU0VEX1JHQkFfQVJCJzogMHg4NEVFLAorICAnVEVYVFVSRV9DT01QUkVT
U0lPTl9ISU5UX0FSQic6IDB4ODRFRiwKKyAgJ1RFWFRVUkVfQ09NUFJFU1NFRF9JTUFHRV9TSVpF
X0FSQic6IDB4ODZBMCwKKyAgJ1RFWFRVUkVfQ09NUFJFU1NFRF9BUkInOiAweDg2QTEsCisgICdO
VU1fQ09NUFJFU1NFRF9URVhUVVJFX0ZPUk1BVFNfQVJCJzogMHg4NkEyLAorICAnQ09NUFJFU1NF
RF9URVhUVVJFX0ZPUk1BVFNfQVJCJzogMHg4NkEzLAorICAnQ09NUFJFU1NFRF9SRURfUkdUQzEn
OiAweDhEQkIsCisgICdDT01QUkVTU0VEX1NJR05FRF9SRURfUkdUQzEnOiAweDhEQkMsCisgICdD
T01QUkVTU0VEX1JHX1JHVEMyJzogMHg4REJELAorICAnQ09NUFJFU1NFRF9TSUdORURfUkdfUkdU
QzInOiAweDhEQkUsCisgICdOT1JNQUxfTUFQX0FSQic6IDB4ODUxMSwKKyAgJ1JFRkxFQ1RJT05f
TUFQX0FSQic6IDB4ODUxMiwKKyAgJ1RFWFRVUkVfQ1VCRV9NQVBfQVJCJzogMHg4NTEzLAorICAn
VEVYVFVSRV9CSU5ESU5HX0NVQkVfTUFQX0FSQic6IDB4ODUxNCwKKyAgJ1RFWFRVUkVfQ1VCRV9N
QVBfUE9TSVRJVkVfWF9BUkInOiAweDg1MTUsCisgICdURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZF
X1hfQVJCJzogMHg4NTE2LAorICAnVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9ZX0FSQic6IDB4
ODUxNywKKyAgJ1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWV9BUkInOiAweDg1MTgsCisgICdU
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1pfQVJCJzogMHg4NTE5LAorICAnVEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9aX0FSQic6IDB4ODUxQSwKKyAgJ1BST1hZX1RFWFRVUkVfQ1VCRV9NQVBf
QVJCJzogMHg4NTFCLAorICAnTUFYX0NVQkVfTUFQX1RFWFRVUkVfU0laRV9BUkInOiAweDg1MUMs
CisgICdTVUJUUkFDVF9BUkInOiAweDg0RTcsCisgICdDT01CSU5FX0FSQic6IDB4ODU3MCwKKyAg
J0NPTUJJTkVfUkdCX0FSQic6IDB4ODU3MSwKKyAgJ0NPTUJJTkVfQUxQSEFfQVJCJzogMHg4NTcy
LAorICAnUkdCX1NDQUxFX0FSQic6IDB4ODU3MywKKyAgJ0FERF9TSUdORURfQVJCJzogMHg4NTc0
LAorICAnSU5URVJQT0xBVEVfQVJCJzogMHg4NTc1LAorICAnQ09OU1RBTlRfQVJCJzogMHg4NTc2
LAorICAnUFJJTUFSWV9DT0xPUl9BUkInOiAweDg1NzcsCisgICdQUkVWSU9VU19BUkInOiAweDg1
NzgsCisgICdTT1VSQ0UwX1JHQl9BUkInOiAweDg1ODAsCisgICdTT1VSQ0UxX1JHQl9BUkInOiAw
eDg1ODEsCisgICdTT1VSQ0UyX1JHQl9BUkInOiAweDg1ODIsCisgICdTT1VSQ0UwX0FMUEhBX0FS
Qic6IDB4ODU4OCwKKyAgJ1NPVVJDRTFfQUxQSEFfQVJCJzogMHg4NTg5LAorICAnU09VUkNFMl9B
TFBIQV9BUkInOiAweDg1OEEsCisgICdPUEVSQU5EMF9SR0JfQVJCJzogMHg4NTkwLAorICAnT1BF
UkFORDFfUkdCX0FSQic6IDB4ODU5MSwKKyAgJ09QRVJBTkQyX1JHQl9BUkInOiAweDg1OTIsCisg
ICdPUEVSQU5EMF9BTFBIQV9BUkInOiAweDg1OTgsCisgICdPUEVSQU5EMV9BTFBIQV9BUkInOiAw
eDg1OTksCisgICdPUEVSQU5EMl9BTFBIQV9BUkInOiAweDg1OUEsCisgICdET1QzX1JHQl9BUkIn
OiAweDg2QUUsCisgICdET1QzX1JHQkFfQVJCJzogMHg4NkFGLAorICAnUkdCQTMyRl9BUkInOiAw
eDg4MTQsCisgICdSR0IzMkZfQVJCJzogMHg4ODE1LAorICAnQUxQSEEzMkZfQVJCJzogMHg4ODE2
LAorICAnSU5URU5TSVRZMzJGX0FSQic6IDB4ODgxNywKKyAgJ0xVTUlOQU5DRTMyRl9BUkInOiAw
eDg4MTgsCisgICdMVU1JTkFOQ0VfQUxQSEEzMkZfQVJCJzogMHg4ODE5LAorICAnUkdCQTE2Rl9B
UkInOiAweDg4MUEsCisgICdSR0IxNkZfQVJCJzogMHg4ODFCLAorICAnQUxQSEExNkZfQVJCJzog
MHg4ODFDLAorICAnSU5URU5TSVRZMTZGX0FSQic6IDB4ODgxRCwKKyAgJ0xVTUlOQU5DRTE2Rl9B
UkInOiAweDg4MUUsCisgICdMVU1JTkFOQ0VfQUxQSEExNkZfQVJCJzogMHg4ODFGLAorICAnVEVY
VFVSRV9SRURfVFlQRV9BUkInOiAweDhDMTAsCisgICdURVhUVVJFX0dSRUVOX1RZUEVfQVJCJzog
MHg4QzExLAorICAnVEVYVFVSRV9CTFVFX1RZUEVfQVJCJzogMHg4QzEyLAorICAnVEVYVFVSRV9B
TFBIQV9UWVBFX0FSQic6IDB4OEMxMywKKyAgJ1RFWFRVUkVfTFVNSU5BTkNFX1RZUEVfQVJCJzog
MHg4QzE0LAorICAnVEVYVFVSRV9JTlRFTlNJVFlfVFlQRV9BUkInOiAweDhDMTUsCisgICdURVhU
VVJFX0RFUFRIX1RZUEVfQVJCJzogMHg4QzE2LAorICAnVU5TSUdORURfTk9STUFMSVpFRF9BUkIn
OiAweDhDMTcsCisgICdNSVJST1JFRF9SRVBFQVRfQVJCJzogMHg4MzcwLAorICAnVEVYVFVSRV9S
RUNUQU5HTEVfQVJCJzogMHg4NEY1LAorICAnVEVYVFVSRV9CSU5ESU5HX1JFQ1RBTkdMRV9BUkIn
OiAweDg0RjYsCisgICdQUk9YWV9URVhUVVJFX1JFQ1RBTkdMRV9BUkInOiAweDg0RjcsCisgICdN
QVhfUkVDVEFOR0xFX1RFWFRVUkVfU0laRV9BUkInOiAweDg0RjgsCisgICdTQU1QTEVSXzJEX1JF
Q1RfQVJCJzogMHg4QjYzLAorICAnU0FNUExFUl8yRF9SRUNUX1NIQURPV19BUkInOiAweDhCNjQs
CisgICdSRUQnOiAweDE5MDMsCisgICdSRyc6IDB4ODIyNywKKyAgJ1JHX0lOVEVHRVInOiAweDgy
MjgsCisgICdSOCc6IDB4ODIyOSwKKyAgJ1IxNic6IDB4ODIyQSwKKyAgJ1JHOCc6IDB4ODIyQiwK
KyAgJ1JHMTYnOiAweDgyMkMsCisgICdSMTZGJzogMHg4MjJELAorICAnUjMyRic6IDB4ODIyRSwK
KyAgJ1JHMTZGJzogMHg4MjJGLAorICAnUkczMkYnOiAweDgyMzAsCisgICdSOEknOiAweDgyMzEs
CisgICdSOFVJJzogMHg4MjMyLAorICAnUjE2SSc6IDB4ODIzMywKKyAgJ1IxNlVJJzogMHg4MjM0
LAorICAnUjMySSc6IDB4ODIzNSwKKyAgJ1IzMlVJJzogMHg4MjM2LAorICAnUkc4SSc6IDB4ODIz
NywKKyAgJ1JHOFVJJzogMHg4MjM4LAorICAnUkcxNkknOiAweDgyMzksCisgICdSRzE2VUknOiAw
eDgyM0EsCisgICdSRzMySSc6IDB4ODIzQiwKKyAgJ1JHMzJVSSc6IDB4ODIzQywKKyAgJ1RSQU5T
UE9TRV9NT0RFTFZJRVdfTUFUUklYX0FSQic6IDB4ODRFMywKKyAgJ1RSQU5TUE9TRV9QUk9KRUNU
SU9OX01BVFJJWF9BUkInOiAweDg0RTQsCisgICdUUkFOU1BPU0VfVEVYVFVSRV9NQVRSSVhfQVJC
JzogMHg4NEU1LAorICAnVFJBTlNQT1NFX0NPTE9SX01BVFJJWF9BUkInOiAweDg0RTYsCisgICdW
RVJURVhfQVJSQVlfQklORElORyc6IDB4ODVCNSwKKyAgJ01PREVMVklFVzBfQVJCJzogMHgxNzAw
LAorICAnTU9ERUxWSUVXMV9BUkInOiAweDg1MEEsCisgICdNQVhfVkVSVEVYX1VOSVRTX0FSQic6
IDB4ODZBNCwKKyAgJ0FDVElWRV9WRVJURVhfVU5JVFNfQVJCJzogMHg4NkE1LAorICAnV0VJR0hU
X1NVTV9VTklUWV9BUkInOiAweDg2QTYsCisgICdWRVJURVhfQkxFTkRfQVJCJzogMHg4NkE3LAor
ICAnQ1VSUkVOVF9XRUlHSFRfQVJCJzogMHg4NkE4LAorICAnV0VJR0hUX0FSUkFZX1RZUEVfQVJC
JzogMHg4NkE5LAorICAnV0VJR0hUX0FSUkFZX1NUUklERV9BUkInOiAweDg2QUEsCisgICdXRUlH
SFRfQVJSQVlfU0laRV9BUkInOiAweDg2QUIsCisgICdXRUlHSFRfQVJSQVlfUE9JTlRFUl9BUkIn
OiAweDg2QUMsCisgICdXRUlHSFRfQVJSQVlfQVJCJzogMHg4NkFELAorICAnTU9ERUxWSUVXMl9B
UkInOiAweDg3MjIsCisgICdNT0RFTFZJRVczX0FSQic6IDB4ODcyMywKKyAgJ01PREVMVklFVzRf
QVJCJzogMHg4NzI0LAorICAnTU9ERUxWSUVXNV9BUkInOiAweDg3MjUsCisgICdNT0RFTFZJRVc2
X0FSQic6IDB4ODcyNiwKKyAgJ01PREVMVklFVzdfQVJCJzogMHg4NzI3LAorICAnTU9ERUxWSUVX
OF9BUkInOiAweDg3MjgsCisgICdNT0RFTFZJRVc5X0FSQic6IDB4ODcyOSwKKyAgJ01PREVMVklF
VzEwX0FSQic6IDB4ODcyQSwKKyAgJ01PREVMVklFVzExX0FSQic6IDB4ODcyQiwKKyAgJ01PREVM
VklFVzEyX0FSQic6IDB4ODcyQywKKyAgJ01PREVMVklFVzEzX0FSQic6IDB4ODcyRCwKKyAgJ01P
REVMVklFVzE0X0FSQic6IDB4ODcyRSwKKyAgJ01PREVMVklFVzE1X0FSQic6IDB4ODcyRiwKKyAg
J01PREVMVklFVzE2X0FSQic6IDB4ODczMCwKKyAgJ01PREVMVklFVzE3X0FSQic6IDB4ODczMSwK
KyAgJ01PREVMVklFVzE4X0FSQic6IDB4ODczMiwKKyAgJ01PREVMVklFVzE5X0FSQic6IDB4ODcz
MywKKyAgJ01PREVMVklFVzIwX0FSQic6IDB4ODczNCwKKyAgJ01PREVMVklFVzIxX0FSQic6IDB4
ODczNSwKKyAgJ01PREVMVklFVzIyX0FSQic6IDB4ODczNiwKKyAgJ01PREVMVklFVzIzX0FSQic6
IDB4ODczNywKKyAgJ01PREVMVklFVzI0X0FSQic6IDB4ODczOCwKKyAgJ01PREVMVklFVzI1X0FS
Qic6IDB4ODczOSwKKyAgJ01PREVMVklFVzI2X0FSQic6IDB4ODczQSwKKyAgJ01PREVMVklFVzI3
X0FSQic6IDB4ODczQiwKKyAgJ01PREVMVklFVzI4X0FSQic6IDB4ODczQywKKyAgJ01PREVMVklF
VzI5X0FSQic6IDB4ODczRCwKKyAgJ01PREVMVklFVzMwX0FSQic6IDB4ODczRSwKKyAgJ01PREVM
VklFVzMxX0FSQic6IDB4ODczRiwKKyAgJ0JVRkZFUl9TSVpFX0FSQic6IDB4ODc2NCwKKyAgJ0JV
RkZFUl9VU0FHRV9BUkInOiAweDg3NjUsCisgICdBUlJBWV9CVUZGRVJfQVJCJzogMHg4ODkyLAor
ICAnRUxFTUVOVF9BUlJBWV9CVUZGRVJfQVJCJzogMHg4ODkzLAorICAnQVJSQVlfQlVGRkVSX0JJ
TkRJTkdfQVJCJzogMHg4ODk0LAorICAnRUxFTUVOVF9BUlJBWV9CVUZGRVJfQklORElOR19BUkIn
OiAweDg4OTUsCisgICdWRVJURVhfQVJSQVlfQlVGRkVSX0JJTkRJTkdfQVJCJzogMHg4ODk2LAor
ICAnTk9STUFMX0FSUkFZX0JVRkZFUl9CSU5ESU5HX0FSQic6IDB4ODg5NywKKyAgJ0NPTE9SX0FS
UkFZX0JVRkZFUl9CSU5ESU5HX0FSQic6IDB4ODg5OCwKKyAgJ0lOREVYX0FSUkFZX0JVRkZFUl9C
SU5ESU5HX0FSQic6IDB4ODg5OSwKKyAgJ1RFWFRVUkVfQ09PUkRfQVJSQVlfQlVGRkVSX0JJTkRJ
TkdfQVJCJzogMHg4ODlBLAorICAnRURHRV9GTEFHX0FSUkFZX0JVRkZFUl9CSU5ESU5HX0FSQic6
IDB4ODg5QiwKKyAgJ1NFQ09OREFSWV9DT0xPUl9BUlJBWV9CVUZGRVJfQklORElOR19BUkInOiAw
eDg4OUMsCisgICdGT0dfQ09PUkRJTkFURV9BUlJBWV9CVUZGRVJfQklORElOR19BUkInOiAweDg4
OUQsCisgICdXRUlHSFRfQVJSQVlfQlVGRkVSX0JJTkRJTkdfQVJCJzogMHg4ODlFLAorICAnVkVS
VEVYX0FUVFJJQl9BUlJBWV9CVUZGRVJfQklORElOR19BUkInOiAweDg4OUYsCisgICdSRUFEX09O
TFlfQVJCJzogMHg4OEI4LAorICAnV1JJVEVfT05MWV9BUkInOiAweDg4QjksCisgICdSRUFEX1dS
SVRFX0FSQic6IDB4ODhCQSwKKyAgJ0JVRkZFUl9BQ0NFU1NfQVJCJzogMHg4OEJCLAorICAnQlVG
RkVSX01BUFBFRF9BUkInOiAweDg4QkMsCisgICdCVUZGRVJfTUFQX1BPSU5URVJfQVJCJzogMHg4
OEJELAorICAnU1RSRUFNX0RSQVdfQVJCJzogMHg4OEUwLAorICAnU1RSRUFNX1JFQURfQVJCJzog
MHg4OEUxLAorICAnU1RSRUFNX0NPUFlfQVJCJzogMHg4OEUyLAorICAnU1RBVElDX0RSQVdfQVJC
JzogMHg4OEU0LAorICAnU1RBVElDX1JFQURfQVJCJzogMHg4OEU1LAorICAnU1RBVElDX0NPUFlf
QVJCJzogMHg4OEU2LAorICAnRFlOQU1JQ19EUkFXX0FSQic6IDB4ODhFOCwKKyAgJ0RZTkFNSUNf
UkVBRF9BUkInOiAweDg4RTksCisgICdEWU5BTUlDX0NPUFlfQVJCJzogMHg4OEVBLAorICAnQ09M
T1JfU1VNX0FSQic6IDB4ODQ1OCwKKyAgJ1ZFUlRFWF9QUk9HUkFNX0FSQic6IDB4ODYyMCwKKyAg
J1ZFUlRFWF9BVFRSSUJfQVJSQVlfRU5BQkxFRF9BUkInOiAweDg2MjIsCisgICdWRVJURVhfQVRU
UklCX0FSUkFZX1NJWkVfQVJCJzogMHg4NjIzLAorICAnVkVSVEVYX0FUVFJJQl9BUlJBWV9TVFJJ
REVfQVJCJzogMHg4NjI0LAorICAnVkVSVEVYX0FUVFJJQl9BUlJBWV9UWVBFX0FSQic6IDB4ODYy
NSwKKyAgJ0NVUlJFTlRfVkVSVEVYX0FUVFJJQl9BUkInOiAweDg2MjYsCisgICdQUk9HUkFNX0xF
TkdUSF9BUkInOiAweDg2MjcsCisgICdQUk9HUkFNX1NUUklOR19BUkInOiAweDg2MjgsCisgICdN
QVhfUFJPR1JBTV9NQVRSSVhfU1RBQ0tfREVQVEhfQVJCJzogMHg4NjJFLAorICAnTUFYX1BST0dS
QU1fTUFUUklDRVNfQVJCJzogMHg4NjJGLAorICAnQ1VSUkVOVF9NQVRSSVhfU1RBQ0tfREVQVEhf
QVJCJzogMHg4NjQwLAorICAnQ1VSUkVOVF9NQVRSSVhfQVJCJzogMHg4NjQxLAorICAnVkVSVEVY
X1BST0dSQU1fUE9JTlRfU0laRV9BUkInOiAweDg2NDIsCisgICdWRVJURVhfUFJPR1JBTV9UV09f
U0lERV9BUkInOiAweDg2NDMsCisgICdWRVJURVhfQVRUUklCX0FSUkFZX1BPSU5URVJfQVJCJzog
MHg4NjQ1LAorICAnUFJPR1JBTV9FUlJPUl9QT1NJVElPTl9BUkInOiAweDg2NEIsCisgICdQUk9H
UkFNX0JJTkRJTkdfQVJCJzogMHg4Njc3LAorICAnTUFYX1ZFUlRFWF9BVFRSSUJTX0FSQic6IDB4
ODg2OSwKKyAgJ1ZFUlRFWF9BVFRSSUJfQVJSQVlfTk9STUFMSVpFRF9BUkInOiAweDg4NkEsCisg
ICdQUk9HUkFNX0VSUk9SX1NUUklOR19BUkInOiAweDg4NzQsCisgICdQUk9HUkFNX0ZPUk1BVF9B
U0NJSV9BUkInOiAweDg4NzUsCisgICdQUk9HUkFNX0ZPUk1BVF9BUkInOiAweDg4NzYsCisgICdQ
Uk9HUkFNX0lOU1RSVUNUSU9OU19BUkInOiAweDg4QTAsCisgICdNQVhfUFJPR1JBTV9JTlNUUlVD
VElPTlNfQVJCJzogMHg4OEExLAorICAnUFJPR1JBTV9OQVRJVkVfSU5TVFJVQ1RJT05TX0FSQic6
IDB4ODhBMiwKKyAgJ01BWF9QUk9HUkFNX05BVElWRV9JTlNUUlVDVElPTlNfQVJCJzogMHg4OEEz
LAorICAnUFJPR1JBTV9URU1QT1JBUklFU19BUkInOiAweDg4QTQsCisgICdNQVhfUFJPR1JBTV9U
RU1QT1JBUklFU19BUkInOiAweDg4QTUsCisgICdQUk9HUkFNX05BVElWRV9URU1QT1JBUklFU19B
UkInOiAweDg4QTYsCisgICdNQVhfUFJPR1JBTV9OQVRJVkVfVEVNUE9SQVJJRVNfQVJCJzogMHg4
OEE3LAorICAnUFJPR1JBTV9QQVJBTUVURVJTX0FSQic6IDB4ODhBOCwKKyAgJ01BWF9QUk9HUkFN
X1BBUkFNRVRFUlNfQVJCJzogMHg4OEE5LAorICAnUFJPR1JBTV9OQVRJVkVfUEFSQU1FVEVSU19B
UkInOiAweDg4QUEsCisgICdNQVhfUFJPR1JBTV9OQVRJVkVfUEFSQU1FVEVSU19BUkInOiAweDg4
QUIsCisgICdQUk9HUkFNX0FUVFJJQlNfQVJCJzogMHg4OEFDLAorICAnTUFYX1BST0dSQU1fQVRU
UklCU19BUkInOiAweDg4QUQsCisgICdQUk9HUkFNX05BVElWRV9BVFRSSUJTX0FSQic6IDB4ODhB
RSwKKyAgJ01BWF9QUk9HUkFNX05BVElWRV9BVFRSSUJTX0FSQic6IDB4ODhBRiwKKyAgJ1BST0dS
QU1fQUREUkVTU19SRUdJU1RFUlNfQVJCJzogMHg4OEIwLAorICAnTUFYX1BST0dSQU1fQUREUkVT
U19SRUdJU1RFUlNfQVJCJzogMHg4OEIxLAorICAnUFJPR1JBTV9OQVRJVkVfQUREUkVTU19SRUdJ
U1RFUlNfQVJCJzogMHg4OEIyLAorICAnTUFYX1BST0dSQU1fTkFUSVZFX0FERFJFU1NfUkVHSVNU
RVJTX0FSQic6IDB4ODhCMywKKyAgJ01BWF9QUk9HUkFNX0xPQ0FMX1BBUkFNRVRFUlNfQVJCJzog
MHg4OEI0LAorICAnTUFYX1BST0dSQU1fRU5WX1BBUkFNRVRFUlNfQVJCJzogMHg4OEI1LAorICAn
UFJPR1JBTV9VTkRFUl9OQVRJVkVfTElNSVRTX0FSQic6IDB4ODhCNiwKKyAgJ1RSQU5TUE9TRV9D
VVJSRU5UX01BVFJJWF9BUkInOiAweDg4QjcsCisgICdNQVRSSVgwX0FSQic6IDB4ODhDMCwKKyAg
J01BVFJJWDFfQVJCJzogMHg4OEMxLAorICAnTUFUUklYMl9BUkInOiAweDg4QzIsCisgICdNQVRS
SVgzX0FSQic6IDB4ODhDMywKKyAgJ01BVFJJWDRfQVJCJzogMHg4OEM0LAorICAnTUFUUklYNV9B
UkInOiAweDg4QzUsCisgICdNQVRSSVg2X0FSQic6IDB4ODhDNiwKKyAgJ01BVFJJWDdfQVJCJzog
MHg4OEM3LAorICAnTUFUUklYOF9BUkInOiAweDg4QzgsCisgICdNQVRSSVg5X0FSQic6IDB4ODhD
OSwKKyAgJ01BVFJJWDEwX0FSQic6IDB4ODhDQSwKKyAgJ01BVFJJWDExX0FSQic6IDB4ODhDQiwK
KyAgJ01BVFJJWDEyX0FSQic6IDB4ODhDQywKKyAgJ01BVFJJWDEzX0FSQic6IDB4ODhDRCwKKyAg
J01BVFJJWDE0X0FSQic6IDB4ODhDRSwKKyAgJ01BVFJJWDE1X0FSQic6IDB4ODhDRiwKKyAgJ01B
VFJJWDE2X0FSQic6IDB4ODhEMCwKKyAgJ01BVFJJWDE3X0FSQic6IDB4ODhEMSwKKyAgJ01BVFJJ
WDE4X0FSQic6IDB4ODhEMiwKKyAgJ01BVFJJWDE5X0FSQic6IDB4ODhEMywKKyAgJ01BVFJJWDIw
X0FSQic6IDB4ODhENCwKKyAgJ01BVFJJWDIxX0FSQic6IDB4ODhENSwKKyAgJ01BVFJJWDIyX0FS
Qic6IDB4ODhENiwKKyAgJ01BVFJJWDIzX0FSQic6IDB4ODhENywKKyAgJ01BVFJJWDI0X0FSQic6
IDB4ODhEOCwKKyAgJ01BVFJJWDI1X0FSQic6IDB4ODhEOSwKKyAgJ01BVFJJWDI2X0FSQic6IDB4
ODhEQSwKKyAgJ01BVFJJWDI3X0FSQic6IDB4ODhEQiwKKyAgJ01BVFJJWDI4X0FSQic6IDB4ODhE
QywKKyAgJ01BVFJJWDI5X0FSQic6IDB4ODhERCwKKyAgJ01BVFJJWDMwX0FSQic6IDB4ODhERSwK
KyAgJ01BVFJJWDMxX0FSQic6IDB4ODhERiwKKyAgJ1ZFUlRFWF9TSEFERVJfQVJCJzogMHg4QjMx
LAorICAnTUFYX1ZFUlRFWF9VTklGT1JNX0NPTVBPTkVOVFNfQVJCJzogMHg4QjRBLAorICAnTUFY
X1ZBUllJTkdfRkxPQVRTX0FSQic6IDB4OEI0QiwKKyAgJ01BWF9WRVJURVhfVEVYVFVSRV9JTUFH
RV9VTklUU19BUkInOiAweDhCNEMsCisgICdNQVhfQ09NQklORURfVEVYVFVSRV9JTUFHRV9VTklU
U19BUkInOiAweDhCNEQsCisgICdPQkpFQ1RfQUNUSVZFX0FUVFJJQlVURVNfQVJCJzogMHg4Qjg5
LAorICAnT0JKRUNUX0FDVElWRV9BVFRSSUJVVEVfTUFYX0xFTkdUSF9BUkInOiAweDhCOEEsCisg
ICdURVhUVVJFX1BPSU5UX01PREVfQVRJWCc6IDB4NjBCMCwKKyAgJ1RFWFRVUkVfUE9JTlRfT05F
X0NPT1JEX0FUSVgnOiAweDYwQjEsCisgICdURVhUVVJFX1BPSU5UX1NQUklURV9BVElYJzogMHg2
MEIyLAorICAnUE9JTlRfU1BSSVRFX0NVTExfTU9ERV9BVElYJzogMHg2MEIzLAorICAnUE9JTlRf
U1BSSVRFX0NVTExfQ0VOVEVSX0FUSVgnOiAweDYwQjQsCisgICdQT0lOVF9TUFJJVEVfQ1VMTF9D
TElQX0FUSVgnOiAweDYwQjUsCisgICdNT0RVTEFURV9BRERfQVRJWCc6IDB4ODc0NCwKKyAgJ01P
RFVMQVRFX1NJR05FRF9BRERfQVRJWCc6IDB4ODc0NSwKKyAgJ01PRFVMQVRFX1NVQlRSQUNUX0FU
SVgnOiAweDg3NDYsCisgICdTRUNPTkRBUllfQ09MT1JfQVRJWCc6IDB4ODc0NywKKyAgJ1RFWFRV
UkVfT1VUUFVUX1JHQl9BVElYJzogMHg4NzQ4LAorICAnVEVYVFVSRV9PVVRQVVRfQUxQSEFfQVRJ
WCc6IDB4ODc0OSwKKyAgJ09VVFBVVF9QT0lOVF9TSVpFX0FUSVgnOiAweDYxMEUsCisgICdNQVhf
RFJBV19CVUZGRVJTX0FUSSc6IDB4ODgyNCwKKyAgJ0RSQVdfQlVGRkVSMF9BVEknOiAweDg4MjUs
CisgICdEUkFXX0JVRkZFUjFfQVRJJzogMHg4ODI2LAorICAnRFJBV19CVUZGRVIyX0FUSSc6IDB4
ODgyNywKKyAgJ0RSQVdfQlVGRkVSM19BVEknOiAweDg4MjgsCisgICdEUkFXX0JVRkZFUjRfQVRJ
JzogMHg4ODI5LAorICAnRFJBV19CVUZGRVI1X0FUSSc6IDB4ODgyQSwKKyAgJ0RSQVdfQlVGRkVS
Nl9BVEknOiAweDg4MkIsCisgICdEUkFXX0JVRkZFUjdfQVRJJzogMHg4ODJDLAorICAnRFJBV19C
VUZGRVI4X0FUSSc6IDB4ODgyRCwKKyAgJ0RSQVdfQlVGRkVSOV9BVEknOiAweDg4MkUsCisgICdE
UkFXX0JVRkZFUjEwX0FUSSc6IDB4ODgyRiwKKyAgJ0RSQVdfQlVGRkVSMTFfQVRJJzogMHg4ODMw
LAorICAnRFJBV19CVUZGRVIxMl9BVEknOiAweDg4MzEsCisgICdEUkFXX0JVRkZFUjEzX0FUSSc6
IDB4ODgzMiwKKyAgJ0RSQVdfQlVGRkVSMTRfQVRJJzogMHg4ODMzLAorICAnRFJBV19CVUZGRVIx
NV9BVEknOiAweDg4MzQsCisgICdFTEVNRU5UX0FSUkFZX0FUSSc6IDB4ODc2OCwKKyAgJ0VMRU1F
TlRfQVJSQVlfVFlQRV9BVEknOiAweDg3NjksCisgICdFTEVNRU5UX0FSUkFZX1BPSU5URVJfQVRJ
JzogMHg4NzZBLAorICAnQlVNUF9ST1RfTUFUUklYX0FUSSc6IDB4ODc3NSwKKyAgJ0JVTVBfUk9U
X01BVFJJWF9TSVpFX0FUSSc6IDB4ODc3NiwKKyAgJ0JVTVBfTlVNX1RFWF9VTklUU19BVEknOiAw
eDg3NzcsCisgICdCVU1QX1RFWF9VTklUU19BVEknOiAweDg3NzgsCisgICdEVURWX0FUSSc6IDB4
ODc3OSwKKyAgJ0RVOERWOF9BVEknOiAweDg3N0EsCisgICdCVU1QX0VOVk1BUF9BVEknOiAweDg3
N0IsCisgICdCVU1QX1RBUkdFVF9BVEknOiAweDg3N0MsCisgICdSRURfQklUX0FUSSc6IDB4MDAw
MDAwMDEsCisgICcyWF9CSVRfQVRJJzogMHgwMDAwMDAwMSwKKyAgJzRYX0JJVF9BVEknOiAweDAw
MDAwMDAyLAorICAnR1JFRU5fQklUX0FUSSc6IDB4MDAwMDAwMDIsCisgICdDT01QX0JJVF9BVEkn
OiAweDAwMDAwMDAyLAorICAnQkxVRV9CSVRfQVRJJzogMHgwMDAwMDAwNCwKKyAgJzhYX0JJVF9B
VEknOiAweDAwMDAwMDA0LAorICAnTkVHQVRFX0JJVF9BVEknOiAweDAwMDAwMDA0LAorICAnQklB
U19CSVRfQVRJJzogMHgwMDAwMDAwOCwKKyAgJ0hBTEZfQklUX0FUSSc6IDB4MDAwMDAwMDgsCisg
ICdRVUFSVEVSX0JJVF9BVEknOiAweDAwMDAwMDEwLAorICAnRUlHSFRIX0JJVF9BVEknOiAweDAw
MDAwMDIwLAorICAnU0FUVVJBVEVfQklUX0FUSSc6IDB4MDAwMDAwNDAsCisgICdGUkFHTUVOVF9T
SEFERVJfQVRJJzogMHg4OTIwLAorICAnUkVHXzBfQVRJJzogMHg4OTIxLAorICAnUkVHXzFfQVRJ
JzogMHg4OTIyLAorICAnUkVHXzJfQVRJJzogMHg4OTIzLAorICAnUkVHXzNfQVRJJzogMHg4OTI0
LAorICAnUkVHXzRfQVRJJzogMHg4OTI1LAorICAnUkVHXzVfQVRJJzogMHg4OTI2LAorICAnQ09O
XzBfQVRJJzogMHg4OTQxLAorICAnQ09OXzFfQVRJJzogMHg4OTQyLAorICAnQ09OXzJfQVRJJzog
MHg4OTQzLAorICAnQ09OXzNfQVRJJzogMHg4OTQ0LAorICAnQ09OXzRfQVRJJzogMHg4OTQ1LAor
ICAnQ09OXzVfQVRJJzogMHg4OTQ2LAorICAnQ09OXzZfQVRJJzogMHg4OTQ3LAorICAnQ09OXzdf
QVRJJzogMHg4OTQ4LAorICAnTU9WX0FUSSc6IDB4ODk2MSwKKyAgJ0FERF9BVEknOiAweDg5NjMs
CisgICdNVUxfQVRJJzogMHg4OTY0LAorICAnU1VCX0FUSSc6IDB4ODk2NSwKKyAgJ0RPVDNfQVRJ
JzogMHg4OTY2LAorICAnRE9UNF9BVEknOiAweDg5NjcsCisgICdNQURfQVRJJzogMHg4OTY4LAor
ICAnTEVSUF9BVEknOiAweDg5NjksCisgICdDTkRfQVRJJzogMHg4OTZBLAorICAnQ05EMF9BVEkn
OiAweDg5NkIsCisgICdET1QyX0FERF9BVEknOiAweDg5NkMsCisgICdTRUNPTkRBUllfSU5URVJQ
T0xBVE9SX0FUSSc6IDB4ODk2RCwKKyAgJ05VTV9GUkFHTUVOVF9SRUdJU1RFUlNfQVRJJzogMHg4
OTZFLAorICAnTlVNX0ZSQUdNRU5UX0NPTlNUQU5UU19BVEknOiAweDg5NkYsCisgICdOVU1fUEFT
U0VTX0FUSSc6IDB4ODk3MCwKKyAgJ05VTV9JTlNUUlVDVElPTlNfUEVSX1BBU1NfQVRJJzogMHg4
OTcxLAorICAnTlVNX0lOU1RSVUNUSU9OU19UT1RBTF9BVEknOiAweDg5NzIsCisgICdOVU1fSU5Q
VVRfSU5URVJQT0xBVE9SX0NPTVBPTkVOVFNfQVRJJzogMHg4OTczLAorICAnTlVNX0xPT1BCQUNL
X0NPTVBPTkVOVFNfQVRJJzogMHg4OTc0LAorICAnQ09MT1JfQUxQSEFfUEFJUklOR19BVEknOiAw
eDg5NzUsCisgICdTV0laWkxFX1NUUl9BVEknOiAweDg5NzYsCisgICdTV0laWkxFX1NUUV9BVEkn
OiAweDg5NzcsCisgICdTV0laWkxFX1NUUl9EUl9BVEknOiAweDg5NzgsCisgICdTV0laWkxFX1NU
UV9EUV9BVEknOiAweDg5NzksCisgICdTV0laWkxFX1NUUlFfQVRJJzogMHg4OTdBLAorICAnU1dJ
WlpMRV9TVFJRX0RRX0FUSSc6IDB4ODk3QiwKKyAgJ1BOX1RSSUFOR0xFU19BVEknOiAweDg3RjAs
CisgICdNQVhfUE5fVFJJQU5HTEVTX1RFU1NFTEFUSU9OX0xFVkVMX0FUSSc6IDB4ODdGMSwKKyAg
J1BOX1RSSUFOR0xFU19QT0lOVF9NT0RFX0FUSSc6IDB4ODdGMiwKKyAgJ1BOX1RSSUFOR0xFU19O
T1JNQUxfTU9ERV9BVEknOiAweDg3RjMsCisgICdQTl9UUklBTkdMRVNfVEVTU0VMQVRJT05fTEVW
RUxfQVRJJzogMHg4N0Y0LAorICAnUE5fVFJJQU5HTEVTX1BPSU5UX01PREVfTElORUFSX0FUSSc6
IDB4ODdGNSwKKyAgJ1BOX1RSSUFOR0xFU19QT0lOVF9NT0RFX0NVQklDX0FUSSc6IDB4ODdGNiwK
KyAgJ1BOX1RSSUFOR0xFU19OT1JNQUxfTU9ERV9MSU5FQVJfQVRJJzogMHg4N0Y3LAorICAnUE5f
VFJJQU5HTEVTX05PUk1BTF9NT0RFX1FVQURSQVRJQ19BVEknOiAweDg3RjgsCisgICdTVEVOQ0lM
X0JBQ0tfRlVOQ19BVEknOiAweDg4MDAsCisgICdTVEVOQ0lMX0JBQ0tfRkFJTF9BVEknOiAweDg4
MDEsCisgICdTVEVOQ0lMX0JBQ0tfUEFTU19ERVBUSF9GQUlMX0FUSSc6IDB4ODgwMiwKKyAgJ1NU
RU5DSUxfQkFDS19QQVNTX0RFUFRIX1BBU1NfQVRJJzogMHg4ODAzLAorICAnVEVYVF9GUkFHTUVO
VF9TSEFERVJfQVRJJzogMHg4MjAwLAorICAnQ09NUFJFU1NFRF9MVU1JTkFOQ0VfQUxQSEFfM0RD
X0FUSSc6IDB4ODgzNywKKyAgJ01PRFVMQVRFX0FERF9BVEknOiAweDg3NDQsCisgICdNT0RVTEFU
RV9TSUdORURfQUREX0FUSSc6IDB4ODc0NSwKKyAgJ01PRFVMQVRFX1NVQlRSQUNUX0FUSSc6IDB4
ODc0NiwKKyAgJ1JHQkFfRkxPQVQzMl9BVEknOiAweDg4MTQsCisgICdSR0JfRkxPQVQzMl9BVEkn
OiAweDg4MTUsCisgICdBTFBIQV9GTE9BVDMyX0FUSSc6IDB4ODgxNiwKKyAgJ0lOVEVOU0lUWV9G
TE9BVDMyX0FUSSc6IDB4ODgxNywKKyAgJ0xVTUlOQU5DRV9GTE9BVDMyX0FUSSc6IDB4ODgxOCwK
KyAgJ0xVTUlOQU5DRV9BTFBIQV9GTE9BVDMyX0FUSSc6IDB4ODgxOSwKKyAgJ1JHQkFfRkxPQVQx
Nl9BVEknOiAweDg4MUEsCisgICdSR0JfRkxPQVQxNl9BVEknOiAweDg4MUIsCisgICdBTFBIQV9G
TE9BVDE2X0FUSSc6IDB4ODgxQywKKyAgJ0lOVEVOU0lUWV9GTE9BVDE2X0FUSSc6IDB4ODgxRCwK
KyAgJ0xVTUlOQU5DRV9GTE9BVDE2X0FUSSc6IDB4ODgxRSwKKyAgJ0xVTUlOQU5DRV9BTFBIQV9G
TE9BVDE2X0FUSSc6IDB4ODgxRiwKKyAgJ01JUlJPUl9DTEFNUF9BVEknOiAweDg3NDIsCisgICdN
SVJST1JfQ0xBTVBfVE9fRURHRV9BVEknOiAweDg3NDMsCisgICdTVEFUSUNfQVRJJzogMHg4NzYw
LAorICAnRFlOQU1JQ19BVEknOiAweDg3NjEsCisgICdQUkVTRVJWRV9BVEknOiAweDg3NjIsCisg
ICdESVNDQVJEX0FUSSc6IDB4ODc2MywKKyAgJ09CSkVDVF9CVUZGRVJfU0laRV9BVEknOiAweDg3
NjQsCisgICdPQkpFQ1RfQlVGRkVSX1VTQUdFX0FUSSc6IDB4ODc2NSwKKyAgJ0FSUkFZX09CSkVD
VF9CVUZGRVJfQVRJJzogMHg4NzY2LAorICAnQVJSQVlfT0JKRUNUX09GRlNFVF9BVEknOiAweDg3
NjcsCisgICdNQVhfVkVSVEVYX1NUUkVBTVNfQVRJJzogMHg4NzZCLAorICAnVkVSVEVYX1NPVVJD
RV9BVEknOiAweDg3NkMsCisgICdWRVJURVhfU1RSRUFNMF9BVEknOiAweDg3NkQsCisgICdWRVJU
RVhfU1RSRUFNMV9BVEknOiAweDg3NkUsCisgICdWRVJURVhfU1RSRUFNMl9BVEknOiAweDg3NkYs
CisgICdWRVJURVhfU1RSRUFNM19BVEknOiAweDg3NzAsCisgICdWRVJURVhfU1RSRUFNNF9BVEkn
OiAweDg3NzEsCisgICdWRVJURVhfU1RSRUFNNV9BVEknOiAweDg3NzIsCisgICdWRVJURVhfU1RS
RUFNNl9BVEknOiAweDg3NzMsCisgICdWRVJURVhfU1RSRUFNN19BVEknOiAweDg3NzQsCisgICc0
MjJfRVhUJzogMHg4MENDLAorICAnNDIyX1JFVl9FWFQnOiAweDgwQ0QsCisgICc0MjJfQVZFUkFH
RV9FWFQnOiAweDgwQ0UsCisgICc0MjJfUkVWX0FWRVJBR0VfRVhUJzogMHg4MENGLAorICAnQ0df
VkVSVEVYX1NIQURFUl9FWFQnOiAweDg5MEUsCisgICdDR19GUkFHTUVOVF9TSEFERVJfRVhUJzog
MHg4OTBGLAorICAnQUJHUl9FWFQnOiAweDgwMDAsCisgICdCR1JfRVhUJzogMHg4MEUwLAorICAn
QkdSQV9FWFQnOiAweDgwRTEsCisgICdNQVhfVkVSVEVYX0JJTkRBQkxFX1VOSUZPUk1TX0VYVCc6
IDB4OERFMiwKKyAgJ01BWF9GUkFHTUVOVF9CSU5EQUJMRV9VTklGT1JNU19FWFQnOiAweDhERTMs
CisgICdNQVhfR0VPTUVUUllfQklOREFCTEVfVU5JRk9STVNfRVhUJzogMHg4REU0LAorICAnTUFY
X0JJTkRBQkxFX1VOSUZPUk1fU0laRV9FWFQnOiAweDhERUQsCisgICdVTklGT1JNX0JVRkZFUl9F
WFQnOiAweDhERUUsCisgICdVTklGT1JNX0JVRkZFUl9CSU5ESU5HX0VYVCc6IDB4OERFRiwKKyAg
J0NPTlNUQU5UX0NPTE9SX0VYVCc6IDB4ODAwMSwKKyAgJ09ORV9NSU5VU19DT05TVEFOVF9DT0xP
Ul9FWFQnOiAweDgwMDIsCisgICdDT05TVEFOVF9BTFBIQV9FWFQnOiAweDgwMDMsCisgICdPTkVf
TUlOVVNfQ09OU1RBTlRfQUxQSEFfRVhUJzogMHg4MDA0LAorICAnQkxFTkRfQ09MT1JfRVhUJzog
MHg4MDA1LAorICAnQkxFTkRfRVFVQVRJT05fUkdCX0VYVCc6IDB4ODAwOSwKKyAgJ0JMRU5EX0VR
VUFUSU9OX0FMUEhBX0VYVCc6IDB4ODgzRCwKKyAgJ0JMRU5EX0RTVF9SR0JfRVhUJzogMHg4MEM4
LAorICAnQkxFTkRfU1JDX1JHQl9FWFQnOiAweDgwQzksCisgICdCTEVORF9EU1RfQUxQSEFfRVhU
JzogMHg4MENBLAorICAnQkxFTkRfU1JDX0FMUEhBX0VYVCc6IDB4ODBDQiwKKyAgJ0ZVTkNfQURE
X0VYVCc6IDB4ODAwNiwKKyAgJ01JTl9FWFQnOiAweDgwMDcsCisgICdNQVhfRVhUJzogMHg4MDA4
LAorICAnQkxFTkRfRVFVQVRJT05fRVhUJzogMHg4MDA5LAorICAnRlVOQ19TVUJUUkFDVF9FWFQn
OiAweDgwMEEsCisgICdGVU5DX1JFVkVSU0VfU1VCVFJBQ1RfRVhUJzogMHg4MDBCLAorICAnQ0xJ
UF9WT0xVTUVfQ0xJUFBJTkdfSElOVF9FWFQnOiAweDgwRjAsCisgICdDTVlLX0VYVCc6IDB4ODAw
QywKKyAgJ0NNWUtBX0VYVCc6IDB4ODAwRCwKKyAgJ1BBQ0tfQ01ZS19ISU5UX0VYVCc6IDB4ODAw
RSwKKyAgJ1VOUEFDS19DTVlLX0hJTlRfRVhUJzogMHg4MDBGLAorICAnQVJSQVlfRUxFTUVOVF9M
T0NLX0ZJUlNUX0VYVCc6IDB4ODFBOCwKKyAgJ0FSUkFZX0VMRU1FTlRfTE9DS19DT1VOVF9FWFQn
OiAweDgxQTksCisgICdDT05WT0xVVElPTl8xRF9FWFQnOiAweDgwMTAsCisgICdDT05WT0xVVElP
Tl8yRF9FWFQnOiAweDgwMTEsCisgICdTRVBBUkFCTEVfMkRfRVhUJzogMHg4MDEyLAorICAnQ09O
Vk9MVVRJT05fQk9SREVSX01PREVfRVhUJzogMHg4MDEzLAorICAnQ09OVk9MVVRJT05fRklMVEVS
X1NDQUxFX0VYVCc6IDB4ODAxNCwKKyAgJ0NPTlZPTFVUSU9OX0ZJTFRFUl9CSUFTX0VYVCc6IDB4
ODAxNSwKKyAgJ1JFRFVDRV9FWFQnOiAweDgwMTYsCisgICdDT05WT0xVVElPTl9GT1JNQVRfRVhU
JzogMHg4MDE3LAorICAnQ09OVk9MVVRJT05fV0lEVEhfRVhUJzogMHg4MDE4LAorICAnQ09OVk9M
VVRJT05fSEVJR0hUX0VYVCc6IDB4ODAxOSwKKyAgJ01BWF9DT05WT0xVVElPTl9XSURUSF9FWFQn
OiAweDgwMUEsCisgICdNQVhfQ09OVk9MVVRJT05fSEVJR0hUX0VYVCc6IDB4ODAxQiwKKyAgJ1BP
U1RfQ09OVk9MVVRJT05fUkVEX1NDQUxFX0VYVCc6IDB4ODAxQywKKyAgJ1BPU1RfQ09OVk9MVVRJ
T05fR1JFRU5fU0NBTEVfRVhUJzogMHg4MDFELAorICAnUE9TVF9DT05WT0xVVElPTl9CTFVFX1ND
QUxFX0VYVCc6IDB4ODAxRSwKKyAgJ1BPU1RfQ09OVk9MVVRJT05fQUxQSEFfU0NBTEVfRVhUJzog
MHg4MDFGLAorICAnUE9TVF9DT05WT0xVVElPTl9SRURfQklBU19FWFQnOiAweDgwMjAsCisgICdQ
T1NUX0NPTlZPTFVUSU9OX0dSRUVOX0JJQVNfRVhUJzogMHg4MDIxLAorICAnUE9TVF9DT05WT0xV
VElPTl9CTFVFX0JJQVNfRVhUJzogMHg4MDIyLAorICAnUE9TVF9DT05WT0xVVElPTl9BTFBIQV9C
SUFTX0VYVCc6IDB4ODAyMywKKyAgJ1RBTkdFTlRfQVJSQVlfRVhUJzogMHg4NDM5LAorICAnQklO
T1JNQUxfQVJSQVlfRVhUJzogMHg4NDNBLAorICAnQ1VSUkVOVF9UQU5HRU5UX0VYVCc6IDB4ODQz
QiwKKyAgJ0NVUlJFTlRfQklOT1JNQUxfRVhUJzogMHg4NDNDLAorICAnVEFOR0VOVF9BUlJBWV9U
WVBFX0VYVCc6IDB4ODQzRSwKKyAgJ1RBTkdFTlRfQVJSQVlfU1RSSURFX0VYVCc6IDB4ODQzRiwK
KyAgJ0JJTk9STUFMX0FSUkFZX1RZUEVfRVhUJzogMHg4NDQwLAorICAnQklOT1JNQUxfQVJSQVlf
U1RSSURFX0VYVCc6IDB4ODQ0MSwKKyAgJ1RBTkdFTlRfQVJSQVlfUE9JTlRFUl9FWFQnOiAweDg0
NDIsCisgICdCSU5PUk1BTF9BUlJBWV9QT0lOVEVSX0VYVCc6IDB4ODQ0MywKKyAgJ01BUDFfVEFO
R0VOVF9FWFQnOiAweDg0NDQsCisgICdNQVAyX1RBTkdFTlRfRVhUJzogMHg4NDQ1LAorICAnTUFQ
MV9CSU5PUk1BTF9FWFQnOiAweDg0NDYsCisgICdNQVAyX0JJTk9STUFMX0VYVCc6IDB4ODQ0NywK
KyAgJ0RFUFRIX0JPVU5EU19URVNUX0VYVCc6IDB4ODg5MCwKKyAgJ0RFUFRIX0JPVU5EU19FWFQn
OiAweDg4OTEsCisgICdQUk9HUkFNX01BVFJJWF9FWFQnOiAweDhFMkQsCisgICdUUkFOU1BPU0Vf
UFJPR1JBTV9NQVRSSVhfRVhUJzogMHg4RTJFLAorICAnUFJPR1JBTV9NQVRSSVhfU1RBQ0tfREVQ
VEhfRVhUJzogMHg4RTJGLAorICAnTUFYX0VMRU1FTlRTX1ZFUlRJQ0VTJzogMHg4MEU4LAorICAn
TUFYX0VMRU1FTlRTX0lORElDRVMnOiAweDgwRTksCisgICdGT0dfQ09PUkRJTkFURV9TT1VSQ0Vf
RVhUJzogMHg4NDUwLAorICAnRk9HX0NPT1JESU5BVEVfRVhUJzogMHg4NDUxLAorICAnRlJBR01F
TlRfREVQVEhfRVhUJzogMHg4NDUyLAorICAnQ1VSUkVOVF9GT0dfQ09PUkRJTkFURV9FWFQnOiAw
eDg0NTMsCisgICdGT0dfQ09PUkRJTkFURV9BUlJBWV9UWVBFX0VYVCc6IDB4ODQ1NCwKKyAgJ0ZP
R19DT09SRElOQVRFX0FSUkFZX1NUUklERV9FWFQnOiAweDg0NTUsCisgICdGT0dfQ09PUkRJTkFU
RV9BUlJBWV9QT0lOVEVSX0VYVCc6IDB4ODQ1NiwKKyAgJ0ZPR19DT09SRElOQVRFX0FSUkFZX0VY
VCc6IDB4ODQ1NywKKyAgJ0ZSQUdNRU5UX0xJR0hUSU5HX0VYVCc6IDB4ODQwMCwKKyAgJ0ZSQUdN
RU5UX0NPTE9SX01BVEVSSUFMX0VYVCc6IDB4ODQwMSwKKyAgJ0ZSQUdNRU5UX0NPTE9SX01BVEVS
SUFMX0ZBQ0VfRVhUJzogMHg4NDAyLAorICAnRlJBR01FTlRfQ09MT1JfTUFURVJJQUxfUEFSQU1F
VEVSX0VYVCc6IDB4ODQwMywKKyAgJ01BWF9GUkFHTUVOVF9MSUdIVFNfRVhUJzogMHg4NDA0LAor
ICAnTUFYX0FDVElWRV9MSUdIVFNfRVhUJzogMHg4NDA1LAorICAnQ1VSUkVOVF9SQVNURVJfTk9S
TUFMX0VYVCc6IDB4ODQwNiwKKyAgJ0xJR0hUX0VOVl9NT0RFX0VYVCc6IDB4ODQwNywKKyAgJ0ZS
QUdNRU5UX0xJR0hUX01PREVMX0xPQ0FMX1ZJRVdFUl9FWFQnOiAweDg0MDgsCisgICdGUkFHTUVO
VF9MSUdIVF9NT0RFTF9UV09fU0lERV9FWFQnOiAweDg0MDksCisgICdGUkFHTUVOVF9MSUdIVF9N
T0RFTF9BTUJJRU5UX0VYVCc6IDB4ODQwQSwKKyAgJ0ZSQUdNRU5UX0xJR0hUX01PREVMX05PUk1B
TF9JTlRFUlBPTEFUSU9OX0VYVCc6IDB4ODQwQiwKKyAgJ0ZSQUdNRU5UX0xJR0hUMF9FWFQnOiAw
eDg0MEMsCisgICdGUkFHTUVOVF9MSUdIVDdfRVhUJzogMHg4NDEzLAorICAnRFJBV19GUkFNRUJV
RkZFUl9CSU5ESU5HX0VYVCc6IDB4OENBNiwKKyAgJ1JFQURfRlJBTUVCVUZGRVJfRVhUJzogMHg4
Q0E4LAorICAnRFJBV19GUkFNRUJVRkZFUl9FWFQnOiAweDhDQTksCisgICdSRUFEX0ZSQU1FQlVG
RkVSX0JJTkRJTkdfRVhUJzogMHg4Q0FBLAorICAnUkVOREVSQlVGRkVSX1NBTVBMRVNfRVhUJzog
MHg4Q0FCLAorICAnRlJBTUVCVUZGRVJfSU5DT01QTEVURV9NVUxUSVNBTVBMRV9FWFQnOiAweDhE
NTYsCisgICdNQVhfU0FNUExFU19FWFQnOiAweDhENTcsCisgICdJTlZBTElEX0ZSQU1FQlVGRkVS
X09QRVJBVElPTl9FWFQnOiAweDA1MDYsCisgICdNQVhfUkVOREVSQlVGRkVSX1NJWkVfRVhUJzog
MHg4NEU4LAorICAnRlJBTUVCVUZGRVJfQklORElOR19FWFQnOiAweDhDQTYsCisgICdSRU5ERVJC
VUZGRVJfQklORElOR19FWFQnOiAweDhDQTcsCisgICdGUkFNRUJVRkZFUl9BVFRBQ0hNRU5UX09C
SkVDVF9UWVBFX0VYVCc6IDB4OENEMCwKKyAgJ0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfT0JKRUNU
X05BTUVfRVhUJzogMHg4Q0QxLAorICAnRlJBTUVCVUZGRVJfQVRUQUNITUVOVF9URVhUVVJFX0xF
VkVMX0VYVCc6IDB4OENEMiwKKyAgJ0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVSRV9DVUJF
X01BUF9GQUNFX0VYVCc6IDB4OENEMywKKyAgJ0ZSQU1FQlVGRkVSX0FUVEFDSE1FTlRfVEVYVFVS
RV8zRF9aT0ZGU0VUX0VYVCc6IDB4OENENCwKKyAgJ0ZSQU1FQlVGRkVSX0NPTVBMRVRFX0VYVCc6
IDB4OENENSwKKyAgJ0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVfQVRUQUNITUVOVF9FWFQnOiAweDhD
RDYsCisgICdGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX01JU1NJTkdfQVRUQUNITUVOVF9FWFQnOiAw
eDhDRDcsCisgICdGUkFNRUJVRkZFUl9JTkNPTVBMRVRFX0RJTUVOU0lPTlNfRVhUJzogMHg4Q0Q5
LAorICAnRlJBTUVCVUZGRVJfSU5DT01QTEVURV9GT1JNQVRTX0VYVCc6IDB4OENEQSwKKyAgJ0ZS
QU1FQlVGRkVSX0lOQ09NUExFVEVfRFJBV19CVUZGRVJfRVhUJzogMHg4Q0RCLAorICAnRlJBTUVC
VUZGRVJfSU5DT01QTEVURV9SRUFEX0JVRkZFUl9FWFQnOiAweDhDREMsCisgICdGUkFNRUJVRkZF
Ul9VTlNVUFBPUlRFRF9FWFQnOiAweDhDREQsCisgICdNQVhfQ09MT1JfQVRUQUNITUVOVFNfRVhU
JzogMHg4Q0RGLAorICAnQ09MT1JfQVRUQUNITUVOVDBfRVhUJzogMHg4Q0UwLAorICAnQ09MT1Jf
QVRUQUNITUVOVDFfRVhUJzogMHg4Q0UxLAorICAnQ09MT1JfQVRUQUNITUVOVDJfRVhUJzogMHg4
Q0UyLAorICAnQ09MT1JfQVRUQUNITUVOVDNfRVhUJzogMHg4Q0UzLAorICAnQ09MT1JfQVRUQUNI
TUVOVDRfRVhUJzogMHg4Q0U0LAorICAnQ09MT1JfQVRUQUNITUVOVDVfRVhUJzogMHg4Q0U1LAor
ICAnQ09MT1JfQVRUQUNITUVOVDZfRVhUJzogMHg4Q0U2LAorICAnQ09MT1JfQVRUQUNITUVOVDdf
RVhUJzogMHg4Q0U3LAorICAnQ09MT1JfQVRUQUNITUVOVDhfRVhUJzogMHg4Q0U4LAorICAnQ09M
T1JfQVRUQUNITUVOVDlfRVhUJzogMHg4Q0U5LAorICAnQ09MT1JfQVRUQUNITUVOVDEwX0VYVCc6
IDB4OENFQSwKKyAgJ0NPTE9SX0FUVEFDSE1FTlQxMV9FWFQnOiAweDhDRUIsCisgICdDT0xPUl9B
VFRBQ0hNRU5UMTJfRVhUJzogMHg4Q0VDLAorICAnQ09MT1JfQVRUQUNITUVOVDEzX0VYVCc6IDB4
OENFRCwKKyAgJ0NPTE9SX0FUVEFDSE1FTlQxNF9FWFQnOiAweDhDRUUsCisgICdDT0xPUl9BVFRB
Q0hNRU5UMTVfRVhUJzogMHg4Q0VGLAorICAnREVQVEhfQVRUQUNITUVOVF9FWFQnOiAweDhEMDAs
CisgICdTVEVOQ0lMX0FUVEFDSE1FTlRfRVhUJzogMHg4RDIwLAorICAnRlJBTUVCVUZGRVJfRVhU
JzogMHg4RDQwLAorICAnUkVOREVSQlVGRkVSX0VYVCc6IDB4OEQ0MSwKKyAgJ1JFTkRFUkJVRkZF
Ul9XSURUSF9FWFQnOiAweDhENDIsCisgICdSRU5ERVJCVUZGRVJfSEVJR0hUX0VYVCc6IDB4OEQ0
MywKKyAgJ1JFTkRFUkJVRkZFUl9JTlRFUk5BTF9GT1JNQVRfRVhUJzogMHg4RDQ0LAorICAnU1RF
TkNJTF9JTkRFWDFfRVhUJzogMHg4RDQ2LAorICAnU1RFTkNJTF9JTkRFWDRfRVhUJzogMHg4RDQ3
LAorICAnU1RFTkNJTF9JTkRFWDhfRVhUJzogMHg4RDQ4LAorICAnU1RFTkNJTF9JTkRFWDE2X0VY
VCc6IDB4OEQ0OSwKKyAgJ1JFTkRFUkJVRkZFUl9SRURfU0laRV9FWFQnOiAweDhENTAsCisgICdS
RU5ERVJCVUZGRVJfR1JFRU5fU0laRV9FWFQnOiAweDhENTEsCisgICdSRU5ERVJCVUZGRVJfQkxV
RV9TSVpFX0VYVCc6IDB4OEQ1MiwKKyAgJ1JFTkRFUkJVRkZFUl9BTFBIQV9TSVpFX0VYVCc6IDB4
OEQ1MywKKyAgJ1JFTkRFUkJVRkZFUl9ERVBUSF9TSVpFX0VYVCc6IDB4OEQ1NCwKKyAgJ1JFTkRF
UkJVRkZFUl9TVEVOQ0lMX1NJWkVfRVhUJzogMHg4RDU1LAorICAnRlJBTUVCVUZGRVJfU1JHQl9F
WFQnOiAweDhEQjksCisgICdGUkFNRUJVRkZFUl9TUkdCX0NBUEFCTEVfRVhUJzogMHg4REJBLAor
ICAnTElORVNfQURKQUNFTkNZX0VYVCc6IDB4QSwKKyAgJ0xJTkVfU1RSSVBfQURKQUNFTkNZX0VY
VCc6IDB4QiwKKyAgJ1RSSUFOR0xFU19BREpBQ0VOQ1lfRVhUJzogMHhDLAorICAnVFJJQU5HTEVf
U1RSSVBfQURKQUNFTkNZX0VYVCc6IDB4RCwKKyAgJ1BST0dSQU1fUE9JTlRfU0laRV9FWFQnOiAw
eDg2NDIsCisgICdNQVhfVkFSWUlOR19DT01QT05FTlRTX0VYVCc6IDB4OEI0QiwKKyAgJ01BWF9H
RU9NRVRSWV9URVhUVVJFX0lNQUdFX1VOSVRTX0VYVCc6IDB4OEMyOSwKKyAgJ0ZSQU1FQlVGRkVS
X0FUVEFDSE1FTlRfVEVYVFVSRV9MQVlFUl9FWFQnOiAweDhDRDQsCisgICdGUkFNRUJVRkZFUl9B
VFRBQ0hNRU5UX0xBWUVSRURfRVhUJzogMHg4REE3LAorICAnRlJBTUVCVUZGRVJfSU5DT01QTEVU
RV9MQVlFUl9UQVJHRVRTX0VYVCc6IDB4OERBOCwKKyAgJ0ZSQU1FQlVGRkVSX0lOQ09NUExFVEVf
TEFZRVJfQ09VTlRfRVhUJzogMHg4REE5LAorICAnR0VPTUVUUllfU0hBREVSX0VYVCc6IDB4OERE
OSwKKyAgJ0dFT01FVFJZX1ZFUlRJQ0VTX09VVF9FWFQnOiAweDhEREEsCisgICdHRU9NRVRSWV9J
TlBVVF9UWVBFX0VYVCc6IDB4OEREQiwKKyAgJ0dFT01FVFJZX09VVFBVVF9UWVBFX0VYVCc6IDB4
OEREQywKKyAgJ01BWF9HRU9NRVRSWV9WQVJZSU5HX0NPTVBPTkVOVFNfRVhUJzogMHg4RERELAor
ICAnTUFYX1ZFUlRFWF9WQVJZSU5HX0NPTVBPTkVOVFNfRVhUJzogMHg4RERFLAorICAnTUFYX0dF
T01FVFJZX1VOSUZPUk1fQ09NUE9ORU5UU19FWFQnOiAweDhEREYsCisgICdNQVhfR0VPTUVUUllf
T1VUUFVUX1ZFUlRJQ0VTX0VYVCc6IDB4OERFMCwKKyAgJ01BWF9HRU9NRVRSWV9UT1RBTF9PVVRQ
VVRfQ09NUE9ORU5UU19FWFQnOiAweDhERTEsCisgICdWRVJURVhfQVRUUklCX0FSUkFZX0lOVEVH
RVJfRVhUJzogMHg4OEZELAorICAnU0FNUExFUl8xRF9BUlJBWV9FWFQnOiAweDhEQzAsCisgICdT
QU1QTEVSXzJEX0FSUkFZX0VYVCc6IDB4OERDMSwKKyAgJ1NBTVBMRVJfQlVGRkVSX0VYVCc6IDB4
OERDMiwKKyAgJ1NBTVBMRVJfMURfQVJSQVlfU0hBRE9XX0VYVCc6IDB4OERDMywKKyAgJ1NBTVBM
RVJfMkRfQVJSQVlfU0hBRE9XX0VYVCc6IDB4OERDNCwKKyAgJ1NBTVBMRVJfQ1VCRV9TSEFET1df
RVhUJzogMHg4REM1LAorICAnVU5TSUdORURfSU5UX1ZFQzJfRVhUJzogMHg4REM2LAorICAnVU5T
SUdORURfSU5UX1ZFQzNfRVhUJzogMHg4REM3LAorICAnVU5TSUdORURfSU5UX1ZFQzRfRVhUJzog
MHg4REM4LAorICAnSU5UX1NBTVBMRVJfMURfRVhUJzogMHg4REM5LAorICAnSU5UX1NBTVBMRVJf
MkRfRVhUJzogMHg4RENBLAorICAnSU5UX1NBTVBMRVJfM0RfRVhUJzogMHg4RENCLAorICAnSU5U
X1NBTVBMRVJfQ1VCRV9FWFQnOiAweDhEQ0MsCisgICdJTlRfU0FNUExFUl8yRF9SRUNUX0VYVCc6
IDB4OERDRCwKKyAgJ0lOVF9TQU1QTEVSXzFEX0FSUkFZX0VYVCc6IDB4OERDRSwKKyAgJ0lOVF9T
QU1QTEVSXzJEX0FSUkFZX0VYVCc6IDB4OERDRiwKKyAgJ0lOVF9TQU1QTEVSX0JVRkZFUl9FWFQn
OiAweDhERDAsCisgICdVTlNJR05FRF9JTlRfU0FNUExFUl8xRF9FWFQnOiAweDhERDEsCisgICdV
TlNJR05FRF9JTlRfU0FNUExFUl8yRF9FWFQnOiAweDhERDIsCisgICdVTlNJR05FRF9JTlRfU0FN
UExFUl8zRF9FWFQnOiAweDhERDMsCisgICdVTlNJR05FRF9JTlRfU0FNUExFUl9DVUJFX0VYVCc6
IDB4OERENCwKKyAgJ1VOU0lHTkVEX0lOVF9TQU1QTEVSXzJEX1JFQ1RfRVhUJzogMHg4REQ1LAor
ICAnVU5TSUdORURfSU5UX1NBTVBMRVJfMURfQVJSQVlfRVhUJzogMHg4REQ2LAorICAnVU5TSUdO
RURfSU5UX1NBTVBMRVJfMkRfQVJSQVlfRVhUJzogMHg4REQ3LAorICAnVU5TSUdORURfSU5UX1NB
TVBMRVJfQlVGRkVSX0VYVCc6IDB4OEREOCwKKyAgJ0hJU1RPR1JBTV9FWFQnOiAweDgwMjQsCisg
ICdQUk9YWV9ISVNUT0dSQU1fRVhUJzogMHg4MDI1LAorICAnSElTVE9HUkFNX1dJRFRIX0VYVCc6
IDB4ODAyNiwKKyAgJ0hJU1RPR1JBTV9GT1JNQVRfRVhUJzogMHg4MDI3LAorICAnSElTVE9HUkFN
X1JFRF9TSVpFX0VYVCc6IDB4ODAyOCwKKyAgJ0hJU1RPR1JBTV9HUkVFTl9TSVpFX0VYVCc6IDB4
ODAyOSwKKyAgJ0hJU1RPR1JBTV9CTFVFX1NJWkVfRVhUJzogMHg4MDJBLAorICAnSElTVE9HUkFN
X0FMUEhBX1NJWkVfRVhUJzogMHg4MDJCLAorICAnSElTVE9HUkFNX0xVTUlOQU5DRV9TSVpFX0VY
VCc6IDB4ODAyQywKKyAgJ0hJU1RPR1JBTV9TSU5LX0VYVCc6IDB4ODAyRCwKKyAgJ01JTk1BWF9F
WFQnOiAweDgwMkUsCisgICdNSU5NQVhfRk9STUFUX0VYVCc6IDB4ODAyRiwKKyAgJ01JTk1BWF9T
SU5LX0VYVCc6IDB4ODAzMCwKKyAgJ0ZSQUdNRU5UX01BVEVSSUFMX0VYVCc6IDB4ODM0OSwKKyAg
J0ZSQUdNRU5UX05PUk1BTF9FWFQnOiAweDgzNEEsCisgICdGUkFHTUVOVF9DT0xPUl9FWFQnOiAw
eDgzNEMsCisgICdBVFRFTlVBVElPTl9FWFQnOiAweDgzNEQsCisgICdTSEFET1dfQVRURU5VQVRJ
T05fRVhUJzogMHg4MzRFLAorICAnVEVYVFVSRV9BUFBMSUNBVElPTl9NT0RFX0VYVCc6IDB4ODM0
RiwKKyAgJ1RFWFRVUkVfTElHSFRfRVhUJzogMHg4MzUwLAorICAnVEVYVFVSRV9NQVRFUklBTF9G
QUNFX0VYVCc6IDB4ODM1MSwKKyAgJ1RFWFRVUkVfTUFURVJJQUxfUEFSQU1FVEVSX0VYVCc6IDB4
ODM1MiwKKyAgJ0ZSQUdNRU5UX0RFUFRIX0VYVCc6IDB4ODQ1MiwKKyAgJ01VTFRJU0FNUExFX0VY
VCc6IDB4ODA5RCwKKyAgJ1NBTVBMRV9BTFBIQV9UT19NQVNLX0VYVCc6IDB4ODA5RSwKKyAgJ1NB
TVBMRV9BTFBIQV9UT19PTkVfRVhUJzogMHg4MDlGLAorICAnU0FNUExFX01BU0tfRVhUJzogMHg4
MEEwLAorICAnMVBBU1NfRVhUJzogMHg4MEExLAorICAnMlBBU1NfMF9FWFQnOiAweDgwQTIsCisg
ICcyUEFTU18xX0VYVCc6IDB4ODBBMywKKyAgJzRQQVNTXzBfRVhUJzogMHg4MEE0LAorICAnNFBB
U1NfMV9FWFQnOiAweDgwQTUsCisgICc0UEFTU18yX0VYVCc6IDB4ODBBNiwKKyAgJzRQQVNTXzNf
RVhUJzogMHg4MEE3LAorICAnU0FNUExFX0JVRkZFUlNfRVhUJzogMHg4MEE4LAorICAnU0FNUExF
U19FWFQnOiAweDgwQTksCisgICdTQU1QTEVfTUFTS19WQUxVRV9FWFQnOiAweDgwQUEsCisgICdT
QU1QTEVfTUFTS19JTlZFUlRfRVhUJzogMHg4MEFCLAorICAnU0FNUExFX1BBVFRFUk5fRVhUJzog
MHg4MEFDLAorICAnTVVMVElTQU1QTEVfQklUX0VYVCc6IDB4MjAwMDAwMDAsCisgICdERVBUSF9T
VEVOQ0lMX0VYVCc6IDB4ODRGOSwKKyAgJ1VOU0lHTkVEX0lOVF8yNF84X0VYVCc6IDB4ODRGQSwK
KyAgJ0RFUFRIMjRfU1RFTkNJTDhfRVhUJzogMHg4OEYwLAorICAnVEVYVFVSRV9TVEVOQ0lMX1NJ
WkVfRVhUJzogMHg4OEYxLAorICAnUjExRl9HMTFGX0IxMEZfRVhUJzogMHg4QzNBLAorICAnVU5T
SUdORURfSU5UXzEwRl8xMUZfMTFGX1JFVl9FWFQnOiAweDhDM0IsCisgICdSR0JBX1NJR05FRF9D
T01QT05FTlRTX0VYVCc6IDB4OEMzQywKKyAgJ1VOU0lHTkVEX0JZVEVfM18zXzJfRVhUJzogMHg4
MDMyLAorICAnVU5TSUdORURfU0hPUlRfNF80XzRfNF9FWFQnOiAweDgwMzMsCisgICdVTlNJR05F
RF9TSE9SVF81XzVfNV8xX0VYVCc6IDB4ODAzNCwKKyAgJ1VOU0lHTkVEX0lOVF84XzhfOF84X0VY
VCc6IDB4ODAzNSwKKyAgJ1VOU0lHTkVEX0lOVF8xMF8xMF8xMF8yX0VYVCc6IDB4ODAzNiwKKyAg
J1RFWFRVUkVfMUQnOiAweDBERTAsCisgICdURVhUVVJFXzJEJzogMHgwREUxLAorICAnUFJPWFlf
VEVYVFVSRV8xRCc6IDB4ODA2MywKKyAgJ1BST1hZX1RFWFRVUkVfMkQnOiAweDgwNjQsCisgICdU
RVhUVVJFXzNEX0VYVCc6IDB4ODA2RiwKKyAgJ1BST1hZX1RFWFRVUkVfM0RfRVhUJzogMHg4MDcw
LAorICAnQ09MT1JfVEFCTEVfRk9STUFUX0VYVCc6IDB4ODBEOCwKKyAgJ0NPTE9SX1RBQkxFX1dJ
RFRIX0VYVCc6IDB4ODBEOSwKKyAgJ0NPTE9SX1RBQkxFX1JFRF9TSVpFX0VYVCc6IDB4ODBEQSwK
KyAgJ0NPTE9SX1RBQkxFX0dSRUVOX1NJWkVfRVhUJzogMHg4MERCLAorICAnQ09MT1JfVEFCTEVf
QkxVRV9TSVpFX0VYVCc6IDB4ODBEQywKKyAgJ0NPTE9SX1RBQkxFX0FMUEhBX1NJWkVfRVhUJzog
MHg4MERELAorICAnQ09MT1JfVEFCTEVfTFVNSU5BTkNFX1NJWkVfRVhUJzogMHg4MERFLAorICAn
Q09MT1JfVEFCTEVfSU5URU5TSVRZX1NJWkVfRVhUJzogMHg4MERGLAorICAnQ09MT1JfSU5ERVgx
X0VYVCc6IDB4ODBFMiwKKyAgJ0NPTE9SX0lOREVYMl9FWFQnOiAweDgwRTMsCisgICdDT0xPUl9J
TkRFWDRfRVhUJzogMHg4MEU0LAorICAnQ09MT1JfSU5ERVg4X0VYVCc6IDB4ODBFNSwKKyAgJ0NP
TE9SX0lOREVYMTJfRVhUJzogMHg4MEU2LAorICAnQ09MT1JfSU5ERVgxNl9FWFQnOiAweDgwRTcs
CisgICdURVhUVVJFX0lOREVYX1NJWkVfRVhUJzogMHg4MEVELAorICAnVEVYVFVSRV9DVUJFX01B
UF9BUkInOiAweDg1MTMsCisgICdQUk9YWV9URVhUVVJFX0NVQkVfTUFQX0FSQic6IDB4ODUxQiwK
KyAgJ1BJWEVMX1BBQ0tfQlVGRkVSX0VYVCc6IDB4ODhFQiwKKyAgJ1BJWEVMX1VOUEFDS19CVUZG
RVJfRVhUJzogMHg4OEVDLAorICAnUElYRUxfUEFDS19CVUZGRVJfQklORElOR19FWFQnOiAweDg4
RUQsCisgICdQSVhFTF9VTlBBQ0tfQlVGRkVSX0JJTkRJTkdfRVhUJzogMHg4OEVGLAorICAnUElY
RUxfVFJBTlNGT1JNXzJEX0VYVCc6IDB4ODMzMCwKKyAgJ1BJWEVMX01BR19GSUxURVJfRVhUJzog
MHg4MzMxLAorICAnUElYRUxfTUlOX0ZJTFRFUl9FWFQnOiAweDgzMzIsCisgICdQSVhFTF9DVUJJ
Q19XRUlHSFRfRVhUJzogMHg4MzMzLAorICAnQ1VCSUNfRVhUJzogMHg4MzM0LAorICAnQVZFUkFH
RV9FWFQnOiAweDgzMzUsCisgICdQSVhFTF9UUkFOU0ZPUk1fMkRfU1RBQ0tfREVQVEhfRVhUJzog
MHg4MzM2LAorICAnTUFYX1BJWEVMX1RSQU5TRk9STV8yRF9TVEFDS19ERVBUSF9FWFQnOiAweDgz
MzcsCisgICdQSVhFTF9UUkFOU0ZPUk1fMkRfTUFUUklYX0VYVCc6IDB4ODMzOCwKKyAgJ1BPSU5U
X1NJWkVfTUlOX0VYVCc6IDB4ODEyNiwKKyAgJ1BPSU5UX1NJWkVfTUFYX0VYVCc6IDB4ODEyNywK
KyAgJ1BPSU5UX0ZBREVfVEhSRVNIT0xEX1NJWkVfRVhUJzogMHg4MTI4LAorICAnRElTVEFOQ0Vf
QVRURU5VQVRJT05fRVhUJzogMHg4MTI5LAorICAnUE9MWUdPTl9PRkZTRVRfRVhUJzogMHg4MDM3
LAorICAnUE9MWUdPTl9PRkZTRVRfRkFDVE9SX0VYVCc6IDB4ODAzOCwKKyAgJ1BPTFlHT05fT0ZG
U0VUX0JJQVNfRVhUJzogMHg4MDM5LAorICAnUkVTQ0FMRV9OT1JNQUxfRVhUJzogMHg4MDNBLAor
ICAnQ09MT1JfU1VNX0VYVCc6IDB4ODQ1OCwKKyAgJ0NVUlJFTlRfU0VDT05EQVJZX0NPTE9SX0VY
VCc6IDB4ODQ1OSwKKyAgJ1NFQ09OREFSWV9DT0xPUl9BUlJBWV9TSVpFX0VYVCc6IDB4ODQ1QSwK
KyAgJ1NFQ09OREFSWV9DT0xPUl9BUlJBWV9UWVBFX0VYVCc6IDB4ODQ1QiwKKyAgJ1NFQ09OREFS
WV9DT0xPUl9BUlJBWV9TVFJJREVfRVhUJzogMHg4NDVDLAorICAnU0VDT05EQVJZX0NPTE9SX0FS
UkFZX1BPSU5URVJfRVhUJzogMHg4NDVELAorICAnU0VDT05EQVJZX0NPTE9SX0FSUkFZX0VYVCc6
IDB4ODQ1RSwKKyAgJ0xJR0hUX01PREVMX0NPTE9SX0NPTlRST0xfRVhUJzogMHg4MUY4LAorICAn
U0lOR0xFX0NPTE9SX0VYVCc6IDB4ODFGOSwKKyAgJ1NFUEFSQVRFX1NQRUNVTEFSX0NPTE9SX0VY
VCc6IDB4ODFGQSwKKyAgJ1NIQVJFRF9URVhUVVJFX1BBTEVUVEVfRVhUJzogMHg4MUZCLAorICAn
U1RFTkNJTF9UQUdfQklUU19FWFQnOiAweDg4RjIsCisgICdTVEVOQ0lMX0NMRUFSX1RBR19WQUxV
RV9FWFQnOiAweDg4RjMsCisgICdTVEVOQ0lMX1RFU1RfVFdPX1NJREVfRVhUJzogMHg4OTEwLAor
ICAnQUNUSVZFX1NURU5DSUxfRkFDRV9FWFQnOiAweDg5MTEsCisgICdJTkNSX1dSQVBfRVhUJzog
MHg4NTA3LAorICAnREVDUl9XUkFQX0VYVCc6IDB4ODUwOCwKKyAgJ0FMUEhBNF9FWFQnOiAweDgw
M0IsCisgICdBTFBIQThfRVhUJzogMHg4MDNDLAorICAnQUxQSEExMl9FWFQnOiAweDgwM0QsCisg
ICdBTFBIQTE2X0VYVCc6IDB4ODAzRSwKKyAgJ0xVTUlOQU5DRTRfRVhUJzogMHg4MDNGLAorICAn
TFVNSU5BTkNFOF9FWFQnOiAweDgwNDAsCisgICdMVU1JTkFOQ0UxMl9FWFQnOiAweDgwNDEsCisg
ICdMVU1JTkFOQ0UxNl9FWFQnOiAweDgwNDIsCisgICdMVU1JTkFOQ0U0X0FMUEhBNF9FWFQnOiAw
eDgwNDMsCisgICdMVU1JTkFOQ0U2X0FMUEhBMl9FWFQnOiAweDgwNDQsCisgICdMVU1JTkFOQ0U4
X0FMUEhBOF9FWFQnOiAweDgwNDUsCisgICdMVU1JTkFOQ0UxMl9BTFBIQTRfRVhUJzogMHg4MDQ2
LAorICAnTFVNSU5BTkNFMTJfQUxQSEExMl9FWFQnOiAweDgwNDcsCisgICdMVU1JTkFOQ0UxNl9B
TFBIQTE2X0VYVCc6IDB4ODA0OCwKKyAgJ0lOVEVOU0lUWV9FWFQnOiAweDgwNDksCisgICdJTlRF
TlNJVFk0X0VYVCc6IDB4ODA0QSwKKyAgJ0lOVEVOU0lUWThfRVhUJzogMHg4MDRCLAorICAnSU5U
RU5TSVRZMTJfRVhUJzogMHg4MDRDLAorICAnSU5URU5TSVRZMTZfRVhUJzogMHg4MDRELAorICAn
UkdCMl9FWFQnOiAweDgwNEUsCisgICdSR0I0X0VYVCc6IDB4ODA0RiwKKyAgJ1JHQjVfRVhUJzog
MHg4MDUwLAorICAnUkdCOF9FWFQnOiAweDgwNTEsCisgICdSR0IxMF9FWFQnOiAweDgwNTIsCisg
ICdSR0IxMl9FWFQnOiAweDgwNTMsCisgICdSR0IxNl9FWFQnOiAweDgwNTQsCisgICdSR0JBMl9F
WFQnOiAweDgwNTUsCisgICdSR0JBNF9FWFQnOiAweDgwNTYsCisgICdSR0I1X0ExX0VYVCc6IDB4
ODA1NywKKyAgJ1JHQkE4X0VYVCc6IDB4ODA1OCwKKyAgJ1JHQjEwX0EyX0VYVCc6IDB4ODA1OSwK
KyAgJ1JHQkExMl9FWFQnOiAweDgwNUEsCisgICdSR0JBMTZfRVhUJzogMHg4MDVCLAorICAnVEVY
VFVSRV9SRURfU0laRV9FWFQnOiAweDgwNUMsCisgICdURVhUVVJFX0dSRUVOX1NJWkVfRVhUJzog
MHg4MDVELAorICAnVEVYVFVSRV9CTFVFX1NJWkVfRVhUJzogMHg4MDVFLAorICAnVEVYVFVSRV9B
TFBIQV9TSVpFX0VYVCc6IDB4ODA1RiwKKyAgJ1RFWFRVUkVfTFVNSU5BTkNFX1NJWkVfRVhUJzog
MHg4MDYwLAorICAnVEVYVFVSRV9JTlRFTlNJVFlfU0laRV9FWFQnOiAweDgwNjEsCisgICdSRVBM
QUNFX0VYVCc6IDB4ODA2MiwKKyAgJ1BST1hZX1RFWFRVUkVfMURfRVhUJzogMHg4MDYzLAorICAn
UFJPWFlfVEVYVFVSRV8yRF9FWFQnOiAweDgwNjQsCisgICdQQUNLX1NLSVBfSU1BR0VTX0VYVCc6
IDB4ODA2QiwKKyAgJ1BBQ0tfSU1BR0VfSEVJR0hUX0VYVCc6IDB4ODA2QywKKyAgJ1VOUEFDS19T
S0lQX0lNQUdFU19FWFQnOiAweDgwNkQsCisgICdVTlBBQ0tfSU1BR0VfSEVJR0hUX0VYVCc6IDB4
ODA2RSwKKyAgJ1RFWFRVUkVfM0RfRVhUJzogMHg4MDZGLAorICAnUFJPWFlfVEVYVFVSRV8zRF9F
WFQnOiAweDgwNzAsCisgICdURVhUVVJFX0RFUFRIX0VYVCc6IDB4ODA3MSwKKyAgJ1RFWFRVUkVf
V1JBUF9SX0VYVCc6IDB4ODA3MiwKKyAgJ01BWF8zRF9URVhUVVJFX1NJWkVfRVhUJzogMHg4MDcz
LAorICAnQ09NUEFSRV9SRUZfREVQVEhfVE9fVEVYVFVSRV9FWFQnOiAweDg4NEUsCisgICdNQVhf
QVJSQVlfVEVYVFVSRV9MQVlFUlNfRVhUJzogMHg4OEZGLAorICAnVEVYVFVSRV8xRF9BUlJBWV9F
WFQnOiAweDhDMTgsCisgICdQUk9YWV9URVhUVVJFXzFEX0FSUkFZX0VYVCc6IDB4OEMxOSwKKyAg
J1RFWFRVUkVfMkRfQVJSQVlfRVhUJzogMHg4QzFBLAorICAnUFJPWFlfVEVYVFVSRV8yRF9BUlJB
WV9FWFQnOiAweDhDMUIsCisgICdURVhUVVJFX0JJTkRJTkdfMURfQVJSQVlfRVhUJzogMHg4QzFD
LAorICAnVEVYVFVSRV9CSU5ESU5HXzJEX0FSUkFZX0VYVCc6IDB4OEMxRCwKKyAgJ1RFWFRVUkVf
QlVGRkVSX0VYVCc6IDB4OEMyQSwKKyAgJ01BWF9URVhUVVJFX0JVRkZFUl9TSVpFX0VYVCc6IDB4
OEMyQiwKKyAgJ1RFWFRVUkVfQklORElOR19CVUZGRVJfRVhUJzogMHg4QzJDLAorICAnVEVYVFVS
RV9CVUZGRVJfREFUQV9TVE9SRV9CSU5ESU5HX0VYVCc6IDB4OEMyRCwKKyAgJ1RFWFRVUkVfQlVG
RkVSX0ZPUk1BVF9FWFQnOiAweDhDMkUsCisgICdDT01QUkVTU0VEX1JHQl9TM1RDX0RYVDFfRVhU
JzogMHg4M0YwLAorICAnQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUMV9FWFQnOiAweDgzRjEsCisg
ICdDT01QUkVTU0VEX0xVTUlOQU5DRV9MQVRDMV9FWFQnOiAweDhDNzAsCisgICdDT01QUkVTU0VE
X1NJR05FRF9MVU1JTkFOQ0VfTEFUQzFfRVhUJzogMHg4QzcxLAorICAnQ09NUFJFU1NFRF9MVU1J
TkFOQ0VfQUxQSEFfTEFUQzJfRVhUJzogMHg4QzcyLAorICAnQ09NUFJFU1NFRF9TSUdORURfTFVN
SU5BTkNFX0FMUEhBX0xBVEMyX0VYVCc6IDB4OEM3MywKKyAgJ0NPTVBSRVNTRURfUkVEX1JHVEMx
X0VYVCc6IDB4OERCQiwKKyAgJ0NPTVBSRVNTRURfU0lHTkVEX1JFRF9SR1RDMV9FWFQnOiAweDhE
QkMsCisgICdDT01QUkVTU0VEX1JFRF9HUkVFTl9SR1RDMl9FWFQnOiAweDhEQkQsCisgICdDT01Q
UkVTU0VEX1NJR05FRF9SRURfR1JFRU5fUkdUQzJfRVhUJzogMHg4REJFLAorICAnQ09NUFJFU1NF
RF9SR0JfUzNUQ19EWFQxX0VYVCc6IDB4ODNGMCwKKyAgJ0NPTVBSRVNTRURfUkdCQV9TM1RDX0RY
VDFfRVhUJzogMHg4M0YxLAorICAnQ09NUFJFU1NFRF9SR0JBX1MzVENfRFhUM19FWFQnOiAweDgz
RjIsCisgICdDT01QUkVTU0VEX1JHQkFfUzNUQ19EWFQ1X0VYVCc6IDB4ODNGMywKKyAgJ05PUk1B
TF9NQVBfRVhUJzogMHg4NTExLAorICAnUkVGTEVDVElPTl9NQVBfRVhUJzogMHg4NTEyLAorICAn
VEVYVFVSRV9DVUJFX01BUF9FWFQnOiAweDg1MTMsCisgICdURVhUVVJFX0JJTkRJTkdfQ1VCRV9N
QVBfRVhUJzogMHg4NTE0LAorICAnVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YX0VYVCc6IDB4
ODUxNSwKKyAgJ1RFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWF9FWFQnOiAweDg1MTYsCisgICdU
RVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1lfRVhUJzogMHg4NTE3LAorICAnVEVYVFVSRV9DVUJF
X01BUF9ORUdBVElWRV9ZX0VYVCc6IDB4ODUxOCwKKyAgJ1RFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWl9FWFQnOiAweDg1MTksCisgICdURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1pfRVhUJzog
MHg4NTFBLAorICAnUFJPWFlfVEVYVFVSRV9DVUJFX01BUF9FWFQnOiAweDg1MUIsCisgICdNQVhf
Q1VCRV9NQVBfVEVYVFVSRV9TSVpFX0VYVCc6IDB4ODUxQywKKyAgJ0NMQU1QX1RPX0VER0VfRVhU
JzogMHg4MTJGLAorICAnQ09NQklORV9FWFQnOiAweDg1NzAsCisgICdDT01CSU5FX1JHQl9FWFQn
OiAweDg1NzEsCisgICdDT01CSU5FX0FMUEhBX0VYVCc6IDB4ODU3MiwKKyAgJ1JHQl9TQ0FMRV9F
WFQnOiAweDg1NzMsCisgICdBRERfU0lHTkVEX0VYVCc6IDB4ODU3NCwKKyAgJ0lOVEVSUE9MQVRF
X0VYVCc6IDB4ODU3NSwKKyAgJ0NPTlNUQU5UX0VYVCc6IDB4ODU3NiwKKyAgJ1BSSU1BUllfQ09M
T1JfRVhUJzogMHg4NTc3LAorICAnUFJFVklPVVNfRVhUJzogMHg4NTc4LAorICAnU09VUkNFMF9S
R0JfRVhUJzogMHg4NTgwLAorICAnU09VUkNFMV9SR0JfRVhUJzogMHg4NTgxLAorICAnU09VUkNF
Ml9SR0JfRVhUJzogMHg4NTgyLAorICAnU09VUkNFMF9BTFBIQV9FWFQnOiAweDg1ODgsCisgICdT
T1VSQ0UxX0FMUEhBX0VYVCc6IDB4ODU4OSwKKyAgJ1NPVVJDRTJfQUxQSEFfRVhUJzogMHg4NThB
LAorICAnT1BFUkFORDBfUkdCX0VYVCc6IDB4ODU5MCwKKyAgJ09QRVJBTkQxX1JHQl9FWFQnOiAw
eDg1OTEsCisgICdPUEVSQU5EMl9SR0JfRVhUJzogMHg4NTkyLAorICAnT1BFUkFORDBfQUxQSEFf
RVhUJzogMHg4NTk4LAorICAnT1BFUkFORDFfQUxQSEFfRVhUJzogMHg4NTk5LAorICAnT1BFUkFO
RDJfQUxQSEFfRVhUJzogMHg4NTlBLAorICAnRE9UM19SR0JfRVhUJzogMHg4NzQwLAorICAnRE9U
M19SR0JBX0VYVCc6IDB4ODc0MSwKKyAgJ1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUJzogMHg4
NEZFLAorICAnTUFYX1RFWFRVUkVfTUFYX0FOSVNPVFJPUFlfRVhUJzogMHg4NEZGLAorICAnUkdC
QTMyVUlfRVhUJzogMHg4RDcwLAorICAnUkdCMzJVSV9FWFQnOiAweDhENzEsCisgICdBTFBIQTMy
VUlfRVhUJzogMHg4RDcyLAorICAnSU5URU5TSVRZMzJVSV9FWFQnOiAweDhENzMsCisgICdMVU1J
TkFOQ0UzMlVJX0VYVCc6IDB4OEQ3NCwKKyAgJ0xVTUlOQU5DRV9BTFBIQTMyVUlfRVhUJzogMHg4
RDc1LAorICAnUkdCQTE2VUlfRVhUJzogMHg4RDc2LAorICAnUkdCMTZVSV9FWFQnOiAweDhENzcs
CisgICdBTFBIQTE2VUlfRVhUJzogMHg4RDc4LAorICAnSU5URU5TSVRZMTZVSV9FWFQnOiAweDhE
NzksCisgICdMVU1JTkFOQ0UxNlVJX0VYVCc6IDB4OEQ3QSwKKyAgJ0xVTUlOQU5DRV9BTFBIQTE2
VUlfRVhUJzogMHg4RDdCLAorICAnUkdCQThVSV9FWFQnOiAweDhEN0MsCisgICdSR0I4VUlfRVhU
JzogMHg4RDdELAorICAnQUxQSEE4VUlfRVhUJzogMHg4RDdFLAorICAnSU5URU5TSVRZOFVJX0VY
VCc6IDB4OEQ3RiwKKyAgJ0xVTUlOQU5DRThVSV9FWFQnOiAweDhEODAsCisgICdMVU1JTkFOQ0Vf
QUxQSEE4VUlfRVhUJzogMHg4RDgxLAorICAnUkdCQTMySV9FWFQnOiAweDhEODIsCisgICdSR0Iz
MklfRVhUJzogMHg4RDgzLAorICAnQUxQSEEzMklfRVhUJzogMHg4RDg0LAorICAnSU5URU5TSVRZ
MzJJX0VYVCc6IDB4OEQ4NSwKKyAgJ0xVTUlOQU5DRTMySV9FWFQnOiAweDhEODYsCisgICdMVU1J
TkFOQ0VfQUxQSEEzMklfRVhUJzogMHg4RDg3LAorICAnUkdCQTE2SV9FWFQnOiAweDhEODgsCisg
ICdSR0IxNklfRVhUJzogMHg4RDg5LAorICAnQUxQSEExNklfRVhUJzogMHg4RDhBLAorICAnSU5U
RU5TSVRZMTZJX0VYVCc6IDB4OEQ4QiwKKyAgJ0xVTUlOQU5DRTE2SV9FWFQnOiAweDhEOEMsCisg
ICdMVU1JTkFOQ0VfQUxQSEExNklfRVhUJzogMHg4RDhELAorICAnUkdCQThJX0VYVCc6IDB4OEQ4
RSwKKyAgJ1JHQjhJX0VYVCc6IDB4OEQ4RiwKKyAgJ0FMUEhBOElfRVhUJzogMHg4RDkwLAorICAn
SU5URU5TSVRZOElfRVhUJzogMHg4RDkxLAorICAnTFVNSU5BTkNFOElfRVhUJzogMHg4RDkyLAor
ICAnTFVNSU5BTkNFX0FMUEhBOElfRVhUJzogMHg4RDkzLAorICAnUkVEX0lOVEVHRVJfRVhUJzog
MHg4RDk0LAorICAnR1JFRU5fSU5URUdFUl9FWFQnOiAweDhEOTUsCisgICdCTFVFX0lOVEVHRVJf
RVhUJzogMHg4RDk2LAorICAnQUxQSEFfSU5URUdFUl9FWFQnOiAweDhEOTcsCisgICdSR0JfSU5U
RUdFUl9FWFQnOiAweDhEOTgsCisgICdSR0JBX0lOVEVHRVJfRVhUJzogMHg4RDk5LAorICAnQkdS
X0lOVEVHRVJfRVhUJzogMHg4RDlBLAorICAnQkdSQV9JTlRFR0VSX0VYVCc6IDB4OEQ5QiwKKyAg
J0xVTUlOQU5DRV9JTlRFR0VSX0VYVCc6IDB4OEQ5QywKKyAgJ0xVTUlOQU5DRV9BTFBIQV9JTlRF
R0VSX0VYVCc6IDB4OEQ5RCwKKyAgJ1JHQkFfSU5URUdFUl9NT0RFX0VYVCc6IDB4OEQ5RSwKKyAg
J01BWF9URVhUVVJFX0xPRF9CSUFTX0VYVCc6IDB4ODRGRCwKKyAgJ1RFWFRVUkVfRklMVEVSX0NP
TlRST0xfRVhUJzogMHg4NTAwLAorICAnVEVYVFVSRV9MT0RfQklBU19FWFQnOiAweDg1MDEsCisg
ICdNSVJST1JfQ0xBTVBfRVhUJzogMHg4NzQyLAorICAnTUlSUk9SX0NMQU1QX1RPX0VER0VfRVhU
JzogMHg4NzQzLAorICAnTUlSUk9SX0NMQU1QX1RPX0JPUkRFUl9FWFQnOiAweDg5MTIsCisgICdU
RVhUVVJFX1BSSU9SSVRZX0VYVCc6IDB4ODA2NiwKKyAgJ1RFWFRVUkVfUkVTSURFTlRfRVhUJzog
MHg4MDY3LAorICAnVEVYVFVSRV8xRF9CSU5ESU5HX0VYVCc6IDB4ODA2OCwKKyAgJ1RFWFRVUkVf
MkRfQklORElOR19FWFQnOiAweDgwNjksCisgICdURVhUVVJFXzNEX0JJTkRJTkdfRVhUJzogMHg4
MDZBLAorICAnUEVSVFVSQl9FWFQnOiAweDg1QUUsCisgICdURVhUVVJFX05PUk1BTF9FWFQnOiAw
eDg1QUYsCisgICdURVhUVVJFX1JFQ1RBTkdMRV9FWFQnOiAweDg0RjUsCisgICdURVhUVVJFX0JJ
TkRJTkdfUkVDVEFOR0xFX0VYVCc6IDB4ODRGNiwKKyAgJ1BST1hZX1RFWFRVUkVfUkVDVEFOR0xF
X0VYVCc6IDB4ODRGNywKKyAgJ01BWF9SRUNUQU5HTEVfVEVYVFVSRV9TSVpFX0VYVCc6IDB4ODRG
OCwKKyAgJ1NSR0JfRVhUJzogMHg4QzQwLAorICAnU1JHQjhfRVhUJzogMHg4QzQxLAorICAnU1JH
Ql9BTFBIQV9FWFQnOiAweDhDNDIsCisgICdTUkdCOF9BTFBIQThfRVhUJzogMHg4QzQzLAorICAn
U0xVTUlOQU5DRV9BTFBIQV9FWFQnOiAweDhDNDQsCisgICdTTFVNSU5BTkNFOF9BTFBIQThfRVhU
JzogMHg4QzQ1LAorICAnU0xVTUlOQU5DRV9FWFQnOiAweDhDNDYsCisgICdTTFVNSU5BTkNFOF9F
WFQnOiAweDhDNDcsCisgICdDT01QUkVTU0VEX1NSR0JfRVhUJzogMHg4QzQ4LAorICAnQ09NUFJF
U1NFRF9TUkdCX0FMUEhBX0VYVCc6IDB4OEM0OSwKKyAgJ0NPTVBSRVNTRURfU0xVTUlOQU5DRV9F
WFQnOiAweDhDNEEsCisgICdDT01QUkVTU0VEX1NMVU1JTkFOQ0VfQUxQSEFfRVhUJzogMHg4QzRC
LAorICAnQ09NUFJFU1NFRF9TUkdCX1MzVENfRFhUMV9FWFQnOiAweDhDNEMsCisgICdDT01QUkVT
U0VEX1NSR0JfQUxQSEFfUzNUQ19EWFQxX0VYVCc6IDB4OEM0RCwKKyAgJ0NPTVBSRVNTRURfU1JH
Ql9BTFBIQV9TM1RDX0RYVDNfRVhUJzogMHg4QzRFLAorICAnQ09NUFJFU1NFRF9TUkdCX0FMUEhB
X1MzVENfRFhUNV9FWFQnOiAweDhDNEYsCisgICdSR0I5X0U1X0VYVCc6IDB4OEMzRCwKKyAgJ1VO
U0lHTkVEX0lOVF81XzlfOV85X1JFVl9FWFQnOiAweDhDM0UsCisgICdURVhUVVJFX1NIQVJFRF9T
SVpFX0VYVCc6IDB4OEMzRiwKKyAgJ1RFWFRVUkVfU1dJWlpMRV9SX0VYVCc6IDB4OEU0MiwKKyAg
J1RFWFRVUkVfU1dJWlpMRV9HX0VYVCc6IDB4OEU0MywKKyAgJ1RFWFRVUkVfU1dJWlpMRV9CX0VY
VCc6IDB4OEU0NCwKKyAgJ1RFWFRVUkVfU1dJWlpMRV9BX0VYVCc6IDB4OEU0NSwKKyAgJ1RFWFRV
UkVfU1dJWlpMRV9SR0JBX0VYVCc6IDB4OEU0NiwKKyAgJ1RJTUVfRUxBUFNFRF9FWFQnOiAweDg4
QkYsCisgICdUUkFOU0ZPUk1fRkVFREJBQ0tfVkFSWUlOR19NQVhfTEVOR1RIX0VYVCc6IDB4OEM3
NiwKKyAgJ1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfTU9ERV9FWFQnOiAweDhDN0YsCisgICdN
QVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0NPTVBPTkVOVFNfRVhUJzogMHg4QzgwLAor
ICAnVFJBTlNGT1JNX0ZFRURCQUNLX1ZBUllJTkdTX0VYVCc6IDB4OEM4MywKKyAgJ1RSQU5TRk9S
TV9GRUVEQkFDS19CVUZGRVJfU1RBUlRfRVhUJzogMHg4Qzg0LAorICAnVFJBTlNGT1JNX0ZFRURC
QUNLX0JVRkZFUl9TSVpFX0VYVCc6IDB4OEM4NSwKKyAgJ1BSSU1JVElWRVNfR0VORVJBVEVEX0VY
VCc6IDB4OEM4NywKKyAgJ1RSQU5TRk9STV9GRUVEQkFDS19QUklNSVRJVkVTX1dSSVRURU5fRVhU
JzogMHg4Qzg4LAorICAnUkFTVEVSSVpFUl9ESVNDQVJEX0VYVCc6IDB4OEM4OSwKKyAgJ01BWF9U
UkFOU0ZPUk1fRkVFREJBQ0tfSU5URVJMRUFWRURfQ09NUE9ORU5UU19FWFQnOiAweDhDOEEsCisg
ICdNQVhfVFJBTlNGT1JNX0ZFRURCQUNLX1NFUEFSQVRFX0FUVFJJQlNfRVhUJzogMHg4QzhCLAor
ICAnSU5URVJMRUFWRURfQVRUUklCU19FWFQnOiAweDhDOEMsCisgICdTRVBBUkFURV9BVFRSSUJT
X0VYVCc6IDB4OEM4RCwKKyAgJ1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfRVhUJzogMHg4QzhF
LAorICAnVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9CSU5ESU5HX0VYVCc6IDB4OEM4RiwKKyAg
J0RPVUJMRV9FWFQnOiAweDE0MEEsCisgICdWRVJURVhfQVJSQVlfRVhUJzogMHg4MDc0LAorICAn
Tk9STUFMX0FSUkFZX0VYVCc6IDB4ODA3NSwKKyAgJ0NPTE9SX0FSUkFZX0VYVCc6IDB4ODA3NiwK
KyAgJ0lOREVYX0FSUkFZX0VYVCc6IDB4ODA3NywKKyAgJ1RFWFRVUkVfQ09PUkRfQVJSQVlfRVhU
JzogMHg4MDc4LAorICAnRURHRV9GTEFHX0FSUkFZX0VYVCc6IDB4ODA3OSwKKyAgJ1ZFUlRFWF9B
UlJBWV9TSVpFX0VYVCc6IDB4ODA3QSwKKyAgJ1ZFUlRFWF9BUlJBWV9UWVBFX0VYVCc6IDB4ODA3
QiwKKyAgJ1ZFUlRFWF9BUlJBWV9TVFJJREVfRVhUJzogMHg4MDdDLAorICAnVkVSVEVYX0FSUkFZ
X0NPVU5UX0VYVCc6IDB4ODA3RCwKKyAgJ05PUk1BTF9BUlJBWV9UWVBFX0VYVCc6IDB4ODA3RSwK
KyAgJ05PUk1BTF9BUlJBWV9TVFJJREVfRVhUJzogMHg4MDdGLAorICAnTk9STUFMX0FSUkFZX0NP
VU5UX0VYVCc6IDB4ODA4MCwKKyAgJ0NPTE9SX0FSUkFZX1NJWkVfRVhUJzogMHg4MDgxLAorICAn
Q09MT1JfQVJSQVlfVFlQRV9FWFQnOiAweDgwODIsCisgICdDT0xPUl9BUlJBWV9TVFJJREVfRVhU
JzogMHg4MDgzLAorICAnQ09MT1JfQVJSQVlfQ09VTlRfRVhUJzogMHg4MDg0LAorICAnSU5ERVhf
QVJSQVlfVFlQRV9FWFQnOiAweDgwODUsCisgICdJTkRFWF9BUlJBWV9TVFJJREVfRVhUJzogMHg4
MDg2LAorICAnSU5ERVhfQVJSQVlfQ09VTlRfRVhUJzogMHg4MDg3LAorICAnVEVYVFVSRV9DT09S
RF9BUlJBWV9TSVpFX0VYVCc6IDB4ODA4OCwKKyAgJ1RFWFRVUkVfQ09PUkRfQVJSQVlfVFlQRV9F
WFQnOiAweDgwODksCisgICdURVhUVVJFX0NPT1JEX0FSUkFZX1NUUklERV9FWFQnOiAweDgwOEEs
CisgICdURVhUVVJFX0NPT1JEX0FSUkFZX0NPVU5UX0VYVCc6IDB4ODA4QiwKKyAgJ0VER0VfRkxB
R19BUlJBWV9TVFJJREVfRVhUJzogMHg4MDhDLAorICAnRURHRV9GTEFHX0FSUkFZX0NPVU5UX0VY
VCc6IDB4ODA4RCwKKyAgJ1ZFUlRFWF9BUlJBWV9QT0lOVEVSX0VYVCc6IDB4ODA4RSwKKyAgJ05P
Uk1BTF9BUlJBWV9QT0lOVEVSX0VYVCc6IDB4ODA4RiwKKyAgJ0NPTE9SX0FSUkFZX1BPSU5URVJf
RVhUJzogMHg4MDkwLAorICAnSU5ERVhfQVJSQVlfUE9JTlRFUl9FWFQnOiAweDgwOTEsCisgICdU
RVhUVVJFX0NPT1JEX0FSUkFZX1BPSU5URVJfRVhUJzogMHg4MDkyLAorICAnRURHRV9GTEFHX0FS
UkFZX1BPSU5URVJfRVhUJzogMHg4MDkzLAorICAnQkdSQSc6IDB4ODBFMSwKKyAgJ1ZFUlRFWF9T
SEFERVJfRVhUJzogMHg4NzgwLAorICAnVkVSVEVYX1NIQURFUl9CSU5ESU5HX0VYVCc6IDB4ODc4
MSwKKyAgJ09QX0lOREVYX0VYVCc6IDB4ODc4MiwKKyAgJ09QX05FR0FURV9FWFQnOiAweDg3ODMs
CisgICdPUF9ET1QzX0VYVCc6IDB4ODc4NCwKKyAgJ09QX0RPVDRfRVhUJzogMHg4Nzg1LAorICAn
T1BfTVVMX0VYVCc6IDB4ODc4NiwKKyAgJ09QX0FERF9FWFQnOiAweDg3ODcsCisgICdPUF9NQURE
X0VYVCc6IDB4ODc4OCwKKyAgJ09QX0ZSQUNfRVhUJzogMHg4Nzg5LAorICAnT1BfTUFYX0VYVCc6
IDB4ODc4QSwKKyAgJ09QX01JTl9FWFQnOiAweDg3OEIsCisgICdPUF9TRVRfR0VfRVhUJzogMHg4
NzhDLAorICAnT1BfU0VUX0xUX0VYVCc6IDB4ODc4RCwKKyAgJ09QX0NMQU1QX0VYVCc6IDB4ODc4
RSwKKyAgJ09QX0ZMT09SX0VYVCc6IDB4ODc4RiwKKyAgJ09QX1JPVU5EX0VYVCc6IDB4ODc5MCwK
KyAgJ09QX0VYUF9CQVNFXzJfRVhUJzogMHg4NzkxLAorICAnT1BfTE9HX0JBU0VfMl9FWFQnOiAw
eDg3OTIsCisgICdPUF9QT1dFUl9FWFQnOiAweDg3OTMsCisgICdPUF9SRUNJUF9FWFQnOiAweDg3
OTQsCisgICdPUF9SRUNJUF9TUVJUX0VYVCc6IDB4ODc5NSwKKyAgJ09QX1NVQl9FWFQnOiAweDg3
OTYsCisgICdPUF9DUk9TU19QUk9EVUNUX0VYVCc6IDB4ODc5NywKKyAgJ09QX01VTFRJUExZX01B
VFJJWF9FWFQnOiAweDg3OTgsCisgICdPUF9NT1ZfRVhUJzogMHg4Nzk5LAorICAnT1VUUFVUX1ZF
UlRFWF9FWFQnOiAweDg3OUEsCisgICdPVVRQVVRfQ09MT1IwX0VYVCc6IDB4ODc5QiwKKyAgJ09V
VFBVVF9DT0xPUjFfRVhUJzogMHg4NzlDLAorICAnT1VUUFVUX1RFWFRVUkVfQ09PUkQwX0VYVCc6
IDB4ODc5RCwKKyAgJ09VVFBVVF9URVhUVVJFX0NPT1JEMV9FWFQnOiAweDg3OUUsCisgICdPVVRQ
VVRfVEVYVFVSRV9DT09SRDJfRVhUJzogMHg4NzlGLAorICAnT1VUUFVUX1RFWFRVUkVfQ09PUkQz
X0VYVCc6IDB4ODdBMCwKKyAgJ09VVFBVVF9URVhUVVJFX0NPT1JENF9FWFQnOiAweDg3QTEsCisg
ICdPVVRQVVRfVEVYVFVSRV9DT09SRDVfRVhUJzogMHg4N0EyLAorICAnT1VUUFVUX1RFWFRVUkVf
Q09PUkQ2X0VYVCc6IDB4ODdBMywKKyAgJ09VVFBVVF9URVhUVVJFX0NPT1JEN19FWFQnOiAweDg3
QTQsCisgICdPVVRQVVRfVEVYVFVSRV9DT09SRDhfRVhUJzogMHg4N0E1LAorICAnT1VUUFVUX1RF
WFRVUkVfQ09PUkQ5X0VYVCc6IDB4ODdBNiwKKyAgJ09VVFBVVF9URVhUVVJFX0NPT1JEMTBfRVhU
JzogMHg4N0E3LAorICAnT1VUUFVUX1RFWFRVUkVfQ09PUkQxMV9FWFQnOiAweDg3QTgsCisgICdP
VVRQVVRfVEVYVFVSRV9DT09SRDEyX0VYVCc6IDB4ODdBOSwKKyAgJ09VVFBVVF9URVhUVVJFX0NP
T1JEMTNfRVhUJzogMHg4N0FBLAorICAnT1VUUFVUX1RFWFRVUkVfQ09PUkQxNF9FWFQnOiAweDg3
QUIsCisgICdPVVRQVVRfVEVYVFVSRV9DT09SRDE1X0VYVCc6IDB4ODdBQywKKyAgJ09VVFBVVF9U
RVhUVVJFX0NPT1JEMTZfRVhUJzogMHg4N0FELAorICAnT1VUUFVUX1RFWFRVUkVfQ09PUkQxN19F
WFQnOiAweDg3QUUsCisgICdPVVRQVVRfVEVYVFVSRV9DT09SRDE4X0VYVCc6IDB4ODdBRiwKKyAg
J09VVFBVVF9URVhUVVJFX0NPT1JEMTlfRVhUJzogMHg4N0IwLAorICAnT1VUUFVUX1RFWFRVUkVf
Q09PUkQyMF9FWFQnOiAweDg3QjEsCisgICdPVVRQVVRfVEVYVFVSRV9DT09SRDIxX0VYVCc6IDB4
ODdCMiwKKyAgJ09VVFBVVF9URVhUVVJFX0NPT1JEMjJfRVhUJzogMHg4N0IzLAorICAnT1VUUFVU
X1RFWFRVUkVfQ09PUkQyM19FWFQnOiAweDg3QjQsCisgICdPVVRQVVRfVEVYVFVSRV9DT09SRDI0
X0VYVCc6IDB4ODdCNSwKKyAgJ09VVFBVVF9URVhUVVJFX0NPT1JEMjVfRVhUJzogMHg4N0I2LAor
ICAnT1VUUFVUX1RFWFRVUkVfQ09PUkQyNl9FWFQnOiAweDg3QjcsCisgICdPVVRQVVRfVEVYVFVS
RV9DT09SRDI3X0VYVCc6IDB4ODdCOCwKKyAgJ09VVFBVVF9URVhUVVJFX0NPT1JEMjhfRVhUJzog
MHg4N0I5LAorICAnT1VUUFVUX1RFWFRVUkVfQ09PUkQyOV9FWFQnOiAweDg3QkEsCisgICdPVVRQ
VVRfVEVYVFVSRV9DT09SRDMwX0VYVCc6IDB4ODdCQiwKKyAgJ09VVFBVVF9URVhUVVJFX0NPT1JE
MzFfRVhUJzogMHg4N0JDLAorICAnT1VUUFVUX0ZPR19FWFQnOiAweDg3QkQsCisgICdTQ0FMQVJf
RVhUJzogMHg4N0JFLAorICAnVkVDVE9SX0VYVCc6IDB4ODdCRiwKKyAgJ01BVFJJWF9FWFQnOiAw
eDg3QzAsCisgICdWQVJJQU5UX0VYVCc6IDB4ODdDMSwKKyAgJ0lOVkFSSUFOVF9FWFQnOiAweDg3
QzIsCisgICdMT0NBTF9DT05TVEFOVF9FWFQnOiAweDg3QzMsCisgICdMT0NBTF9FWFQnOiAweDg3
QzQsCisgICdNQVhfVkVSVEVYX1NIQURFUl9JTlNUUlVDVElPTlNfRVhUJzogMHg4N0M1LAorICAn
TUFYX1ZFUlRFWF9TSEFERVJfVkFSSUFOVFNfRVhUJzogMHg4N0M2LAorICAnTUFYX1ZFUlRFWF9T
SEFERVJfSU5WQVJJQU5UU19FWFQnOiAweDg3QzcsCisgICdNQVhfVkVSVEVYX1NIQURFUl9MT0NB
TF9DT05TVEFOVFNfRVhUJzogMHg4N0M4LAorICAnTUFYX1ZFUlRFWF9TSEFERVJfTE9DQUxTX0VY
VCc6IDB4ODdDOSwKKyAgJ01BWF9PUFRJTUlaRURfVkVSVEVYX1NIQURFUl9JTlNUUlVDVElPTlNf
RVhUJzogMHg4N0NBLAorICAnTUFYX09QVElNSVpFRF9WRVJURVhfU0hBREVSX1ZBUklBTlRTX0VY
VCc6IDB4ODdDQiwKKyAgJ01BWF9PUFRJTUlaRURfVkVSVEVYX1NIQURFUl9JTlZBUklBTlRTX0VY
VCc6IDB4ODdDQywKKyAgJ01BWF9PUFRJTUlaRURfVkVSVEVYX1NIQURFUl9MT0NBTF9DT05TVEFO
VFNfRVhUJzogMHg4N0NELAorICAnTUFYX09QVElNSVpFRF9WRVJURVhfU0hBREVSX0xPQ0FMU19F
WFQnOiAweDg3Q0UsCisgICdWRVJURVhfU0hBREVSX0lOU1RSVUNUSU9OU19FWFQnOiAweDg3Q0Ys
CisgICdWRVJURVhfU0hBREVSX1ZBUklBTlRTX0VYVCc6IDB4ODdEMCwKKyAgJ1ZFUlRFWF9TSEFE
RVJfSU5WQVJJQU5UU19FWFQnOiAweDg3RDEsCisgICdWRVJURVhfU0hBREVSX0xPQ0FMX0NPTlNU
QU5UU19FWFQnOiAweDg3RDIsCisgICdWRVJURVhfU0hBREVSX0xPQ0FMU19FWFQnOiAweDg3RDMs
CisgICdWRVJURVhfU0hBREVSX09QVElNSVpFRF9FWFQnOiAweDg3RDQsCisgICdYX0VYVCc6IDB4
ODdENSwKKyAgJ1lfRVhUJzogMHg4N0Q2LAorICAnWl9FWFQnOiAweDg3RDcsCisgICdXX0VYVCc6
IDB4ODdEOCwKKyAgJ05FR0FUSVZFX1hfRVhUJzogMHg4N0Q5LAorICAnTkVHQVRJVkVfWV9FWFQn
OiAweDg3REEsCisgICdORUdBVElWRV9aX0VYVCc6IDB4ODdEQiwKKyAgJ05FR0FUSVZFX1dfRVhU
JzogMHg4N0RDLAorICAnWkVST19FWFQnOiAweDg3REQsCisgICdPTkVfRVhUJzogMHg4N0RFLAor
ICAnTkVHQVRJVkVfT05FX0VYVCc6IDB4ODdERiwKKyAgJ05PUk1BTElaRURfUkFOR0VfRVhUJzog
MHg4N0UwLAorICAnRlVMTF9SQU5HRV9FWFQnOiAweDg3RTEsCisgICdDVVJSRU5UX1ZFUlRFWF9F
WFQnOiAweDg3RTIsCisgICdNVlBfTUFUUklYX0VYVCc6IDB4ODdFMywKKyAgJ1ZBUklBTlRfVkFM
VUVfRVhUJzogMHg4N0U0LAorICAnVkFSSUFOVF9EQVRBVFlQRV9FWFQnOiAweDg3RTUsCisgICdW
QVJJQU5UX0FSUkFZX1NUUklERV9FWFQnOiAweDg3RTYsCisgICdWQVJJQU5UX0FSUkFZX1RZUEVf
RVhUJzogMHg4N0U3LAorICAnVkFSSUFOVF9BUlJBWV9FWFQnOiAweDg3RTgsCisgICdWQVJJQU5U
X0FSUkFZX1BPSU5URVJfRVhUJzogMHg4N0U5LAorICAnSU5WQVJJQU5UX1ZBTFVFX0VYVCc6IDB4
ODdFQSwKKyAgJ0lOVkFSSUFOVF9EQVRBVFlQRV9FWFQnOiAweDg3RUIsCisgICdMT0NBTF9DT05T
VEFOVF9WQUxVRV9FWFQnOiAweDg3RUMsCisgICdMT0NBTF9DT05TVEFOVF9EQVRBVFlQRV9FWFQn
OiAweDg3RUQsCisgICdNT0RFTFZJRVcwX1NUQUNLX0RFUFRIX0VYVCc6IDB4MEJBMywKKyAgJ01P
REVMVklFVzBfTUFUUklYX0VYVCc6IDB4MEJBNiwKKyAgJ01PREVMVklFVzBfRVhUJzogMHgxNzAw
LAorICAnTU9ERUxWSUVXMV9TVEFDS19ERVBUSF9FWFQnOiAweDg1MDIsCisgICdNT0RFTFZJRVcx
X01BVFJJWF9FWFQnOiAweDg1MDYsCisgICdWRVJURVhfV0VJR0hUSU5HX0VYVCc6IDB4ODUwOSwK
KyAgJ01PREVMVklFVzFfRVhUJzogMHg4NTBBLAorICAnQ1VSUkVOVF9WRVJURVhfV0VJR0hUX0VY
VCc6IDB4ODUwQiwKKyAgJ1ZFUlRFWF9XRUlHSFRfQVJSQVlfRVhUJzogMHg4NTBDLAorICAnVkVS
VEVYX1dFSUdIVF9BUlJBWV9TSVpFX0VYVCc6IDB4ODUwRCwKKyAgJ1ZFUlRFWF9XRUlHSFRfQVJS
QVlfVFlQRV9FWFQnOiAweDg1MEUsCisgICdWRVJURVhfV0VJR0hUX0FSUkFZX1NUUklERV9FWFQn
OiAweDg1MEYsCisgICdWRVJURVhfV0VJR0hUX0FSUkFZX1BPSU5URVJfRVhUJzogMHg4NTEwLAor
ICAnT0NDTFVTSU9OX1RFU1RfSFAnOiAweDgxNjUsCisgICdPQ0NMVVNJT05fVEVTVF9SRVNVTFRf
SFAnOiAweDgxNjYsCisgICdNSVJST1JFRF9SRVBFQVRfSUJNJzogMHg4MzcwLAorICAnUkVEX01J
Tl9DTEFNUF9JTkdSJzogMHg4NTYwLAorICAnR1JFRU5fTUlOX0NMQU1QX0lOR1InOiAweDg1NjEs
CisgICdCTFVFX01JTl9DTEFNUF9JTkdSJzogMHg4NTYyLAorICAnQUxQSEFfTUlOX0NMQU1QX0lO
R1InOiAweDg1NjMsCisgICdSRURfTUFYX0NMQU1QX0lOR1InOiAweDg1NjQsCisgICdHUkVFTl9N
QVhfQ0xBTVBfSU5HUic6IDB4ODU2NSwKKyAgJ0JMVUVfTUFYX0NMQU1QX0lOR1InOiAweDg1NjYs
CisgICdBTFBIQV9NQVhfQ0xBTVBfSU5HUic6IDB4ODU2NywKKyAgJ0lOVEVSTEFDRV9SRUFEX0lO
R1InOiAweDg1NjgsCisgICdQQVJBTExFTF9BUlJBWVNfSU5URUwnOiAweDgzRjQsCisgICdWRVJU
RVhfQVJSQVlfUEFSQUxMRUxfUE9JTlRFUlNfSU5URUwnOiAweDgzRjUsCisgICdOT1JNQUxfQVJS
QVlfUEFSQUxMRUxfUE9JTlRFUlNfSU5URUwnOiAweDgzRjYsCisgICdDT0xPUl9BUlJBWV9QQVJB
TExFTF9QT0lOVEVSU19JTlRFTCc6IDB4ODNGNywKKyAgJ1RFWFRVUkVfQ09PUkRfQVJSQVlfUEFS
QUxMRUxfUE9JTlRFUlNfSU5URUwnOiAweDgzRjgsCisgICdLVFhfRlJPTlRfUkVHSU9OJzogMHgw
LAorICAnS1RYX0JBQ0tfUkVHSU9OJzogMHgxLAorICAnS1RYX1pfUkVHSU9OJzogMHgyLAorICAn
S1RYX1NURU5DSUxfUkVHSU9OJzogMHgzLAorICAnVEVYVFVSRV8xRF9TVEFDS19NRVNBWCc6IDB4
ODc1OSwKKyAgJ1RFWFRVUkVfMkRfU1RBQ0tfTUVTQVgnOiAweDg3NUEsCisgICdQUk9YWV9URVhU
VVJFXzFEX1NUQUNLX01FU0FYJzogMHg4NzVCLAorICAnUFJPWFlfVEVYVFVSRV8yRF9TVEFDS19N
RVNBWCc6IDB4ODc1QywKKyAgJ1RFWFRVUkVfMURfU1RBQ0tfQklORElOR19NRVNBWCc6IDB4ODc1
RCwKKyAgJ1RFWFRVUkVfMkRfU1RBQ0tfQklORElOR19NRVNBWCc6IDB4ODc1RSwKKyAgJ1BBQ0tf
SU5WRVJUX01FU0EnOiAweDg3NTgsCisgICdVTlNJR05FRF9TSE9SVF84XzhfTUVTQSc6IDB4ODVC
QSwKKyAgJ1VOU0lHTkVEX1NIT1JUXzhfOF9SRVZfTUVTQSc6IDB4ODVCQiwKKyAgJ1lDQkNSX01F
U0EnOiAweDg3NTcsCisgICdRVUVSWV9XQUlUX05WJzogMHg4RTEzLAorICAnUVVFUllfTk9fV0FJ
VF9OVic6IDB4OEUxNCwKKyAgJ1FVRVJZX0JZX1JFR0lPTl9XQUlUX05WJzogMHg4RTE1LAorICAn
UVVFUllfQllfUkVHSU9OX05PX1dBSVRfTlYnOiAweDhFMTYsCisgICdERVBUSF9TVEVOQ0lMX1RP
X1JHQkFfTlYnOiAweDg4NkUsCisgICdERVBUSF9TVEVOQ0lMX1RPX0JHUkFfTlYnOiAweDg4NkYs
CisgICdERVBUSF9DT01QT05FTlQzMkZfTlYnOiAweDhEQUIsCisgICdERVBUSDMyRl9TVEVOQ0lM
OF9OVic6IDB4OERBQywKKyAgJ0ZMT0FUXzMyX1VOU0lHTkVEX0lOVF8yNF84X1JFVl9OVic6IDB4
OERBRCwKKyAgJ0RFUFRIX0JVRkZFUl9GTE9BVF9NT0RFX05WJzogMHg4REFGLAorICAnREVQVEhf
Q0xBTVBfTlYnOiAweDg2NEYsCisgICdTQU1QTEVfQ09VTlRfQklUU19OVic6IDB4ODg2NCwKKyAg
J0NVUlJFTlRfU0FNUExFX0NPVU5UX1FVRVJZX05WJzogMHg4ODY1LAorICAnUVVFUllfUkVTVUxU
X05WJzogMHg4ODY2LAorICAnUVVFUllfUkVTVUxUX0FWQUlMQUJMRV9OVic6IDB4ODg2NywKKyAg
J1NBTVBMRV9DT1VOVF9OVic6IDB4ODkxNCwKKyAgJ0VWQUxfMkRfTlYnOiAweDg2QzAsCisgICdF
VkFMX1RSSUFOR1VMQVJfMkRfTlYnOiAweDg2QzEsCisgICdNQVBfVEVTU0VMTEFUSU9OX05WJzog
MHg4NkMyLAorICAnTUFQX0FUVFJJQl9VX09SREVSX05WJzogMHg4NkMzLAorICAnTUFQX0FUVFJJ
Ql9WX09SREVSX05WJzogMHg4NkM0LAorICAnRVZBTF9GUkFDVElPTkFMX1RFU1NFTExBVElPTl9O
Vic6IDB4ODZDNSwKKyAgJ0VWQUxfVkVSVEVYX0FUVFJJQjBfTlYnOiAweDg2QzYsCisgICdFVkFM
X1ZFUlRFWF9BVFRSSUIxX05WJzogMHg4NkM3LAorICAnRVZBTF9WRVJURVhfQVRUUklCMl9OVic6
IDB4ODZDOCwKKyAgJ0VWQUxfVkVSVEVYX0FUVFJJQjNfTlYnOiAweDg2QzksCisgICdFVkFMX1ZF
UlRFWF9BVFRSSUI0X05WJzogMHg4NkNBLAorICAnRVZBTF9WRVJURVhfQVRUUklCNV9OVic6IDB4
ODZDQiwKKyAgJ0VWQUxfVkVSVEVYX0FUVFJJQjZfTlYnOiAweDg2Q0MsCisgICdFVkFMX1ZFUlRF
WF9BVFRSSUI3X05WJzogMHg4NkNELAorICAnRVZBTF9WRVJURVhfQVRUUklCOF9OVic6IDB4ODZD
RSwKKyAgJ0VWQUxfVkVSVEVYX0FUVFJJQjlfTlYnOiAweDg2Q0YsCisgICdFVkFMX1ZFUlRFWF9B
VFRSSUIxMF9OVic6IDB4ODZEMCwKKyAgJ0VWQUxfVkVSVEVYX0FUVFJJQjExX05WJzogMHg4NkQx
LAorICAnRVZBTF9WRVJURVhfQVRUUklCMTJfTlYnOiAweDg2RDIsCisgICdFVkFMX1ZFUlRFWF9B
VFRSSUIxM19OVic6IDB4ODZEMywKKyAgJ0VWQUxfVkVSVEVYX0FUVFJJQjE0X05WJzogMHg4NkQ0
LAorICAnRVZBTF9WRVJURVhfQVRUUklCMTVfTlYnOiAweDg2RDUsCisgICdNQVhfTUFQX1RFU1NF
TExBVElPTl9OVic6IDB4ODZENiwKKyAgJ01BWF9SQVRJT05BTF9FVkFMX09SREVSX05WJzogMHg4
NkQ3LAorICAnU0FNUExFX1BPU0lUSU9OX05WJzogMHg4RTUwLAorICAnU0FNUExFX01BU0tfTlYn
OiAweDhFNTEsCisgICdTQU1QTEVfTUFTS19WQUxVRV9OVic6IDB4OEU1MiwKKyAgJ1RFWFRVUkVf
QklORElOR19SRU5ERVJCVUZGRVJfTlYnOiAweDhFNTMsCisgICdURVhUVVJFX1JFTkRFUkJVRkZF
Ul9EQVRBX1NUT1JFX0JJTkRJTkdfTlYnOiAweDhFNTQsCisgICdURVhUVVJFX1JFTkRFUkJVRkZF
Ul9OVic6IDB4OEU1NSwKKyAgJ1NBTVBMRVJfUkVOREVSQlVGRkVSX05WJzogMHg4RTU2LAorICAn
SU5UX1NBTVBMRVJfUkVOREVSQlVGRkVSX05WJzogMHg4RTU3LAorICAnVU5TSUdORURfSU5UX1NB
TVBMRVJfUkVOREVSQlVGRkVSX05WJzogMHg4RTU4LAorICAnTUFYX1NBTVBMRV9NQVNLX1dPUkRT
X05WJzogMHg4RTU5LAorICAnQUxMX0NPTVBMRVRFRF9OVic6IDB4ODRGMiwKKyAgJ0ZFTkNFX1NU
QVRVU19OVic6IDB4ODRGMywKKyAgJ0ZFTkNFX0NPTkRJVElPTl9OVic6IDB4ODRGNCwKKyAgJ0ZM
T0FUX1JfTlYnOiAweDg4ODAsCisgICdGTE9BVF9SR19OVic6IDB4ODg4MSwKKyAgJ0ZMT0FUX1JH
Ql9OVic6IDB4ODg4MiwKKyAgJ0ZMT0FUX1JHQkFfTlYnOiAweDg4ODMsCisgICdGTE9BVF9SMTZf
TlYnOiAweDg4ODQsCisgICdGTE9BVF9SMzJfTlYnOiAweDg4ODUsCisgICdGTE9BVF9SRzE2X05W
JzogMHg4ODg2LAorICAnRkxPQVRfUkczMl9OVic6IDB4ODg4NywKKyAgJ0ZMT0FUX1JHQjE2X05W
JzogMHg4ODg4LAorICAnRkxPQVRfUkdCMzJfTlYnOiAweDg4ODksCisgICdGTE9BVF9SR0JBMTZf
TlYnOiAweDg4OEEsCisgICdGTE9BVF9SR0JBMzJfTlYnOiAweDg4OEIsCisgICdURVhUVVJFX0ZM
T0FUX0NPTVBPTkVOVFNfTlYnOiAweDg4OEMsCisgICdGTE9BVF9DTEVBUl9DT0xPUl9WQUxVRV9O
Vic6IDB4ODg4RCwKKyAgJ0ZMT0FUX1JHQkFfTU9ERV9OVic6IDB4ODg4RSwKKyAgJ0ZPR19ESVNU
QU5DRV9NT0RFX05WJzogMHg4NTVBLAorICAnRVlFX1JBRElBTF9OVic6IDB4ODU1QiwKKyAgJ0VZ
RV9QTEFORV9BQlNPTFVURV9OVic6IDB4ODU1QywKKyAgJ01BWF9GUkFHTUVOVF9QUk9HUkFNX0xP
Q0FMX1BBUkFNRVRFUlNfTlYnOiAweDg4NjgsCisgICdGUkFHTUVOVF9QUk9HUkFNX05WJzogMHg4
ODcwLAorICAnTUFYX1RFWFRVUkVfQ09PUkRTX05WJzogMHg4ODcxLAorICAnTUFYX1RFWFRVUkVf
SU1BR0VfVU5JVFNfTlYnOiAweDg4NzIsCisgICdGUkFHTUVOVF9QUk9HUkFNX0JJTkRJTkdfTlYn
OiAweDg4NzMsCisgICdQUk9HUkFNX0VSUk9SX1NUUklOR19OVic6IDB4ODg3NCwKKyAgJ01BWF9Q
Uk9HUkFNX0VYRUNfSU5TVFJVQ1RJT05TX05WJzogMHg4OEY0LAorICAnTUFYX1BST0dSQU1fQ0FM
TF9ERVBUSF9OVic6IDB4ODhGNSwKKyAgJ01BWF9QUk9HUkFNX0lGX0RFUFRIX05WJzogMHg4OEY2
LAorICAnTUFYX1BST0dSQU1fTE9PUF9ERVBUSF9OVic6IDB4ODhGNywKKyAgJ01BWF9QUk9HUkFN
X0xPT1BfQ09VTlRfTlYnOiAweDg4RjgsCisgICdSRU5ERVJCVUZGRVJfQ09WRVJBR0VfU0FNUExF
U19OVic6IDB4OENBQiwKKyAgJ1JFTkRFUkJVRkZFUl9DT0xPUl9TQU1QTEVTX05WJzogMHg4RTEw
LAorICAnTUFYX01VTFRJU0FNUExFX0NPVkVSQUdFX01PREVTX05WJzogMHg4RTExLAorICAnTVVM
VElTQU1QTEVfQ09WRVJBR0VfTU9ERVNfTlYnOiAweDhFMTIsCisgICdHRU9NRVRSWV9QUk9HUkFN
X05WJzogMHg4QzI2LAorICAnTUFYX1BST0dSQU1fT1VUUFVUX1ZFUlRJQ0VTX05WJzogMHg4QzI3
LAorICAnTUFYX1BST0dSQU1fVE9UQUxfT1VUUFVUX0NPTVBPTkVOVFNfTlYnOiAweDhDMjgsCisg
ICdNSU5fUFJPR1JBTV9URVhFTF9PRkZTRVRfTlYnOiAweDg5MDQsCisgICdNQVhfUFJPR1JBTV9U
RVhFTF9PRkZTRVRfTlYnOiAweDg5MDUsCisgICdQUk9HUkFNX0FUVFJJQl9DT01QT05FTlRTX05W
JzogMHg4OTA2LAorICAnUFJPR1JBTV9SRVNVTFRfQ09NUE9ORU5UU19OVic6IDB4ODkwNywKKyAg
J01BWF9QUk9HUkFNX0FUVFJJQl9DT01QT05FTlRTX05WJzogMHg4OTA4LAorICAnTUFYX1BST0dS
QU1fUkVTVUxUX0NPTVBPTkVOVFNfTlYnOiAweDg5MDksCisgICdNQVhfUFJPR1JBTV9HRU5FUklD
X0FUVFJJQlNfTlYnOiAweDhEQTUsCisgICdNQVhfUFJPR1JBTV9HRU5FUklDX1JFU1VMVFNfTlYn
OiAweDhEQTYsCisgICdIQUxGX0ZMT0FUX05WJzogMHgxNDBCLAorICAnTUFYX1NISU5JTkVTU19O
Vic6IDB4ODUwNCwKKyAgJ01BWF9TUE9UX0VYUE9ORU5UX05WJzogMHg4NTA1LAorICAnTVVMVElT
QU1QTEVfRklMVEVSX0hJTlRfTlYnOiAweDg1MzQsCisgICdQSVhFTF9DT1VOVEVSX0JJVFNfTlYn
OiAweDg4NjQsCisgICdDVVJSRU5UX09DQ0xVU0lPTl9RVUVSWV9JRF9OVic6IDB4ODg2NSwKKyAg
J1BJWEVMX0NPVU5UX05WJzogMHg4ODY2LAorICAnUElYRUxfQ09VTlRfQVZBSUxBQkxFX05WJzog
MHg4ODY3LAorICAnREVQVEhfU1RFTkNJTF9OVic6IDB4ODRGOSwKKyAgJ1VOU0lHTkVEX0lOVF8y
NF84X05WJzogMHg4NEZBLAorICAnTUFYX1BST0dSQU1fUEFSQU1FVEVSX0JVRkZFUl9CSU5ESU5H
U19OVic6IDB4OERBMCwKKyAgJ01BWF9QUk9HUkFNX1BBUkFNRVRFUl9CVUZGRVJfU0laRV9OVic6
IDB4OERBMSwKKyAgJ1ZFUlRFWF9QUk9HUkFNX1BBUkFNRVRFUl9CVUZGRVJfTlYnOiAweDhEQTIs
CisgICdHRU9NRVRSWV9QUk9HUkFNX1BBUkFNRVRFUl9CVUZGRVJfTlYnOiAweDhEQTMsCisgICdG
UkFHTUVOVF9QUk9HUkFNX1BBUkFNRVRFUl9CVUZGRVJfTlYnOiAweDhEQTQsCisgICdXUklURV9Q
SVhFTF9EQVRBX1JBTkdFX05WJzogMHg4ODc4LAorICAnUkVBRF9QSVhFTF9EQVRBX1JBTkdFX05W
JzogMHg4ODc5LAorICAnV1JJVEVfUElYRUxfREFUQV9SQU5HRV9MRU5HVEhfTlYnOiAweDg4N0Es
CisgICdSRUFEX1BJWEVMX0RBVEFfUkFOR0VfTEVOR1RIX05WJzogMHg4ODdCLAorICAnV1JJVEVf
UElYRUxfREFUQV9SQU5HRV9QT0lOVEVSX05WJzogMHg4ODdDLAorICAnUkVBRF9QSVhFTF9EQVRB
X1JBTkdFX1BPSU5URVJfTlYnOiAweDg4N0QsCisgICdQT0lOVF9TUFJJVEVfTlYnOiAweDg4NjEs
CisgICdDT09SRF9SRVBMQUNFX05WJzogMHg4ODYyLAorICAnUE9JTlRfU1BSSVRFX1JfTU9ERV9O
Vic6IDB4ODg2MywKKyAgJ0ZSQU1FX05WJzogMHg4RTI2LAorICAnRklFTERTX05WJzogMHg4RTI3
LAorICAnQ1VSUkVOVF9USU1FX05WJzogMHg4RTI4LAorICAnTlVNX0ZJTExfU1RSRUFNU19OVic6
IDB4OEUyOSwKKyAgJ1BSRVNFTlRfVElNRV9OVic6IDB4OEUyQSwKKyAgJ1BSRVNFTlRfRFVSQVRJ
T05fTlYnOiAweDhFMkIsCisgICdQUklNSVRJVkVfUkVTVEFSVF9OVic6IDB4ODU1OCwKKyAgJ1BS
SU1JVElWRV9SRVNUQVJUX0lOREVYX05WJzogMHg4NTU5LAorICAnUkVHSVNURVJfQ09NQklORVJT
X05WJzogMHg4NTIyLAorICAnVkFSSUFCTEVfQV9OVic6IDB4ODUyMywKKyAgJ1ZBUklBQkxFX0Jf
TlYnOiAweDg1MjQsCisgICdWQVJJQUJMRV9DX05WJzogMHg4NTI1LAorICAnVkFSSUFCTEVfRF9O
Vic6IDB4ODUyNiwKKyAgJ1ZBUklBQkxFX0VfTlYnOiAweDg1MjcsCisgICdWQVJJQUJMRV9GX05W
JzogMHg4NTI4LAorICAnVkFSSUFCTEVfR19OVic6IDB4ODUyOSwKKyAgJ0NPTlNUQU5UX0NPTE9S
MF9OVic6IDB4ODUyQSwKKyAgJ0NPTlNUQU5UX0NPTE9SMV9OVic6IDB4ODUyQiwKKyAgJ1BSSU1B
UllfQ09MT1JfTlYnOiAweDg1MkMsCisgICdTRUNPTkRBUllfQ09MT1JfTlYnOiAweDg1MkQsCisg
ICdTUEFSRTBfTlYnOiAweDg1MkUsCisgICdTUEFSRTFfTlYnOiAweDg1MkYsCisgICdESVNDQVJE
X05WJzogMHg4NTMwLAorICAnRV9USU1FU19GX05WJzogMHg4NTMxLAorICAnU1BBUkUwX1BMVVNf
U0VDT05EQVJZX0NPTE9SX05WJzogMHg4NTMyLAorICAnVU5TSUdORURfSURFTlRJVFlfTlYnOiAw
eDg1MzYsCisgICdVTlNJR05FRF9JTlZFUlRfTlYnOiAweDg1MzcsCisgICdFWFBBTkRfTk9STUFM
X05WJzogMHg4NTM4LAorICAnRVhQQU5EX05FR0FURV9OVic6IDB4ODUzOSwKKyAgJ0hBTEZfQklB
U19OT1JNQUxfTlYnOiAweDg1M0EsCisgICdIQUxGX0JJQVNfTkVHQVRFX05WJzogMHg4NTNCLAor
ICAnU0lHTkVEX0lERU5USVRZX05WJzogMHg4NTNDLAorICAnU0lHTkVEX05FR0FURV9OVic6IDB4
ODUzRCwKKyAgJ1NDQUxFX0JZX1RXT19OVic6IDB4ODUzRSwKKyAgJ1NDQUxFX0JZX0ZPVVJfTlYn
OiAweDg1M0YsCisgICdTQ0FMRV9CWV9PTkVfSEFMRl9OVic6IDB4ODU0MCwKKyAgJ0JJQVNfQllf
TkVHQVRJVkVfT05FX0hBTEZfTlYnOiAweDg1NDEsCisgICdDT01CSU5FUl9JTlBVVF9OVic6IDB4
ODU0MiwKKyAgJ0NPTUJJTkVSX01BUFBJTkdfTlYnOiAweDg1NDMsCisgICdDT01CSU5FUl9DT01Q
T05FTlRfVVNBR0VfTlYnOiAweDg1NDQsCisgICdDT01CSU5FUl9BQl9ET1RfUFJPRFVDVF9OVic6
IDB4ODU0NSwKKyAgJ0NPTUJJTkVSX0NEX0RPVF9QUk9EVUNUX05WJzogMHg4NTQ2LAorICAnQ09N
QklORVJfTVVYX1NVTV9OVic6IDB4ODU0NywKKyAgJ0NPTUJJTkVSX1NDQUxFX05WJzogMHg4NTQ4
LAorICAnQ09NQklORVJfQklBU19OVic6IDB4ODU0OSwKKyAgJ0NPTUJJTkVSX0FCX09VVFBVVF9O
Vic6IDB4ODU0QSwKKyAgJ0NPTUJJTkVSX0NEX09VVFBVVF9OVic6IDB4ODU0QiwKKyAgJ0NPTUJJ
TkVSX1NVTV9PVVRQVVRfTlYnOiAweDg1NEMsCisgICdNQVhfR0VORVJBTF9DT01CSU5FUlNfTlYn
OiAweDg1NEQsCisgICdOVU1fR0VORVJBTF9DT01CSU5FUlNfTlYnOiAweDg1NEUsCisgICdDT0xP
Ul9TVU1fQ0xBTVBfTlYnOiAweDg1NEYsCisgICdDT01CSU5FUjBfTlYnOiAweDg1NTAsCisgICdD
T01CSU5FUjFfTlYnOiAweDg1NTEsCisgICdDT01CSU5FUjJfTlYnOiAweDg1NTIsCisgICdDT01C
SU5FUjNfTlYnOiAweDg1NTMsCisgICdDT01CSU5FUjRfTlYnOiAweDg1NTQsCisgICdDT01CSU5F
UjVfTlYnOiAweDg1NTUsCisgICdDT01CSU5FUjZfTlYnOiAweDg1NTYsCisgICdDT01CSU5FUjdf
TlYnOiAweDg1NTcsCisgICdQRVJfU1RBR0VfQ09OU1RBTlRTX05WJzogMHg4NTM1LAorICAnRU1C
T1NTX0xJR0hUX05WJzogMHg4NTVELAorICAnRU1CT1NTX0NPTlNUQU5UX05WJzogMHg4NTVFLAor
ICAnRU1CT1NTX01BUF9OVic6IDB4ODU1RiwKKyAgJ05PUk1BTF9NQVBfTlYnOiAweDg1MTEsCisg
ICdSRUZMRUNUSU9OX01BUF9OVic6IDB4ODUxMiwKKyAgJ0NPTUJJTkU0X05WJzogMHg4NTAzLAor
ICAnU09VUkNFM19SR0JfTlYnOiAweDg1ODMsCisgICdTT1VSQ0UzX0FMUEhBX05WJzogMHg4NThC
LAorICAnT1BFUkFORDNfUkdCX05WJzogMHg4NTkzLAorICAnT1BFUkFORDNfQUxQSEFfTlYnOiAw
eDg1OUIsCisgICdURVhUVVJFX1VOU0lHTkVEX1JFTUFQX01PREVfTlYnOiAweDg4OEYsCisgICdU
RVhUVVJFX1JFQ1RBTkdMRV9OVic6IDB4ODRGNSwKKyAgJ1RFWFRVUkVfQklORElOR19SRUNUQU5H
TEVfTlYnOiAweDg0RjYsCisgICdQUk9YWV9URVhUVVJFX1JFQ1RBTkdMRV9OVic6IDB4ODRGNywK
KyAgJ01BWF9SRUNUQU5HTEVfVEVYVFVSRV9TSVpFX05WJzogMHg4NEY4LAorICAnT0ZGU0VUX1RF
WFRVUkVfUkVDVEFOR0xFX05WJzogMHg4NjRDLAorICAnT0ZGU0VUX1RFWFRVUkVfUkVDVEFOR0xF
X1NDQUxFX05WJzogMHg4NjRELAorICAnRE9UX1BST0RVQ1RfVEVYVFVSRV9SRUNUQU5HTEVfTlYn
OiAweDg2NEUsCisgICdSR0JBX1VOU0lHTkVEX0RPVF9QUk9EVUNUX01BUFBJTkdfTlYnOiAweDg2
RDksCisgICdVTlNJR05FRF9JTlRfUzhfUzhfOF84X05WJzogMHg4NkRBLAorICAnVU5TSUdORURf
SU5UXzhfOF9TOF9TOF9SRVZfTlYnOiAweDg2REIsCisgICdEU0RUX01BR19JTlRFTlNJVFlfTlYn
OiAweDg2REMsCisgICdTSEFERVJfQ09OU0lTVEVOVF9OVic6IDB4ODZERCwKKyAgJ1RFWFRVUkVf
U0hBREVSX05WJzogMHg4NkRFLAorICAnU0hBREVSX09QRVJBVElPTl9OVic6IDB4ODZERiwKKyAg
J0NVTExfTU9ERVNfTlYnOiAweDg2RTAsCisgICdPRkZTRVRfVEVYVFVSRV8yRF9NQVRSSVhfTlYn
OiAweDg2RTEsCisgICdPRkZTRVRfVEVYVFVSRV9NQVRSSVhfTlYnOiAweDg2RTEsCisgICdPRkZT
RVRfVEVYVFVSRV8yRF9TQ0FMRV9OVic6IDB4ODZFMiwKKyAgJ09GRlNFVF9URVhUVVJFX1NDQUxF
X05WJzogMHg4NkUyLAorICAnT0ZGU0VUX1RFWFRVUkVfQklBU19OVic6IDB4ODZFMywKKyAgJ09G
RlNFVF9URVhUVVJFXzJEX0JJQVNfTlYnOiAweDg2RTMsCisgICdQUkVWSU9VU19URVhUVVJFX0lO
UFVUX05WJzogMHg4NkU0LAorICAnQ09OU1RfRVlFX05WJzogMHg4NkU1LAorICAnUEFTU19USFJP
VUdIX05WJzogMHg4NkU2LAorICAnQ1VMTF9GUkFHTUVOVF9OVic6IDB4ODZFNywKKyAgJ09GRlNF
VF9URVhUVVJFXzJEX05WJzogMHg4NkU4LAorICAnREVQRU5ERU5UX0FSX1RFWFRVUkVfMkRfTlYn
OiAweDg2RTksCisgICdERVBFTkRFTlRfR0JfVEVYVFVSRV8yRF9OVic6IDB4ODZFQSwKKyAgJ0RP
VF9QUk9EVUNUX05WJzogMHg4NkVDLAorICAnRE9UX1BST0RVQ1RfREVQVEhfUkVQTEFDRV9OVic6
IDB4ODZFRCwKKyAgJ0RPVF9QUk9EVUNUX1RFWFRVUkVfMkRfTlYnOiAweDg2RUUsCisgICdET1Rf
UFJPRFVDVF9URVhUVVJFX0NVQkVfTUFQX05WJzogMHg4NkYwLAorICAnRE9UX1BST0RVQ1RfRElG
RlVTRV9DVUJFX01BUF9OVic6IDB4ODZGMSwKKyAgJ0RPVF9QUk9EVUNUX1JFRkxFQ1RfQ1VCRV9N
QVBfTlYnOiAweDg2RjIsCisgICdET1RfUFJPRFVDVF9DT05TVF9FWUVfUkVGTEVDVF9DVUJFX01B
UF9OVic6IDB4ODZGMywKKyAgJ0hJTE9fTlYnOiAweDg2RjQsCisgICdEU0RUX05WJzogMHg4NkY1
LAorICAnRFNEVF9NQUdfTlYnOiAweDg2RjYsCisgICdEU0RUX01BR19WSUJfTlYnOiAweDg2Rjcs
CisgICdISUxPMTZfTlYnOiAweDg2RjgsCisgICdTSUdORURfSElMT19OVic6IDB4ODZGOSwKKyAg
J1NJR05FRF9ISUxPMTZfTlYnOiAweDg2RkEsCisgICdTSUdORURfUkdCQV9OVic6IDB4ODZGQiwK
KyAgJ1NJR05FRF9SR0JBOF9OVic6IDB4ODZGQywKKyAgJ1NJR05FRF9SR0JfTlYnOiAweDg2RkUs
CisgICdTSUdORURfUkdCOF9OVic6IDB4ODZGRiwKKyAgJ1NJR05FRF9MVU1JTkFOQ0VfTlYnOiAw
eDg3MDEsCisgICdTSUdORURfTFVNSU5BTkNFOF9OVic6IDB4ODcwMiwKKyAgJ1NJR05FRF9MVU1J
TkFOQ0VfQUxQSEFfTlYnOiAweDg3MDMsCisgICdTSUdORURfTFVNSU5BTkNFOF9BTFBIQThfTlYn
OiAweDg3MDQsCisgICdTSUdORURfQUxQSEFfTlYnOiAweDg3MDUsCisgICdTSUdORURfQUxQSEE4
X05WJzogMHg4NzA2LAorICAnU0lHTkVEX0lOVEVOU0lUWV9OVic6IDB4ODcwNywKKyAgJ1NJR05F
RF9JTlRFTlNJVFk4X05WJzogMHg4NzA4LAorICAnRFNEVDhfTlYnOiAweDg3MDksCisgICdEU0RU
OF9NQUc4X05WJzogMHg4NzBBLAorICAnRFNEVDhfTUFHOF9JTlRFTlNJVFk4X05WJzogMHg4NzBC
LAorICAnU0lHTkVEX1JHQl9VTlNJR05FRF9BTFBIQV9OVic6IDB4ODcwQywKKyAgJ1NJR05FRF9S
R0I4X1VOU0lHTkVEX0FMUEhBOF9OVic6IDB4ODcwRCwKKyAgJ0hJX1NDQUxFX05WJzogMHg4NzBF
LAorICAnTE9fU0NBTEVfTlYnOiAweDg3MEYsCisgICdEU19TQ0FMRV9OVic6IDB4ODcxMCwKKyAg
J0RUX1NDQUxFX05WJzogMHg4NzExLAorICAnTUFHTklUVURFX1NDQUxFX05WJzogMHg4NzEyLAor
ICAnVklCUkFOQ0VfU0NBTEVfTlYnOiAweDg3MTMsCisgICdISV9CSUFTX05WJzogMHg4NzE0LAor
ICAnTE9fQklBU19OVic6IDB4ODcxNSwKKyAgJ0RTX0JJQVNfTlYnOiAweDg3MTYsCisgICdEVF9C
SUFTX05WJzogMHg4NzE3LAorICAnTUFHTklUVURFX0JJQVNfTlYnOiAweDg3MTgsCisgICdWSUJS
QU5DRV9CSUFTX05WJzogMHg4NzE5LAorICAnVEVYVFVSRV9CT1JERVJfVkFMVUVTX05WJzogMHg4
NzFBLAorICAnVEVYVFVSRV9ISV9TSVpFX05WJzogMHg4NzFCLAorICAnVEVYVFVSRV9MT19TSVpF
X05WJzogMHg4NzFDLAorICAnVEVYVFVSRV9EU19TSVpFX05WJzogMHg4NzFELAorICAnVEVYVFVS
RV9EVF9TSVpFX05WJzogMHg4NzFFLAorICAnVEVYVFVSRV9NQUdfU0laRV9OVic6IDB4ODcxRiwK
KyAgJ1VOU0lHTkVEX0lOVF9TOF9TOF84XzhfTlYnOiAweDg2REEsCisgICdVTlNJR05FRF9JTlRf
OF84X1M4X1M4X1JFVl9OVic6IDB4ODZEQiwKKyAgJ0RTRFRfTUFHX0lOVEVOU0lUWV9OVic6IDB4
ODZEQywKKyAgJ0RPVF9QUk9EVUNUX1RFWFRVUkVfM0RfTlYnOiAweDg2RUYsCisgICdISUxPX05W
JzogMHg4NkY0LAorICAnRFNEVF9OVic6IDB4ODZGNSwKKyAgJ0RTRFRfTUFHX05WJzogMHg4NkY2
LAorICAnRFNEVF9NQUdfVklCX05WJzogMHg4NkY3LAorICAnSElMTzE2X05WJzogMHg4NkY4LAor
ICAnU0lHTkVEX0hJTE9fTlYnOiAweDg2RjksCisgICdTSUdORURfSElMTzE2X05WJzogMHg4NkZB
LAorICAnU0lHTkVEX1JHQkFfTlYnOiAweDg2RkIsCisgICdTSUdORURfUkdCQThfTlYnOiAweDg2
RkMsCisgICdTSUdORURfUkdCX05WJzogMHg4NkZFLAorICAnU0lHTkVEX1JHQjhfTlYnOiAweDg2
RkYsCisgICdTSUdORURfTFVNSU5BTkNFX05WJzogMHg4NzAxLAorICAnU0lHTkVEX0xVTUlOQU5D
RThfTlYnOiAweDg3MDIsCisgICdTSUdORURfTFVNSU5BTkNFX0FMUEhBX05WJzogMHg4NzAzLAor
ICAnU0lHTkVEX0xVTUlOQU5DRThfQUxQSEE4X05WJzogMHg4NzA0LAorICAnU0lHTkVEX0FMUEhB
X05WJzogMHg4NzA1LAorICAnU0lHTkVEX0FMUEhBOF9OVic6IDB4ODcwNiwKKyAgJ1NJR05FRF9J
TlRFTlNJVFlfTlYnOiAweDg3MDcsCisgICdTSUdORURfSU5URU5TSVRZOF9OVic6IDB4ODcwOCwK
KyAgJ0RTRFQ4X05WJzogMHg4NzA5LAorICAnRFNEVDhfTUFHOF9OVic6IDB4ODcwQSwKKyAgJ0RT
RFQ4X01BRzhfSU5URU5TSVRZOF9OVic6IDB4ODcwQiwKKyAgJ1NJR05FRF9SR0JfVU5TSUdORURf
QUxQSEFfTlYnOiAweDg3MEMsCisgICdTSUdORURfUkdCOF9VTlNJR05FRF9BTFBIQThfTlYnOiAw
eDg3MEQsCisgICdPRkZTRVRfUFJPSkVDVElWRV9URVhUVVJFXzJEX05WJzogMHg4ODUwLAorICAn
T0ZGU0VUX1BST0pFQ1RJVkVfVEVYVFVSRV8yRF9TQ0FMRV9OVic6IDB4ODg1MSwKKyAgJ09GRlNF
VF9QUk9KRUNUSVZFX1RFWFRVUkVfUkVDVEFOR0xFX05WJzogMHg4ODUyLAorICAnT0ZGU0VUX1BS
T0pFQ1RJVkVfVEVYVFVSRV9SRUNUQU5HTEVfU0NBTEVfTlYnOiAweDg4NTMsCisgICdPRkZTRVRf
SElMT19URVhUVVJFXzJEX05WJzogMHg4ODU0LAorICAnT0ZGU0VUX0hJTE9fVEVYVFVSRV9SRUNU
QU5HTEVfTlYnOiAweDg4NTUsCisgICdPRkZTRVRfSElMT19QUk9KRUNUSVZFX1RFWFRVUkVfMkRf
TlYnOiAweDg4NTYsCisgICdPRkZTRVRfSElMT19QUk9KRUNUSVZFX1RFWFRVUkVfUkVDVEFOR0xF
X05WJzogMHg4ODU3LAorICAnREVQRU5ERU5UX0hJTE9fVEVYVFVSRV8yRF9OVic6IDB4ODg1OCwK
KyAgJ0RFUEVOREVOVF9SR0JfVEVYVFVSRV8zRF9OVic6IDB4ODg1OSwKKyAgJ0RFUEVOREVOVF9S
R0JfVEVYVFVSRV9DVUJFX01BUF9OVic6IDB4ODg1QSwKKyAgJ0RPVF9QUk9EVUNUX1BBU1NfVEhS
T1VHSF9OVic6IDB4ODg1QiwKKyAgJ0RPVF9QUk9EVUNUX1RFWFRVUkVfMURfTlYnOiAweDg4NUMs
CisgICdET1RfUFJPRFVDVF9BRkZJTkVfREVQVEhfUkVQTEFDRV9OVic6IDB4ODg1RCwKKyAgJ0hJ
TE84X05WJzogMHg4ODVFLAorICAnU0lHTkVEX0hJTE84X05WJzogMHg4ODVGLAorICAnRk9SQ0Vf
QkxVRV9UT19PTkVfTlYnOiAweDg4NjAsCisgICdCQUNLX1BSSU1BUllfQ09MT1JfTlYnOiAweDhD
NzcsCisgICdCQUNLX1NFQ09OREFSWV9DT0xPUl9OVic6IDB4OEM3OCwKKyAgJ1RFWFRVUkVfQ09P
UkRfTlYnOiAweDhDNzksCisgICdDTElQX0RJU1RBTkNFX05WJzogMHg4QzdBLAorICAnVkVSVEVY
X0lEX05WJzogMHg4QzdCLAorICAnUFJJTUlUSVZFX0lEX05WJzogMHg4QzdDLAorICAnR0VORVJJ
Q19BVFRSSUJfTlYnOiAweDhDN0QsCisgICdUUkFOU0ZPUk1fRkVFREJBQ0tfQVRUUklCU19OVic6
IDB4OEM3RSwKKyAgJ1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfTU9ERV9OVic6IDB4OEM3RiwK
KyAgJ01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfU0VQQVJBVEVfQ09NUE9ORU5UU19OVic6IDB4OEM4
MCwKKyAgJ0FDVElWRV9WQVJZSU5HU19OVic6IDB4OEM4MSwKKyAgJ0FDVElWRV9WQVJZSU5HX01B
WF9MRU5HVEhfTlYnOiAweDhDODIsCisgICdUUkFOU0ZPUk1fRkVFREJBQ0tfVkFSWUlOR1NfTlYn
OiAweDhDODMsCisgICdUUkFOU0ZPUk1fRkVFREJBQ0tfQlVGRkVSX1NUQVJUX05WJzogMHg4Qzg0
LAorICAnVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9TSVpFX05WJzogMHg4Qzg1LAorICAnVFJB
TlNGT1JNX0ZFRURCQUNLX1JFQ09SRF9OVic6IDB4OEM4NiwKKyAgJ1BSSU1JVElWRVNfR0VORVJB
VEVEX05WJzogMHg4Qzg3LAorICAnVFJBTlNGT1JNX0ZFRURCQUNLX1BSSU1JVElWRVNfV1JJVFRF
Tl9OVic6IDB4OEM4OCwKKyAgJ1JBU1RFUklaRVJfRElTQ0FSRF9OVic6IDB4OEM4OSwKKyAgJ01B
WF9UUkFOU0ZPUk1fRkVFREJBQ0tfSU5URVJMRUFWRURfQ09NUE9ORU5UU19OVic6IDB4OEM4QSwK
KyAgJ01BWF9UUkFOU0ZPUk1fRkVFREJBQ0tfU0VQQVJBVEVfQVRUUklCU19OVic6IDB4OEM4QiwK
KyAgJ0lOVEVSTEVBVkVEX0FUVFJJQlNfTlYnOiAweDhDOEMsCisgICdTRVBBUkFURV9BVFRSSUJT
X05WJzogMHg4QzhELAorICAnVFJBTlNGT1JNX0ZFRURCQUNLX0JVRkZFUl9OVic6IDB4OEM4RSwK
KyAgJ1RSQU5TRk9STV9GRUVEQkFDS19CVUZGRVJfQklORElOR19OVic6IDB4OEM4RiwKKyAgJ1ZF
UlRFWF9BUlJBWV9SQU5HRV9OVic6IDB4ODUxRCwKKyAgJ1ZFUlRFWF9BUlJBWV9SQU5HRV9MRU5H
VEhfTlYnOiAweDg1MUUsCisgICdWRVJURVhfQVJSQVlfUkFOR0VfVkFMSURfTlYnOiAweDg1MUYs
CisgICdNQVhfVkVSVEVYX0FSUkFZX1JBTkdFX0VMRU1FTlRfTlYnOiAweDg1MjAsCisgICdWRVJU
RVhfQVJSQVlfUkFOR0VfUE9JTlRFUl9OVic6IDB4ODUyMSwKKyAgJ1ZFUlRFWF9BUlJBWV9SQU5H
RV9XSVRIT1VUX0ZMVVNIX05WJzogMHg4NTMzLAorICAnVkVSVEVYX1BST0dSQU1fTlYnOiAweDg2
MjAsCisgICdWRVJURVhfU1RBVEVfUFJPR1JBTV9OVic6IDB4ODYyMSwKKyAgJ0FUVFJJQl9BUlJB
WV9TSVpFX05WJzogMHg4NjIzLAorICAnQVRUUklCX0FSUkFZX1NUUklERV9OVic6IDB4ODYyNCwK
KyAgJ0FUVFJJQl9BUlJBWV9UWVBFX05WJzogMHg4NjI1LAorICAnQ1VSUkVOVF9BVFRSSUJfTlYn
OiAweDg2MjYsCisgICdQUk9HUkFNX0xFTkdUSF9OVic6IDB4ODYyNywKKyAgJ1BST0dSQU1fU1RS
SU5HX05WJzogMHg4NjI4LAorICAnTU9ERUxWSUVXX1BST0pFQ1RJT05fTlYnOiAweDg2MjksCisg
ICdJREVOVElUWV9OVic6IDB4ODYyQSwKKyAgJ0lOVkVSU0VfTlYnOiAweDg2MkIsCisgICdUUkFO
U1BPU0VfTlYnOiAweDg2MkMsCisgICdJTlZFUlNFX1RSQU5TUE9TRV9OVic6IDB4ODYyRCwKKyAg
J01BWF9UUkFDS19NQVRSSVhfU1RBQ0tfREVQVEhfTlYnOiAweDg2MkUsCisgICdNQVhfVFJBQ0tf
TUFUUklDRVNfTlYnOiAweDg2MkYsCisgICdNQVRSSVgwX05WJzogMHg4NjMwLAorICAnTUFUUklY
MV9OVic6IDB4ODYzMSwKKyAgJ01BVFJJWDJfTlYnOiAweDg2MzIsCisgICdNQVRSSVgzX05WJzog
MHg4NjMzLAorICAnTUFUUklYNF9OVic6IDB4ODYzNCwKKyAgJ01BVFJJWDVfTlYnOiAweDg2MzUs
CisgICdNQVRSSVg2X05WJzogMHg4NjM2LAorICAnTUFUUklYN19OVic6IDB4ODYzNywKKyAgJ0NV
UlJFTlRfTUFUUklYX1NUQUNLX0RFUFRIX05WJzogMHg4NjQwLAorICAnQ1VSUkVOVF9NQVRSSVhf
TlYnOiAweDg2NDEsCisgICdWRVJURVhfUFJPR1JBTV9QT0lOVF9TSVpFX05WJzogMHg4NjQyLAor
ICAnVkVSVEVYX1BST0dSQU1fVFdPX1NJREVfTlYnOiAweDg2NDMsCisgICdQUk9HUkFNX1BBUkFN
RVRFUl9OVic6IDB4ODY0NCwKKyAgJ0FUVFJJQl9BUlJBWV9QT0lOVEVSX05WJzogMHg4NjQ1LAor
ICAnUFJPR1JBTV9UQVJHRVRfTlYnOiAweDg2NDYsCisgICdQUk9HUkFNX1JFU0lERU5UX05WJzog
MHg4NjQ3LAorICAnVFJBQ0tfTUFUUklYX05WJzogMHg4NjQ4LAorICAnVFJBQ0tfTUFUUklYX1RS
QU5TRk9STV9OVic6IDB4ODY0OSwKKyAgJ1ZFUlRFWF9QUk9HUkFNX0JJTkRJTkdfTlYnOiAweDg2
NEEsCisgICdQUk9HUkFNX0VSUk9SX1BPU0lUSU9OX05WJzogMHg4NjRCLAorICAnVkVSVEVYX0FU
VFJJQl9BUlJBWTBfTlYnOiAweDg2NTAsCisgICdWRVJURVhfQVRUUklCX0FSUkFZMV9OVic6IDB4
ODY1MSwKKyAgJ1ZFUlRFWF9BVFRSSUJfQVJSQVkyX05WJzogMHg4NjUyLAorICAnVkVSVEVYX0FU
VFJJQl9BUlJBWTNfTlYnOiAweDg2NTMsCisgICdWRVJURVhfQVRUUklCX0FSUkFZNF9OVic6IDB4
ODY1NCwKKyAgJ1ZFUlRFWF9BVFRSSUJfQVJSQVk1X05WJzogMHg4NjU1LAorICAnVkVSVEVYX0FU
VFJJQl9BUlJBWTZfTlYnOiAweDg2NTYsCisgICdWRVJURVhfQVRUUklCX0FSUkFZN19OVic6IDB4
ODY1NywKKyAgJ1ZFUlRFWF9BVFRSSUJfQVJSQVk4X05WJzogMHg4NjU4LAorICAnVkVSVEVYX0FU
VFJJQl9BUlJBWTlfTlYnOiAweDg2NTksCisgICdWRVJURVhfQVRUUklCX0FSUkFZMTBfTlYnOiAw
eDg2NUEsCisgICdWRVJURVhfQVRUUklCX0FSUkFZMTFfTlYnOiAweDg2NUIsCisgICdWRVJURVhf
QVRUUklCX0FSUkFZMTJfTlYnOiAweDg2NUMsCisgICdWRVJURVhfQVRUUklCX0FSUkFZMTNfTlYn
OiAweDg2NUQsCisgICdWRVJURVhfQVRUUklCX0FSUkFZMTRfTlYnOiAweDg2NUUsCisgICdWRVJU
RVhfQVRUUklCX0FSUkFZMTVfTlYnOiAweDg2NUYsCisgICdNQVAxX1ZFUlRFWF9BVFRSSUIwXzRf
TlYnOiAweDg2NjAsCisgICdNQVAxX1ZFUlRFWF9BVFRSSUIxXzRfTlYnOiAweDg2NjEsCisgICdN
QVAxX1ZFUlRFWF9BVFRSSUIyXzRfTlYnOiAweDg2NjIsCisgICdNQVAxX1ZFUlRFWF9BVFRSSUIz
XzRfTlYnOiAweDg2NjMsCisgICdNQVAxX1ZFUlRFWF9BVFRSSUI0XzRfTlYnOiAweDg2NjQsCisg
ICdNQVAxX1ZFUlRFWF9BVFRSSUI1XzRfTlYnOiAweDg2NjUsCisgICdNQVAxX1ZFUlRFWF9BVFRS
SUI2XzRfTlYnOiAweDg2NjYsCisgICdNQVAxX1ZFUlRFWF9BVFRSSUI3XzRfTlYnOiAweDg2Njcs
CisgICdNQVAxX1ZFUlRFWF9BVFRSSUI4XzRfTlYnOiAweDg2NjgsCisgICdNQVAxX1ZFUlRFWF9B
VFRSSUI5XzRfTlYnOiAweDg2NjksCisgICdNQVAxX1ZFUlRFWF9BVFRSSUIxMF80X05WJzogMHg4
NjZBLAorICAnTUFQMV9WRVJURVhfQVRUUklCMTFfNF9OVic6IDB4ODY2QiwKKyAgJ01BUDFfVkVS
VEVYX0FUVFJJQjEyXzRfTlYnOiAweDg2NkMsCisgICdNQVAxX1ZFUlRFWF9BVFRSSUIxM180X05W
JzogMHg4NjZELAorICAnTUFQMV9WRVJURVhfQVRUUklCMTRfNF9OVic6IDB4ODY2RSwKKyAgJ01B
UDFfVkVSVEVYX0FUVFJJQjE1XzRfTlYnOiAweDg2NkYsCisgICdNQVAyX1ZFUlRFWF9BVFRSSUIw
XzRfTlYnOiAweDg2NzAsCisgICdNQVAyX1ZFUlRFWF9BVFRSSUIxXzRfTlYnOiAweDg2NzEsCisg
ICdNQVAyX1ZFUlRFWF9BVFRSSUIyXzRfTlYnOiAweDg2NzIsCisgICdNQVAyX1ZFUlRFWF9BVFRS
SUIzXzRfTlYnOiAweDg2NzMsCisgICdNQVAyX1ZFUlRFWF9BVFRSSUI0XzRfTlYnOiAweDg2NzQs
CisgICdNQVAyX1ZFUlRFWF9BVFRSSUI1XzRfTlYnOiAweDg2NzUsCisgICdNQVAyX1ZFUlRFWF9B
VFRSSUI2XzRfTlYnOiAweDg2NzYsCisgICdNQVAyX1ZFUlRFWF9BVFRSSUI3XzRfTlYnOiAweDg2
NzcsCisgICdNQVAyX1ZFUlRFWF9BVFRSSUI4XzRfTlYnOiAweDg2NzgsCisgICdNQVAyX1ZFUlRF
WF9BVFRSSUI5XzRfTlYnOiAweDg2NzksCisgICdNQVAyX1ZFUlRFWF9BVFRSSUIxMF80X05WJzog
MHg4NjdBLAorICAnTUFQMl9WRVJURVhfQVRUUklCMTFfNF9OVic6IDB4ODY3QiwKKyAgJ01BUDJf
VkVSVEVYX0FUVFJJQjEyXzRfTlYnOiAweDg2N0MsCisgICdNQVAyX1ZFUlRFWF9BVFRSSUIxM180
X05WJzogMHg4NjdELAorICAnTUFQMl9WRVJURVhfQVRUUklCMTRfNF9OVic6IDB4ODY3RSwKKyAg
J01BUDJfVkVSVEVYX0FUVFJJQjE1XzRfTlYnOiAweDg2N0YsCisgICdNQVhfUFJPR1JBTV9FWEVD
X0lOU1RSVUNUSU9OU19OVic6IDB4ODhGNCwKKyAgJ01BWF9QUk9HUkFNX0NBTExfREVQVEhfTlYn
OiAweDg4RjUsCisgICdNQVhfVkVSVEVYX1RFWFRVUkVfSU1BR0VfVU5JVFNfQVJCJzogMHg4QjRD
LAorICAnQllURSc6IDB4MTQwMCwKKyAgJ1BBTEVUVEU0X1JHQjhfT0VTJzogMHg4QjkwLAorICAn
UEFMRVRURTRfUkdCQThfT0VTJzogMHg4QjkxLAorICAnUEFMRVRURTRfUjVfRzZfQjVfT0VTJzog
MHg4QjkyLAorICAnUEFMRVRURTRfUkdCQTRfT0VTJzogMHg4QjkzLAorICAnUEFMRVRURTRfUkdC
NV9BMV9PRVMnOiAweDhCOTQsCisgICdQQUxFVFRFOF9SR0I4X09FUyc6IDB4OEI5NSwKKyAgJ1BB
TEVUVEU4X1JHQkE4X09FUyc6IDB4OEI5NiwKKyAgJ1BBTEVUVEU4X1I1X0c2X0I1X09FUyc6IDB4
OEI5NywKKyAgJ1BBTEVUVEU4X1JHQkE0X09FUyc6IDB4OEI5OCwKKyAgJ1BBTEVUVEU4X1JHQjVf
QTFfT0VTJzogMHg4Qjk5LAorICAnSU1QTEVNRU5UQVRJT05fQ09MT1JfUkVBRF9UWVBFX09FUyc6
IDB4OEI5QSwKKyAgJ0lNUExFTUVOVEFUSU9OX0NPTE9SX1JFQURfRk9STUFUX09FUyc6IDB4OEI5
QiwKKyAgJ0lOVEVSTEFDRV9PTUwnOiAweDg5ODAsCisgICdJTlRFUkxBQ0VfUkVBRF9PTUwnOiAw
eDg5ODEsCisgICdQQUNLX1JFU0FNUExFX09NTCc6IDB4ODk4NCwKKyAgJ1VOUEFDS19SRVNBTVBM
RV9PTUwnOiAweDg5ODUsCisgICdSRVNBTVBMRV9SRVBMSUNBVEVfT01MJzogMHg4OTg2LAorICAn
UkVTQU1QTEVfWkVST19GSUxMX09NTCc6IDB4ODk4NywKKyAgJ1JFU0FNUExFX0FWRVJBR0VfT01M
JzogMHg4OTg4LAorICAnUkVTQU1QTEVfREVDSU1BVEVfT01MJzogMHg4OTg5LAorICAnRk9STUFU
X1NVQlNBTVBMRV8yNF8yNF9PTUwnOiAweDg5ODIsCisgICdGT1JNQVRfU1VCU0FNUExFXzI0NF8y
NDRfT01MJzogMHg4OTgzLAorICAnVkVSVEVYMjNfQklUX1BHSSc6IDB4MDAwMDAwMDQsCisgICdW
RVJURVg0X0JJVF9QR0knOiAweDAwMDAwMDA4LAorICAnQ09MT1IzX0JJVF9QR0knOiAweDAwMDEw
MDAwLAorICAnQ09MT1I0X0JJVF9QR0knOiAweDAwMDIwMDAwLAorICAnRURHRUZMQUdfQklUX1BH
SSc6IDB4MDAwNDAwMDAsCisgICdJTkRFWF9CSVRfUEdJJzogMHgwMDA4MDAwMCwKKyAgJ01BVF9B
TUJJRU5UX0JJVF9QR0knOiAweDAwMTAwMDAwLAorICAnTUFUX0FNQklFTlRfQU5EX0RJRkZVU0Vf
QklUX1BHSSc6IDB4MDAyMDAwMDAsCisgICdNQVRfRElGRlVTRV9CSVRfUEdJJzogMHgwMDQwMDAw
MCwKKyAgJ01BVF9FTUlTU0lPTl9CSVRfUEdJJzogMHgwMDgwMDAwMCwKKyAgJ01BVF9DT0xPUl9J
TkRFWEVTX0JJVF9QR0knOiAweDAxMDAwMDAwLAorICAnTUFUX1NISU5JTkVTU19CSVRfUEdJJzog
MHgwMjAwMDAwMCwKKyAgJ01BVF9TUEVDVUxBUl9CSVRfUEdJJzogMHgwNDAwMDAwMCwKKyAgJ05P
Uk1BTF9CSVRfUEdJJzogMHgwODAwMDAwMCwKKyAgJ1RFWENPT1JEMV9CSVRfUEdJJzogMHgxMDAw
MDAwMCwKKyAgJ1RFWENPT1JEMl9CSVRfUEdJJzogMHgyMDAwMDAwMCwKKyAgJ1RFWENPT1JEM19C
SVRfUEdJJzogMHg0MDAwMDAwMCwKKyAgJ1RFWENPT1JENF9CSVRfUEdJJzogMHg4MDAwMDAwMCwK
KyAgJ1NDUkVFTl9DT09SRElOQVRFU19SRU5EJzogMHg4NDkwLAorICAnSU5WRVJURURfU0NSRUVO
X1dfUkVORCc6IDB4ODQ5MSwKKyAgJ1JHQl9TM1RDJzogMHg4M0EwLAorICAnUkdCNF9TM1RDJzog
MHg4M0ExLAorICAnUkdCQV9TM1RDJzogMHg4M0EyLAorICAnUkdCQTRfUzNUQyc6IDB4ODNBMywK
KyAgJ1JHQkFfRFhUNV9TM1RDJzogMHg4M0E0LAorICAnUkdCQTRfRFhUNV9TM1RDJzogMHg4M0E1
LAorICAnRVhURU5ERURfUkFOR0VfU0dJUyc6IDB4ODVBNSwKKyAgJ01JTl9SRURfU0dJUyc6IDB4
ODVBNiwKKyAgJ01BWF9SRURfU0dJUyc6IDB4ODVBNywKKyAgJ01JTl9HUkVFTl9TR0lTJzogMHg4
NUE4LAorICAnTUFYX0dSRUVOX1NHSVMnOiAweDg1QTksCisgICdNSU5fQkxVRV9TR0lTJzogMHg4
NUFBLAorICAnTUFYX0JMVUVfU0dJUyc6IDB4ODVBQiwKKyAgJ01JTl9BTFBIQV9TR0lTJzogMHg4
NUFDLAorICAnTUFYX0FMUEhBX1NHSVMnOiAweDg1QUQsCisgICdHRU5FUkFURV9NSVBNQVBfU0dJ
Uyc6IDB4ODE5MSwKKyAgJ0dFTkVSQVRFX01JUE1BUF9ISU5UX1NHSVMnOiAweDgxOTIsCisgICdN
VUxUSVNBTVBMRV9TR0lTJzogMHg4MDlELAorICAnU0FNUExFX0FMUEhBX1RPX01BU0tfU0dJUyc6
IDB4ODA5RSwKKyAgJ1NBTVBMRV9BTFBIQV9UT19PTkVfU0dJUyc6IDB4ODA5RiwKKyAgJ1NBTVBM
RV9NQVNLX1NHSVMnOiAweDgwQTAsCisgICcxUEFTU19TR0lTJzogMHg4MEExLAorICAnMlBBU1Nf
MF9TR0lTJzogMHg4MEEyLAorICAnMlBBU1NfMV9TR0lTJzogMHg4MEEzLAorICAnNFBBU1NfMF9T
R0lTJzogMHg4MEE0LAorICAnNFBBU1NfMV9TR0lTJzogMHg4MEE1LAorICAnNFBBU1NfMl9TR0lT
JzogMHg4MEE2LAorICAnNFBBU1NfM19TR0lTJzogMHg4MEE3LAorICAnU0FNUExFX0JVRkZFUlNf
U0dJUyc6IDB4ODBBOCwKKyAgJ1NBTVBMRVNfU0dJUyc6IDB4ODBBOSwKKyAgJ1NBTVBMRV9NQVNL
X1ZBTFVFX1NHSVMnOiAweDgwQUEsCisgICdTQU1QTEVfTUFTS19JTlZFUlRfU0dJUyc6IDB4ODBB
QiwKKyAgJ1NBTVBMRV9QQVRURVJOX1NHSVMnOiAweDgwQUMsCisgICdNVUxUSVNBTVBMRV9CSVRf
RVhUJzogMHgyMDAwMDAwMCwKKyAgJ0VZRV9ESVNUQU5DRV9UT19QT0lOVF9TR0lTJzogMHg4MUYw
LAorICAnT0JKRUNUX0RJU1RBTkNFX1RPX1BPSU5UX1NHSVMnOiAweDgxRjEsCisgICdFWUVfRElT
VEFOQ0VfVE9fTElORV9TR0lTJzogMHg4MUYyLAorICAnT0JKRUNUX0RJU1RBTkNFX1RPX0xJTkVf
U0dJUyc6IDB4ODFGMywKKyAgJ0VZRV9QT0lOVF9TR0lTJzogMHg4MUY0LAorICAnT0JKRUNUX1BP
SU5UX1NHSVMnOiAweDgxRjUsCisgICdFWUVfTElORV9TR0lTJzogMHg4MUY2LAorICAnT0JKRUNU
X0xJTkVfU0dJUyc6IDB4ODFGNywKKyAgJ0NMQU1QX1RPX0JPUkRFUl9TR0lTJzogMHg4MTJELAor
ICAnQ0xBTVBfVE9fRURHRV9TR0lTJzogMHg4MTJGLAorICAnVEVYVFVSRV9NSU5fTE9EX1NHSVMn
OiAweDgxM0EsCisgICdURVhUVVJFX01BWF9MT0RfU0dJUyc6IDB4ODEzQiwKKyAgJ1RFWFRVUkVf
QkFTRV9MRVZFTF9TR0lTJzogMHg4MTNDLAorICAnVEVYVFVSRV9NQVhfTEVWRUxfU0dJUyc6IDB4
ODEzRCwKKyAgJ0FTWU5DX01BUktFUl9TR0lYJzogMHg4MzI5LAorICAnQVNZTkNfSElTVE9HUkFN
X1NHSVgnOiAweDgzMkMsCisgICdNQVhfQVNZTkNfSElTVE9HUkFNX1NHSVgnOiAweDgzMkQsCisg
ICdBU1lOQ19URVhfSU1BR0VfU0dJWCc6IDB4ODM1QywKKyAgJ0FTWU5DX0RSQVdfUElYRUxTX1NH
SVgnOiAweDgzNUQsCisgICdBU1lOQ19SRUFEX1BJWEVMU19TR0lYJzogMHg4MzVFLAorICAnTUFY
X0FTWU5DX1RFWF9JTUFHRV9TR0lYJzogMHg4MzVGLAorICAnTUFYX0FTWU5DX0RSQVdfUElYRUxT
X1NHSVgnOiAweDgzNjAsCisgICdNQVhfQVNZTkNfUkVBRF9QSVhFTFNfU0dJWCc6IDB4ODM2MSwK
KyAgJ0FMUEhBX01JTl9TR0lYJzogMHg4MzIwLAorICAnQUxQSEFfTUFYX1NHSVgnOiAweDgzMjEs
CisgICdDT05WT0xVVElPTl9ISU5UX1NHSVgnOiAweDgzMTYsCisgICdERVBUSF9DT01QT05FTlQx
Nl9TR0lYJzogMHg4MUE1LAorICAnREVQVEhfQ09NUE9ORU5UMjRfU0dJWCc6IDB4ODFBNiwKKyAg
J0RFUFRIX0NPTVBPTkVOVDMyX1NHSVgnOiAweDgxQTcsCisgICdGT0dfT0ZGU0VUX1NHSVgnOiAw
eDgxOTgsCisgICdGT0dfT0ZGU0VUX1ZBTFVFX1NHSVgnOiAweDgxOTksCisgICdJTlRFUkxBQ0Vf
U0dJWCc6IDB4ODA5NCwKKyAgJ1BBQ0tfUkVTQU1QTEVfU0dJWCc6IDB4ODQyRSwKKyAgJ1VOUEFD
S19SRVNBTVBMRV9TR0lYJzogMHg4NDJGLAorICAnUkVTQU1QTEVfREVDSU1BVEVfU0dJWCc6IDB4
ODQzMCwKKyAgJ1JFU0FNUExFX1JFUExJQ0FURV9TR0lYJzogMHg4NDMzLAorICAnUkVTQU1QTEVf
WkVST19GSUxMX1NHSVgnOiAweDg0MzQsCisgICdURVhUVVJFX0NPTVBBUkVfU0dJWCc6IDB4ODE5
QSwKKyAgJ1RFWFRVUkVfQ09NUEFSRV9PUEVSQVRPUl9TR0lYJzogMHg4MTlCLAorICAnVEVYVFVS
RV9MRVFVQUxfUl9TR0lYJzogMHg4MTlDLAorICAnVEVYVFVSRV9HRVFVQUxfUl9TR0lYJzogMHg4
MTlELAorICAnU0hBRE9XX0FNQklFTlRfU0dJWCc6IDB4ODBCRiwKKyAgJ1RFWFRVUkVfTUFYX0NM
QU1QX1NfU0dJWCc6IDB4ODM2OSwKKyAgJ1RFWFRVUkVfTUFYX0NMQU1QX1RfU0dJWCc6IDB4ODM2
QSwKKyAgJ1RFWFRVUkVfTUFYX0NMQU1QX1JfU0dJWCc6IDB4ODM2QiwKKyAgJ1RFWFRVUkVfTVVM
VElfQlVGRkVSX0hJTlRfU0dJWCc6IDB4ODEyRSwKKyAgJ1JHQl9TSUdORURfU0dJWCc6IDB4ODVF
MCwKKyAgJ1JHQkFfU0lHTkVEX1NHSVgnOiAweDg1RTEsCisgICdBTFBIQV9TSUdORURfU0dJWCc6
IDB4ODVFMiwKKyAgJ0xVTUlOQU5DRV9TSUdORURfU0dJWCc6IDB4ODVFMywKKyAgJ0lOVEVOU0lU
WV9TSUdORURfU0dJWCc6IDB4ODVFNCwKKyAgJ0xVTUlOQU5DRV9BTFBIQV9TSUdORURfU0dJWCc6
IDB4ODVFNSwKKyAgJ1JHQjE2X1NJR05FRF9TR0lYJzogMHg4NUU2LAorICAnUkdCQTE2X1NJR05F
RF9TR0lYJzogMHg4NUU3LAorICAnQUxQSEExNl9TSUdORURfU0dJWCc6IDB4ODVFOCwKKyAgJ0xV
TUlOQU5DRTE2X1NJR05FRF9TR0lYJzogMHg4NUU5LAorICAnSU5URU5TSVRZMTZfU0lHTkVEX1NH
SVgnOiAweDg1RUEsCisgICdMVU1JTkFOQ0UxNl9BTFBIQTE2X1NJR05FRF9TR0lYJzogMHg4NUVC
LAorICAnUkdCX0VYVEVOREVEX1JBTkdFX1NHSVgnOiAweDg1RUMsCisgICdSR0JBX0VYVEVOREVE
X1JBTkdFX1NHSVgnOiAweDg1RUQsCisgICdBTFBIQV9FWFRFTkRFRF9SQU5HRV9TR0lYJzogMHg4
NUVFLAorICAnTFVNSU5BTkNFX0VYVEVOREVEX1JBTkdFX1NHSVgnOiAweDg1RUYsCisgICdJTlRF
TlNJVFlfRVhURU5ERURfUkFOR0VfU0dJWCc6IDB4ODVGMCwKKyAgJ0xVTUlOQU5DRV9BTFBIQV9F
WFRFTkRFRF9SQU5HRV9TR0lYJzogMHg4NUYxLAorICAnUkdCMTZfRVhURU5ERURfUkFOR0VfU0dJ
WCc6IDB4ODVGMiwKKyAgJ1JHQkExNl9FWFRFTkRFRF9SQU5HRV9TR0lYJzogMHg4NUYzLAorICAn
QUxQSEExNl9FWFRFTkRFRF9SQU5HRV9TR0lYJzogMHg4NUY0LAorICAnTFVNSU5BTkNFMTZfRVhU
RU5ERURfUkFOR0VfU0dJWCc6IDB4ODVGNSwKKyAgJ0lOVEVOU0lUWTE2X0VYVEVOREVEX1JBTkdF
X1NHSVgnOiAweDg1RjYsCisgICdMVU1JTkFOQ0UxNl9BTFBIQTE2X0VYVEVOREVEX1JBTkdFX1NH
SVgnOiAweDg1RjcsCisgICdNSU5fTFVNSU5BTkNFX1NHSVMnOiAweDg1RjgsCisgICdNQVhfTFVN
SU5BTkNFX1NHSVMnOiAweDg1RjksCisgICdNSU5fSU5URU5TSVRZX1NHSVMnOiAweDg1RkEsCisg
ICdNQVhfSU5URU5TSVRZX1NHSVMnOiAweDg1RkIsCisgICdQT1NUX1RFWFRVUkVfRklMVEVSX0JJ
QVNfU0dJWCc6IDB4ODE3OSwKKyAgJ1BPU1RfVEVYVFVSRV9GSUxURVJfU0NBTEVfU0dJWCc6IDB4
ODE3QSwKKyAgJ1BPU1RfVEVYVFVSRV9GSUxURVJfQklBU19SQU5HRV9TR0lYJzogMHg4MTdCLAor
ICAnUE9TVF9URVhUVVJFX0ZJTFRFUl9TQ0FMRV9SQU5HRV9TR0lYJzogMHg4MTdDLAorICAnVkVS
VEVYX1BSRUNMSVBfU0dJWCc6IDB4ODNFRSwKKyAgJ1ZFUlRFWF9QUkVDTElQX0hJTlRfU0dJWCc6
IDB4ODNFRiwKKyAgJ1ZFUlRFWF9QUkVDTElQX1NHSVgnOiAweDgzRUUsCisgICdWRVJURVhfUFJF
Q0xJUF9ISU5UX1NHSVgnOiAweDgzRUYsCisgICdDT0xPUl9NQVRSSVhfU0dJJzogMHg4MEIxLAor
ICAnQ09MT1JfTUFUUklYX1NUQUNLX0RFUFRIX1NHSSc6IDB4ODBCMiwKKyAgJ01BWF9DT0xPUl9N
QVRSSVhfU1RBQ0tfREVQVEhfU0dJJzogMHg4MEIzLAorICAnUE9TVF9DT0xPUl9NQVRSSVhfUkVE
X1NDQUxFX1NHSSc6IDB4ODBCNCwKKyAgJ1BPU1RfQ09MT1JfTUFUUklYX0dSRUVOX1NDQUxFX1NH
SSc6IDB4ODBCNSwKKyAgJ1BPU1RfQ09MT1JfTUFUUklYX0JMVUVfU0NBTEVfU0dJJzogMHg4MEI2
LAorICAnUE9TVF9DT0xPUl9NQVRSSVhfQUxQSEFfU0NBTEVfU0dJJzogMHg4MEI3LAorICAnUE9T
VF9DT0xPUl9NQVRSSVhfUkVEX0JJQVNfU0dJJzogMHg4MEI4LAorICAnUE9TVF9DT0xPUl9NQVRS
SVhfR1JFRU5fQklBU19TR0knOiAweDgwQjksCisgICdQT1NUX0NPTE9SX01BVFJJWF9CTFVFX0JJ
QVNfU0dJJzogMHg4MEJBLAorICAnUE9TVF9DT0xPUl9NQVRSSVhfQUxQSEFfQklBU19TR0knOiAw
eDgwQkIsCisgICdDT0xPUl9UQUJMRV9TR0knOiAweDgwRDAsCisgICdQT1NUX0NPTlZPTFVUSU9O
X0NPTE9SX1RBQkxFX1NHSSc6IDB4ODBEMSwKKyAgJ1BPU1RfQ09MT1JfTUFUUklYX0NPTE9SX1RB
QkxFX1NHSSc6IDB4ODBEMiwKKyAgJ1BST1hZX0NPTE9SX1RBQkxFX1NHSSc6IDB4ODBEMywKKyAg
J1BST1hZX1BPU1RfQ09OVk9MVVRJT05fQ09MT1JfVEFCTEVfU0dJJzogMHg4MEQ0LAorICAnUFJP
WFlfUE9TVF9DT0xPUl9NQVRSSVhfQ09MT1JfVEFCTEVfU0dJJzogMHg4MEQ1LAorICAnQ09MT1Jf
VEFCTEVfU0NBTEVfU0dJJzogMHg4MEQ2LAorICAnQ09MT1JfVEFCTEVfQklBU19TR0knOiAweDgw
RDcsCisgICdDT0xPUl9UQUJMRV9GT1JNQVRfU0dJJzogMHg4MEQ4LAorICAnQ09MT1JfVEFCTEVf
V0lEVEhfU0dJJzogMHg4MEQ5LAorICAnQ09MT1JfVEFCTEVfUkVEX1NJWkVfU0dJJzogMHg4MERB
LAorICAnQ09MT1JfVEFCTEVfR1JFRU5fU0laRV9TR0knOiAweDgwREIsCisgICdDT0xPUl9UQUJM
RV9CTFVFX1NJWkVfU0dJJzogMHg4MERDLAorICAnQ09MT1JfVEFCTEVfQUxQSEFfU0laRV9TR0kn
OiAweDgwREQsCisgICdDT0xPUl9UQUJMRV9MVU1JTkFOQ0VfU0laRV9TR0knOiAweDgwREUsCisg
ICdDT0xPUl9UQUJMRV9JTlRFTlNJVFlfU0laRV9TR0knOiAweDgwREYsCisgICdURVhUVVJFX0NP
TE9SX1RBQkxFX1NHSSc6IDB4ODBCQywKKyAgJ1BST1hZX1RFWFRVUkVfQ09MT1JfVEFCTEVfU0dJ
JzogMHg4MEJELAorICAnVU5QQUNLX0NPTlNUQU5UX0RBVEFfU1VOWCc6IDB4ODFENSwKKyAgJ1RF
WFRVUkVfQ09OU1RBTlRfREFUQV9TVU5YJzogMHg4MUQ2LAorICAnV1JBUF9CT1JERVJfU1VOJzog
MHg4MUQ0LAorICAnR0xPQkFMX0FMUEhBX1NVTic6IDB4ODFEOSwKKyAgJ0dMT0JBTF9BTFBIQV9G
QUNUT1JfU1VOJzogMHg4MURBLAorICAnUVVBRF9NRVNIX1NVTic6IDB4ODYxNCwKKyAgJ1RSSUFO
R0xFX01FU0hfU1VOJzogMHg4NjE1LAorICAnU0xJQ0VfQUNDVU1fU1VOJzogMHg4NUNDLAorICAn
UkVTVEFSVF9TVU4nOiAweDAxLAorICAnUkVQTEFDRV9NSURETEVfU1VOJzogMHgwMiwKKyAgJ1JF
UExBQ0VfT0xERVNUX1NVTic6IDB4MDMsCisgICdUUklBTkdMRV9MSVNUX1NVTic6IDB4ODFENywK
KyAgJ1JFUExBQ0VNRU5UX0NPREVfU1VOJzogMHg4MUQ4LAorICAnUkVQTEFDRU1FTlRfQ09ERV9B
UlJBWV9TVU4nOiAweDg1QzAsCisgICdSRVBMQUNFTUVOVF9DT0RFX0FSUkFZX1RZUEVfU1VOJzog
MHg4NUMxLAorICAnUkVQTEFDRU1FTlRfQ09ERV9BUlJBWV9TVFJJREVfU1VOJzogMHg4NUMyLAor
ICAnUkVQTEFDRU1FTlRfQ09ERV9BUlJBWV9QT0lOVEVSX1NVTic6IDB4ODVDMywKKyAgJ1IxVUlf
VjNGX1NVTic6IDB4ODVDNCwKKyAgJ1IxVUlfQzRVQl9WM0ZfU1VOJzogMHg4NUM1LAorICAnUjFV
SV9DM0ZfVjNGX1NVTic6IDB4ODVDNiwKKyAgJ1IxVUlfTjNGX1YzRl9TVU4nOiAweDg1QzcsCisg
ICdSMVVJX0M0Rl9OM0ZfVjNGX1NVTic6IDB4ODVDOCwKKyAgJ1IxVUlfVDJGX1YzRl9TVU4nOiAw
eDg1QzksCisgICdSMVVJX1QyRl9OM0ZfVjNGX1NVTic6IDB4ODVDQSwKKyAgJ1IxVUlfVDJGX0M0
Rl9OM0ZfVjNGX1NVTic6IDB4ODVDQiwKKyAgJ1BIT05HX1dJTic6IDB4ODBFQSwKKyAgJ1BIT05H
X0hJTlRfV0lOJzogMHg4MEVCLAorICAnUFJPR1JBTV9CSU5BUllfUkVUUklFVkFCTEVfSElOVCc6
IDB4ODI1NywKKyAgJ1BST0dSQU1fQklOQVJZX0xFTkdUSCc6IDB4ODc0MSwKKyAgJ1BST0dSQU1f
QklOQVJZX0ZPUk1BVFMnOiAweDg3RkUsCisgICdOVU1fUFJPR1JBTV9CSU5BUllfRk9STUFUUyc6
IDB4ODdGRiwKKyAgJ1BSSU1JVElWRV9SRVNUQVJUX0ZJWEVEX0lOREVYJzogMHg4RDY5LAorICAn
Rk9HX1NQRUNVTEFSX1RFWFRVUkVfV0lOJzogMHg4MEVDCit9OwpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvanMvZ2xzbC1jb25mb3JtYW5j
ZS10ZXN0LmpzIGIvTGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMv
anMvZ2xzbC1jb25mb3JtYW5jZS10ZXN0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmExZDI0NWFhOGExYTliOTNl
MGY0OWU4OWZlNmEzM2MwYzg5NjRhOTkKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93
ZWJnbC9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9qcy9nbHNsLWNvbmZvcm1hbmNlLXRlc3Qu
anMKQEAgLTAsMCArMSwzOTUgQEAKKy8qCitDb3B5cmlnaHQgKGMpIDIwMTkgVGhlIEtocm9ub3Mg
R3JvdXAgSW5jLgorVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlU
LXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKK2ZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxl
LgorKi8KK0dMU0xDb25mb3JtYW5jZVRlc3RlciA9IChmdW5jdGlvbigpeworCit2YXIgd3R1ID0g
V2ViR0xUZXN0VXRpbHM7Cit2YXIgZGVmYXVsdFZlcnRleFNoYWRlciA9IFsKKyAgImF0dHJpYnV0
ZSB2ZWM0IHZQb3NpdGlvbjsiLAorICAidm9pZCBtYWluKCkiLAorICAieyIsCisgICIgICAgZ2xf
UG9zaXRpb24gPSB2UG9zaXRpb247IiwKKyAgIn0iCitdLmpvaW4oJ1xuJyk7CisKK3ZhciBkZWZh
dWx0RnJhZ21lbnRTaGFkZXIgPSBbCisgICJwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsiLAorICAi
dm9pZCBtYWluKCkiLAorICAieyIsCisgICIgICAgZ2xfRnJhZ0NvbG9yID0gdmVjNCgxLjAsMC4w
LDAuMCwxLjApOyIsCisgICJ9IgorXS5qb2luKCdcbicpOworCit2YXIgZGVmYXVsdEVTU0wzVmVy
dGV4U2hhZGVyID0gWworICAiI3ZlcnNpb24gMzAwIGVzIiwKKyAgImluIHZlYzQgdlBvc2l0aW9u
OyIsCisgICJ2b2lkIG1haW4oKSIsCisgICJ7IiwKKyAgIiAgICBnbF9Qb3NpdGlvbiA9IHZQb3Np
dGlvbjsiLAorICAifSIKK10uam9pbignXG4nKTsKKwordmFyIGRlZmF1bHRFU1NMM0ZyYWdtZW50
U2hhZGVyID0gWworICAiI3ZlcnNpb24gMzAwIGVzIiwKKyAgInByZWNpc2lvbiBtZWRpdW1wIGZs
b2F0OyIsCisgICJvdXQgdmVjNCBteV9GcmFnQ29sb3I7IiwKKyAgInZvaWQgbWFpbigpIiwKKyAg
InsiLAorICAiICAgIG15X0ZyYWdDb2xvciA9IHZlYzQoMS4wLDAuMCwwLjAsMS4wKTsiLAorICAi
fSIKK10uam9pbignXG4nKTsKKworZnVuY3Rpb24gbG9nKG1zZykgeworICBidWZmZXJlZExvZ1Rv
Q29uc29sZShtc2cpOworfQorCit2YXIgdlNoYWRlckRCID0ge307Cit2YXIgZlNoYWRlckRCID0g
e307CisKKy8qKgorICogVGhlIGluZm8gcGFyYW1ldGVyIHNob3VsZCBjb250YWluIHRoZSBmb2xs
b3dpbmcga2V5cy4gTm90ZSB0aGF0IHlvdSBtYXkgbGVhdmUKKyAqIHRoZSBwYXJhbWV0ZXJzIGZv
ciBvbmUgc2hhZGVyIG91dCwgaW4gd2hpY2ggY2FzZSB0aGUgZGVmYXVsdCBzaGFkZXIgd2lsbCBi
ZQorICogdXNlZC4KKyAqIHZTaGFkZXJTb3VyY2U6IHRoZSBzb3VyY2UgY29kZSBmb3IgdmVydGV4
IHNoYWRlcgorICogdlNoYWRlcklkOiBpZCBvZiBhbiBlbGVtZW50IGNvbnRhaW5pbmcgdmVydGV4
IHNoYWRlciBzb3VyY2UgY29kZS4gVXNlZCBpZgorICogICB2U2hhZGVyU291cmNlIGlzIG5vdCBz
cGVjaWZpZWQuCisgKiB2U2hhZGVyU3VjY2VzczogdHJ1ZSBpZiB2ZXJ0ZXggc2hhZGVyIGNvbXBp
bGF0aW9uIHNob3VsZAorICogICBzdWNjZWVkLgorICogZlNoYWRlclNvdXJjZTogdGhlIHNvdXJj
ZSBjb2RlIGZvciBmcmFnbWVudCBzaGFkZXIKKyAqIGZTaGFkZXJJZDogaWQgb2YgYW4gZWxlbWVu
dCBjb250YWluaW5nIGZyYWdtZW50IHNoYWRlciBzb3VyY2UgY29kZS4gVXNlZCBpZgorICogICBm
U2hhZGVyU291cmNlIGlzIG5vdCBzcGVjaWZpZWQuCisgKiBmU2hhZGVyU3VjY2VzczogdHJ1ZSBp
ZiBmcmFnbWVudCBzaGFkZXIgY29tcGlsYXRpb24gc2hvdWxkCisgKiAgIHN1Y2NlZWQuCisgKiBs
aW5rU3VjY2VzczogdHJ1ZSBpZiBsaW5rIHNob3VsZCBzdWNjZWVkCisgKiBwYXNzTXNnOiBtc2cg
dG8gZGVzY3JpYmUgc3VjY2VzcyBjb25kaXRpb24uCisgKiByZW5kZXI6IGlmIHRydWUgcmVuZGVy
IHRvIHVuaXQgcXVhZC4gR3JlZW4gPSBzdWNjZXNzCisgKiB1bmlmb3JtczogYW4gYXJyYXkgb2Yg
b2JqZWN0cyBzcGVjaWZ5aW5nIHVuaWZvcm1zIHRvIHNldCBwcmlvciB0byByZW5kZXJpbmcuCisg
KiAgIEVhY2ggb2JqZWN0IHNob3VsZCBoYXZlIHRoZSBmb2xsb3dpbmcga2V5czoKKyAqICAgICBu
YW1lOiB1bmlmb3JtIHZhcmlhYmxlIG5hbWUgaW4gdGhlIHNoYWRlciBzb3VyY2UuIFVuaWZvcm0g
bG9jYXRpb24gd2lsbAorICogICAgICAgYmUgcXVlcmllZCBiYXNlZCBvbiBpdHMgbmFtZS4KKyAq
ICAgICBmdW5jdGlvbk5hbWU6IG5hbWUgb2YgdGhlIGZ1bmN0aW9uIHVzZWQgdG8gc2V0IHRoZSB1
bmlmb3JtLiBGb3IgZXhhbXBsZToKKyAqICAgICAgICd1bmlmb3JtMWknCisgKiAgICAgdmFsdWU6
IHZhbHVlIG9mIHRoZSB1bmlmb3JtIHRvIHNldC4KKyAqLworZnVuY3Rpb24gcnVuT25lVGVzdChn
bCwgaW5mbykgeworICB2YXIgcGFzc01zZyA9IGluZm8ucGFzc01zZworICBkZWJ1ZygiIik7Cisg
IGRlYnVnKCJ0ZXN0OiAiICsgcGFzc01zZyk7CisKKyAgdmFyIGNvbnNvbGVEaXYgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpOworCisgIHZhciB2SXNEZWZhdWx0ID0gZmFsc2U7
CisgIHZhciBmSXNEZWZhdWx0ID0gZmFsc2U7CisKKyAgaWYgKGluZm8udlNoYWRlclNvdXJjZSA9
PT0gdW5kZWZpbmVkKSB7CisgICAgaWYgKGluZm8udlNoYWRlcklkKSB7CisgICAgICBpbmZvLnZT
aGFkZXJTb3VyY2UgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChpbmZvLnZTaGFkZXJJZCkudGV4
dDsKKyAgICB9IGVsc2UgeworICAgICAgdklzRGVmYXVsdCA9IHRydWU7CisgICAgfQorICB9Cisg
IGlmIChpbmZvLmZTaGFkZXJTb3VyY2UgPT09IHVuZGVmaW5lZCkgeworICAgIGlmIChpbmZvLmZT
aGFkZXJJZCkgeworICAgICAgaW5mby5mU2hhZGVyU291cmNlID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoaW5mby5mU2hhZGVySWQpLnRleHQ7CisgICAgfSBlbHNlIHsKKyAgICAgIGZJc0RlZmF1
bHQgPSB0cnVlOworICAgIH0KKyAgfQorCisgIHZhciB2TGFiZWwgPSAodklzRGVmYXVsdCA/ICJk
ZWZhdWx0IiA6ICJ0ZXN0IikgKyAiIHZlcnRleCBzaGFkZXIiOworICB2YXIgZkxhYmVsID0gKGZJ
c0RlZmF1bHQgPyAiZGVmYXVsdCIgOiAidGVzdCIpICsgIiBmcmFnbWVudCBzaGFkZXIiOworICBp
ZiAodklzRGVmYXVsdCkgeworICAgIGluZm8udlNoYWRlclNvdXJjZSA9IGRlZmF1bHRWZXJ0ZXhT
aGFkZXI7CisgICAgaW5mby52U2hhZGVyU3VjY2VzcyA9IHRydWU7CisgIH0KKyAgaWYgKGZJc0Rl
ZmF1bHQpIHsKKyAgICBpbmZvLmZTaGFkZXJTb3VyY2UgPSBkZWZhdWx0RnJhZ21lbnRTaGFkZXI7
CisgICAgaW5mby5mU2hhZGVyU3VjY2VzcyA9IHRydWU7CisgIH0KKworICBpZiAodklzRGVmYXVs
dCAhPSBmSXNEZWZhdWx0KSB7CisgICAgLy8gVGhlIGxhbmd1YWdlIHZlcnNpb24gb2YgdGhlIGRl
ZmF1bHQgc2hhZGVyIGlzIGNob3NlbgorICAgIC8vIGFjY29yZGluZyB0byB0aGUgbGFuZ3VhZ2Ug
dmVyc2lvbiBvZiB0aGUgb3RoZXIgc2hhZGVyLgorICAgIC8vIFdlIHJlbHkgb24gIiN2ZXJzaW9u
IDMwMCBlcyIgYmVpbmcgaW4gdGhpcyB1c3VhbCBmb3JtYXQuCisgICAgLy8gSXQgbXVzdCBiZSBv
biB0aGUgZmlyc3QgbGluZSBvZiB0aGUgc2hhZGVyIGFjY29yZGluZyB0byB0aGUgc3BlYy4KKyAg
ICBpZiAoZklzRGVmYXVsdCkgeworICAgICAgLy8gSWYgd2UncmUgdXNpbmcgdGhlIGRlZmF1bHQg
ZnJhZ21lbnQgc2hhZGVyLCB3ZSBuZWVkIHRvIG1ha2Ugc3VyZSB0aGF0CisgICAgICAvLyBpdCdz
IGxhbmd1YWdlIHZlcnNpb24gbWF0Y2hlcyB3aXRoIHRoZSB2ZXJ0ZXggc2hhZGVyLgorICAgICAg
aWYgKGluZm8udlNoYWRlclNvdXJjZS5zcGxpdCgnXG4nKVswXSA9PSAnI3ZlcnNpb24gMzAwIGVz
JykgeworICAgICAgICBpbmZvLmZTaGFkZXJTb3VyY2UgPSBkZWZhdWx0RVNTTDNGcmFnbWVudFNo
YWRlcjsKKyAgICAgIH0KKyAgICB9IGVsc2UgeworICAgICAgLy8gSWYgd2UncmUgdXNpbmcgdGhl
IGRlZmF1bHQgdmVydGV4IHNoYWRlciwgd2UgbmVlZCB0byBtYWtlIHN1cmUgdGhhdAorICAgICAg
Ly8gaXQncyBsYW5ndWFnZSB2ZXJzaW9uIG1hdGNoZXMgd2l0aCB0aGUgZnJhZ21lbnQgc2hhZGVy
LgorICAgICAgaWYgKGluZm8uZlNoYWRlclNvdXJjZS5zcGxpdCgnXG4nKVswXSA9PSAnI3ZlcnNp
b24gMzAwIGVzJykgeworICAgICAgICBpbmZvLnZTaGFkZXJTb3VyY2UgPSBkZWZhdWx0RVNTTDNW
ZXJ0ZXhTaGFkZXI7CisgICAgICB9CisgICAgfQorICB9CisKKyAgdmFyIHZTb3VyY2UgPSBpbmZv
LnZTaGFkZXJQcmVwID8gaW5mby52U2hhZGVyUHJlcChpbmZvLnZTaGFkZXJTb3VyY2UpIDoKKyAg
ICBpbmZvLnZTaGFkZXJTb3VyY2U7CisKKyAgaWYgKCFxdWlldE1vZGUoKSkKKyAgICB3dHUuYWRk
U2hhZGVyU291cmNlKGNvbnNvbGVEaXYsIHZMYWJlbCwgdlNvdXJjZSk7CisKKyAgLy8gUmV1c2Ug
aWRlbnRpY2FsIHNoYWRlcnMgc28gd2UgdGVzdCBzaGFyZWQgc2hhZGVyLgorICB2YXIgdlNoYWRl
ciA9IHZTaGFkZXJEQlt2U291cmNlXTsKKyAgaWYgKCF2U2hhZGVyKSB7CisgICAgdlNoYWRlciA9
IHd0dS5sb2FkU2hhZGVyKGdsLCB2U291cmNlLCBnbC5WRVJURVhfU0hBREVSKTsKKyAgICBpZiAo
aW5mby52U2hhZGVyVGVzdCkgeworICAgICAgaWYgKCFpbmZvLnZTaGFkZXJUZXN0KHZTaGFkZXIp
KSB7CisgICAgICAgIHRlc3RGYWlsZWQoIlt2ZXJ0ZXggc2hhZGVyIHRlc3RdICIgKyBwYXNzTXNn
KTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgIH0KKyAgICAvLyBBcyBwZXIgR0xTTCAx
LjAuMTcgMTAuMjcgd2UgY2FuIG9ubHkgY2hlY2sgZm9yIHN1Y2Nlc3Mgb24KKyAgICAvLyBjb21w
aWxlU2hhZGVyLCBub3QgZmFpbHVyZS4KKyAgICBpZiAoIWluZm8uaWdub3JlUmVzdWx0cyAmJiBp
bmZvLnZTaGFkZXJTdWNjZXNzICYmICF2U2hhZGVyKSB7CisgICAgICB0ZXN0RmFpbGVkKCJbdW5l
eHBlY3RlZCB2ZXJ0ZXggc2hhZGVyIGNvbXBpbGUgc3RhdHVzXSAoZXhwZWN0ZWQ6ICIgKworICAg
ICAgICAgICAgICAgICBpbmZvLnZTaGFkZXJTdWNjZXNzICsgIikgIiArIHBhc3NNc2cpOworICAg
IH0KKyAgICAvLyBTYXZlIHRoZSBzaGFkZXJzIHNvIHdlIHRlc3Qgc2hhcmVkIHNoYWRlci4KKyAg
ICBpZiAodlNoYWRlcikgeworICAgICAgdlNoYWRlckRCW3ZTb3VyY2VdID0gdlNoYWRlcjsKKyAg
ICB9CisgIH0KKworICB2YXIgZGVidWdTaGFkZXJzID0gZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJHTF9k
ZWJ1Z19zaGFkZXJzJyk7CisgIGlmIChkZWJ1Z1NoYWRlcnMgJiYgdlNoYWRlciAmJiAhcXVpZXRN
b2RlKCkpIHsKKyAgICB3dHUuYWRkU2hhZGVyU291cmNlKGNvbnNvbGVEaXYsIHZMYWJlbCArICIg
dHJhbnNsYXRlZCBmb3IgZHJpdmVyIiwKKyAgICAgICAgICAgICAgICAgICAgICAgIGRlYnVnU2hh
ZGVycy5nZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlKHZTaGFkZXIpKTsKKyAgfQorCisgIHZhciBm
U291cmNlID0gaW5mby5mU2hhZGVyUHJlcCA/IGluZm8uZlNoYWRlclByZXAoaW5mby5mU2hhZGVy
U291cmNlKSA6CisgICAgaW5mby5mU2hhZGVyU291cmNlOworCisgIGlmICghcXVpZXRNb2RlKCkp
CisgICAgd3R1LmFkZFNoYWRlclNvdXJjZShjb25zb2xlRGl2LCBmTGFiZWwsIGZTb3VyY2UpOwor
CisgIC8vIFJldXNlIGlkZW50aWNhbCBzaGFkZXJzIHNvIHdlIHRlc3Qgc2hhcmVkIHNoYWRlci4K
KyAgdmFyIGZTaGFkZXIgPSBmU2hhZGVyREJbZlNvdXJjZV07CisgIGlmICghZlNoYWRlcikgewor
ICAgIGZTaGFkZXIgPSB3dHUubG9hZFNoYWRlcihnbCwgZlNvdXJjZSwgZ2wuRlJBR01FTlRfU0hB
REVSKTsKKyAgICBpZiAoaW5mby5mU2hhZGVyVGVzdCkgeworICAgICAgaWYgKCFpbmZvLmZTaGFk
ZXJUZXN0KGZTaGFkZXIpKSB7CisgICAgICAgIHRlc3RGYWlsZWQoIltmcmFnbWVudCBzaGFkZXIg
dGVzdF0gIiArIHBhc3NNc2cpOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgfQorICAg
IC8vZGVidWcoZlNoYWRlciA9PSBudWxsID8gImZhaWwiIDogInN1Y2NlZWQiKTsKKyAgICAvLyBB
cyBwZXIgR0xTTCAxLjAuMTcgMTAuMjcgd2UgY2FuIG9ubHkgY2hlY2sgZm9yIHN1Y2Nlc3Mgb24K
KyAgICAvLyBjb21waWxlU2hhZGVyLCBub3QgZmFpbHVyZS4KKyAgICBpZiAoIWluZm8uaWdub3Jl
UmVzdWx0cyAmJiBpbmZvLmZTaGFkZXJTdWNjZXNzICYmICFmU2hhZGVyKSB7CisgICAgICB0ZXN0
RmFpbGVkKCJbdW5leHBlY3RlZCBmcmFnbWVudCBzaGFkZXIgY29tcGlsZSBzdGF0dXNdIChleHBl
Y3RlZDogIiArCisgICAgICAgICAgICAgICAgaW5mby5mU2hhZGVyU3VjY2VzcyArICIpICIgKyBw
YXNzTXNnKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBTYWZlIHRoZSBzaGFkZXJz
IHNvIHdlIHRlc3Qgc2hhcmVkIHNoYWRlci4KKyAgICBpZiAoZlNoYWRlcikgeworICAgICAgZlNo
YWRlckRCW2ZTb3VyY2VdID0gZlNoYWRlcjsKKyAgICB9CisgIH0KKworICBpZiAoZGVidWdTaGFk
ZXJzICYmIGZTaGFkZXIgJiYgIXF1aWV0TW9kZSgpKSB7CisgICAgd3R1LmFkZFNoYWRlclNvdXJj
ZShjb25zb2xlRGl2LCBmTGFiZWwgKyAiIHRyYW5zbGF0ZWQgZm9yIGRyaXZlciIsCisgICAgICAg
ICAgICAgICAgICAgICAgICBkZWJ1Z1NoYWRlcnMuZ2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZShm
U2hhZGVyKSk7CisgIH0KKworICBpZiAodlNoYWRlciAmJiBmU2hhZGVyKSB7CisgICAgdmFyIHBy
b2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7CisgICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0s
IHZTaGFkZXIpOworICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBmU2hhZGVyKTsKKworICAg
IGlmICh2U291cmNlLmluZGV4T2YoInZQb3NpdGlvbiIpID49IDApIHsKKyAgICAgIGdsLmJpbmRB
dHRyaWJMb2NhdGlvbihwcm9ncmFtLCAwLCAidlBvc2l0aW9uIik7CisgICAgfQorICAgIGlmICh2
U291cmNlLmluZGV4T2YoInRleENvb3JkMCIpID49IDApIHsKKyAgICAgIGdsLmJpbmRBdHRyaWJM
b2NhdGlvbihwcm9ncmFtLCAxLCAidGV4Q29vcmQwIik7CisgICAgfQorICAgIGdsLmxpbmtQcm9n
cmFtKHByb2dyYW0pOworICAgIHZhciBsaW5rZWQgPSAoZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihw
cm9ncmFtLCBnbC5MSU5LX1NUQVRVUykgIT0gMCk7CisgICAgaWYgKCFsaW5rZWQpIHsKKyAgICAg
IHZhciBlcnJvciA9IGdsLmdldFByb2dyYW1JbmZvTG9nKHByb2dyYW0pOworICAgICAgbG9nKCIq
KiogRXJyb3IgbGlua2luZyBwcm9ncmFtICciK3Byb2dyYW0rIic6IitlcnJvcik7CisgICAgfQor
ICAgIGlmICghaW5mby5pZ25vcmVSZXN1bHRzICYmIGxpbmtlZCAhPSBpbmZvLmxpbmtTdWNjZXNz
KSB7CisgICAgICB0ZXN0RmFpbGVkKCJbdW5leHBlY3RlZCBsaW5rIHN0YXR1c10gKGV4cGVjdGVk
OiAiICsKKyAgICAgICAgICAgICAgICBpbmZvLmxpbmtTdWNjZXNzICsgIikgIiArIHBhc3NNc2cp
OworICAgICAgcmV0dXJuOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICBpZiAoIWluZm8uaWdub3Jl
UmVzdWx0cyAmJiBpbmZvLmxpbmtTdWNjZXNzKSB7CisgICAgICB0ZXN0RmFpbGVkKCJbbGluayBm
YWlsZWRdICIgKyBwYXNzTXNnKTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgIH0KKworICBpZiAo
cGFyc2VJbnQod3R1LmdldFVybE9wdGlvbnMoKS5kdW1wU2hhZGVycykpIHsKKyAgICB2YXIgdklu
Zm8gPSB7CisgICAgICBzaGFkZXI6IHZTaGFkZXIsCisgICAgICBzaGFkZXJTdWNjZXNzOiBpbmZv
LnZTaGFkZXJTdWNjZXNzLAorICAgICAgbGFiZWw6IHZMYWJlbCwKKyAgICAgIHNvdXJjZTogdlNv
dXJjZQorICAgIH07CisgICAgdmFyIGZJbmZvID0geworICAgICAgc2hhZGVyOiBmU2hhZGVyLAor
ICAgICAgc2hhZGVyU3VjY2VzczogaW5mby5mU2hhZGVyU3VjY2VzcywKKyAgICAgIGxhYmVsOiBm
TGFiZWwsCisgICAgICBzb3VyY2U6IGZTb3VyY2UKKyAgICB9OworICAgIHd0dS5kdW1wU2hhZGVy
c0luZm8oZ2wsIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSwgcGFzc01zZywgdkluZm8sIGZJbmZv
KTsKKyAgfQorCisgIGlmICghaW5mby5yZW5kZXIpIHsKKyAgICB0ZXN0UGFzc2VkKHBhc3NNc2cp
OworICAgIHJldHVybjsKKyAgfQorCisgIGdsLnVzZVByb2dyYW0ocHJvZ3JhbSk7CisKKyAgaWYg
KGluZm8udW5pZm9ybXMgIT09IHVuZGVmaW5lZCkgeworICAgIGZvciAodmFyIGkgPSAwOyBpIDwg
aW5mby51bmlmb3Jtcy5sZW5ndGg7ICsraSkgeworICAgICAgdmFyIHVuaWZvcm1Mb2NhdGlvbiA9
IGdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCBpbmZvLnVuaWZvcm1zW2ldLm5hbWUpOwor
ICAgICAgaWYgKHVuaWZvcm1Mb2NhdGlvbiAhPT0gbnVsbCkgeworICAgICAgICBnbFtpbmZvLnVu
aWZvcm1zW2ldLmZ1bmN0aW9uTmFtZV0odW5pZm9ybUxvY2F0aW9uLCBpbmZvLnVuaWZvcm1zW2ld
LnZhbHVlKTsKKyAgICAgICAgZGVidWcoaW5mby51bmlmb3Jtc1tpXS5uYW1lICsgJyBzZXQgdG8g
JyArIGluZm8udW5pZm9ybXNbaV0udmFsdWUpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgZGVi
dWcoJ3VuaWZvcm0gJyArIGluZm8udW5pZm9ybXNbaV0ubmFtZSArICcgaGFkIG51bGwgbG9jYXRp
b24gYW5kIHdhcyBub3Qgc2V0Jyk7CisgICAgICB9CisgICAgfQorICB9CisKKyAgaWYgKGluZm8u
dW5pZm9ybUJsb2NrcyAhPT0gdW5kZWZpbmVkKSB7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBp
bmZvLnVuaWZvcm1CbG9ja3MubGVuZ3RoOyArK2kpIHsKKyAgICAgIHZhciB1bmlmb3JtQmxvY2tJ
bmRleCA9IGdsLmdldFVuaWZvcm1CbG9ja0luZGV4KHByb2dyYW0sIGluZm8udW5pZm9ybUJsb2Nr
c1tpXS5uYW1lKTsKKyAgICAgIGlmICh1bmlmb3JtQmxvY2tJbmRleCAhPT0gbnVsbCkgeworICAg
ICAgICBnbC51bmlmb3JtQmxvY2tCaW5kaW5nKHByb2dyYW0sIHVuaWZvcm1CbG9ja0luZGV4LCBp
KTsKKyAgICAgICAgZGVidWcoaW5mby51bmlmb3JtQmxvY2tzW2ldLm5hbWUgKyAnIChpbmRleCAn
ICsgdW5pZm9ybUJsb2NrSW5kZXggKyAnKSBib3VuZCB0byBzbG90ICcgKyBpKTsKKworICAgICAg
ICB2YXIgdWJvVmFsdWVCdWZmZXIgPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgICAgICAgZ2wuYmlu
ZEJ1ZmZlckJhc2UoZ2wuVU5JRk9STV9CVUZGRVIsIGksIHVib1ZhbHVlQnVmZmVyKTsKKyAgICAg
ICAgZ2wuYnVmZmVyRGF0YShnbC5VTklGT1JNX0JVRkZFUiwgaW5mby51bmlmb3JtQmxvY2tzW2ld
LnZhbHVlLCBpbmZvLnVuaWZvcm1CbG9ja3NbaV0udXNhZ2UgfHwgZ2wuU1RBVElDX0RSQVcpOwor
ICAgICAgfSBlbHNlIHsKKyAgICAgICAgZGVidWcoJ3VuaWZvcm0gYmxvY2snICsgaW5mby51bmlm
b3JtQmxvY2tzW2ldLm5hbWUgKyAnIGhhZCBudWxsIGJsb2NrIGluZGV4IGFuZCB3YXMgbm90IHNl
dCcpOworICAgICAgfQorICAgIH0KKyAgfQorCisgIHd0dS5zZXR1cFVuaXRRdWFkKGdsKTsKKyAg
d3R1LmNsZWFyQW5kRHJhd1VuaXRRdWFkKGdsKTsKKworICB2YXIgZGl2ID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiZGl2Iik7CisgIGRpdi5jbGFzc05hbWUgPSAidGVzdGltYWdlcyI7CisgIHd0
dS5pbnNlcnRJbWFnZShkaXYsICJyZXN1bHQiLCB3dHUubWFrZUltYWdlRnJvbUNhbnZhcyhnbC5j
YW52YXMpKTsKKyAgZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2JyJykp
OworICBjb25zb2xlRGl2LmFwcGVuZENoaWxkKGRpdik7CisKKyAgdmFyIHRvbGVyYW5jZSA9IDA7
CisgIGlmIChpbmZvLnJlbmRlclRvbGVyYW5jZSAhPT0gdW5kZWZpbmVkKSB7CisgICAgdG9sZXJh
bmNlID0gaW5mby5yZW5kZXJUb2xlcmFuY2U7CisgIH0KKyAgaWYgKGluZm8ucmVuZGVyQ29sb3Ig
IT09IHVuZGVmaW5lZCkgeworICAgIHd0dS5jaGVja0NhbnZhcyhnbCwgaW5mby5yZW5kZXJDb2xv
ciwgInNob3VsZCBiZSBleHBlY3RlZCBjb2xvciAiICsgaW5mby5yZW5kZXJDb2xvciwgdG9sZXJh
bmNlKTsKKyAgfSBlbHNlIHsKKyAgICB3dHUuY2hlY2tDYW52YXMoZ2wsIFswLCAyNTUsIDAsIDI1
NV0sICJzaG91bGQgYmUgZ3JlZW4iLCB0b2xlcmFuY2UpOworICB9Cit9CisKK2Z1bmN0aW9uIHJ1
blRlc3RzKHNoYWRlckluZm9zLCBvcHRfY29udGV4dFZlcnNpb24pIHsKKyAgdmFyIHd0dSA9IFdl
YkdMVGVzdFV0aWxzOworICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnY2Fu
dmFzJyk7CisgIGNhbnZhcy53aWR0aCA9IDMyOworICBjYW52YXMuaGVpZ2h0ID0gMzI7CisgIHZh
ciBnbCA9IHd0dS5jcmVhdGUzRENvbnRleHQoY2FudmFzLCB1bmRlZmluZWQsIG9wdF9jb250ZXh0
VmVyc2lvbik7CisgIGlmICghZ2wpIHsKKyAgICB0ZXN0RmFpbGVkKCJjb250ZXh0IGRvZXMgbm90
IGV4aXN0Iik7CisgICAgZmluaXNoVGVzdCgpOworICAgIHJldHVybjsKKyAgfQorCisgIGZvciAo
dmFyIGkgPSAwOyBpIDwgc2hhZGVySW5mb3MubGVuZ3RoOyBpKyspIHsKKyAgICBydW5PbmVUZXN0
KGdsLCBzaGFkZXJJbmZvc1tpXSk7CisgIH0KKworICBmaW5pc2hUZXN0KCk7Cit9OworCitmdW5j
dGlvbiBnZXRTb3VyY2UoZWxlbSkgeworICB2YXIgc3RyID0gZWxlbS50ZXh0OworICByZXR1cm4g
c3RyLnJlcGxhY2UoL15ccyovLCAnJykucmVwbGFjZSgvXHMqJC8sICcnKTsKK30KKworZnVuY3Rp
b24gZ2V0UGFzc01lc3NhZ2Uoc291cmNlKSB7CisgIHZhciBsaW5lcyA9IHNvdXJjZS5zcGxpdCgn
XG4nKTsKKyAgcmV0dXJuIGxpbmVzWzBdLnN1YnN0cmluZygzKTsKK30KKworZnVuY3Rpb24gZ2V0
U3VjY2Vzcyhtc2cpIHsKKyAgaWYgKG1zZy5pbmRleE9mKCJmYWlsIikgPj0gMCkgeworICAgIHJl
dHVybiBmYWxzZTsKKyAgfQorICBpZiAobXNnLmluZGV4T2YoInN1Y2NlZWQiKSA+PSAwKSB7Cisg
ICAgcmV0dXJuIHRydWU7CisgIH0KKyAgdGVzdEZhaWxlZCgiYmFkIHRlc3QgZGVzY3JpcHRpb24u
IE11c3QgaGF2ZSAnZmFpbCcgb3IgJ3N1Y2NlZWQnIik7Cit9CisKK2Z1bmN0aW9uIHNldHVwVGVz
dCgpIHsKKyAgdmFyIGluZm8gPSB7fTsKKworICB2YXIgdlNoYWRlckVsZW0gPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZCgndmVydGV4U2hhZGVyJyk7CisgIGlmICh2U2hhZGVyRWxlbSkgeworICAg
IGluZm8udlNoYWRlclNvdXJjZSA9IGdldFNvdXJjZSh2U2hhZGVyRWxlbSk7CisgICAgaW5mby5w
YXNzTXNnID0gZ2V0UGFzc01lc3NhZ2UoaW5mby52U2hhZGVyU291cmNlKTsKKyAgICBpbmZvLnZT
aGFkZXJTdWNjZXNzID0gZ2V0U3VjY2VzcyhpbmZvLnBhc3NNc2cpOworICB9CisKKyAgdmFyIGZT
aGFkZXJFbGVtID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoJ2ZyYWdtZW50U2hhZGVyJyk7Cisg
IGlmIChmU2hhZGVyRWxlbSkgeworICAgIGluZm8uZlNoYWRlclNvdXJjZSA9IGdldFNvdXJjZShm
U2hhZGVyRWxlbSk7CisgICAgaW5mby5wYXNzTXNnID0gZ2V0UGFzc01lc3NhZ2UoaW5mby5mU2hh
ZGVyU291cmNlKTsKKyAgICBpbmZvLmZTaGFkZXJTdWNjZXNzID0gZ2V0U3VjY2VzcyhpbmZvLnBh
c3NNc2cpOworICB9CisKKyAgLy8gbGlua1N1Y2Nlc3Mgc2hvdWxkIGJlIHRydWUgaWYgc2hhZGVy
IHN1Y2Nlc3MgdmFsdWUgaXMgdW5kZWZpbmVkIG9yIHRydWUgZm9yIGJvdGggc2hhZGVycy4KKyAg
aW5mby5saW5rU3VjY2VzcyA9IGluZm8udlNoYWRlclN1Y2Nlc3MgIT09IGZhbHNlICYmIGluZm8u
ZlNoYWRlclN1Y2Nlc3MgIT09IGZhbHNlOworCisgIGlmIChpbmZvLnBhc3NNc2cgPT09IHVuZGVm
aW5lZCkgeworICAgIHRlc3RGYWlsZWQoIm5vIHRlc3Qgc2hhZGVyIGZvdW5kLiIpOworICAgIGZp
bmlzaFRlc3QoKTsKKyAgICByZXR1cm47CisgIH0KKworICByZXR1cm4gaW5mbzsKK30KKworZnVu
Y3Rpb24gcnVuVGVzdCgpIHsKKyAgdmFyIGluZm8gPSBzZXR1cFRlc3QoKTsKKyAgZGVzY3JpcHRp
b24oaW5mby5wYXNzTXNnKTsKKyAgcnVuVGVzdHMoW2luZm9dKTsKK30KKworZnVuY3Rpb24gcnVu
UmVuZGVyVGVzdHModGVzdHMsIG9wdF9jb250ZXh0VmVyc2lvbikgeworICBmb3IgKHZhciBpaSA9
IDA7IGlpIDwgdGVzdHMubGVuZ3RoOyArK2lpKSB7CisgICAgdGVzdHNbaWldLnJlbmRlciA9IHRy
dWUKKyAgfQorICBydW5UZXN0cyh0ZXN0cywgb3B0X2NvbnRleHRWZXJzaW9uKTsKK30KKworZnVu
Y3Rpb24gcnVuUmVuZGVyVGVzdCgpIHsKKyAgdmFyIGluZm8gPSBzZXR1cFRlc3QoKTsKKyAgZGVz
Y3JpcHRpb24oaW5mby5wYXNzTXNnKTsKKyAgcnVuUmVuZGVyVGVzdHMoW2luZm9dKTsKK30KKwor
cmV0dXJuIHsKKyAgcnVuVGVzdDogcnVuVGVzdCwKKyAgcnVuVGVzdHM6IHJ1blRlc3RzLAorICBy
dW5SZW5kZXJUZXN0OiBydW5SZW5kZXJUZXN0LAorICBydW5SZW5kZXJUZXN0czogcnVuUmVuZGVy
VGVzdHMKK307Cit9KCkpOwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2Vz
L3dlYmdsX3Rlc3RfZmlsZXMvanMvZ2xzbC1jb25zdHJ1Y3Rvci10ZXN0cy1nZW5lcmF0b3IuanMg
Yi9MYXlvdXRUZXN0cy93ZWJnbC9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9qcy9nbHNsLWNv
bnN0cnVjdG9yLXRlc3RzLWdlbmVyYXRvci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5iNWMxNjAyOTgwYjA3ODU3
OTRiYWNlZDA4MGVmMTU1OGNmMTQ1Y2ZlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMv
d2ViZ2wvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvanMvZ2xzbC1jb25zdHJ1Y3Rvci10ZXN0
cy1nZW5lcmF0b3IuanMKQEAgLTAsMCArMSw5MTkgQEAKKy8qCitDb3B5cmlnaHQgKGMpIDIwMTkg
VGhlIEtocm9ub3MgR3JvdXAgSW5jLgorVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJu
ZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKK2ZvdW5kIGluIHRoZSBMSUNF
TlNFLnR4dCBmaWxlLgorKi8KKworCit2YXIgR0xTTENvbnN0cnVjdG9yVGVzdHNHZW5lcmF0b3Ig
PSAoZnVuY3Rpb24oKSB7CisKK3ZhciB3dHUgPSBXZWJHTFRlc3RVdGlsczsKKworLy8gU2hhZGVy
IGNvZGUgdGVtcGxhdGVzCit2YXIgY29uc3RydWN0b3JWZXJ0ZXhUZW1wbGF0ZSA9IFsKKyAgImF0
dHJpYnV0ZSB2ZWM0IHZQb3NpdGlvbjsiLAorCisgICJwcmVjaXNpb24gbWVkaXVtcCBpbnQ7IiwK
KyAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OyIsCisKKyAgLy8gQ29sb3JzIHVzZWQgdG8gc2ln
bmFsIGNvcnJlY3RuZXNzIG9mIGNvbXBvbmVudCB2YWx1ZXMgY29tcGFyaXNvbgorICAiY29uc3Qg
dmVjNCBncmVlbiA9IHZlYzQoMC4wLCAxLjAsIDAuMCwgMS4wKTsiLAorICAiY29uc3QgdmVjNCBy
ZWQgICA9IHZlYzQoMS4wLCAwLjAsIDAuMCwgMS4wKTsiLAorCisgIC8vIEVycm9yIGJvdW5kIHVz
ZWQgaW4gY29tcGFyaXNvbiBvZiBmbG9hdGluZyBwb2ludCB2YWx1ZXMKKyAgIiQoZXJyb3JCb3Vu
ZCkiLAorCisgICJ2YXJ5aW5nIHZlYzQgdkNvbG9yOyIsCisKKyAgInZvaWQgbWFpbigpIHsiLAor
ICAiICAkKGFyZ3NMaXN0KSIsCisKKyAgIiAgJCh0eXBlKSB2ID0gJCh0eXBlKSgkKGFyZ3NDb25z
dHIpKTsiLAorCisgICIgIGlmICgkKGNoZWNrQ29tcFZhbHMpKSIsCisgICIgICAgdkNvbG9yID0g
Z3JlZW47IiwKKyAgIiAgZWxzZSIsCisgICIgICAgdkNvbG9yID0gcmVkOyIsCisKKyAgIiAgZ2xf
UG9zaXRpb24gPSB2UG9zaXRpb247IiwKKyAgIn0iCitdLmpvaW4oIlxuIik7CisKKwordmFyIHBh
c3NUaHJvdWdoQ29sb3JGcmFnbWVudFNoYWRlciA9IFsKKyAgInByZWNpc2lvbiBtZWRpdW1wIGZs
b2F0OyIsCisKKyAgInZhcnlpbmcgdmVjNCB2Q29sb3I7IiwKKworICAidm9pZCBtYWluKCkgeyIs
CisgICIgICAgZ2xfRnJhZ0NvbG9yID0gdkNvbG9yOyIsCisgICJ9IgorXS5qb2luKCdcbicpOwor
CisKK3ZhciBjb25zdHJ1Y3RvckZyYWdtZW50VGVtcGxhdGUgPSBbCisgICJwcmVjaXNpb24gbWVk
aXVtcCBpbnQ7IiwKKyAgInByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OyIsCisKKyAgLy8gQ29sb3Jz
IHVzZWQgdG8gc2lnbmFsIGNvcnJlY3RuZXNzIG9mIGNvbXBvbmVudCB2YWx1ZXMgY29tcGFyaXNv
bgorICAiY29uc3QgdmVjNCBncmVlbiA9IHZlYzQoMC4wLCAxLjAsIDAuMCwgMS4wKTsgIiwKKyAg
ImNvbnN0IHZlYzQgcmVkICAgPSB2ZWM0KDEuMCwgMC4wLCAwLjAsIDEuMCk7ICIsCisKKyAgLy8g
RXJyb3IgYm91bmQgdXNlZCBpbiBjb21wYXJpc29uIG9mIGZsb2F0aW5nIHBvaW50IHZhbHVlcwor
ICAiJChlcnJvckJvdW5kKSIsCisKKyAgInZvaWQgbWFpbigpIHsiLAorICAiICAkKGFyZ3NMaXN0
KSIsCisKKyAgIiAgJCh0eXBlKSB2ID0gJCh0eXBlKSgkKGFyZ3NDb25zdHIpKTsiLAorCisgICIg
IGlmICgkKGNoZWNrQ29tcFZhbHMpKSIsCisgICIgICAgZ2xfRnJhZ0NvbG9yID0gZ3JlZW47IiwK
KyAgIiAgZWxzZSIsCisgICIgICAgZ2xfRnJhZ0NvbG9yID0gcmVkOyIsCisgICJ9IgorXS5qb2lu
KCJcbiIpOworCisKKy8vIENvZGluZyBvZiB0aGUgZGlmZmVyZW50IGFyZ3VtZW50IHR5cGVzCisv
LyBzICA6IHNjYWxhcgorLy8gdjIgOiB2ZWMyCisvLyB2MyA6IHZlYzMKKy8vIHY0IDogdmVjNAor
Ly8gbTIgOiBtYXQyCisvLyBtMyA6IG1hdDMKKy8vIG00IDogbWF0NAorCisvLyBSZXR1cm5zIHRo
ZSBkaW1lbnNpb25zIG9mIHRoZSB0eXBlCisvLyBDb3VudCBvZiBjb2x1bW5zLCBjb3VudCBvZiBy
b3dzCitmdW5jdGlvbiBnZXRUeXBlQ29kZURpbWVuc2lvbnModHlwZUNvZGUpIHsKKyAgc3dpdGNo
ICh0eXBlQ29kZSkgeworICAgIGNhc2UgInMiOiAgcmV0dXJuIFsxLCAxXTsKKyAgICBjYXNlICJ2
MiI6IHJldHVybiBbMSwgMl07CisgICAgY2FzZSAidjMiOiByZXR1cm4gWzEsIDNdOworICAgIGNh
c2UgInY0IjogcmV0dXJuIFsxLCA0XTsKKyAgICBjYXNlICJtMiI6IHJldHVybiBbMiwgMl07Cisg
ICAgY2FzZSAibTMiOiByZXR1cm4gWzMsIDNdOworICAgIGNhc2UgIm00IjogcmV0dXJuIFs0LCA0
XTsKKworICAgIGRlZmF1bHQ6CisgICAgICB3dHUuZXJyb3IoIkdMU0xDb25zdHJ1Y3RvclRlc3Rz
R2VuZXJhdG9yLmdldFR5cGVDb2RlRGltZW5zaW9ucygpLCB1bmtub3duIHR5cGUgY29kZSIpOwor
ICAgICAgZGVidWdnZXI7CisgIH0KK307CisKKworLy8gUmV0dXJucyB0aGUgY29tcG9uZW50IGNv
dW50IGZvciB0aGUgdHlwZSBjb2RlCitmdW5jdGlvbiBnZXRUeXBlQ29kZUNvbXBvbmVudENvdW50
KHR5cGVDb2RlKSB7CisgIHZhciBkaW0gPSBnZXRUeXBlQ29kZURpbWVuc2lvbnModHlwZUNvZGUp
OworCisgIHJldHVybiBkaW1bMF0gKiBkaW1bMV07Cit9CisKKworLy8gUmV0dXJucyBnbHNsIG5h
bWUgb2YgdHlwZSBjb2RlCitmdW5jdGlvbiBnZXRHTFNMQmFzZVR5cGVOYW1lKHR5cGVDb2RlKSB7
CisgIHN3aXRjaCh0eXBlQ29kZSkgeworICAgIGNhc2UgInMiOiAgcmV0dXJuICIiOworICAgIGNh
c2UgInYyIjogcmV0dXJuICJ2ZWMyIjsKKyAgICBjYXNlICJ2MyI6IHJldHVybiAidmVjMyI7Cisg
ICAgY2FzZSAidjQiOiByZXR1cm4gInZlYzQiOworICAgIGNhc2UgIm0yIjogcmV0dXJuICJtYXQy
IjsKKyAgICBjYXNlICJtMyI6IHJldHVybiAibWF0MyI7CisgICAgY2FzZSAibTQiOiByZXR1cm4g
Im1hdDQiOworCisgICAgZGVmYXVsdDoKKyAgICAgIHd0dS5lcnJvcigiR0xTTENvbnN0cnVjdG9y
VGVzdHNHZW5lcmF0b3IuZ2V0R0xTTEJhc2VUeXBlTmFtZSgpLCB1bmtub3duIHR5cGUgY29kZSIp
OworICAgICAgZGVidWdnZXI7CisgIH0KK30KKworCisvLyBSZXR1cm5zIHRoZSBzY2FsYXIgZ2xz
bCB0eXBlIG5hbWUgcmVsYXRlZCB0byB0aGUgc3RydWN0dXJlZCB0eXBlCitmdW5jdGlvbiBnZXRH
TFNMU2NhbGFyVHlwZSh0YXJnZXRUeXBlKSB7CisgIHN3aXRjaCh0YXJnZXRUeXBlWzBdKSB7Cisg
ICAgY2FzZSAnaSc6IHJldHVybiAiaW50IjsKKyAgICBjYXNlICdiJzogcmV0dXJuICJib29sIjsK
KworICAgIGNhc2UgJ3YnOgorICAgIGNhc2UgJ20nOgorICAgICAgcmV0dXJuICJmbG9hdCI7CisK
KyAgICBkZWZhdWx0OgorICAgICAgd3R1LmVycm9yKCJHTFNMQ29uc3RydWN0b3JUZXN0c0dlbmVy
YXRvci5nZXRHTFNMU2NhbGFyVHlwZSgpLCB1bmtub3duIHRhcmdldCB0eXBlIik7CisgICAgICBk
ZWJ1Z2dlcjsKKyAgfQorfQorCisKKy8vIFJldHVybnMgdGhlIHNjYWxhciBwcmVmaXggZm9yIHRo
ZSBhc3NvY2lhdGVkIHNjYWxhciB0eXBlCitmdW5jdGlvbiBnZXRHTFNMU2NhbGFyUHJlZml4KHRh
cmdldFR5cGUpIHsKKyAgc3dpdGNoKHRhcmdldFR5cGVbMF0pIHsKKyAgICBjYXNlICdpJzoKKyAg
ICBjYXNlICdiJzoKKyAgICAgIHJldHVybiB0YXJnZXRUeXBlWzBdOworCisgICAgY2FzZSAndic6
CisgICAgY2FzZSAnbSc6CisgICAgICByZXR1cm4gJyc7CisKKyAgICBkZWZhdWx0OgorICAgICAg
d3R1LmVycm9yKCJHTFNMQ29uc3RydWN0b3JUZXN0c0dlbmVyYXRvci5nZXRHTFNMU2NhbGFyUHJl
Zml4KCksIHVua25vd24gdGFyZ2V0IHR5cGUiKTsKKyAgICAgIGRlYnVnZ2VyOworICB9Cit9CisK
KworLy8gUmV0dXJucyB0aGUgdHlwZSBmb3IgYSBzcGVjaWZpZWQgdGFyZ2V0IHR5cGUgYW5kIGFy
Z3VtZW50IHR5cGUgY29kZQorZnVuY3Rpb24gZ2V0R0xTTEFyZ3VtZW50VHlwZSh0eXBlQ29kZSwg
dGFyZ2V0VHlwZSkgeworICB2YXIgYmFzZVR5cGUgPSBnZXRHTFNMQmFzZVR5cGVOYW1lKHR5cGVD
b2RlKTsKKyAgaWYgKGJhc2VUeXBlICE9PSAiIikgeworICAgIGlmICh0eXBlQ29kZVswXSA9PT0g
InYiKSB7CisgICAgICAvLyBWZWN0b3JzIGNvbWUgaW4gZGlmZmVyZW50IGZsYXZvdXJzCisgICAg
ICByZXR1cm4gZ2V0R0xTTFNjYWxhclByZWZpeCh0YXJnZXRUeXBlKSArIGJhc2VUeXBlOworICAg
IH0KKyAgICBlbHNlCisgICAgICByZXR1cm4gYmFzZVR5cGU7CisgIH0KKyAgZWxzZQorICAgIHJl
dHVybiBnZXRHTFNMU2NhbGFyVHlwZSh0YXJnZXRUeXBlKTsKK30KKworCisvLyBSZXR1cm5zIHRo
ZSBnbHNsIHR5cGUgb2YgdGhlIGFyZ3VtZW50IGNvbXBvbmVudHMKK2Z1bmN0aW9uIGdldEdMU0xB
cmd1bWVudENvbXBvbmVudFR5cGUoYXJnVHlwZUNvZGUsIHRhcmdldFR5cGUpIHsKKyAgdmFyIHNj
YWxhclR5cGU7CisKKyAgaWYgKGFyZ1R5cGVDb2RlWzBdID09PSAibSIpIHsKKyAgICAvLyBNYXRy
aWNlcyBhcmUgYWx3YXlzIGZsb2F0cworICAgIHNjYWxhclR5cGUgPSAiZmxvYXQiOworICB9Cisg
IGVsc2UKKyAgICBzY2FsYXJUeXBlID0gZ2V0R0xTTFNjYWxhclR5cGUodGFyZ2V0VHlwZSk7CisK
KyAgcmV0dXJuIHNjYWxhclR5cGU7Cit9CisKKworZnVuY3Rpb24gZ2V0R0xTTENvbHVtblNpemUo
dGFyZ2V0VHlwZSkgeworICBjb2xTaXplID0gcGFyc2VJbnQodGFyZ2V0VHlwZS5zbGljZSgtMSkp
OworCisgIGlmICghaXNOYU4oY29sU2l6ZSkpCisgICAgcmV0dXJuIGNvbFNpemU7CisKKyAgd3R1
LmVycm9yKCJHTFNMQ29uc3RydWN0b3JUZXN0c0dlbmVyYXRvci5nZXRHTFNMQ29sdW1uU2l6ZSgp
LCBpbnZhbGlkIHRhcmdldCB0eXBlIik7CisgICAgZGVidWdnZXI7Cit9CisKKworLy8gUmV0dXJu
cyBjb3JyZWN0IHN0cmluZyByZXByZXNlbnRhdGlvbiBvZiBzY2FsYXIgdmFsdWUKK2Z1bmN0aW9u
IGdldFNjYWxhclR5cGVWYWxTdHIodmFsLCBzY2FsYXJUeXBlKSB7CisgIGlmICh2YWwgPT0gbnVs
bCkKKyAgICBkZWJ1Z2dlcjsKKworICBzd2l0Y2ggKHNjYWxhclR5cGUpIHsKKyAgICBjYXNlICJm
bG9hdCI6IHJldHVybiB2YWwudG9GaXhlZCgxKTsKKyAgICBjYXNlICJpbnQiOiAgIHJldHVybiB2
YWw7CisgICAgY2FzZSAiYm9vbCI6ICByZXR1cm4gKHZhbCA9PT0gMCkgPyAiZmFsc2UiIDogInRy
dWUiOworCisgICAgZGVmYXVsdDoKKyAgICAgIHd0dS5lcnJvcigiR0xTTENvbnN0cnVjdG9yVGVz
dHNHZW5lcmF0b3IuZ2V0U2NhbGFyVHlwZVZhbFN0cigpLCB1bmtub3duIHNjYWxhciB0eXBlIik7
CisgICAgICBkZWJ1Z2dlcjsKKyAgfQorfQorCisKKy8vIFJldHVybnMgdHJ1ZSBpZiB0aGUgZ2xz
bCB0eXBlIG5hbWUgaXMgYSBtYXRyaXgKK2Z1bmN0aW9uIGlzR0xTTFR5cGVNYXRyaXgodHlwZSkg
eworICByZXR1cm4gKHR5cGUuaW5kZXhPZigibWF0IikgIT09IC0xKTsKK30KKworCisvLyBSZXR1
cm5zIHRydWUgaWYgdGhlIGdsc2wgdHlwZSBuYW1lIGlzIGEgdmVjdG9yCitmdW5jdGlvbiBpc0dM
U0xUeXBlVmVjdG9yKHR5cGUpIHsKKyAgcmV0dXJuICh0eXBlLmluZGV4T2YoInZlYyIpICE9PSAt
MSk7Cit9CisKKworLy8gUmV0dXJucyB0aGUgY291bnQgb2YgY29tcG9uZW50cworZnVuY3Rpb24g
Z2V0R0xTTFR5cGVDb21wb25lbnRDb3VudCh0eXBlKSB7CisgIHZhciBjb2xTaXplID0gZ2V0R0xT
TENvbHVtblNpemUodHlwZSk7CisKKyAgaWYgKGlzR0xTTFR5cGVNYXRyaXgodHlwZSkpCisgICAg
cmV0dXJuIGNvbFNpemUgKiBjb2xTaXplOworICBlbHNlCisgICAgcmV0dXJuIGNvbFNpemU7Cit9
CisKKworLy8gUmV0dXJucyB0aGUgY29uc3RydWN0b3IgZXhwcmVzc2lvbiB3aXRoIHRoZSBjb21w
b25lbnRzIHNldCB0byBhIHNlcXVlbmNlIG9mIHNjYWxhciB2YWx1ZXMKKy8vIExpa2UgdmVjMygx
LjAsIDIuMCwgMy4wKQorZnVuY3Rpb24gZ2V0Q29tcG9uZW50U2VxdWVuY2VDb25zdHJ1Y3RvckV4
cHJlc3Npb24odHlwZUNvZGUsIGZpcnN0Q29tcFZhbHVlLCB0YXJnZXRUeXBlKSB7CisgIHZhciBz
Y2FsYXJUeXBlID0gZ2V0R0xTTEFyZ3VtZW50Q29tcG9uZW50VHlwZSh0eXBlQ29kZSwgdGFyZ2V0
VHlwZSk7CisKKyAgaWYgKHR5cGVDb2RlID09PSAicyIpIHsKKyAgICAvLyBTY2FsYXIKKyAgICBy
ZXR1cm4gZ2V0U2NhbGFyVHlwZVZhbFN0cihmaXJzdENvbXBWYWx1ZSwgc2NhbGFyVHlwZSkgKyAi
OyI7CisgIH0KKyAgZWxzZSB7CisgICAgLy8gU3RydWN0dXJlZCB0eXBlYXJnVHlwZUNvZGVbMF0g
PT09ICJtIgorICAgIGNvbXBDb3VudCA9IGdldFR5cGVDb2RlQ29tcG9uZW50Q291bnQodHlwZUNv
ZGUpOworICAgIHZhciBjb25zdHJFeHBQYXJ0cyA9IG5ldyBBcnJheShjb21wQ291bnQpOworICAg
IGZvciAodmFyIGFhID0gMDsgYWEgPCBjb21wQ291bnQ7ICsrYWEpCisgICAgICAgIGNvbnN0ckV4
cFBhcnRzW2FhXSA9IGdldFNjYWxhclR5cGVWYWxTdHIoZmlyc3RDb21wVmFsdWUgKyBhYSwgc2Nh
bGFyVHlwZSk7CisKKyAgICByZXR1cm4gZ2V0R0xTTEFyZ3VtZW50VHlwZSh0eXBlQ29kZSwgdGFy
Z2V0VHlwZSkgKyAiKCIgKyBjb25zdHJFeHBQYXJ0cy5qb2luKCIsICIpICsgIik7IjsKKyAgfQor
fQorCisKKy8vIFJldHVybnMgdGhlIGV4cHJlc3Npb24gdG8gc2VsZWN0IGEgY29tcG9uZW50IG9m
IHRoZSBzdHJ1Y3R1cmVkIHR5cGUKK2Z1bmN0aW9uIGdldENvbXBvbmVudFNlbGVjdG9yRXhwU3Ry
KHRhcmdldFR5cGUsIGNvbXBJeCkgeworICBpZiAoaXNHTFNMVHlwZU1hdHJpeCh0YXJnZXRUeXBl
KSkgeworICAgIHZhciBjb2xSb3dJeCA9IGdldENvbFJvd0luZGV4RnJvbUxpbmVhckluZGV4KGNv
bXBJeCwgZ2V0R0xTTENvbHVtblNpemUodGFyZ2V0VHlwZSkpOworICAgIHJldHVybiAidlsiICsg
Y29sUm93SXguY29sSXggKyAiXVsiICsgY29sUm93SXgucm93SXggKyAiXSI7CisgIH0KKyAgZWxz
ZQorICAgIHJldHVybiAidlsiICsgY29tcEl4ICsgIl0iOworfQorCisKKy8vIFJldHVybnMgZXhw
cmVzc2lvbiB3aGljaCB2YWxpZGF0ZXMgdGhlIGNvbXBvbmVudHMgc2V0IGJ5IHRoZSBjb25zdHJ1
Y3RvciBleHByZXNzaW9uCitmdW5jdGlvbiBnZXRDb21wb25lbnRWYWxpZGF0aW9uRXhwcmVzc2lv
bihyZWZDb21wVmFscywgdGFyZ2V0VHlwZSkgeworICAvLyBFYXJseSBvdXQgZm9yIGludmFsaWQg
YXJndW1lbnRzCisgIGlmIChyZWZDb21wVmFscy5sZW5ndGggPT09IDApCisgICAgcmV0dXJuICJm
YWxzZSI7CisKKyAgdmFyIHNjYWxhclR5cGUgPSBnZXRHTFNMU2NhbGFyVHlwZSh0YXJnZXRUeXBl
KTsKKyAgdmFyIGNoZWNrQ29tcG9uZW50VmFsdWVQYXJ0cyA9IG5ldyBBcnJheShyZWZDb21wVmFs
cy5sZW5ndGgpOworICBmb3IgKHZhciBjYyA9IDA7IGNjIDwgcmVmQ29tcFZhbHMubGVuZ3RoOyAr
K2NjKSB7CisgICAgdmFyIHZhbF9zdHIgPSBnZXRTY2FsYXJUeXBlVmFsU3RyKHJlZkNvbXBWYWxz
W2NjXSwgc2NhbGFyVHlwZSk7CisgICAgdmFyIGNvbXBfc2VsX2V4cCA9IGdldENvbXBvbmVudFNl
bGVjdG9yRXhwU3RyKHRhcmdldFR5cGUsIGNjKTsKKyAgICBpZiAoc2NhbGFyVHlwZSA9PT0gImZs
b2F0IikgeworICAgICAgLy8gQ29tcGFyaXNvbiBvZiBmbG9hdGluZyBwb2ludCB2YWx1ZXMgd2l0
aCBlcnJvciBib3VuZAorICAgICAgY2hlY2tDb21wb25lbnRWYWx1ZVBhcnRzW2NjXSA9ICJhYnMo
IiArIGNvbXBfc2VsX2V4cCArICIgLSAiICsgdmFsX3N0ciArICIpIDw9IGVycm9yQm91bmQiOwor
ICAgIH0KKyAgICBlbHNlIHsKKyAgICAgIC8vIFNpbXBsZSBjb21wYXJpc29uIHRvIGV4cGVjdGVk
IHZhbHVlCisgICAgICBjaGVja0NvbXBvbmVudFZhbHVlUGFydHNbY2NdID0gY29tcF9zZWxfZXhw
ICsgIiA9PSAiICsgdmFsX3N0cjsKKyAgICB9CisgIH0KKworICByZXR1cm4gY2hlY2tDb21wb25l
bnRWYWx1ZVBhcnRzLmpvaW4oIiAmJiAiKTsKK30KKworCisvLyBSZXR1cm5zIHN1YnN0aXR1dGlv
biBwYXJ0cyB0byB0dXJuIHRoZSBzaGFkZXIgdGVtcGxhdGUgaW50byB0ZXN0YWJsZSBzaGFkZXIg
Y29kZQorZnVuY3Rpb24gZ2V0VGVzdFNoYWRlclBhcnRzKHRhcmdldFR5cGUsIGFyZ0V4cCwgZmly
c3RDb21wVmFsdWUpIHsKKyAgLy8gZ2xzbCBjb2RlIG9mIGRlY2xhcmF0aW9ucyBvZiBhcmd1bWVu
dHMKKyAgdmFyIGFyZ3NMaXN0UGFydHMgPSBuZXcgQXJyYXkoYXJnRXhwLmxlbmd0aCk7CisKKyAg
Ly8gZ2xzbCBjb2RlIG9mIGNvbnN0cnVjdG9yIGV4cHJlc3Npb24KKyAgdmFyIGFyZ3NDb25zdHJQ
YXJ0cyA9IG5ldyBBcnJheShhcmdFeHAubGVuZ3RoKTsKKworICAvLyBnbHNsIHR5cGUgZXhwcmVz
c2lvbgorICB2YXIgdHlwZUV4cFBhcnRzID0gbmV3IEFycmF5KGFyZ0V4cC5sZW5ndGgpOworICBm
b3IgKHZhciBhYSA9IDA7IGFhIDwgYXJnRXhwLmxlbmd0aDsgKythYSkgeworICAgIHZhciB0eXBl
Q29kZSAgICAgPSBhcmdFeHBbYWFdOworICAgIHZhciBhcmdDb21wQ291bnQgPSBnZXRUeXBlQ29k
ZUNvbXBvbmVudENvdW50KHR5cGVDb2RlKTsKKyAgICB2YXIgYXJnTmFtZSAgICAgID0gImEiICsg
YWE7CisgICAgdmFyIGFyZ1R5cGUgICAgICA9IGdldEdMU0xBcmd1bWVudFR5cGUodHlwZUNvZGUs
IHRhcmdldFR5cGUpOworICAgIHZhciBhcmdDb25zdHJFeHAgPSBhcmdUeXBlICsgIiAiICsgYXJn
TmFtZSArICIgPSAiICsgZ2V0Q29tcG9uZW50U2VxdWVuY2VDb25zdHJ1Y3RvckV4cHJlc3Npb24o
dHlwZUNvZGUsIGZpcnN0Q29tcFZhbHVlLCB0YXJnZXRUeXBlKTsKKworICAgIC8vIEFkZCBjb25z
dHJ1Y3Rpb24gb2Ygb25lIGFyZ3VtZW50CisgICAgLy8gSW5kZW50IGlmIG5vdCBmaXJzdCBhcmd1
bWVudAorICAgIGFyZ3NMaXN0UGFydHNbYWFdID0gKChhYSA+IDApID8gIiAgIiA6ICIiKSArIGFy
Z0NvbnN0ckV4cDsKKworICAgIC8vIEFkZCBhcmd1bWVudCBuYW1lIHRvIHRhcmdldCB0eXBlIGFy
Z3VtZW50IGxpc3QKKyAgICBhcmdzQ29uc3RyUGFydHNbYWFdID0gYXJnTmFtZTsKKworICAgIC8v
IEFkZCB0eXBlIG5hbWUgdG8gdHlwZSBleHByZXNzaW9uCisgICAgdHlwZUV4cFBhcnRzW2FhXSA9
IGFyZ1R5cGU7CisKKyAgICAvLyBJbmNyZW1lbnQgYXJndW1lbnQgY29tcG9uZW50IHZhbHVlIHNv
IGFsbCBhcmd1bWVudCBjb21wb25lbnQgYXJndW1lbnRzIGhhdmUgYSB1bmlxdWUgdmFsdWUKKyAg
ICBmaXJzdENvbXBWYWx1ZSArPSBhcmdDb21wQ291bnQ7CisgIH0KKworICByZXR1cm4geworICAg
IGFyZ3NMaXN0OiAgIGFyZ3NMaXN0UGFydHMuam9pbigiXG4iKSArICJcbiIsCisgICAgYXJnc0Nv
bnN0cjogYXJnc0NvbnN0clBhcnRzLmpvaW4oIiwgIiksCisgICAgdHlwZUV4cDogICAgdGFyZ2V0
VHlwZSArICIoIiArIHR5cGVFeHBQYXJ0cy5qb2luKCIsICIpICsgIikiCisgIH07Cit9CisKKwor
Ly8gVXRpbGl0eSBmdW5jdGlvbnMgdG8gbWFuaXB1bGF0ZSB0aGUgYXJyYXkgb2YgcmVmZXJlbmNl
IHZhbHVlcworCisvLyBSZXR1cm5zIGFycmF5IGZpbGxlZCB3aXRoIGlkZW50aWNhbCB2YWx1ZXMK
K2Z1bmN0aW9uIGdldEFycmF5V2l0aElkZW50aWNhbFZhbHVlcyhzaXplLCB2YWwpIHsKKyAgdmFy
IG1hdEFycmF5ID0gbmV3IEFycmF5KHNpemUpOworICBmb3IgKHZhciBhYSA9IDA7IGFhIDwgc2l6
ZTsgKythYSkKKyAgICBtYXRBcnJheVthYV0gPSB2YWw7CisKKyAgcmV0dXJuIG1hdEFycmF5Owor
fQorCisKKy8vIFJldHVybnMgYXJyYXkgZmlsbGVkIHdpdGggaW5jcmVhc2luZyB2YWx1ZXMgZnJv
bSBhIHNwZWNpZmllZCBzdGFydCB2YWx1ZQorZnVuY3Rpb24gZ2V0QXJyYXlXaXRoSW5jcmVhc2lu
Z1ZhbHVlcyhzaXplLCBzdGFydCkgeworICB2YXIgbWF0QXJyYXkgPSBuZXcgQXJyYXkoc2l6ZSk7
CisgIGZvciAodmFyIGFhID0gMDsgYWEgPCBzaXplOyArK2FhKQorICAgIG1hdEFycmF5W2FhXSA9
IHN0YXJ0ICsgYWE7CisKKyAgcmV0dXJuIG1hdEFycmF5OworfQorCisKKy8vIFV0aWxpdHkgZnVu
Y3Rpb25zIHRvIG1hbmlwdWxhdGUgdGhlIGFycmF5IG9mIHJlZmVyZW5jZSB2YWx1ZXMgaWYgdGhl
IHRhcmdldCB0eXBlIGlzIGEgbWF0cml4CisKKy8vIFJldHVybnMgYW4gYXJyYXkgd2hpY2ggaXMg
dGhlIGNvbHVtbiBvcmRlciBsYXlvdXQgb2YgYSBzcXVhcmUgbWF0cml4IHdoZXJlIHRoZSBkaWFn
b25hbCBpcyBzZXQgdG8gYSBzcGVjaWZpZWQgdmFsdWUKK2Z1bmN0aW9uIG1hdENvbXBBcnJheVNl
dERpYWdvbmFsKG1hdEFycmF5LCBkaWFnVmFsKSB7CisgIC8vIFRoZSBlbnRyaWVzIGZvciB0aGUg
ZGlhZ29uYWwgc3RhcnQgYXQgYXJyYXkgaW5kZXggMCBhbmQgaW5jcmVhc2UKKyAgLy8gYnkgY29s
dW1uIHNpemUgKyAxCisgIHZhciBjb2xTaXplID0gTWF0aC5yb3VuZChNYXRoLnNxcnQobWF0QXJy
YXkubGVuZ3RoKSk7CisgIHZhciBkSXggPSAwOworICBkbyB7CisgICAgbWF0QXJyYXlbZEl4XSA9
IGRpYWdWYWw7CisgICAgZEl4ICs9IChjb2xTaXplICsgMSk7CisgIH0KKyAgd2hpbGUgKGRJeCA8
IGNvbFNpemUgKiBjb2xTaXplKTsKKworICByZXR1cm4gbWF0QXJyYXk7Cit9CisKKworLy8gUmV0
dXJucyBhbiBhcnJheSB3aGljaCBjb250YWlucyB0aGUgdmFsdWVzIG9mIGFuIGlkZW50aXR5IG1h
dHJpeCByZWFkIG91dCBpbiBjb2x1bW4gb3JkZXIKK2Z1bmN0aW9uIG1hdENvbXBBcnJheUNyZWF0
ZURpYWdvbmFsTWF0cml4KGNvbFNpemUsIGRpYWdWYWwpIHsKKyAgdmFyIHNpemUgPSBjb2xTaXpl
ICogY29sU2l6ZTsKKyAgdmFyIG1hdEFycmF5ID0gbmV3IEFycmF5KHNpemUpOworICBmb3IgKHZh
ciBhYSA9IDA7IGFhIDwgc2l6ZTsgKythYSkKKyAgICBtYXRBcnJheVthYV0gPSAwOworCisgIHJl
dHVybiBtYXRDb21wQXJyYXlTZXREaWFnb25hbChtYXRBcnJheSwgZGlhZ1ZhbCk7Cit9CisKKwor
Ly8gUmV0dXJucyB0aGUgY29sdW1uIGFuZCByb3cgaW5kZXggZnJvbSB0aGUgbGluZWFyIGluZGV4
IGlmIHRoZSBjb21wb25lbnRzIG9mIHRoZSBtYXRyaXggYXJlIHN0b3JlZCBpbiBjb2x1bW4gb3Jk
ZXIgaW4gYW4gYXJyYXkKKy8vIGluIGEgb25lIGRpbWVuc2lvbmFsIGFycmF5IGluIGNvbHVtbiBv
cmRlcgorZnVuY3Rpb24gZ2V0Q29sUm93SW5kZXhGcm9tTGluZWFySW5kZXgobGluSXgsIGNvbFNp
emUpIHsKKyAgcmV0dXJuIHsKKyAgICBjb2xJeDogTWF0aC5mbG9vcihsaW5JeCAvIGNvbFNpemUp
LAorICAgIHJvd0l4OiBsaW5JeCAlIGNvbFNpemUKKyAgfTsKK30KKworCisvLyBSZXR1cm5zIHRo
ZSBsaW5lYXIgaW5kZXggZm9yIG1hdHJpeCBjb2x1bW4gYW5kIHJvdyBpbmRleCBmb3IgYSBzcGVj
aWZpZWQgbWF0cml4IHNpemUKK2Z1bmN0aW9uIGdldExpbmVhckluZGV4RnJvbUNvbFJvd0luZGV4
KHJvd0NvbEl4LCBjb2xTaXplKSB7CisgIHJldHVybiByb3dDb2xJeC5jb2xJeCAqIGNvbFNpemUg
KyByb3dDb2xJeC5yb3dJeDsKK30KKworCisvLyBSZXR1cm5zIGEgbWF0cml4IHNldCBmcm9tIGFu
b3RoZXIgbWF0cml4CitmdW5jdGlvbiBtYXRDb21wQXJyYXlTZXRNYXRyaXhGcm9tTWF0cml4KGRz
dENvbFNpemUsIHNyY01hdEFycmF5KSB7CisgIC8vIE92ZXJ3cml0ZSBjb21wb25lbnRzIGZyb20g
ZGVzdGluYXRpb24gd2l0aCB0aGUgc291cmNlIGNvbXBvbmVudCB2YWx1ZXMgYXQgdGhlIHNhbWUg
Y29sLCByb3cgY29vcmRpbmF0ZXMKKyAgdmFyIGRzdE1hdEFycmF5ID0gbWF0Q29tcEFycmF5Q3Jl
YXRlRGlhZ29uYWxNYXRyaXgoZHN0Q29sU2l6ZSwgMSk7CisKKyAgdmFyIHNyY0NvbFNpemUgPSBN
YXRoLnJvdW5kKE1hdGguc3FydChzcmNNYXRBcnJheS5sZW5ndGgpKTsKKworICBmb3IgKHZhciBj
X2l4ID0gMDsgY19peCA8IHNyY01hdEFycmF5Lmxlbmd0aDsgKytjX2l4KSB7CisgICAgdmFyIHNy
Y01hdEl4ID0gZ2V0Q29sUm93SW5kZXhGcm9tTGluZWFySW5kZXgoY19peCwgc3JjQ29sU2l6ZSk7
CisgICAgaWYgKHNyY01hdEl4LmNvbEl4IDwgZHN0Q29sU2l6ZSAmJiBzcmNNYXRJeC5yb3dJeCA8
IGRzdENvbFNpemUpIHsKKyAgICAgIC8vIFNvdXJjZSBtYXRyaXggY29vcmRpbmF0ZXMgYXJlIHZh
bGlkIGRlc3RpbmF0aW9uIG1hdHJpeCBjb29yZGluYXRlcworICAgICAgZHN0TWF0QXJyYXlbZ2V0
TGluZWFySW5kZXhGcm9tQ29sUm93SW5kZXgoc3JjTWF0SXgsIGRzdENvbFNpemUpXSA9IHNyY01h
dEFycmF5W2NfaXhdOworICAgIH0KKyAgfQorCisgIHJldHVybiBkc3RNYXRBcnJheTsKK30KKwor
CisvLyBSZXR1cm5zIHRoZSBnbHNsIGNvZGUgdG8gdmVyaWZ5IGlmIHRoZSBjb21wb25lbnRzIGFy
ZSBzZXQgY29ycmVjdGx5CisvLyBhbmQgdGhlIG1lc3NhZ2UgdG8gZGlzcGxheSBmb3IgdGhlIHRl
c3QKK2Z1bmN0aW9uIGdldENvbnN0cnVjdG9yRXhwcmVzc2lvbkluZm8odGFyZ2V0VHlwZSwgYXJn
RXhwLCBmaXJzdENvbXBWYWx1ZSkgeworICB2YXIgYXJnQ29tcENvdW50c1N1bSA9IDA7CisgIHZh
ciBhcmdDb21wQ291bnRzID0gbmV3IEFycmF5KGFyZ0V4cC5sZW5ndGgpOworICBmb3IgKHZhciBh
YSA9IDA7IGFhIDwgYXJnRXhwLmxlbmd0aDsgKythYSkgeworICAgIGFyZ0NvbXBDb3VudHNbYWFd
ID0gZ2V0VHlwZUNvZGVDb21wb25lbnRDb3VudChhcmdFeHBbYWFdKTsKKyAgICBhcmdDb21wQ291
bnRzU3VtICs9IGFyZ0NvbXBDb3VudHNbYWFdOworICB9CisKKyAgdmFyIHRhcmdldENvbXBDb3Vu
dCA9IGdldEdMU0xUeXBlQ29tcG9uZW50Q291bnQodGFyZ2V0VHlwZSk7CisKKyAgdmFyIHJlZkNv
bXBWYWxzOworICB2YXIgdGVzdE1zZzsKKyAgdmFyIHZhbGlkOworCisgIGlmIChhcmdDb21wQ291
bnRzU3VtID09PSAwKSB7CisgICAgLy8gQSBjb25zdHJ1Y3RvciBuZWVkcyBhdCBsZWFzdCBvbmUg
YXJndW1lbnQKKyAgICByZWZDb21wVmFscyA9IFtdOworICAgIHRlc3RNc2cgICAgID0gImludmFs
aWQgKG5vIGFyZ3VtZW50cykiOworICAgIHZhbGlkICAgICAgID0gZmFsc2U7CisgIH0KKyAgZWxz
ZSB7CisgICAgaWYgKGlzR0xTTFR5cGVWZWN0b3IodGFyZ2V0VHlwZSkpIHsKKyAgICAgIGlmIChh
cmdDb21wQ291bnRzU3VtID09PSAxKSB7CisgICAgICAgIC8vIE9uZSBzY2FsYXIgYXJndW1lbnQK
KyAgICAgICAgLy8gVmVjdG9yIGNvbnN0cnVjdG9yIHdpdGggb25lIHNjYWxhciBhcmd1bWVudCBz
ZXQgYWxsIGNvbXBvbmVudHMgdG8gdGhlIHNhbWUgdmFsdWUKKyAgICAgICAgcmVmQ29tcFZhbHMg
PSBnZXRBcnJheVdpdGhJZGVudGljYWxWYWx1ZXModGFyZ2V0Q29tcENvdW50LCBmaXJzdENvbXBW
YWx1ZSk7CisgICAgICAgIHRlc3RNc2cgICAgID0gInZhbGlkIChhbGwgY29tcG9uZW50cyBzZXQg
dG8gdGhlIHNhbWUgdmFsdWUpIjsKKyAgICAgICAgdmFsaWQgICAgICAgPSB0cnVlOworICAgICAg
fQorICAgICAgZWxzZSB7CisgICAgICAgIC8vIE5vdCBvbmUgc2NhbGFyIGFyZ3VtZW50CisgICAg
ICAgIGlmIChhcmdDb21wQ291bnRzU3VtIDwgdGFyZ2V0Q29tcENvdW50KSB7CisgICAgICAgICAg
Ly8gTm90IGFsbCBjb21wb25lbnRzIHNldAorICAgICAgICAgIHJlZkNvbXBWYWxzID0gW107Cisg
ICAgICAgICAgdGVzdE1zZyAgICAgPSAiaW52YWxpZCAobm90IGVub3VnaCBhcmd1bWVudHMpIjsK
KyAgICAgICAgICB2YWxpZCAgICAgICA9IGZhbHNlOworICAgICAgICB9CisgICAgICAgIGVsc2Ug
eworICAgICAgICAgIC8vIGFyZ0NvbXBDb3VudHNTdW0gPj0gdGFyZ2V0Q29tcENvdW50CisgICAg
ICAgICAgLy8gQWxsIGNvbXBvbmVudHMgc2V0CisgICAgICAgICAgdmFyIGxhc3RBcmdGaXJzdENv
bXBJeCA9IGFyZ0NvbXBDb3VudHNTdW0gLSBhcmdDb21wQ291bnRzW2FyZ0NvbXBDb3VudHMubGVu
Z3RoIC0gMV07CisKKyAgICAgICAgICBpZiAobGFzdEFyZ0ZpcnN0Q29tcEl4IDwgdGFyZ2V0Q29t
cENvdW50KSB7CisgICAgICAgICAgICAvLyBGaXJzdCBjb21wb25lbnQgb2YgbGFzdCBhcmd1bWVu
dCBpcyB1c2VkCisgICAgICAgICAgICByZWZDb21wVmFscyA9IGdldEFycmF5V2l0aEluY3JlYXNp
bmdWYWx1ZXModGFyZ2V0Q29tcENvdW50LCBmaXJzdENvbXBWYWx1ZSk7CisgICAgICAgICAgICB0
ZXN0TXNnICAgICA9ICJ2YWxpZCI7CisgICAgICAgICAgICB2YWxpZCAgICAgICA9IHRydWU7Cisg
ICAgICAgICAgfQorICAgICAgICAgIGVsc2UgeworICAgICAgICAgICAgLy8gRmlyc3QgY29tcG9u
ZW50IG9mIGxhc3QgYXJndW1lbnQgaXMgbm90IHVzZWQKKyAgICAgICAgICAgIHJlZkNvbXBWYWxz
ID0gW107CisgICAgICAgICAgICB0ZXN0TXNnICAgICA9ICJpbnZhbGlkICh1bnVzZWQgYXJndW1l
bnQpIjsKKyAgICAgICAgICAgIHZhbGlkICAgICAgID0gZmFsc2U7CisgICAgICAgICAgfQorICAg
ICAgICB9CisgICAgICB9CisgICAgfQorICAgIGVsc2UgeworICAgICAgLy8gTWF0cml4IHRhcmdl
dCB0eXBlCisgICAgICBpZiAoYXJnQ29tcENvdW50c1N1bSA9PT0gMSkgeworICAgICAgICAvLyBP
bmUgc2NhbGFyIGFyZ3VtZW50CisgICAgICAgIC8vIE1hdHJpeCBjb25zdHJ1Y3RvcnMgd2l0aCBv
bmUgc2NhbGFyIHNldCBhbGwgY29tcG9uZW50cyBvbiB0aGUgZGlhZ29uYWwgdG8gdGhlIHNhbWUg
dmFsdWUKKyAgICAgICAgLy8gQWxsIG90aGVyIGNvbXBvbmVudHMgYXJlIHNldCB0byB6ZXJvCisg
ICAgICAgIHJlZkNvbXBWYWxzID0gbWF0Q29tcEFycmF5Q3JlYXRlRGlhZ29uYWxNYXRyaXgoTWF0
aC5yb3VuZChNYXRoLnNxcnQodGFyZ2V0Q29tcENvdW50KSksIGZpcnN0Q29tcFZhbHVlKTsKKyAg
ICAgICAgdGVzdE1zZyAgICAgPSAidmFsaWQgKGRpYWdvbmFsIGNvbXBvbmVudHMgc2V0IHRvIHRo
ZSBzYW1lIHZhbHVlLCBvZmYtZGlhZ29uYWwgY29tcG9uZW50cyBzZXQgdG8gemVybykiOworICAg
ICAgICB2YWxpZCAgICAgICA9IHRydWU7CisgICAgICB9CisgICAgICBlbHNlIHsKKyAgICAgICAg
Ly8gTm90IG9uZSBzY2FsYXIgYXJndW1lbnQKKyAgICAgICAgaWYgKGFyZ0V4cC5sZW5ndGggPT09
IDEgJiYgYXJnRXhwWzBdWzBdID09PSAibSIpIHsKKyAgICAgICAgICAvLyBPbmUgc2luZ2xlIG1h
dHJpeCBhcmd1bWVudAorICAgICAgICAgIHZhciBkc3RDb2xTaXplID0gZ2V0R0xTTENvbHVtblNp
emUodGFyZ2V0VHlwZSk7CisgICAgICAgICAgcmVmQ29tcFZhbHMgPSBtYXRDb21wQXJyYXlTZXRN
YXRyaXhGcm9tTWF0cml4KGRzdENvbFNpemUsIGdldEFycmF5V2l0aEluY3JlYXNpbmdWYWx1ZXMo
Z2V0VHlwZUNvZGVDb21wb25lbnRDb3VudChhcmdFeHBbMF0pLCBmaXJzdENvbXBWYWx1ZSkpOwor
ICAgICAgICAgIHRlc3RNc2cgICAgID0gInZhbGlkLCBjb21wb25lbnRzIGF0IGNvcnJlc3BvbmRp
bmcgY29sLCByb3cgaW5kaWNlcyBhcmUgc2V0IGZyb20gYXJndW1lbnQsIG90aGVyIGNvbXBvbmVu
dHMgYXJlIHNldCBmcm9tIGlkZW50aXR5IG1hdHJpeCI7CisgICAgICAgICAgdmFsaWQgICAgICAg
PSB0cnVlOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgIC8vIE1vcmUgdGhh
biBvbmUgYXJndW1lbnQgb3Igb25lIGFyZ3VtZW50IG5vdCBvZiB0eXBlIG1hdHJpeAorICAgICAg
ICAgIC8vIENhbiBiZSB0cmVhdGVkIGluIHRoZSBzYW1lIG1hbm5lcgorICAgICAgICAgIC8vIEFy
Z3VtZW50cyBjYW4gbm90IGJlIG9mIHR5cGUgbWF0cml4CisgICAgICAgICAgdmFyIG1hdEZvdW5k
ID0gZmFsc2U7CisgICAgICAgICAgZm9yICh2YXIgYWEgPSAwOyBhYSA8IGFyZ0V4cC5sZW5ndGg7
ICsrYWEpCisgICAgICAgICAgICBpZiAoYXJnRXhwW2FhXVswXSA9PT0gIm0iKQorICAgICAgICAg
ICAgICBtYXRGb3VuZCA9IHRydWU7CisKKyAgICAgICAgICBpZiAobWF0Rm91bmQpIHsKKyAgICAg
ICAgICAgIHJlZkNvbXBWYWxzID0gW107CisgICAgICAgICAgICB0ZXN0TXNnICAgICA9ICJpbnZh
bGlkLCBhcmd1bWVudCBsaXN0IGdyZWF0ZXIgdGhhbiBvbmUgY29udGFpbnMgbWF0cml4IHR5cGUi
OworICAgICAgICAgICAgdmFsaWQgICAgICAgPSBmYWxzZTsKKyAgICAgICAgICB9CisgICAgICAg
ICAgZWxzZSB7CisgICAgICAgICAgICBpZiAoYXJnQ29tcENvdW50c1N1bSA8IHRhcmdldENvbXBD
b3VudCkgeworICAgICAgICAgICAgICByZWZDb21wVmFscyA9IFtdOworICAgICAgICAgICAgICB0
ZXN0TXNnICAgICA9ICJpbnZhbGlkIChub3QgZW5vdWdoIGFyZ3VtZW50cykiOworICAgICAgICAg
ICAgICB2YWxpZCAgICAgICA9IGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICAgICAgZWxz
ZSB7CisgICAgICAgICAgICAgIC8vIGFyZ0NvbXBDb3VudHNTdW0gPj0gdGFyZ2V0Q29tcENvdW50
CisgICAgICAgICAgICAgIC8vIEFsbCBjb21wb25lbnRzIHNldAorICAgICAgICAgICAgICB2YXIg
bGFzdEFyZ0ZpcnN0Q29tcEl4ID0gYXJnQ29tcENvdW50c1N1bSAtIGFyZ0NvbXBDb3VudHNbYXJn
Q29tcENvdW50cy5sZW5ndGggLSAxXTsKKworICAgICAgICAgICAgICBpZiAobGFzdEFyZ0ZpcnN0
Q29tcEl4IDwgdGFyZ2V0Q29tcENvdW50KSB7CisgICAgICAgICAgICAgICAgLy8gRmlyc3QgY29t
cG9uZW50IG9mIGxhc3QgYXJndW1lbnQgaXMgdXNlZAorICAgICAgICAgICAgICAgIHJlZkNvbXBW
YWxzID0gZ2V0QXJyYXlXaXRoSW5jcmVhc2luZ1ZhbHVlcyh0YXJnZXRDb21wQ291bnQsIGZpcnN0
Q29tcFZhbHVlKTsKKyAgICAgICAgICAgICAgICB0ZXN0TXNnICAgICA9ICJ2YWxpZCI7CisgICAg
ICAgICAgICAgICAgdmFsaWQgICAgICAgPSB0cnVlOworICAgICAgICAgICAgICB9CisgICAgICAg
ICAgICAgIGVsc2UgeworICAgICAgICAgICAgICAgIC8vIEZpcnN0IGNvbXBvbmVudCBvZiBsYXN0
IGFyZ3VtZW50IGlzIG5vdCB1c2VkCisgICAgICAgICAgICAgICAgcmVmQ29tcFZhbHMgPSBbXTsK
KyAgICAgICAgICAgICAgICB0ZXN0TXNnICAgICA9ICJpbnZhbGlkICh1bnVzZWQgYXJndW1lbnQp
IjsKKyAgICAgICAgICAgICAgICB2YWxpZCAgICAgICA9IGZhbHNlOworICAgICAgICAgICAgICB9
CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9CisgICAgICB9CisgICAgfQor
ICB9CisKKyAgLy8gQ2hlY2sgaWYgbm8gY2FzZSBpcyBtaXNzZWQKKyAgaWYgKHRlc3RNc2cgPT0g
bnVsbCB8fCB2YWxpZCA9PSBudWxsKSB7CisgICAgd3R1LmVycm9yKCJHTFNMQ29uc3RydWN0b3JU
ZXN0c0dlbmVyYXRvci5nZXRDb25zdHJ1Y3RvckV4cHJlc3Npb25JbmZvKCksIGluZm8gbm90IHNl
dCIpOworICAgIGRlYnVnZ2VyOworICB9CisKKyAgcmV0dXJuIHsKKyAgICByZWZDb21wVmFsczog
cmVmQ29tcFZhbHMsCisgICAgdGVzdE1zZzogICAgIHRlc3RNc2csCisgICAgdmFsaWQ6ICAgICAg
IHZhbGlkCisgIH07Cit9CisKKworLy8gUmV0dXJucyBhIHZlcnRleCBzaGFkZXIgdGVzdGNhc2Ug
YW5kIGEgZnJhZ21lbnQgc2hhZGVyIHRlc3RjYXNlCitmdW5jdGlvbiBnZXRWZXJ0ZXhBbmRGcmFn
bWVudFNoYWRlclRlc3RDYXNlKHRhcmdldFR5cGUsIGFyZ0V4cCkgeworICB2YXIgZmlyc3RDb21w
VmFsdWUgPSAwOworICBpZiAoaXNHTFNMVHlwZU1hdHJpeCh0YXJnZXRUeXBlKSkgeworICAgIC8v
IFVzZSB2YWx1ZSBkaWZmZXJlbnQgZnJvbSAwIGFuZCAxCisgICAgLy8gMCBhbmQgMSBhcmUgdmFs
dWVzIHVzZWQgYnkgbWF0cml4IGNvbnN0cnVjdGVkIGZyb20gYSBtYXRyaXggb3IgYSBzaW5nbGUg
c2NhbGFyCisgICAgZmlyc3RDb21wVmFsdWUgPSAyOworICB9CisKKyAgdmFyIGFyZ0NvZGUgPSBn
ZXRUZXN0U2hhZGVyUGFydHMgICAgICAgICAgKHRhcmdldFR5cGUsIGFyZ0V4cCwgZmlyc3RDb21w
VmFsdWUpOworICB2YXIgZXhwSW5mbyA9IGdldENvbnN0cnVjdG9yRXhwcmVzc2lvbkluZm8odGFy
Z2V0VHlwZSwgYXJnRXhwLCBmaXJzdENvbXBWYWx1ZSk7CisKKyAgdmFyIHN1YnN0aXR1dGlvbnMg
PSB7CisgICAgdHlwZTogICAgICAgICAgdGFyZ2V0VHlwZSwKKyAgICBlcnJvckJvdW5kOiAgICAo
Z2V0R0xTTFNjYWxhclR5cGUodGFyZ2V0VHlwZSkgPT09ICJmbG9hdCIpID8gImNvbnN0IGZsb2F0
IGVycm9yQm91bmQgPSAxLjBFLTU7IiA6ICIiLAorICAgIGFyZ3NMaXN0OiAgICAgIGFyZ0NvZGUu
YXJnc0xpc3QsCisgICAgYXJnc0NvbnN0cjogICAgYXJnQ29kZS5hcmdzQ29uc3RyLAorICAgIGNo
ZWNrQ29tcFZhbHM6IGdldENvbXBvbmVudFZhbGlkYXRpb25FeHByZXNzaW9uKGV4cEluZm8ucmVm
Q29tcFZhbHMsIHRhcmdldFR5cGUpCisgIH07CisKKyAgcmV0dXJuIFsgeworICAgICAgLy8gVGVz
dCBjb25zdHJ1Y3RvciBhcmd1bWVudCBsaXN0IGluIHZlcnRleCBzaGFkZXIKKyAgICAgIHZTaGFk
ZXJTb3VyY2U6ICB3dHUucmVwbGFjZVBhcmFtcyhjb25zdHJ1Y3RvclZlcnRleFRlbXBsYXRlLCBz
dWJzdGl0dXRpb25zKSwKKyAgICAgIHZTaGFkZXJTdWNjZXNzOiBleHBJbmZvLnZhbGlkLAorICAg
ICAgZlNoYWRlclNvdXJjZTogIHBhc3NUaHJvdWdoQ29sb3JGcmFnbWVudFNoYWRlciwKKyAgICAg
IGZTaGFkZXJTdWNjZXNzOiB0cnVlLAorICAgICAgbGlua1N1Y2Nlc3M6ICAgIGV4cEluZm8udmFs
aWQsCisgICAgICBwYXNzTXNnOiAgICAgICAgIlZlcnRleCBzaGFkZXIgOiAiICsgYXJnQ29kZS50
eXBlRXhwICsgIiwgIiArIGV4cEluZm8udGVzdE1zZywKKyAgICAgIHJlbmRlcjogICAgICAgICBl
eHBJbmZvLnZhbGlkCisgICAgfSwgeworICAgICAgLy8gVGVzdCBjb25zdHJ1Y3RvciBhcmd1bWVu
dCBsaXN0IGluIGZyYWdtZW50IHNoYWRlcgorICAgICAgZlNoYWRlclNvdXJjZTogIHd0dS5yZXBs
YWNlUGFyYW1zKGNvbnN0cnVjdG9yRnJhZ21lbnRUZW1wbGF0ZSwgc3Vic3RpdHV0aW9ucyksCisg
ICAgICBmU2hhZGVyU3VjY2VzczogZXhwSW5mby52YWxpZCwKKyAgICAgIGxpbmtTdWNjZXNzOiAg
ICBleHBJbmZvLnZhbGlkLAorICAgICAgcGFzc01zZzogICAgICAgICJGcmFnbWVudCBzaGFkZXIg
OiAiICsgYXJnQ29kZS50eXBlRXhwICsgIiwgIiArIGV4cEluZm8udGVzdE1zZywKKyAgICAgIHJl
bmRlcjogICAgICAgICBleHBJbmZvLnZhbGlkCisgICAgfQorICBdOworfQorCisKKy8vIEluY3Jl
bWVudGluZyB0aGUgYXJndW1lbnQgZXhwcmVzc2lvbnMKKy8vIFV0aWxpdHkgb2JqZWN0IHdoaWNo
IGRlZmluZXMgdGhlIG9yZGVyIG9mIGluY3JlbWVudGluZyB0aGUgYXJndW1lbnQgdHlwZXMKK3Zh
ciB0eXBlQ29kZUluY3JlbWVudGVyID0geworICBzOiAgICAgeyB0eXBlQ29kZTogInYyIiwgb3Jk
ZXI6IDAgfSwKKyAgdjI6ICAgIHsgdHlwZUNvZGU6ICJ2MyIsIG9yZGVyOiAxIH0sCisgIHYzOiAg
ICB7IHR5cGVDb2RlOiAidjQiLCBvcmRlcjogMiB9LAorICB2NDogICAgeyB0eXBlQ29kZTogIm0y
Iiwgb3JkZXI6IDMgfSwKKyAgbTI6ICAgIHsgdHlwZUNvZGU6ICJtMyIsIG9yZGVyOiA0IH0sCisg
IG0zOiAgICB7IHR5cGVDb2RlOiAibTQiLCBvcmRlcjogNSB9LAorICBtNDogICAgeyB0eXBlQ29k
ZTogInMiLCAgb3JkZXI6IDYgfSwKKyAgZmlyc3Q6ICJzIgorfQorCisKKy8vIFJldHVybnMgdGhl
IG5leHQgYXJndW1lbnQgc2VxdWVuY2UKK2Z1bmN0aW9uIGdldE5leHRBcmd1bWVudFNlcXVlbmNl
KGluU2VxKSB7CisgIHZhciBuZXh0U2VxOworICBpZiAoaW5TZXEubGVuZ3RoID09PSAwKSB7Cisg
ICAgLy8gQ3VycmVudCBhcmd1bWVudCBzZXF1ZW5jZSBpcyBlbXB0eSwgYWRkIGZpcnN0IGFyZ3Vt
ZW50CisgICAgbmV4dFNlcSA9IFt0eXBlQ29kZUluY3JlbWVudGVyLmZpcnN0XTsKKyAgfQorICBl
bHNlIHsKKyAgICBuZXh0U2VxID0gbmV3IEFycmF5KGluU2VxLmxlbmd0aCk7CisgICAgdmFyIG92
ZXJmbG93ID0gdHJ1ZTsKKyAgICBmb3IgKHZhciBhYSA9IDA7IGFhIDwgaW5TZXEubGVuZ3RoOyAr
K2FhKSB7CisgICAgICB2YXIgY3VyckFyZyA9IGluU2VxW2FhXTsKKyAgICAgIGlmIChvdmVyZmxv
dykgeworICAgICAgICAvLyBJbmNyZW1lbnQgdGhlIGN1cnJlbnQgYXJndW1lbnQgdHlwZQorICAg
ICAgICB2YXIgbmV4dEFyZyA9IHR5cGVDb2RlSW5jcmVtZW50ZXJbY3VyckFyZ10udHlwZUNvZGU7
CisgICAgICAgIG5leHRTZXFbYWFdID0gbmV4dEFyZzsKKyAgICAgICAgb3ZlcmZsb3cgPSAobmV4
dEFyZyA9PT0gdHlwZUNvZGVJbmNyZW1lbnRlci5maXJzdCk7CisgICAgICB9CisgICAgICBlbHNl
IHsKKyAgICAgICAgLy8gQ29weSByZW1haW5kZXIgb2Ygc2VxdWVuY2UKKyAgICAgICAgbmV4dFNl
cVthYV0gPSBjdXJyQXJnOworICAgICAgfQorICAgIH0KKworICAgIGlmIChvdmVyZmxvdykgewor
ICAgICAgbmV4dFNlcS5wdXNoKHR5cGVDb2RlSW5jcmVtZW50ZXIuZmlyc3QpOworICAgIH0KKyAg
fQorCisgIHJldHVybiBuZXh0U2VxOworfQorCisKKy8vIFJldHVybnMgdHJ1ZSBpZiB0d28gYXJn
dW1lbnQgZXhwcmVzc2lvbnMgYXJlIGVxdWFsCitmdW5jdGlvbiBhcmVBcmdFeHBFcXVhbChleHBB
LCBleHBCKSB7CisgIGlmIChleHBBLmxlbmd0aCAhPT0gZXhwQi5sZW5ndGgpCisgICAgcmV0dXJu
IGZhbHNlOworCisgIGZvciAodmFyIGFhID0gMDsgYWEgPCBleHBBLmxlbmd0aDsgKythYSkKKyAg
ICBpZiAoZXhwQVthYV0gIT09IGV4cEJbYWFdKQorICAgICAgcmV0dXJuIGZhbHNlOworCisgIHJl
dHVybiB0cnVlOworfQorCisKKy8vIFJldHVybnMgdHJ1ZSBpZiBmaXJzdCBhcmd1bWVudCBleHBy
ZXNzaW9uIGlzIHNtYWxsZXIKKy8vIChjb21lcyBiZWZvcmUgdGhlIHNlY29uZCBvbmUgaW4gaXRl
cmF0aW5nIG9yZGVyKQorLy8gY29tcGFyZWQgdG8gdGhlIHNlY29uZCBhcmd1bWVudCBleHByZXNz
aW9uCitmdW5jdGlvbiBpc0FyZ0V4cFNtYWxsZXJPckVxdWFsKGFyZ0V4cEEsIGFyZ0V4cEIpIHsK
KyAgdmFyIGFMZW4gPSBhcmdFeHBBLmxlbmd0aDsKKyAgdmFyIGJMZW4gPSBhcmdFeHBCLmxlbmd0
aDsKKyAgaWYgKGFMZW4gIT09IGJMZW4pCisgICAgcmV0dXJuIChhTGVuIDwgYkxlbik7CisKKyAg
Ly8gQXJndW1lbnQgdHlwZSBleHByZXNzaW9uIGxlbmd0aHMgYXJlIGVxdWFsCisgIGZvciAodmFy
IGFhID0gYUxlbiAtIDE7IGFhID49IDA7IC0tYWEpIHsKKyAgICB2YXIgYXJnQSA9IGFyZ0V4cEFb
YWFdOworICAgIHZhciBhcmdCID0gYXJnRXhwQlthYV07CisKKyAgICBpZiAoYXJnQSAhPT0gYXJn
QikgeworICAgICAgdmFyIGFPcmRlciA9IHR5cGVDb2RlSW5jcmVtZW50ZXJbYXJnQV0ub3JkZXI7
CisgICAgICB2YXIgYk9yZGVyID0gdHlwZUNvZGVJbmNyZW1lbnRlclthcmdCXS5vcmRlcjsKKyAg
ICAgIGlmIChhT3JkZXIgIT09IGJPcmRlcikKKyAgICAgICAgcmV0dXJuIChhT3JkZXIgPCBiT3Jk
ZXIpOworICAgIH0KKyAgfQorCisgIC8vIEFyZ3VtZW50IHR5cGUgZXhwcmVzc2lvbnMgYXJlIGVx
dWFsCisgIHJldHVybiB0cnVlOworfQorCisKKy8vIFJldHVybnMgdGhlIG5leHQgYXJndW1lbnQg
ZXhwcmVzc2lvbiBmcm9tIHNlcXVlbmNlIHNldAorLy8gUmV0dXJucyBudWxsIGlmIGVuZCBpcyBy
ZWFjaGVkCitmdW5jdGlvbiBnZXROZXh0QXJndW1lbnRFeHByZXNzaW9uKHRlc3RFeHAsIHRlc3RT
ZXQpIHsKKyAgdmFyIHRlc3RJbnRlcnZhbCA9IHRlc3RTZXRbdGVzdEV4cC5peF07CisKKyAgaWYg
KGFyZUFyZ0V4cEVxdWFsKHRlc3RFeHAuYXJnRXhwLCB0ZXN0SW50ZXJ2YWxbMV0pKSB7CisgICAg
Ly8gRW5kIG9mIGN1cnJlbnQgaW50ZXJ2YWwgcmVhY2hlZAorICAgIGlmICh0ZXN0RXhwLml4ID09
PSB0ZXN0U2V0Lmxlbmd0aCAtIDEpIHsKKyAgICAgIC8vIEVuZCBvZiBzZXQgcmVhY2hlZAorICAg
ICAgcmV0dXJuIG51bGw7CisgICAgfQorICAgIGVsc2UgeworICAgICAgLy8gUmV0dXJuIGZpcnN0
IGFyZ3VtZW50IGV4cHJlc3Npb24gb2YgbmV4dCBpbnRlcnZhbAorICAgICAgdmFyIG5leHRJeCA9
IHRlc3RFeHAuaXggKyAxOworICAgICAgcmV0dXJuIHsgaXg6IG5leHRJeCwgYXJnRXhwOiB0ZXN0
U2V0W25leHRJeF1bMF0gfTsKKyAgICB9CisgIH0KKyAgZWxzZSB7CisgICAgLy8gUmV0dXJuIG5l
eHQgZXhwcmVzc2lvbiBpbiBjdXJyZW50IGludGVydmFsCisgICAgcmV0dXJuIHsgaXg6IHRlc3RF
eHAuaXgsIGFyZ0V4cDogZ2V0TmV4dEFyZ3VtZW50U2VxdWVuY2UodGVzdEV4cC5hcmdFeHApIH07
CisgIH0KK30KKworCisvLyBSZXR1cm5zIGFuIGFycmF5IG9mIHRoZSBwYXJ0cyBpbiB0aGUgc3Ry
aW5nIHNlcGFyYXRlZCBieSBjb21tYXMgYW5kIHdpdGggdGhlIHdoaXRlIHNwYWNlIHRyaW1tZWQK
K2Z1bmN0aW9uIGNvbnZlcnRDc3ZUb0FycmF5KHN0cikgeworICAvLyBDaGVja3MgdHlwZSBjb2Rl
cyBpbiBpbnB1dAorICBmdW5jdGlvbiBjaGVja0lucHV0KGVsLCBpeCwgYXJyKSB7CisgICAgdmFy
IHR5cGVDb2RlID0gZWwudHJpbSgpOworICAgIGlmICghKHR5cGVDb2RlIGluIHR5cGVDb2RlSW5j
cmVtZW50ZXIpICYmIHR5cGVDb2RlICE9PSAiZmlyc3QiKSB7CisgICAgICB3dHUuZXJyb3IoIkdM
U0xDb25zdHJ1Y3RvclRlc3RzR2VuZXJhdG9yLmNvbnZlcnRDc3ZUb0FycmF5KCksIHVua25vd24g
dHlwZSBjb2RlIiArIHR5cGVDb2RlKTsKKyAgICAgIGRlYnVnZ2VyOworICAgIH0KKworICAgIGFy
cltpeF0gPSB0eXBlQ29kZTsKKyAgfQorCisgIHZhciBzcEFyciA9IHN0ci5zcGxpdCgiLCIpOwor
CisgIC8vIENvbnZlcnQgZW1wdHkgc3RyaW5nIHRvIGVtcHR5IGFycmF5CisgIGlmIChzcEFyci5s
ZW5ndGggPT09IDEgJiYgc3BBcnJbMF0udHJpbSgpID09PSAiIikKKyAgICBzcEFyciA9IFtdOwor
CisgIHNwQXJyLmZvckVhY2goY2hlY2tJbnB1dCk7CisKKyAgcmV0dXJuIHNwQXJyOworfQorCisK
Ky8vIFByb2Nlc3NlcyB0aGUgc2V0IG9mIHNwZWNpZmllZCB0ZXN0IHNlcXVlbmNlcworZnVuY3Rp
b24gcHJvY2Vzc0lucHV0cyh0ZXN0U2VxdWVuY2VzKSB7CisgIHZhciB0ZXN0U2V0ID0gbmV3IEFy
cmF5KHRlc3RTZXF1ZW5jZXMubGVuZ3RoKTsKKyAgZm9yICh2YXIgdHQgPSAwOyB0dCA8IHRlc3RT
ZXF1ZW5jZXMubGVuZ3RoOyArK3R0KSB7CisgICAgdmFyIGludGVydmFsID0gdGVzdFNlcXVlbmNl
c1t0dF07CisgICAgdmFyIGJvdW5kcyA9IGludGVydmFsLnNwbGl0KCItIik7CisgICAgdmFyIGJl
Z2luID0gY29udmVydENzdlRvQXJyYXkoYm91bmRzWzBdKTsKKyAgICB2YXIgZW5kICAgPSBjb252
ZXJ0Q3N2VG9BcnJheShib3VuZHNbYm91bmRzLmxlbmd0aCAtIDFdKTsKKworICAgIC8vIENoZWNr
IGlmIGludGVydmFsIGlzIHZhbGlkCisgICAgaWYgKCFpc0FyZ0V4cFNtYWxsZXJPckVxdWFsKGJl
Z2luLCBlbmQpKSB7CisgICAgICB3dHUuZXJyb3IoIkdMU0xDb25zdHJ1Y3RvclRlc3RzR2VuZXJh
dG9yLnByb2Nlc3NJbnB1dHMoKSwgaW50ZXJ2YWwgbm90IHZhbGlkIik7CisgICAgICBkZWJ1Z2dl
cjsKKyAgICB9CisKKyAgICB0ZXN0U2V0W3R0XSA9IFsgYmVnaW4sIGVuZCBdOworICB9CisKKyAg
cmV0dXJuIHRlc3RTZXQ7Cit9CisKKworLyoqCisgKiBSZXR1cm5zIGxpc3Qgb2YgdGVzdCBjYXNl
cyBmb3IgdmVjdG9yIHR5cGVzCisgKiBBbGwgY29tYmluYXRpb25zIG9mIGFyZ3VtZW50cyB1cCB0
byBvbmUgdW51c2VkIGFyZ3VtZW50IG9mIG9uZSBjb21wb25lbnQgYXJlIHRlc3RlZAorICogQHBh
cmFtIHt0YXJnZXRUeXBlfSBOYW1lIG9mIHRhcmdldCB0eXBlIHRvIHRlc3QgdGhlIGNvbnN0cnVj
dG9yIGV4cHJlc3Npb25zIG9uCisgKiBAcGFyYW0ge3Rlc3RTZXR9ICAgIFNldCBvZiBpbnRlcnZh
bHMgb2YgYXJndW1lbnQgc2VxdWVuY2VzIHRvIHRlc3QKKyAqLworZnVuY3Rpb24gZ2V0Q29uc3Ry
dWN0b3JUZXN0cyh0YXJnZXRUeXBlLCB0ZXN0U2VxdWVuY2VzKSB7CisgIC8vIExpc3Qgb2YgdGVz
dHMgdG8gcmV0dXJuCisgIHZhciB0ZXN0SW5mb3MgPSBbXTsKKworICAvLyBMaXN0IG9mIGFyZ3Vt
ZW50IHR5cGVzCisgIHZhciB0ZXN0U2V0ID0gcHJvY2Vzc0lucHV0cyh0ZXN0U2VxdWVuY2VzKTsK
KyAgdmFyIHRlc3RFeHAgPSB7IGl4OiAwLCBhcmdFeHA6IHRlc3RTZXRbMF1bMF0gfTsKKworICBk
byB7CisgICAgLy8gQWRkIG9uZSB2ZXJ0ZXggc2hhZGVyIHRlc3QgY2FzZSBhbmQgb25lIGZyYWdt
ZW50IHNoYWRlciB0ZXN0IGNhc2UKKyAgICB0ZXN0SW5mb3MgPSB0ZXN0SW5mb3MuY29uY2F0KGdl
dFZlcnRleEFuZEZyYWdtZW50U2hhZGVyVGVzdENhc2UodGFyZ2V0VHlwZSwgdGVzdEV4cC5hcmdF
eHApKTsKKworICAgIC8vIEdlbmVyYXRlIG5leHQgYXJndW1lbnQgZXhwcmVzc2lvbgorICAgIHRl
c3RFeHAgPSBnZXROZXh0QXJndW1lbnRFeHByZXNzaW9uKHRlc3RFeHAsIHRlc3RTZXQpOworICB9
CisgIHdoaWxlICh0ZXN0RXhwICE9IG51bGwpOworCisgIHJldHVybiB0ZXN0SW5mb3M7Cit9CisK
KworLy8gUmV0dXJucyBkZWZhdWx0IHRlc3QgYXJndW1lbnQgZXhwcmVzc2lvbiBzZXQKKy8vIEZv
ciBkZXRhaWxzIG9uIGlucHV0IGZvcm1hdCA6IHNlZSBib3R0b20gb2YgZmlsZQorZnVuY3Rpb24g
Z2V0RGVmYXVsdFRlc3RTZXQodGFyZ2V0VHlwZSkgeworICBzd2l0Y2godGFyZ2V0VHlwZSkgewor
ICAgIGNhc2UgInZlYzIiOgorICAgIGNhc2UgIml2ZWMyIjoKKyAgICBjYXNlICJidmVjMiI6Cisg
ICAgICByZXR1cm4gWworICAgICAgICAvLyBObyBhcmd1bWVudHMgYW5kIGFsbCBzaW5nbGUgYXJn
dW1lbnQgZXhwcmVzc2lvbnMKKyAgICAgICAgIiAtIG00IiwKKworICAgICAgICAvLyBBbGwgdHdv
IGFyZ3VtZW50IGV4cHJlc3Npb25zIHdpdGggYSBzY2FsYXIgYXMgc2Vjb25kIGFyZ3VtZW50Cisg
ICAgICAgICJzLCBzIC0gbTQsIHMiLAorCisgICAgICAgIC8vIEFsbCB0d28gYXJndW1lbnRzIGV4
cHJlc3Npb25zIHdpdGggYSBzY2FsYXIgYXMgZmlyc3QgYXJndW1lbnQKKyAgICAgICAgInMsIHYy
IiwgInMsIHYzIiwgInMsIHY0IiwgInMsIG0yIiwgInMsIG0zIiwgInMsIG00IiwKKworICAgICAg
ICAvLyBUaHJlZSBhcmd1bWVudCBleHByZXNzaW9uCisgICAgICAgICJzLCBzLCBzIgorICAgICAg
XTsKKworICAgIGNhc2UgInZlYzMiOgorICAgIGNhc2UgIml2ZWMzIjoKKyAgICBjYXNlICJidmVj
MyI6CisgICAgICByZXR1cm4gWworICAgICAgICAvLyBObyBhcmd1bWVudHMgYW5kIGFsbCBzaW5n
bGUgYXJndW1lbnQgZXhwcmVzc2lvbnMKKyAgICAgICAgIiAtIG00IiwKKworICAgICAgICAvLyBB
bGwgdHdvIGFyZ3VtZW50IGV4cHJlc3Npb25zIHdpdGggYSBzY2FsYXIgYXMgc2Vjb25kIGFyZ3Vt
ZW50CisgICAgICAgICJzLCBzIC0gbTQsIHMiLAorCisgICAgICAgIC8vIEFsbCB0d28gYXJndW1l
bnQgZXhwcmVzc2lvbnMgd2l0aCBhIHNjYWxhciBhcyBmaXJzdCBhcmd1bWVudAorICAgICAgICAi
cywgdjIiLCAicywgdjMiLCAicywgdjQiLCAicywgbTIiLCAicywgbTMiLCAicywgbTQiLAorCisg
ICAgICAgIC8vIEFsbCB0aHJlZSBhcmd1bWVudCBleHByZXNzaW9ucyB3aXRoIHR3byBzY2FsYXJz
IGFzIHNlY29uZCBhbmQgdGhpcmQgYXJndW1lbnQKKyAgICAgICAgInMsIHMsIHMgLSBtNCwgcywg
cyIsCisKKyAgICAgICAgLy8gQWxsIHRocmVlIGFyZ3VtZW50IGV4cHJlc3Npb25zIHdpdGggdHdv
IHNjYWxhcnMgYXMgZmlyc3QgYW5kIHNlY29uZCBhcmd1bWVudAorICAgICAgICAicywgcywgdjIi
LCAicywgcywgdjMiLCAicywgcywgdjQiLCAicywgcywgbTIiLCAicywgcywgbTMiLCAicywgcywg
bTQiLAorCisgICAgICAgIC8vIEZvdXIgYXJndW1lbnQgZXhwcmVzc2lvbgorICAgICAgICAicywg
cywgcywgcyIKKyAgICAgIF07CisKKyAgICBjYXNlICJ2ZWM0IjoKKyAgICBjYXNlICJpdmVjNCI6
CisgICAgY2FzZSAiYnZlYzQiOgorICAgIGNhc2UgIm1hdDIiOgorICAgICAgcmV0dXJuIFsKKyAg
ICAgICAgLy8gTm8gYXJndW1lbnRzIGFuZCBhbGwgc2luZ2xlIGFyZ3VtZW50IGV4cHJlc3Npb25z
CisgICAgICAgICIgLSBtNCIsCisKKyAgICAgICAgLy8gQWxsIHR3byBhcmd1bWVudCBleHByZXNz
aW9ucyB3aXRoIGEgc2NhbGFyIGFzIHNlY29uZCBhcmd1bWVudAorICAgICAgICAicywgcyAtIG00
LCBzIiwKKworICAgICAgICAvLyBBbGwgdHdvIGFyZ3VtZW50IGV4cHJlc3Npb25zIHdpdGggYSBz
Y2FsYXIgYXMgZmlyc3QgYXJndW1lbnQKKyAgICAgICAgInMsIHYyIiwgInMsIHYzIiwgInMsIHY0
IiwgInMsIG0yIiwgInMsIG0zIiwgInMsIG00IiwKKworICAgICAgICAvLyBBbGwgdGhyZWUgYXJn
dW1lbnQgZXhwcmVzc2lvbnMgd2l0aCB0d28gc2NhbGFycyBhcyBzZWNvbmQgYW5kIHRoaXJkIGFy
Z3VtZW50CisgICAgICAgICJzLCBzLCBzIC0gbTQsIHMsIHMiLAorCisgICAgICAgIC8vIEFsbCB0
aHJlZSBhcmd1bWVudCBleHByZXNzaW9ucyB3aXRoIHR3byBzY2FsYXJzIGFzIGZpcnN0IGFuZCBz
ZWNvbmQgYXJndW1lbnQKKyAgICAgICAgInMsIHMsIHYyIiwgInMsIHMsIHYzIiwgInMsIHMsIHY0
IiwgInMsIHMsIG0yIiwgInMsIHMsIG0zIiwgInMsIHMsIG00IiwKKworICAgICAgICAvLyBBbGwg
Zm91ciBhcmd1bWVudCBleHByZXNzaW9ucyB3aXRoIHRocmVlIHNjYWxhcnMgYXMgc2Vjb25kLCB0
aGlyZCBhbmQgZm91cnRoIGFyZ3VtZW50CisgICAgICAgICJzLCBzLCBzLCBzIC0gbTQsIHMsIHMs
IHMiLAorCisgICAgICAgIC8vIEFsbCBmb3VyIGFyZ3VtZW50IGV4cHJlc3Npb25zIHdpdGggdGhy
ZWUgc2NhbGFycyBhcyBmaXJzdCwgc2Vjb25kIGFuZCB0aGlyZCBhcmd1bWVudAorICAgICAgICAi
cywgcywgcywgdjIiLCAicywgcywgcywgdjMiLCAicywgcywgcywgdjQiLCAicywgcywgcywgbTIi
LCAicywgcywgcywgbTMiLCAicywgcywgcywgbTQiLAorCisgICAgICAgIC8vIEZpdmUgYXJndW1l
bnQgZXhwcmVzc2lvbgorICAgICAgICAicywgcywgcywgcywgcyIKKyAgICAgIF07CisKKyAgICBj
YXNlICJtYXQzIjoKKyAgICBjYXNlICJtYXQ0IjoKKyAgICAgIHJldHVybiBbCisgICAgICAgIC8v
IE5vIGFyZ3VtZW50cyBhbmQgYWxsIHNpbmdsZSBhcmd1bWVudCBleHByZXNzaW9ucworICAgICAg
ICAiIC0gbTQiLAorCisgICAgICAgIC8vIEFsbCB0d28gYXJndW1lbnQgZXhwcmVzc2lvbnMgd2l0
aCBhIHNjYWxhciBhcyBzZWNvbmQgYXJndW1lbnQKKyAgICAgICAgInMsIHMgLSBtNCwgcyIsCisK
KyAgICAgICAgLy8gQWxsIHR3byBhcmd1bWVudCBleHByZXNzaW9ucyB3aXRoIGEgc2NhbGFyIGFz
IGZpcnN0IGFyZ3VtZW50CisgICAgICAgICJzLCB2MiIsICJzLCB2MyIsICJzLCB2NCIsICJzLCBt
MiIsICJzLCBtMyIsICJzLCBtNCIsCisKKyAgICAgICAgLy8gU2V2ZXJhbCBhcmd1bWVudCBzZXF1
ZW5jZXMKKyAgICAgICAgInY0LCBzLCB2NCIsICJ2NCwgcywgdjMsIHYyIiwgInY0LCB2NCwgdjMs
IHYyIiwgInY0LCB2NCwgdjQsIHY0IiwgInYyLCB2MiwgdjIsIHYyLCB2MiIsICJ2MiwgdjIsIHYy
LCB2MiwgdjIsIHYyLCB2MiwgdjIiLAorICAgICAgICAidjMsIHYzLCB2MyIsICJ2MywgdjMsIHYz
LCBzIiwgInYzLCB2MywgdjMsIHYzLCB2MywgcyIsICJ2MywgdjMsIHYzLCB2MywgdjMsIHMsIHMi
LAorICAgICAgXTsKKyAgfQorfQorCisKKy8vIFJldHVybiBwdWJsaWNzCityZXR1cm4geworICBn
ZXRDb25zdHJ1Y3RvclRlc3RzOiBnZXRDb25zdHJ1Y3RvclRlc3RzLAorICBnZXREZWZhdWx0VGVz
dFNldDogICBnZXREZWZhdWx0VGVzdFNldAorfTsKKworfSgpKTsKKworCisvLyBJbnB1dCBpcyBh
biBhcnJheSBvZiBpbnRlcnZhbHMgb2YgYXJndW1lbnQgdHlwZXMKKy8vIFRoZSBnZW5lcmF0ZWQg
dGVzdCBhcmd1bWVudCBzZXF1ZW5jZXMgYXJlIGZyb20gKGluY2x1ZGluZykgdGhlIGxvd2VyIGlu
dGVydmFsIGJvdW5kYXJ5CisvLyB1bnRpbCAoaW5jbHVkaW5nKSB0aGUgdXBwZXIgYm91bmRhcnkK
Ky8vIENvZGluZyBhbmQgb3JkZXIgb2YgdGhlIGRpZmZlcmVudCBhcmd1bWVudCB0eXBlcyA6Cisv
LyBzICA6IHNjYWxhcgorLy8gdjIgOiB2ZWMyCisvLyB2MyA6IHZlYzMKKy8vIHY0IDogdmVjNAor
Ly8gbTIgOiBtYXQyCisvLyBtMyA6IG1hdDMKKy8vIG00IDogbWF0NAorCisvLyBPbmUgaW50ZXJ2
YWwgaXMgcHV0IGluIG9uZSBzdHJpbmcKKy8vIExvdyBhbmQgaGlnaCBib3VuZCBhcmUgc2VwYXJh
dGVkIGJ5IGEgZGFzaC4KKy8vIElmIHRoZXJlIGlzIG5vIGRhc2ggaXQgaXMgcmVnYXJkZWQgYXMg
YW4gaW50ZXJ2YWwgb2Ygb25lIGV4cHJlc3Npb24KKy8vIFRoZSBpbmRpdmlkdWFsIGFyZ3VtZW50
IGNvZGVzIGFyZSBzZXBhcmF0ZWQgYnkgY29tbWFzCisvLyBUaGUgaW5kaXZpZHVhbCBhcmd1bWVu
dHMgYXJlIGluY3JlbWVudGVkIGZyb20gbGVmdCB0byByaWdodAorLy8gVGhlIGxlZnQgbW9zdCBh
cmd1bWVudCBpcyB0aGUgb25lIHdoaWNoIGlzIGluY3JlbWVudGVkIGZpcnN0CisvLyBPbmNlIHRo
ZSBsZWZ0IG1vc3QgYXJndW1lbnRzIHdyYXBzIHRoZSBzZWNvbmQgYXJndW1lbnQgaXMgaW5jcmVh
c2VkCisvLyBFeGFtcGxlcyA6CisvLyAicyAtIG00IiAgICAgICAgOiBBbGwgc2luZ2xlIGFyZ3Vt
ZW50cyBmcm9tIHNjYWxhciB1cCB0byAoaW5jbHVkaW5nKSBtYXQ0CisvLyAibTIsIHMgLSBtNCwg
cyIgOiBBbGwgdHdvIGFyZ3VtZW50IGV4cHJlc3Npb25zIHdpdGggYSBtYXRyaXggYXJndW1lbnQg
YXMgZmlyc3QgYXJndW1lbnQgYW5kIGEgc2NhbGFyIGFzIHNlY29uZCBhcmd1bWVudAorLy8gIiAt
IG00LCBtNCIgICAgIDogVGhlIGVtcHR5IGFyZ3VtZW50LCBhbGwgb25lIGFyZ3VtZW50cyBhbmQg
YWxsIHR3byBhcmd1bWVudCBleHByZXNzaW9ucworLy8gIm0yLCBzLCB2MywgbTQiIDogT25lIDQg
YXJndW1lbnQgZXhwcmVzc2lvbiA6IG1hdDIsIHNjYWxhciwgdmVjMywgbWF0NApkaWZmIC0tZ2l0
IGEvTGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvanMvZ2xzbC1n
ZW5lcmF0b3IuanMgYi9MYXlvdXRUZXN0cy93ZWJnbC9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxl
cy9qcy9nbHNsLWdlbmVyYXRvci5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5kMGI2NWJjYjRiODcwMTVjYjExNGI5
ZmIyNjkzMjBjN2VhNTg1YTAzCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ2wv
cmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvanMvZ2xzbC1nZW5lcmF0b3IuanMKQEAgLTAsMCAr
MSwxMjM0IEBACisvKgorQ29weXJpZ2h0IChjKSAyMDE5IFRoZSBLaHJvbm9zIEdyb3VwIEluYy4K
K1VzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNl
bnNlIHRoYXQgY2FuIGJlCitmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZS4KKyovCitHTFNM
R2VuZXJhdG9yID0gKGZ1bmN0aW9uKCkgeworCit2YXIgdmVydGV4U2hhZGVyVGVtcGxhdGUgPSBb
CisgICJhdHRyaWJ1dGUgdmVjNCBhUG9zaXRpb247IiwKKyAgIiIsCisgICJ2YXJ5aW5nIHZlYzQg
dkNvbG9yOyIsCisgICIiLAorICAiJChleHRyYSkiLAorICAiJChlbXUpIiwKKyAgIiIsCisgICJ2
b2lkIG1haW4oKSIsCisgICJ7IiwKKyAgIiAgIGdsX1Bvc2l0aW9uID0gYVBvc2l0aW9uOyIsCisg
ICIgICB2ZWMyIHRleGNvb3JkID0gdmVjMihhUG9zaXRpb24ueHkgKiAwLjUgKyB2ZWMyKDAuNSwg
MC41KSk7IiwKKyAgIiAgIHZlYzQgY29sb3IgPSB2ZWM0KCIsCisgICIgICAgICAgdGV4Y29vcmQs
IiwKKyAgIiAgICAgICB0ZXhjb29yZC54ICogdGV4Y29vcmQueSwiLAorICAiICAgICAgICgxLjAg
LSB0ZXhjb29yZC54KSAqIHRleGNvb3JkLnkgKiAwLjUgKyAwLjUpOyIsCisgICIgICAkKHRlc3Qp
IiwKKyAgIn0iCitdLmpvaW4oIlxuIik7CisKK3ZhciBmcmFnbWVudFNoYWRlclRlbXBsYXRlID0g
WworICAicHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7IiwKKyAgIiIsCisgICJ2YXJ5aW5nIHZlYzQg
dkNvbG9yOyIsCisgICIiLAorICAiJChleHRyYSkiLAorICAiJChlbXUpIiwKKyAgIiIsCisgICJ2
b2lkIG1haW4oKSIsCisgICJ7IiwKKyAgIiAgICQodGVzdCkiLAorICAifSIKK10uam9pbigiXG4i
KTsKKwordmFyIGJhc2VWZXJ0ZXhTaGFkZXIgPSBbCisgICJhdHRyaWJ1dGUgdmVjNCBhUG9zaXRp
b247IiwKKyAgIiIsCisgICJ2YXJ5aW5nIHZlYzQgdkNvbG9yOyIsCisgICIiLAorICAidm9pZCBt
YWluKCkiLAorICAieyIsCisgICIgICBnbF9Qb3NpdGlvbiA9IGFQb3NpdGlvbjsiLAorICAiICAg
dmVjMiB0ZXhjb29yZCA9IHZlYzIoYVBvc2l0aW9uLnh5ICogMC41ICsgdmVjMigwLjUsIDAuNSkp
OyIsCisgICIgICB2Q29sb3IgPSB2ZWM0KCIsCisgICIgICAgICAgdGV4Y29vcmQsIiwKKyAgIiAg
ICAgICB0ZXhjb29yZC54ICogdGV4Y29vcmQueSwiLAorICAiICAgICAgICgxLjAgLSB0ZXhjb29y
ZC54KSAqIHRleGNvb3JkLnkgKiAwLjUgKyAwLjUpOyIsCisgICJ9IgorXS5qb2luKCJcbiIpOwor
Cit2YXIgYmFzZVZlcnRleFNoYWRlcldpdGhDb2xvciA9IFsKKyAgImF0dHJpYnV0ZSB2ZWM0IGFQ
b3NpdGlvbjsiLAorICAiYXR0cmlidXRlIHZlYzQgYUNvbG9yOyIsCisgICIiLAorICAidmFyeWlu
ZyB2ZWM0IHZDb2xvcjsiLAorICAiIiwKKyAgInZvaWQgbWFpbigpIiwKKyAgInsiLAorICAiICAg
Z2xfUG9zaXRpb24gPSBhUG9zaXRpb247IiwKKyAgIiAgIHZDb2xvciA9IGFDb2xvcjsiLAorICAi
fSIKK10uam9pbigiXG4iKTsKKwordmFyIGJhc2VGcmFnbWVudFNoYWRlciA9IFsKKyAgInByZWNp
c2lvbiBtZWRpdW1wIGZsb2F0OyIsCisgICJ2YXJ5aW5nIHZlYzQgdkNvbG9yOyIsCisgICIiLAor
ICAidm9pZCBtYWluKCkiLAorICAieyIsCisgICIgICBnbF9GcmFnQ29sb3IgPSB2Q29sb3I7IiwK
KyAgIn0iCitdLmpvaW4oIlxuIik7CisKK3ZhciB0eXBlcyA9IFsKKyAgeyB0eXBlOiAiZmxvYXQi
LAorICAgIGNvZGU6IFsKKyAgICAgICJmbG9hdCAkKGZ1bmMpX2VtdSgkKGFyZ3MpKSB7IiwKKyAg
ICAgICIgIHJldHVybiAkKGZ1bmMpX2Jhc2UoJChiYXNlQXJncykpOyIsCisgICAgICAifSJdLmpv
aW4oIlxuIikKKyAgfSwKKyAgeyB0eXBlOiAidmVjMiIsCisgICAgY29kZTogWworICAgICAgInZl
YzIgJChmdW5jKV9lbXUoJChhcmdzKSkgeyIsCisgICAgICAiICByZXR1cm4gdmVjMigiLAorICAg
ICAgIiAgICAgICQoZnVuYylfYmFzZSgkKGJhc2VBcmdzWCkpLCIsCisgICAgICAiICAgICAgJChm
dW5jKV9iYXNlKCQoYmFzZUFyZ3NZKSkpOyIsCisgICAgICAifSJdLmpvaW4oIlxuIikKKyAgfSwK
KyAgeyB0eXBlOiAidmVjMyIsCisgICAgY29kZTogWworICAgICAgInZlYzMgJChmdW5jKV9lbXUo
JChhcmdzKSkgeyIsCisgICAgICAiICByZXR1cm4gdmVjMygiLAorICAgICAgIiAgICAgICQoZnVu
YylfYmFzZSgkKGJhc2VBcmdzWCkpLCIsCisgICAgICAiICAgICAgJChmdW5jKV9iYXNlKCQoYmFz
ZUFyZ3NZKSksIiwKKyAgICAgICIgICAgICAkKGZ1bmMpX2Jhc2UoJChiYXNlQXJnc1opKSk7IiwK
KyAgICAgICJ9Il0uam9pbigiXG4iKQorICB9LAorICB7IHR5cGU6ICJ2ZWM0IiwKKyAgICBjb2Rl
OiBbCisgICAgICAidmVjNCAkKGZ1bmMpX2VtdSgkKGFyZ3MpKSB7IiwKKyAgICAgICIgIHJldHVy
biB2ZWM0KCIsCisgICAgICAiICAgICAgJChmdW5jKV9iYXNlKCQoYmFzZUFyZ3NYKSksIiwKKyAg
ICAgICIgICAgICAkKGZ1bmMpX2Jhc2UoJChiYXNlQXJnc1kpKSwiLAorICAgICAgIiAgICAgICQo
ZnVuYylfYmFzZSgkKGJhc2VBcmdzWikpLCIsCisgICAgICAiICAgICAgJChmdW5jKV9iYXNlKCQo
YmFzZUFyZ3NXKSkpOyIsCisgICAgICAifSJdLmpvaW4oIlxuIikKKyAgfQorXTsKKwordmFyIGJ2
ZWNUeXBlcyA9IFsKKyAgeyB0eXBlOiAiYnZlYzIiLAorICAgIGNvZGU6IFsKKyAgICAgICJidmVj
MiAkKGZ1bmMpX2VtdSgkKGFyZ3MpKSB7IiwKKyAgICAgICIgIHJldHVybiBidmVjMigiLAorICAg
ICAgIiAgICAgICQoZnVuYylfYmFzZSgkKGJhc2VBcmdzWCkpLCIsCisgICAgICAiICAgICAgJChm
dW5jKV9iYXNlKCQoYmFzZUFyZ3NZKSkpOyIsCisgICAgICAifSJdLmpvaW4oIlxuIikKKyAgfSwK
KyAgeyB0eXBlOiAiYnZlYzMiLAorICAgIGNvZGU6IFsKKyAgICAgICJidmVjMyAkKGZ1bmMpX2Vt
dSgkKGFyZ3MpKSB7IiwKKyAgICAgICIgIHJldHVybiBidmVjMygiLAorICAgICAgIiAgICAgICQo
ZnVuYylfYmFzZSgkKGJhc2VBcmdzWCkpLCIsCisgICAgICAiICAgICAgJChmdW5jKV9iYXNlKCQo
YmFzZUFyZ3NZKSksIiwKKyAgICAgICIgICAgICAkKGZ1bmMpX2Jhc2UoJChiYXNlQXJnc1opKSk7
IiwKKyAgICAgICJ9Il0uam9pbigiXG4iKQorICB9LAorICB7IHR5cGU6ICJidmVjNCIsCisgICAg
Y29kZTogWworICAgICAgInZlYzQgJChmdW5jKV9lbXUoJChhcmdzKSkgeyIsCisgICAgICAiICBy
ZXR1cm4gYnZlYzQoIiwKKyAgICAgICIgICAgICAkKGZ1bmMpX2Jhc2UoJChiYXNlQXJnc1gpKSwi
LAorICAgICAgIiAgICAgICQoZnVuYylfYmFzZSgkKGJhc2VBcmdzWSkpLCIsCisgICAgICAiICAg
ICAgJChmdW5jKV9iYXNlKCQoYmFzZUFyZ3NaKSksIiwKKyAgICAgICIgICAgICAkKGZ1bmMpX2Jh
c2UoJChiYXNlQXJnc1cpKSk7IiwKKyAgICAgICJ9Il0uam9pbigiXG4iKQorICB9CitdOworCit2
YXIgcmVwbGFjZVJFID0gL1wkXCgoXHcrKVwpL2c7CisKK3ZhciByZXBsYWNlUGFyYW1zID0gZnVu
Y3Rpb24oc3RyKSB7CisgIHZhciBhcmdzID0gYXJndW1lbnRzOworICByZXR1cm4gc3RyLnJlcGxh
Y2UocmVwbGFjZVJFLCBmdW5jdGlvbihzdHIsIHAxLCBvZmZzZXQsIHMpIHsKKyAgICBmb3IgKHZh
ciBpaSA9IDE7IGlpIDwgYXJncy5sZW5ndGg7ICsraWkpIHsKKyAgICAgIGlmIChhcmdzW2lpXVtw
MV0gIT09IHVuZGVmaW5lZCkgeworICAgICAgICByZXR1cm4gYXJnc1tpaV1bcDFdOworICAgICAg
fQorICAgIH0KKyAgICB0aHJvdyAidW5rbm93biBzdHJpbmcgcGFyYW0gJyIgKyBwMSArICInIjsK
KyAgfSk7Cit9OworCit2YXIgZ2VuZXJhdGVSZWZlcmVuY2VTaGFkZXIgPSBmdW5jdGlvbigKKyAg
ICBzaGFkZXJJbmZvLCB0ZW1wbGF0ZSwgcGFyYW1zLCB0eXBlSW5mbywgdGVzdCkgeworICB2YXIg
aW5wdXQgPSBzaGFkZXJJbmZvLmlucHV0OworICB2YXIgb3V0cHV0ID0gc2hhZGVySW5mby5vdXRw
dXQ7CisgIHZhciBmZWF0dXJlID0gcGFyYW1zLmZlYXR1cmU7CisgIHZhciB0ZXN0RnVuYyA9IHBh
cmFtcy50ZXN0RnVuYzsKKyAgdmFyIGVtdUZ1bmMgPSBwYXJhbXMuZW11RnVuYyB8fCAiIjsKKyAg
dmFyIGV4dHJhID0gcGFyYW1zLmV4dHJhIHx8ICcnOworICB2YXIgYXJncyA9IHBhcmFtcy5hcmdz
IHx8ICIkKHR5cGUpIHZhbHVlIjsKKyAgdmFyIHR5cGUgPSB0eXBlSW5mby50eXBlOworICB2YXIg
dHlwZUNvZGUgPSB0eXBlSW5mby5jb2RlOworCisgIHZhciBiYXNlQXJncyA9IHBhcmFtcy5iYXNl
QXJncyB8fCAidmFsdWUkKGZpZWxkKSI7CisgIHZhciBiYXNlQXJnc1ggPSByZXBsYWNlUGFyYW1z
KGJhc2VBcmdzLCB7ZmllbGQ6ICIueCJ9KTsKKyAgdmFyIGJhc2VBcmdzWSA9IHJlcGxhY2VQYXJh
bXMoYmFzZUFyZ3MsIHtmaWVsZDogIi55In0pOworICB2YXIgYmFzZUFyZ3NaID0gcmVwbGFjZVBh
cmFtcyhiYXNlQXJncywge2ZpZWxkOiAiLnoifSk7CisgIHZhciBiYXNlQXJnc1cgPSByZXBsYWNl
UGFyYW1zKGJhc2VBcmdzLCB7ZmllbGQ6ICIudyJ9KTsKKyAgdmFyIGJhc2VBcmdzID0gcmVwbGFj
ZVBhcmFtcyhiYXNlQXJncywge2ZpZWxkOiAiIn0pOworCisgIHRlc3QgPSByZXBsYWNlUGFyYW1z
KHRlc3QsIHsKKyAgICBpbnB1dDogaW5wdXQsCisgICAgb3V0cHV0OiBvdXRwdXQsCisgICAgZnVu
YzogZmVhdHVyZSArICJfZW11IgorICB9KTsKKyAgZW11RnVuYyA9IHJlcGxhY2VQYXJhbXMoZW11
RnVuYywgeworICAgIGZ1bmM6IGZlYXR1cmUKKyAgfSk7CisgIGFyZ3MgPSByZXBsYWNlUGFyYW1z
KGFyZ3MsIHsKKyAgICB0eXBlOiB0eXBlCisgIH0pOworICB0eXBlQ29kZSA9IHJlcGxhY2VQYXJh
bXModHlwZUNvZGUsIHsKKyAgICBmdW5jOiBmZWF0dXJlLAorICAgIHR5cGU6IHR5cGUsCisgICAg
YXJnczogYXJncywKKyAgICBiYXNlQXJnczogYmFzZUFyZ3MsCisgICAgYmFzZUFyZ3NYOiBiYXNl
QXJnc1gsCisgICAgYmFzZUFyZ3NZOiBiYXNlQXJnc1ksCisgICAgYmFzZUFyZ3NaOiBiYXNlQXJn
c1osCisgICAgYmFzZUFyZ3NXOiBiYXNlQXJnc1cKKyAgfSk7CisgIHZhciBzaGFkZXIgPSByZXBs
YWNlUGFyYW1zKHRlbXBsYXRlLCB7CisgICAgZXh0cmE6IGV4dHJhLAorICAgIGVtdTogZW11RnVu
YyArICJcblxuIiArIHR5cGVDb2RlLAorICAgIHRlc3Q6IHRlc3QKKyAgfSk7CisgIHJldHVybiBz
aGFkZXI7Cit9OworCit2YXIgZ2VuZXJhdGVUZXN0U2hhZGVyID0gZnVuY3Rpb24oCisgICAgc2hh
ZGVySW5mbywgdGVtcGxhdGUsIHBhcmFtcywgdGVzdCkgeworICB2YXIgaW5wdXQgPSBzaGFkZXJJ
bmZvLmlucHV0OworICB2YXIgb3V0cHV0ID0gc2hhZGVySW5mby5vdXRwdXQ7CisgIHZhciBmZWF0
dXJlID0gcGFyYW1zLmZlYXR1cmU7CisgIHZhciB0ZXN0RnVuYyA9IHBhcmFtcy50ZXN0RnVuYzsK
KyAgdmFyIGV4dHJhID0gcGFyYW1zLmV4dHJhIHx8ICcnOworCisgIHRlc3QgPSByZXBsYWNlUGFy
YW1zKHRlc3QsIHsKKyAgICBpbnB1dDogaW5wdXQsCisgICAgb3V0cHV0OiBvdXRwdXQsCisgICAg
ZnVuYzogZmVhdHVyZQorICB9KTsKKyAgdmFyIHNoYWRlciA9IHJlcGxhY2VQYXJhbXModGVtcGxh
dGUsIHsKKyAgICBleHRyYTogZXh0cmEsCisgICAgZW11OiAnJywKKyAgICB0ZXN0OiB0ZXN0Cisg
IH0pOworICByZXR1cm4gc2hhZGVyOworfTsKKworZnVuY3Rpb24gX3JlcG9ydFJlc3VsdHMocmVm
RGF0YSwgcmVmSW1nLCB0ZXN0RGF0YSwgdGVzdEltZywgdG9sZXJhbmNlLAorICAgICAgICAgICAg
ICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgY3R4LCBpbWdEYXRhLCB3dHUsIGNhbnZhczJkLCBj
b25zb2xlRGl2KSB7CisgIHZhciBzYW1lID0gdHJ1ZTsKKyAgdmFyIGZpcnN0RmFpbHVyZSA9IG51
bGw7CisgIGZvciAodmFyIHl5ID0gMDsgeXkgPCBoZWlnaHQ7ICsreXkpIHsKKyAgICBmb3IgKHZh
ciB4eCA9IDA7IHh4IDwgd2lkdGg7ICsreHgpIHsKKyAgICAgIHZhciBvZmZzZXQgPSAoeXkgKiB3
aWR0aCArIHh4KSAqIDQ7CisgICAgICB2YXIgaW1nT2Zmc2V0ID0gKChoZWlnaHQgLSB5eSAtIDEp
ICogd2lkdGggKyB4eCkgKiA0OworICAgICAgaW1nRGF0YS5kYXRhW2ltZ09mZnNldCArIDBdID0g
MDsKKyAgICAgIGltZ0RhdGEuZGF0YVtpbWdPZmZzZXQgKyAxXSA9IDA7CisgICAgICBpbWdEYXRh
LmRhdGFbaW1nT2Zmc2V0ICsgMl0gPSAwOworICAgICAgaW1nRGF0YS5kYXRhW2ltZ09mZnNldCAr
IDNdID0gMjU1OworICAgICAgaWYgKE1hdGguYWJzKHJlZkRhdGFbb2Zmc2V0ICsgMF0gLSB0ZXN0
RGF0YVtvZmZzZXQgKyAwXSkgPiB0b2xlcmFuY2UgfHwKKyAgICAgICAgICBNYXRoLmFicyhyZWZE
YXRhW29mZnNldCArIDFdIC0gdGVzdERhdGFbb2Zmc2V0ICsgMV0pID4gdG9sZXJhbmNlIHx8Cisg
ICAgICAgICAgTWF0aC5hYnMocmVmRGF0YVtvZmZzZXQgKyAyXSAtIHRlc3REYXRhW29mZnNldCAr
IDJdKSA+IHRvbGVyYW5jZSB8fAorICAgICAgICAgIE1hdGguYWJzKHJlZkRhdGFbb2Zmc2V0ICsg
M10gLSB0ZXN0RGF0YVtvZmZzZXQgKyAzXSkgPiB0b2xlcmFuY2UpIHsKKyAgICAgICAgdmFyIGRl
dGFpbCA9ICdhdCAoJyArIHh4ICsgJywnICsgeXkgKyAnKTogcmVmPSgnICsKKyAgICAgICAgICAg
IHJlZkRhdGFbb2Zmc2V0ICsgMF0gKyAnLCcgKworICAgICAgICAgICAgcmVmRGF0YVtvZmZzZXQg
KyAxXSArICcsJyArCisgICAgICAgICAgICByZWZEYXRhW29mZnNldCArIDJdICsgJywnICsKKyAg
ICAgICAgICAgIHJlZkRhdGFbb2Zmc2V0ICsgM10gKyAnKSAgdGVzdD0oJyArCisgICAgICAgICAg
ICB0ZXN0RGF0YVtvZmZzZXQgKyAwXSArICcsJyArCisgICAgICAgICAgICB0ZXN0RGF0YVtvZmZz
ZXQgKyAxXSArICcsJyArCisgICAgICAgICAgICB0ZXN0RGF0YVtvZmZzZXQgKyAyXSArICcsJyAr
CisgICAgICAgICAgICB0ZXN0RGF0YVtvZmZzZXQgKyAzXSArICcpIHRvbGVyYW5jZT0nICsgdG9s
ZXJhbmNlOworICAgICAgICBjb25zb2xlRGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRl
eHROb2RlKGRldGFpbCkpOworICAgICAgICBjb25zb2xlRGl2LmFwcGVuZENoaWxkKGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2JyJykpOworICAgICAgICBpZiAoIWZpcnN0RmFpbHVyZSkgeworICAg
ICAgICAgIGZpcnN0RmFpbHVyZSA9ICI6ICIgKyBkZXRhaWw7CisgICAgICAgIH0KKyAgICAgICAg
aW1nRGF0YS5kYXRhW2ltZ09mZnNldF0gPSAyNTU7CisgICAgICAgIHNhbWUgPSBmYWxzZTsKKyAg
ICAgIH0KKyAgICB9CisgIH0KKworICB2YXIgZGlmZkltZyA9IG51bGw7CisgIGlmICghc2FtZSkg
eworICAgIGN0eC5wdXRJbWFnZURhdGEoaW1nRGF0YSwgMCwgMCk7CisgICAgZGlmZkltZyA9IHd0
dS5tYWtlSW1hZ2VGcm9tQ2FudmFzKGNhbnZhczJkKTsKKyAgfQorCisgIHZhciBkaXYgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgZGl2LmNsYXNzTmFtZSA9ICJ0ZXN0aW1hZ2Vz
IjsKKyAgd3R1Lmluc2VydEltYWdlKGRpdiwgInJlZiIsIHJlZkltZyk7CisgIHd0dS5pbnNlcnRJ
bWFnZShkaXYsICJ0ZXN0IiwgdGVzdEltZyk7CisgIGlmIChkaWZmSW1nKSB7CisgICAgd3R1Lmlu
c2VydEltYWdlKGRpdiwgImRpZmYiLCBkaWZmSW1nKTsKKyAgfQorICBkaXYuYXBwZW5kQ2hpbGQo
ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnYnInKSk7CisKKyAgY29uc29sZURpdi5hcHBlbmRDaGls
ZChkaXYpOworCisgIGlmICghc2FtZSkgeworICAgIHRlc3RGYWlsZWQoImltYWdlcyBhcmUgZGlm
ZmVyZW50IiArIChmaXJzdEZhaWx1cmUgPyBmaXJzdEZhaWx1cmUgOiAiIikpOworICB9IGVsc2Ug
eworICAgIHRlc3RQYXNzZWQoImltYWdlcyBhcmUgdGhlIHNhbWUiKTsKKyAgfQorCisgIGNvbnNv
bGVEaXYuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaHInKSk7Cit9CisKK3Zh
ciBydW5GZWF0dXJlVGVzdCA9IGZ1bmN0aW9uKHBhcmFtcykgeworICB2YXIgd3R1ID0gV2ViR0xU
ZXN0VXRpbHM7CisgIHZhciBncmlkUmVzID0gcGFyYW1zLmdyaWRSZXM7CisgIHZhciB2ZXJ0ZXhU
b2xlcmFuY2UgPSBwYXJhbXMudG9sZXJhbmNlIHx8IDA7CisgIHZhciBmcmFnbWVudFRvbGVyYW5j
ZSA9IHBhcmFtcy50b2xlcmFuY2UgfHwgMTsKKyAgaWYgKCdmcmFnbWVudFRvbGVyYW5jZScgaW4g
cGFyYW1zKQorICAgIGZyYWdtZW50VG9sZXJhbmNlID0gcGFyYW1zLmZyYWdtZW50VG9sZXJhbmNl
OworCisgIGRlc2NyaXB0aW9uKCJUZXN0aW5nIEdMU0wgZmVhdHVyZTogIiArIHBhcmFtcy5mZWF0
dXJlKTsKKworICB2YXIgd2lkdGggPSAzMjsKKyAgdmFyIGhlaWdodCA9IDMyOworCisgIHZhciBj
b25zb2xlRGl2ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKTsKKyAgdmFyIGNh
bnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpOworICBjYW52YXMud2lkdGgg
PSB3aWR0aDsKKyAgY2FudmFzLmhlaWdodCA9IGhlaWdodDsKKyAgdmFyIGdsID0gd3R1LmNyZWF0
ZTNEQ29udGV4dChjYW52YXMsIHsgcHJlbXVsdGlwbGllZEFscGhhOiBmYWxzZSB9KTsKKyAgaWYg
KCFnbCkgeworICAgIHRlc3RGYWlsZWQoImNvbnRleHQgZG9lcyBub3QgZXhpc3QiKTsKKyAgICBm
aW5pc2hUZXN0KCk7CisgICAgcmV0dXJuOworICB9CisKKyAgdmFyIGNhbnZhczJkID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgnY2FudmFzJyk7CisgIGNhbnZhczJkLndpZHRoID0gd2lkdGg7Cisg
IGNhbnZhczJkLmhlaWdodCA9IGhlaWdodDsKKyAgdmFyIGN0eCA9IGNhbnZhczJkLmdldENvbnRl
eHQoIjJkIik7CisgIHZhciBpbWdEYXRhID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwg
aGVpZ2h0KTsKKworICB2YXIgc2hhZGVySW5mb3MgPSBbCisgICAgeyB0eXBlOiAidmVydGV4IiwK
KyAgICAgIGlucHV0OiAiY29sb3IiLAorICAgICAgb3V0cHV0OiAidkNvbG9yIiwKKyAgICAgIHZl
cnRleFNoYWRlclRlbXBsYXRlOiB2ZXJ0ZXhTaGFkZXJUZW1wbGF0ZSwKKyAgICAgIGZyYWdtZW50
U2hhZGVyVGVtcGxhdGU6IGJhc2VGcmFnbWVudFNoYWRlciwKKyAgICAgIHRvbGVyYW5jZTogdmVy
dGV4VG9sZXJhbmNlCisgICAgfSwKKyAgICB7IHR5cGU6ICJmcmFnbWVudCIsCisgICAgICBpbnB1
dDogInZDb2xvciIsCisgICAgICBvdXRwdXQ6ICJnbF9GcmFnQ29sb3IiLAorICAgICAgdmVydGV4
U2hhZGVyVGVtcGxhdGU6IGJhc2VWZXJ0ZXhTaGFkZXIsCisgICAgICBmcmFnbWVudFNoYWRlclRl
bXBsYXRlOiBmcmFnbWVudFNoYWRlclRlbXBsYXRlLAorICAgICAgdG9sZXJhbmNlOiBmcmFnbWVu
dFRvbGVyYW5jZQorICAgIH0KKyAgXTsKKyAgZm9yICh2YXIgc3MgPSAwOyBzcyA8IHNoYWRlcklu
Zm9zLmxlbmd0aDsgKytzcykgeworICAgIHZhciBzaGFkZXJJbmZvID0gc2hhZGVySW5mb3Nbc3Nd
OworICAgIHZhciB0ZXN0cyA9IHBhcmFtcy50ZXN0czsKKyAgICB2YXIgdGVzdFR5cGVzID0gcGFy
YW1zLmVtdUZ1bmNzIHx8IChwYXJhbXMuYnZlY1Rlc3QgPyBidmVjVHlwZXMgOiB0eXBlcyk7Cisg
ICAgLy8gVGVzdCB2ZXJ0ZXggc2hhZGVycworICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCB0ZXN0
cy5sZW5ndGg7ICsraWkpIHsKKyAgICAgIHZhciB0eXBlID0gdGVzdFR5cGVzW2lpXTsKKyAgICAg
IGlmIChwYXJhbXMuc2ltcGxlRW11KSB7CisgICAgICAgIHR5cGUgPSB7CisgICAgICAgICAgdHlw
ZTogdHlwZS50eXBlLAorICAgICAgICAgIGNvZGU6IHBhcmFtcy5zaW1wbGVFbXUKKyAgICAgICAg
fTsKKyAgICAgIH0KKyAgICAgIGRlYnVnKCIiKTsKKyAgICAgIHZhciBzdHIgPSByZXBsYWNlUGFy
YW1zKHBhcmFtcy50ZXN0RnVuYywgeworICAgICAgICBmdW5jOiBwYXJhbXMuZmVhdHVyZSwKKyAg
ICAgICAgdHlwZTogdHlwZS50eXBlLAorICAgICAgICBhcmcwOiB0eXBlLnR5cGUKKyAgICAgIH0p
OworICAgICAgdmFyIHBhc3NNc2cgPSAiVGVzdGluZzogIiArIHN0ciArICIgaW4gIiArIHNoYWRl
ckluZm8udHlwZSArICIgc2hhZGVyIjsKKyAgICAgIGRlYnVnKHBhc3NNc2cpOworCisgICAgICB2
YXIgcmVmZXJlbmNlVmVydGV4U2hhZGVyU291cmNlID0gZ2VuZXJhdGVSZWZlcmVuY2VTaGFkZXIo
CisgICAgICAgICAgc2hhZGVySW5mbywKKyAgICAgICAgICBzaGFkZXJJbmZvLnZlcnRleFNoYWRl
clRlbXBsYXRlLAorICAgICAgICAgIHBhcmFtcywKKyAgICAgICAgICB0eXBlLAorICAgICAgICAg
IHRlc3RzW2lpXSk7CisgICAgICB2YXIgcmVmZXJlbmNlRnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBn
ZW5lcmF0ZVJlZmVyZW5jZVNoYWRlcigKKyAgICAgICAgICBzaGFkZXJJbmZvLAorICAgICAgICAg
IHNoYWRlckluZm8uZnJhZ21lbnRTaGFkZXJUZW1wbGF0ZSwKKyAgICAgICAgICBwYXJhbXMsCisg
ICAgICAgICAgdHlwZSwKKyAgICAgICAgICB0ZXN0c1tpaV0pOworICAgICAgdmFyIHRlc3RWZXJ0
ZXhTaGFkZXJTb3VyY2UgPSBnZW5lcmF0ZVRlc3RTaGFkZXIoCisgICAgICAgICAgc2hhZGVySW5m
bywKKyAgICAgICAgICBzaGFkZXJJbmZvLnZlcnRleFNoYWRlclRlbXBsYXRlLAorICAgICAgICAg
IHBhcmFtcywKKyAgICAgICAgICB0ZXN0c1tpaV0pOworICAgICAgdmFyIHRlc3RGcmFnbWVudFNo
YWRlclNvdXJjZSA9IGdlbmVyYXRlVGVzdFNoYWRlcigKKyAgICAgICAgICBzaGFkZXJJbmZvLAor
ICAgICAgICAgIHNoYWRlckluZm8uZnJhZ21lbnRTaGFkZXJUZW1wbGF0ZSwKKyAgICAgICAgICBw
YXJhbXMsCisgICAgICAgICAgdGVzdHNbaWldKTsKKworCisgICAgICBkZWJ1ZygiIik7CisgICAg
ICB2YXIgcmVmZXJlbmNlVmVydGV4U2hhZGVyID0gd3R1LmxvYWRTaGFkZXIoZ2wsIHJlZmVyZW5j
ZVZlcnRleFNoYWRlclNvdXJjZSwgZ2wuVkVSVEVYX1NIQURFUiwgdGVzdEZhaWxlZCwgdHJ1ZSwg
J3JlZmVyZW5jZScpOworICAgICAgdmFyIHJlZmVyZW5jZUZyYWdtZW50U2hhZGVyID0gd3R1Lmxv
YWRTaGFkZXIoZ2wsIHJlZmVyZW5jZUZyYWdtZW50U2hhZGVyU291cmNlLCBnbC5GUkFHTUVOVF9T
SEFERVIsIHRlc3RGYWlsZWQsIHRydWUsICdyZWZlcmVuY2UnKTsKKyAgICAgIHZhciB0ZXN0VmVy
dGV4U2hhZGVyID0gd3R1LmxvYWRTaGFkZXIoZ2wsIHRlc3RWZXJ0ZXhTaGFkZXJTb3VyY2UsIGds
LlZFUlRFWF9TSEFERVIsIHRlc3RGYWlsZWQsIHRydWUsICd0ZXN0Jyk7CisgICAgICB2YXIgdGVz
dEZyYWdtZW50U2hhZGVyID0gd3R1LmxvYWRTaGFkZXIoZ2wsIHRlc3RGcmFnbWVudFNoYWRlclNv
dXJjZSwgZ2wuRlJBR01FTlRfU0hBREVSLCB0ZXN0RmFpbGVkLCB0cnVlLCAndGVzdCcpOworICAg
ICAgZGVidWcoIiIpOworCisgICAgICBpZiAocGFyc2VJbnQod3R1LmdldFVybE9wdGlvbnMoKS5k
dW1wU2hhZGVycykpIHsKKyAgICAgICAgdmFyIHZSZWZJbmZvID0geworICAgICAgICAgIHNoYWRl
cjogcmVmZXJlbmNlVmVydGV4U2hhZGVyLAorICAgICAgICAgIHNoYWRlclN1Y2Nlc3M6IHRydWUs
CisgICAgICAgICAgbGFiZWw6ICJyZWZlcmVuY2UgdmVydGV4IHNoYWRlciIsCisgICAgICAgICAg
c291cmNlOiByZWZlcmVuY2VWZXJ0ZXhTaGFkZXJTb3VyY2UKKyAgICAgICAgfTsKKyAgICAgICAg
dmFyIGZSZWZJbmZvID0geworICAgICAgICAgIHNoYWRlcjogcmVmZXJlbmNlRnJhZ21lbnRTaGFk
ZXIsCisgICAgICAgICAgc2hhZGVyU3VjY2VzczogdHJ1ZSwKKyAgICAgICAgICBsYWJlbDogInJl
ZmVyZW5jZSBmcmFnbWVudCBzaGFkZXIiLAorICAgICAgICAgIHNvdXJjZTogcmVmZXJlbmNlRnJh
Z21lbnRTaGFkZXJTb3VyY2UKKyAgICAgICAgfTsKKyAgICAgICAgd3R1LmR1bXBTaGFkZXJzSW5m
byhnbCwgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLCBwYXNzTXNnLCB2UmVmSW5mbywgZlJlZklu
Zm8pOworCisgICAgICAgIHZhciB2VGVzdEluZm8gPSB7CisgICAgICAgICAgc2hhZGVyOiB0ZXN0
VmVydGV4U2hhZGVyLAorICAgICAgICAgIHNoYWRlclN1Y2Nlc3M6IHRydWUsCisgICAgICAgICAg
bGFiZWw6ICJ0ZXN0IHZlcnRleCBzaGFkZXIiLAorICAgICAgICAgIHNvdXJjZTogdGVzdFZlcnRl
eFNoYWRlclNvdXJjZQorICAgICAgICB9OworICAgICAgICB2YXIgZlRlc3RJbmZvID0geworICAg
ICAgICAgIHNoYWRlcjogdGVzdEZyYWdtZW50U2hhZGVyLAorICAgICAgICAgIHNoYWRlclN1Y2Nl
c3M6IHRydWUsCisgICAgICAgICAgbGFiZWw6ICJ0ZXN0IGZyYWdtZW50IHNoYWRlciIsCisgICAg
ICAgICAgc291cmNlOiB0ZXN0RnJhZ21lbnRTaGFkZXJTb3VyY2UKKyAgICAgICAgfTsKKyAgICAg
ICAgd3R1LmR1bXBTaGFkZXJzSW5mbyhnbCwgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLCBwYXNz
TXNnLCB2VGVzdEluZm8sIGZUZXN0SW5mbyk7CisgICAgICB9CisKKyAgICAgIHZhciByZWZEYXRh
ID0gZHJhdygKKyAgICAgICAgICByZWZlcmVuY2VWZXJ0ZXhTaGFkZXIsIHJlZmVyZW5jZUZyYWdt
ZW50U2hhZGVyKTsKKyAgICAgIHZhciByZWZJbWcgPSB3dHUubWFrZUltYWdlRnJvbUNhbnZhcyhj
YW52YXMpOworICAgICAgaWYgKHNzID09IDApIHsKKyAgICAgICAgdmFyIHRlc3REYXRhID0gZHJh
dygKKyAgICAgICAgICAgIHRlc3RWZXJ0ZXhTaGFkZXIsIHJlZmVyZW5jZUZyYWdtZW50U2hhZGVy
KTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHZhciB0ZXN0RGF0YSA9IGRyYXcoCisgICAgICAg
ICAgICByZWZlcmVuY2VWZXJ0ZXhTaGFkZXIsIHRlc3RGcmFnbWVudFNoYWRlcik7CisgICAgICB9
CisgICAgICB2YXIgdGVzdEltZyA9IHd0dS5tYWtlSW1hZ2VGcm9tQ2FudmFzKGNhbnZhcyk7CisK
KyAgICAgIF9yZXBvcnRSZXN1bHRzKHJlZkRhdGEsIHJlZkltZywgdGVzdERhdGEsIHRlc3RJbWcs
IHNoYWRlckluZm8udG9sZXJhbmNlLAorICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdo
dCwgY3R4LCBpbWdEYXRhLCB3dHUsIGNhbnZhczJkLCBjb25zb2xlRGl2KTsKKyAgICB9CisgIH0K
KworICBmaW5pc2hUZXN0KCk7CisKKyAgZnVuY3Rpb24gZHJhdyh2ZXJ0ZXhTaGFkZXIsIGZyYWdt
ZW50U2hhZGVyKSB7CisgICAgdmFyIHByb2dyYW0gPSB3dHUuY3JlYXRlUHJvZ3JhbShnbCwgdmVy
dGV4U2hhZGVyLCBmcmFnbWVudFNoYWRlciwgdGVzdEZhaWxlZCk7CisKKyAgICB2YXIgcG9zTG9j
ID0gZ2wuZ2V0QXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgImFQb3NpdGlvbiIpOworICAgIHd0dS5z
ZXR1cEluZGV4ZWRRdWFkKGdsLCBncmlkUmVzLCBwb3NMb2MpOworCisgICAgZ2wudXNlUHJvZ3Jh
bShwcm9ncmFtKTsKKyAgICB3dHUuY2xlYXJBbmREcmF3SW5kZXhlZFF1YWQoZ2wsIGdyaWRSZXMs
IFswLCAwLCAyNTUsIDI1NV0pOworICAgIHd0dS5nbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VS
Uk9SLCAibm8gZXJyb3JzIGZyb20gZHJhdyIpOworCisgICAgdmFyIGltZyA9IG5ldyBVaW50OEFy
cmF5KHdpZHRoICogaGVpZ2h0ICogNCk7CisgICAgZ2wucmVhZFBpeGVscygwLCAwLCB3aWR0aCwg
aGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBpbWcpOworICAgIHJldHVybiBpbWc7
CisgIH0KKworfTsKKwordmFyIHJ1bkJhc2ljVGVzdCA9IGZ1bmN0aW9uKHBhcmFtcykgeworICB2
YXIgd3R1ID0gV2ViR0xUZXN0VXRpbHM7CisgIHZhciBncmlkUmVzID0gcGFyYW1zLmdyaWRSZXM7
CisgIHZhciB2ZXJ0ZXhUb2xlcmFuY2UgPSBwYXJhbXMudG9sZXJhbmNlIHx8IDA7CisgIHZhciBm
cmFnbWVudFRvbGVyYW5jZSA9IHZlcnRleFRvbGVyYW5jZTsKKyAgaWYgKCdmcmFnbWVudFRvbGVy
YW5jZScgaW4gcGFyYW1zKQorICAgIGZyYWdtZW50VG9sZXJhbmNlID0gcGFyYW1zLmZyYWdtZW50
VG9sZXJhbmNlIHx8IDA7CisKKyAgZGVzY3JpcHRpb24oIlRlc3RpbmcgOiAiICsgZG9jdW1lbnQu
Z2V0RWxlbWVudHNCeVRhZ05hbWUoInRpdGxlIilbMF0uaW5uZXJUZXh0KTsKKworICB2YXIgd2lk
dGggPSAzMjsKKyAgdmFyIGhlaWdodCA9IDMyOworCisgIHZhciBjb25zb2xlRGl2ID0gZG9jdW1l
bnQuZ2V0RWxlbWVudEJ5SWQoImNvbnNvbGUiKTsKKyAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNy
ZWF0ZUVsZW1lbnQoJ2NhbnZhcycpOworICBjYW52YXMud2lkdGggPSB3aWR0aDsKKyAgY2FudmFz
LmhlaWdodCA9IGhlaWdodDsKKyAgdmFyIGdsID0gd3R1LmNyZWF0ZTNEQ29udGV4dChjYW52YXMp
OworICBpZiAoIWdsKSB7CisgICAgdGVzdEZhaWxlZCgiY29udGV4dCBkb2VzIG5vdCBleGlzdCIp
OworICAgIGZpbmlzaFRlc3QoKTsKKyAgICByZXR1cm47CisgIH0KKworICB2YXIgY2FudmFzMmQg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCdjYW52YXMnKTsKKyAgY2FudmFzMmQud2lkdGggPSB3
aWR0aDsKKyAgY2FudmFzMmQuaGVpZ2h0ID0gaGVpZ2h0OworICB2YXIgY3R4ID0gY2FudmFzMmQu
Z2V0Q29udGV4dCgiMmQiKTsKKyAgdmFyIGltZ0RhdGEgPSBjdHguZ2V0SW1hZ2VEYXRhKDAsIDAs
IHdpZHRoLCBoZWlnaHQpOworCisgIHZhciBzaGFkZXJJbmZvcyA9IFsKKyAgICB7IHR5cGU6ICJ2
ZXJ0ZXgiLAorICAgICAgaW5wdXQ6ICJjb2xvciIsCisgICAgICBvdXRwdXQ6ICJ2Q29sb3IiLAor
ICAgICAgdmVydGV4U2hhZGVyVGVtcGxhdGU6IHZlcnRleFNoYWRlclRlbXBsYXRlLAorICAgICAg
ZnJhZ21lbnRTaGFkZXJUZW1wbGF0ZTogYmFzZUZyYWdtZW50U2hhZGVyLAorICAgICAgdG9sZXJh
bmNlOiB2ZXJ0ZXhUb2xlcmFuY2UKKyAgICB9LAorICAgIHsgdHlwZTogImZyYWdtZW50IiwKKyAg
ICAgIGlucHV0OiAidkNvbG9yIiwKKyAgICAgIG91dHB1dDogImdsX0ZyYWdDb2xvciIsCisgICAg
ICB2ZXJ0ZXhTaGFkZXJUZW1wbGF0ZTogYmFzZVZlcnRleFNoYWRlciwKKyAgICAgIGZyYWdtZW50
U2hhZGVyVGVtcGxhdGU6IGZyYWdtZW50U2hhZGVyVGVtcGxhdGUsCisgICAgICB0b2xlcmFuY2U6
IGZyYWdtZW50VG9sZXJhbmNlCisgICAgfQorICBdOworICBmb3IgKHZhciBzcyA9IDA7IHNzIDwg
c2hhZGVySW5mb3MubGVuZ3RoOyArK3NzKSB7CisgICAgdmFyIHNoYWRlckluZm8gPSBzaGFkZXJJ
bmZvc1tzc107CisgICAgdmFyIHRlc3RzID0gcGFyYW1zLnRlc3RzOworLy8gICAgdmFyIHRlc3RU
eXBlcyA9IHBhcmFtcy5lbXVGdW5jcyB8fCAocGFyYW1zLmJ2ZWNUZXN0ID8gYnZlY1R5cGVzIDog
dHlwZXMpOworICAgIC8vIFRlc3QgdmVydGV4IHNoYWRlcnMKKyAgICBmb3IgKHZhciBpaSA9IDA7
IGlpIDwgdGVzdHMubGVuZ3RoOyArK2lpKSB7CisgICAgICB2YXIgdGVzdCA9IHRlc3RzW2lpXTsK
KyAgICAgIGRlYnVnKCIiKTsKKyAgICAgIHZhciBwYXNzTXNnID0gIlRlc3Rpbmc6ICIgKyB0ZXN0
Lm5hbWUgKyAiIGluICIgKyBzaGFkZXJJbmZvLnR5cGUgKyAiIHNoYWRlciI7CisgICAgICBkZWJ1
ZyhwYXNzTXNnKTsKKworICAgICAgZnVuY3Rpb24gZ2VuU2hhZGVyKHNoYWRlckluZm8sIHRlbXBs
YXRlLCBzaGFkZXIsIHN1YnMpIHsKKyAgICAgICAgc2hhZGVyID0gcmVwbGFjZVBhcmFtcyhzaGFk
ZXIsIHN1YnMsIHsKKyAgICAgICAgICAgIGlucHV0OiBzaGFkZXJJbmZvLmlucHV0LAorICAgICAg
ICAgICAgb3V0cHV0OiBzaGFkZXJJbmZvLm91dHB1dAorICAgICAgICAgIH0pOworICAgICAgICBz
aGFkZXIgPSByZXBsYWNlUGFyYW1zKHRlbXBsYXRlLCBzdWJzLCB7CisgICAgICAgICAgICB0ZXN0
OiBzaGFkZXIsCisgICAgICAgICAgICBlbXU6ICIiLAorICAgICAgICAgICAgZXh0cmE6ICIiCisg
ICAgICAgICAgfSk7CisgICAgICAgIHJldHVybiBzaGFkZXI7CisgICAgICB9CisKKyAgICAgIHZh
ciByZWZlcmVuY2VWZXJ0ZXhTaGFkZXJTb3VyY2UgPSBnZW5TaGFkZXIoCisgICAgICAgICAgc2hh
ZGVySW5mbywKKyAgICAgICAgICBzaGFkZXJJbmZvLnZlcnRleFNoYWRlclRlbXBsYXRlLAorICAg
ICAgICAgIHRlc3QucmVmZXJlbmNlLnNoYWRlciwKKyAgICAgICAgICB0ZXN0LnJlZmVyZW5jZS5z
dWJzKTsKKyAgICAgIHZhciByZWZlcmVuY2VGcmFnbWVudFNoYWRlclNvdXJjZSA9IGdlblNoYWRl
cigKKyAgICAgICAgICBzaGFkZXJJbmZvLAorICAgICAgICAgIHNoYWRlckluZm8uZnJhZ21lbnRT
aGFkZXJUZW1wbGF0ZSwKKyAgICAgICAgICB0ZXN0LnJlZmVyZW5jZS5zaGFkZXIsCisgICAgICAg
ICAgdGVzdC5yZWZlcmVuY2Uuc3Vicyk7CisgICAgICB2YXIgdGVzdFZlcnRleFNoYWRlclNvdXJj
ZSA9IGdlblNoYWRlcigKKyAgICAgICAgICBzaGFkZXJJbmZvLAorICAgICAgICAgIHNoYWRlcklu
Zm8udmVydGV4U2hhZGVyVGVtcGxhdGUsCisgICAgICAgICAgdGVzdC50ZXN0LnNoYWRlciwKKyAg
ICAgICAgICB0ZXN0LnRlc3Quc3Vicyk7CisgICAgICB2YXIgdGVzdEZyYWdtZW50U2hhZGVyU291
cmNlID0gZ2VuU2hhZGVyKAorICAgICAgICAgIHNoYWRlckluZm8sCisgICAgICAgICAgc2hhZGVy
SW5mby5mcmFnbWVudFNoYWRlclRlbXBsYXRlLAorICAgICAgICAgIHRlc3QudGVzdC5zaGFkZXIs
CisgICAgICAgICAgdGVzdC50ZXN0LnN1YnMpOworCisgICAgICBkZWJ1ZygiIik7CisgICAgICB2
YXIgcmVmZXJlbmNlVmVydGV4U2hhZGVyID0gd3R1LmxvYWRTaGFkZXIoZ2wsIHJlZmVyZW5jZVZl
cnRleFNoYWRlclNvdXJjZSwgZ2wuVkVSVEVYX1NIQURFUiwgdGVzdEZhaWxlZCwgdHJ1ZSwgJ3Jl
ZmVyZW5jZScpOworICAgICAgdmFyIHJlZmVyZW5jZUZyYWdtZW50U2hhZGVyID0gd3R1LmxvYWRT
aGFkZXIoZ2wsIHJlZmVyZW5jZUZyYWdtZW50U2hhZGVyU291cmNlLCBnbC5GUkFHTUVOVF9TSEFE
RVIsIHRlc3RGYWlsZWQsIHRydWUsICdyZWZlcmVuY2UnKTsKKyAgICAgIHZhciB0ZXN0VmVydGV4
U2hhZGVyID0gd3R1LmxvYWRTaGFkZXIoZ2wsIHRlc3RWZXJ0ZXhTaGFkZXJTb3VyY2UsIGdsLlZF
UlRFWF9TSEFERVIsIHRlc3RGYWlsZWQsIHRydWUsICd0ZXN0Jyk7CisgICAgICB2YXIgdGVzdEZy
YWdtZW50U2hhZGVyID0gd3R1LmxvYWRTaGFkZXIoZ2wsIHRlc3RGcmFnbWVudFNoYWRlclNvdXJj
ZSwgZ2wuRlJBR01FTlRfU0hBREVSLCB0ZXN0RmFpbGVkLCB0cnVlLCAndGVzdCcpOworICAgICAg
ZGVidWcoIiIpOworCisgICAgICBpZiAocGFyc2VJbnQod3R1LmdldFVybE9wdGlvbnMoKS5kdW1w
U2hhZGVycykpIHsKKyAgICAgICAgdmFyIHZSZWZJbmZvID0geworICAgICAgICAgIHNoYWRlcjog
cmVmZXJlbmNlVmVydGV4U2hhZGVyLAorICAgICAgICAgIHNoYWRlclN1Y2Nlc3M6IHRydWUsCisg
ICAgICAgICAgbGFiZWw6ICJyZWZlcmVuY2UgdmVydGV4IHNoYWRlciIsCisgICAgICAgICAgc291
cmNlOiByZWZlcmVuY2VWZXJ0ZXhTaGFkZXJTb3VyY2UKKyAgICAgICAgfTsKKyAgICAgICAgdmFy
IGZSZWZJbmZvID0geworICAgICAgICAgIHNoYWRlcjogcmVmZXJlbmNlRnJhZ21lbnRTaGFkZXIs
CisgICAgICAgICAgc2hhZGVyU3VjY2VzczogdHJ1ZSwKKyAgICAgICAgICBsYWJlbDogInJlZmVy
ZW5jZSBmcmFnbWVudCBzaGFkZXIiLAorICAgICAgICAgIHNvdXJjZTogcmVmZXJlbmNlRnJhZ21l
bnRTaGFkZXJTb3VyY2UKKyAgICAgICAgfTsKKyAgICAgICAgd3R1LmR1bXBTaGFkZXJzSW5mbyhn
bCwgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLCBwYXNzTXNnLCB2UmVmSW5mbywgZlJlZkluZm8p
OworCisgICAgICAgIHZhciB2VGVzdEluZm8gPSB7CisgICAgICAgICAgc2hhZGVyOiB0ZXN0VmVy
dGV4U2hhZGVyLAorICAgICAgICAgIHNoYWRlclN1Y2Nlc3M6IHRydWUsCisgICAgICAgICAgbGFi
ZWw6ICJ0ZXN0IHZlcnRleCBzaGFkZXIiLAorICAgICAgICAgIHNvdXJjZTogdGVzdFZlcnRleFNo
YWRlclNvdXJjZQorICAgICAgICB9OworICAgICAgICB2YXIgZlRlc3RJbmZvID0geworICAgICAg
ICAgIHNoYWRlcjogdGVzdEZyYWdtZW50U2hhZGVyLAorICAgICAgICAgIHNoYWRlclN1Y2Nlc3M6
IHRydWUsCisgICAgICAgICAgbGFiZWw6ICJ0ZXN0IGZyYWdtZW50IHNoYWRlciIsCisgICAgICAg
ICAgc291cmNlOiB0ZXN0RnJhZ21lbnRTaGFkZXJTb3VyY2UKKyAgICAgICAgfTsKKyAgICAgICAg
d3R1LmR1bXBTaGFkZXJzSW5mbyhnbCwgd2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLCBwYXNzTXNn
LCB2VGVzdEluZm8sIGZUZXN0SW5mbyk7CisgICAgICB9CisKKyAgICAgIHZhciByZWZEYXRhID0g
ZHJhdyhyZWZlcmVuY2VWZXJ0ZXhTaGFkZXIsIHJlZmVyZW5jZUZyYWdtZW50U2hhZGVyKTsKKyAg
ICAgIHZhciByZWZJbWcgPSB3dHUubWFrZUltYWdlRnJvbUNhbnZhcyhjYW52YXMpOworICAgICAg
aWYgKHNzID09IDApIHsKKyAgICAgICAgdmFyIHRlc3REYXRhID0gZHJhdyh0ZXN0VmVydGV4U2hh
ZGVyLCByZWZlcmVuY2VGcmFnbWVudFNoYWRlcik7CisgICAgICB9IGVsc2UgeworICAgICAgICB2
YXIgdGVzdERhdGEgPSBkcmF3KHJlZmVyZW5jZVZlcnRleFNoYWRlciwgdGVzdEZyYWdtZW50U2hh
ZGVyKTsKKyAgICAgIH0KKyAgICAgIHZhciB0ZXN0SW1nID0gd3R1Lm1ha2VJbWFnZUZyb21DYW52
YXMoY2FudmFzKTsKKworICAgICAgX3JlcG9ydFJlc3VsdHMocmVmRGF0YSwgcmVmSW1nLCB0ZXN0
RGF0YSwgdGVzdEltZywgc2hhZGVySW5mby50b2xlcmFuY2UsCisgICAgICAgICAgICAgICAgICAg
ICB3aWR0aCwgaGVpZ2h0LCBjdHgsIGltZ0RhdGEsIHd0dSwgY2FudmFzMmQsIGNvbnNvbGVEaXYp
OworICAgIH0KKyAgfQorCisgIGZpbmlzaFRlc3QoKTsKKworICBmdW5jdGlvbiBkcmF3KHZlcnRl
eFNoYWRlciwgZnJhZ21lbnRTaGFkZXIpIHsKKyAgICB2YXIgcHJvZ3JhbSA9IHd0dS5jcmVhdGVQ
cm9ncmFtKGdsLCB2ZXJ0ZXhTaGFkZXIsIGZyYWdtZW50U2hhZGVyLCB0ZXN0RmFpbGVkKTsKKwor
ICAgIHZhciBwb3NMb2MgPSBnbC5nZXRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAiYVBvc2l0aW9u
Iik7CisgICAgd3R1LnNldHVwSW5kZXhlZFF1YWQoZ2wsIGdyaWRSZXMsIHBvc0xvYyk7CisKKyAg
ICBnbC51c2VQcm9ncmFtKHByb2dyYW0pOworICAgIHd0dS5jbGVhckFuZERyYXdJbmRleGVkUXVh
ZChnbCwgZ3JpZFJlcywgWzAsIDAsIDI1NSwgMjU1XSk7CisgICAgd3R1LmdsRXJyb3JTaG91bGRC
ZShnbCwgZ2wuTk9fRVJST1IsICJubyBlcnJvcnMgZnJvbSBkcmF3Iik7CisKKyAgICB2YXIgaW1n
ID0gbmV3IFVpbnQ4QXJyYXkod2lkdGggKiBoZWlnaHQgKiA0KTsKKyAgICBnbC5yZWFkUGl4ZWxz
KDAsIDAsIHdpZHRoLCBoZWlnaHQsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGltZyk7Cisg
ICAgcmV0dXJuIGltZzsKKyAgfQorCit9OworCit2YXIgcnVuUmVmZXJlbmNlSW1hZ2VUZXN0ID0g
ZnVuY3Rpb24ocGFyYW1zKSB7CisgIHZhciB3dHUgPSBXZWJHTFRlc3RVdGlsczsKKyAgdmFyIGdy
aWRSZXMgPSBwYXJhbXMuZ3JpZFJlczsKKyAgdmFyIHZlcnRleFRvbGVyYW5jZSA9IHBhcmFtcy50
b2xlcmFuY2UgfHwgMDsKKyAgdmFyIGZyYWdtZW50VG9sZXJhbmNlID0gdmVydGV4VG9sZXJhbmNl
OworICBpZiAoJ2ZyYWdtZW50VG9sZXJhbmNlJyBpbiBwYXJhbXMpCisgICAgZnJhZ21lbnRUb2xl
cmFuY2UgPSBwYXJhbXMuZnJhZ21lbnRUb2xlcmFuY2UgfHwgMDsKKworICBkZXNjcmlwdGlvbigi
VGVzdGluZyBHTFNMIGZlYXR1cmU6ICIgKyBwYXJhbXMuZmVhdHVyZSk7CisKKyAgdmFyIHdpZHRo
ID0gMzI7CisgIHZhciBoZWlnaHQgPSAzMjsKKworICB2YXIgY29uc29sZURpdiA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIik7CisgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVh
dGVFbGVtZW50KCdjYW52YXMnKTsKKyAgY2FudmFzLndpZHRoID0gd2lkdGg7CisgIGNhbnZhcy5o
ZWlnaHQgPSBoZWlnaHQ7CisgIHZhciBnbCA9IHd0dS5jcmVhdGUzRENvbnRleHQoY2FudmFzLCB7
IGFudGlhbGlhczogZmFsc2UsIHByZW11bHRpcGxpZWRBbHBoYTogZmFsc2UgfSk7CisgIGlmICgh
Z2wpIHsKKyAgICB0ZXN0RmFpbGVkKCJjb250ZXh0IGRvZXMgbm90IGV4aXN0Iik7CisgICAgZmlu
aXNoVGVzdCgpOworICAgIHJldHVybjsKKyAgfQorCisgIHZhciBjYW52YXMyZCA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoJ2NhbnZhcycpOworICBjYW52YXMyZC53aWR0aCA9IHdpZHRoOworICBj
YW52YXMyZC5oZWlnaHQgPSBoZWlnaHQ7CisgIHZhciBjdHggPSBjYW52YXMyZC5nZXRDb250ZXh0
KCIyZCIpOworICB2YXIgaW1nRGF0YSA9IGN0eC5nZXRJbWFnZURhdGEoMCwgMCwgd2lkdGgsIGhl
aWdodCk7CisKKyAgLy8gU3RhdGUgZm9yIHJlZmVyZW5jZSBpbWFnZXMgZm9yIHZlcnRleCBzaGFk
ZXIgdGVzdHMuCisgIC8vIFRoZXNlIGFyZSBkcmF3biB3aXRoIHRoZSBzYW1lIHRlc3NlbGxhdGVk
IGdyaWQgYXMgdGhlIHRlc3QgdmVydGV4CisgIC8vIHNoYWRlciBzbyB0aGF0IHRoZSBpbnRlcnBv
bGF0aW9uIGlzIGlkZW50aWNhbC4gVGhlIGdyaWQgaXMgcmV1c2VkCisgIC8vIGZyb20gdGVzdCB0
byB0ZXN0OyB0aGUgY29sb3JzIGFyZSBjaGFuZ2VkLgorCisgIHZhciBpbmRleGVkUXVhZEZvclJl
ZmVyZW5jZVZlcnRleFNoYWRlciA9CisgICAgd3R1LnNldHVwSW5kZXhlZFF1YWQoZ2wsIGdyaWRS
ZXMsIDApOworICB2YXIgcmVmZXJlbmNlVmVydGV4U2hhZGVyUHJvZ3JhbSA9CisgICAgd3R1LnNl
dHVwUHJvZ3JhbShnbCwgWyBiYXNlVmVydGV4U2hhZGVyV2l0aENvbG9yLCBiYXNlRnJhZ21lbnRT
aGFkZXIgXSwKKyAgICAgICAgICAgICAgICAgICAgIFsiYVBvc2l0aW9uIiwgImFDb2xvciJdKTsK
KyAgdmFyIHJlZmVyZW5jZVZlcnRleFNoYWRlckNvbG9yQnVmZmVyID0gZ2wuY3JlYXRlQnVmZmVy
KCk7CisKKyAgdmFyIHNoYWRlckluZm9zID0gWworICAgIHsgdHlwZTogInZlcnRleCIsCisgICAg
ICBpbnB1dDogImNvbG9yIiwKKyAgICAgIG91dHB1dDogInZDb2xvciIsCisgICAgICB2ZXJ0ZXhT
aGFkZXJUZW1wbGF0ZTogdmVydGV4U2hhZGVyVGVtcGxhdGUsCisgICAgICBmcmFnbWVudFNoYWRl
clRlbXBsYXRlOiBiYXNlRnJhZ21lbnRTaGFkZXIsCisgICAgICB0b2xlcmFuY2U6IHZlcnRleFRv
bGVyYW5jZQorICAgIH0sCisgICAgeyB0eXBlOiAiZnJhZ21lbnQiLAorICAgICAgaW5wdXQ6ICJ2
Q29sb3IiLAorICAgICAgb3V0cHV0OiAiZ2xfRnJhZ0NvbG9yIiwKKyAgICAgIHZlcnRleFNoYWRl
clRlbXBsYXRlOiBiYXNlVmVydGV4U2hhZGVyLAorICAgICAgZnJhZ21lbnRTaGFkZXJUZW1wbGF0
ZTogZnJhZ21lbnRTaGFkZXJUZW1wbGF0ZSwKKyAgICAgIHRvbGVyYW5jZTogZnJhZ21lbnRUb2xl
cmFuY2UKKyAgICB9CisgIF07CisgIGZvciAodmFyIHNzID0gMDsgc3MgPCBzaGFkZXJJbmZvcy5s
ZW5ndGg7ICsrc3MpIHsKKyAgICB2YXIgc2hhZGVySW5mbyA9IHNoYWRlckluZm9zW3NzXTsKKyAg
ICB2YXIgdGVzdHMgPSBwYXJhbXMudGVzdHM7CisgICAgdmFyIHRlc3RUeXBlcyA9IHBhcmFtcy5l
bXVGdW5jcyB8fCAocGFyYW1zLmJ2ZWNUZXN0ID8gYnZlY1R5cGVzIDogdHlwZXMpOworICAgIC8v
IFRlc3QgdmVydGV4IHNoYWRlcnMKKyAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgdGVzdHMubGVu
Z3RoOyArK2lpKSB7CisgICAgICB2YXIgdHlwZSA9IHRlc3RUeXBlc1tpaV07CisgICAgICB2YXIg
aXNWZXJ0ZXggPSAoc3MgPT0gMCk7CisgICAgICBkZWJ1ZygiIik7CisgICAgICB2YXIgc3RyID0g
cmVwbGFjZVBhcmFtcyhwYXJhbXMudGVzdEZ1bmMsIHsKKyAgICAgICAgZnVuYzogcGFyYW1zLmZl
YXR1cmUsCisgICAgICAgIHR5cGU6IHR5cGUudHlwZSwKKyAgICAgICAgYXJnMDogdHlwZS50eXBl
CisgICAgICB9KTsKKyAgICAgIHZhciBwYXNzTXNnID0gIlRlc3Rpbmc6ICIgKyBzdHIgKyAiIGlu
ICIgKyBzaGFkZXJJbmZvLnR5cGUgKyAiIHNoYWRlciI7CisgICAgICBkZWJ1ZyhwYXNzTXNnKTsK
KworICAgICAgdmFyIHJlZmVyZW5jZVZlcnRleFNoYWRlclNvdXJjZSA9IGdlbmVyYXRlUmVmZXJl
bmNlU2hhZGVyKAorICAgICAgICAgIHNoYWRlckluZm8sCisgICAgICAgICAgc2hhZGVySW5mby52
ZXJ0ZXhTaGFkZXJUZW1wbGF0ZSwKKyAgICAgICAgICBwYXJhbXMsCisgICAgICAgICAgdHlwZSwK
KyAgICAgICAgICB0ZXN0c1tpaV0uc291cmNlKTsKKyAgICAgIHZhciByZWZlcmVuY2VGcmFnbWVu
dFNoYWRlclNvdXJjZSA9IGdlbmVyYXRlUmVmZXJlbmNlU2hhZGVyKAorICAgICAgICAgIHNoYWRl
ckluZm8sCisgICAgICAgICAgc2hhZGVySW5mby5mcmFnbWVudFNoYWRlclRlbXBsYXRlLAorICAg
ICAgICAgIHBhcmFtcywKKyAgICAgICAgICB0eXBlLAorICAgICAgICAgIHRlc3RzW2lpXS5zb3Vy
Y2UpOworICAgICAgdmFyIHRlc3RWZXJ0ZXhTaGFkZXJTb3VyY2UgPSBnZW5lcmF0ZVRlc3RTaGFk
ZXIoCisgICAgICAgICAgc2hhZGVySW5mbywKKyAgICAgICAgICBzaGFkZXJJbmZvLnZlcnRleFNo
YWRlclRlbXBsYXRlLAorICAgICAgICAgIHBhcmFtcywKKyAgICAgICAgICB0ZXN0c1tpaV0uc291
cmNlKTsKKyAgICAgIHZhciB0ZXN0RnJhZ21lbnRTaGFkZXJTb3VyY2UgPSBnZW5lcmF0ZVRlc3RT
aGFkZXIoCisgICAgICAgICAgc2hhZGVySW5mbywKKyAgICAgICAgICBzaGFkZXJJbmZvLmZyYWdt
ZW50U2hhZGVyVGVtcGxhdGUsCisgICAgICAgICAgcGFyYW1zLAorICAgICAgICAgIHRlc3RzW2lp
XS5zb3VyY2UpOworICAgICAgdmFyIHJlZmVyZW5jZVRleHR1cmVPckFycmF5ID0gZ2VuZXJhdGVS
ZWZlcmVuY2VJbWFnZSgKKyAgICAgICAgICBnbCwKKyAgICAgICAgICB0ZXN0c1tpaV0uZ2VuZXJh
dG9yLAorICAgICAgICAgIGlzVmVydGV4ID8gZ3JpZFJlcyA6IHdpZHRoLAorICAgICAgICAgIGlz
VmVydGV4ID8gZ3JpZFJlcyA6IGhlaWdodCwKKyAgICAgICAgICBpc1ZlcnRleCk7CisKKyAgICAg
IGRlYnVnKCIiKTsKKyAgICAgIHZhciB0ZXN0VmVydGV4U2hhZGVyID0gd3R1LmxvYWRTaGFkZXIo
Z2wsIHRlc3RWZXJ0ZXhTaGFkZXJTb3VyY2UsIGdsLlZFUlRFWF9TSEFERVIsIHRlc3RGYWlsZWQs
IHRydWUpOworICAgICAgdmFyIHRlc3RGcmFnbWVudFNoYWRlciA9IHd0dS5sb2FkU2hhZGVyKGds
LCB0ZXN0RnJhZ21lbnRTaGFkZXJTb3VyY2UsIGdsLkZSQUdNRU5UX1NIQURFUiwgdGVzdEZhaWxl
ZCwgdHJ1ZSk7CisgICAgICBkZWJ1ZygiIik7CisKKworICAgICAgaWYgKHBhcnNlSW50KHd0dS5n
ZXRVcmxPcHRpb25zKCkuZHVtcFNoYWRlcnMpKSB7CisgICAgICAgIHZhciB2UmVmSW5mbyA9IHsK
KyAgICAgICAgICBzaGFkZXI6IHJlZmVyZW5jZVZlcnRleFNoYWRlciwKKyAgICAgICAgICBzaGFk
ZXJTdWNjZXNzOiB0cnVlLAorICAgICAgICAgIGxhYmVsOiAicmVmZXJlbmNlIHZlcnRleCBzaGFk
ZXIiLAorICAgICAgICAgIHNvdXJjZTogcmVmZXJlbmNlVmVydGV4U2hhZGVyU291cmNlCisgICAg
ICAgIH07CisgICAgICAgIHZhciBmUmVmSW5mbyA9IHsKKyAgICAgICAgICBzaGFkZXI6IHJlZmVy
ZW5jZUZyYWdtZW50U2hhZGVyLAorICAgICAgICAgIHNoYWRlclN1Y2Nlc3M6IHRydWUsCisgICAg
ICAgICAgbGFiZWw6ICJyZWZlcmVuY2UgZnJhZ21lbnQgc2hhZGVyIiwKKyAgICAgICAgICBzb3Vy
Y2U6IHJlZmVyZW5jZUZyYWdtZW50U2hhZGVyU291cmNlCisgICAgICAgIH07CisgICAgICAgIHd0
dS5kdW1wU2hhZGVyc0luZm8oZ2wsIHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSwgcGFzc01zZywg
dlJlZkluZm8sIGZSZWZJbmZvKTsKKworICAgICAgICB2YXIgdlRlc3RJbmZvID0geworICAgICAg
ICAgIHNoYWRlcjogdGVzdFZlcnRleFNoYWRlciwKKyAgICAgICAgICBzaGFkZXJTdWNjZXNzOiB0
cnVlLAorICAgICAgICAgIGxhYmVsOiAidGVzdCB2ZXJ0ZXggc2hhZGVyIiwKKyAgICAgICAgICBz
b3VyY2U6IHRlc3RWZXJ0ZXhTaGFkZXJTb3VyY2UKKyAgICAgICAgfTsKKyAgICAgICAgdmFyIGZU
ZXN0SW5mbyA9IHsKKyAgICAgICAgICBzaGFkZXI6IHRlc3RGcmFnbWVudFNoYWRlciwKKyAgICAg
ICAgICBzaGFkZXJTdWNjZXNzOiB0cnVlLAorICAgICAgICAgIGxhYmVsOiAidGVzdCBmcmFnbWVu
dCBzaGFkZXIiLAorICAgICAgICAgIHNvdXJjZTogdGVzdEZyYWdtZW50U2hhZGVyU291cmNlCisg
ICAgICAgIH07CisgICAgICAgIHd0dS5kdW1wU2hhZGVyc0luZm8oZ2wsIHdpbmRvdy5sb2NhdGlv
bi5wYXRobmFtZSwgcGFzc01zZywgdlRlc3RJbmZvLCBmVGVzdEluZm8pOworICAgICAgfQorCisg
ICAgICB2YXIgcmVmRGF0YTsKKyAgICAgIGlmIChpc1ZlcnRleCkgeworICAgICAgICByZWZEYXRh
ID0gZHJhd1ZlcnRleFJlZmVyZW5jZUltYWdlKHJlZmVyZW5jZVRleHR1cmVPckFycmF5KTsKKyAg
ICAgIH0gZWxzZSB7CisgICAgICAgIHJlZkRhdGEgPSBkcmF3RnJhZ21lbnRSZWZlcmVuY2VJbWFn
ZShyZWZlcmVuY2VUZXh0dXJlT3JBcnJheSk7CisgICAgICB9CisgICAgICB2YXIgcmVmSW1nID0g
d3R1Lm1ha2VJbWFnZUZyb21DYW52YXMoY2FudmFzKTsKKyAgICAgIHZhciB0ZXN0RGF0YTsKKyAg
ICAgIGlmIChpc1ZlcnRleCkgeworICAgICAgICB2YXIgcmVmZXJlbmNlRnJhZ21lbnRTaGFkZXIg
PSB3dHUubG9hZFNoYWRlcihnbCwgcmVmZXJlbmNlRnJhZ21lbnRTaGFkZXJTb3VyY2UsIGdsLkZS
QUdNRU5UX1NIQURFUiwgdGVzdEZhaWxlZCk7CisgICAgICAgIHRlc3REYXRhID0gZHJhdygKKyAg
ICAgICAgICB0ZXN0VmVydGV4U2hhZGVyLCByZWZlcmVuY2VGcmFnbWVudFNoYWRlcik7CisgICAg
ICB9IGVsc2UgeworICAgICAgICB2YXIgcmVmZXJlbmNlVmVydGV4U2hhZGVyID0gd3R1LmxvYWRT
aGFkZXIoZ2wsIHJlZmVyZW5jZVZlcnRleFNoYWRlclNvdXJjZSwgZ2wuVkVSVEVYX1NIQURFUiwg
dGVzdEZhaWxlZCk7CisgICAgICAgIHRlc3REYXRhID0gZHJhdygKKyAgICAgICAgICByZWZlcmVu
Y2VWZXJ0ZXhTaGFkZXIsIHRlc3RGcmFnbWVudFNoYWRlcik7CisgICAgICB9CisgICAgICB2YXIg
dGVzdEltZyA9IHd0dS5tYWtlSW1hZ2VGcm9tQ2FudmFzKGNhbnZhcyk7CisgICAgICB2YXIgdGVz
dFRvbGVyYW5jZSA9IHNoYWRlckluZm8udG9sZXJhbmNlOworICAgICAgLy8gUHJvdmlkZSBwZXIt
dGVzdCB0b2xlcmFuY2Ugc28gdGhhdCB3ZSBjYW4gaW5jcmVhc2UgaXQgb25seSBmb3IgdGhvc2Ug
ZGVzaXJlZC4KKyAgICAgIGlmICgndG9sZXJhbmNlJyBpbiB0ZXN0c1tpaV0pCisgICAgICAgIHRl
c3RUb2xlcmFuY2UgPSB0ZXN0c1tpaV0udG9sZXJhbmNlIHx8IDA7CisgICAgICBfcmVwb3J0UmVz
dWx0cyhyZWZEYXRhLCByZWZJbWcsIHRlc3REYXRhLCB0ZXN0SW1nLCB0ZXN0VG9sZXJhbmNlLAor
ICAgICAgICAgICAgICAgICAgICAgd2lkdGgsIGhlaWdodCwgY3R4LCBpbWdEYXRhLCB3dHUsIGNh
bnZhczJkLCBjb25zb2xlRGl2KTsKKyAgICB9CisgIH0KKworICBmaW5pc2hUZXN0KCk7CisKKyAg
ZnVuY3Rpb24gZHJhdyh2ZXJ0ZXhTaGFkZXIsIGZyYWdtZW50U2hhZGVyKSB7CisgICAgdmFyIHBy
b2dyYW0gPSB3dHUuY3JlYXRlUHJvZ3JhbShnbCwgdmVydGV4U2hhZGVyLCBmcmFnbWVudFNoYWRl
ciwgdGVzdEZhaWxlZCk7CisKKyAgICB2YXIgcG9zTG9jID0gZ2wuZ2V0QXR0cmliTG9jYXRpb24o
cHJvZ3JhbSwgImFQb3NpdGlvbiIpOworICAgIHd0dS5zZXR1cEluZGV4ZWRRdWFkKGdsLCBncmlk
UmVzLCBwb3NMb2MpOworCisgICAgZ2wudXNlUHJvZ3JhbShwcm9ncmFtKTsKKyAgICB3dHUuY2xl
YXJBbmREcmF3SW5kZXhlZFF1YWQoZ2wsIGdyaWRSZXMsIFswLCAwLCAyNTUsIDI1NV0pOworICAg
IHd0dS5nbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SLCAibm8gZXJyb3JzIGZyb20gZHJh
dyIpOworCisgICAgdmFyIGltZyA9IG5ldyBVaW50OEFycmF5KHdpZHRoICogaGVpZ2h0ICogNCk7
CisgICAgZ2wucmVhZFBpeGVscygwLCAwLCB3aWR0aCwgaGVpZ2h0LCBnbC5SR0JBLCBnbC5VTlNJ
R05FRF9CWVRFLCBpbWcpOworICAgIHJldHVybiBpbWc7CisgIH0KKworICBmdW5jdGlvbiBkcmF3
VmVydGV4UmVmZXJlbmNlSW1hZ2UoY29sb3JzKSB7CisgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJB
WV9CVUZGRVIsIGluZGV4ZWRRdWFkRm9yUmVmZXJlbmNlVmVydGV4U2hhZGVyWzBdKTsKKyAgICBn
bC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheSgwKTsKKyAgICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVy
KDAsIDMsIGdsLkZMT0FULCBmYWxzZSwgMCwgMCk7CisgICAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJB
WV9CVUZGRVIsIHJlZmVyZW5jZVZlcnRleFNoYWRlckNvbG9yQnVmZmVyKTsKKyAgICBnbC5idWZm
ZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgY29sb3JzLCBnbC5TVEFUSUNfRFJBVyk7CisgICAgZ2wu
ZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoMSk7CisgICAgZ2wudmVydGV4QXR0cmliUG9pbnRlcigx
LCA0LCBnbC5VTlNJR05FRF9CWVRFLCB0cnVlLCAwLCAwKTsKKyAgICBnbC5iaW5kQnVmZmVyKGds
LkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBpbmRleGVkUXVhZEZvclJlZmVyZW5jZVZlcnRleFNoYWRl
clsxXSk7CisgICAgZ2wudXNlUHJvZ3JhbShyZWZlcmVuY2VWZXJ0ZXhTaGFkZXJQcm9ncmFtKTsK
KyAgICB3dHUuY2xlYXJBbmREcmF3SW5kZXhlZFF1YWQoZ2wsIGdyaWRSZXMpOworICAgIGdsLmRp
c2FibGVWZXJ0ZXhBdHRyaWJBcnJheSgwKTsKKyAgICBnbC5kaXNhYmxlVmVydGV4QXR0cmliQXJy
YXkoMSk7CisgICAgd3R1LmdsRXJyb3JTaG91bGRCZShnbCwgZ2wuTk9fRVJST1IsICJubyBlcnJv
cnMgZnJvbSBkcmF3Iik7CisKKyAgICB2YXIgaW1nID0gbmV3IFVpbnQ4QXJyYXkod2lkdGggKiBo
ZWlnaHQgKiA0KTsKKyAgICBnbC5yZWFkUGl4ZWxzKDAsIDAsIHdpZHRoLCBoZWlnaHQsIGdsLlJH
QkEsIGdsLlVOU0lHTkVEX0JZVEUsIGltZyk7CisgICAgcmV0dXJuIGltZzsKKyAgfQorCisgIGZ1
bmN0aW9uIGRyYXdGcmFnbWVudFJlZmVyZW5jZUltYWdlKHRleHR1cmUpIHsKKyAgICB2YXIgcHJv
Z3JhbSA9IHd0dS5zZXR1cFRleHR1cmVkUXVhZChnbCk7CisKKyAgICBnbC5hY3RpdmVUZXh0dXJl
KGdsLlRFWFRVUkUwKTsKKyAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJl
KTsKKyAgICB2YXIgdGV4TG9jID0gZ2wuZ2V0VW5pZm9ybUxvY2F0aW9uKHByb2dyYW0sICJ0ZXgi
KTsKKyAgICBnbC51bmlmb3JtMWkodGV4TG9jLCAwKTsKKyAgICB3dHUuY2xlYXJBbmREcmF3VW5p
dFF1YWQoZ2wpOworICAgIHd0dS5nbEVycm9yU2hvdWxkQmUoZ2wsIGdsLk5PX0VSUk9SLCAibm8g
ZXJyb3JzIGZyb20gZHJhdyIpOworCisgICAgdmFyIGltZyA9IG5ldyBVaW50OEFycmF5KHdpZHRo
ICogaGVpZ2h0ICogNCk7CisgICAgZ2wucmVhZFBpeGVscygwLCAwLCB3aWR0aCwgaGVpZ2h0LCBn
bC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBpbWcpOworICAgIHJldHVybiBpbWc7CisgIH0KKwor
ICAvKioKKyAgICogQ3JlYXRlcyBhbmQgcmV0dXJucyBlaXRoZXIgYSBVaW50OEFycmF5IChmb3Ig
dmVydGV4IHNoYWRlcnMpIG9yCisgICAqIFdlYkdMVGV4dHVyZSAoZm9yIGZyYWdtZW50IHNoYWRl
cnMpIGNvbnRhaW5pbmcgdGhlIHJlZmVyZW5jZQorICAgKiBpbWFnZSBmb3IgdGhlIGZ1bmN0aW9u
IGJlaW5nIHRlc3RlZC4gRXhhY3RseSBob3cgdGhlIGZ1bmN0aW9uIGlzCisgICAqIGV2YWx1YXRl
ZCwgYW5kIHRoZSBzaXplIG9mIHRoZSByZXR1cm5lZCB0ZXh0dXJlIG9yIGFycmF5LCBkZXBlbmRz
IG9uCisgICAqIHdoZXRoZXIgd2UgYXJlIHRlc3RpbmcgYSB2ZXJ0ZXggb3IgZnJhZ21lbnQgc2hh
ZGVyLiBJZiBhIGZyYWdtZW50CisgICAqIHNoYWRlciwgdGhlIGZ1bmN0aW9uIGlzIGV2YWx1YXRl
ZCBhdCB0aGUgcGl4ZWwgY2VudGVycy4gSWYgYQorICAgKiB2ZXJ0ZXggc2hhZGVyLCB0aGUgZnVu
Y3Rpb24gaXMgZXZhbHVhdGVkIGF0IHRoZSB0cmlhbmdsZSdzCisgICAqIHZlcnRpY2VzLgorICAg
KgorICAgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRl
cmluZ0NvbnRleHQgdG8gdXNlIHRvIGdlbmVyYXRlIHRleHR1cmUgb2JqZWN0cy4KKyAgICogQHBh
cmFtIHshZnVuY3Rpb24obnVtYmVyLG51bWJlcixudW1iZXIsbnVtYmVyKTogIUFycmF5LjxudW1i
ZXI+fSBnZW5lcmF0b3IgVGhlIHJlZmVyZW5jZSBpbWFnZSBnZW5lcmF0b3IgZnVuY3Rpb24uCisg
ICAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCBUaGUgd2lkdGggb2YgdGhlIHRleHR1cmUgdG8gZ2Vu
ZXJhdGUgaWYgdGVzdGluZyBhIGZyYWdtZW50IHNoYWRlcjsgdGhlIGdyaWQgcmVzb2x1dGlvbiBp
ZiB0ZXN0aW5nIGEgdmVydGV4IHNoYWRlci4KKyAgICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCBU
aGUgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlIHRvIGdlbmVyYXRlIGlmIHRlc3RpbmcgYSBmcmFnbWVu
dCBzaGFkZXI7IHRoZSBncmlkIHJlc29sdXRpb24gaWYgdGVzdGluZyBhIHZlcnRleCBzaGFkZXIu
CisgICAqIEBwYXJhbSB7Ym9vbGVhbn0gaXNWZXJ0ZXggVHJ1ZSBpZiBnZW5lcmF0aW5nIGEgcmVm
ZXJlbmNlIGltYWdlIGZvciBhIHZlcnRleCBzaGFkZXI7IGZhbHNlIGlmIGZvciBhIGZyYWdtZW50
IHNoYWRlci4KKyAgICogQHJldHVybiB7IVdlYkdMVGV4dHVyZXwhVWludDhBcnJheX0gVGhlIHRl
eHR1cmUgb2JqZWN0IG9yIGFycmF5IHRoYXQgd2FzIGdlbmVyYXRlZC4KKyAgICovCisgIGZ1bmN0
aW9uIGdlbmVyYXRlUmVmZXJlbmNlSW1hZ2UoCisgICAgZ2wsCisgICAgZ2VuZXJhdG9yLAorICAg
IHdpZHRoLAorICAgIGhlaWdodCwKKyAgICBpc1ZlcnRleCkgeworCisgICAgLy8gTm90ZTogdGhl
IG1hdGggaW4gdGhpcyBmdW5jdGlvbiBtdXN0IG1hdGNoIHRoYXQgaW4gdGhlIHZlcnRleCBhbmQK
KyAgICAvLyBmcmFnbWVudCBzaGFkZXIgdGVtcGxhdGVzIGFib3ZlLgorICAgIGZ1bmN0aW9uIGNv
bXB1dGVUZXhDb29yZCh4KSB7CisgICAgICByZXR1cm4geCAqIDAuNSArIDAuNTsKKyAgICB9CisK
KyAgICBmdW5jdGlvbiBjb21wdXRlVmVydGV4Q29sb3IodGV4Q29vcmRYLCB0ZXhDb29yZFkpIHsK
KyAgICAgIHJldHVybiBbIHRleENvb3JkWCwKKyAgICAgICAgICAgICAgIHRleENvb3JkWSwKKyAg
ICAgICAgICAgICAgIHRleENvb3JkWCAqIHRleENvb3JkWSwKKyAgICAgICAgICAgICAgICgxLjAg
LSB0ZXhDb29yZFgpICogdGV4Q29vcmRZICogMC41ICsgMC41IF07CisgICAgfQorCisgICAgLyoq
CisgICAgICogQ29tcHV0ZXMgZnJhZ21lbnQgY29sb3IgYWNjb3JkaW5nIHRvIHRoZSBhbGdvcml0
aG0gdXNlZCBmb3IgaW50ZXJwb2xhdGlvbgorICAgICAqIGluIE9wZW5HTCAoR0xFUyAyLjAgc3Bl
YyAzLjUuMSwgT3BlbkdMIDQuMyBzcGVjIDE0LjYuMSkuCisgICAgICovCisgICAgZnVuY3Rpb24g
Y29tcHV0ZUludGVycG9sYXRlZENvbG9yKHRleENvb3JkWCwgdGV4Q29vcmRZKSB7CisgICAgICAv
LyBDYWxjdWxhdGUgZ3JpZCBsaW5lIGluZGV4ZXMgYmVsb3cgYW5kIHRvIHRoZSBsZWZ0IGZyb20g
dGV4Q29vcmQuCisgICAgICB2YXIgZ3JpZEJvdHRvbSA9IE1hdGguZmxvb3IodGV4Q29vcmRZICog
Z3JpZFJlcyk7CisgICAgICBpZiAoZ3JpZEJvdHRvbSA9PSBncmlkUmVzKSB7CisgICAgICAgIC0t
Z3JpZEJvdHRvbTsKKyAgICAgIH0KKyAgICAgIHZhciBncmlkTGVmdCA9IE1hdGguZmxvb3IodGV4
Q29vcmRYICogZ3JpZFJlcyk7CisgICAgICBpZiAoZ3JpZExlZnQgPT0gZ3JpZFJlcykgeworICAg
ICAgICAtLWdyaWRMZWZ0OworICAgICAgfQorCisgICAgICAvLyBDYWxjdWxhdGUgY29vcmRpbmF0
ZXMgcmVsYXRpdmUgdG8gdGhlIGdyaWQgY2VsbC4KKyAgICAgIHZhciBjZWxsWCA9IHRleENvb3Jk
WCAqIGdyaWRSZXMgLSBncmlkTGVmdDsKKyAgICAgIHZhciBjZWxsWSA9IHRleENvb3JkWSAqIGdy
aWRSZXMgLSBncmlkQm90dG9tOworCisgICAgICAvLyBCYXJ5Y2VudHJpYyBjb29yZGluYXRlcyBp
bnNpZGUgZWl0aGVyIHRyaWFuZ2xlIEFDRCBvciBBQkMKKyAgICAgIC8vIGFyZSB1c2VkIGFzIHdl
aWdodHMgZm9yIHRoZSB2ZXJ0ZXggY29sb3JzIGluIHRoZSBjb3JuZXJzOgorICAgICAgLy8gQS0t
QgorICAgICAgLy8gfFwgfAorICAgICAgLy8gfCBcfAorICAgICAgLy8gRC0tQworCisgICAgICB2
YXIgYUNvbG9yID0gY29tcHV0ZVZlcnRleENvbG9yKGdyaWRMZWZ0IC8gZ3JpZFJlcywgKGdyaWRC
b3R0b20gKyAxKSAvIGdyaWRSZXMpOworICAgICAgdmFyIGJDb2xvciA9IGNvbXB1dGVWZXJ0ZXhD
b2xvcigoZ3JpZExlZnQgKyAxKSAvIGdyaWRSZXMsIChncmlkQm90dG9tICsgMSkgLyBncmlkUmVz
KTsKKyAgICAgIHZhciBjQ29sb3IgPSBjb21wdXRlVmVydGV4Q29sb3IoKGdyaWRMZWZ0ICsgMSkg
LyBncmlkUmVzLCBncmlkQm90dG9tIC8gZ3JpZFJlcyk7CisgICAgICB2YXIgZENvbG9yID0gY29t
cHV0ZVZlcnRleENvbG9yKGdyaWRMZWZ0IC8gZ3JpZFJlcywgZ3JpZEJvdHRvbSAvIGdyaWRSZXMp
OworCisgICAgICAvLyBDYWxjdWxhdGUgd2VpZ2h0cy4KKyAgICAgIHZhciBhLCBiLCBjLCBkOwor
CisgICAgICBpZiAoY2VsbFggKyBjZWxsWSA8IDEpIHsKKyAgICAgICAgLy8gSW4gYm90dG9tIHRy
aWFuZ2xlIEFDRC4KKyAgICAgICAgYSA9IGNlbGxZOyAvLyBhcmVhIG9mIHRyaWFuZ2xlIEMtRC0o
Y2VsbFgsIGNlbGxZKSByZWxhdGl2ZSB0byBBQ0QKKyAgICAgICAgYyA9IGNlbGxYOyAvLyBhcmVh
IG9mIHRyaWFuZ2xlIEQtQS0oY2VsbFgsIGNlbGxZKSByZWxhdGl2ZSB0byBBQ0QKKyAgICAgICAg
ZCA9IDEgLSBhIC0gYzsKKyAgICAgICAgYiA9IDA7CisgICAgICB9IGVsc2UgeworICAgICAgICAv
LyBJbiB0b3AgdHJpYW5nbGUgQUJDLgorICAgICAgICBhID0gMSAtIGNlbGxYOyAvLyBhcmVhIG9m
IHRoZSB0cmlhbmdsZSBCLUMtKGNlbGxYLCBjZWxsWSkgcmVsYXRpdmUgdG8gQUJDCisgICAgICAg
IGMgPSAxIC0gY2VsbFk7IC8vIGFyZWEgb2YgdGhlIHRyaWFuZ2xlIEEtQi0oY2VsbFgsIGNlbGxZ
KSByZWxhdGl2ZSB0byBBQkMKKyAgICAgICAgYiA9IDEgLSBhIC0gYzsKKyAgICAgICAgZCA9IDA7
CisgICAgICB9CisKKyAgICAgIHZhciBpbnRlcnBvbGF0ZWQgPSBbXTsKKyAgICAgIGZvciAodmFy
IGlpID0gMDsgaWkgPCBhQ29sb3IubGVuZ3RoOyArK2lpKSB7CisgICAgICAgIGludGVycG9sYXRl
ZC5wdXNoKGEgKiBhQ29sb3JbaWldICsgYiAqIGJDb2xvcltpaV0gKyBjICogY0NvbG9yW2lpXSAr
IGQgKiBkQ29sb3JbaWldKTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBpbnRlcnBvbGF0ZWQ7Cisg
ICAgfQorCisgICAgZnVuY3Rpb24gY2xhbXAodmFsdWUsIG1pblZhbCwgbWF4VmFsKSB7CisgICAg
ICByZXR1cm4gTWF0aC5tYXgobWluVmFsLCBNYXRoLm1pbih2YWx1ZSwgbWF4VmFsKSk7CisgICAg
fQorCisgICAgLy8gRXZhbHVhdGVzIHRoZSBmdW5jdGlvbiBhdCBjbGlwIGNvb3JkaW5hdGVzIChw
eCxweSksIHN0b3JpbmcgdGhlCisgICAgLy8gcmVzdWx0IGluIHRoZSBhcnJheSAicGl4ZWwiLiBF
YWNoIGNoYW5uZWwncyByZXN1bHQgaXMgY2xhbXBlZAorICAgIC8vIGJldHdlZW4gMCBhbmQgMjU1
LgorICAgIGZ1bmN0aW9uIGV2YWx1YXRlQXRDbGlwQ29vcmRzKHB4LCBweSwgcGl4ZWwsIGNvbG9y
RnVuYykgeworICAgICAgdmFyIHRjeCA9IGNvbXB1dGVUZXhDb29yZChweCk7CisgICAgICB2YXIg
dGN5ID0gY29tcHV0ZVRleENvb3JkKHB5KTsKKworICAgICAgdmFyIGNvbG9yID0gY29sb3JGdW5j
KHRjeCwgdGN5KTsKKworICAgICAgdmFyIG91dHB1dCA9IGdlbmVyYXRvcihjb2xvclswXSwgY29s
b3JbMV0sIGNvbG9yWzJdLCBjb2xvclszXSk7CisKKyAgICAgIC8vIE11bHRpcGx5IGJ5IDI1NiB0
byBnZXQgZXZlbiBkaXN0cmlidXRpb24gZm9yIGFsbCB2YWx1ZXMgYmV0d2VlbiAwIGFuZCAxLgor
ICAgICAgLy8gVXNlIHJvdW5kaW5nIHJhdGhlciB0aGFuIHRydW5jYXRpb24gdG8gbW9yZSBjbG9z
ZWx5IG1hdGNoIHRoZSBHUFUncyBiZWhhdmlvci4KKyAgICAgIHBpeGVsWzBdID0gY2xhbXAoTWF0
aC5yb3VuZCgyNTYgKiBvdXRwdXRbMF0pLCAwLCAyNTUpOworICAgICAgcGl4ZWxbMV0gPSBjbGFt
cChNYXRoLnJvdW5kKDI1NiAqIG91dHB1dFsxXSksIDAsIDI1NSk7CisgICAgICBwaXhlbFsyXSA9
IGNsYW1wKE1hdGgucm91bmQoMjU2ICogb3V0cHV0WzJdKSwgMCwgMjU1KTsKKyAgICAgIHBpeGVs
WzNdID0gY2xhbXAoTWF0aC5yb3VuZCgyNTYgKiBvdXRwdXRbM10pLCAwLCAyNTUpOworICAgIH0K
KworICAgIGZ1bmN0aW9uIGdlbmVyYXRlRnJhZ21lbnRSZWZlcmVuY2UoKSB7CisgICAgICB2YXIg
ZGF0YSA9IG5ldyBVaW50OEFycmF5KDQgKiB3aWR0aCAqIGhlaWdodCk7CisKKyAgICAgIHZhciBo
b3JpelRleGVsID0gMS4wIC8gd2lkdGg7CisgICAgICB2YXIgdmVydFRleGVsID0gMS4wIC8gaGVp
Z2h0OworICAgICAgdmFyIGhhbGZIb3JpelRleGVsID0gMC41ICogaG9yaXpUZXhlbDsKKyAgICAg
IHZhciBoYWxmVmVydFRleGVsID0gMC41ICogdmVydFRleGVsOworCisgICAgICB2YXIgcGl4ZWwg
PSBuZXcgQXJyYXkoNCk7CisKKyAgICAgIGZvciAodmFyIHlpID0gMDsgeWkgPCBoZWlnaHQ7ICsr
eWkpIHsKKyAgICAgICAgZm9yICh2YXIgeGkgPSAwOyB4aSA8IHdpZHRoOyArK3hpKSB7CisgICAg
ICAgICAgLy8gVGhlIGZ1bmN0aW9uIG11c3QgYmUgZXZhbHVhdGVkIGF0IHBpeGVsIGNlbnRlcnMu
CisKKyAgICAgICAgICAvLyBDb21wdXRlIGRlc2lyZWQgcG9zaXRpb24gaW4gY2xpcCBzcGFjZQor
ICAgICAgICAgIHZhciBweCA9IC0xLjAgKyAyLjAgKiAoaGFsZkhvcml6VGV4ZWwgKyB4aSAqIGhv
cml6VGV4ZWwpOworICAgICAgICAgIHZhciBweSA9IC0xLjAgKyAyLjAgKiAoaGFsZlZlcnRUZXhl
bCArIHlpICogdmVydFRleGVsKTsKKworICAgICAgICAgIGV2YWx1YXRlQXRDbGlwQ29vcmRzKHB4
LCBweSwgcGl4ZWwsIGNvbXB1dGVJbnRlcnBvbGF0ZWRDb2xvcik7CisgICAgICAgICAgdmFyIGlu
ZGV4ID0gNCAqICh3aWR0aCAqIHlpICsgeGkpOworICAgICAgICAgIGRhdGFbaW5kZXggKyAwXSA9
IHBpeGVsWzBdOworICAgICAgICAgIGRhdGFbaW5kZXggKyAxXSA9IHBpeGVsWzFdOworICAgICAg
ICAgIGRhdGFbaW5kZXggKyAyXSA9IHBpeGVsWzJdOworICAgICAgICAgIGRhdGFbaW5kZXggKyAz
XSA9IHBpeGVsWzNdOworICAgICAgICB9CisgICAgICB9CisKKyAgICAgIHZhciB0ZXh0dXJlID0g
Z2wuY3JlYXRlVGV4dHVyZSgpOworICAgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwg
dGV4dHVyZSk7CisgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRV
UkVfTUlOX0ZJTFRFUiwgZ2wuTElORUFSKTsKKyAgICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVY
VFVSRV8yRCwgZ2wuVEVYVFVSRV9NQUdfRklMVEVSLCBnbC5MSU5FQVIpOworICAgICAgZ2wudGV4
UGFyYW1ldGVyaShnbC5URVhUVVJFXzJELCBnbC5URVhUVVJFX1dSQVBfUywgZ2wuQ0xBTVBfVE9f
RURHRSk7CisgICAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVf
V1JBUF9ULCBnbC5DTEFNUF9UT19FREdFKTsKKyAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVS
RV8yRCwgMCwgZ2wuUkdCQSwgd2lkdGgsIGhlaWdodCwgMCwKKyAgICAgICAgICAgICAgICAgICAg
Z2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgZGF0YSk7CisgICAgICByZXR1cm4gdGV4dHVyZTsK
KyAgICB9CisKKyAgICBmdW5jdGlvbiBnZW5lcmF0ZVZlcnRleFJlZmVyZW5jZSgpIHsKKyAgICAg
IC8vIFdlIGdlbmVyYXRlIGEgVWludDhBcnJheSB3aGljaCBjb250YWlucyB0aGUgZXZhbHVhdGlv
biBvZiB0aGUKKyAgICAgIC8vIGZ1bmN0aW9uIGF0IHRoZSB2ZXJ0aWNlcyBvZiB0aGUgdHJpYW5n
bGUgbWVzaC4gSXQgaXMgZXhwZWN0ZWQKKyAgICAgIC8vIHRoYXQgdGhlIHdpZHRoIGFuZCB0aGUg
aGVpZ2h0IGFyZSBpZGVudGljYWwsIGFuZCBlcXVpdmFsZW50CisgICAgICAvLyB0byB0aGUgZ3Jp
ZCByZXNvbHV0aW9uLgorICAgICAgaWYgKHdpZHRoICE9IGhlaWdodCkgeworICAgICAgICB0aHJv
dyAid2lkdGggYW5kIGhlaWdodCBtdXN0IGJlIGVxdWFsIjsKKyAgICAgIH0KKworICAgICAgdmFy
IHRleFNpemUgPSAxICsgd2lkdGg7CisgICAgICB2YXIgZGF0YSA9IG5ldyBVaW50OEFycmF5KDQg
KiB0ZXhTaXplICogdGV4U2l6ZSk7CisKKyAgICAgIHZhciBzdGVwID0gMi4wIC8gd2lkdGg7CisK
KyAgICAgIHZhciBwaXhlbCA9IG5ldyBBcnJheSg0KTsKKworICAgICAgZm9yICh2YXIgeWkgPSAw
OyB5aSA8IHRleFNpemU7ICsreWkpIHsKKyAgICAgICAgZm9yICh2YXIgeGkgPSAwOyB4aSA8IHRl
eFNpemU7ICsreGkpIHsKKyAgICAgICAgICAvLyBUaGUgZnVuY3Rpb24gaXMgZXZhbHVhdGVkIGF0
IHRoZSB0cmlhbmdsZXMnIHZlcnRpY2VzLgorCisgICAgICAgICAgLy8gQ29tcHV0ZSBkZXNpcmVk
IHBvc2l0aW9uIGluIGNsaXAgc3BhY2UKKyAgICAgICAgICB2YXIgcHggPSAtMS4wICsgKHhpICog
c3RlcCk7CisgICAgICAgICAgdmFyIHB5ID0gLTEuMCArICh5aSAqIHN0ZXApOworCisgICAgICAg
ICAgZXZhbHVhdGVBdENsaXBDb29yZHMocHgsIHB5LCBwaXhlbCwgY29tcHV0ZVZlcnRleENvbG9y
KTsKKyAgICAgICAgICB2YXIgaW5kZXggPSA0ICogKHRleFNpemUgKiB5aSArIHhpKTsKKyAgICAg
ICAgICBkYXRhW2luZGV4ICsgMF0gPSBwaXhlbFswXTsKKyAgICAgICAgICBkYXRhW2luZGV4ICsg
MV0gPSBwaXhlbFsxXTsKKyAgICAgICAgICBkYXRhW2luZGV4ICsgMl0gPSBwaXhlbFsyXTsKKyAg
ICAgICAgICBkYXRhW2luZGV4ICsgM10gPSBwaXhlbFszXTsKKyAgICAgICAgfQorICAgICAgfQor
CisgICAgICByZXR1cm4gZGF0YTsKKyAgICB9CisKKyAgICAvLy0tLS0tLS0tLS0tLS0tLS0tLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KKyAgICAv
LyBCb2R5IG9mIGdlbmVyYXRlUmVmZXJlbmNlSW1hZ2UKKyAgICAvLworCisgICAgaWYgKGlzVmVy
dGV4KSB7CisgICAgICByZXR1cm4gZ2VuZXJhdGVWZXJ0ZXhSZWZlcmVuY2UoKTsKKyAgICB9IGVs
c2UgeworICAgICAgcmV0dXJuIGdlbmVyYXRlRnJhZ21lbnRSZWZlcmVuY2UoKTsKKyAgICB9Cisg
IH0KK307CisKK3JldHVybiB7CisgIC8qKgorICAgKiBydW5zIGEgYnVuY2ggb2YgR0xTTCB0ZXN0
cyB1c2luZyB0aGUgcGFzc2VkIGluIHBhcmFtZXRlcnMKKyAgICogVGhlIHBhcmFtZXRlcnMgYXJl
OgorICAgKgorICAgKiBmZWF0dXJlOgorICAgKiAgICB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24g
YmVpbmcgdGVzdGVkIChlZywgc2luLCBkb3QsCisgICAqICAgIG5vcm1hbGl6ZSkKKyAgICoKKyAg
ICogdGVzdEZ1bmM6CisgICAqICAgIFRoZSBwcm90b3R5cGUgb2YgZnVuY3Rpb24gdG8gYmUgdGVz
dGVkIG5vdCBpbmNsdWRpbmcgdGhlCisgICAqICAgIHJldHVybiB0eXBlLgorICAgKgorICAgKiBl
bXVGdW5jOgorICAgKiAgICBBIGJhc2UgZnVuY3Rpb24gdGhhdCBjYW4gYmUgdXNlZCB0byBnZW5l
cmF0ZSBlbXVsYXRpb24KKyAgICogICAgZnVuY3Rpb25zLiBFeGFtcGxlIGZvciAnY2VpbCcKKyAg
ICoKKyAgICogICAgICBmbG9hdCAkKGZ1bmMpX2Jhc2UoZmxvYXQgdmFsdWUpIHsKKyAgICogICAg
ICAgIGZsb2F0IG0gPSBtb2QodmFsdWUsIDEuMCk7CisgICAqICAgICAgICByZXR1cm4gbSAhPSAw
LjAgPyAodmFsdWUgKyAxLjAgLSBtKSA6IHZhbHVlOworICAgKiAgICAgIH0KKyAgICoKKyAgICog
YXJnczoKKyAgICogICAgVGhlIGFyZ3VtZW50cyB0byB0aGUgZnVuY3Rpb24KKyAgICoKKyAgICog
YmFzZUFyZ3M6IChvcHRpb25hbCkKKyAgICogICAgVGhlIGFyZ3VtZW50cyB3aGVuIGEgYmFzZSBm
dW5jdGlvbiBpcyB1c2VkIHRvIGNyZWF0ZSBhbgorICAgKiAgICBlbXVsYXRpb24gZnVuY3Rpb24u
IEZvciBleGFtcGxlICdmbG9hdCBzaWduX2Jhc2UoZmxvYXQgdiknCisgICAqICAgIGlzIHVzZWQg
dG8gaW1wbGVtZW5lbnQgdmVjMiBzaWduX2VtdSh2ZWMyIHYpLgorICAgKgorICAgKiBzaW1wbGVF
bXU6CisgICAqICAgIGlmIHN1cHBsaWVkLCB0aGUgY29kZSB0aGF0IGNhbiBiZSB1c2VkIHRvIGdl
bmVyYXRlIGFsbAorICAgKiAgICBmdW5jdGlvbnMgZm9yIGFsbCB0eXBlcy4KKyAgICoKKyAgICog
ICAgRXhhbXBsZSBmb3IgJ25vcm1hbGl6ZSc6CisgICAqCisgICAqICAgICAgICAkKHR5cGUpICQo
ZnVuYylfZW11KCQoYXJncykpIHsKKyAgICogICAgICAgICAgIHJldHVybiB2YWx1ZSAvIGxlbmd0
aCh2YWx1ZSk7CisgICAqICAgICAgICB9CisgICAqCisgICAqIGdyaWRSZXM6IChvcHRpb25hbCkK
KyAgICogICAgVGhlIHJlc29sdXRpb24gb2YgdGhlIG1lc2ggdG8gZ2VuZXJhdGUuIFRoZSBkZWZh
dWx0IGlzIGEKKyAgICogICAgMXgxIGdyaWQgYnV0IG1hbnkgdmVydGV4IHNoYWRlcnMgbmVlZCBh
IGhpZ2hlciByZXNvbHV0aW9uCisgICAqICAgIG90aGVyd2lzZSB0aGUgb25seSB2YWx1ZXMgcGFz
c2VkIGluIGFyZSB0aGUgNCBjb3JuZXJzCisgICAqICAgIHdoaWNoIG9mdGVuIGhhdmUgdGhlIHNh
bWUgdmFsdWUuCisgICAqCisgICAqIHRlc3RzOgorICAgKiAgICBUaGUgY29kZSBmb3IgZWFjaCB0
ZXN0LiBJdCBpcyBhc3N1bWVkIHRoZSB0ZXN0cyBhcmUgZm9yCisgICAqICAgIGZsb2F0LCB2ZWMy
LCB2ZWMzLCB2ZWM0IGluIHRoYXQgb3JkZXIuCisgICAqCisgICAqIHRvbGVyYW5jZTogKG9wdGlv
bmFsKQorICAgKiAgICBBbGxvdyBzb21lIHRvbGVyYW5jZSBpbiB0aGUgY29tcGFyaXNvbnMuIFRo
ZSB0b2xlcmFuY2UgaXMgYXBwbGllZCB0bworICAgKiAgICBib3RoIHZlcnRleCBhbmQgZnJhZ21l
bnQgc2hhZGVycy4gVGhlIGRlZmF1bHQgdG9sZXJhbmNlIGlzIDAsIG1lYW5pbmcKKyAgICogICAg
dGhlIHZhbHVlcyBoYXZlIHRvIGJlIGlkZW50aWNhbC4KKyAgICoKKyAgICogZnJhZ21lbnRUb2xl
cmFuY2U6IChvcHRpb25hbCkKKyAgICogICAgU3BlY2lmeSBhIHRvbGVyYW5jZSB3aGljaCBvbmx5
IGFwcGxpZXMgdG8gZnJhZ21lbnQgc2hhZGVycy4gVGhlCisgICAqICAgIGZyYWdtZW50LW9ubHkg
dG9sZXJhbmNlIHdpbGwgb3ZlcnJpZGUgdGhlIHNoYXJlZCB0b2xlcmFuY2UgZm9yCisgICAqICAg
IGZyYWdtZW50IHNoYWRlcnMgaWYgYm90aCBhcmUgc3BlY2lmaWVkLiBGcmFnbWVudCBzaGFkZXJz
IHVzdWFsbHkKKyAgICogICAgdXNlIG1lZGl1bXAgZmxvYXQgcHJlY2lzaW9uIHNvIHRoZXkgc29t
ZXRpbWVzIHJlcXVpcmUgaGlnaGVyIHRvbGVyYW5jZQorICAgKiAgICB0aGFuIHZlcnRleCBzaGFk
ZXJzIHdoaWNoIHVzZSBoaWdocCBieSBkZWZhdWx0LgorICAgKi8KKyAgcnVuRmVhdHVyZVRlc3Q6
IHJ1bkZlYXR1cmVUZXN0LAorCisgIC8qCisgICAqIFJ1bnMgYSBidW5jaCBvZiBHTFNMIHRlc3Rz
IHVzaW5nIHRoZSBwYXNzZWQgaW4gcGFyYW1ldGVycworICAgKgorICAgKiBUaGUgcGFyYW1ldGVy
cyBhcmU6CisgICAqCisgICAqIHRlc3RzOgorICAgKiAgICBBcnJheSBvZiB0ZXN0cy4gRm9yIGVh
Y2ggdGVzdCB0aGUgZm9sbG93aW5nIHBhcmFtZXRlcnMgYXJlIGV4cGVjdGVkCisgICAqCisgICAq
ICAgIG5hbWU6CisgICAqICAgICAgIHNvbWUgZGVzY3JpcHRpb24gb2YgdGhlIHRlc3QKKyAgICog
ICAgcmVmZXJlbmNlOgorICAgKiAgICAgICBwYXJhbWV0ZXJzIGZvciB0aGUgcmVmZXJlbmNlIHNo
YWRlciAoc2VlIGJlbG93KQorICAgKiAgICB0ZXN0OgorICAgKiAgICAgICBwYXJhbWV0ZXJzIGZv
ciB0aGUgdGVzdCBzaGFkZXIgKHNlZSBiZWxvdykKKyAgICoKKyAgICogICAgVGhlIHBhcmFtZXRl
ciBmb3IgdGhlIHJlZmVyZW5jZSBhbmQgdGVzdCBzaGFkZXJzIGFyZQorICAgKgorICAgKiAgICBz
aGFkZXI6IHRoZSBHTFNMIGZvciB0aGUgc2hhZGVyCisgICAqICAgIHN1YnM6IGFueSBzdWJzdGl0
dXRpb25zIHlvdSB3aXNoIHRvIGRlZmluZSBmb3IgdGhlIHNoYWRlci4KKyAgICoKKyAgICogICAg
RWFjaCBzaGFkZXIgaXMgY3JlYXRlZCBmcm9tIGEgYmFzaWMgdGVtcGxhdGUgdGhhdAorICAgKiAg
ICBkZWZpbmVzIGFuIGlucHV0IGFuZCBhbiBvdXRwdXQuIFlvdSBjYW4gc2VlIHRoZQorICAgKiAg
ICB0ZW1wbGF0ZXMgYXQgdGhlIHRvcCBvZiB0aGlzIGZpbGUuIFRoZSBpbnB1dCBhbmQgb3V0cHV0
CisgICAqICAgIGNoYW5nZSBkZXBlbmRpbmcgb24gd2hldGhlciBvciBub3Qgd2UgYXJlIGdlbmVy
YXRpbmcKKyAgICogICAgYSB2ZXJ0ZXggb3IgZnJhZ21lbnQgc2hhZGVyLgorICAgKgorICAgKiAg
ICBBbGwgdGhpcyBjb2RlIGZ1bmN0aW9uIGRvZXMgaXMgYSBidW5jaCBvZiBzdHJpbmcgc3Vic3Rp
dHV0aW9ucy4KKyAgICogICAgQSBzdWJzdGl0dXRpb24gaXMgZGVmaW5lZCBieSAkKG5hbWUpLiBJ
ZiBuYW1lIGlzIGZvdW5kIGluCisgICAqICAgIHRoZSAnc3VicycgcGFyYW1ldGVyIGl0IGlzIHJl
cGxhY2VkLiA0IHNwZWNpYWwgbmFtZXMgZXhpc3QuCisgICAqCisgICAqICAgICdpbnB1dCcgdGhl
IGlucHV0IHRvIHlvdXIgR0xTTC4gQWx3YXlzIGEgdmVjNC4gQWxsIGNoYW5nZQorICAgKiAgICBm
cm9tIDAgdG8gMSBvdmVyIHRoZSBxdWFkIHRvIGJlIGRyYXduLgorICAgKgorICAgKiAgICAnb3V0
cHV0JyB0aGUgb3V0cHV0IGNvbG9yLiBBbHNvIGEgdmVjNAorICAgKgorICAgKiAgICAnZW11JyBh
IHBsYWNlIHRvIGluc2VydCBleHRyYSBzdHVmZgorICAgKiAgICAnZXh0cmEnIGEgcGxhY2UgdG8g
aW5zZXJ0IGV4dHJhIHN0dWZmLgorICAgKgorICAgKiAgICBZb3UgY2FuIHRoaW5rIG9mIHRoZSB0
ZW1wbGF0ZXMgbGlrZSB0aGlzCisgICAqCisgICAqICAgICAgICQoZXh0cmEpCisgICAqICAgICAg
ICQoZW11KQorICAgKgorICAgKiAgICAgICB2b2lkIG1haW4oKSB7CisgICAqICAgICAgICAgIC8v
IGRvIG1hdGggdG8gY2FsY3VsYXRlIGlucHV0CisgICAqICAgICAgICAgIC4uLgorICAgKgorICAg
KiAgICAgICAgICAkKHNoYWRlcikKKyAgICogICAgICAgfQorICAgKgorICAgKiAgICBZb3VyIHNo
YWRlciBmaXJzdCBoYXMgYW55IHN1YnMgeW91IHByb3ZpZGVkIGFwcGxpZWQgYXMgd2VsbAorICAg
KiAgICBhcyAnaW5wdXQnIGFuZCAnb3V0cHV0JworICAgKgorICAgKiAgICBJdCBpcyB0aGVuIGlu
c2VydGVkIGludG8gdGhlIHRlbXBsYXRlIHdoaWNoIGlzIGFsc28gcHJvdmlkZWQKKyAgICogICAg
d2l0aCB5b3VyIHN1YnMuCisgICAqCisgICAqIGdyaWRSZXM6IChvcHRpb25hbCkKKyAgICogICAg
VGhlIHJlc29sdXRpb24gb2YgdGhlIG1lc2ggdG8gZ2VuZXJhdGUuIFRoZSBkZWZhdWx0IGlzIGEK
KyAgICogICAgMXgxIGdyaWQgYnV0IG1hbnkgdmVydGV4IHNoYWRlcnMgbmVlZCBhIGhpZ2hlciBy
ZXNvbHV0aW9uCisgICAqICAgIG90aGVyd2lzZSB0aGUgb25seSB2YWx1ZXMgcGFzc2VkIGluIGFy
ZSB0aGUgNCBjb3JuZXJzCisgICAqICAgIHdoaWNoIG9mdGVuIGhhdmUgdGhlIHNhbWUgdmFsdWUu
CisgICAqCisgICAqIHRvbGVyYW5jZTogKG9wdGlvbmFsKQorICAgKiAgICBBbGxvdyBzb21lIHRv
bGVyYW5jZSBpbiB0aGUgY29tcGFyaXNvbnMuIFRoZSB0b2xlcmFuY2UgaXMgYXBwbGllZCB0bwor
ICAgKiAgICBib3RoIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycy4gVGhlIGRlZmF1bHQgdG9s
ZXJhbmNlIGlzIDAsIG1lYW5pbmcKKyAgICogICAgdGhlIHZhbHVlcyBoYXZlIHRvIGJlIGlkZW50
aWNhbC4KKyAgICoKKyAgICogZnJhZ21lbnRUb2xlcmFuY2U6IChvcHRpb25hbCkKKyAgICogICAg
U3BlY2lmeSBhIHRvbGVyYW5jZSB3aGljaCBvbmx5IGFwcGxpZXMgdG8gZnJhZ21lbnQgc2hhZGVy
cy4gVGhlCisgICAqICAgIGZyYWdtZW50LW9ubHkgdG9sZXJhbmNlIHdpbGwgb3ZlcnJpZGUgdGhl
IHNoYXJlZCB0b2xlcmFuY2UgZm9yCisgICAqICAgIGZyYWdtZW50IHNoYWRlcnMgaWYgYm90aCBh
cmUgc3BlY2lmaWVkLiBGcmFnbWVudCBzaGFkZXJzIHVzdWFsbHkKKyAgICogICAgdXNlIG1lZGl1
bXAgZmxvYXQgcHJlY2lzaW9uIHNvIHRoZXkgc29tZXRpbWVzIHJlcXVpcmUgaGlnaGVyIHRvbGVy
YW5jZQorICAgKiAgICB0aGFuIHZlcnRleCBzaGFkZXJzIHdoaWNoIHVzZSBoaWdocC4KKyAgICov
CisgIHJ1bkJhc2ljVGVzdDogcnVuQmFzaWNUZXN0LAorCisgIC8qKgorICAgKiBSdW5zIGEgYnVu
Y2ggb2YgR0xTTCB0ZXN0cyB1c2luZyB0aGUgcGFzc2VkIGluIHBhcmFtZXRlcnMuIFRoZQorICAg
KiBleHBlY3RlZCByZXN1bHRzIGFyZSBjb21wdXRlZCBhcyBhIHJlZmVyZW5jZSBpbWFnZSBpbiBK
YXZhU2NyaXB0CisgICAqIGluc3RlYWQgb2Ygb24gdGhlIEdQVS4gVGhlIHBhcmFtZXRlcnMgYXJl
OgorICAgKgorICAgKiBmZWF0dXJlOgorICAgKiAgICB0aGUgbmFtZSBvZiB0aGUgZnVuY3Rpb24g
YmVpbmcgdGVzdGVkIChlZywgc2luLCBkb3QsCisgICAqICAgIG5vcm1hbGl6ZSkKKyAgICoKKyAg
ICogdGVzdEZ1bmM6CisgICAqICAgIFRoZSBwcm90b3R5cGUgb2YgZnVuY3Rpb24gdG8gYmUgdGVz
dGVkIG5vdCBpbmNsdWRpbmcgdGhlCisgICAqICAgIHJldHVybiB0eXBlLgorICAgKgorICAgKiBh
cmdzOgorICAgKiAgICBUaGUgYXJndW1lbnRzIHRvIHRoZSBmdW5jdGlvbgorICAgKgorICAgKiBn
cmlkUmVzOiAob3B0aW9uYWwpCisgICAqICAgIFRoZSByZXNvbHV0aW9uIG9mIHRoZSBtZXNoIHRv
IGdlbmVyYXRlLiBUaGUgZGVmYXVsdCBpcyBhCisgICAqICAgIDF4MSBncmlkIGJ1dCBtYW55IHZl
cnRleCBzaGFkZXJzIG5lZWQgYSBoaWdoZXIgcmVzb2x1dGlvbgorICAgKiAgICBvdGhlcndpc2Ug
dGhlIG9ubHkgdmFsdWVzIHBhc3NlZCBpbiBhcmUgdGhlIDQgY29ybmVycworICAgKiAgICB3aGlj
aCBvZnRlbiBoYXZlIHRoZSBzYW1lIHZhbHVlLgorICAgKgorICAgKiB0ZXN0czoKKyAgICogICAg
QXJyYXkgb2YgdGVzdHMuIEl0IGlzIGFzc3VtZWQgdGhlIHRlc3RzIGFyZSBmb3IgZmxvYXQsIHZl
YzIsCisgICAqICAgIHZlYzMsIHZlYzQgaW4gdGhhdCBvcmRlci4gRm9yIGVhY2ggdGVzdCB0aGUg
Zm9sbG93aW5nCisgICAqICAgIHBhcmFtZXRlcnMgYXJlIGV4cGVjdGVkOgorICAgKgorICAgKiAg
ICAgICBzb3VyY2U6IHRoZSBHTFNMIHNvdXJjZSBjb2RlIGZvciB0aGUgdGVzdHMKKyAgICoKKyAg
ICogICAgICAgZ2VuZXJhdG9yOiBhIEphdmFTY3JpcHQgZnVuY3Rpb24gdGFraW5nIGZvdXIgcGFy
YW1ldGVycworICAgKiAgICAgICB3aGljaCBldmFsdWF0ZXMgdGhlIHNhbWUgZnVuY3Rpb24gYXMg
dGhlIEdMU0wgc291cmNlLAorICAgKiAgICAgICByZXR1cm5pbmcgaXRzIHJlc3VsdCBhcyBhIG5l
d2x5IGFsbG9jYXRlZCBhcnJheS4KKyAgICoKKyAgICogICAgICAgdG9sZXJhbmNlOiAob3B0aW9u
YWwpIGEgcGVyLXRlc3QgdG9sZXJhbmNlLgorICAgKgorICAgKiBleHRyYTogKG9wdGlvbmFsKQor
ICAgKiAgICBFeHRyYSBHTFNMIGNvZGUgaW5zZXJ0ZWQgYXQgdGhlIHRvcCBvZiBlYWNoIHRlc3Qn
cyBzaGFkZXIuCisgICAqCisgICAqIHRvbGVyYW5jZTogKG9wdGlvbmFsKQorICAgKiAgICBBbGxv
dyBzb21lIHRvbGVyYW5jZSBpbiB0aGUgY29tcGFyaXNvbnMuIFRoZSB0b2xlcmFuY2UgaXMgYXBw
bGllZCB0bworICAgKiAgICBib3RoIHZlcnRleCBhbmQgZnJhZ21lbnQgc2hhZGVycy4gVGhlIGRl
ZmF1bHQgdG9sZXJhbmNlIGlzIDAsIG1lYW5pbmcKKyAgICogICAgdGhlIHZhbHVlcyBoYXZlIHRv
IGJlIGlkZW50aWNhbC4KKyAgICoKKyAgICogZnJhZ21lbnRUb2xlcmFuY2U6IChvcHRpb25hbCkK
KyAgICogICAgU3BlY2lmeSBhIHRvbGVyYW5jZSB3aGljaCBvbmx5IGFwcGxpZXMgdG8gZnJhZ21l
bnQgc2hhZGVycy4gVGhlCisgICAqICAgIGZyYWdtZW50LW9ubHkgdG9sZXJhbmNlIHdpbGwgb3Zl
cnJpZGUgdGhlIHNoYXJlZCB0b2xlcmFuY2UgZm9yCisgICAqICAgIGZyYWdtZW50IHNoYWRlcnMg
aWYgYm90aCBhcmUgc3BlY2lmaWVkLiBGcmFnbWVudCBzaGFkZXJzIHVzdWFsbHkKKyAgICogICAg
dXNlIG1lZGl1bXAgZmxvYXQgcHJlY2lzaW9uIHNvIHRoZXkgc29tZXRpbWVzIHJlcXVpcmUgaGln
aGVyIHRvbGVyYW5jZQorICAgKiAgICB0aGFuIHZlcnRleCBzaGFkZXJzIHdoaWNoIHVzZSBoaWdo
cC4KKyAgICovCisgIHJ1blJlZmVyZW5jZUltYWdlVGVzdDogcnVuUmVmZXJlbmNlSW1hZ2VUZXN0
LAorCisgIG5vbmU6IGZhbHNlCit9OworCit9KCkpOworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy93ZWJnbC9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9qcy9qcy10ZXN0LXBvc3QuanMgYi9M
YXlvdXRUZXN0cy93ZWJnbC9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9qcy9qcy10ZXN0LXBv
c3QuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZmY4OWU1ODZlYmRhZmNkMTVjYjQ2ODVkMDcwZGZkMjY4NTkxNjY2
NQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdsL3Jlc291cmNlcy93ZWJnbF90
ZXN0X2ZpbGVzL2pzL2pzLXRlc3QtcG9zdC5qcwpAQCAtMCwwICsxLDEyIEBACisvKgorQ29weXJp
Z2h0IChjKSAyMDE5IFRoZSBLaHJvbm9zIEdyb3VwIEluYy4KK1VzZSBvZiB0aGlzIHNvdXJjZSBj
b2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCitmb3Vu
ZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZS4KKyovCisKK3Nob3VsZEJlVHJ1ZSgic3VjY2Vzc2Z1
bGx5UGFyc2VkIik7CitfYWRkU3BhbignPGJyIC8+PHNwYW4gY2xhc3M9InBhc3MiPlRFU1QgQ09N
UExFVEU8L3NwYW4+Jyk7CitpZiAoX2pzVGVzdFByZVZlcmJvc2VMb2dnaW5nKSB7CisgICAgX2J1
ZmZlcmVkTG9nVG9Db25zb2xlKCdURVNUIENPTVBMRVRFJyk7Cit9Citub3RpZnlGaW5pc2hlZFRv
SGFybmVzcygpCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJnbC9yZXNvdXJjZXMvd2ViZ2xf
dGVzdF9maWxlcy9qcy9qcy10ZXN0LXByZS5qcyBiL0xheW91dFRlc3RzL3dlYmdsL3Jlc291cmNl
cy93ZWJnbF90ZXN0X2ZpbGVzL2pzL2pzLXRlc3QtcHJlLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0
CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmI2MjAyYTI3
ODlkYjZkYmQwNTNiMzMzMzY2MmZmM2Q4ZWNhNWMxNGEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlv
dXRUZXN0cy93ZWJnbC9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9qcy9qcy10ZXN0LXByZS5q
cwpAQCAtMCwwICsxLDc3NiBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxOSBUaGUgS2hyb25vcyBH
cm91cCBJbmMuCitVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUu
CisqLworCisoZnVuY3Rpb24oKSB7CisgIHZhciB0ZXN0SGFybmVzc0luaXRpYWxpemVkID0gZmFs
c2U7CisKKyAgdmFyIGluaXROb25LaHJvbm9zRnJhbWV3b3JrID0gZnVuY3Rpb24oKSB7CisgICAg
aWYgKHRlc3RIYXJuZXNzSW5pdGlhbGl6ZWQpIHsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAg
dGVzdEhhcm5lc3NJbml0aWFsaXplZCA9IHRydWU7CisKKyAgICAvKiAtLSBwbGFmb3JtIHNwZWNp
ZmljIGNvZGUgLS0gKi8KKworICAgIC8vIFdlYktpdCBTcGVjaWZpYyBjb2RlLiBBZGQgeW91ciBj
b2RlIGhlcmUuCisgICAgaWYgKHdpbmRvdy50ZXN0UnVubmVyICYmICF3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIpIHsKKyAgICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlciA9IHdpbmRv
dy50ZXN0UnVubmVyOworICAgIH0KKworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xs
ZXIpIHsKKyAgICAgIHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5vdmVycmlkZVByZWZlcmVu
Y2UoIldlYktpdFdlYkdMRW5hYmxlZCIsICIxIik7CisgICAgICB3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
LndhaXRVbnRpbERvbmUoKTsKKyAgICB9CisgICAgaWYgKHdpbmRvdy5pbnRlcm5hbHMpIHsKKyAg
ICAgIC8vIFRoZSBXZWJLaXQgdGVzdGluZyBzeXN0ZW0gY29tcGFyZXMgY29uc29sZSBvdXRwdXQu
CisgICAgICAvLyBCZWNhdXNlIHRoZSBvdXRwdXQgb2YgdGhlIFdlYkdMIFRlc3RzIGlzIEdQVSBk
ZXBlbmRlbnQKKyAgICAgIC8vIHdlIHR1cm4gb2ZmIGNvbnNvbGUgbWVzc2FnZXMuCisgICAgICB3
aW5kb3cuY29uc29sZS5sb2cgPSBmdW5jdGlvbigpIHsgfTsKKyAgICAgIHdpbmRvdy5jb25zb2xl
LmVycm9yID0gZnVuY3Rpb24oKSB7IH07CisgICAgICB3aW5kb3cuaW50ZXJuYWxzLnNldHRpbmdz
LnNldFdlYkdMRXJyb3JzVG9Db25zb2xlRW5hYmxlZChmYWxzZSk7CisgICAgfQorCisgICAgLyog
LS0gZW5kIHBsYXRmb3JtIHNwZWNpZmljIGNvZGUgLS0qLworICB9CisKKyAgdGhpcy5pbml0VGVz
dGluZ0hhcm5lc3MgPSBmdW5jdGlvbigpIHsKKyAgICBpbml0Tm9uS2hyb25vc0ZyYW1ld29yaygp
OworICB9Cit9KCkpOworCit2YXIgZ2V0VXJsT3B0aW9ucyA9IChmdW5jdGlvbigpIHsKKyAgdmFy
IF91cmxPcHRpb25zUGFyc2VkID0gZmFsc2U7CisgIHZhciBfdXJsT3B0aW9ucyA9IHt9OworICBy
ZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgaWYgKCFfdXJsT3B0aW9uc1BhcnNlZCkgeworICAgICAg
dmFyIHMgPSB3aW5kb3cubG9jYXRpb24uaHJlZjsKKyAgICAgIHZhciBxID0gcy5pbmRleE9mKCI/
Iik7CisgICAgICB2YXIgZSA9IHMuaW5kZXhPZigiIyIpOworICAgICAgaWYgKGUgPCAwKSB7Cisg
ICAgICAgIGUgPSBzLmxlbmd0aDsKKyAgICAgIH0KKyAgICAgIHZhciBxdWVyeSA9IHMuc3Vic3Ry
aW5nKHEgKyAxLCBlKTsKKyAgICAgIHZhciBwYWlycyA9IHF1ZXJ5LnNwbGl0KCImIik7CisgICAg
ICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgcGFpcnMubGVuZ3RoOyArK2lpKSB7CisgICAgICAgIHZh
ciBrZXlWYWx1ZSA9IHBhaXJzW2lpXS5zcGxpdCgiPSIpOworICAgICAgICB2YXIga2V5ID0ga2V5
VmFsdWVbMF07CisgICAgICAgIHZhciB2YWx1ZSA9IGRlY29kZVVSSUNvbXBvbmVudChrZXlWYWx1
ZVsxXSk7CisgICAgICAgIF91cmxPcHRpb25zW2tleV0gPSB2YWx1ZTsKKyAgICAgIH0KKyAgICAg
IF91cmxPcHRpb25zUGFyc2VkID0gdHJ1ZTsKKyAgICB9CisKKyAgICByZXR1cm4gX3VybE9wdGlv
bnM7CisgIH0KK30pKCk7CisKK2lmICh0eXBlb2YgcXVpZXRNb2RlID09ICd1bmRlZmluZWQnKSB7
CisgIHZhciBxdWlldE1vZGUgPSAoZnVuY3Rpb24oKSB7CisgICAgdmFyIF9xdWlldE1vZGVDaGVj
a2VkID0gZmFsc2U7CisgICAgdmFyIF9pc1F1aWV0ID0gZmFsc2U7CisgICAgcmV0dXJuIGZ1bmN0
aW9uKCkgeworICAgICAgaWYgKCFfcXVpZXRNb2RlQ2hlY2tlZCkgeworICAgICAgICBfaXNRdWll
dCA9IChnZXRVcmxPcHRpb25zKCkucXVpZXQgPT0gMSk7CisgICAgICAgIF9xdWlldE1vZGVDaGVj
a2VkID0gdHJ1ZTsKKyAgICAgIH0KKyAgICAgIHJldHVybiBfaXNRdWlldDsKKyAgICB9CisgIH0p
KCk7Cit9CisKK2Z1bmN0aW9uIG5vbktocm9ub3NGcmFtZXdvcmtOb3RpZnlEb25lKCkgeworICAv
LyBXZWJLaXQgU3BlY2lmaWMgY29kZS4gQWRkIHlvdXIgY29kZSBoZXJlLgorICBpZiAod2luZG93
LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVy
Lm5vdGlmeURvbmUoKTsKKyAgfQorfQorCitmdW5jdGlvbiByZXBvcnRUZXN0UmVzdWx0c1RvSGFy
bmVzcyhzdWNjZXNzLCBtc2cpIHsKKyAgaWYgKHdpbmRvdy5wYXJlbnQud2ViZ2xUZXN0SGFybmVz
cykgeworICAgIHdpbmRvdy5wYXJlbnQud2ViZ2xUZXN0SGFybmVzcy5yZXBvcnRSZXN1bHRzKHdp
bmRvdy5sb2NhdGlvbi5wYXRobmFtZSwgc3VjY2VzcywgbXNnKTsKKyAgfQorfQorCitmdW5jdGlv
biByZXBvcnRTa2lwcGVkVGVzdFJlc3VsdHNUb0hhcm5lc3Moc3VjY2VzcywgbXNnKSB7CisgIGlm
ICh3aW5kb3cucGFyZW50LndlYmdsVGVzdEhhcm5lc3MpIHsKKyAgICB3aW5kb3cucGFyZW50Lndl
YmdsVGVzdEhhcm5lc3MucmVwb3J0UmVzdWx0cyh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUsIHN1
Y2Nlc3MsIG1zZywgdHJ1ZSk7CisgIH0KK30KKworZnVuY3Rpb24gbm90aWZ5RmluaXNoZWRUb0hh
cm5lc3MoKSB7CisgIGlmICh3aW5kb3cucGFyZW50LndlYmdsVGVzdEhhcm5lc3MpIHsKKyAgICB3
aW5kb3cucGFyZW50LndlYmdsVGVzdEhhcm5lc3Mubm90aWZ5RmluaXNoZWQod2luZG93LmxvY2F0
aW9uLnBhdGhuYW1lKTsKKyAgfQorICBpZiAod2luZG93Lm5vbktocm9ub3NGcmFtZXdvcmtOb3Rp
ZnlEb25lKSB7CisgICAgd2luZG93Lm5vbktocm9ub3NGcmFtZXdvcmtOb3RpZnlEb25lKCk7Cisg
IH0KK30KKwordmFyIF9idWZmZXJlZENvbnNvbGVMb2dzID0gW107CisKK2Z1bmN0aW9uIF9idWZm
ZXJlZExvZ1RvQ29uc29sZShtc2cpCit7CisgIGlmIChfYnVmZmVyZWRDb25zb2xlTG9ncykgewor
ICAgIF9idWZmZXJlZENvbnNvbGVMb2dzLnB1c2gobXNnKTsKKyAgfSBlbHNlIGlmICh3aW5kb3cu
Y29uc29sZSkgeworICAgIHdpbmRvdy5jb25zb2xlLmxvZyhtc2cpOworICB9Cit9CisKKy8vIFB1
YmxpYyBlbnRyeSBwb2ludCBleHBvc2VkIHRvIG1hbnkgb3RoZXIgZmlsZXMuCitmdW5jdGlvbiBi
dWZmZXJlZExvZ1RvQ29uc29sZShtc2cpCit7CisgIF9idWZmZXJlZExvZ1RvQ29uc29sZShtc2cp
OworfQorCisvLyBDYWxsZWQgaW1wbGljaXRseSBieSB0ZXN0RmFpbGVkKCkuCitmdW5jdGlvbiBf
Zmx1c2hCdWZmZXJlZExvZ3NUb0NvbnNvbGUoKQoreworICBpZiAoX2J1ZmZlcmVkQ29uc29sZUxv
Z3MpIHsKKyAgICBpZiAod2luZG93LmNvbnNvbGUpIHsKKyAgICAgIGZvciAodmFyIGlpID0gMDsg
aWkgPCBfYnVmZmVyZWRDb25zb2xlTG9ncy5sZW5ndGg7ICsraWkpIHsKKyAgICAgICAgd2luZG93
LmNvbnNvbGUubG9nKF9idWZmZXJlZENvbnNvbGVMb2dzW2lpXSk7CisgICAgICB9CisgICAgfQor
ICAgIF9idWZmZXJlZENvbnNvbGVMb2dzID0gbnVsbDsKKyAgfQorfQorCit2YXIgX2pzVGVzdFBy
ZVZlcmJvc2VMb2dnaW5nID0gZmFsc2U7CisKK2Z1bmN0aW9uIGVuYWJsZUpTVGVzdFByZVZlcmJv
c2VMb2dnaW5nKCkKK3sKKyAgICBfanNUZXN0UHJlVmVyYm9zZUxvZ2dpbmcgPSB0cnVlOworfQor
CitmdW5jdGlvbiBkZXNjcmlwdGlvbihtc2cpCit7CisgICAgaW5pdFRlc3RpbmdIYXJuZXNzKCk7
CisgICAgaWYgKG1zZyA9PT0gdW5kZWZpbmVkKSB7CisgICAgICBtc2cgPSBkb2N1bWVudC50aXRs
ZTsKKyAgICB9CisgICAgLy8gRm9yIE1TSUUgNiBjb21wYXRpYmlsaXR5CisgICAgdmFyIHNwYW4g
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7CisgICAgc3Bhbi5pbm5lckhUTUwgPSAn
PHA+JyArIG1zZyArICc8L3A+PHA+T24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9m
ICI8c3BhbiBjbGFzcz0icGFzcyI+UEFTUzwvc3Bhbj4iIG1lc3NhZ2VzLCBmb2xsb3dlZCBieSAi
PHNwYW4gY2xhc3M9InBhc3MiPlRFU1QgQ09NUExFVEU8L3NwYW4+Ii48L3A+JzsKKyAgICB2YXIg
ZGVzY3JpcHRpb24gPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiZGVzY3JpcHRpb24iKTsKKyAg
ICBpZiAoZGVzY3JpcHRpb24uZmlyc3RDaGlsZCkKKyAgICAgICAgZGVzY3JpcHRpb24ucmVwbGFj
ZUNoaWxkKHNwYW4sIGRlc2NyaXB0aW9uLmZpcnN0Q2hpbGQpOworICAgIGVsc2UKKyAgICAgICAg
ZGVzY3JpcHRpb24uYXBwZW5kQ2hpbGQoc3Bhbik7CisgICAgaWYgKF9qc1Rlc3RQcmVWZXJib3Nl
TG9nZ2luZykgeworICAgICAgICBfYnVmZmVyZWRMb2dUb0NvbnNvbGUobXNnKTsKKyAgICB9Cit9
CisKK2Z1bmN0aW9uIF9hZGRTcGFuKGNvbnRlbnRzKQoreworICAgIHZhciBzcGFuID0gZG9jdW1l
bnQuY3JlYXRlRWxlbWVudCgic3BhbiIpOworICAgIGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJj
b25zb2xlIikuYXBwZW5kQ2hpbGQoc3Bhbik7IC8vIGluc2VydCBpdCBmaXJzdCBzbyBYSFRNTCBr
bm93cyB0aGUgbmFtZXNwYWNlCisgICAgc3Bhbi5pbm5lckhUTUwgPSBjb250ZW50cyArICc8YnIg
Lz4nOworfQorCitmdW5jdGlvbiBkZWJ1Zyhtc2cpCit7CisgICAgaWYgKCFxdWlldE1vZGUoKSkK
KyAgICAgIF9hZGRTcGFuKG1zZyk7CisgICAgaWYgKF9qc1Rlc3RQcmVWZXJib3NlTG9nZ2luZykg
eworICAgICAgICBfYnVmZmVyZWRMb2dUb0NvbnNvbGUobXNnKTsKKyAgICB9Cit9CisKK2Z1bmN0
aW9uIGVzY2FwZUhUTUwodGV4dCkKK3sKKyAgICByZXR1cm4gdGV4dC5yZXBsYWNlKC8mL2csICIm
YW1wOyIpLnJlcGxhY2UoLzwvZywgIiZsdDsiKTsKK30KKy8qKgorICogRGVmaW5lcyB0aGUgZXhj
ZXB0aW9uIHR5cGUgZm9yIGEgdGVzdCBmYWlsdXJlLgorICogQGNvbnN0cnVjdG9yCisgKiBAcGFy
YW0ge3N0cmluZ30gbWVzc2FnZSBUaGUgZXJyb3IgbWVzc2FnZS4KKyAqLwordmFyIFRlc3RGYWls
ZWRFeGNlcHRpb24gPSBmdW5jdGlvbiAobWVzc2FnZSkgeworICAgdGhpcy5tZXNzYWdlID0gbWVz
c2FnZTsKKyAgIHRoaXMubmFtZSA9ICJUZXN0RmFpbGVkRXhjZXB0aW9uIjsKK307CisKKy8qKgor
ICogQHBhcmFtICB7c3RyaW5nPX0gbXNnCisgKi8KK2Z1bmN0aW9uIHRlc3RQYXNzZWQobXNnKSB7
CisgICAgbXNnID0gbXNnIHx8ICdQYXNzZWQnOworICAgIGlmIChfY3VycmVudFRlc3ROYW1lKQor
ICAgICAgbXNnID0gX2N1cnJlbnRUZXN0TmFtZSArICc6ICcgKyBtc2c7CisKKyAgICByZXBvcnRU
ZXN0UmVzdWx0c1RvSGFybmVzcyh0cnVlLCBtc2cpOworCisgICAgaWYgKCFxdWlldE1vZGUoKSkK
KyAgICAgIF9hZGRTcGFuKCc8c3Bhbj48c3BhbiBjbGFzcz0icGFzcyI+UEFTUzwvc3Bhbj4gJyAr
IGVzY2FwZUhUTUwobXNnKSArICc8L3NwYW4+Jyk7CisgICAgaWYgKF9qc1Rlc3RQcmVWZXJib3Nl
TG9nZ2luZykgeworICAgICAgICBfYnVmZmVyZWRMb2dUb0NvbnNvbGUoJ1BBU1MgJyArIG1zZyk7
CisgICAgfQorfQorCisvKioKKyAqIEBwYXJhbSAge3N0cmluZz19IG1zZworICovCitmdW5jdGlv
biB0ZXN0RmFpbGVkKG1zZykgeworICAgIG1zZyA9IG1zZyB8fCAnRmFpbGVkJzsKKyAgICBpZiAo
X2N1cnJlbnRUZXN0TmFtZSkKKyAgICAgIG1zZyA9IF9jdXJyZW50VGVzdE5hbWUgKyAnOiAnICsg
bXNnOworCisgICAgcmVwb3J0VGVzdFJlc3VsdHNUb0hhcm5lc3MoZmFsc2UsIG1zZyk7CisgICAg
X2FkZFNwYW4oJzxzcGFuPjxzcGFuIGNsYXNzPSJmYWlsIj5GQUlMPC9zcGFuPiAnICsgZXNjYXBl
SFRNTChtc2cpICsgJzwvc3Bhbj4nKTsKKyAgICBfYnVmZmVyZWRMb2dUb0NvbnNvbGUoJ0ZBSUwg
JyArIG1zZyk7CisgICAgX2ZsdXNoQnVmZmVyZWRMb2dzVG9Db25zb2xlKCk7Cit9CisKK3ZhciBf
Y3VycmVudFRlc3ROYW1lOworCisvKioKKyAqIFNldHMgdGhlIGN1cnJlbnQgdGVzdCBuYW1lIGZv
ciB1c2FnZSB3aXRoaW4gdGVzdFBhc3NlZE9wdGlvbnMvdGVzdEZhaWxlZE9wdGlvbnMuCisgKiBA
cGFyYW0ge3N0cmluZz19IG5hbWUgVGhlIG5hbWUgdG8gc2V0IGFzIHRoZSBjdXJyZW50IHRlc3Qg
bmFtZS4KKyAqLworZnVuY3Rpb24gc2V0Q3VycmVudFRlc3ROYW1lKG5hbWUpCit7CisgICAgX2N1
cnJlbnRUZXN0TmFtZSA9IG5hbWU7Cit9CisKKy8qKgorICogR2V0cyB0aGUgY3VycmVudCB0ZXN0
IG5hbWUgaW4gdXNlIHdpdGhpbiB0ZXN0UGFzc2VkT3B0aW9ucy90ZXN0RmFpbGVkT3B0aW9ucy4K
KyAqIEByZXR1cm4ge3N0cmluZ30gVGhlIG5hbWUgb2YgdGhlIGN1cnJlbnQgdGVzdC4KKyAqLwor
ZnVuY3Rpb24gZ2V0Q3VycmVudFRlc3ROYW1lKCkKK3sKKyAgICByZXR1cm4gX2N1cnJlbnRUZXN0
TmFtZTsKK30KKworLyoqCisgKiBWYXJpYXRpb24gb2YgdGhlIHRlc3RQYXNzZWQgZnVuY3Rpb24s
IHdpdGggdGhlIG9wdGlvbiB0byBub3Qgc2hvdyAoYW5kIHRodXMgbm90IGNvdW50KSB0aGUgdGVz
dCdzIHBhc3MgcmVzdWx0LgorICogQHBhcmFtIHtzdHJpbmd9IG1zZyBUaGUgbWVzc2FnZSB0byBi
ZSBzaG93biBpbiB0aGUgcGFzcyByZXN1bHQuCisgKiBAcGFyYW0ge2Jvb2xlYW59IGFkZFNwYW4g
SW5kaWNhdGVzIHdoZXRoZXIgdGhlIG1lc3NhZ2Ugd2lsbCBiZSB2aXNpYmxlICh0aHVzIGNvdW50
ZWQgaW4gdGhlIHJlc3VsdHMpIG9yIG5vdC4KKyAqLworZnVuY3Rpb24gdGVzdFBhc3NlZE9wdGlv
bnMobXNnLCBhZGRTcGFuKQoreworICAgIGlmIChhZGRTcGFuICYmICFxdWlldE1vZGUoKSkKKyAg
ICB7CisgICAgICAgIHJlcG9ydFRlc3RSZXN1bHRzVG9IYXJuZXNzKHRydWUsIF9jdXJyZW50VGVz
dE5hbWUgKyAiOiAiICsgbXNnKTsKKyAgICAgICAgX2FkZFNwYW4oJzxzcGFuPjxzcGFuIGNsYXNz
PSJwYXNzIj5QQVNTPC9zcGFuPiAnICsgZXNjYXBlSFRNTChfY3VycmVudFRlc3ROYW1lKSArICI6
ICIgKyBlc2NhcGVIVE1MKG1zZykgKyAnPC9zcGFuPicpOworICAgIH0KKyAgICBpZiAoX2pzVGVz
dFByZVZlcmJvc2VMb2dnaW5nKSB7CisgICAgICAgIF9idWZmZXJlZExvZ1RvQ29uc29sZSgnUEFT
UyAnICsgbXNnKTsKKyAgICB9Cit9CisKKy8qKgorICogUmVwb3J0IHNraXBwZWQgdGVzdHMuCisg
KiBAcGFyYW0ge3N0cmluZ30gbXNnIFRoZSBtZXNzYWdlIHRvIGJlIHNob3duIGluIHRoZSBza2lw
IHJlc3VsdC4KKyAqIEBwYXJhbSB7Ym9vbGVhbn0gYWRkU3BhbiBJbmRpY2F0ZXMgd2hldGhlciB0
aGUgbWVzc2FnZSB3aWxsIGJlIHZpc2libGUgKHRodXMgY291bnRlZCBpbiB0aGUgcmVzdWx0cykg
b3Igbm90LgorICovCitmdW5jdGlvbiB0ZXN0U2tpcHBlZE9wdGlvbnMobXNnLCBhZGRTcGFuKQor
eworICAgIGlmIChhZGRTcGFuICYmICFxdWlldE1vZGUoKSkKKyAgICB7CisgICAgICAgIHJlcG9y
dFNraXBwZWRUZXN0UmVzdWx0c1RvSGFybmVzcyh0cnVlLCBfY3VycmVudFRlc3ROYW1lICsgIjog
IiArIG1zZyk7CisgICAgICAgIF9hZGRTcGFuKCc8c3Bhbj48c3BhbiBjbGFzcz0id2FybiI+U0tJ
UDwvc3Bhbj4gJyArIGVzY2FwZUhUTUwoX2N1cnJlbnRUZXN0TmFtZSkgKyAiOiAiICsgZXNjYXBl
SFRNTChtc2cpICsgJzwvc3Bhbj4nKTsKKyAgICB9CisgICAgaWYgKF9qc1Rlc3RQcmVWZXJib3Nl
TG9nZ2luZykgeworICAgICAgICBfYnVmZmVyZWRMb2dUb0NvbnNvbGUoJ1NLSVAnICsgbXNnKTsK
KyAgICB9Cit9CisKKy8qKgorICogVmFyaWF0aW9uIG9mIHRoZSB0ZXN0RmFpbGVkIGZ1bmN0aW9u
LCB3aXRoIHRoZSBvcHRpb24gdG8gdGhyb3cgYW4gZXhjZXB0aW9uIG9yIG5vdC4KKyAqIEBwYXJh
bSB7c3RyaW5nfSBtc2cgVGhlIG1lc3NhZ2UgdG8gYmUgc2hvd24gaW4gdGhlIGZhaWwgcmVzdWx0
LgorICogQHBhcmFtIHtib29sZWFufSBleHRocm93IEluZGljYXRlcyB3aGV0aGVyIHRoZSBmdW5j
dGlvbiB3aWxsIHRocm93IGEgVGVzdEZhaWxlZEV4Y2VwdGlvbiBvciBub3QuCisgKi8KK2Z1bmN0
aW9uIHRlc3RGYWlsZWRPcHRpb25zKG1zZywgZXh0aHJvdykKK3sKKyAgICByZXBvcnRUZXN0UmVz
dWx0c1RvSGFybmVzcyhmYWxzZSwgX2N1cnJlbnRUZXN0TmFtZSArICI6ICIgKyBtc2cpOworICAg
IF9hZGRTcGFuKCc8c3Bhbj48c3BhbiBjbGFzcz0iZmFpbCI+RkFJTDwvc3Bhbj4gJyArIGVzY2Fw
ZUhUTUwoX2N1cnJlbnRUZXN0TmFtZSkgKyAiOiAiICsgZXNjYXBlSFRNTChtc2cpICsgJzwvc3Bh
bj4nKTsKKyAgICBfYnVmZmVyZWRMb2dUb0NvbnNvbGUoJ0ZBSUwgJyArIG1zZyk7CisgICAgX2Zs
dXNoQnVmZmVyZWRMb2dzVG9Db25zb2xlKCk7CisgICAgaWYgKGV4dGhyb3cpIHsKKyAgICAgICAg
X2N1cnJlbnRUZXN0TmFtZSA9ICIiOyAvL1JlbWVtYmVyaW5nIHRvIHNldCB0aGUgbmFtZSBvZiBj
dXJyZW50IHRlc3RjYXNlIHRvIGVtcHR5IHN0cmluZy4KKyAgICAgICAgdGhyb3cgbmV3IFRlc3RG
YWlsZWRFeGNlcHRpb24obXNnKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIGFyZUFycmF5c0VxdWFs
KF9hLCBfYikKK3sKKyAgICB0cnkgeworICAgICAgICBpZiAoX2EubGVuZ3RoICE9PSBfYi5sZW5n
dGgpCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgX2EubGVuZ3RoOyBpKyspCisgICAgICAgICAgICBpZiAoX2FbaV0gIT09IF9iW2ldKQorICAg
ICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICB9IGNhdGNoIChleCkgeworICAgICAgICBy
ZXR1cm4gZmFsc2U7CisgICAgfQorICAgIHJldHVybiB0cnVlOworfQorCitmdW5jdGlvbiBpc01p
bnVzWmVybyhuKQoreworICAgIC8vIHRoZSBvbmx5IHdheSB0byB0ZWxsIDAgZnJvbSAtMCBpbiBK
UyBpcyB0aGUgZmFjdCB0aGF0IDEvLTAgaXMKKyAgICAvLyAtSW5maW5pdHkgaW5zdGVhZCBvZiBJ
bmZpbml0eQorICAgIHJldHVybiBuID09PSAwICYmIDEvbiA8IDA7Cit9CisKK2Z1bmN0aW9uIGlz
UmVzdWx0Q29ycmVjdChfYWN0dWFsLCBfZXhwZWN0ZWQpCit7CisgICAgaWYgKF9leHBlY3RlZCA9
PT0gMCkKKyAgICAgICAgcmV0dXJuIF9hY3R1YWwgPT09IF9leHBlY3RlZCAmJiAoMS9fYWN0dWFs
KSA9PT0gKDEvX2V4cGVjdGVkKTsKKyAgICBpZiAoX2FjdHVhbCA9PT0gX2V4cGVjdGVkKQorICAg
ICAgICByZXR1cm4gdHJ1ZTsKKyAgICBpZiAodHlwZW9mKF9leHBlY3RlZCkgPT0gIm51bWJlciIg
JiYgaXNOYU4oX2V4cGVjdGVkKSkKKyAgICAgICAgcmV0dXJuIHR5cGVvZihfYWN0dWFsKSA9PSAi
bnVtYmVyIiAmJiBpc05hTihfYWN0dWFsKTsKKyAgICBpZiAoT2JqZWN0LnByb3RvdHlwZS50b1N0
cmluZy5jYWxsKF9leHBlY3RlZCkgPT0gT2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFtd
KSkKKyAgICAgICAgcmV0dXJuIGFyZUFycmF5c0VxdWFsKF9hY3R1YWwsIF9leHBlY3RlZCk7Cisg
ICAgcmV0dXJuIGZhbHNlOworfQorCitmdW5jdGlvbiBzdHJpbmdpZnkodikKK3sKKyAgICBpZiAo
diA9PT0gMCAmJiAxL3YgPCAwKQorICAgICAgICByZXR1cm4gIi0wIjsKKyAgICBlbHNlIHJldHVy
biAiIiArIHY7Cit9CisKK2Z1bmN0aW9uIGV2YWxBbmRMb2coX2EpCit7CisgIGlmICh0eXBlb2Yg
X2EgIT0gInN0cmluZyIpCisgICAgZGVidWcoIldBUk46IHRyeUFuZExvZygpIGV4cGVjdHMgYSBz
dHJpbmcgYXJndW1lbnQiKTsKKworICAvLyBMb2cgZmlyc3QgaW4gY2FzZSB0aGluZ3MgZ28gaG9y
cmlibHkgd3Jvbmcgb3IgdGhpcyBjYXVzZXMgYSBzeW5jIGV2ZW50LgorICBkZWJ1ZyhfYSk7CisK
KyAgdmFyIF9hdjsKKyAgdHJ5IHsKKyAgICAgX2F2ID0gZXZhbChfYSk7CisgIH0gY2F0Y2ggKGUp
IHsKKyAgICB0ZXN0RmFpbGVkKF9hICsgIiB0aHJldyBleGNlcHRpb24gIiArIGUpOworICB9Cisg
IHJldHVybiBfYXY7Cit9CisKK2Z1bmN0aW9uIHNob3VsZEJlU3RyaW5nKGV2YWxhYmxlLCBleHBl
Y3RlZCkgeworICAgIGNvbnN0IHZhbCA9IGV2YWwoZXZhbGFibGUpOworICAgIGNvbnN0IHRleHQg
PSBldmFsYWJsZSArICIgc2hvdWxkIGJlICIgKyBleHBlY3RlZCArICIuIjsKKyAgICBpZiAodmFs
ID09IGV4cGVjdGVkKSB7CisgICAgICAgIHRlc3RQYXNzZWQodGV4dCk7CisgICAgfSBlbHNlIHsK
KyAgICAgICAgdGVzdEZhaWxlZCh0ZXh0ICsgIiAod2FzICIgKyB2YWwgKyAiKSIpOworICAgIH0K
K30KKworZnVuY3Rpb24gc2hvdWxkQmUoX2EsIF9iLCBxdWlldCkKK3sKKyAgICBpZiAodHlwZW9m
IF9hICE9ICJzdHJpbmciIHx8IHR5cGVvZiBfYiAhPSAic3RyaW5nIikKKyAgICAgICAgZGVidWco
IldBUk46IHNob3VsZEJlKCkgZXhwZWN0cyBzdHJpbmcgYXJndW1lbnRzIik7CisgICAgdmFyIGV4
Y2VwdGlvbjsKKyAgICB2YXIgX2F2OworICAgIHRyeSB7CisgICAgICAgIF9hdiA9IGV2YWwoX2Ep
OworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgZXhjZXB0aW9uID0gZTsKKyAgICB9CisgICAg
dmFyIF9idiA9IGV2YWwoX2IpOworCisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgdGVzdEZh
aWxlZChfYSArICIgc2hvdWxkIGJlICIgKyBfYnYgKyAiLiBUaHJldyBleGNlcHRpb24gIiArIGV4
Y2VwdGlvbik7CisgICAgZWxzZSBpZiAoaXNSZXN1bHRDb3JyZWN0KF9hdiwgX2J2KSkgeworICAg
ICAgICBpZiAoIXF1aWV0KSB7CisgICAgICAgICAgICB0ZXN0UGFzc2VkKF9hICsgIiBpcyAiICsg
X2IpOworICAgICAgICB9CisgICAgfSBlbHNlIGlmICh0eXBlb2YoX2F2KSA9PSB0eXBlb2YoX2J2
KSkKKyAgICAgICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIGJlICIgKyBfYnYgKyAiLiBXYXMg
IiArIHN0cmluZ2lmeShfYXYpICsgIi4iKTsKKyAgICBlbHNlCisgICAgICAgIHRlc3RGYWlsZWQo
X2EgKyAiIHNob3VsZCBiZSAiICsgX2J2ICsgIiAob2YgdHlwZSAiICsgdHlwZW9mIF9idiArICIp
LiBXYXMgIiArIF9hdiArICIgKG9mIHR5cGUgIiArIHR5cGVvZiBfYXYgKyAiKS4iKTsKK30KKwor
ZnVuY3Rpb24gc2hvdWxkTm90QmUoX2EsIF9iLCBxdWlldCkKK3sKKyAgICBpZiAodHlwZW9mIF9h
ICE9ICJzdHJpbmciIHx8IHR5cGVvZiBfYiAhPSAic3RyaW5nIikKKyAgICAgICAgZGVidWcoIldB
Uk46IHNob3VsZE5vdEJlKCkgZXhwZWN0cyBzdHJpbmcgYXJndW1lbnRzIik7CisgICAgdmFyIGV4
Y2VwdGlvbjsKKyAgICB2YXIgX2F2OworICAgIHRyeSB7CisgICAgICAgIF9hdiA9IGV2YWwoX2Ep
OworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgZXhjZXB0aW9uID0gZTsKKyAgICB9CisgICAg
dmFyIF9idiA9IGV2YWwoX2IpOworCisgICAgaWYgKGV4Y2VwdGlvbikKKyAgICAgICAgdGVzdEZh
aWxlZChfYSArICIgc2hvdWxkIG5vdCBiZSAiICsgX2J2ICsgIi4gVGhyZXcgZXhjZXB0aW9uICIg
KyBleGNlcHRpb24pOworICAgIGVsc2UgaWYgKCFpc1Jlc3VsdENvcnJlY3QoX2F2LCBfYnYpKSB7
CisgICAgICAgIGlmICghcXVpZXQpIHsKKyAgICAgICAgICAgIHRlc3RQYXNzZWQoX2EgKyAiIGlz
IG5vdCAiICsgX2IpOworICAgICAgICB9CisgICAgfSBlbHNlCisgICAgICAgIHRlc3RGYWlsZWQo
X2EgKyAiIHNob3VsZCBub3QgYmUgIiArIF9idiArICIuIik7Cit9CisKK2Z1bmN0aW9uIHNob3Vs
ZEJlVHJ1ZShfYSkgeyBzaG91bGRCZShfYSwgInRydWUiKTsgfQorZnVuY3Rpb24gc2hvdWxkQmVG
YWxzZShfYSkgeyBzaG91bGRCZShfYSwgImZhbHNlIik7IH0KK2Z1bmN0aW9uIHNob3VsZEJlTmFO
KF9hKSB7IHNob3VsZEJlKF9hLCAiTmFOIik7IH0KK2Z1bmN0aW9uIHNob3VsZEJlTnVsbChfYSkg
eyBzaG91bGRCZShfYSwgIm51bGwiKTsgfQorCitmdW5jdGlvbiBzaG91bGRCZUVxdWFsVG9TdHJp
bmcoYSwgYikKK3sKKyAgdmFyIHVuZXZhbGVkU3RyaW5nID0gJyInICsgYi5yZXBsYWNlKC8iL2cs
ICJcIiIpICsgJyInOworICBzaG91bGRCZShhLCB1bmV2YWxlZFN0cmluZyk7Cit9CisKK2Z1bmN0
aW9uIHNob3VsZEV2YWx1YXRlVG8oYWN0dWFsLCBleHBlY3RlZCkgeworICAvLyBBIGdlbmVyYWwt
cHVycG9zZSBjb21wYXJhdG9yLiAgJ2FjdHVhbCcgc2hvdWxkIGJlIGEgc3RyaW5nIHRvIGJlCisg
IC8vIGV2YWx1YXRlZCwgYXMgZm9yIHNob3VsZEJlKCkuICdleHBlY3RlZCcgbWF5IGJlIGFueSB0
eXBlIGFuZCB3aWxsIGJlCisgIC8vIHVzZWQgd2l0aG91dCBiZWluZyBldmFsJ2VkLgorICBpZiAo
ZXhwZWN0ZWQgPT0gbnVsbCkgeworICAgIC8vIERvIHRoaXMgYmVmb3JlIHRoZSBvYmplY3QgdGVz
dCwgc2luY2UgbnVsbCBpcyBvZiB0eXBlICdvYmplY3QnLgorICAgIHNob3VsZEJlTnVsbChhY3R1
YWwpOworICB9IGVsc2UgaWYgKHR5cGVvZiBleHBlY3RlZCA9PSAidW5kZWZpbmVkIikgeworICAg
IHNob3VsZEJlVW5kZWZpbmVkKGFjdHVhbCk7CisgIH0gZWxzZSBpZiAodHlwZW9mIGV4cGVjdGVk
ID09ICJmdW5jdGlvbiIpIHsKKyAgICAvLyBBbGwgdGhpcyBmdXNzIGlzIHRvIGF2b2lkIHRoZSBz
dHJpbmctYXJnIHdhcm5pbmcgZnJvbSBzaG91bGRCZSgpLgorICAgIHRyeSB7CisgICAgICB2YXIg
YWN0dWFsVmFsdWUgPSBldmFsKGFjdHVhbCk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgdGVz
dEZhaWxlZCgiRXZhbHVhdGluZyAiICsgYWN0dWFsICsgIjogVGhyZXcgZXhjZXB0aW9uICIgKyBl
KTsKKyAgICAgIHJldHVybjsKKyAgICB9CisgICAgc2hvdWxkQmUoIiciICsgYWN0dWFsVmFsdWUu
dG9TdHJpbmcoKS5yZXBsYWNlKC9cbi9nLCAiIikgKyAiJyIsCisgICAgICAgICAgICAgIiciICsg
ZXhwZWN0ZWQudG9TdHJpbmcoKS5yZXBsYWNlKC9cbi9nLCAiIikgKyAiJyIpOworICB9IGVsc2Ug
aWYgKHR5cGVvZiBleHBlY3RlZCA9PSAib2JqZWN0IikgeworICAgIHNob3VsZEJlVHJ1ZShhY3R1
YWwgKyAiID09ICciICsgZXhwZWN0ZWQgKyAiJyIpOworICB9IGVsc2UgaWYgKHR5cGVvZiBleHBl
Y3RlZCA9PSAic3RyaW5nIikgeworICAgIHNob3VsZEJlKGFjdHVhbCwgZXhwZWN0ZWQpOworICB9
IGVsc2UgaWYgKHR5cGVvZiBleHBlY3RlZCA9PSAiYm9vbGVhbiIpIHsKKyAgICBzaG91bGRCZSgi
dHlwZW9mICIgKyBhY3R1YWwsICInYm9vbGVhbiciKTsKKyAgICBpZiAoZXhwZWN0ZWQpCisgICAg
ICBzaG91bGRCZVRydWUoYWN0dWFsKTsKKyAgICBlbHNlCisgICAgICBzaG91bGRCZUZhbHNlKGFj
dHVhbCk7CisgIH0gZWxzZSBpZiAodHlwZW9mIGV4cGVjdGVkID09ICJudW1iZXIiKSB7CisgICAg
c2hvdWxkQmUoYWN0dWFsLCBzdHJpbmdpZnkoZXhwZWN0ZWQpKTsKKyAgfSBlbHNlIHsKKyAgICBk
ZWJ1ZyhleHBlY3RlZCArICIgaXMgdW5rbm93biB0eXBlICIgKyB0eXBlb2YgZXhwZWN0ZWQpOwor
ICAgIHNob3VsZEJlVHJ1ZShhY3R1YWwsICInIiAgK2V4cGVjdGVkLnRvU3RyaW5nKCkgKyAiJyIp
OworICB9Cit9CisKK2Z1bmN0aW9uIHNob3VsZEJlTm9uWmVybyhfYSkKK3sKKyAgdmFyIGV4Y2Vw
dGlvbjsKKyAgdmFyIF9hdjsKKyAgdHJ5IHsKKyAgICAgX2F2ID0gZXZhbChfYSk7CisgIH0gY2F0
Y2ggKGUpIHsKKyAgICAgZXhjZXB0aW9uID0gZTsKKyAgfQorCisgIGlmIChleGNlcHRpb24pCisg
ICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIGJlIG5vbi16ZXJvLiBUaHJldyBleGNlcHRpb24g
IiArIGV4Y2VwdGlvbik7CisgIGVsc2UgaWYgKF9hdiAhPSAwKQorICAgIHRlc3RQYXNzZWQoX2Eg
KyAiIGlzIG5vbi16ZXJvLiIpOworICBlbHNlCisgICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxk
IGJlIG5vbi16ZXJvLiBXYXMgIiArIF9hdik7Cit9CisKK2Z1bmN0aW9uIHNob3VsZEJlTm9uTnVs
bChfYSkKK3sKKyAgdmFyIGV4Y2VwdGlvbjsKKyAgdmFyIF9hdjsKKyAgdHJ5IHsKKyAgICAgX2F2
ID0gZXZhbChfYSk7CisgIH0gY2F0Y2ggKGUpIHsKKyAgICAgZXhjZXB0aW9uID0gZTsKKyAgfQor
CisgIGlmIChleGNlcHRpb24pCisgICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIGJlIG5vbi1u
dWxsLiBUaHJldyBleGNlcHRpb24gIiArIGV4Y2VwdGlvbik7CisgIGVsc2UgaWYgKF9hdiAhPSBu
dWxsKQorICAgIHRlc3RQYXNzZWQoX2EgKyAiIGlzIG5vbi1udWxsLiIpOworICBlbHNlCisgICAg
dGVzdEZhaWxlZChfYSArICIgc2hvdWxkIGJlIG5vbi1udWxsLiBXYXMgIiArIF9hdik7Cit9CisK
K2Z1bmN0aW9uIHNob3VsZEJlVW5kZWZpbmVkKF9hKQoreworICB2YXIgZXhjZXB0aW9uOworICB2
YXIgX2F2OworICB0cnkgeworICAgICBfYXYgPSBldmFsKF9hKTsKKyAgfSBjYXRjaCAoZSkgewor
ICAgICBleGNlcHRpb24gPSBlOworICB9CisKKyAgaWYgKGV4Y2VwdGlvbikKKyAgICB0ZXN0RmFp
bGVkKF9hICsgIiBzaG91bGQgYmUgdW5kZWZpbmVkLiBUaHJldyBleGNlcHRpb24gIiArIGV4Y2Vw
dGlvbik7CisgIGVsc2UgaWYgKHR5cGVvZiBfYXYgPT0gInVuZGVmaW5lZCIpCisgICAgdGVzdFBh
c3NlZChfYSArICIgaXMgdW5kZWZpbmVkLiIpOworICBlbHNlCisgICAgdGVzdEZhaWxlZChfYSAr
ICIgc2hvdWxkIGJlIHVuZGVmaW5lZC4gV2FzICIgKyBfYXYpOworfQorCitmdW5jdGlvbiBzaG91
bGRCZURlZmluZWQoX2EpCit7CisgIHZhciBleGNlcHRpb247CisgIHZhciBfYXY7CisgIHRyeSB7
CisgICAgIF9hdiA9IGV2YWwoX2EpOworICB9IGNhdGNoIChlKSB7CisgICAgIGV4Y2VwdGlvbiA9
IGU7CisgIH0KKworICBpZiAoZXhjZXB0aW9uKQorICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3Vs
ZCBiZSBkZWZpbmVkLiBUaHJldyBleGNlcHRpb24gIiArIGV4Y2VwdGlvbik7CisgIGVsc2UgaWYg
KF9hdiAhPT0gdW5kZWZpbmVkKQorICAgIHRlc3RQYXNzZWQoX2EgKyAiIGlzIGRlZmluZWQuIik7
CisgIGVsc2UKKyAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQgYmUgZGVmaW5lZC4gV2FzICIg
KyBfYXYpOworfQorCitmdW5jdGlvbiBzaG91bGRCZUxlc3NUaGFuT3JFcXVhbChfYSwgX2IpIHsK
KyAgICBpZiAodHlwZW9mIF9hICE9ICJzdHJpbmciIHx8IHR5cGVvZiBfYiAhPSAic3RyaW5nIikK
KyAgICAgICAgZGVidWcoIldBUk46IHNob3VsZEJlTGVzc1RoYW5PckVxdWFsIGV4cGVjdHMgc3Ry
aW5nIGFyZ3VtZW50cyIpOworCisgICAgdmFyIGV4Y2VwdGlvbjsKKyAgICB2YXIgX2F2OworICAg
IHRyeSB7CisgICAgICAgIF9hdiA9IGV2YWwoX2EpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAg
ICAgZXhjZXB0aW9uID0gZTsKKyAgICB9CisgICAgdmFyIF9idiA9IGV2YWwoX2IpOworCisgICAg
aWYgKGV4Y2VwdGlvbikKKyAgICAgICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIGJlIDw9ICIg
KyBfYiArICIuIFRocmV3IGV4Y2VwdGlvbiAiICsgZXhjZXB0aW9uKTsKKyAgICBlbHNlIGlmICh0
eXBlb2YgX2F2ID09ICJ1bmRlZmluZWQiIHx8IF9hdiA+IF9idikKKyAgICAgICAgdGVzdEZhaWxl
ZChfYSArICIgc2hvdWxkIGJlID49ICIgKyBfYiArICIuIFdhcyAiICsgX2F2ICsgIiAob2YgdHlw
ZSAiICsgdHlwZW9mIF9hdiArICIpLiIpOworICAgIGVsc2UKKyAgICAgICAgdGVzdFBhc3NlZChf
YSArICIgaXMgPD0gIiArIF9iKTsKK30KKworZnVuY3Rpb24gc2hvdWxkQmVHcmVhdGVyVGhhbk9y
RXF1YWwoX2EsIF9iKSB7CisgICAgaWYgKHR5cGVvZiBfYSAhPSAic3RyaW5nIiB8fCB0eXBlb2Yg
X2IgIT0gInN0cmluZyIpCisgICAgICAgIGRlYnVnKCJXQVJOOiBzaG91bGRCZUdyZWF0ZXJUaGFu
T3JFcXVhbCBleHBlY3RzIHN0cmluZyBhcmd1bWVudHMiKTsKKworICAgIHZhciBleGNlcHRpb247
CisgICAgdmFyIF9hdjsKKyAgICB0cnkgeworICAgICAgICBfYXYgPSBldmFsKF9hKTsKKyAgICB9
IGNhdGNoIChlKSB7CisgICAgICAgIGV4Y2VwdGlvbiA9IGU7CisgICAgfQorICAgIHZhciBfYnYg
PSBldmFsKF9iKTsKKworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHRlc3RGYWlsZWQoX2Eg
KyAiIHNob3VsZCBiZSA+PSAiICsgX2IgKyAiLiBUaHJldyBleGNlcHRpb24gIiArIGV4Y2VwdGlv
bik7CisgICAgZWxzZSBpZiAodHlwZW9mIF9hdiA9PSAidW5kZWZpbmVkIiB8fCBfYXYgPCBfYnYp
CisgICAgICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSA+PSAiICsgX2IgKyAiLiBXYXMg
IiArIF9hdiArICIgKG9mIHR5cGUgIiArIHR5cGVvZiBfYXYgKyAiKS4iKTsKKyAgICBlbHNlCisg
ICAgICAgIHRlc3RQYXNzZWQoX2EgKyAiIGlzID49ICIgKyBfYik7Cit9CisKK2Z1bmN0aW9uIGV4
cGVjdFRydWUodiwgbXNnKSB7CisgIGlmICh2KSB7CisgICAgdGVzdFBhc3NlZChtc2cpOworICB9
IGVsc2UgeworICAgIHRlc3RGYWlsZWQobXNnKTsKKyAgfQorfQorCitmdW5jdGlvbiBtYXhBcnJh
eURpZmYoYSwgYikgeworICAgIGlmIChhLmxlbmd0aCAhPSBiLmxlbmd0aCkKKyAgICAgICAgdGhy
b3cgbmV3IEVycm9yKGBhIGFuZCBiIGhhdmUgZGlmZmVyZW50IGxlbmd0aHM6ICR7YS5sZW5ndGh9
IHZzICR7Yi5sZW5ndGh9YCk7CisKKyAgICBsZXQgZGlmZiA9IDA7CisgICAgZm9yIChjb25zdCBp
IGluIGEpIHsKKyAgICAgICAgZGlmZiA9IE1hdGgubWF4KGRpZmYsIE1hdGguYWJzKGFbaV0gLSBi
W2ldKSk7CisgICAgfQorICAgIHJldHVybiBkaWZmOworfQorCitmdW5jdGlvbiBleHBlY3RBcnJh
eSh3YXMsIGV4cGVjdGVkLCBtYXhEaWZmPTApIHsKKyAgICBjb25zdCBkaWZmID0gbWF4QXJyYXlE
aWZmKGV4cGVjdGVkLCB3YXMpOworICAgIGxldCBzdHIgPSBgRXhwZWN0ZWQgWyR7ZXhwZWN0ZWQu
dG9TdHJpbmcoKX1dYDsKKyAgICBsZXQgZm4gPSB0ZXN0UGFzc2VkOworICAgIGlmIChtYXhEaWZm
KSB7CisgICAgICAgIHN0ciArPSAnICsvLSAnICsgbWF4RGlmZjsKKyAgICB9CisgICAgaWYgKGRp
ZmYgPiBtYXhEaWZmKSB7CisgICAgICAgIGZuID0gdGVzdEZhaWxlZDsKKyAgICAgICAgc3RyICs9
IGAsIHdhcyBbJHt3YXMudG9TdHJpbmcoKX1dYDsKKyAgICB9CisgICAgZm4oc3RyKTsKK30KKwor
ZnVuY3Rpb24gc2hvdWxkVGhyb3coX2EsIF9lKQoreworICB2YXIgZXhjZXB0aW9uOworICB2YXIg
X2F2OworICB0cnkgeworICAgICBfYXYgPSBldmFsKF9hKTsKKyAgfSBjYXRjaCAoZSkgeworICAg
ICBleGNlcHRpb24gPSBlOworICB9CisKKyAgdmFyIF9ldjsKKyAgaWYgKF9lKQorICAgICAgX2V2
ID0gIGV2YWwoX2UpOworCisgIGlmIChleGNlcHRpb24pIHsKKyAgICBpZiAodHlwZW9mIF9lID09
ICJ1bmRlZmluZWQiIHx8IGV4Y2VwdGlvbiA9PSBfZXYpCisgICAgICB0ZXN0UGFzc2VkKF9hICsg
IiB0aHJldyBleGNlcHRpb24gIiArIGV4Y2VwdGlvbiArICIuIik7CisgICAgZWxzZQorICAgICAg
dGVzdEZhaWxlZChfYSArICIgc2hvdWxkIHRocm93ICIgKyAodHlwZW9mIF9lID09ICJ1bmRlZmlu
ZWQiID8gImFuIGV4Y2VwdGlvbiIgOiBfZXYpICsgIi4gVGhyZXcgZXhjZXB0aW9uICIgKyBleGNl
cHRpb24gKyAiLiIpOworICB9IGVsc2UgaWYgKHR5cGVvZiBfYXYgPT0gInVuZGVmaW5lZCIpCisg
ICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIHRocm93ICIgKyAodHlwZW9mIF9lID09ICJ1bmRl
ZmluZWQiID8gImFuIGV4Y2VwdGlvbiIgOiBfZXYpICsgIi4gV2FzIHVuZGVmaW5lZC4iKTsKKyAg
ZWxzZQorICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCB0aHJvdyAiICsgKHR5cGVvZiBfZSA9
PSAidW5kZWZpbmVkIiA/ICJhbiBleGNlcHRpb24iIDogX2V2KSArICIuIFdhcyAiICsgX2F2ICsg
Ii4iKTsKK30KKworZnVuY3Rpb24gc2hvdWxkTm90VGhyb3coZXZhbFN0ciwgZGVzYykgeworICBk
ZXNjID0gZGVzYyB8fCBgXGAke2V2YWxTdHJ9XGBgOworICB0cnkgeworICAgIGV2YWwoZXZhbFN0
cik7CisgICAgdGVzdFBhc3NlZChgJHtkZXNjfSBzaG91bGQgbm90IHRocm93LmApOworICB9IGNh
dGNoIChlKSB7CisgICAgdGVzdEZhaWxlZChgJHtkZXNjfSBzaG91bGQgbm90IHRocm93LCBidXQg
dGhyZXcgZXhjZXB0aW9uICR7ZX0uYCk7CisgIH0KK30KKworCitmdW5jdGlvbiBzaG91bGRCZVR5
cGUoX2EsIF90eXBlKSB7CisgICAgdmFyIGV4Y2VwdGlvbjsKKyAgICB2YXIgX2F2OworICAgIHRy
eSB7CisgICAgICAgIF9hdiA9IGV2YWwoX2EpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAg
ZXhjZXB0aW9uID0gZTsKKyAgICB9CisKKyAgICB2YXIgX3R5cGV2ID0gZXZhbChfdHlwZSk7CisK
KyAgICBpZihfdHlwZXYgPT09IE51bWJlcil7CisgICAgICAgIGlmKF9hdiBpbnN0YW5jZW9mIE51
bWJlcil7CisgICAgICAgICAgICB0ZXN0UGFzc2VkKF9hICsgIiBpcyBhbiBpbnN0YW5jZSBvZiBO
dW1iZXIiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNlIGlmKHR5cGVvZihfYXYpID09PSAnbnVt
YmVyJyl7CisgICAgICAgICAgICB0ZXN0UGFzc2VkKF9hICsgIiBpcyBhbiBpbnN0YW5jZSBvZiBO
dW1iZXIiKTsKKyAgICAgICAgfQorICAgICAgICBlbHNleworICAgICAgICAgICAgdGVzdEZhaWxl
ZChfYSArICIgaXMgbm90IGFuIGluc3RhbmNlIG9mIE51bWJlciIpOworICAgICAgICB9CisgICAg
fQorICAgIGVsc2UgaWYgKF9hdiBpbnN0YW5jZW9mIF90eXBldikgeworICAgICAgICB0ZXN0UGFz
c2VkKF9hICsgIiBpcyBhbiBpbnN0YW5jZSBvZiAiICsgX3R5cGUpOworICAgIH0gZWxzZSB7Cisg
ICAgICAgIHRlc3RGYWlsZWQoX2EgKyAiIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiAiICsgX3R5cGUp
OworICAgIH0KK30KKworLyoqCisgKiBTaG93cyBhIG1lc3NhZ2UgaW4gY2FzZSBleHByZXNzaW9u
IHRlc3QgZmFpbHMuCisgKiBAcGFyYW0ge2Jvb2xlYW59IGV4cAorICogQHBhcmFtIHtzdHJhaW5n
fSBtZXNzYWdlCisgKi8KK2Z1bmN0aW9uIGNoZWNrTWVzc2FnZShleHAsIG1lc3NhZ2UpIHsKKyAg
ICBpZiAoICFleHAgKQorICAgICAgICBfYWRkU3BhbignPHNwYW4+PHNwYW4gY2xhc3M9Indhcm4i
PldBUk5JTkc8L3NwYW4+ICcgKyBlc2NhcGVIVE1MKF9jdXJyZW50VGVzdE5hbWUpICsgIjogIiAr
IGVzY2FwZUhUTUwobWVzc2FnZSkgKyAnPC9zcGFuPicpOworfQorCitmdW5jdGlvbiBhc3NlcnRN
c2coYXNzZXJ0aW9uLCBtc2cpIHsKKyAgICBpZiAoYXNzZXJ0aW9uKSB7CisgICAgICAgIHRlc3RQ
YXNzZWQobXNnKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0ZXN0RmFpbGVkKG1zZyk7CisgICAg
fQorfQorCisvKioKKyAqIFZhcmlhdGlvbiBvZiB0aGUgYXNzZXJ0TXNnIGZ1bmN0aW9uLCB3aXRo
IHRoZSBvcHRpb24gdG8gbm90IHNob3cgKGFuZCB0aHVzIG5vdCBjb3VudCkgdGhlIHRlc3QncyBw
YXNzIHJlc3VsdCwKKyAqIGFuZCB0aHJvdyBvciBub3QgYSBUZXN0RmFpbGVkRXhjZXB0aW9uIGlu
IGNhc2Ugb2YgZmFpbHVyZS4KKyAqIEBwYXJhbSB7Ym9vbGVhbn0gYXNzZXJ0aW9uIElmIHRoaXMg
aXMgdHJ1ZSwgbWVhbnMgc3VjY2VzcywgZWxzZSBmYWlsdXJlLgorICogQHBhcmFtIHs/c3RyaW5n
fSBtc2cgVGhlIG1lc3NhZ2UgdG8gYmUgc2hvd24gaW4gdGhlIHJlc3VsdC4KKyAqIEBwYXJhbSB7
Ym9vbGVhbn0gdmVyYm9zZSBJbiBjYXNlIG9mIHN1Y2Nlc3MsIGRldGVybWluZXMgaWYgdGhlIHRl
c3Qgd2lsbCBzaG93IGl0J3MgcmVzdWx0IGFuZCBjb3VudCBpbiB0aGUgcmVzdWx0cy4KKyAqIEBw
YXJhbSB7Ym9vbGVhbn0gZXh0aHJvdyBJbiBjYXNlIG9mIGZhaWx1cmUsIGRldGVybWluZXMgaWYg
dGhlIGZ1bmN0aW9uIHdpbGwgdGhyb3cgYSBUZXN0RmFpbGVkRXhjZXB0aW9uLgorICovCitmdW5j
dGlvbiBhc3NlcnRNc2dPcHRpb25zKGFzc2VydGlvbiwgbXNnLCB2ZXJib3NlLCBleHRocm93KSB7
CisgICAgaWYgKGFzc2VydGlvbikgeworICAgICAgICB0ZXN0UGFzc2VkT3B0aW9ucyhtc2csIHZl
cmJvc2UpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRlc3RGYWlsZWRPcHRpb25zKG1zZywgZXh0
aHJvdyk7CisgICAgfQorfQorCisKK2Z1bmN0aW9uIHdlYmdsSGFybmVzc0NvbGxlY3RHYXJiYWdl
KCkgeworICAgIGlmICh3aW5kb3cuR0NDb250cm9sbGVyKSB7CisgICAgICAgIHdpbmRvdy5HQ0Nv
bnRyb2xsZXIuY29sbGVjdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHdp
bmRvdy5vcGVyYSAmJiB3aW5kb3cub3BlcmEuY29sbGVjdCkgeworICAgICAgICB3aW5kb3cub3Bl
cmEuY29sbGVjdCgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgdHJ5IHsKKyAgICAg
ICAgd2luZG93LlF1ZXJ5SW50ZXJmYWNlKENvbXBvbmVudHMuaW50ZXJmYWNlcy5uc0lJbnRlcmZh
Y2VSZXF1ZXN0b3IpCisgICAgICAgICAgICAgIC5nZXRJbnRlcmZhY2UoQ29tcG9uZW50cy5pbnRl
cmZhY2VzLm5zSURPTVdpbmRvd1V0aWxzKQorICAgICAgICAgICAgICAuZ2FyYmFnZUNvbGxlY3Qo
KTsKKyAgICAgICAgcmV0dXJuOworICAgIH0gY2F0Y2goZSkge30KKworICAgIGlmICh3aW5kb3cu
Z2MpIHsKKyAgICAgICAgd2luZG93LmdjKCk7CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAg
ICBpZiAod2luZG93LkNvbGxlY3RHYXJiYWdlKSB7CisgICAgICAgIENvbGxlY3RHYXJiYWdlKCk7
CisgICAgICAgIHJldHVybjsKKyAgICB9CisKKyAgICAvLyBXZWJLaXQncyBNaW5pQnJvd3NlciB3
aXRoIHRoZSBmb2xsb3dpbmcgZW52aXJvbm1lbnQgdmFyaWFibGVzIHNldDoKKyAgICAvLyAgIGV4
cG9ydCBKU0NfdXNlRG9sbGFyVk09MQorICAgIC8vICAgZXhwb3J0IF9fWFBDX0pTQ191c2VEb2xs
YXJWTT0xCisgICAgaWYgKHdpbmRvdy4kdm0pIHsKKyAgICAgICAgd2luZG93LiR2bS5nYygpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgZnVuY3Rpb24gZ2NSZWMobikgeworICAgICAg
ICBpZiAobiA8IDEpCisgICAgICAgICAgICByZXR1cm4ge307CisgICAgICAgIHZhciB0ZW1wID0g
e2k6ICJhYiIgKyBpICsgKGkgLyAxMDAwMDApfTsKKyAgICAgICAgdGVtcCArPSAiZm9vIjsKKyAg
ICAgICAgZ2NSZWMobi0xKTsKKyAgICB9CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCAxMDAwOyBp
KyspCisgICAgICAgIGdjUmVjKDEwKTsKK30KKworZnVuY3Rpb24gZmluaXNoVGVzdCgpIHsKKyAg
c3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsKKyAgdmFyIGVwaWxvZ3VlID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgic2NyaXB0Iik7CisgIHZhciBiYXNlUGF0aCA9ICIiOworICB2YXIgZXhwZWN0
ZWRCYXNlID0gImpzLXRlc3QtcHJlLmpzIjsKKyAgdmFyIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRF
bGVtZW50c0J5VGFnTmFtZSgnc2NyaXB0Jyk7CisgIGZvciAodmFyIHNjcmlwdCwgaSA9IDA7IHNj
cmlwdCA9IHNjcmlwdHNbaV07IGkrKykgeworICAgIHZhciBzcmMgPSBzY3JpcHQuc3JjOworICAg
IHZhciBsID0gc3JjLmxlbmd0aDsKKyAgICBpZiAoc3JjLnN1YnN0cihsIC0gZXhwZWN0ZWRCYXNl
Lmxlbmd0aCkgPT0gZXhwZWN0ZWRCYXNlKSB7CisgICAgICBiYXNlUGF0aCA9IHNyYy5zdWJzdHIo
MCwgbCAtIGV4cGVjdGVkQmFzZS5sZW5ndGgpOworICAgICAgYnJlYWs7CisgICAgfQorICB9Cisg
IGVwaWxvZ3VlLnNyYyA9IGJhc2VQYXRoICsgImpzLXRlc3QtcG9zdC5qcyI7CisgIGRvY3VtZW50
LmJvZHkuYXBwZW5kQ2hpbGQoZXBpbG9ndWUpOworfQorCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0
cy93ZWJnbC9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9qcy9wbmdsaWIuanMgYi9MYXlvdXRU
ZXN0cy93ZWJnbC9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9qcy9wbmdsaWIuanMKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uZDJhOWI5OWUwODVjYTk4MDMyYjU2NWJlYjc4ZDVlNmNhOGY2ZWMxMgotLS0gL2Rldi9u
dWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdsL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2pz
L3BuZ2xpYi5qcwpAQCAtMCwwICsxLDIwNyBAQAorLyoqCisqIEEgaGFuZHkgY2xhc3MgdG8gY2Fs
Y3VsYXRlIGNvbG9yIHZhbHVlcy4KKyoKKyogQHZlcnNpb24gMS4wCisqIEBhdXRob3IgUm9iZXJ0
IEVpc2VsZSA8cm9iZXJ0QHhhcmcub3JnPgorKiBAY29weXJpZ2h0IENvcHlyaWdodCAoYykgMjAx
MCwgUm9iZXJ0IEVpc2VsZQorKiBAbGluayBodHRwOi8vd3d3Lnhhcmcub3JnLzIwMTAvMDMvZ2Vu
ZXJhdGUtY2xpZW50LXNpZGUtcG5nLWZpbGVzLXVzaW5nLWphdmFzY3JpcHQvCisqIEBsaWNlbnNl
IGh0dHA6Ly93d3cub3BlbnNvdXJjZS5vcmcvbGljZW5zZXMvYnNkLWxpY2Vuc2UucGhwIEJTRCBM
aWNlbnNlCisqCisqLworCisoZnVuY3Rpb24oKSB7CisKKyAgICAvLyBoZWxwZXIgZnVuY3Rpb25z
IGZvciB0aGF0IGN0eAorICAgIGZ1bmN0aW9uIHdyaXRlKGJ1ZmZlciwgb2ZmcykgeworICAgICAg
ICBmb3IgKHZhciBpID0gMjsgaSA8IGFyZ3VtZW50cy5sZW5ndGg7IGkrKykgeworICAgICAgICAg
ICAgZm9yICh2YXIgaiA9IDA7IGogPCBhcmd1bWVudHNbaV0ubGVuZ3RoOyBqKyspIHsKKyAgICAg
ICAgICAgICAgICBidWZmZXJbb2ZmcysrXSA9IGFyZ3VtZW50c1tpXS5jaGFyQXQoaik7CisgICAg
ICAgICAgICB9CisgICAgICAgIH0KKyAgICB9CisKKyAgICBmdW5jdGlvbiBieXRlMih3KSB7Cisg
ICAgICAgIHJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKCh3ID4+IDgpICYgMjU1LCB3ICYgMjU1
KTsKKyAgICB9CisKKyAgICBmdW5jdGlvbiBieXRlNCh3KSB7CisgICAgICAgIHJldHVybiBTdHJp
bmcuZnJvbUNoYXJDb2RlKCh3ID4+IDI0KSAmIDI1NSwgKHcgPj4gMTYpICYgMjU1LCAodyA+PiA4
KSAmIDI1NSwgdyAmIDI1NSk7CisgICAgfQorCisgICAgZnVuY3Rpb24gYnl0ZTJsc2Iodykgewor
ICAgICAgICByZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZSh3ICYgMjU1LCAodyA+PiA4KSAmIDI1
NSk7CisgICAgfQorCisgICAgd2luZG93LlBOR2xpYiA9IGZ1bmN0aW9uKHdpZHRoLGhlaWdodCxk
ZXB0aCkgeworCisgICAgICAgIHRoaXMud2lkdGggICA9IHdpZHRoOworICAgICAgICB0aGlzLmhl
aWdodCAgPSBoZWlnaHQ7CisgICAgICAgIHRoaXMuZGVwdGggICA9IGRlcHRoOworCisgICAgICAg
IC8vIHBpeGVsIGRhdGEgYW5kIHJvdyBmaWx0ZXIgaWRlbnRpZmllciBzaXplCisgICAgICAgIHRo
aXMucGl4X3NpemUgPSBoZWlnaHQgKiAod2lkdGggKyAxKTsKKworICAgICAgICAvLyBkZWZsYXRl
IGhlYWRlciwgcGl4X3NpemUsIGJsb2NrIGhlYWRlcnMsIGFkbGVyMzIgY2hlY2tzdW0KKyAgICAg
ICAgdGhpcy5kYXRhX3NpemUgPSAyICsgdGhpcy5waXhfc2l6ZSArIDUgKiBNYXRoLmZsb29yKCgw
eGZmZmUgKyB0aGlzLnBpeF9zaXplKSAvIDB4ZmZmZikgKyA0OworCisgICAgICAgIC8vIG9mZnNl
dHMgYW5kIHNpemVzIG9mIFBuZyBjaHVua3MKKyAgICAgICAgdGhpcy5paGRyX29mZnMgPSAwOyAg
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIC8vIElIRFIgb2Zmc2V0IGFuZCBzaXpl
CisgICAgICAgIHRoaXMuaWhkcl9zaXplID0gNCArIDQgKyAxMyArIDQ7CisgICAgICAgIHRoaXMu
cGx0ZV9vZmZzID0gdGhpcy5paGRyX29mZnMgKyB0aGlzLmloZHJfc2l6ZTsgICAgLy8gUExURSBv
ZmZzZXQgYW5kIHNpemUKKyAgICAgICAgdGhpcy5wbHRlX3NpemUgPSA0ICsgNCArIDMgKiBkZXB0
aCArIDQ7CisgICAgICAgIHRoaXMudHJuc19vZmZzID0gdGhpcy5wbHRlX29mZnMgKyB0aGlzLnBs
dGVfc2l6ZTsgICAgLy8gdFJOUyBvZmZzZXQgYW5kIHNpemUKKyAgICAgICAgdGhpcy50cm5zX3Np
emUgPSA0ICsgNCArIGRlcHRoICsgNDsKKyAgICAgICAgdGhpcy5pZGF0X29mZnMgPSB0aGlzLnRy
bnNfb2ZmcyArIHRoaXMudHJuc19zaXplOyAgICAvLyBJREFUIG9mZnNldCBhbmQgc2l6ZQorICAg
ICAgICB0aGlzLmlkYXRfc2l6ZSA9IDQgKyA0ICsgdGhpcy5kYXRhX3NpemUgKyA0OworICAgICAg
ICB0aGlzLmllbmRfb2ZmcyA9IHRoaXMuaWRhdF9vZmZzICsgdGhpcy5pZGF0X3NpemU7ICAgIC8v
IElFTkQgb2Zmc2V0IGFuZCBzaXplCisgICAgICAgIHRoaXMuaWVuZF9zaXplID0gNCArIDQgKyA0
OworICAgICAgICB0aGlzLmJ1ZmZlcl9zaXplICA9IHRoaXMuaWVuZF9vZmZzICsgdGhpcy5pZW5k
X3NpemU7ICAgIC8vIHRvdGFsIFBORyBzaXplCisKKyAgICAgICAgdGhpcy5idWZmZXIgID0gbmV3
IEFycmF5KCk7CisgICAgICAgIHRoaXMucGFsZXR0ZSA9IG5ldyBPYmplY3QoKTsKKyAgICAgICAg
dGhpcy5waW5kZXggID0gMDsKKworICAgICAgICB2YXIgX2NyYzMyID0gbmV3IEFycmF5KCk7CisK
KyAgICAgICAgLy8gaW5pdGlhbGl6ZSBidWZmZXIgd2l0aCB6ZXJvIGJ5dGVzCisgICAgICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgdGhpcy5idWZmZXJfc2l6ZTsgaSsrKSB7CisgICAgICAgICAgICB0
aGlzLmJ1ZmZlcltpXSA9ICJceDAwIjsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGluaXRpYWxp
emUgbm9uLXplcm8gZWxlbWVudHMKKyAgICAgICAgd3JpdGUodGhpcy5idWZmZXIsIHRoaXMuaWhk
cl9vZmZzLCBieXRlNCh0aGlzLmloZHJfc2l6ZSAtIDEyKSwgJ0lIRFInLCBieXRlNCh3aWR0aCks
IGJ5dGU0KGhlaWdodCksICJceDA4XHgwMyIpOworICAgICAgICB3cml0ZSh0aGlzLmJ1ZmZlciwg
dGhpcy5wbHRlX29mZnMsIGJ5dGU0KHRoaXMucGx0ZV9zaXplIC0gMTIpLCAnUExURScpOworICAg
ICAgICB3cml0ZSh0aGlzLmJ1ZmZlciwgdGhpcy50cm5zX29mZnMsIGJ5dGU0KHRoaXMudHJuc19z
aXplIC0gMTIpLCAndFJOUycpOworICAgICAgICB3cml0ZSh0aGlzLmJ1ZmZlciwgdGhpcy5pZGF0
X29mZnMsIGJ5dGU0KHRoaXMuaWRhdF9zaXplIC0gMTIpLCAnSURBVCcpOworICAgICAgICB3cml0
ZSh0aGlzLmJ1ZmZlciwgdGhpcy5pZW5kX29mZnMsIGJ5dGU0KHRoaXMuaWVuZF9zaXplIC0gMTIp
LCAnSUVORCcpOworCisgICAgICAgIC8vIGluaXRpYWxpemUgZGVmbGF0ZSBoZWFkZXIKKyAgICAg
ICAgdmFyIGhlYWRlciA9ICgoOCArICg3IDw8IDQpKSA8PCA4KSB8ICgzIDw8IDYpOworICAgICAg
ICBoZWFkZXIrPSAzMSAtIChoZWFkZXIgJSAzMSk7CisKKyAgICAgICAgd3JpdGUodGhpcy5idWZm
ZXIsIHRoaXMuaWRhdF9vZmZzICsgOCwgYnl0ZTIoaGVhZGVyKSk7CisKKyAgICAgICAgLy8gaW5p
dGlhbGl6ZSBkZWZsYXRlIGJsb2NrIGhlYWRlcnMKKyAgICAgICAgZm9yICh2YXIgaSA9IDA7IChp
IDw8IDE2KSAtIDEgPCB0aGlzLnBpeF9zaXplOyBpKyspIHsKKyAgICAgICAgICAgIHZhciBzaXpl
LCBiaXRzOworICAgICAgICAgICAgaWYgKGkgKyAweGZmZmYgPCB0aGlzLnBpeF9zaXplKSB7Cisg
ICAgICAgICAgICAgICAgc2l6ZSA9IDB4ZmZmZjsKKyAgICAgICAgICAgICAgICBiaXRzID0gIlx4
MDAiOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICBzaXplID0gdGhpcy5w
aXhfc2l6ZSAtIChpIDw8IDE2KSAtIGk7CisgICAgICAgICAgICAgICAgYml0cyA9ICJceDAxIjsK
KyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIHdyaXRlKHRoaXMuYnVmZmVyLCB0aGlzLmlkYXRf
b2ZmcyArIDggKyAyICsgKGkgPDwgMTYpICsgKGkgPDwgMiksIGJpdHMsIGJ5dGUybHNiKHNpemUp
LCBieXRlMmxzYih+c2l6ZSkpOworICAgICAgICB9CisKKyAgICAgICAgLyogQ3JlYXRlIGNyYzMy
IGxvb2t1cCB0YWJsZSAqLworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IDI1NjsgaSsrKSB7
CisgICAgICAgICAgICB2YXIgYyA9IGk7CisgICAgICAgICAgICBmb3IgKHZhciBqID0gMDsgaiA8
IDg7IGorKykgeworICAgICAgICAgICAgICAgIGlmIChjICYgMSkgeworICAgICAgICAgICAgICAg
ICAgICBjID0gLTMwNjY3NDkxMiBeICgoYyA+PiAxKSAmIDB4N2ZmZmZmZmYpOworICAgICAgICAg
ICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgICAgIGMgPSAoYyA+PiAxKSAmIDB4N2Zm
ZmZmZmY7CisgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgICAgX2Ny
YzMyW2ldID0gYzsKKyAgICAgICAgfQorCisgICAgICAgIC8vIGNvbXB1dGUgdGhlIGluZGV4IGlu
dG8gYSBwbmcgZm9yIGEgZ2l2ZW4gcGl4ZWwKKyAgICAgICAgdGhpcy5pbmRleCA9IGZ1bmN0aW9u
KHgseSkgeworICAgICAgICAgICAgdmFyIGkgPSB5ICogKHRoaXMud2lkdGggKyAxKSArIHggKyAx
OworICAgICAgICAgICAgdmFyIGogPSB0aGlzLmlkYXRfb2ZmcyArIDggKyAyICsgNSAqIE1hdGgu
Zmxvb3IoKGkgLyAweGZmZmYpICsgMSkgKyBpOworICAgICAgICAgICAgcmV0dXJuIGo7CisgICAg
ICAgIH0KKworICAgICAgICAvLyBjb252ZXJ0IGEgY29sb3IgYW5kIGJ1aWxkIHVwIHRoZSBwYWxl
dHRlCisgICAgICAgIHRoaXMuY29sb3IgPSBmdW5jdGlvbihyZWQsIGdyZWVuLCBibHVlLCBhbHBo
YSkgeworCisgICAgICAgICAgICBhbHBoYSA9IGFscGhhID49IDAgPyBhbHBoYSA6IDI1NTsKKyAg
ICAgICAgICAgIHZhciBjb2xvciA9ICgoKCgoYWxwaGEgPDwgOCkgfCByZWQpIDw8IDgpIHwgZ3Jl
ZW4pIDw8IDgpIHwgYmx1ZTsKKworICAgICAgICAgICAgaWYgKHR5cGVvZiB0aGlzLnBhbGV0dGVb
Y29sb3JdID09ICJ1bmRlZmluZWQiKSB7CisgICAgICAgICAgICAgICAgaWYgKHRoaXMucGluZGV4
ID09IHRoaXMuZGVwdGgpIHJldHVybiAiXHgwMCI7CisKKyAgICAgICAgICAgICAgICB2YXIgbmR4
ID0gdGhpcy5wbHRlX29mZnMgKyA4ICsgMyAqIHRoaXMucGluZGV4OworCisgICAgICAgICAgICAg
ICAgdGhpcy5idWZmZXJbbmR4ICsgMF0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHJlZCk7CisgICAg
ICAgICAgICAgICAgdGhpcy5idWZmZXJbbmR4ICsgMV0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGdy
ZWVuKTsKKyAgICAgICAgICAgICAgICB0aGlzLmJ1ZmZlcltuZHggKyAyXSA9IFN0cmluZy5mcm9t
Q2hhckNvZGUoYmx1ZSk7CisgICAgICAgICAgICAgICAgdGhpcy5idWZmZXJbdGhpcy50cm5zX29m
ZnMrOCt0aGlzLnBpbmRleF0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGFscGhhKTsKKworICAgICAg
ICAgICAgICAgIHRoaXMucGFsZXR0ZVtjb2xvcl0gPSBTdHJpbmcuZnJvbUNoYXJDb2RlKHRoaXMu
cGluZGV4KyspOworICAgICAgICAgICAgfQorICAgICAgICAgICAgcmV0dXJuIHRoaXMucGFsZXR0
ZVtjb2xvcl07CisgICAgICAgIH0KKworICAgICAgICAvLyBvdXRwdXQgYSBQTkcgc3RyaW5nLCBC
YXNlNjQgZW5jb2RlZAorICAgICAgICB0aGlzLmdldEJhc2U2NCA9IGZ1bmN0aW9uKCkgeworCisg
ICAgICAgICAgICB2YXIgcyA9IHRoaXMuZ2V0RHVtcCgpOworCisgICAgICAgICAgICB2YXIgY2gg
PSAiQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAx
MjM0NTY3ODkrLz0iOworICAgICAgICAgICAgdmFyIGMxLCBjMiwgYzMsIGUxLCBlMiwgZTMsIGU0
OworICAgICAgICAgICAgdmFyIGwgPSBzLmxlbmd0aDsKKyAgICAgICAgICAgIHZhciBpID0gMDsK
KyAgICAgICAgICAgIHZhciByID0gIiI7CisKKyAgICAgICAgICAgIGRvIHsKKyAgICAgICAgICAg
ICAgICBjMSA9IHMuY2hhckNvZGVBdChpKTsKKyAgICAgICAgICAgICAgICBlMSA9IGMxID4+IDI7
CisgICAgICAgICAgICAgICAgYzIgPSBzLmNoYXJDb2RlQXQoaSsxKTsKKyAgICAgICAgICAgICAg
ICBlMiA9ICgoYzEgJiAzKSA8PCA0KSB8IChjMiA+PiA0KTsKKyAgICAgICAgICAgICAgICBjMyA9
IHMuY2hhckNvZGVBdChpKzIpOworICAgICAgICAgICAgICAgIGlmIChsIDwgaSsyKSB7IGUzID0g
NjQ7IH0gZWxzZSB7IGUzID0gKChjMiAmIDB4ZikgPDwgMikgfCAoYzMgPj4gNik7IH0KKyAgICAg
ICAgICAgICAgICBpZiAobCA8IGkrMykgeyBlNCA9IDY0OyB9IGVsc2UgeyBlNCA9IGMzICYgMHgz
ZjsgfQorICAgICAgICAgICAgICAgIHIrPSBjaC5jaGFyQXQoZTEpICsgY2guY2hhckF0KGUyKSAr
IGNoLmNoYXJBdChlMykgKyBjaC5jaGFyQXQoZTQpOworICAgICAgICAgICAgfSB3aGlsZSAoKGkr
PSAzKSA8IGwpOworICAgICAgICAgICAgcmV0dXJuIHI7CisgICAgICAgIH0KKworICAgICAgICAv
LyBvdXRwdXQgYSBQTkcgc3RyaW5nCisgICAgICAgIHRoaXMuZ2V0RHVtcCA9IGZ1bmN0aW9uKCkg
eworCisgICAgICAgICAgICAvLyBjb21wdXRlIGFkbGVyMzIgb2Ygb3V0cHV0IHBpeGVscyArIHJv
dyBmaWx0ZXIgYnl0ZXMKKyAgICAgICAgICAgIHZhciBCQVNFID0gNjU1MjE7IC8qIGxhcmdlc3Qg
cHJpbWUgc21hbGxlciB0aGFuIDY1NTM2ICovCisgICAgICAgICAgICB2YXIgTk1BWCA9IDU1NTI7
ICAvKiBOTUFYIGlzIHRoZSBsYXJnZXN0IG4gc3VjaCB0aGF0IDI1NW4obisxKS8yICsgKG4rMSko
QkFTRS0xKSA8PSAyXjMyLTEgKi8KKyAgICAgICAgICAgIHZhciBzMSA9IDE7CisgICAgICAgICAg
ICB2YXIgczIgPSAwOworICAgICAgICAgICAgdmFyIG4gPSBOTUFYOworCisgICAgICAgICAgICBm
b3IgKHZhciB5ID0gMDsgeSA8IHRoaXMuaGVpZ2h0OyB5KyspIHsKKyAgICAgICAgICAgICAgICBm
b3IgKHZhciB4ID0gLTE7IHggPCB0aGlzLndpZHRoOyB4KyspIHsKKyAgICAgICAgICAgICAgICAg
ICAgczErPSB0aGlzLmJ1ZmZlclt0aGlzLmluZGV4KHgsIHkpXS5jaGFyQ29kZUF0KDApOworICAg
ICAgICAgICAgICAgICAgICBzMis9IHMxOworICAgICAgICAgICAgICAgICAgICBpZiAoKG4tPSAx
KSA9PSAwKSB7CisgICAgICAgICAgICAgICAgICAgICAgICBzMSU9IEJBU0U7CisgICAgICAgICAg
ICAgICAgICAgICAgICBzMiU9IEJBU0U7CisgICAgICAgICAgICAgICAgICAgICAgICBuID0gTk1B
WDsKKyAgICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IH0KKyAgICAgICAgICAgIHMxJT0gQkFTRTsKKyAgICAgICAgICAgIHMyJT0gQkFTRTsKKyAgICAg
ICAgICAgIHdyaXRlKHRoaXMuYnVmZmVyLCB0aGlzLmlkYXRfb2ZmcyArIHRoaXMuaWRhdF9zaXpl
IC0gOCwgYnl0ZTQoKHMyIDw8IDE2KSB8IHMxKSk7CisKKyAgICAgICAgICAgIC8vIGNvbXB1dGUg
Y3JjMzIgb2YgdGhlIFBORyBjaHVua3MKKyAgICAgICAgICAgIGZ1bmN0aW9uIGNyYzMyKHBuZywg
b2Zmcywgc2l6ZSkgeworICAgICAgICAgICAgICAgIHZhciBjcmMgPSAtMTsKKyAgICAgICAgICAg
ICAgICBmb3IgKHZhciBpID0gNDsgaSA8IHNpemUtNDsgaSArPSAxKSB7CisgICAgICAgICAgICAg
ICAgICAgIGNyYyA9IF9jcmMzMlsoY3JjIF4gcG5nW29mZnMraV0uY2hhckNvZGVBdCgwKSkgJiAw
eGZmXSBeICgoY3JjID4+IDgpICYgMHgwMGZmZmZmZik7CisgICAgICAgICAgICAgICAgfQorICAg
ICAgICAgICAgICAgIHdyaXRlKHBuZywgb2ZmcytzaXplLTQsIGJ5dGU0KGNyYyBeIC0xKSk7Cisg
ICAgICAgICAgICB9CisKKyAgICAgICAgICAgIGNyYzMyKHRoaXMuYnVmZmVyLCB0aGlzLmloZHJf
b2ZmcywgdGhpcy5paGRyX3NpemUpOworICAgICAgICAgICAgY3JjMzIodGhpcy5idWZmZXIsIHRo
aXMucGx0ZV9vZmZzLCB0aGlzLnBsdGVfc2l6ZSk7CisgICAgICAgICAgICBjcmMzMih0aGlzLmJ1
ZmZlciwgdGhpcy50cm5zX29mZnMsIHRoaXMudHJuc19zaXplKTsKKyAgICAgICAgICAgIGNyYzMy
KHRoaXMuYnVmZmVyLCB0aGlzLmlkYXRfb2ZmcywgdGhpcy5pZGF0X3NpemUpOworICAgICAgICAg
ICAgY3JjMzIodGhpcy5idWZmZXIsIHRoaXMuaWVuZF9vZmZzLCB0aGlzLmllbmRfc2l6ZSk7CisK
KyAgICAgICAgICAgIC8vIGNvbnZlcnQgUE5HIHRvIHN0cmluZworICAgICAgICAgICAgcmV0dXJu
ICJcMjExUE5HXHJcblwwMzJcbiIrdGhpcy5idWZmZXIuam9pbignJyk7CisgICAgICAgIH0KKyAg
ICB9CisKK30pKCk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJnbC9yZXNvdXJjZXMvd2Vi
Z2xfdGVzdF9maWxlcy9qcy90ZXN0LWV2YWwuanMgYi9MYXlvdXRUZXN0cy93ZWJnbC9yZXNvdXJj
ZXMvd2ViZ2xfdGVzdF9maWxlcy9qcy90ZXN0LWV2YWwuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQK
aW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTEzZTljNjAw
ODdjYzcxNDdmYjNmMDlkOWNmZmZkNWM4ZmNiM2U0OAotLS0gL2Rldi9udWxsCisrKyBiL0xheW91
dFRlc3RzL3dlYmdsL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2pzL3Rlc3QtZXZhbC5qcwpA
QCAtMCwwICsxLDE1IEBACisvKgorQ29weXJpZ2h0IChjKSAyMDE5IFRoZSBLaHJvbm9zIEdyb3Vw
IEluYy4KK1VzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlCitmb3VuZCBpbiB0aGUgTElDRU5TRS50eHQgZmlsZS4KKyov
CisvKioKKyAqIENhbGxzIGV2YWwuCisgKgorICogVGhpcyBpcyBoZXJlIHNvIG90aGVyIG1vZHVs
ZXMgY2FuIHVzZSAidXNlIHN0cmljdCI6CisgKi8KK1Rlc3RFdmFsID0gZnVuY3Rpb24oc3RyKSB7
CisgIHJldHVybiBldmFsKHN0cik7Cit9OworCisKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dl
YmdsL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2pzL3Rlc3RzL2V4dC1mbG9hdC1ibGVuZC5q
cyBiL0xheW91dFRlc3RzL3dlYmdsL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2pzL3Rlc3Rz
L2V4dC1mbG9hdC1ibGVuZC5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hYjJmOWY5Mjg4ZjY4MmJmMjczNDBiZDk1
NmM2MjEyOWEyN2QxZTg4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ2wvcmVz
b3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvanMvdGVzdHMvZXh0LWZsb2F0LWJsZW5kLmpzCkBAIC0w
LDAgKzEsMjM3IEBACisndXNlIHN0cmljdCc7CisKK2NvbnN0IHRyaXZpYWxWc1NyYyA9IGAKK3Zv
aWQgbWFpbigpCit7CisgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDEpOworfQorYDsKK2Nv
bnN0IHRyaXZpYWxGc1NyYyA9IGAKK3ZvaWQgbWFpbigpCit7CisgICAgZ2xfRnJhZ0NvbG9yID0g
dmVjNCgwLDEsMCwxKTsKK30KK2A7Citjb25zdCB0cml2aWFsVnNNcnRTcmMxMDAgPSBgCit2b2lk
IG1haW4oKQoreworICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLDAsMCwxKTsKK30KK2A7Citjb25z
dCB0cml2aWFsRnNNcnRTcmMxMDAgPSBgCisjZXh0ZW5zaW9uIEdMX0VYVF9kcmF3X2J1ZmZlcnMg
OiByZXF1aXJlCitwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKK3ZvaWQgbWFpbigpCit7CisgICAg
Z2xfRnJhZ0RhdGFbMF0gPSB2ZWM0KDEsIDAsIDAsIDEpOworICAgIGdsX0ZyYWdEYXRhWzFdID0g
dmVjNCgwLCAxLCAwLCAxKTsKK30KK2A7Citjb25zdCB0cml2aWFsVnNNcnRTcmMzMDAgPSBgI3Zl
cnNpb24gMzAwIGVzCit2b2lkIG1haW4oKQoreworICAgIGdsX1Bvc2l0aW9uID0gdmVjNCgwLDAs
MCwxKTsKK30KK2A7Citjb25zdCB0cml2aWFsRnNNcnRTcmMzMDAgPSBgI3ZlcnNpb24gMzAwIGVz
CitwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsKK2xheW91dChsb2NhdGlvbiA9IDApIG91dCB2ZWM0
IG9fY29sb3IwOworbGF5b3V0KGxvY2F0aW9uID0gMSkgb3V0IHZlYzQgb19jb2xvcjE7Cit2b2lk
IG1haW4oKQoreworICAgIG9fY29sb3IwID0gdmVjNCgxLCAwLCAwLCAxKTsKKyAgICBvX2NvbG9y
MSA9IHZlYzQoMCwgMSwgMCwgMSk7Cit9CitgOworCitmdW5jdGlvbiB0ZXN0RXh0RmxvYXRCbGVu
ZChpbnRlcm5hbEZvcm1hdCkgeworICAgIGNvbnN0IHNob3VsZEJsZW5kID0gZ2wuZ2V0U3VwcG9y
dGVkRXh0ZW5zaW9ucygpLmluZGV4T2YoJ0VYVF9mbG9hdF9ibGVuZCcpICE9IC0xOworCisgICAg
Y29uc3QgcHJvZyA9IHd0dS5zZXR1cFByb2dyYW0oZ2wsIFt0cml2aWFsVnNTcmMsIHRyaXZpYWxG
c1NyY10pOworICAgIGdsLnVzZVByb2dyYW0ocHJvZyk7CisKKyAgICBjb25zdCB0ZXggPSBnbC5j
cmVhdGVUZXh0dXJlKCk7CisgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4KTsK
KyAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGludGVybmFsRm9ybWF0LCAxLCAx
LCAwLCBnbC5SR0JBLCBnbC5GTE9BVCwgbnVsbCk7CisKKyAgICBjb25zdCBmYiA9IGdsLmNyZWF0
ZUZyYW1lYnVmZmVyKCk7CisgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBm
Yik7CisgICAgZ2wuZnJhbWVidWZmZXJUZXh0dXJlMkQoZ2wuRlJBTUVCVUZGRVIsIGdsLkNPTE9S
X0FUVEFDSE1FTlQwLCBnbC5URVhUVVJFXzJELCB0ZXgsIDApOworICAgIHNob3VsZEJlKCdnbC5j
aGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKScsICdnbC5GUkFNRUJVRkZFUl9D
T01QTEVURScpOworCisgICAgZ2wuZGlzYWJsZShnbC5CTEVORCk7CisgICAgZ2wuZHJhd0FycmF5
cyhnbC5QT0lOVFMsIDAsIDEpOworICAgIHd0dS5nbEVycm9yU2hvdWxkQmUoZ2wsIDAsICdGbG9h
dDMyIGRyYXcgdGFyZ2V0IHdpdGhvdXQgYmxlbmRpbmcnKTsKKworICAgIGdsLmVuYWJsZShnbC5C
TEVORCk7CisgICAgZ2wuZHJhd0FycmF5cyhnbC5QT0lOVFMsIDAsIDEpOworICAgIHd0dS5nbEVy
cm9yU2hvdWxkQmUoZ2wsIHNob3VsZEJsZW5kID8gMCA6IGdsLklOVkFMSURfT1BFUkFUSU9OLAor
ICAgICAgICAgICAgICAgICAgICAgICAgJ0Zsb2F0MzIgYmxlbmRpbmcgaXMgJyArIChzaG91bGRC
bGVuZCA/ICcnIDogJ25vdCAnKSArICdhbGxvd2VkICcpOworCisgICAgZ2wuZGVsZXRlRnJhbWVi
dWZmZXIoZmIpOworICAgIGdsLmRlbGV0ZVRleHR1cmUodGV4KTsKK30KKworZnVuY3Rpb24gdGVz
dEV4dEZsb2F0QmxlbmRNUlRJbXBsKHZlcnNpb24sIGludGVybmFsRm9ybWF0LCBzaGFkZXJzLCBh
dHRhY2htZW50cywgZHJhd0J1ZmZlcnMpIHsKKyAgICBjb25zdCBzaG91bGRCbGVuZCA9IGdsLmdl
dFN1cHBvcnRlZEV4dGVuc2lvbnMoKS5pbmRleE9mKCdFWFRfZmxvYXRfYmxlbmQnKSAhPSAtMTsK
KworICAgIGNvbnN0IHByb2cgPSB3dHUuc2V0dXBQcm9ncmFtKGdsLCBzaGFkZXJzKTsKKyAgICBn
bC51c2VQcm9ncmFtKHByb2cpOworCisgICAgY29uc3QgdGV4MSA9IGdsLmNyZWF0ZVRleHR1cmUo
KTsKKyAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXgxKTsKKyAgICBnbC50ZXhJ
bWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJHQkEsIDEsIDEsIDAsIGdsLlJHQkEsIGdsLlVO
U0lHTkVEX0JZVEUsIG51bGwpOworCisgICAgY29uc3QgdGV4MiA9IGdsLmNyZWF0ZVRleHR1cmUo
KTsKKyAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXgyKTsKKyAgICBnbC50ZXhJ
bWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJHQkEsIDEsIDEsIDAsIGdsLlJHQkEsIGdsLlVO
U0lHTkVEX0JZVEUsIG51bGwpOworCisgICAgY29uc3QgdGV4RjEgPSBnbC5jcmVhdGVUZXh0dXJl
KCk7CisgICAgZ2wuYmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4RjEpOworICAgIGdsLnRl
eEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgaW50ZXJuYWxGb3JtYXQsIDEsIDEsIDAsIGdsLlJH
QkEsIGdsLkZMT0FULCBudWxsKTsKKworICAgIGNvbnN0IHRleEYyID0gZ2wuY3JlYXRlVGV4dHVy
ZSgpOworICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleEYyKTsKKyAgICBnbC50
ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGludGVybmFsRm9ybWF0LCAxLCAxLCAwLCBnbC5S
R0JBLCBnbC5GTE9BVCwgbnVsbCk7CisKKyAgICBjb25zdCBmYiA9IGdsLmNyZWF0ZUZyYW1lYnVm
ZmVyKCk7CisgICAgZ2wuYmluZEZyYW1lYnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBmYik7CisgICAg
Z2wuZnJhbWVidWZmZXJUZXh0dXJlMkQoZ2wuRlJBTUVCVUZGRVIsIGF0dGFjaG1lbnRzWzBdLCBn
bC5URVhUVVJFXzJELCB0ZXgxLCAwKTsKKyAgICBnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5G
UkFNRUJVRkZFUiwgYXR0YWNobWVudHNbMV0sIGdsLlRFWFRVUkVfMkQsIHRleDIsIDApOworICAg
IHNob3VsZEJlKCdnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKScsICdn
bC5GUkFNRUJVRkZFUl9DT01QTEVURScpOworCisgICAgZHJhd0J1ZmZlcnMoYXR0YWNobWVudHMp
OworCisgICAgZ2wuZW5hYmxlKGdsLkJMRU5EKTsKKworICAgIGdsLmRyYXdBcnJheXMoZ2wuUE9J
TlRTLCAwLCAxKTsKKyAgICB3dHUuZ2xFcnJvclNob3VsZEJlKGdsLCAwLCAnTm8gRmxvYXQzMiBj
b2xvciBhdHRhY2htZW50Jyk7CisKKyAgICBpZiAodmVyc2lvbiA8IDIpIHsKKyAgICAgICAgLy8g
RVhUX2RyYXdfYnVmZmVycyByZXF1aXJlIGFsbCBjb2xvciBidWZmZXJzIGhhdmluZyB0aGUgc2Ft
ZSBudW1iZXIgb2YgYml0cGxhbmVzCisgICAgICAgIGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGds
LkZSQU1FQlVGRkVSLCBhdHRhY2htZW50c1swXSwgZ2wuVEVYVFVSRV8yRCwgdGV4RjEsIDApOwor
ICAgICAgICBnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgYXR0YWNobWVu
dHNbMV0sIGdsLlRFWFRVUkVfMkQsIHRleEYyLCAwKTsKKyAgICAgICAgc2hvdWxkQmUoJ2dsLmNo
ZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpJywgJ2dsLkZSQU1FQlVGRkVSX0NP
TVBMRVRFJyk7CisgICAgICAgIGdsLmRyYXdBcnJheXMoZ2wuUE9JTlRTLCAwLCAxKTsKKyAgICAg
ICAgd3R1LmdsRXJyb3JTaG91bGRCZShnbCwgc2hvdWxkQmxlbmQgPyAwIDogZ2wuSU5WQUxJRF9P
UEVSQVRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgJ0Zsb2F0MzIgYmxlbmRpbmcg
aXMgJyArIChzaG91bGRCbGVuZCA/ICcnIDogJ25vdCAnKSArICdhbGxvd2VkICcpOworICAgIH0g
ZWxzZSB7CisgICAgICAgIGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBh
dHRhY2htZW50c1swXSwgZ2wuVEVYVFVSRV8yRCwgdGV4RjEsIDApOworICAgICAgICBzaG91bGRC
ZSgnZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUiknLCAnZ2wuRlJBTUVC
VUZGRVJfQ09NUExFVEUnKTsKKyAgICAgICAgZ2wuZHJhd0FycmF5cyhnbC5QT0lOVFMsIDAsIDEp
OworICAgICAgICB3dHUuZ2xFcnJvclNob3VsZEJlKGdsLCBzaG91bGRCbGVuZCA/IDAgOiBnbC5J
TlZBTElEX09QRVJBVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRmxvYXQzMiBi
bGVuZGluZyBpcyAnICsgKHNob3VsZEJsZW5kID8gJycgOiAnbm90ICcpICsgJ2FsbG93ZWQgJyk7
CisKKyAgICAgICAgZ2wuZnJhbWVidWZmZXJUZXh0dXJlMkQoZ2wuRlJBTUVCVUZGRVIsIGF0dGFj
aG1lbnRzWzFdLCBnbC5URVhUVVJFXzJELCB0ZXhGMiwgMCk7CisgICAgICAgIHNob3VsZEJlKCdn
bC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKScsICdnbC5GUkFNRUJVRkZF
Ul9DT01QTEVURScpOworICAgICAgICBnbC5kcmF3QXJyYXlzKGdsLlBPSU5UUywgMCwgMSk7Cisg
ICAgICAgIHd0dS5nbEVycm9yU2hvdWxkQmUoZ2wsIHNob3VsZEJsZW5kID8gMCA6IGdsLklOVkFM
SURfT1BFUkFUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICdGbG9hdDMyIGJsZW5k
aW5nIGlzICcgKyAoc2hvdWxkQmxlbmQgPyAnJyA6ICdub3QgJykgKyAnYWxsb3dlZCAnKTsKKwor
ICAgICAgICBnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgYXR0YWNobWVu
dHNbMF0sIGdsLlRFWFRVUkVfMkQsIHRleDEsIDApOworICAgICAgICBzaG91bGRCZSgnZ2wuY2hl
Y2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUiknLCAnZ2wuRlJBTUVCVUZGRVJfQ09N
UExFVEUnKTsKKyAgICAgICAgZ2wuZHJhd0FycmF5cyhnbC5QT0lOVFMsIDAsIDEpOworICAgICAg
ICB3dHUuZ2xFcnJvclNob3VsZEJlKGdsLCBzaG91bGRCbGVuZCA/IDAgOiBnbC5JTlZBTElEX09Q
RVJBVElPTiwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAnRmxvYXQzMiBibGVuZGluZyBp
cyAnICsgKHNob3VsZEJsZW5kID8gJycgOiAnbm90ICcpICsgJ2FsbG93ZWQgJyk7CisKKyAgICAg
ICAgZHJhd0J1ZmZlcnMoW2F0dGFjaG1lbnRzWzBdXSk7CisgICAgICAgIHNob3VsZEJlKCdnbC5j
aGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVSKScsICdnbC5GUkFNRUJVRkZFUl9D
T01QTEVURScpOworCisgICAgICAgIGdsLmRyYXdBcnJheXMoZ2wuUE9JTlRTLCAwLCAxKTsKKyAg
ICAgICAgd3R1LmdsRXJyb3JTaG91bGRCZShnbCwgMCwgJ0Zsb2F0MzIgY29sb3IgYXR0YWNobWVu
dCBkcmF3IGJ1ZmZlciBpcyBub3QgZW5hYmxlZCcpOworCisgICAgICAgIGRyYXdCdWZmZXJzKGF0
dGFjaG1lbnRzKTsKKyAgICAgICAgZ2wuZnJhbWVidWZmZXJUZXh0dXJlMkQoZ2wuRlJBTUVCVUZG
RVIsIGF0dGFjaG1lbnRzWzFdLCBnbC5URVhUVVJFXzJELCB0ZXgyLCAwKTsKKyAgICAgICAgc2hv
dWxkQmUoJ2dsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpJywgJ2dsLkZS
QU1FQlVGRkVSX0NPTVBMRVRFJyk7CisKKyAgICAgICAgZ2wuZHJhd0FycmF5cyhnbC5QT0lOVFMs
IDAsIDEpOworICAgICAgICB3dHUuZ2xFcnJvclNob3VsZEJlKGdsLCAwLCAnTm8gRmxvYXQzMiBj
b2xvciBhdHRhY2htZW50Jyk7CisgICAgfQorCisgICAgZ2wuZGVsZXRlRnJhbWVidWZmZXIoZmIp
OworICAgIGdsLmRlbGV0ZVRleHR1cmUodGV4MSk7CisgICAgZ2wuZGVsZXRlVGV4dHVyZSh0ZXgy
KTsKKyAgICBnbC5kZWxldGVUZXh0dXJlKHRleEYxKTsKKyAgICBnbC5kZWxldGVUZXh0dXJlKHRl
eEYyKTsKK30KKworZnVuY3Rpb24gdGVzdEV4dEZsb2F0QmxlbmRNUlQodmVyc2lvbiwgZHJhd0J1
ZmZlcnNFeHQpIHsKKyAgICBpZiAodmVyc2lvbiA8IDIpIHsKKyAgICAgICAgaWYgKCFkcmF3QnVm
ZmVyc0V4dCkgcmV0dXJuOworICAgICAgICB0ZXN0RXh0RmxvYXRCbGVuZE1SVEltcGwoCisgICAg
ICAgICAgICB2ZXJzaW9uLAorICAgICAgICAgICAgZ2wuUkdCQSwKKyAgICAgICAgICAgIFt0cml2
aWFsVnNNcnRTcmMxMDAsIHRyaXZpYWxGc01ydFNyYzEwMF0sCisgICAgICAgICAgICBbZHJhd0J1
ZmZlcnNFeHQuQ09MT1JfQVRUQUNITUVOVDBfV0VCR0wsIGRyYXdCdWZmZXJzRXh0LkNPTE9SX0FU
VEFDSE1FTlQxX1dFQkdMXSwKKyAgICAgICAgICAgIGRyYXdCdWZmZXJzRXh0LmRyYXdCdWZmZXJz
V0VCR0wuYmluZChkcmF3QnVmZmVyc0V4dCkKKyAgICAgICAgKTsKKyAgICB9IGVsc2UgeworICAg
ICAgICB0ZXN0RXh0RmxvYXRCbGVuZE1SVEltcGwoCisgICAgICAgICAgICB2ZXJzaW9uLAorICAg
ICAgICAgICAgZ2wuUkdCQTMyRiwKKyAgICAgICAgICAgIFt0cml2aWFsVnNNcnRTcmMzMDAsIHRy
aXZpYWxGc01ydFNyYzMwMF0sCisgICAgICAgICAgICBbZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGds
LkNPTE9SX0FUVEFDSE1FTlQxXSwKKyAgICAgICAgICAgIGdsLmRyYXdCdWZmZXJzLmJpbmQoZ2wp
CisgICAgICAgICk7CisgICAgfQorfQorCitmdW5jdGlvbiB0ZXN0RXh0RmxvYXRCbGVuZE5vbkZs
b2F0MzJUeXBlSW1wbChpbnRlcm5hbEZvcm1hdCwgZm9ybWF0cykgeworICAgIGNvbnN0IHNob3Vs
ZEJsZW5kID0gZ2wuZ2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpLmluZGV4T2YoJ0VYVF9mbG9hdF9i
bGVuZCcpICE9IC0xOworCisgICAgY29uc3QgcHJvZyA9IHd0dS5zZXR1cFByb2dyYW0oZ2wsIFt0
cml2aWFsVnNTcmMsIHRyaXZpYWxGc1NyY10pOworICAgIGdsLnVzZVByb2dyYW0ocHJvZyk7CisK
KyAgICBnbC5lbmFibGUoZ2wuQkxFTkQpOworCisgICAgY29uc3QgdGV4ID0gZ2wuY3JlYXRlVGV4
dHVyZSgpOworICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleCk7CisgICAgZ2wu
dGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBpbnRlcm5hbEZvcm1hdCwgMSwgMSwgMCwgZ2wu
UkdCQSwgZ2wuRkxPQVQsIG51bGwpOworCisgICAgY29uc3QgZmIgPSBnbC5jcmVhdGVGcmFtZWJ1
ZmZlcigpOworICAgIGdsLmJpbmRGcmFtZWJ1ZmZlcihnbC5GUkFNRUJVRkZFUiwgZmIpOworICAg
IGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBnbC5DT0xPUl9BVFRBQ0hN
RU5UMCwgZ2wuVEVYVFVSRV8yRCwgdGV4LCAwKTsKKyAgICBzaG91bGRCZSgnZ2wuY2hlY2tGcmFt
ZWJ1ZmZlclN0YXR1cyhnbC5GUkFNRUJVRkZFUiknLCAnZ2wuRlJBTUVCVUZGRVJfQ09NUExFVEUn
KTsKKworICAgIGdsLmRyYXdBcnJheXMoZ2wuUE9JTlRTLCAwLCAxKTsKKyAgICB3dHUuZ2xFcnJv
clNob3VsZEJlKGdsLCBzaG91bGRCbGVuZCA/IDAgOiBnbC5JTlZBTElEX09QRVJBVElPTiwKKyAg
ICAgICAgICAgICAgICAgICAgICAgICdGbG9hdDMyIGJsZW5kaW5nIGlzICcgKyAoc2hvdWxkQmxl
bmQgPyAnJyA6ICdub3QgJykgKyAnYWxsb3dlZCAnKTsKKworICAgIGdsLnRleEltYWdlMkQoZ2wu
VEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgMSwgMSwgMCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllU
RSwgbnVsbCk7CisgICAgZ2wuZHJhd0FycmF5cyhnbC5QT0lOVFMsIDAsIDEpOworICAgIHd0dS5n
bEVycm9yU2hvdWxkQmUoZ2wsIDAsICdVTlNJR05FRF9CWVRFIHNob3VsZCBibGVuZCBhbnl3YXkn
KTsKKworICAgIGZvciAobGV0IGkgPSAwLCBsZW4gPSBmb3JtYXRzLmxlbmd0aDsgaSA8IGxlbjsg
aSsrKSB7CisgICAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZm9ybWF0c1tp
XVswXSwgMSwgMSwgMCwgZm9ybWF0c1tpXVsxXSwgZm9ybWF0c1tpXVsyXSwgbnVsbCk7CisgICAg
ICAgIGdsLmRyYXdBcnJheXMoZ2wuUE9JTlRTLCAwLCAxKTsKKyAgICAgICAgd3R1LmdsRXJyb3JT
aG91bGRCZShnbCwgMCwgJ0FueSBvdGhlciBmbG9hdCB0eXBlIHdoaWNoIGlzIG5vdCAzMi1iaXQt
RmxvYXQgc2hvdWxkIGJsZW5kIGFueXdheScpOworICAgIH0KKworICAgIGdsLmRlbGV0ZUZyYW1l
YnVmZmVyKGZiKTsKKyAgICBnbC5kZWxldGVUZXh0dXJlKHRleCk7Cit9CisKK2Z1bmN0aW9uIHRl
c3RFeHRGbG9hdEJsZW5kTm9uRmxvYXQzMlR5cGUodmVyc2lvbiwgb2VzVGV4dHVyZUhhbGZGbG9h
dCkgeworICAgIGlmICh2ZXJzaW9uIDwgMikgeworICAgICAgICBpZiAoIW9lc1RleHR1cmVIYWxm
RmxvYXQpIHJldHVybjsKKyAgICAgICAgY29uc3QgZm9ybWF0cyA9IFsKKyAgICAgICAgICAgIFtn
bC5SR0JBLCBnbC5SR0JBLCBvZXNUZXh0dXJlSGFsZkZsb2F0LkhBTEZfRkxPQVRfT0VTXQorICAg
ICAgICBdOworICAgICAgICB0ZXN0RXh0RmxvYXRCbGVuZE5vbkZsb2F0MzJUeXBlSW1wbChnbC5S
R0JBLCBmb3JtYXRzKTsKKyAgICB9IGVsc2UgeworICAgICAgICBjb25zdCBmb3JtYXRzID0gWwor
ICAgICAgICAgICAgW2dsLlJHQkExNkYsIGdsLlJHQkEsIGdsLkhBTEZfRkxPQVRdLAorICAgICAg
ICAgICAgW2dsLlJHQkExNkYsIGdsLlJHQkEsIGdsLkZMT0FUXSwKKyAgICAgICAgICAgIFtnbC5S
RzE2RiwgZ2wuUkcsIGdsLkZMT0FUXSwKKyAgICAgICAgICAgIFtnbC5SMTZGLCBnbC5SRUQsIGds
LkZMT0FUXSwKKyAgICAgICAgICAgIFtnbC5SMTFGX0cxMUZfQjEwRiwgZ2wuUkdCLCBnbC5GTE9B
VF0KKyAgICAgICAgXTsKKyAgICAgICAgdGVzdEV4dEZsb2F0QmxlbmROb25GbG9hdDMyVHlwZUlt
cGwoZ2wuUkdCQTMyRiwgZm9ybWF0cyk7CisgICAgfQorfQorCisvKgorQ29weXJpZ2h0IChjKSAy
MDE5IFRoZSBLaHJvbm9zIEdyb3VwIEluYy4KK1VzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdv
dmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBsaWNlbnNlIHRoYXQgY2FuIGJlCitmb3VuZCBpbiB0aGUg
TElDRU5TRS50eHQgZmlsZS4KKyovCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJnbC9yZXNv
dXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9qcy93ZWJnbC10ZXN0LWhhcm5lc3MuanMgYi9MYXlvdXRU
ZXN0cy93ZWJnbC9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9qcy93ZWJnbC10ZXN0LWhhcm5l
c3MuanMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uZjQ4ZDlkMmFkNzQxNmEyZTE3YmFhMTA2Y2UxYmY4YmJkNTJmZmM5
MgotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdsL3Jlc291cmNlcy93ZWJnbF90
ZXN0X2ZpbGVzL2pzL3dlYmdsLXRlc3QtaGFybmVzcy5qcwpAQCAtMCwwICsxLDY0MiBAQAorLyoK
K0NvcHlyaWdodCAoYykgMjAxOSBUaGUgS2hyb25vcyBHcm91cCBJbmMuCitVc2Ugb2YgdGhpcyBz
b3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBi
ZQorZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUuCisqLworCisvLyBUaGlzIGlzIGEgdGVz
dCBoYXJuZXNzIGZvciBydW5uaW5nIGphdmFzY3JpcHQgdGVzdHMgaW4gdGhlIGJyb3dzZXIuCisv
LyBUaGUgb25seSBpZGVudGlmaWVyIGV4cG9zZWQgYnkgdGhpcyBoYXJuZXNzIGlzIFdlYkdMVGVz
dEhhcm5lc3NNb2R1bGUuCisvLworLy8gVG8gdXNlIGl0IG1ha2UgYW4gSFRNTCBwYWdlIHdpdGgg
YW4gaWZyYW1lLiBUaGVuIGNhbGwgdGhlIGhhcm5lc3MgbGlrZSB0aGlzCisvLworLy8gICAgZnVu
Y3Rpb24gcmVwb3J0UmVzdWx0cyh0eXBlLCBtc2csIHN1Y2Nlc3MpIHsKKy8vICAgICAgLi4uCisv
LyAgICAgIHJldHVybiB0cnVlOworLy8gICAgfQorLy8KKy8vICAgIHZhciBmaWxlTGlzdFVSTCA9
ICcwMF90ZXN0X2xpc3QudHh0JzsKKy8vICAgIHZhciB0ZXN0SGFybmVzcyA9IG5ldyBXZWJHTFRl
c3RIYXJuZXNzTW9kdWxlLlRlc3RIYXJuZXNzKAorLy8gICAgICAgIGlmcmFtZSwKKy8vICAgICAg
ICBmaWxlTGlzdFVSTCwKKy8vICAgICAgICByZXBvcnRSZXN1bHRzLAorLy8gICAgICAgIG9wdGlv
bnMpOworLy8KKy8vIFRoZSBoYXJuZXNzIHdpbGwgbG9hZCB0aGUgZmlsZUxpc3RVUkwgYW5kIHBh
cnNlIGl0IGZvciB0aGUgVVJMcywgb25lIFVSTAorLy8gcGVyIGxpbmUgcHJlY2VkZWQgYnkgb3B0
aW9ucywgc2VlIGJlbG93LiBVUkxzIHNob3VsZCBiZSBvbiB0aGUgc2FtZSBkb21haW4KKy8vIGFu
ZCBhdCB0aGUgIHNhbWUgZm9sZGVyIGxldmVsIG9yIGJlbG93IHRoZSBtYWluIGh0bWwgZmlsZS4g
IElmIGFueSBVUkwgZW5kcworLy8gaW4gLnR4dCBpdCB3aWxsIGJlIHBhcnNlZCBhcyB3ZWxsIHNv
IHlvdSBjYW4gbmVzdCAudHh0IGZpbGVzLiBVUkxzIGluc2lkZSBhCisvLyAudHh0IGZpbGUgc2hv
dWxkIGJlIHJlbGF0aXZlIHRvIHRoYXQgdGV4dCBmaWxlLgorLy8KKy8vIER1cmluZyBzdGFydHVw
LCBmb3IgZWFjaCBwYWdlIGZvdW5kIHRoZSByZXBvcnRGdW5jdGlvbiB3aWxsIGJlIGNhbGxlZCB3
aXRoCisvLyBXZWJHTFRlc3RIYXJuZXNzTW9kdWxlLlRlc3RIYXJuZXNzLnJlcG9ydFR5cGUuQURE
X1BBR0UgYW5kIG1zZyB3aWxsIGJlCisvLyB0aGUgVVJMIG9mIHRoZSB0ZXN0LgorLy8KKy8vIEVh
Y2ggdGVzdCBpcyByZXF1aXJlZCB0byBjYWxsIHRlc3RIYXJuZXNzLnJlcG9ydFJlc3VsdHMuIFRo
aXMgaXMgbW9zdCBlYXNpbHkKKy8vIGFjY29tcGxpc2hlZCBieSBzdG9yaW5nIHRoYXQgdmFsdWUg
b24gdGhlIG1haW4gd2luZG93IHdpdGgKKy8vCisvLyAgICAgd2luZG93LndlYmdsVGVzdEhhcm5l
c3MgPSB0ZXN0SGFybmVzcworLy8KKy8vIGFuZCB0aGVuIGFkZGluZyB0aGVzZSB0byBmdW5jdGlv
bnMgdG8geW91ciB0ZXN0cy4KKy8vCisvLyAgICAgZnVuY3Rpb24gcmVwb3J0VGVzdFJlc3VsdHNU
b0hhcm5lc3Moc3VjY2VzcywgbXNnKSB7CisvLyAgICAgICBpZiAod2luZG93LnBhcmVudC53ZWJn
bFRlc3RIYXJuZXNzKSB7CisvLyAgICAgICAgIHdpbmRvdy5wYXJlbnQud2ViZ2xUZXN0SGFybmVz
cy5yZXBvcnRSZXN1bHRzKHN1Y2Nlc3MsIG1zZyk7CisvLyAgICAgICB9CisvLyAgICAgfQorLy8K
Ky8vICAgICBmdW5jdGlvbiBub3RpZnlGaW5pc2hlZFRvSGFybmVzcygpIHsKKy8vICAgICAgIGlm
ICh3aW5kb3cucGFyZW50LndlYmdsVGVzdEhhcm5lc3MpIHsKKy8vICAgICAgICAgd2luZG93LnBh
cmVudC53ZWJnbFRlc3RIYXJuZXNzLm5vdGlmeUZpbmlzaGVkKCk7CisvLyAgICAgICB9CisvLyAg
ICAgfQorLy8KKy8vIFRoaXMgd2F5IHlvdXIgdGVzdHMgd2lsbCBzdGlsbCBydW4gd2l0aG91dCB0
aGUgaGFybmVzcyBhbmQgeW91IGNhbiB1c2UKKy8vIGFueSB0ZXN0aW5nIGZyYW1ld29yayB5b3Ug
d2FudC4KKy8vCisvLyBFYWNoIHRlc3Qgc2hvdWxkIGNhbGwgcmVwb3J0VGVzdFJlc3VsdHNUb0hh
cm5lc3Mgd2l0aCB0cnVlIGZvciBzdWNjZXNzIGlmIGl0CisvLyBzdWNjZWVkZWQgYW5kIGZhbHNl
IGlmIGl0IGZhaWwgZm9sbG93ZWQgYW5kIGFueSBtZXNzYWdlIGl0IHdhbnRzIHRvCisvLyBhc3Nv
Y2lhdGUgd2l0aCB0aGUgdGVzdC4gSWYgeW91ciB0ZXN0aW5nIGZyYW1ld29yayBzdXBwb3J0cyBj
aGVja2luZyBmb3IKKy8vIHRpbWVvdXQgeW91IGNhbiBjYWxsIGl0IHdpdGggc3VjY2VzcyBlcXVh
bCB0byB1bmRlZmluZWQgaW4gdGhhdCBjYXNlLgorLy8KKy8vIFRvIHJ1biB0aGUgdGVzdHMsIGNh
bGwgdGVzdEhhcm5lc3MucnVuVGVzdHMob3B0aW9ucyk7CisvLworLy8gRm9yIGVhY2ggdGVzdCBy
dW4sIGJlZm9yZSB0aGUgcGFnZSBpcyBsb2FkZWQgdGhlIHJlcG9ydEZ1bmN0aW9uIHdpbGwgYmUK
Ky8vIGNhbGxlZCB3aXRoIFdlYkdMVGVzdEhhcm5lc3NNb2R1bGUuVGVzdEhhcm5lc3MucmVwb3J0
VHlwZS5TVEFSVF9QQUdFIGFuZCBtc2cKKy8vIHdpbGwgYmUgdGhlIFVSTCBvZiB0aGUgdGVzdC4g
WW91IG1heSByZXR1cm4gZmFsc2UgaWYgeW91IHdhbnQgdGhlIHRlc3QgdG8gYmUKKy8vIHNraXBw
ZWQuCisvLworLy8gRm9yIGVhY2ggdGVzdCBjb21wbGV0ZWQgdGhlIHJlcG9ydEZ1bmN0aW9uIHdp
bGwgYmUgY2FsbGVkIHdpdGgKKy8vIHdpdGggV2ViR0xUZXN0SGFybmVzc01vZHVsZS5UZXN0SGFy
bmVzcy5yZXBvcnRUeXBlLlRFU1RfUkVTVUxULAorLy8gc3VjY2VzcyA9IHRydWUgb24gc3VjY2Vz
cywgZmFsc2Ugb24gZmFpbHVyZSwgdW5kZWZpbmVkIG9uIHRpbWVvdXQKKy8vIGFuZCBtc2cgaXMg
YW55IG1lc3NhZ2UgdGhlIHRlc3QgY2hvb3NlIHRvIHBhc3Mgb24uCisvLworLy8gV2hlbiBhbGwg
dGhlIHRlc3RzIG9uIHRoZSBwYWdlIGhhdmUgZmluaXNoZWQgeW91ciBwYWdlIG11c3QgY2FsbAor
Ly8gbm90aWZ5RmluaXNoZWRUb0hhcm5lc3MuICBJZiBub3RpZnlGaW5pc2hlZFRvSGFybmVzcyBp
cyBub3QgY2FsbGVkCisvLyB0aGUgaGFybmVzcyB3aWxsIGFzc3VtZSB0aGUgdGVzdCB0aW1lZCBv
dXQuCisvLworLy8gV2hlbiBhbGwgdGhlIHRlc3RzIG9uIGEgcGFnZSBoYXZlIGZpbmlzaGVkIE9S
IHRoZSBwYWdlIGFzIHRpbWVkIG91dCB0aGUKKy8vIHJlcG9ydEZ1bmN0aW9uIHdpbGwgYmUgY2Fs
bGVkIHdpdGgKKy8vIFdlYkdMVGVzdEhhcm5lc3NNb2R1bGUuVGVzdEhhcm5lc3MucmVwb3J0VHlw
ZS5GSU5JU0hfUEFHRQorLy8gd2hlcmUgc3VjY2VzcyA9IHRydWUgaWYgdGhlIHBhZ2UgaGFzIGNv
bXBsZXRlZCBvciB1bmRlZmluZWQgaWYgdGhlIHBhZ2UgdGltZWQKKy8vIG91dC4KKy8vCisvLyBG
aW5hbGx5LCB3aGVuIGFsbCB0aGUgdGVzdHMgaGF2ZSBjb21wbGV0ZWQgdGhlIHJlcG9ydEZ1bmN0
aW9uIHdpbGwgYmUgY2FsbGVkCisvLyB3aXRoIFdlYkdMVGVzdEhhcm5lc3NNb2R1bGUuVGVzdEhh
cm5lc3MucmVwb3J0VHlwZS5GSU5JU0hFRF9BTExfVEVTVFMuCisvLworLy8gSGFybmVzcyBPcHRp
b25zCisvLworLy8gVGhlc2UgYXJlIHBhc3NlZCBpbiB0byB0aGUgVGVzdEhhcm5lc3MgYXMgYSBK
YXZhU2NyaXB0IG9iamVjdAorLy8KKy8vIHZlcnNpb246IChyZXF1aXJlZCEpCisvLworLy8gICAg
IFNwZWNpZmllcyBhIHZlcnNpb24gdXNlZCB0byBmaWx0ZXIgdGVzdHMuIFRlc3RzIG1hcmtlZCBh
cyByZXF1aXJpbmcKKy8vICAgICBhIHZlcnNpb24gZ3JlYXRlciB0aGFuIHRoaXMgdmVyc2lvbiB3
aWxsIG5vdCBiZSBpbmNsdWRlZC4KKy8vCisvLyAgICAgZXhhbXBsZTogbmV3IFRlc3RIYXJuZXNz
KC4uLi4sIHt2ZXJzaW9uOiAiMy4xLjIifSk7CisvLworLy8gbWluVmVyc2lvbjoKKy8vCisvLyAg
ICAgU3BlY2lmaWVzIHRoZSBtaW5pbXVtIHZlcnNpb24gYSB0ZXN0IG11c3QgcmVxdWlyZSB0byBi
ZSBpbmNsdWRlZC4KKy8vICAgICBUaGlzIGJhc2ljYWxseSBmbGlwcyB0aGUgZmlsdGVyIHNvIHRo
YXQgb25seSB0ZXN0cyBtYXJrZWQgd2l0aAorLy8gICAgIC0tbWluLXZlcnNpb24gd2lsbCBiZSBp
bmNsdWRlZCBpZiB0aGV5IGFyZSBhdCB0aGlzIG1pblZlcnNpb24gb3IKKy8vICAgICBncmVhdGVy
LgorLy8KKy8vICAgICBleGFtcGxlOiBuZXcgVGVzdEhhcm5lc3MoLi4uLiwge21pblZlcnNpb246
ICIyLjMuMSJ9KTsKKy8vCisvLyBtYXhWZXJzaW9uOgorLy8KKy8vICAgICBTcGVjaWZpZXMgdGhl
IG1heGltdW0gdmVyc2lvbiBhIHRlc3QgbXVzdCByZXF1aXJlIHRvIGJlIGluY2x1ZGVkLgorLy8g
ICAgIFRoaXMgYmFzaWNhbGx5IGZsaXBzIHRoZSBmaWx0ZXIgc28gdGhhdCBvbmx5IHRlc3RzIG1h
cmtlZCB3aXRoCisvLyAgICAgLS1tYXgtdmVyc2lvbiB3aWxsIGJlIGluY2x1ZGVkIGlmIHRoZXkg
YXJlIGF0IHRoaXMgbWF4VmVyc2lvbiBvcgorLy8gICAgIGxlc3MuCisvLworLy8gICAgIGV4YW1w
bGU6IG5ldyBUZXN0SGFybmVzcyguLi4uLCB7bWF4VmVyc2lvbjogIjIuMy4xIn0pOworLy8KKy8v
IGZhc3Q6CisvLworLy8gICAgIFNwZWNpZmllcyB0byBza2lwIGFueSB0ZXN0cyBtYXJrZWQgYXMg
c2xvdy4KKy8vCisvLyAgICAgZXhhbXBsZTogbmV3IFRlc3RIYXJuZXNzKC4uLiwge2Zhc3Q6IHRy
dWV9KTsKKy8vCisvLyBUZXN0IE9wdGlvbnM6CisvLworLy8gQW55IHRlc3QgVVJMIG9yIC50eHQg
ZmlsZSBjYW4gYmUgcHJlZml4ZWQgYnkgdGhlIGZvbGxvd2luZyBvcHRpb25zCisvLworLy8gbWlu
LXZlcnNpb246CisvLworLy8gICAgIFNldHMgdGhlIG1pbmltdW0gdmVyc2lvbiByZXF1aXJlZCB0
byBpbmNsdWRlIHRoaXMgdGVzdC4gQSB2ZXJzaW9uIGlzCisvLyAgICAgcGFzc2VkIGludG8gdGhl
IGhhcm5lc3Mgb3B0aW9ucy4gQW55IHRlc3QgbWFya2VkIGFzIHJlcXVpcmluZyBhCisvLyAgICAg
bWluLXZlcnNpb24gZ3JlYXRlciB0aGFuIHRoZSB2ZXJzaW9uIHBhc3NlZCB0byB0aGUgaGFybmVz
cyBpcyBza2lwcGVkLgorLy8gICAgIFRoaXMgYWxsb3dzIHlvdSB0byBhZGQgbmV3IHRlc3RzIHRv
IGEgc3VpdGUgb2YgdGVzdHMgZm9yIGEgZnV0dXJlCisvLyAgICAgdmVyc2lvbiBvZiB0aGUgc3Vp
dGUgd2l0aG91dCBpbmNsdWRpbmcgdGhlIHRlc3QgaW4gdGhlIGN1cnJlbnQgdmVyc2lvbi4KKy8v
ICAgICBJZiBubyAtbWluLXZlcnNpb24gaXMgc3BlY2lmaWVkIGl0IGlzIGluaGVyaWl0ZWQgZnJv
bSB0aGUgLnR4dCBmaWxlCisvLyAgICAgaW5jbHVkaW5nIGl0LiBUaGUgZGVmYXVsdCBpcyAxLjAu
MAorLy8KKy8vICAgICBleGFtcGxlOiAgLS1taW4tdmVyc2lvbiAyLjEuMyBzb21ldGVzdC5odG1s
CisvLworLy8gbWF4LXZlcnNpb246CisvLworLy8gICAgIFNldHMgdGhlIG1heGltdW0gdmVyc2lv
biByZXF1aXJlZCB0byBpbmNsdWRlIHRoaXMgdGVzdC4gQSB2ZXJzaW9uIGlzCisvLyAgICAgcGFz
c2VkIGludG8gdGhlIGhhcm5lc3Mgb3B0aW9ucy4gQW55IHRlc3QgbWFya2VkIGFzIHJlcXVpcmlu
ZyBhCisvLyAgICAgbWF4LXZlcnNpb24gbGVzcyB0aGFuIHRoZSB2ZXJzaW9uIHBhc3NlZCB0byB0
aGUgaGFybmVzcyBpcyBza2lwcGVkLgorLy8gICAgIFRoaXMgYWxsb3dzIHlvdSB0byB0ZXN0IGZ1
bmN0aW9uYWxpdHkgdGhhdCBoYXMgYmVlbiByZW1vdmVkIGZyb20gbGF0ZXIKKy8vICAgICB2ZXJz
aW9ucyBvZiB0aGUgc3VpdGUuCisvLyAgICAgSWYgbm8gLW1heC12ZXJzaW9uIGlzIHNwZWNpZmll
ZCBpdCBpcyBpbmhlcml0ZWQgZnJvbSB0aGUgLnR4dCBmaWxlCisvLyAgICAgaW5jbHVkaW5nIGl0
LgorLy8KKy8vICAgICBleGFtcGxlOiAgLS1tYXgtdmVyc2lvbiAxLjkuOSBzb21ldGVzdC5odG1s
CisvLworLy8gc2xvdzoKKy8vCisvLyAgICAgTWFya3MgYSB0ZXN0IGFzIHNsb3cuIFNsb3cgdGVz
dHMgY2FuIGJlIHNraXBwZWQgYnkgcGFzc2luZyBmYXN0T25seTogdHJ1ZQorLy8gICAgIHRvIHRo
ZSBUZXN0SGFybmVzcy4gT2YgY291cnNlIHlvdSBuZWVkIHRvIHBhc3MgYWxsIHRlc3RzIGJ1dCBz
b21ldGltZXMKKy8vICAgICB5b3UnZCBsaWtlIHRvIHRlc3QgcXVpY2tseSBhbmQgcnVuIG9ubHkg
dGhlIGZhc3Qgc3Vic2V0IG9mIHRlc3RzLgorLy8KKy8vICAgICBleGFtcGxlOiAgLS1zbG93IHNv
bWUtdGVzdC10aGF0LXRha2VzLTItbWlucy5odG1sCisvLworCitXZWJHTFRlc3RIYXJuZXNzTW9k
dWxlID0gZnVuY3Rpb24oKSB7CisKKy8qKgorICogV3JhcHBlZCBsb2dnaW5nIGZ1bmN0aW9uLgor
ICovCit2YXIgbG9nID0gZnVuY3Rpb24obXNnKSB7CisgIGlmICh3aW5kb3cuY29uc29sZSAmJiB3
aW5kb3cuY29uc29sZS5sb2cpIHsKKyAgICB3aW5kb3cuY29uc29sZS5sb2cobXNnKTsKKyAgfQor
fTsKKworLyoqCisgKiBMb2FkcyB0ZXh0IGZyb20gYW4gZXh0ZXJuYWwgZmlsZS4gVGhpcyBmdW5j
dGlvbiBpcyBzeW5jaHJvbm91cy4KKyAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIHVybCBvZiB0
aGUgZXh0ZXJuYWwgZmlsZS4KKyAqIEBwYXJhbSB7IWZ1bmN0aW9uKGJvb2wsIHN0cmluZyk6IHZv
aWR9IGNhbGxiYWNrIHRoYXQgaXMgc2VudCBhIGJvb2wgZm9yCisgKiAgICAgc3VjY2VzcyBhbmQg
dGhlIHN0cmluZy4KKyAqLwordmFyIGxvYWRUZXh0RmlsZUFzeW5jaHJvbm91cyA9IGZ1bmN0aW9u
KHVybCwgY2FsbGJhY2spIHsKKyAgbG9nICgibG9hZGluZzogIiArIHVybCk7CisgIHZhciBlcnJv
ciA9ICdsb2FkVGV4dEZpbGVTeW5jaHJvbm91cyBmYWlsZWQgdG8gbG9hZCB1cmwgIicgKyB1cmwg
KyAnIic7CisgIHZhciByZXF1ZXN0OworICBpZiAod2luZG93LlhNTEh0dHBSZXF1ZXN0KSB7Cisg
ICAgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICAgIGlmIChyZXF1ZXN0Lm92ZXJy
aWRlTWltZVR5cGUpIHsKKyAgICAgIHJlcXVlc3Qub3ZlcnJpZGVNaW1lVHlwZSgndGV4dC9wbGFp
bicpOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICB0aHJvdyAnWE1MSHR0cFJlcXVlc3QgaXMgZGlz
YWJsZWQnOworICB9CisgIHRyeSB7CisgICAgcmVxdWVzdC5vcGVuKCdHRVQnLCB1cmwsIHRydWUp
OworICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0gZnVuY3Rpb24oKSB7CisgICAgICBp
ZiAocmVxdWVzdC5yZWFkeVN0YXRlID09IDQpIHsKKyAgICAgICAgdmFyIHRleHQgPSAnJzsKKyAg
ICAgICAgLy8gSFRUUCByZXBvcnRzIHN1Y2Nlc3Mgd2l0aCBhIDIwMCBzdGF0dXMuIFRoZSBmaWxl
IHByb3RvY29sIHJlcG9ydHMKKyAgICAgICAgLy8gc3VjY2VzcyB3aXRoIHplcm8uIEhUVFAgZG9l
cyBub3QgdXNlIHplcm8gYXMgYSBzdGF0dXMgY29kZSAodGhleQorICAgICAgICAvLyBzdGFydCBh
dCAxMDApLgorICAgICAgICAvLyBodHRwczovL2RldmVsb3Blci5tb3ppbGxhLm9yZy9Fbi9Vc2lu
Z19YTUxIdHRwUmVxdWVzdAorICAgICAgICB2YXIgc3VjY2VzcyA9IHJlcXVlc3Quc3RhdHVzID09
IDIwMCB8fCByZXF1ZXN0LnN0YXR1cyA9PSAwOworICAgICAgICBpZiAoc3VjY2VzcykgeworICAg
ICAgICAgIHRleHQgPSByZXF1ZXN0LnJlc3BvbnNlVGV4dDsKKyAgICAgICAgfQorICAgICAgICBs
b2coImxvYWRlZDogIiArIHVybCk7CisgICAgICAgIGNhbGxiYWNrKHN1Y2Nlc3MsIHRleHQpOwor
ICAgICAgfQorICAgIH07CisgICAgcmVxdWVzdC5zZW5kKG51bGwpOworICB9IGNhdGNoIChlKSB7
CisgICAgbG9nKCJmYWlsZWQgdG8gbG9hZDogIiArIHVybCk7CisgICAgY2FsbGJhY2soZmFsc2Us
ICcnKTsKKyAgfQorfTsKKworLyoqCisgKiBAcGFyYW0ge3N0cmluZ30gdmVyc2lvblN0cmluZyBX
ZWJHTCB2ZXJzaW9uIHN0cmluZy4KKyAqIEByZXR1cm4ge251bWJlcn0gSW50ZWdlciBjb250YWlu
aW5nIHRoZSBXZWJHTCBtYWpvciB2ZXJzaW9uLgorICovCit2YXIgZ2V0TWFqb3JWZXJzaW9uID0g
ZnVuY3Rpb24odmVyc2lvblN0cmluZykgeworICBpZiAoIXZlcnNpb25TdHJpbmcpIHsKKyAgICBy
ZXR1cm4gMTsKKyAgfQorICByZXR1cm4gcGFyc2VJbnQodmVyc2lvblN0cmluZy5zcGxpdCgiICIp
WzBdLnNwbGl0KCIuIilbMF0sIDEwKTsKK307CisKKy8qKgorICogQHBhcmFtIHtzdHJpbmd9IHVy
bCBCYXNlIFVSTCBvZiB0aGUgdGVzdC4KKyAqIEBwYXJhbSB7bWFwfSBvcHRpb25zIE1hcCBvZiBv
cHRpb25zIHRvIGFwcGVuZCB0byB0aGUgVVJMJ3MgcXVlcnkgc3RyaW5nLgorICogQHJldHVybiB7
c3RyaW5nfSBVUkwgdGhhdCB3aWxsIHJ1biB0aGUgdGVzdCB3aXRoIHRoZSBnaXZlbiBXZWJHTCB2
ZXJzaW9uLgorICovCit2YXIgZ2V0VVJMV2l0aE9wdGlvbnMgPSBmdW5jdGlvbih1cmwsIG9wdGlv
bnMpIHsKKyAgdmFyIHF1ZXJ5QXJncyA9IDA7CisKKyAgZm9yIChpIGluIG9wdGlvbnMpIHsKKyAg
ICB1cmwgKz0gcXVlcnlBcmdzID8gIiYiIDogIj8iOworICAgIHVybCArPSBpICsgIj0iICsgb3B0
aW9uc1tpXTsKKyAgICBxdWVyeUFyZ3MrKzsKKyAgfQorCisgIHJldHVybiB1cmw7Cit9OworCisv
KioKKyAqIENvbXBhcmUgdmVyc2lvbiBzdHJpbmdzLgorICovCit2YXIgZ3JlYXRlclRoYW5PckVx
dWFsVG9WZXJzaW9uID0gZnVuY3Rpb24oaGF2ZSwgd2FudCkgeworICBoYXZlID0gaGF2ZS5zcGxp
dCgiICIpWzBdLnNwbGl0KCIuIik7CisgIHdhbnQgPSB3YW50LnNwbGl0KCIgIilbMF0uc3BsaXQo
Ii4iKTsKKworICAvL2hhdmUgMS4yLjMgICB3YW50ICAxLjEKKyAgLy9oYXZlIDEuMS4xICAgd2Fu
dCAgMS4xCisgIC8vaGF2ZSAxLjAuOSAgIHdhbnQgIDEuMQorICAvL2hhdmUgMS4xICAgICB3YW50
ICAxLjEuMQorCisgIGZvciAodmFyIGlpID0gMDsgaWkgPCB3YW50Lmxlbmd0aDsgKytpaSkgewor
ICAgIHZhciB3YW50TnVtID0gcGFyc2VJbnQod2FudFtpaV0pOworICAgIHZhciBoYXZlTnVtID0g
aGF2ZVtpaV0gPyBwYXJzZUludChoYXZlW2lpXSkgOiAwCisgICAgaWYgKGhhdmVOdW0gPiB3YW50
TnVtKSB7CisgICAgICByZXR1cm4gdHJ1ZTsgLy8gMi4wLjAgaXMgZ3JlYXRlciB0aGFuIDEuMi4z
CisgICAgfQorICAgIGlmIChoYXZlTnVtIDwgd2FudE51bSkgeworICAgICAgcmV0dXJuIGZhbHNl
OworICAgIH0KKyAgfQorICByZXR1cm4gdHJ1ZTsKK307CisKKy8qKgorICogUmVhZHMgYSBmaWxl
LCByZWN1cnNpdmVseSBhZGRpbmcgZmlsZXMgcmVmZXJlbmNlZCBpbnNpZGUuCisgKgorICogRWFj
aCBsaW5lIG9mIFVSTCBpcyBwYXJzZWQsIGNvbW1lbnRzIHN0YXJ0aW5nIHdpdGggJyMnIG9yICc7
JworICogb3IgJy8vJyBhcmUgc3RyaXBwZWQuCisgKgorICogYXJndW1lbnRzIGJlZ2lubmluZyB3
aXRoIC0tIGFyZSBleHRyYWN0ZWQKKyAqCisgKiBsaW5lcyB0aGF0IGVuZCBpbiAudHh0IGFyZSBy
ZWN1cnNpdmVseSBzY2FubmVkIGZvciBtb3JlIGZpbGVzCisgKiBvdGhlciBsaW5lcyBhcmUgYWRk
ZWQgdG8gdGhlIGxpc3Qgb2YgZmlsZXMuCisgKgorICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUg
dXJsIG9mIHRoZSBmaWxlIHRvIHJlYWQuCisgKiBAcGFyYW0ge2Z1bmN0aW9uKGJvb2xlYW4sICFB
cnJheS48c3RyaW5nPik6dm9pZH0gY2FsbGJhY2sKKyAqICAgICAgQ2FsbGJhY2sgdGhhdCBpcyBj
YWxsZWQgd2l0aCB0cnVlIGZvciBzdWNjZXNzIGFuZCBhbgorICogICAgICBhcnJheSBvZiBmaWxl
bmFtZXMuCisgKiBAcGFyYW0ge09iamVjdH0gb3B0aW9ucyBPcHRpb25hbCBvcHRpb25zCisgKgor
ICogT3B0aW9uczoKKyAqICAgIHZlcnNpb246IHtzdHJpbmd9IFRoZSB2ZXJzaW9uIG9mIHRoZSBj
b25mb3JtYW5jZSB0ZXN0LgorICogICAgVGVzdHMgd2l0aCB0aGUgYXJndW1lbnQgLS1taW4tdmVy
c2lvbiA8dmVyc2lvbj4gd2lsbAorICogICAgYmUgaWdub3JlZCB2ZXJzaW9uIGlzIGxlc3MgdGhl
biA8dmVyc2lvbj4KKyAqCisgKi8KK3ZhciBnZXRGaWxlTGlzdCA9IGZ1bmN0aW9uKHVybCwgY2Fs
bGJhY2ssIG9wdGlvbnMpIHsKKyAgdmFyIGZpbGVzID0gW107CisKKyAgdmFyIGNvcHlPYmplY3Qg
PSBmdW5jdGlvbihvYmopIHsKKyAgICByZXR1cm4gSlNPTi5wYXJzZShKU09OLnN0cmluZ2lmeShv
YmopKTsKKyAgfTsKKworICB2YXIgdG9DYW1lbENhc2UgPSBmdW5jdGlvbihzdHIpIHsKKyAgICBy
ZXR1cm4gc3RyLnJlcGxhY2UoLy0oW2Etel0pL2csIGZ1bmN0aW9uIChnKSB7IHJldHVybiBnWzFd
LnRvVXBwZXJDYXNlKCkgfSk7CisgIH07CisKKyAgdmFyIGdsb2JhbE9wdGlvbnMgPSBjb3B5T2Jq
ZWN0KG9wdGlvbnMpOworICBnbG9iYWxPcHRpb25zLmRlZmF1bHRWZXJzaW9uID0gIjEuMCI7Cisg
IGdsb2JhbE9wdGlvbnMuZGVmYXVsdE1heFZlcnNpb24gPSBudWxsOworCisgIHZhciBnZXRGaWxl
TGlzdEltcGwgPSBmdW5jdGlvbihwcmVmaXgsIGxpbmUsIGxpbmVOdW0sIGhpZXJhcmNoaWNhbE9w
dGlvbnMsIGNhbGxiYWNrKSB7CisgICAgdmFyIGZpbGVzID0gW107CisKKyAgICB2YXIgYXJncyA9
IGxpbmUuc3BsaXQoL1xzKy8pOworICAgIHZhciBub25PcHRpb25zID0gW107CisgICAgdmFyIHVz
ZVRlc3QgPSB0cnVlOworICAgIHZhciB0ZXN0T3B0aW9ucyA9IHt9OworICAgIGZvciAodmFyIGpq
ID0gMDsgamogPCBhcmdzLmxlbmd0aDsgKytqaikgeworICAgICAgdmFyIGFyZyA9IGFyZ3Nbampd
OworICAgICAgaWYgKGFyZ1swXSA9PSAnLScpIHsKKyAgICAgICAgaWYgKGFyZ1sxXSAhPSAnLScp
IHsKKyAgICAgICAgICB0aHJvdyAoImJhZCBvcHRpb24gYXQgaW4gIiArIHVybCArICI6IiArIGxp
bmVOdW0gKyAiOiAiICsgYXJnKTsKKyAgICAgICAgfQorICAgICAgICB2YXIgb3B0aW9uID0gYXJn
LnN1YnN0cmluZygyKTsKKyAgICAgICAgc3dpdGNoIChvcHRpb24pIHsKKyAgICAgICAgICAvLyBu
byBhcmd1bWVudCBvcHRpb25zLgorICAgICAgICAgIGNhc2UgJ3Nsb3cnOgorICAgICAgICAgICAg
dGVzdE9wdGlvbnNbdG9DYW1lbENhc2Uob3B0aW9uKV0gPSB0cnVlOworICAgICAgICAgICAgYnJl
YWs7CisgICAgICAgICAgLy8gb25lIGFyZ3VtZW50IG9wdGlvbnMuCisgICAgICAgICAgY2FzZSAn
bWluLXZlcnNpb24nOgorICAgICAgICAgIGNhc2UgJ21heC12ZXJzaW9uJzoKKyAgICAgICAgICAg
ICsramo7CisgICAgICAgICAgICB0ZXN0T3B0aW9uc1t0b0NhbWVsQ2FzZShvcHRpb24pXSA9IGFy
Z3NbampdOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAg
ICAgIHRocm93ICgiYmFkIHVua25vd24gb3B0aW9uICciICsgb3B0aW9uICsgIicgYXQgaW4gIiAr
IHVybCArICI6IiArIGxpbmVOdW0gKyAiOiAiICsgYXJnKTsKKyAgICAgICAgfQorICAgICAgfSBl
bHNlIHsKKyAgICAgICAgbm9uT3B0aW9ucy5wdXNoKGFyZyk7CisgICAgICB9CisgICAgfQorICAg
IHZhciB1cmwgPSBwcmVmaXggKyBub25PcHRpb25zLmpvaW4oIiAiKTsKKworICAgIGlmICh1cmwu
c3Vic3RyKHVybC5sZW5ndGggLSA0KSAhPSAnLnR4dCcpIHsKKyAgICAgIHZhciBtaW5WZXJzaW9u
ID0gdGVzdE9wdGlvbnMubWluVmVyc2lvbjsKKyAgICAgIGlmICghbWluVmVyc2lvbikgeworICAg
ICAgICBtaW5WZXJzaW9uID0gaGllcmFyY2hpY2FsT3B0aW9ucy5kZWZhdWx0VmVyc2lvbjsKKyAg
ICAgIH0KKyAgICAgIHZhciBtYXhWZXJzaW9uID0gdGVzdE9wdGlvbnMubWF4VmVyc2lvbjsKKyAg
ICAgIGlmICghbWF4VmVyc2lvbikgeworICAgICAgICBtYXhWZXJzaW9uID0gaGllcmFyY2hpY2Fs
T3B0aW9ucy5kZWZhdWx0TWF4VmVyc2lvbjsKKyAgICAgIH0KKyAgICAgIHZhciBzbG93ID0gdGVz
dE9wdGlvbnMuc2xvdzsKKyAgICAgIGlmICghc2xvdykgeworICAgICAgICBzbG93ID0gaGllcmFy
Y2hpY2FsT3B0aW9ucy5kZWZhdWx0U2xvdzsKKyAgICAgIH0KKworICAgICAgaWYgKGdsb2JhbE9w
dGlvbnMuZmFzdCAmJiBzbG93KSB7CisgICAgICAgIHVzZVRlc3QgPSBmYWxzZTsKKyAgICAgIH0g
ZWxzZSBpZiAoZ2xvYmFsT3B0aW9ucy5taW5WZXJzaW9uKSB7CisgICAgICAgIHVzZVRlc3QgPSBn
cmVhdGVyVGhhbk9yRXF1YWxUb1ZlcnNpb24obWluVmVyc2lvbiwgZ2xvYmFsT3B0aW9ucy5taW5W
ZXJzaW9uKTsKKyAgICAgIH0gZWxzZSBpZiAoZ2xvYmFsT3B0aW9ucy5tYXhWZXJzaW9uICYmIG1h
eFZlcnNpb24pIHsKKyAgICAgICAgdXNlVGVzdCA9IGdyZWF0ZXJUaGFuT3JFcXVhbFRvVmVyc2lv
bihnbG9iYWxPcHRpb25zLm1heFZlcnNpb24sIG1heFZlcnNpb24pOworICAgICAgfSBlbHNlIHsK
KyAgICAgICAgdXNlVGVzdCA9IGdyZWF0ZXJUaGFuT3JFcXVhbFRvVmVyc2lvbihnbG9iYWxPcHRp
b25zLnZlcnNpb24sIG1pblZlcnNpb24pOworICAgICAgICBpZiAobWF4VmVyc2lvbikgeworICAg
ICAgICAgIHVzZVRlc3QgPSB1c2VUZXN0ICYmIGdyZWF0ZXJUaGFuT3JFcXVhbFRvVmVyc2lvbiht
YXhWZXJzaW9uLCBnbG9iYWxPcHRpb25zLnZlcnNpb24pOworICAgICAgICB9CisgICAgICB9Cisg
ICAgfQorCisgICAgaWYgKCF1c2VUZXN0KSB7CisgICAgICBjYWxsYmFjayh0cnVlLCBbXSk7Cisg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHVybC5zdWJzdHIodXJsLmxlbmd0aCAtIDQp
ID09ICcudHh0JykgeworICAgICAgLy8gSWYgYSB2ZXJzaW9uIHdhcyBleHBsaWNpdHkgc3BlY2lm
aWVkIHBhc3MgaXQgZG93bi4KKyAgICAgIGlmICh0ZXN0T3B0aW9ucy5taW5WZXJzaW9uKSB7Cisg
ICAgICAgIGhpZXJhcmNoaWNhbE9wdGlvbnMuZGVmYXVsdFZlcnNpb24gPSB0ZXN0T3B0aW9ucy5t
aW5WZXJzaW9uOworICAgICAgfQorICAgICAgaWYgKHRlc3RPcHRpb25zLm1heFZlcnNpb24pIHsK
KyAgICAgICAgaGllcmFyY2hpY2FsT3B0aW9ucy5kZWZhdWx0TWF4VmVyc2lvbiA9IHRlc3RPcHRp
b25zLm1heFZlcnNpb247CisgICAgICB9CisgICAgICBpZiAodGVzdE9wdGlvbnMuc2xvdykgewor
ICAgICAgICBoaWVyYXJjaGljYWxPcHRpb25zLmRlZmF1bHRTbG93ID0gdGVzdE9wdGlvbnMuc2xv
dzsKKyAgICAgIH0KKyAgICAgIGxvYWRUZXh0RmlsZUFzeW5jaHJvbm91cyh1cmwsIGZ1bmN0aW9u
KCkgeworICAgICAgICByZXR1cm4gZnVuY3Rpb24oc3VjY2VzcywgdGV4dCkgeworICAgICAgICAg
IGlmICghc3VjY2VzcykgeworICAgICAgICAgICAgY2FsbGJhY2soZmFsc2UsICcnKTsKKyAgICAg
ICAgICAgIHJldHVybjsKKyAgICAgICAgICB9CisgICAgICAgICAgdmFyIGxpbmVzID0gdGV4dC5z
cGxpdCgnXG4nKTsKKyAgICAgICAgICB2YXIgcHJlZml4ID0gJyc7CisgICAgICAgICAgdmFyIGxh
c3RTbGFzaCA9IHVybC5sYXN0SW5kZXhPZignLycpOworICAgICAgICAgIGlmIChsYXN0U2xhc2gg
Pj0gMCkgeworICAgICAgICAgICAgcHJlZml4ID0gdXJsLnN1YnN0cigwLCBsYXN0U2xhc2ggKyAx
KTsKKyAgICAgICAgICB9CisgICAgICAgICAgdmFyIGZhaWwgPSBmYWxzZTsKKyAgICAgICAgICB2
YXIgY291bnQgPSAxOworICAgICAgICAgIHZhciBpbmRleCA9IDA7CisgICAgICAgICAgZm9yICh2
YXIgaWkgPSAwOyBpaSA8IGxpbmVzLmxlbmd0aDsgKytpaSkgeworICAgICAgICAgICAgdmFyIHN0
ciA9IGxpbmVzW2lpXS5yZXBsYWNlKC9eXHNccyovLCAnJykucmVwbGFjZSgvXHNccyokLywgJycp
OworICAgICAgICAgICAgaWYgKHN0ci5sZW5ndGggPiA0ICYmCisgICAgICAgICAgICAgICAgc3Ry
WzBdICE9ICcjJyAmJgorICAgICAgICAgICAgICAgIHN0clswXSAhPSAiOyIgJiYKKyAgICAgICAg
ICAgICAgICBzdHIuc3Vic3RyKDAsIDIpICE9ICIvLyIpIHsKKyAgICAgICAgICAgICAgKytjb3Vu
dDsKKyAgICAgICAgICAgICAgZ2V0RmlsZUxpc3RJbXBsKHByZWZpeCwgc3RyLCBpaSArIDEsIGNv
cHlPYmplY3QoaGllcmFyY2hpY2FsT3B0aW9ucyksIGZ1bmN0aW9uKGluZGV4KSB7CisgICAgICAg
ICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHN1Y2Nlc3MsIG5ld19maWxlcykgeworICAgICAgICAg
ICAgICAgICAgLy9sb2coImdvdCBmaWxlczogIiArIG5ld19maWxlcy5sZW5ndGgpOworICAgICAg
ICAgICAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgZmlsZXNbaW5k
ZXhdID0gbmV3X2ZpbGVzOworICAgICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgICAg
ZmluaXNoKHN1Y2Nlc3MpOworICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgIH0oaW5k
ZXgrKykpOworICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBmaW5pc2godHJ1
ZSk7CisKKyAgICAgICAgICBmdW5jdGlvbiBmaW5pc2goc3VjY2VzcykgeworICAgICAgICAgICAg
aWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAgIGZhaWwgPSB0cnVlOworICAgICAgICAgICAg
fQorICAgICAgICAgICAgLS1jb3VudDsKKyAgICAgICAgICAgIC8vbG9nKCJjb3VudDogIiArIGNv
dW50KTsKKyAgICAgICAgICAgIGlmICghY291bnQpIHsKKyAgICAgICAgICAgICAgY2FsbGJhY2so
IWZhaWwsIGZpbGVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgIH0oKSk7CisgICAgfSBlbHNlIHsKKyAgICAgIGZpbGVzLnB1c2godXJsKTsKKyAgICAgIGNh
bGxiYWNrKHRydWUsIGZpbGVzKTsKKyAgICB9CisgIH07CisKKyAgZ2V0RmlsZUxpc3RJbXBsKCcn
LCB1cmwsIDEsIGdsb2JhbE9wdGlvbnMsIGZ1bmN0aW9uKHN1Y2Nlc3MsIGZpbGVzKSB7CisgICAg
Ly8gZmxhdHRlbgorICAgIHZhciBmbGF0ID0gW107CisgICAgZmxhdHRlbihmaWxlcyk7CisgICAg
ZnVuY3Rpb24gZmxhdHRlbihmaWxlcykgeworICAgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGZp
bGVzLmxlbmd0aDsgKytpaSkgeworICAgICAgICB2YXIgdmFsdWUgPSBmaWxlc1tpaV07CisgICAg
ICAgIGlmICh0eXBlb2YodmFsdWUpID09ICJzdHJpbmciKSB7CisgICAgICAgICAgZmxhdC5wdXNo
KHZhbHVlKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICBmbGF0dGVuKHZhbHVlKTsKKyAg
ICAgICAgfQorICAgICAgfQorICAgIH0KKyAgICBjYWxsYmFjayhzdWNjZXNzLCBmbGF0KTsKKyAg
fSk7Cit9OworCit2YXIgRmlsdGVyVVJMID0gKGZ1bmN0aW9uKCkgeworICB2YXIgcHJlZml4ID0g
d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lOworICBwcmVmaXggPSBwcmVmaXguc3Vic3RyaW5nKDAs
IHByZWZpeC5sYXN0SW5kZXhPZigiLyIpICsgMSk7CisgIHJldHVybiBmdW5jdGlvbih1cmwpIHsK
KyAgICBpZiAodXJsLnN1YnN0cmluZygwLCBwcmVmaXgubGVuZ3RoKSA9PSBwcmVmaXgpIHsKKyAg
ICAgIHVybCA9IHVybC5zdWJzdHJpbmcocHJlZml4Lmxlbmd0aCk7CisgICAgfQorICAgIHJldHVy
biB1cmw7CisgIH07Cit9KCkpOworCit2YXIgVGVzdEZpbGUgPSBmdW5jdGlvbih1cmwpIHsKKyAg
dGhpcy51cmwgPSB1cmw7Cit9OworCit2YXIgVGVzdCA9IGZ1bmN0aW9uKGZpbGUpIHsKKyAgdGhp
cy5maWxlID0gZmlsZTsKK307CisKK3ZhciBUZXN0SGFybmVzcyA9IGZ1bmN0aW9uKGlmcmFtZSwg
ZmlsZWxpc3RVcmwsIHJlcG9ydEZ1bmMsIG9wdGlvbnMpIHsKKyAgdGhpcy53aW5kb3cgPSB3aW5k
b3c7CisgIHRoaXMuaWZyYW1lcyA9IGlmcmFtZS5sZW5ndGggPyBpZnJhbWUgOiBbaWZyYW1lXTsK
KyAgdGhpcy5yZXBvcnRGdW5jID0gcmVwb3J0RnVuYzsKKyAgdGhpcy50aW1lb3V0RGVsYXkgPSAy
MDAwMDsKKyAgdGhpcy5maWxlcyA9IFtdOworICB0aGlzLmFsbG93U2tpcCA9IG9wdGlvbnMuYWxs
b3dTa2lwOworICB0aGlzLndlYmdsVmVyc2lvbiA9IGdldE1ham9yVmVyc2lvbihvcHRpb25zLnZl
cnNpb24pOworICB0aGlzLmR1bXBTaGFkZXJzID0gb3B0aW9ucy5kdW1wU2hhZGVyczsKKyAgdGhp
cy5xdWlldCA9IG9wdGlvbnMucXVpZXQ7CisKKyAgdmFyIHRoYXQgPSB0aGlzOworICBnZXRGaWxl
TGlzdChmaWxlbGlzdFVybCwgZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKHN1Y2Nl
c3MsIGZpbGVzKSB7CisgICAgICB0aGF0LmFkZEZpbGVzXyhzdWNjZXNzLCBmaWxlcyk7CisgICAg
fTsKKyAgfSgpLCBvcHRpb25zKTsKKworfTsKKworVGVzdEhhcm5lc3MucmVwb3J0VHlwZSA9IHsK
KyAgQUREX1BBR0U6IDEsCisgIFJFQURZOiAyLAorICBTVEFSVF9QQUdFOiAzLAorICBURVNUX1JF
U1VMVDogNCwKKyAgRklOSVNIX1BBR0U6IDUsCisgIEZJTklTSEVEX0FMTF9URVNUUzogNgorfTsK
KworVGVzdEhhcm5lc3MucHJvdG90eXBlLmFkZEZpbGVzXyA9IGZ1bmN0aW9uKHN1Y2Nlc3MsIGZp
bGVzKSB7CisgIGlmICghc3VjY2VzcykgeworICAgIHRoaXMucmVwb3J0RnVuYygKKyAgICAgICAg
VGVzdEhhcm5lc3MucmVwb3J0VHlwZS5GSU5JU0hFRF9BTExfVEVTVFMsCisgICAgICAgICcnLAor
ICAgICAgICAnVW5hYmxlIHRvIGxvYWQgdGVzdHMuIEFyZSB5b3UgcnVubmluZyBsb2NhbGx5P1xu
JyArCisgICAgICAgICdZb3UgbmVlZCB0byBydW4gZnJvbSBhIHNlcnZlciBvciBjb25maWd1cmUg
eW91clxuJyArCisgICAgICAgICdicm93c2VyIHRvIGFsbG93IGFjY2VzcyB0byBsb2NhbCBmaWxl
cyAobm90IHJlY29tbWVuZGVkKS5cblxuJyArCisgICAgICAgICdOb3RlOiBBbiBlYXN5IHdheSB0
byBydW4gZnJvbSBhIHNlcnZlcjpcblxuJyArCisgICAgICAgICdcdGNkIHBhdGhfdG9fdGVzdHNc
bicgKworICAgICAgICAnXHRweXRob24gLW0gU2ltcGxlSFRUUFNlcnZlclxuXG4nICsKKyAgICAg
ICAgJ3RoZW4gcG9pbnQgeW91ciBicm93c2VyIHRvICcgKworICAgICAgICAgICc8YSBocmVmPSJo
dHRwOi8vbG9jYWxob3N0OjgwMDAvd2ViZ2wtY29uZm9ybWFuY2UtdGVzdHMuaHRtbCI+JyArCisg
ICAgICAgICAgJ2h0dHA6Ly9sb2NhbGhvc3Q6ODAwMC93ZWJnbC1jb25mb3JtYW5jZS10ZXN0cy5o
dG1sPC9hPicsCisgICAgICAgIGZhbHNlKQorICAgIHJldHVybjsKKyAgfQorICBsb2coInRvdGFs
IGZpbGVzOiAiICsgZmlsZXMubGVuZ3RoKTsKKyAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGZpbGVz
Lmxlbmd0aDsgKytpaSkgeworICAgIGxvZygiIiArIGlpICsgIjogIiArIGZpbGVzW2lpXSk7Cisg
ICAgdGhpcy5maWxlcy5wdXNoKG5ldyBUZXN0RmlsZShmaWxlc1tpaV0pKTsKKyAgICB0aGlzLnJl
cG9ydEZ1bmMoVGVzdEhhcm5lc3MucmVwb3J0VHlwZS5BRERfUEFHRSwgJycsIGZpbGVzW2lpXSwg
dW5kZWZpbmVkKTsKKyAgfQorICB0aGlzLnJlcG9ydEZ1bmMoVGVzdEhhcm5lc3MucmVwb3J0VHlw
ZS5SRUFEWSwgJycsIHVuZGVmaW5lZCwgdW5kZWZpbmVkKTsKK30KKworVGVzdEhhcm5lc3MucHJv
dG90eXBlLnJ1blRlc3RzID0gZnVuY3Rpb24ob3B0X29wdGlvbnMpIHsKKyAgdmFyIG9wdGlvbnMg
PSBvcHRfb3B0aW9ucyB8fCB7IH07CisgIG9wdGlvbnMuc3RhcnQgPSBvcHRpb25zLnN0YXJ0IHx8
IDA7CisgIG9wdGlvbnMuY291bnQgPSBvcHRpb25zLmNvdW50IHx8IHRoaXMuZmlsZXMubGVuZ3Ro
OworCisgIHRoaXMuaWRsZUlGcmFtZXMgPSB0aGlzLmlmcmFtZXMuc2xpY2UoMCk7CisgIHRoaXMu
cnVubmluZ1Rlc3RzID0ge307CisgIHZhciB0ZXN0c1RvUnVuID0gW107CisgIGZvciAodmFyIGlp
ID0gMDsgaWkgPCBvcHRpb25zLmNvdW50OyArK2lpKSB7CisgICAgdGVzdHNUb1J1bi5wdXNoKGlp
ICsgb3B0aW9ucy5zdGFydCk7CisgIH0KKyAgdGhpcy5udW1UZXN0c1JlbWFpbmluZyA9IG9wdGlv
bnMuY291bnQ7CisgIHRoaXMudGVzdHNUb1J1biA9IHRlc3RzVG9SdW47CisgIHRoaXMuc3RhcnRO
ZXh0VGVzdCgpOworfTsKKworVGVzdEhhcm5lc3MucHJvdG90eXBlLnNldFRpbWVvdXQgPSBmdW5j
dGlvbih0ZXN0KSB7CisgIHZhciB0aGF0ID0gdGhpczsKKyAgdGVzdC50aW1lb3V0SWQgPSB0aGlz
LndpbmRvdy5zZXRUaW1lb3V0KGZ1bmN0aW9uKCkgeworICAgICAgdGhhdC50aW1lb3V0KHRlc3Qp
OworICAgIH0sIHRoaXMudGltZW91dERlbGF5KTsKK307CisKK1Rlc3RIYXJuZXNzLnByb3RvdHlw
ZS5jbGVhclRpbWVvdXQgPSBmdW5jdGlvbih0ZXN0KSB7CisgIHRoaXMud2luZG93LmNsZWFyVGlt
ZW91dCh0ZXN0LnRpbWVvdXRJZCk7Cit9OworCitUZXN0SGFybmVzcy5wcm90b3R5cGUuc3RhcnRO
ZXh0VGVzdCA9IGZ1bmN0aW9uKCkgeworICBpZiAodGhpcy5udW1UZXN0c1JlbWFpbmluZyA9PSAw
KSB7CisgICAgbG9nKCJkb25lIik7CisgICAgdGhpcy5yZXBvcnRGdW5jKFRlc3RIYXJuZXNzLnJl
cG9ydFR5cGUuRklOSVNIRURfQUxMX1RFU1RTLAorICAgICAgICAgICAgICAgICAgICAnJywgJycs
IHRydWUpOworICB9IGVsc2UgeworICAgIHdoaWxlICh0aGlzLnRlc3RzVG9SdW4ubGVuZ3RoID4g
MCAmJiB0aGlzLmlkbGVJRnJhbWVzLmxlbmd0aCA+IDApIHsKKyAgICAgIHZhciB0ZXN0SWQgPSB0
aGlzLnRlc3RzVG9SdW4uc2hpZnQoKTsKKyAgICAgIHZhciBpZnJhbWUgPSB0aGlzLmlkbGVJRnJh
bWVzLnNoaWZ0KCk7CisgICAgICB0aGlzLnN0YXJ0VGVzdChpZnJhbWUsIHRoaXMuZmlsZXNbdGVz
dElkXSwgdGhpcy53ZWJnbFZlcnNpb24pOworICAgIH0KKyAgfQorfTsKKworVGVzdEhhcm5lc3Mu
cHJvdG90eXBlLnN0YXJ0VGVzdCA9IGZ1bmN0aW9uKGlmcmFtZSwgdGVzdEZpbGUsIHdlYmdsVmVy
c2lvbikgeworICB2YXIgdGVzdCA9IHsKKyAgICBpZnJhbWU6IGlmcmFtZSwKKyAgICB0ZXN0Rmls
ZTogdGVzdEZpbGUKKyAgfTsKKyAgdmFyIHVybCA9IHRlc3RGaWxlLnVybDsKKyAgdGhpcy5ydW5u
aW5nVGVzdHNbdXJsXSA9IHRlc3Q7CisgIGxvZygibG9hZGluZzogIiArIHVybCk7CisgIGlmICh0
aGlzLnJlcG9ydEZ1bmMoVGVzdEhhcm5lc3MucmVwb3J0VHlwZS5TVEFSVF9QQUdFLCB1cmwsIHVy
bCwgdW5kZWZpbmVkKSkgeworICAgIGlmcmFtZS5zcmMgPSBnZXRVUkxXaXRoT3B0aW9ucyh1cmws
IHsKKyAgICAgICJ3ZWJnbFZlcnNpb24iOiB3ZWJnbFZlcnNpb24sCisgICAgICAiZHVtcFNoYWRl
cnMiOiB0aGlzLmR1bXBTaGFkZXJzLAorICAgICAgInF1aWV0IjogdGhpcy5xdWlldAorICAgIH0p
OworICAgIHRoaXMuc2V0VGltZW91dCh0ZXN0KTsKKyAgfSBlbHNlIHsKKyAgICB0aGlzLnJlcG9y
dFJlc3VsdHModXJsLCAhIXRoaXMuYWxsb3dTa2lwLCAic2tpcHBlZCIsIHRydWUpOworICAgIHRo
aXMubm90aWZ5RmluaXNoZWQodXJsKTsKKyAgfQorfTsKKworVGVzdEhhcm5lc3MucHJvdG90eXBl
LmdldFRlc3QgPSBmdW5jdGlvbih1cmwpIHsKKyAgdmFyIHRlc3QgPSB0aGlzLnJ1bm5pbmdUZXN0
c1tGaWx0ZXJVUkwodXJsKV07CisgIGlmICghdGVzdCkgeworICAgIHRocm93KCJ1bmtub3duIHRl
c3Q6IiArIHVybCk7CisgIH0KKyAgcmV0dXJuIHRlc3Q7Cit9OworCitUZXN0SGFybmVzcy5wcm90
b3R5cGUucmVwb3J0UmVzdWx0cyA9IGZ1bmN0aW9uKHVybCwgc3VjY2VzcywgbXNnLCBza2lwcGVk
KSB7CisgIHVybCA9IEZpbHRlclVSTCh1cmwpOworICB2YXIgdGVzdCA9IHRoaXMuZ2V0VGVzdCh1
cmwpOworICB0aGlzLmNsZWFyVGltZW91dCh0ZXN0KTsKKyAgbG9nKChzdWNjZXNzID8gIlBBU1Mi
IDogIkZBSUwiKSArICI6ICIgKyBtc2cpOworICB0aGlzLnJlcG9ydEZ1bmMoVGVzdEhhcm5lc3Mu
cmVwb3J0VHlwZS5URVNUX1JFU1VMVCwgdXJsLCBtc2csIHN1Y2Nlc3MsIHNraXBwZWQpOworICAv
LyBGb3IgZWFjaCByZXN1bHQgd2UgZ2V0LCByZXNldCB0aGUgdGltZW91dAorICB0aGlzLnNldFRp
bWVvdXQodGVzdCk7Cit9OworCitUZXN0SGFybmVzcy5wcm90b3R5cGUuZGVxdWVUZXN0ID0gZnVu
Y3Rpb24odGVzdCkgeworICB0aGlzLmNsZWFyVGltZW91dCh0ZXN0KTsKKyAgdGhpcy5pZGxlSUZy
YW1lcy5wdXNoKHRlc3QuaWZyYW1lKTsKKyAgZGVsZXRlIHRoaXMucnVubmluZ1Rlc3RzW3Rlc3Qu
dGVzdEZpbGUudXJsXTsKKyAgLS10aGlzLm51bVRlc3RzUmVtYWluaW5nOworfQorCitUZXN0SGFy
bmVzcy5wcm90b3R5cGUubm90aWZ5RmluaXNoZWQgPSBmdW5jdGlvbih1cmwpIHsKKyAgdXJsID0g
RmlsdGVyVVJMKHVybCk7CisgIHZhciB0ZXN0ID0gdGhpcy5nZXRUZXN0KHVybCk7CisgIGxvZyh1
cmwgKyAiOiBmaW5pc2hlZCIpOworICB0aGlzLmRlcXVlVGVzdCh0ZXN0KTsKKyAgdGhpcy5yZXBv
cnRGdW5jKFRlc3RIYXJuZXNzLnJlcG9ydFR5cGUuRklOSVNIX1BBR0UsIHVybCwgdXJsLCB0cnVl
KTsKKyAgdGhpcy5zdGFydE5leHRUZXN0KCk7Cit9OworCitUZXN0SGFybmVzcy5wcm90b3R5cGUu
dGltZW91dCA9IGZ1bmN0aW9uKHRlc3QpIHsKKyAgdGhpcy5kZXF1ZVRlc3QodGVzdCk7CisgIHZh
ciB1cmwgPSB0ZXN0LnRlc3RGaWxlLnVybDsKKyAgbG9nKHVybCArICI6IHRpbWVvdXQiKTsKKyAg
dGhpcy5yZXBvcnRGdW5jKFRlc3RIYXJuZXNzLnJlcG9ydFR5cGUuRklOSVNIX1BBR0UsIHVybCwg
dXJsLCB1bmRlZmluZWQpOworICB0aGlzLnN0YXJ0TmV4dFRlc3QoKTsKK307CisKK1Rlc3RIYXJu
ZXNzLnByb3RvdHlwZS5zZXRUaW1lb3V0RGVsYXkgPSBmdW5jdGlvbih4KSB7CisgIHRoaXMudGlt
ZW91dERlbGF5ID0geDsKK307CisKK3JldHVybiB7CisgICAgJ1Rlc3RIYXJuZXNzJzogVGVzdEhh
cm5lc3MsCisgICAgJ2dldE1ham9yVmVyc2lvbic6IGdldE1ham9yVmVyc2lvbiwKKyAgICAnZ2V0
VVJMV2l0aE9wdGlvbnMnOiBnZXRVUkxXaXRoT3B0aW9ucworICB9OworCit9KCk7CisKKworCmRp
ZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJnbC9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9q
cy93ZWJnbC10ZXN0LXV0aWxzLmpzIGIvTGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3dlYmds
X3Rlc3RfZmlsZXMvanMvd2ViZ2wtdGVzdC11dGlscy5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5jYTYwNWRmYjYw
MWFhZDg2NzBmMjM5ODdlNzQzYmYyN2JhZGRjNjk4Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvanMvd2ViZ2wtdGVzdC11dGls
cy5qcwpAQCAtMCwwICsxLDM1NDAgQEAKKy8qCitDb3B5cmlnaHQgKGMpIDIwMTkgVGhlIEtocm9u
b3MgR3JvdXAgSW5jLgorVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4g
TUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKK2ZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBm
aWxlLgorKi8KK3ZhciBXZWJHTFRlc3RVdGlscyA9IChmdW5jdGlvbigpIHsKKyJ1c2Ugc3RyaWN0
IjsKKworLyoqCisgKiBXcmFwcGVkIGxvZ2dpbmcgZnVuY3Rpb24uCisgKiBAcGFyYW0ge3N0cmlu
Z30gbXNnIFRoZSBtZXNzYWdlIHRvIGxvZy4KKyAqLwordmFyIGxvZyA9IGZ1bmN0aW9uKG1zZykg
eworICBidWZmZXJlZExvZ1RvQ29uc29sZShtc2cpOworfTsKKworLyoqCisgKiBXcmFwcGVkIGxv
Z2dpbmcgZnVuY3Rpb24uCisgKiBAcGFyYW0ge3N0cmluZ30gbXNnIFRoZSBtZXNzYWdlIHRvIGxv
Zy4KKyAqLwordmFyIGVycm9yID0gZnVuY3Rpb24obXNnKSB7CisgIC8vIEZvciB0aGUgdGltZSBi
ZWluZywgZGl2ZXJ0aW5nIHRoaXMgdG8gd2luZG93LmNvbnNvbGUubG9nIHJhdGhlcgorICAvLyB0
aGFuIHdpbmRvdy5jb25zb2xlLmVycm9yLiBJZiBhbnlvbmUgY2FyZXMgZW5vdWdoIHRoZXkgY2Fu
CisgIC8vIGdlbmVyYWxpemUgdGhlIG1lY2hhbmlzbSBpbiBqcy10ZXN0LXByZS5qcy4KKyAgbG9n
KG1zZyk7Cit9OworCisvKioKKyAqIFR1cm4gb2ZmIGFsbCBsb2dnaW5nLgorICovCit2YXIgbG9n
Z2luZ09mZiA9IGZ1bmN0aW9uKCkgeworICBsb2cgPSBmdW5jdGlvbigpIHt9OworICBlcnJvciA9
IGZ1bmN0aW9uKCkge307Cit9OworCitjb25zdCBFTlVNX05BTUVfUkVHRVggPSBSZWdFeHAoJ1tB
LVpdW0EtWjAtOV9dKicpOworY29uc3QgRU5VTV9OQU1FX0JZX1ZBTFVFID0ge307Citjb25zdCBF
TlVNX05BTUVfUFJPVE9UWVBFUyA9IG5ldyBNYXAoKTsKKworLyoqCisgKiBDb252ZXJ0cyBhIFdl
YkdMIGVudW0gdG8gYSBzdHJpbmcuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9
IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtudW1iZXJ9
IHZhbHVlIFRoZSBlbnVtIHZhbHVlLgorICogQHJldHVybiB7c3RyaW5nfSBUaGUgZW51bSBhcyBh
IHN0cmluZy4KKyAqLwordmFyIGdsRW51bVRvU3RyaW5nID0gZnVuY3Rpb24oZ2xPckV4dCwgdmFs
dWUpIHsKKyAgaWYgKHZhbHVlID09PSB1bmRlZmluZWQpCisgICAgdGhyb3cgbmV3IEVycm9yKCdn
bEVudW1Ub1N0cmluZzogYHZhbHVlYCBtdXN0IG5vdCBiZSB1bmRlZmluZWQnKTsKKworICBjb25z
dCBwcm90byA9IGdsT3JFeHQuX19wcm90b19fOworICBpZiAoIUVOVU1fTkFNRV9QUk9UT1RZUEVT
Lmhhcyhwcm90bykpIHsKKyAgICBFTlVNX05BTUVfUFJPVE9UWVBFUy5zZXQocHJvdG8sIHRydWUp
OworCisgICAgZm9yIChjb25zdCBrIGluIHByb3RvKSB7CisgICAgICBpZiAoIUVOVU1fTkFNRV9S
RUdFWC50ZXN0KGspKSBjb250aW51ZTsKKworICAgICAgY29uc3QgdiA9IGdsT3JFeHRba107Cisg
ICAgICBpZiAoRU5VTV9OQU1FX0JZX1ZBTFVFW3ZdID09PSB1bmRlZmluZWQpIHsKKyAgICAgICAg
RU5VTV9OQU1FX0JZX1ZBTFVFW3ZdID0gazsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIEVOVU1f
TkFNRV9CWV9WQUxVRVt2XSArPSAnLycgKyBrOworICAgICAgfQorICAgIH0KKyAgfQorCisgIGNv
bnN0IGtleSA9IEVOVU1fTkFNRV9CWV9WQUxVRVt2YWx1ZV07CisgIGlmIChrZXkgIT09IHVuZGVm
aW5lZCkgcmV0dXJuIGtleTsKKworICByZXR1cm4gIjB4IiArIE51bWJlcih2YWx1ZSkudG9TdHJp
bmcoMTYpOworfTsKKwordmFyIGxhc3RFcnJvciA9ICIiOworCisvKioKKyAqIFJldHVybnMgdGhl
IGxhc3QgY29tcGlsZXIvbGlua2VyIGVycm9yLgorICogQHJldHVybiB7c3RyaW5nfSBUaGUgbGFz
dCBjb21waWxlci9saW5rZXIgZXJyb3IuCisgKi8KK3ZhciBnZXRMYXN0RXJyb3IgPSBmdW5jdGlv
bigpIHsKKyAgcmV0dXJuIGxhc3RFcnJvcjsKK307CisKKy8qKgorICogV2hldGhlciBhIGhheXN0
YWNrIGVuZHMgd2l0aCBhIG5lZWRsZS4KKyAqIEBwYXJhbSB7c3RyaW5nfSBoYXlzdGFjayBTdHJp
bmcgdG8gc2VhcmNoCisgKiBAcGFyYW0ge3N0cmluZ30gbmVlZGxlIFN0cmluZyB0byBzZWFyY2gg
Zm9yLgorICogQHBhcmFtIHtib29sZWFufSBUcnVlIGlmIGhheXN0YWNrIGVuZHMgd2l0aCBuZWVk
bGUuCisgKi8KK3ZhciBlbmRzV2l0aCA9IGZ1bmN0aW9uKGhheXN0YWNrLCBuZWVkbGUpIHsKKyAg
cmV0dXJuIGhheXN0YWNrLnN1YnN0cihoYXlzdGFjay5sZW5ndGggLSBuZWVkbGUubGVuZ3RoKSA9
PT0gbmVlZGxlOworfTsKKworLyoqCisgKiBXaGV0aGVyIGEgaGF5c3RhY2sgc3RhcnRzIHdpdGgg
YSBuZWVkbGUuCisgKiBAcGFyYW0ge3N0cmluZ30gaGF5c3RhY2sgU3RyaW5nIHRvIHNlYXJjaAor
ICogQHBhcmFtIHtzdHJpbmd9IG5lZWRsZSBTdHJpbmcgdG8gc2VhcmNoIGZvci4KKyAqIEBwYXJh
bSB7Ym9vbGVhbn0gVHJ1ZSBpZiBoYXlzdGFjayBzdGFydHMgd2l0aCBuZWVkbGUuCisgKi8KK3Zh
ciBzdGFydHNXaXRoID0gZnVuY3Rpb24oaGF5c3RhY2ssIG5lZWRsZSkgeworICByZXR1cm4gaGF5
c3RhY2suc3Vic3RyKDAsIG5lZWRsZS5sZW5ndGgpID09PSBuZWVkbGU7Cit9OworCisvKioKKyAq
IEEgdmVydGV4IHNoYWRlciBmb3IgYSBzaW5nbGUgdGV4dHVyZS4KKyAqIEB0eXBlIHtzdHJpbmd9
CisgKi8KK3ZhciBzaW1wbGVUZXh0dXJlVmVydGV4U2hhZGVyID0gWworICAnYXR0cmlidXRlIHZl
YzQgdlBvc2l0aW9uOycsCisgICdhdHRyaWJ1dGUgdmVjMiB0ZXhDb29yZDA7JywKKyAgJ3Zhcnlp
bmcgdmVjMiB0ZXhDb29yZDsnLAorICAndm9pZCBtYWluKCkgeycsCisgICcgICAgZ2xfUG9zaXRp
b24gPSB2UG9zaXRpb247JywKKyAgJyAgICB0ZXhDb29yZCA9IHRleENvb3JkMDsnLAorICAnfSdd
LmpvaW4oJ1xuJyk7CisKKy8qKgorICogQSB2ZXJ0ZXggc2hhZGVyIGZvciBhIHNpbmdsZSB0ZXh0
dXJlLgorICogQHR5cGUge3N0cmluZ30KKyAqLwordmFyIHNpbXBsZVRleHR1cmVWZXJ0ZXhTaGFk
ZXJFU1NMMzAwID0gWworICAnI3ZlcnNpb24gMzAwIGVzJywKKyAgJ2xheW91dChsb2NhdGlvbj0w
KSBpbiB2ZWM0IHZQb3NpdGlvbjsnLAorICAnbGF5b3V0KGxvY2F0aW9uPTEpIGluIHZlYzIgdGV4
Q29vcmQwOycsCisgICdvdXQgdmVjMiB0ZXhDb29yZDsnLAorICAndm9pZCBtYWluKCkgeycsCisg
ICcgICAgZ2xfUG9zaXRpb24gPSB2UG9zaXRpb247JywKKyAgJyAgICB0ZXhDb29yZCA9IHRleENv
b3JkMDsnLAorICAnfSddLmpvaW4oJ1xuJyk7CisKKy8qKgorICogQSBmcmFnbWVudCBzaGFkZXIg
Zm9yIGEgc2luZ2xlIHRleHR1cmUuCisgKiBAdHlwZSB7c3RyaW5nfQorICovCit2YXIgc2ltcGxl
VGV4dHVyZUZyYWdtZW50U2hhZGVyID0gWworICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7JywK
KyAgJ3VuaWZvcm0gc2FtcGxlcjJEIHRleDsnLAorICAndmFyeWluZyB2ZWMyIHRleENvb3JkOycs
CisgICd2b2lkIG1haW4oKSB7JywKKyAgJyAgICBnbF9GcmFnRGF0YVswXSA9IHRleHR1cmUyRCh0
ZXgsIHRleENvb3JkKTsnLAorICAnfSddLmpvaW4oJ1xuJyk7CisKKy8qKgorICogQSBmcmFnbWVu
dCBzaGFkZXIgZm9yIGEgc2luZ2xlIHRleHR1cmUuCisgKiBAdHlwZSB7c3RyaW5nfQorICovCit2
YXIgc2ltcGxlVGV4dHVyZUZyYWdtZW50U2hhZGVyRVNTTDMwMCA9IFsKKyAgJyN2ZXJzaW9uIDMw
MCBlcycsCisgICdwcmVjaXNpb24gaGlnaHAgZmxvYXQ7JywKKyAgJ3VuaWZvcm0gaGlnaHAgc2Ft
cGxlcjJEIHRleDsnLAorICAnaW4gdmVjMiB0ZXhDb29yZDsnLAorICAnb3V0IHZlYzQgb3V0X2Nv
bG9yOycsCisgICd2b2lkIG1haW4oKSB7JywKKyAgJyAgICBvdXRfY29sb3IgPSB0ZXh0dXJlKHRl
eCwgdGV4Q29vcmQpOycsCisgICd9J10uam9pbignXG4nKTsKKworLyoqCisgKiBBIGZyYWdtZW50
IHNoYWRlciBmb3IgYSBzaW5nbGUgdGV4dHVyZSB3aXRoIGhpZ2ggcHJlY2lzaW9uLgorICogQHR5
cGUge3N0cmluZ30KKyAqLwordmFyIHNpbXBsZUhpZ2hQcmVjaXNpb25UZXh0dXJlRnJhZ21lbnRT
aGFkZXIgPSBbCisgICdwcmVjaXNpb24gaGlnaHAgZmxvYXQ7JywKKyAgJ3VuaWZvcm0gaGlnaHAg
c2FtcGxlcjJEIHRleDsnLAorICAndmFyeWluZyB2ZWMyIHRleENvb3JkOycsCisgICd2b2lkIG1h
aW4oKSB7JywKKyAgJyAgICBnbF9GcmFnRGF0YVswXSA9IHRleHR1cmUyRCh0ZXgsIHRleENvb3Jk
KTsnLAorICAnfSddLmpvaW4oJ1xuJyk7CisKKy8qKgorICogQSBmcmFnbWVudCBzaGFkZXIgZm9y
IGEgc2luZ2xlIGN1YmUgbWFwIHRleHR1cmUuCisgKiBAdHlwZSB7c3RyaW5nfQorICovCit2YXIg
c2ltcGxlQ3ViZU1hcFRleHR1cmVGcmFnbWVudFNoYWRlciA9IFsKKyAgJ3ByZWNpc2lvbiBtZWRp
dW1wIGZsb2F0OycsCisgICd1bmlmb3JtIHNhbXBsZXJDdWJlIHRleDsnLAorICAndW5pZm9ybSBo
aWdocCBpbnQgZmFjZTsnLAorICAndmFyeWluZyB2ZWMyIHRleENvb3JkOycsCisgICd2b2lkIG1h
aW4oKSB7JywKKyAgLy8gVHJhbnNmb3JtIFswLCAxXSAtPiBbLTEsIDFdCisgICcgICAgdmVjMiB0
ZXhDMiA9ICh0ZXhDb29yZCAqIDIuKSAtIDEuOycsCisgIC8vIFRyYW5zZm9ybSAyZCB0ZXggY29v
cmQuIHRvIGVhY2ggZmFjZSBvZiBURVhUVVJFX0NVQkVfTUFQIGNvb3JkLgorICAnICAgIHZlYzMg
dGV4Q3ViZSA9IHZlYzMoMC4sIDAuLCAwLik7JywKKyAgJyAgICBpZiAoZmFjZSA9PSAzNDA2OSkg
eycsICAgICAgICAgLy8gVEVYVFVSRV9DVUJFX01BUF9QT1NJVElWRV9YCisgICcgICAgICAgIHRl
eEN1YmUgPSB2ZWMzKDEuLCAtdGV4QzIueSwgLXRleEMyLngpOycsCisgICcgICAgfSBlbHNlIGlm
IChmYWNlID09IDM0MDcwKSB7JywgIC8vIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWAorICAn
ICAgICAgICB0ZXhDdWJlID0gdmVjMygtMS4sIC10ZXhDMi55LCB0ZXhDMi54KTsnLAorICAnICAg
IH0gZWxzZSBpZiAoZmFjZSA9PSAzNDA3MSkgeycsICAvLyBURVhUVVJFX0NVQkVfTUFQX1BPU0lU
SVZFX1kKKyAgJyAgICAgICAgdGV4Q3ViZSA9IHZlYzModGV4QzIueCwgMS4sIHRleEMyLnkpOycs
CisgICcgICAgfSBlbHNlIGlmIChmYWNlID09IDM0MDcyKSB7JywgIC8vIFRFWFRVUkVfQ1VCRV9N
QVBfTkVHQVRJVkVfWQorICAnICAgICAgICB0ZXhDdWJlID0gdmVjMyh0ZXhDMi54LCAtMS4sIC10
ZXhDMi55KTsnLAorICAnICAgIH0gZWxzZSBpZiAoZmFjZSA9PSAzNDA3MykgeycsICAvLyBURVhU
VVJFX0NVQkVfTUFQX1BPU0lUSVZFX1oKKyAgJyAgICAgICAgdGV4Q3ViZSA9IHZlYzModGV4QzIu
eCwgLXRleEMyLnksIDEuKTsnLAorICAnICAgIH0gZWxzZSBpZiAoZmFjZSA9PSAzNDA3NCkgeycs
ICAvLyBURVhUVVJFX0NVQkVfTUFQX05FR0FUSVZFX1oKKyAgJyAgICAgICAgdGV4Q3ViZSA9IHZl
YzMoLXRleEMyLngsIC10ZXhDMi55LCAtMS4pOycsCisgICcgICAgfScsCisgICcgICAgZ2xfRnJh
Z0RhdGFbMF0gPSB0ZXh0dXJlQ3ViZSh0ZXgsIHRleEN1YmUpOycsCisgICd9J10uam9pbignXG4n
KTsKKworLyoqCisgKiBBIHZlcnRleCBzaGFkZXIgZm9yIGEgc2luZ2xlIHRleHR1cmUuCisgKiBA
dHlwZSB7c3RyaW5nfQorICovCit2YXIgbm9UZXhDb29yZFRleHR1cmVWZXJ0ZXhTaGFkZXIgPSBb
CisgICdhdHRyaWJ1dGUgdmVjNCB2UG9zaXRpb247JywKKyAgJ3ZhcnlpbmcgdmVjMiB0ZXhDb29y
ZDsnLAorICAndm9pZCBtYWluKCkgeycsCisgICcgICAgZ2xfUG9zaXRpb24gPSB2UG9zaXRpb247
JywKKyAgJyAgICB0ZXhDb29yZCA9IHZQb3NpdGlvbi54eSAqIDAuNSArIDAuNTsnLAorICAnfSdd
LmpvaW4oJ1xuJyk7CisKKy8qKgorICogQSB2ZXJ0ZXggc2hhZGVyIGZvciBhIHVuaWZvcm0gY29s
b3IuCisgKiBAdHlwZSB7c3RyaW5nfQorICovCit2YXIgc2ltcGxlVmVydGV4U2hhZGVyID0gWwor
ICAnYXR0cmlidXRlIHZlYzQgdlBvc2l0aW9uOycsCisgICd2b2lkIG1haW4oKSB7JywKKyAgJyAg
ICBnbF9Qb3NpdGlvbiA9IHZQb3NpdGlvbjsnLAorICAnfSddLmpvaW4oJ1xuJyk7CisKKy8qKgor
ICogQSB2ZXJ0ZXggc2hhZGVyIGZvciBhIHVuaWZvcm0gY29sb3IuCisgKiBAdHlwZSB7c3RyaW5n
fQorICovCit2YXIgc2ltcGxlVmVydGV4U2hhZGVyRVNTTDMwMCA9IFsKKyAgJyN2ZXJzaW9uIDMw
MCBlcycsCisgICdpbiB2ZWM0IHZQb3NpdGlvbjsnLAorICAndm9pZCBtYWluKCkgeycsCisgICcg
ICAgZ2xfUG9zaXRpb24gPSB2UG9zaXRpb247JywKKyAgJ30nXS5qb2luKCdcbicpOworCisvKioK
KyAqIEEgZnJhZ21lbnQgc2hhZGVyIGZvciBhIHVuaWZvcm0gY29sb3IuCisgKiBAdHlwZSB7c3Ry
aW5nfQorICovCit2YXIgc2ltcGxlQ29sb3JGcmFnbWVudFNoYWRlciA9IFsKKyAgJ3ByZWNpc2lv
biBtZWRpdW1wIGZsb2F0OycsCisgICd1bmlmb3JtIHZlYzQgdV9jb2xvcjsnLAorICAndm9pZCBt
YWluKCkgeycsCisgICcgICAgZ2xfRnJhZ0RhdGFbMF0gPSB1X2NvbG9yOycsCisgICd9J10uam9p
bignXG4nKTsKKworLyoqCisgKiBBIGZyYWdtZW50IHNoYWRlciBmb3IgYSB1bmlmb3JtIGNvbG9y
LgorICogQHR5cGUge3N0cmluZ30KKyAqLwordmFyIHNpbXBsZUNvbG9yRnJhZ21lbnRTaGFkZXJF
U1NMMzAwID0gWworICAnI3ZlcnNpb24gMzAwIGVzJywKKyAgJ3ByZWNpc2lvbiBtZWRpdW1wIGZs
b2F0OycsCisgICdvdXQgdmVjNCBvdXRfY29sb3I7JywKKyAgJ3VuaWZvcm0gdmVjNCB1X2NvbG9y
OycsCisgICd2b2lkIG1haW4oKSB7JywKKyAgJyAgICBvdXRfY29sb3IgPSB1X2NvbG9yOycsCisg
ICd9J10uam9pbignXG4nKTsKKworLyoqCisgKiBBIHZlcnRleCBzaGFkZXIgZm9yIHZlcnRleCBj
b2xvcnMuCisgKiBAdHlwZSB7c3RyaW5nfQorICovCit2YXIgc2ltcGxlVmVydGV4Q29sb3JWZXJ0
ZXhTaGFkZXIgPSBbCisgICdhdHRyaWJ1dGUgdmVjNCB2UG9zaXRpb247JywKKyAgJ2F0dHJpYnV0
ZSB2ZWM0IGFfY29sb3I7JywKKyAgJ3ZhcnlpbmcgdmVjNCB2X2NvbG9yOycsCisgICd2b2lkIG1h
aW4oKSB7JywKKyAgJyAgICBnbF9Qb3NpdGlvbiA9IHZQb3NpdGlvbjsnLAorICAnICAgIHZfY29s
b3IgPSBhX2NvbG9yOycsCisgICd9J10uam9pbignXG4nKTsKKworLyoqCisgKiBBIGZyYWdtZW50
IHNoYWRlciBmb3IgdmVydGV4IGNvbG9ycy4KKyAqIEB0eXBlIHtzdHJpbmd9CisgKi8KK3ZhciBz
aW1wbGVWZXJ0ZXhDb2xvckZyYWdtZW50U2hhZGVyID0gWworICAncHJlY2lzaW9uIG1lZGl1bXAg
ZmxvYXQ7JywKKyAgJ3ZhcnlpbmcgdmVjNCB2X2NvbG9yOycsCisgICd2b2lkIG1haW4oKSB7JywK
KyAgJyAgICBnbF9GcmFnRGF0YVswXSA9IHZfY29sb3I7JywKKyAgJ30nXS5qb2luKCdcbicpOwor
CisvKioKKyAqIENyZWF0ZXMgYSBwcm9ncmFtLCBhdHRhY2hlcyBzaGFkZXJzLCBiaW5kcyBhdHRy
aWIgbG9jYXRpb25zLCBsaW5rcyB0aGUKKyAqIHByb2dyYW0gYW5kIGNhbGxzIHVzZVByb2dyYW0u
CisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHshQXJyYXkuPCFXZWJHTFNoYWRlcnxzdHJpbmc+
fSBzaGFkZXJzIFRoZSBzaGFkZXJzIHRvCisgKiAgICAgICAgYXR0YWNoLCBvciB0aGUgc291cmNl
LCBvciB0aGUgaWQgb2YgYSBzY3JpcHQgdG8gZ2V0CisgKiAgICAgICAgdGhlIHNvdXJjZSBmcm9t
LgorICogQHBhcmFtIHshQXJyYXkuPHN0cmluZz59IG9wdF9hdHRyaWJzIFRoZSBhdHRyaWJzIG5h
bWVzLgorICogQHBhcmFtIHshQXJyYXkuPG51bWJlcj59IG9wdF9sb2NhdGlvbnMgVGhlIGxvY2F0
aW9ucyBmb3IgdGhlIGF0dHJpYnMuCisgKiBAcGFyYW0ge2Jvb2xlYW59IG9wdF9sb2dTaGFkZXJz
IFdoZXRoZXIgdG8gbG9nIHNoYWRlciBzb3VyY2UuCisgKi8KK3ZhciBzZXR1cFByb2dyYW0gPSBm
dW5jdGlvbigKKyAgICBnbCwgc2hhZGVycywgb3B0X2F0dHJpYnMsIG9wdF9sb2NhdGlvbnMsIG9w
dF9sb2dTaGFkZXJzKSB7CisgIHZhciByZWFsU2hhZGVycyA9IFtdOworICB2YXIgcHJvZ3JhbSA9
IGdsLmNyZWF0ZVByb2dyYW0oKTsKKyAgdmFyIHNoYWRlckNvdW50ID0gMDsKKyAgZm9yICh2YXIg
aWkgPSAwOyBpaSA8IHNoYWRlcnMubGVuZ3RoOyArK2lpKSB7CisgICAgdmFyIHNoYWRlciA9IHNo
YWRlcnNbaWldOworICAgIHZhciBzaGFkZXJUeXBlID0gdW5kZWZpbmVkOworICAgIGlmICh0eXBl
b2Ygc2hhZGVyID09ICdzdHJpbmcnKSB7CisgICAgICB2YXIgZWxlbWVudCA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKHNoYWRlcik7CisgICAgICBpZiAoZWxlbWVudCkgeworICAgICAgICBpZiAo
ZWxlbWVudC50eXBlICE9ICJ4LXNoYWRlci94LXZlcnRleCIgJiYgZWxlbWVudC50eXBlICE9ICJ4
LXNoYWRlci94LWZyYWdtZW50IikKKyAgICAgICAgICBzaGFkZXJUeXBlID0gaWkgPyBnbC5GUkFH
TUVOVF9TSEFERVIgOiBnbC5WRVJURVhfU0hBREVSOworICAgICAgICBzaGFkZXIgPSBsb2FkU2hh
ZGVyRnJvbVNjcmlwdChnbCwgc2hhZGVyLCBzaGFkZXJUeXBlLCB1bmRlZmluZWQsIG9wdF9sb2dT
aGFkZXJzKTsKKyAgICAgIH0gZWxzZSBpZiAoZW5kc1dpdGgoc2hhZGVyLCAiLnZlcnQiKSkgewor
ICAgICAgICBzaGFkZXIgPSBsb2FkU2hhZGVyRnJvbUZpbGUoZ2wsIHNoYWRlciwgZ2wuVkVSVEVY
X1NIQURFUiwgdW5kZWZpbmVkLCBvcHRfbG9nU2hhZGVycyk7CisgICAgICB9IGVsc2UgaWYgKGVu
ZHNXaXRoKHNoYWRlciwgIi5mcmFnIikpIHsKKyAgICAgICAgc2hhZGVyID0gbG9hZFNoYWRlckZy
b21GaWxlKGdsLCBzaGFkZXIsIGdsLkZSQUdNRU5UX1NIQURFUiwgdW5kZWZpbmVkLCBvcHRfbG9n
U2hhZGVycyk7CisgICAgICB9IGVsc2UgeworICAgICAgICBzaGFkZXIgPSBsb2FkU2hhZGVyKGds
LCBzaGFkZXIsIGlpID8gZ2wuRlJBR01FTlRfU0hBREVSIDogZ2wuVkVSVEVYX1NIQURFUiwgdW5k
ZWZpbmVkLCBvcHRfbG9nU2hhZGVycyk7CisgICAgICB9CisgICAgfSBlbHNlIGlmIChvcHRfbG9n
U2hhZGVycykgeworICAgICAgdGhyb3cgJ1NoYWRlciBzb3VyY2UgbG9nZ2luZyByZXF1ZXN0ZWQg
YnV0IG5vIHNoYWRlciBzb3VyY2UgcHJvdmlkZWQnOworICAgIH0KKyAgICBpZiAoc2hhZGVyKSB7
CisgICAgICArK3NoYWRlckNvdW50OworICAgICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIHNo
YWRlcik7CisgICAgfQorICB9CisgIGlmIChzaGFkZXJDb3VudCAhPSAyKSB7CisgICAgZXJyb3Io
IkVycm9yIGluIGNvbXBpbGluZyBzaGFkZXIiKTsKKyAgICByZXR1cm4gbnVsbDsKKyAgfQorICBp
ZiAob3B0X2F0dHJpYnMpIHsKKyAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgb3B0X2F0dHJpYnMu
bGVuZ3RoOyArK2lpKSB7CisgICAgICBnbC5iaW5kQXR0cmliTG9jYXRpb24oCisgICAgICAgICAg
cHJvZ3JhbSwKKyAgICAgICAgICBvcHRfbG9jYXRpb25zID8gb3B0X2xvY2F0aW9uc1tpaV0gOiBp
aSwKKyAgICAgICAgICBvcHRfYXR0cmlic1tpaV0pOworICAgIH0KKyAgfQorICBnbC5saW5rUHJv
Z3JhbShwcm9ncmFtKTsKKworICAvLyBDaGVjayB0aGUgbGluayBzdGF0dXMKKyAgdmFyIGxpbmtl
ZCA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpOworICBp
ZiAoIWxpbmtlZCkgeworICAgICAgLy8gc29tZXRoaW5nIHdlbnQgd3Jvbmcgd2l0aCB0aGUgbGlu
aworICAgICAgbGFzdEVycm9yID0gZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cgKHByb2dyYW0pOworICAg
ICAgZXJyb3IoIkVycm9yIGluIHByb2dyYW0gbGlua2luZzoiICsgbGFzdEVycm9yKTsKKworICAg
ICAgZ2wuZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKKyAgICAgIHJldHVybiBudWxsOworICB9CisK
KyAgZ2wudXNlUHJvZ3JhbShwcm9ncmFtKTsKKyAgcmV0dXJuIHByb2dyYW07Cit9OworCisvKioK
KyAqIENyZWF0ZXMgYSBwcm9ncmFtLCBhdHRhY2hlcyBzaGFkZXIsIHNldHMgdXAgdHJhc25mb3Jt
IGZlZWRiYWNrIHZhcnlpbmdzLAorICogYmluZHMgYXR0cmliIGxvY2F0aW9ucywgbGlua3MgdGhl
IHByb2dyYW0gYW5kIGNhbGxzIHVzZVByb2dyYW0uCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmlu
Z0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFt
IHshQXJyYXkuPCFXZWJHTFNoYWRlcnxzdHJpbmc+fSBzaGFkZXJzIFRoZSBzaGFkZXJzIHRvCisg
KiAgICAgICAgYXR0YWNoLCBvciB0aGUgc291cmNlLCBvciB0aGUgaWQgb2YgYSBzY3JpcHQgdG8g
Z2V0CisgKiAgICAgICAgdGhlIHNvdXJjZSBmcm9tLgorICogQHBhcmFtIHshQXJyYXkuPHN0cmlu
Zz59IHZhcnlpbmdzIFRoZSB0cmFuc2Zvcm0gZmVlZGJhY2sgdmFyeWluZyBuYW1lcy4KKyAqIEBw
YXJhbSB7bnVtYmVyfSBidWZmZXJNb2RlIFRoZSBtb2RlIHVzZWQgdG8gY2FwdHVyZSB0aGUgdmFy
eWluZyB2YXJpYWJsZXMuCisgKiBAcGFyYW0geyFBcnJheS48c3RyaW5nPn0gb3B0X2F0dHJpYnMg
VGhlIGF0dHJpYnMgbmFtZXMuCisgKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gb3B0X2xvY2F0
aW9ucyBUaGUgbG9jYXRpb25zIGZvciB0aGUgYXR0cmlicy4KKyAqIEBwYXJhbSB7Ym9vbGVhbn0g
b3B0X2xvZ1NoYWRlcnMgV2hldGhlciB0byBsb2cgc2hhZGVyIHNvdXJjZS4KKyAqLwordmFyIHNl
dHVwVHJhbnNmb3JtRmVlZGJhY2tQcm9ncmFtID0gZnVuY3Rpb24oCisgICAgZ2wsIHNoYWRlcnMs
IHZhcnlpbmdzLCBidWZmZXJNb2RlLCBvcHRfYXR0cmlicywgb3B0X2xvY2F0aW9ucywgb3B0X2xv
Z1NoYWRlcnMsIG9wdF9za2lwQ29tcGlsZVN0YXR1cykgeworICB2YXIgcmVhbFNoYWRlcnMgPSBb
XTsKKyAgdmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7CisgIHZhciBzaGFkZXJDb3Vu
dCA9IDA7CisgIGZvciAodmFyIGlpID0gMDsgaWkgPCBzaGFkZXJzLmxlbmd0aDsgKytpaSkgewor
ICAgIHZhciBzaGFkZXIgPSBzaGFkZXJzW2lpXTsKKyAgICB2YXIgc2hhZGVyVHlwZSA9IHVuZGVm
aW5lZDsKKyAgICBpZiAodHlwZW9mIHNoYWRlciA9PSAnc3RyaW5nJykgeworICAgICAgdmFyIGVs
ZW1lbnQgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZChzaGFkZXIpOworICAgICAgaWYgKGVsZW1l
bnQpIHsKKyAgICAgICAgaWYgKGVsZW1lbnQudHlwZSAhPSAieC1zaGFkZXIveC12ZXJ0ZXgiICYm
IGVsZW1lbnQudHlwZSAhPSAieC1zaGFkZXIveC1mcmFnbWVudCIpCisgICAgICAgICAgc2hhZGVy
VHlwZSA9IGlpID8gZ2wuRlJBR01FTlRfU0hBREVSIDogZ2wuVkVSVEVYX1NIQURFUjsKKyAgICAg
ICAgc2hhZGVyID0gbG9hZFNoYWRlckZyb21TY3JpcHQoZ2wsIHNoYWRlciwgc2hhZGVyVHlwZSwg
dW5kZWZpbmVkLCBvcHRfbG9nU2hhZGVycywgb3B0X3NraXBDb21waWxlU3RhdHVzKTsKKyAgICAg
IH0gZWxzZSBpZiAoZW5kc1dpdGgoc2hhZGVyLCAiLnZlcnQiKSkgeworICAgICAgICBzaGFkZXIg
PSBsb2FkU2hhZGVyRnJvbUZpbGUoZ2wsIHNoYWRlciwgZ2wuVkVSVEVYX1NIQURFUiwgdW5kZWZp
bmVkLCBvcHRfbG9nU2hhZGVycywgb3B0X3NraXBDb21waWxlU3RhdHVzKTsKKyAgICAgIH0gZWxz
ZSBpZiAoZW5kc1dpdGgoc2hhZGVyLCAiLmZyYWciKSkgeworICAgICAgICBzaGFkZXIgPSBsb2Fk
U2hhZGVyRnJvbUZpbGUoZ2wsIHNoYWRlciwgZ2wuRlJBR01FTlRfU0hBREVSLCB1bmRlZmluZWQs
IG9wdF9sb2dTaGFkZXJzLCBvcHRfc2tpcENvbXBpbGVTdGF0dXMpOworICAgICAgfSBlbHNlIHsK
KyAgICAgICAgc2hhZGVyID0gbG9hZFNoYWRlcihnbCwgc2hhZGVyLCBpaSA/IGdsLkZSQUdNRU5U
X1NIQURFUiA6IGdsLlZFUlRFWF9TSEFERVIsIHVuZGVmaW5lZCwgb3B0X2xvZ1NoYWRlcnMsIHVu
ZGVmaW5lZCwgdW5kZWZpbmVkLCBvcHRfc2tpcENvbXBpbGVTdGF0dXMpOworICAgICAgfQorICAg
IH0gZWxzZSBpZiAob3B0X2xvZ1NoYWRlcnMpIHsKKyAgICAgIHRocm93ICdTaGFkZXIgc291cmNl
IGxvZ2dpbmcgcmVxdWVzdGVkIGJ1dCBubyBzaGFkZXIgc291cmNlIHByb3ZpZGVkJzsKKyAgICB9
CisgICAgaWYgKHNoYWRlcikgeworICAgICAgKytzaGFkZXJDb3VudDsKKyAgICAgIGdsLmF0dGFj
aFNoYWRlcihwcm9ncmFtLCBzaGFkZXIpOworICAgIH0KKyAgfQorICBpZiAoc2hhZGVyQ291bnQg
IT0gMikgeworICAgIGVycm9yKCJFcnJvciBpbiBjb21waWxpbmcgc2hhZGVyIik7CisgICAgcmV0
dXJuIG51bGw7CisgIH0KKworICBpZiAob3B0X2F0dHJpYnMpIHsKKyAgICBmb3IgKHZhciBpaSA9
IDA7IGlpIDwgb3B0X2F0dHJpYnMubGVuZ3RoOyArK2lpKSB7CisgICAgICBnbC5iaW5kQXR0cmli
TG9jYXRpb24oCisgICAgICAgICAgcHJvZ3JhbSwKKyAgICAgICAgICBvcHRfbG9jYXRpb25zID8g
b3B0X2xvY2F0aW9uc1tpaV0gOiBpaSwKKyAgICAgICAgICBvcHRfYXR0cmlic1tpaV0pOworICAg
IH0KKyAgfQorCisgIGdsLnRyYW5zZm9ybUZlZWRiYWNrVmFyeWluZ3MocHJvZ3JhbSwgdmFyeWlu
Z3MsIGJ1ZmZlck1vZGUpOworCisgIGdsLmxpbmtQcm9ncmFtKHByb2dyYW0pOworCisgIC8vIENo
ZWNrIHRoZSBsaW5rIHN0YXR1cworICB2YXIgbGlua2VkID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRl
cihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUyk7CisgIGlmICghbGlua2VkKSB7CisgICAgICAvLyBz
b21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIHRoZSBsaW5rCisgICAgICBsYXN0RXJyb3IgPSBnbC5n
ZXRQcm9ncmFtSW5mb0xvZyAocHJvZ3JhbSk7CisgICAgICBlcnJvcigiRXJyb3IgaW4gcHJvZ3Jh
bSBsaW5raW5nOiIgKyBsYXN0RXJyb3IpOworCisgICAgICBnbC5kZWxldGVQcm9ncmFtKHByb2dy
YW0pOworICAgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBnbC51c2VQcm9ncmFtKHByb2dyYW0p
OworICByZXR1cm4gcHJvZ3JhbTsKK307CisKKy8qKgorICogQ3JlYXRlcyBhIHNpbXBsZSB0ZXh0
dXJlIHByb2dyYW0uCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHJldHVybiB7V2ViR0xQcm9ncmFtfQor
ICovCit2YXIgc2V0dXBOb1RleENvb3JkVGV4dHVyZVByb2dyYW0gPSBmdW5jdGlvbihnbCkgewor
ICByZXR1cm4gc2V0dXBQcm9ncmFtKGdsLAorICAgICAgICAgICAgICAgICAgICAgIFtub1RleENv
b3JkVGV4dHVyZVZlcnRleFNoYWRlciwgc2ltcGxlVGV4dHVyZUZyYWdtZW50U2hhZGVyXSwKKyAg
ICAgICAgICAgICAgICAgICAgICBbJ3ZQb3NpdGlvbiddLAorICAgICAgICAgICAgICAgICAgICAg
IFswXSk7Cit9OworCisvKioKKyAqIENyZWF0ZXMgYSBzaW1wbGUgdGV4dHVyZSBwcm9ncmFtLgor
ICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdD
b250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7bnVtYmVyfSBvcHRfcG9zaXRpb25Mb2NhdGlvbiBU
aGUgYXR0cmliIGxvY2F0aW9uIGZvciBwb3NpdGlvbi4KKyAqIEBwYXJhbSB7bnVtYmVyfSBvcHRf
dGV4Y29vcmRMb2NhdGlvbiBUaGUgYXR0cmliIGxvY2F0aW9uIGZvciB0ZXh0dXJlIGNvb3Jkcy4K
KyAqIEBwYXJhbSB7c3RyaW5nfSBvcHRfZnJhZ21lbnRTaGFkZXJPdmVycmlkZSBUaGUgYWx0ZXJu
YXRpdmUgZnJhZ21lbnQgc2hhZGVyIHRvIHVzZS4KKyAqIEByZXR1cm4ge1dlYkdMUHJvZ3JhbX0K
KyAqLwordmFyIHNldHVwU2ltcGxlVGV4dHVyZVByb2dyYW0gPSBmdW5jdGlvbigKKyAgICBnbCwg
b3B0X3Bvc2l0aW9uTG9jYXRpb24sIG9wdF90ZXhjb29yZExvY2F0aW9uLCBvcHRfZnJhZ21lbnRT
aGFkZXJPdmVycmlkZSkgeworICBvcHRfcG9zaXRpb25Mb2NhdGlvbiA9IG9wdF9wb3NpdGlvbkxv
Y2F0aW9uIHx8IDA7CisgIG9wdF90ZXhjb29yZExvY2F0aW9uID0gb3B0X3RleGNvb3JkTG9jYXRp
b24gfHwgMTsKKyAgb3B0X2ZyYWdtZW50U2hhZGVyT3ZlcnJpZGUgPSBvcHRfZnJhZ21lbnRTaGFk
ZXJPdmVycmlkZSB8fCBzaW1wbGVUZXh0dXJlRnJhZ21lbnRTaGFkZXI7CisgIHJldHVybiBzZXR1
cFByb2dyYW0oZ2wsCisgICAgICAgICAgICAgICAgICAgICAgW3NpbXBsZVRleHR1cmVWZXJ0ZXhT
aGFkZXIsIG9wdF9mcmFnbWVudFNoYWRlck92ZXJyaWRlXSwKKyAgICAgICAgICAgICAgICAgICAg
ICBbJ3ZQb3NpdGlvbicsICd0ZXhDb29yZDAnXSwKKyAgICAgICAgICAgICAgICAgICAgICBbb3B0
X3Bvc2l0aW9uTG9jYXRpb24sIG9wdF90ZXhjb29yZExvY2F0aW9uXSk7Cit9OworCisvKioKKyAq
IENyZWF0ZXMgYSBzaW1wbGUgdGV4dHVyZSBwcm9ncmFtIHVzaW5nIGdsc2wgdmVyc2lvbiAzMDAu
CisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtudW1iZXJ9IG9wdF9wb3NpdGlvbkxvY2F0aW9u
IFRoZSBhdHRyaWIgbG9jYXRpb24gZm9yIHBvc2l0aW9uLgorICogQHBhcmFtIHtudW1iZXJ9IG9w
dF90ZXhjb29yZExvY2F0aW9uIFRoZSBhdHRyaWIgbG9jYXRpb24gZm9yIHRleHR1cmUgY29vcmRz
LgorICogQHBhcmFtIHtzdHJpbmd9IG9wdF9mcmFnbWVudFNoYWRlck92ZXJyaWRlIFRoZSBhbHRl
cm5hdGl2ZSBmcmFnbWVudCBzaGFkZXIgdG8gdXNlLgorICogQHJldHVybiB7V2ViR0xQcm9ncmFt
fQorICovCit2YXIgc2V0dXBTaW1wbGVUZXh0dXJlUHJvZ3JhbUVTU0wzMDAgPSBmdW5jdGlvbigK
KyAgICBnbCwgb3B0X3Bvc2l0aW9uTG9jYXRpb24sIG9wdF90ZXhjb29yZExvY2F0aW9uLCBvcHRf
ZnJhZ21lbnRTaGFkZXJPdmVycmlkZSkgeworICBvcHRfcG9zaXRpb25Mb2NhdGlvbiA9IG9wdF9w
b3NpdGlvbkxvY2F0aW9uIHx8IDA7CisgIG9wdF90ZXhjb29yZExvY2F0aW9uID0gb3B0X3RleGNv
b3JkTG9jYXRpb24gfHwgMTsKKyAgb3B0X2ZyYWdtZW50U2hhZGVyT3ZlcnJpZGUgPSBvcHRfZnJh
Z21lbnRTaGFkZXJPdmVycmlkZSB8fCBzaW1wbGVUZXh0dXJlRnJhZ21lbnRTaGFkZXJFU1NMMzAw
OworICByZXR1cm4gc2V0dXBQcm9ncmFtKGdsLAorICAgICAgICAgICAgICAgICAgICAgIFtzaW1w
bGVUZXh0dXJlVmVydGV4U2hhZGVyRVNTTDMwMCwgb3B0X2ZyYWdtZW50U2hhZGVyT3ZlcnJpZGVd
LAorICAgICAgICAgICAgICAgICAgICAgIFsndlBvc2l0aW9uJywgJ3RleENvb3JkMCddLAorICAg
ICAgICAgICAgICAgICAgICAgIFtvcHRfcG9zaXRpb25Mb2NhdGlvbiwgb3B0X3RleGNvb3JkTG9j
YXRpb25dKTsKK307CisKKy8qKgorICogQ3JlYXRlcyBhIHNpbXBsZSBjdWJlIG1hcCB0ZXh0dXJl
IHByb2dyYW0uCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJH
TFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtudW1iZXJ9IG9wdF9wb3NpdGlv
bkxvY2F0aW9uIFRoZSBhdHRyaWIgbG9jYXRpb24gZm9yIHBvc2l0aW9uLgorICogQHBhcmFtIHtu
dW1iZXJ9IG9wdF90ZXhjb29yZExvY2F0aW9uIFRoZSBhdHRyaWIgbG9jYXRpb24gZm9yIHRleHR1
cmUgY29vcmRzLgorICogQHJldHVybiB7V2ViR0xQcm9ncmFtfQorICovCit2YXIgc2V0dXBTaW1w
bGVDdWJlTWFwVGV4dHVyZVByb2dyYW0gPSBmdW5jdGlvbigKKyAgICBnbCwgb3B0X3Bvc2l0aW9u
TG9jYXRpb24sIG9wdF90ZXhjb29yZExvY2F0aW9uKSB7CisgIG9wdF9wb3NpdGlvbkxvY2F0aW9u
ID0gb3B0X3Bvc2l0aW9uTG9jYXRpb24gfHwgMDsKKyAgb3B0X3RleGNvb3JkTG9jYXRpb24gPSBv
cHRfdGV4Y29vcmRMb2NhdGlvbiB8fCAxOworICByZXR1cm4gc2V0dXBQcm9ncmFtKGdsLAorICAg
ICAgICAgICAgICAgICAgICAgIFtzaW1wbGVUZXh0dXJlVmVydGV4U2hhZGVyLCBzaW1wbGVDdWJl
TWFwVGV4dHVyZUZyYWdtZW50U2hhZGVyXSwKKyAgICAgICAgICAgICAgICAgICAgICBbJ3ZQb3Np
dGlvbicsICd0ZXhDb29yZDAnXSwKKyAgICAgICAgICAgICAgICAgICAgICBbb3B0X3Bvc2l0aW9u
TG9jYXRpb24sIG9wdF90ZXhjb29yZExvY2F0aW9uXSk7Cit9OworCisvKioKKyAqIENyZWF0ZXMg
YSBzaW1wbGUgdmVydGV4IGNvbG9yIHByb2dyYW0uCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmlu
Z0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFt
IHtudW1iZXJ9IG9wdF9wb3NpdGlvbkxvY2F0aW9uIFRoZSBhdHRyaWIgbG9jYXRpb24gZm9yIHBv
c2l0aW9uLgorICogQHBhcmFtIHtudW1iZXJ9IG9wdF92ZXJ0ZXhDb2xvckxvY2F0aW9uIFRoZSBh
dHRyaWIgbG9jYXRpb24KKyAqICAgICAgICBmb3IgdmVydGV4IGNvbG9ycy4KKyAqIEByZXR1cm4g
e1dlYkdMUHJvZ3JhbX0KKyAqLwordmFyIHNldHVwU2ltcGxlVmVydGV4Q29sb3JQcm9ncmFtID0g
ZnVuY3Rpb24oCisgICAgZ2wsIG9wdF9wb3NpdGlvbkxvY2F0aW9uLCBvcHRfdmVydGV4Q29sb3JM
b2NhdGlvbikgeworICBvcHRfcG9zaXRpb25Mb2NhdGlvbiA9IG9wdF9wb3NpdGlvbkxvY2F0aW9u
IHx8IDA7CisgIG9wdF92ZXJ0ZXhDb2xvckxvY2F0aW9uID0gb3B0X3ZlcnRleENvbG9yTG9jYXRp
b24gfHwgMTsKKyAgcmV0dXJuIHNldHVwUHJvZ3JhbShnbCwKKyAgICAgICAgICAgICAgICAgICAg
ICBbc2ltcGxlVmVydGV4Q29sb3JWZXJ0ZXhTaGFkZXIsIHNpbXBsZVZlcnRleENvbG9yRnJhZ21l
bnRTaGFkZXJdLAorICAgICAgICAgICAgICAgICAgICAgIFsndlBvc2l0aW9uJywgJ2FfY29sb3In
XSwKKyAgICAgICAgICAgICAgICAgICAgICBbb3B0X3Bvc2l0aW9uTG9jYXRpb24sIG9wdF92ZXJ0
ZXhDb2xvckxvY2F0aW9uXSk7Cit9OworCisvKioKKyAqIENyZWF0ZXMgYSBzaW1wbGUgY29sb3Ig
cHJvZ3JhbS4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdM
UmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge251bWJlcn0gb3B0X3Bvc2l0aW9u
TG9jYXRpb24gVGhlIGF0dHJpYiBsb2NhdGlvbiBmb3IgcG9zaXRpb24uCisgKiBAcmV0dXJuIHtX
ZWJHTFByb2dyYW19CisgKi8KK3ZhciBzZXR1cFNpbXBsZUNvbG9yUHJvZ3JhbSA9IGZ1bmN0aW9u
KGdsLCBvcHRfcG9zaXRpb25Mb2NhdGlvbikgeworICBvcHRfcG9zaXRpb25Mb2NhdGlvbiA9IG9w
dF9wb3NpdGlvbkxvY2F0aW9uIHx8IDA7CisgIHJldHVybiBzZXR1cFByb2dyYW0oZ2wsCisgICAg
ICAgICAgICAgICAgICAgICAgW3NpbXBsZVZlcnRleFNoYWRlciwgc2ltcGxlQ29sb3JGcmFnbWVu
dFNoYWRlcl0sCisgICAgICAgICAgICAgICAgICAgICAgWyd2UG9zaXRpb24nXSwKKyAgICAgICAg
ICAgICAgICAgICAgICBbb3B0X3Bvc2l0aW9uTG9jYXRpb25dKTsKK307CisKKy8qKgorICogQ3Jl
YXRlcyBidWZmZXJzIGZvciBhIHRleHR1cmVkIHVuaXQgcXVhZCBhbmQgYXR0YWNoZXMgdGhlbSB0
byB2ZXJ0ZXggYXR0cmlicy4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wg
VGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge251bWJlcn0gb3B0
X3Bvc2l0aW9uTG9jYXRpb24gVGhlIGF0dHJpYiBsb2NhdGlvbiBmb3IgcG9zaXRpb24uCisgKiBA
cGFyYW0ge251bWJlcn0gb3B0X3RleGNvb3JkTG9jYXRpb24gVGhlIGF0dHJpYiBsb2NhdGlvbiBm
b3IgdGV4dHVyZSBjb29yZHMuCisgKiBAcGFyYW0geyFPYmplY3R9IHZhcmlvdXMgb3B0aW9ucy4g
U2VlIHNldHVwUXVhZCBmb3IgZGV0YWlscy4KKyAqIEByZXR1cm4geyFBcnJheS48V2ViR0xCdWZm
ZXI+fSBUaGUgYnVmZmVyIG9iamVjdHMgdGhhdCB3ZXJlCisgKiAgICAgIGNyZWF0ZWQuCisgKi8K
K3ZhciBzZXR1cFVuaXRRdWFkID0gZnVuY3Rpb24oZ2wsIG9wdF9wb3NpdGlvbkxvY2F0aW9uLCBv
cHRfdGV4Y29vcmRMb2NhdGlvbiwgb3B0aW9ucykgeworICByZXR1cm4gc2V0dXBRdWFkV2l0aFRl
eENvb3JkcyhnbCwgWyAwLjAsIDAuMCBdLCBbIDEuMCwgMS4wIF0sCisgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgIG9wdF9wb3NpdGlvbkxvY2F0aW9uLCBvcHRfdGV4Y29vcmRMb2NhdGlv
biwKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgb3B0aW9ucyk7Cit9OworCisvKioK
KyAqIENyZWF0ZXMgYnVmZmVycyBmb3IgYSB0ZXh0dXJlZCBxdWFkIHdpdGggc3BlY2lmaWVkIGxv
d2VyIGxlZnQKKyAqIGFuZCB1cHBlciByaWdodCB0ZXh0dXJlIGNvb3JkaW5hdGVzLCBhbmQgYXR0
YWNoZXMgdGhlbSB0byB2ZXJ0ZXgKKyAqIGF0dHJpYnMuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRl
cmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBh
cmFtIHshQXJyYXkuPG51bWJlcj59IGxvd2VyTGVmdFRleENvb3JkcyBUaGUgdGV4dHVyZSBjb29y
ZGluYXRlcyBmb3IgdGhlIGxvd2VyIGxlZnQgY29ybmVyLgorICogQHBhcmFtIHshQXJyYXkuPG51
bWJlcj59IHVwcGVyUmlnaHRUZXhDb29yZHMgVGhlIHRleHR1cmUgY29vcmRpbmF0ZXMgZm9yIHRo
ZSB1cHBlciByaWdodCBjb3JuZXIuCisgKiBAcGFyYW0ge251bWJlcn0gb3B0X3Bvc2l0aW9uTG9j
YXRpb24gVGhlIGF0dHJpYiBsb2NhdGlvbiBmb3IgcG9zaXRpb24uCisgKiBAcGFyYW0ge251bWJl
cn0gb3B0X3RleGNvb3JkTG9jYXRpb24gVGhlIGF0dHJpYiBsb2NhdGlvbiBmb3IgdGV4dHVyZSBj
b29yZHMuCisgKiBAcGFyYW0geyFPYmplY3R9IHZhcmlvdXMgb3B0aW9ucy4gU2VlIHNldHVwUXVh
ZCBmb3IgZGV0YWlscy4KKyAqIEByZXR1cm4geyFBcnJheS48V2ViR0xCdWZmZXI+fSBUaGUgYnVm
ZmVyIG9iamVjdHMgdGhhdCB3ZXJlCisgKiAgICAgIGNyZWF0ZWQuCisgKi8KK3ZhciBzZXR1cFF1
YWRXaXRoVGV4Q29vcmRzID0gZnVuY3Rpb24oCisgICAgZ2wsIGxvd2VyTGVmdFRleENvb3Jkcywg
dXBwZXJSaWdodFRleENvb3JkcywKKyAgICBvcHRfcG9zaXRpb25Mb2NhdGlvbiwgb3B0X3RleGNv
b3JkTG9jYXRpb24sIG9wdGlvbnMpIHsKKyAgdmFyIGRlZmF1bHRPcHRpb25zID0geworICAgIHBv
c2l0aW9uTG9jYXRpb246IG9wdF9wb3NpdGlvbkxvY2F0aW9uIHx8IDAsCisgICAgdGV4Y29vcmRM
b2NhdGlvbjogb3B0X3RleGNvb3JkTG9jYXRpb24gfHwgMSwKKyAgICBsb3dlckxlZnRUZXhDb29y
ZHM6IGxvd2VyTGVmdFRleENvb3JkcywKKyAgICB1cHBlclJpZ2h0VGV4Q29vcmRzOiB1cHBlclJp
Z2h0VGV4Q29vcmRzCisgIH07CisgIGlmIChvcHRpb25zKSB7CisgICAgZm9yICh2YXIgcHJvcCBp
biBvcHRpb25zKSB7CisgICAgICBkZWZhdWx0T3B0aW9uc1twcm9wXSA9IG9wdGlvbnNbcHJvcF0K
KyAgICB9CisgIH0KKyAgcmV0dXJuIHNldHVwUXVhZChnbCwgZGVmYXVsdE9wdGlvbnMpOworfTsK
KworLyoqCisgKiBNYWtlcyBhIHF1YWQgd2l0aCB2YXJpb3VzIG9wdGlvbnMuCisgKiBAcGFyYW0g
eyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8g
dXNlLgorICogQHBhcmFtIHshT2JqZWN0fSBvcHRpb25zCisgKgorICogc2NhbGU6IHNjYWxlIHRv
IG11bHRpcGx5IHVuaXQgcXVhZCB2YWx1ZXMgYnkuIGRlZmF1bHQgMS4wLgorICogcG9zaXRpb25M
b2NhdGlvbjogYXR0cmlidXRlIGxvY2F0aW9uIGZvciBwb3NpdGlvbi4KKyAqIHRleGNvb3JkTG9j
YXRpb246IGF0dHJpYnV0ZSBsb2NhdGlvbiBmb3IgdGV4Y29vcmRzLgorICogICAgIElmIHRoaXMg
ZG9lcyBub3QgZXhpc3Qgbm8gdGV4dHVyZSBjb29yZHMgYXJlIGNyZWF0ZWQuCisgKiBsb3dlckxl
ZnRUZXhDb29yZHM6IGFuIGFycmF5IG9mIDIgdmFsdWVzIGZvciB0aGUKKyAqICAgICBsb3dlckxl
ZnRUZXhDb29yZHMuCisgKiB1cHBlclJpZ2h0VGV4Q29vcmRzOiBhbiBhcnJheSBvZiAyIHZhbHVl
cyBmb3IgdGhlCisgKiAgICAgdXBwZXJSaWdodFRleENvb3Jkcy4KKyAqLwordmFyIHNldHVwUXVh
ZCA9IGZ1bmN0aW9uKGdsLCBvcHRpb25zKSB7CisgIHZhciBwb3NpdGlvbkxvY2F0aW9uID0gb3B0
aW9ucy5wb3NpdGlvbkxvY2F0aW9uIHx8IDA7CisgIHZhciBzY2FsZSA9IG9wdGlvbnMuc2NhbGUg
fHwgMTsKKworICB2YXIgb2JqZWN0cyA9IFtdOworCisgIHZhciB2ZXJ0ZXhPYmplY3QgPSBnbC5j
cmVhdGVCdWZmZXIoKTsKKyAgZ2wuYmluZEJ1ZmZlcihnbC5BUlJBWV9CVUZGRVIsIHZlcnRleE9i
amVjdCk7CisgIGdsLmJ1ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBuZXcgRmxvYXQzMkFycmF5
KFsKKyAgICAgICAxLjAgKiBzY2FsZSAsICAxLjAgKiBzY2FsZSwKKyAgICAgIC0xLjAgKiBzY2Fs
ZSAsICAxLjAgKiBzY2FsZSwKKyAgICAgIC0xLjAgKiBzY2FsZSAsIC0xLjAgKiBzY2FsZSwKKyAg
ICAgICAxLjAgKiBzY2FsZSAsICAxLjAgKiBzY2FsZSwKKyAgICAgIC0xLjAgKiBzY2FsZSAsIC0x
LjAgKiBzY2FsZSwKKyAgICAgICAxLjAgKiBzY2FsZSAsIC0xLjAgKiBzY2FsZV0pLCBnbC5TVEFU
SUNfRFJBVyk7CisgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHBvc2l0aW9uTG9jYXRpb24p
OworICBnbC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHBvc2l0aW9uTG9jYXRpb24sIDIsIGdsLkZMT0FU
LCBmYWxzZSwgMCwgMCk7CisgIG9iamVjdHMucHVzaCh2ZXJ0ZXhPYmplY3QpOworCisgIGlmIChv
cHRpb25zLnRleGNvb3JkTG9jYXRpb24gIT09IHVuZGVmaW5lZCkgeworICAgIHZhciBsbHggPSBv
cHRpb25zLmxvd2VyTGVmdFRleENvb3Jkc1swXTsKKyAgICB2YXIgbGx5ID0gb3B0aW9ucy5sb3dl
ckxlZnRUZXhDb29yZHNbMV07CisgICAgdmFyIHVyeCA9IG9wdGlvbnMudXBwZXJSaWdodFRleENv
b3Jkc1swXTsKKyAgICB2YXIgdXJ5ID0gb3B0aW9ucy51cHBlclJpZ2h0VGV4Q29vcmRzWzFdOwor
CisgICAgdmVydGV4T2JqZWN0ID0gZ2wuY3JlYXRlQnVmZmVyKCk7CisgICAgZ2wuYmluZEJ1ZmZl
cihnbC5BUlJBWV9CVUZGRVIsIHZlcnRleE9iamVjdCk7CisgICAgZ2wuYnVmZmVyRGF0YShnbC5B
UlJBWV9CVUZGRVIsIG5ldyBGbG9hdDMyQXJyYXkoWworICAgICAgICB1cngsIHVyeSwKKyAgICAg
ICAgbGx4LCB1cnksCisgICAgICAgIGxseCwgbGx5LAorICAgICAgICB1cngsIHVyeSwKKyAgICAg
ICAgbGx4LCBsbHksCisgICAgICAgIHVyeCwgbGx5XSksIGdsLlNUQVRJQ19EUkFXKTsKKyAgICBn
bC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShvcHRpb25zLnRleGNvb3JkTG9jYXRpb24pOworICAg
IGdsLnZlcnRleEF0dHJpYlBvaW50ZXIob3B0aW9ucy50ZXhjb29yZExvY2F0aW9uLCAyLCBnbC5G
TE9BVCwgZmFsc2UsIDAsIDApOworICAgIG9iamVjdHMucHVzaCh2ZXJ0ZXhPYmplY3QpOworICB9
CisKKyAgcmV0dXJuIG9iamVjdHM7Cit9OworCisvKioKKyAqIENyZWF0ZXMgYSBwcm9ncmFtIGFu
ZCBidWZmZXJzIGZvciByZW5kZXJpbmcgYSB0ZXh0dXJlZCBxdWFkLgorICogQHBhcmFtIHshV2Vi
R0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4K
KyAqIEBwYXJhbSB7bnVtYmVyfSBvcHRfcG9zaXRpb25Mb2NhdGlvbiBUaGUgYXR0cmliIGxvY2F0
aW9uIGZvcgorICogICAgICAgIHBvc2l0aW9uLiBEZWZhdWx0ID0gMC4KKyAqIEBwYXJhbSB7bnVt
YmVyfSBvcHRfdGV4Y29vcmRMb2NhdGlvbiBUaGUgYXR0cmliIGxvY2F0aW9uIGZvcgorICogICAg
ICAgIHRleHR1cmUgY29vcmRzLiBEZWZhdWx0ID0gMS4KKyAqIEBwYXJhbSB7IU9iamVjdH0gdmFy
aW91cyBvcHRpb25zIGRlZmluZWQgYnkgc2V0dXBRdWFkLCBwbHVzIGFuIG9wdGlvbgorICAgICAg
ICAgIGZyYWdtZW50U2hhZGVyT3ZlcnJpZGUgdG8gc3BlY2lmeSBhIGN1c3RvbSBmcmFnbWVudCBz
aGFkZXIuCisgKiBAcmV0dXJuIHshV2ViR0xQcm9ncmFtfQorICovCit2YXIgc2V0dXBUZXh0dXJl
ZFF1YWQgPSBmdW5jdGlvbigKKyAgICBnbCwgb3B0X3Bvc2l0aW9uTG9jYXRpb24sIG9wdF90ZXhj
b29yZExvY2F0aW9uLCBvcHRpb25zKSB7CisgIHZhciBwcm9ncmFtID0gc2V0dXBTaW1wbGVUZXh0
dXJlUHJvZ3JhbSgKKyAgICAgIGdsLCBvcHRfcG9zaXRpb25Mb2NhdGlvbiwgb3B0X3RleGNvb3Jk
TG9jYXRpb24sIG9wdGlvbnMgJiYgb3B0aW9ucy5mcmFnbWVudFNoYWRlck92ZXJyaWRlKTsKKyAg
c2V0dXBVbml0UXVhZChnbCwgb3B0X3Bvc2l0aW9uTG9jYXRpb24sIG9wdF90ZXhjb29yZExvY2F0
aW9uLCBvcHRpb25zKTsKKyAgcmV0dXJuIHByb2dyYW07Cit9OworCisvKioKKyAqIENyZWF0ZXMg
YSBwcm9ncmFtIGFuZCBidWZmZXJzIGZvciByZW5kZXJpbmcgYSBjb2xvciBxdWFkLgorICogQHBh
cmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0
IHRvIHVzZS4KKyAqIEBwYXJhbSB7bnVtYmVyfSBvcHRfcG9zaXRpb25Mb2NhdGlvbiBUaGUgYXR0
cmliIGxvY2F0aW9uIGZvciBwb3NpdGlvbi4KKyAqIEBwYXJhbSB7IU9iamVjdH0gdmFyaW91cyBv
cHRpb25zLiBTZWUgc2V0dXBRdWFkIGZvciBkZXRhaWxzLgorICogQHJldHVybiB7IVdlYkdMUHJv
Z3JhbX0KKyAqLwordmFyIHNldHVwQ29sb3JRdWFkID0gZnVuY3Rpb24oZ2wsIG9wdF9wb3NpdGlv
bkxvY2F0aW9uLCBvcHRpb25zKSB7CisgIG9wdF9wb3NpdGlvbkxvY2F0aW9uID0gb3B0X3Bvc2l0
aW9uTG9jYXRpb24gfHwgMDsKKyAgdmFyIHByb2dyYW0gPSBzZXR1cFNpbXBsZUNvbG9yUHJvZ3Jh
bShnbCwgb3B0X3Bvc2l0aW9uTG9jYXRpb24pOworICBzZXR1cFVuaXRRdWFkKGdsLCBvcHRfcG9z
aXRpb25Mb2NhdGlvbiwgMCwgb3B0aW9ucyk7CisgIHJldHVybiBwcm9ncmFtOworfTsKKworLyoq
CisgKiBDcmVhdGVzIGEgcHJvZ3JhbSBhbmQgYnVmZmVycyBmb3IgcmVuZGVyaW5nIGEgdGV4dHVy
ZWQgcXVhZCB3aXRoCisgKiBzcGVjaWZpZWQgbG93ZXIgbGVmdCBhbmQgdXBwZXIgcmlnaHQgdGV4
dHVyZSBjb29yZGluYXRlcy4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wg
VGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0geyFBcnJheS48bnVt
YmVyPn0gbG93ZXJMZWZ0VGV4Q29vcmRzIFRoZSB0ZXh0dXJlIGNvb3JkaW5hdGVzIGZvciB0aGUg
bG93ZXIgbGVmdCBjb3JuZXIuCisgKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gdXBwZXJSaWdo
dFRleENvb3JkcyBUaGUgdGV4dHVyZSBjb29yZGluYXRlcyBmb3IgdGhlIHVwcGVyIHJpZ2h0IGNv
cm5lci4KKyAqIEBwYXJhbSB7bnVtYmVyfSBvcHRfcG9zaXRpb25Mb2NhdGlvbiBUaGUgYXR0cmli
IGxvY2F0aW9uIGZvciBwb3NpdGlvbi4KKyAqIEBwYXJhbSB7bnVtYmVyfSBvcHRfdGV4Y29vcmRM
b2NhdGlvbiBUaGUgYXR0cmliIGxvY2F0aW9uIGZvciB0ZXh0dXJlIGNvb3Jkcy4KKyAqIEByZXR1
cm4geyFXZWJHTFByb2dyYW19CisgKi8KK3ZhciBzZXR1cFRleHR1cmVkUXVhZFdpdGhUZXhDb29y
ZHMgPSBmdW5jdGlvbigKKyAgICBnbCwgbG93ZXJMZWZ0VGV4Q29vcmRzLCB1cHBlclJpZ2h0VGV4
Q29vcmRzLAorICAgIG9wdF9wb3NpdGlvbkxvY2F0aW9uLCBvcHRfdGV4Y29vcmRMb2NhdGlvbikg
eworICB2YXIgcHJvZ3JhbSA9IHNldHVwU2ltcGxlVGV4dHVyZVByb2dyYW0oCisgICAgICBnbCwg
b3B0X3Bvc2l0aW9uTG9jYXRpb24sIG9wdF90ZXhjb29yZExvY2F0aW9uKTsKKyAgc2V0dXBRdWFk
V2l0aFRleENvb3JkcyhnbCwgbG93ZXJMZWZ0VGV4Q29vcmRzLCB1cHBlclJpZ2h0VGV4Q29vcmRz
LAorICAgICAgICAgICAgICAgICAgICAgICAgIG9wdF9wb3NpdGlvbkxvY2F0aW9uLCBvcHRfdGV4
Y29vcmRMb2NhdGlvbik7CisgIHJldHVybiBwcm9ncmFtOworfTsKKworLyoqCisgKiBDcmVhdGVz
IGEgcHJvZ3JhbSBhbmQgYnVmZmVycyBmb3IgcmVuZGVyaW5nIGEgdGV4dHVyZWQgcXVhZCB3aXRo
CisgKiBhIGN1YmUgbWFwIHRleHR1cmUuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRl
eHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtudW1i
ZXJ9IG9wdF9wb3NpdGlvbkxvY2F0aW9uIFRoZSBhdHRyaWIgbG9jYXRpb24gZm9yCisgKiAgICAg
ICAgcG9zaXRpb24uIERlZmF1bHQgPSAwLgorICogQHBhcmFtIHtudW1iZXJ9IG9wdF90ZXhjb29y
ZExvY2F0aW9uIFRoZSBhdHRyaWIgbG9jYXRpb24gZm9yCisgKiAgICAgICAgdGV4dHVyZSBjb29y
ZHMuIERlZmF1bHQgPSAxLgorICogQHJldHVybiB7IVdlYkdMUHJvZ3JhbX0KKyAqLwordmFyIHNl
dHVwVGV4dHVyZWRRdWFkV2l0aEN1YmVNYXAgPSBmdW5jdGlvbigKKyAgICBnbCwgb3B0X3Bvc2l0
aW9uTG9jYXRpb24sIG9wdF90ZXhjb29yZExvY2F0aW9uKSB7CisgIHZhciBwcm9ncmFtID0gc2V0
dXBTaW1wbGVDdWJlTWFwVGV4dHVyZVByb2dyYW0oCisgICAgICBnbCwgb3B0X3Bvc2l0aW9uTG9j
YXRpb24sIG9wdF90ZXhjb29yZExvY2F0aW9uKTsKKyAgc2V0dXBVbml0UXVhZChnbCwgb3B0X3Bv
c2l0aW9uTG9jYXRpb24sIG9wdF90ZXhjb29yZExvY2F0aW9uLCB1bmRlZmluZWQpOworICByZXR1
cm4gcHJvZ3JhbTsKK307CisKKy8qKgorICogQ3JlYXRlcyBhIHVuaXQgcXVhZCB3aXRoIG9ubHkg
cG9zaXRpb25zIG9mIGEgZ2l2ZW4gcmVzb2x1dGlvbi4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVy
aW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFy
YW0ge251bWJlcn0gZ3JpZFJlcyBUaGUgcmVzb2x1dGlvbiBvZiB0aGUgbWVzaCBncmlkLAorICog
ICAgIGV4cHJlc3NlZCBpbiB0aGUgbnVtYmVyIG9mIHF1YWRzIGFjcm9zcyBhbmQgZG93bi4KKyAq
IEBwYXJhbSB7bnVtYmVyfSBvcHRfcG9zaXRpb25Mb2NhdGlvbiBUaGUgYXR0cmliIGxvY2F0aW9u
IGZvciBwb3NpdGlvbi4KKyAqLwordmFyIHNldHVwSW5kZXhlZFF1YWQgPSBmdW5jdGlvbiAoCisg
ICAgZ2wsIGdyaWRSZXMsIG9wdF9wb3NpdGlvbkxvY2F0aW9uLCBvcHRfZmxpcE9kZFRyaWFuZ2xl
cykgeworICByZXR1cm4gc2V0dXBJbmRleGVkUXVhZFdpdGhPcHRpb25zKGdsLAorICAgIHsgZ3Jp
ZFJlczogZ3JpZFJlcywKKyAgICAgIHBvc2l0aW9uTG9jYXRpb246IG9wdF9wb3NpdGlvbkxvY2F0
aW9uLAorICAgICAgZmxpcE9kZFRyaWFuZ2xlczogb3B0X2ZsaXBPZGRUcmlhbmdsZXMKKyAgICB9
KTsKK307CisKKy8qKgorICogQ3JlYXRlcyBhIHF1YWQgd2l0aCB2YXJpb3VzIG9wdGlvbnMuCisg
KiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQgdG8gdXNlLgorICogQHBhcmFtIHshT2JqZWN0fSBvcHRpb25zIFRoZSBvcHRpb25zLiBT
ZWUgYmVsb3cuCisgKiBAcmV0dXJuIHshQXJyYXkuPFdlYkdMQnVmZmVyPn0gVGhlIGNyZWF0ZWQg
YnVmZmVycy4KKyAqICAgICBbcG9zaXRpb25zLCA8Y29sb3JzPiwgaW5kaWNlc10KKyAqCisgKiBP
cHRpb25zOgorICogICBncmlkUmVzOiBudW1iZXIgb2YgcXVhZHMgYWNyb3NzIGFuZCBkb3duIGdy
aWQuCisgKiAgIHBvc2l0aW9uTG9jYXRpb246IGF0dHJpYiBsb2NhdGlvbiBmb3IgcG9zaXRpb24K
KyAqICAgZmxpcE9kZFRyaWFuZ2xlczogcmV2ZXJzZSBvcmRlciBvZiB2ZXJ0aWNlcyBvZiBldmVy
eSBvdGhlcgorICogICAgICAgdHJpYW5nbGUKKyAqICAgcG9zaXRpb25PZmZzZXQ6IG9mZnNldCBh
ZGRlZCB0byBlYWNoIHZlcnRleAorICogICBwb3NpdGlvbk11bHQ6IG11bHRpcGllciBmb3IgZWFj
aCB2ZXJ0ZXgKKyAqICAgY29sb3JMb2NhdGlvbjogYXR0cmliIGxvY2F0aW9uIGZvciB2ZXJ0ZXgg
Y29sb3JzLiBJZgorICogICAgICB1bmRlZmluZWQgbm8gdmVydGV4IGNvbG9ycyB3aWxsIGJlIGNy
ZWF0ZWQuCisgKi8KK3ZhciBzZXR1cEluZGV4ZWRRdWFkV2l0aE9wdGlvbnMgPSBmdW5jdGlvbiAo
Z2wsIG9wdGlvbnMpIHsKKyAgdmFyIHBvc2l0aW9uTG9jYXRpb24gPSBvcHRpb25zLnBvc2l0aW9u
TG9jYXRpb24gfHwgMDsKKyAgdmFyIG9iamVjdHMgPSBbXTsKKworICB2YXIgZ3JpZFJlcyA9IG9w
dGlvbnMuZ3JpZFJlcyB8fCAxOworICB2YXIgcG9zaXRpb25PZmZzZXQgPSBvcHRpb25zLnBvc2l0
aW9uT2Zmc2V0IHx8IDA7CisgIHZhciBwb3NpdGlvbk11bHQgPSBvcHRpb25zLnBvc2l0aW9uTXVs
dCB8fCAxOworICB2YXIgdmVydHNBY3Jvc3MgPSBncmlkUmVzICsgMTsKKyAgdmFyIG51bVZlcnRz
ID0gdmVydHNBY3Jvc3MgKiB2ZXJ0c0Fjcm9zczsKKyAgdmFyIHBvc2l0aW9ucyA9IG5ldyBGbG9h
dDMyQXJyYXkobnVtVmVydHMgKiAzKTsKKyAgdmFyIGluZGljZXMgPSBuZXcgVWludDE2QXJyYXko
NiAqIGdyaWRSZXMgKiBncmlkUmVzKTsKKyAgdmFyIHBvZmZzZXQgPSAwOworCisgIGZvciAodmFy
IHl5ID0gMDsgeXkgPD0gZ3JpZFJlczsgKyt5eSkgeworICAgIGZvciAodmFyIHh4ID0gMDsgeHgg
PD0gZ3JpZFJlczsgKyt4eCkgeworICAgICAgcG9zaXRpb25zW3BvZmZzZXQgKyAwXSA9ICgtMSAr
IDIgKiB4eCAvIGdyaWRSZXMpICogcG9zaXRpb25NdWx0ICsgcG9zaXRpb25PZmZzZXQ7CisgICAg
ICBwb3NpdGlvbnNbcG9mZnNldCArIDFdID0gKC0xICsgMiAqIHl5IC8gZ3JpZFJlcykgKiBwb3Np
dGlvbk11bHQgKyBwb3NpdGlvbk9mZnNldDsKKyAgICAgIHBvc2l0aW9uc1twb2Zmc2V0ICsgMl0g
PSAwOworCisgICAgICBwb2Zmc2V0ICs9IDM7CisgICAgfQorICB9CisKKyAgdmFyIGJ1ZiA9IGds
LmNyZWF0ZUJ1ZmZlcigpOworICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgYnVmKTsK
KyAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIHBvc2l0aW9ucywgZ2wuU1RBVElDX0RS
QVcpOworICBnbC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShwb3NpdGlvbkxvY2F0aW9uKTsKKyAg
Z2wudmVydGV4QXR0cmliUG9pbnRlcihwb3NpdGlvbkxvY2F0aW9uLCAzLCBnbC5GTE9BVCwgZmFs
c2UsIDAsIDApOworICBvYmplY3RzLnB1c2goYnVmKTsKKworICBpZiAob3B0aW9ucy5jb2xvckxv
Y2F0aW9uICE9PSB1bmRlZmluZWQpIHsKKyAgICB2YXIgY29sb3JzID0gbmV3IEZsb2F0MzJBcnJh
eShudW1WZXJ0cyAqIDQpOworICAgIHBvZmZzZXQgPSAwOworICAgIGZvciAodmFyIHl5ID0gMDsg
eXkgPD0gZ3JpZFJlczsgKyt5eSkgeworICAgICAgZm9yICh2YXIgeHggPSAwOyB4eCA8PSBncmlk
UmVzOyArK3h4KSB7CisgICAgICAgIGlmIChvcHRpb25zLmNvbG9yICE9PSB1bmRlZmluZWQpIHsK
KyAgICAgICAgICBjb2xvcnNbcG9mZnNldCArIDBdID0gb3B0aW9ucy5jb2xvclswXTsKKyAgICAg
ICAgICBjb2xvcnNbcG9mZnNldCArIDFdID0gb3B0aW9ucy5jb2xvclsxXTsKKyAgICAgICAgICBj
b2xvcnNbcG9mZnNldCArIDJdID0gb3B0aW9ucy5jb2xvclsyXTsKKyAgICAgICAgICBjb2xvcnNb
cG9mZnNldCArIDNdID0gb3B0aW9ucy5jb2xvclszXTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAg
ICAgICBjb2xvcnNbcG9mZnNldCArIDBdID0geHggLyBncmlkUmVzOworICAgICAgICAgIGNvbG9y
c1twb2Zmc2V0ICsgMV0gPSB5eSAvIGdyaWRSZXM7CisgICAgICAgICAgY29sb3JzW3BvZmZzZXQg
KyAyXSA9ICh4eCAvIGdyaWRSZXMpICogKHl5IC8gZ3JpZFJlcyk7CisgICAgICAgICAgY29sb3Jz
W3BvZmZzZXQgKyAzXSA9ICh5eSAlIDIpICogMC41ICsgMC41OworICAgICAgICB9CisgICAgICAg
IHBvZmZzZXQgKz0gNDsKKyAgICAgIH0KKyAgICB9CisKKyAgICBidWYgPSBnbC5jcmVhdGVCdWZm
ZXIoKTsKKyAgICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgYnVmKTsKKyAgICBnbC5i
dWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgY29sb3JzLCBnbC5TVEFUSUNfRFJBVyk7CisgICAg
Z2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkob3B0aW9ucy5jb2xvckxvY2F0aW9uKTsKKyAgICBn
bC52ZXJ0ZXhBdHRyaWJQb2ludGVyKG9wdGlvbnMuY29sb3JMb2NhdGlvbiwgNCwgZ2wuRkxPQVQs
IGZhbHNlLCAwLCAwKTsKKyAgICBvYmplY3RzLnB1c2goYnVmKTsKKyAgfQorCisgIHZhciB0YmFz
ZSA9IDA7CisgIGZvciAodmFyIHl5ID0gMDsgeXkgPCBncmlkUmVzOyArK3l5KSB7CisgICAgdmFy
IGluZGV4ID0geXkgKiB2ZXJ0c0Fjcm9zczsKKyAgICBmb3IgKHZhciB4eCA9IDA7IHh4IDwgZ3Jp
ZFJlczsgKyt4eCkgeworICAgICAgaW5kaWNlc1t0YmFzZSArIDBdID0gaW5kZXggKyAwOworICAg
ICAgaW5kaWNlc1t0YmFzZSArIDFdID0gaW5kZXggKyAxOworICAgICAgaW5kaWNlc1t0YmFzZSAr
IDJdID0gaW5kZXggKyB2ZXJ0c0Fjcm9zczsKKyAgICAgIGluZGljZXNbdGJhc2UgKyAzXSA9IGlu
ZGV4ICsgdmVydHNBY3Jvc3M7CisgICAgICBpbmRpY2VzW3RiYXNlICsgNF0gPSBpbmRleCArIDE7
CisgICAgICBpbmRpY2VzW3RiYXNlICsgNV0gPSBpbmRleCArIHZlcnRzQWNyb3NzICsgMTsKKwor
ICAgICAgaWYgKG9wdGlvbnMuZmxpcE9kZFRyaWFuZ2xlcykgeworICAgICAgICBpbmRpY2VzW3Ri
YXNlICsgNF0gPSBpbmRleCArIHZlcnRzQWNyb3NzICsgMTsKKyAgICAgICAgaW5kaWNlc1t0YmFz
ZSArIDVdID0gaW5kZXggKyAxOworICAgICAgfQorCisgICAgICBpbmRleCArPSAxOworICAgICAg
dGJhc2UgKz0gNjsKKyAgICB9CisgIH0KKworICBidWYgPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAg
Z2wuYmluZEJ1ZmZlcihnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgYnVmKTsKKyAgZ2wuYnVmZmVy
RGF0YShnbC5FTEVNRU5UX0FSUkFZX0JVRkZFUiwgaW5kaWNlcywgZ2wuU1RBVElDX0RSQVcpOwor
ICBvYmplY3RzLnB1c2goYnVmKTsKKworICByZXR1cm4gb2JqZWN0czsKK307CisKKy8qKgorICog
UmV0dXJucyB0aGUgY29uc3RydWN0b3IgZm9yIGEgdHlwZWQgYXJyYXkgdGhhdCBjb3JyZXNwb25k
cyB0byB0aGUgZ2l2ZW4KKyAqIFdlYkdMIHR5cGUuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmlu
Z0NvbnRleHR9IGdsIEEgV2ViR0xSZW5kZXJpbmdDb250ZXh0LgorICogQHBhcmFtIHtudW1iZXJ9
IHR5cGUgVGhlIFdlYkdMIHR5cGUgKGVnLCBnbC5VTlNJR05FRF9CWVRFKQorICogQHJldHVybiB7
IUNvbnN0cnVjdG9yfSBUaGUgdHlwZWQgYXJyYXkgY29uc3RydWN0b3IgdGhhdAorICogICAgICBj
b3JyZXNwb25kcyB0byB0aGUgZ2l2ZW4gdHlwZS4KKyAqLwordmFyIGdsVHlwZVRvVHlwZWRBcnJh
eVR5cGUgPSBmdW5jdGlvbihnbCwgdHlwZSkgeworICBzd2l0Y2ggKHR5cGUpIHsKKyAgICBjYXNl
IGdsLkJZVEU6CisgICAgICByZXR1cm4gd2luZG93LkludDhBcnJheTsKKyAgICBjYXNlIGdsLlVO
U0lHTkVEX0JZVEU6CisgICAgICByZXR1cm4gd2luZG93LlVpbnQ4QXJyYXk7CisgICAgY2FzZSBn
bC5TSE9SVDoKKyAgICAgIHJldHVybiB3aW5kb3cuSW50MTZBcnJheTsKKyAgICBjYXNlIGdsLlVO
U0lHTkVEX1NIT1JUOgorICAgIGNhc2UgZ2wuVU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgY2Fz
ZSBnbC5VTlNJR05FRF9TSE9SVF80XzRfNF80OgorICAgIGNhc2UgZ2wuVU5TSUdORURfU0hPUlRf
NV81XzVfMToKKyAgICAgIHJldHVybiB3aW5kb3cuVWludDE2QXJyYXk7CisgICAgY2FzZSBnbC5J
TlQ6CisgICAgICByZXR1cm4gd2luZG93LkludDMyQXJyYXk7CisgICAgY2FzZSBnbC5VTlNJR05F
RF9JTlQ6CisgICAgY2FzZSBnbC5VTlNJR05FRF9JTlRfNV85XzlfOV9SRVY6CisgICAgY2FzZSBn
bC5VTlNJR05FRF9JTlRfMTBGXzExRl8xMUZfUkVWOgorICAgIGNhc2UgZ2wuVU5TSUdORURfSU5U
XzJfMTBfMTBfMTBfUkVWOgorICAgIGNhc2UgZ2wuVU5TSUdORURfSU5UXzI0Xzg6CisgICAgICBy
ZXR1cm4gd2luZG93LlVpbnQzMkFycmF5OworICAgIGNhc2UgZ2wuSEFMRl9GTE9BVDoKKyAgICBj
YXNlIDB4OEQ2MTogIC8vIEhBTEZfRkxPQVRfT0VTCisgICAgICByZXR1cm4gd2luZG93LlVpbnQx
NkFycmF5OworICAgIGNhc2UgZ2wuRkxPQVQ6CisgICAgICByZXR1cm4gd2luZG93LkZsb2F0MzJB
cnJheTsKKyAgICBkZWZhdWx0OgorICAgICAgdGhyb3cgJ3Vua25vd24gZ2wgdHlwZSAnICsgZ2xF
bnVtVG9TdHJpbmcoZ2wsIHR5cGUpOworICB9Cit9OworCisvKioKKyAqIFJldHVybnMgdGhlIG51
bWJlciBvZiBieXRlcyBwZXIgY29tcG9uZW50IGZvciBhIGdpdmVuIFdlYkdMIHR5cGUuCisgKiBA
cGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIEEgV2ViR0xSZW5kZXJpbmdDb250ZXh0
LgorICogQHBhcmFtIHtHTGVudW19IHR5cGUgVGhlIFdlYkdMIHR5cGUgKGVnLCBnbC5VTlNJR05F
RF9CWVRFKQorICogQHJldHVybiB7bnVtYmVyfSBUaGUgbnVtYmVyIG9mIGJ5dGVzIHBlciBjb21w
b25lbnQuCisgKi8KK3ZhciBnZXRCeXRlc1BlckNvbXBvbmVudCA9IGZ1bmN0aW9uKGdsLCB0eXBl
KSB7CisgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgZ2wuQllURToKKyAgICBjYXNlIGdsLlVO
U0lHTkVEX0JZVEU6CisgICAgICByZXR1cm4gMTsKKyAgICBjYXNlIGdsLlNIT1JUOgorICAgIGNh
c2UgZ2wuVU5TSUdORURfU0hPUlQ6CisgICAgY2FzZSBnbC5VTlNJR05FRF9TSE9SVF81XzZfNToK
KyAgICBjYXNlIGdsLlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CisgICAgY2FzZSBnbC5VTlNJR05F
RF9TSE9SVF81XzVfNV8xOgorICAgIGNhc2UgZ2wuSEFMRl9GTE9BVDoKKyAgICBjYXNlIDB4OEQ2
MTogIC8vIEhBTEZfRkxPQVRfT0VTCisgICAgICByZXR1cm4gMjsKKyAgICBjYXNlIGdsLklOVDoK
KyAgICBjYXNlIGdsLlVOU0lHTkVEX0lOVDoKKyAgICBjYXNlIGdsLlVOU0lHTkVEX0lOVF81Xzlf
OV85X1JFVjoKKyAgICBjYXNlIGdsLlVOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVY6CisgICAg
Y2FzZSBnbC5VTlNJR05FRF9JTlRfMl8xMF8xMF8xMF9SRVY6CisgICAgY2FzZSBnbC5VTlNJR05F
RF9JTlRfMjRfODoKKyAgICBjYXNlIGdsLkZMT0FUOgorICAgICAgcmV0dXJuIDQ7CisgICAgZGVm
YXVsdDoKKyAgICAgIHRocm93ICd1bmtub3duIGdsIHR5cGUgJyArIGdsRW51bVRvU3RyaW5nKGds
LCB0eXBlKTsKKyAgfQorfTsKKworLyoqCisgKiBSZXR1cm5zIHRoZSBudW1iZXIgb2YgdHlwZWQg
YXJyYXkgZWxlbWVudHMgcGVyIHBpeGVsIGZvciBhIGdpdmVuIFdlYkdMCisgKiBmb3JtYXQvdHlw
ZSBjb21iaW5hdGlvbi4gVGhlIGNvcnJlc3BvbmRpbmcgdHlwZWQgYXJyYXkgdHlwZSBjYW4gYmUg
ZGV0ZXJtaW5lZAorICogYnkgY2FsbGluZyBnbFR5cGVUb1R5cGVkQXJyYXlUeXBlLgorICogQHBh
cmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBBIFdlYkdMUmVuZGVyaW5nQ29udGV4dC4K
KyAqIEBwYXJhbSB7R0xlbnVtfSBmb3JtYXQgVGhlIFdlYkdMIGZvcm1hdCAoZWcsIGdsLlJHQkEp
CisgKiBAcGFyYW0ge0dMZW51bX0gdHlwZSBUaGUgV2ViR0wgdHlwZSAoZWcsIGdsLlVOU0lHTkVE
X0JZVEUpCisgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgdHlwZWQgYXJyYXkgZWxl
bWVudHMgcGVyIHBpeGVsLgorICovCit2YXIgZ2V0VHlwZWRBcnJheUVsZW1lbnRzUGVyUGl4ZWwg
PSBmdW5jdGlvbihnbCwgZm9ybWF0LCB0eXBlKSB7CisgIHN3aXRjaCAodHlwZSkgeworICAgIGNh
c2UgZ2wuVU5TSUdORURfU0hPUlRfNV82XzU6CisgICAgY2FzZSBnbC5VTlNJR05FRF9TSE9SVF80
XzRfNF80OgorICAgIGNhc2UgZ2wuVU5TSUdORURfU0hPUlRfNV81XzVfMToKKyAgICAgIHJldHVy
biAxOworICAgIGNhc2UgZ2wuVU5TSUdORURfQllURToKKyAgICAgIGJyZWFrOworICAgIGRlZmF1
bHQ6CisgICAgICB0aHJvdyAnbm90IGEgZ2wgdHlwZSBmb3IgY29sb3IgaW5mb3JtYXRpb24gJyAr
IGdsRW51bVRvU3RyaW5nKGdsLCB0eXBlKTsKKyAgfQorCisgIHN3aXRjaCAoZm9ybWF0KSB7Cisg
ICAgY2FzZSBnbC5SR0JBOgorICAgICAgcmV0dXJuIDQ7CisgICAgY2FzZSBnbC5SR0I6CisgICAg
ICByZXR1cm4gMzsKKyAgICBjYXNlIGdsLkxVTUlOQU5DRV9BTFBIQToKKyAgICAgIHJldHVybiAy
OworICAgIGNhc2UgZ2wuTFVNSU5BTkNFOgorICAgIGNhc2UgZ2wuQUxQSEE6CisgICAgICByZXR1
cm4gMTsKKyAgICBkZWZhdWx0OgorICAgICAgdGhyb3cgJ3Vua25vd24gZ2wgZm9ybWF0ICcgKyBn
bEVudW1Ub1N0cmluZyhnbCwgZm9ybWF0KTsKKyAgfQorfTsKKworLyoqCisgKiBGaWxscyB0aGUg
Z2l2ZW4gdGV4dHVyZSB3aXRoIGEgc29saWQgY29sb3IuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRl
cmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBh
cmFtIHshV2ViR0xUZXh0dXJlfSB0ZXggVGhlIHRleHR1cmUgdG8gZmlsbC4KKyAqIEBwYXJhbSB7
bnVtYmVyfSB3aWR0aCBUaGUgd2lkdGggb2YgdGhlIHRleHR1cmUgdG8gY3JlYXRlLgorICogQHBh
cmFtIHtudW1iZXJ9IGhlaWdodCBUaGUgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlIHRvIGNyZWF0ZS4K
KyAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBjb2xvciBUaGUgY29sb3IgdG8gZmlsbCB3aXRo
LgorICogICAgICAgIHdoZXJlIGVhY2ggZWxlbWVudCBpcyBpbiB0aGUgcmFuZ2UgMCB0byAyNTUu
CisgKiBAcGFyYW0ge251bWJlcn0gb3B0X2xldmVsIFRoZSBsZXZlbCBvZiB0aGUgdGV4dHVyZSB0
byBmaWxsLiBEZWZhdWx0ID0gMC4KKyAqIEBwYXJhbSB7bnVtYmVyfSBvcHRfZm9ybWF0IFRoZSBm
b3JtYXQgZm9yIHRoZSB0ZXh0dXJlLgorICogQHBhcmFtIHtudW1iZXJ9IG9wdF9pbnRlcm5hbEZv
cm1hdCBUaGUgaW50ZXJuYWwgZm9ybWF0IGZvciB0aGUgdGV4dHVyZS4KKyAqLwordmFyIGZpbGxU
ZXh0dXJlID0gZnVuY3Rpb24oZ2wsIHRleCwgd2lkdGgsIGhlaWdodCwgY29sb3IsIG9wdF9sZXZl
bCwgb3B0X2Zvcm1hdCwgb3B0X3R5cGUsIG9wdF9pbnRlcm5hbEZvcm1hdCkgeworICBvcHRfbGV2
ZWwgPSBvcHRfbGV2ZWwgfHwgMDsKKyAgb3B0X2Zvcm1hdCA9IG9wdF9mb3JtYXQgfHwgZ2wuUkdC
QTsKKyAgb3B0X3R5cGUgPSBvcHRfdHlwZSB8fCBnbC5VTlNJR05FRF9CWVRFOworICBvcHRfaW50
ZXJuYWxGb3JtYXQgPSBvcHRfaW50ZXJuYWxGb3JtYXQgfHwgb3B0X2Zvcm1hdDsKKyAgdmFyIHBh
Y2sgPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuVU5QQUNLX0FMSUdOTUVOVCk7CisgIHZhciBudW1Db21w
b25lbnRzID0gY29sb3IubGVuZ3RoOworICB2YXIgYnl0ZXNQZXJDb21wb25lbnQgPSBnZXRCeXRl
c1BlckNvbXBvbmVudChnbCwgb3B0X3R5cGUpOworICB2YXIgcm93U2l6ZSA9IG51bUNvbXBvbmVu
dHMgKiB3aWR0aCAqIGJ5dGVzUGVyQ29tcG9uZW50OworICAvLyBTZWUgZXF1YXRpb24gMy4xMCBp
biBFUyAyLjAgc3BlYyBhbmQgZXF1YXRpb24gMy4xMyBpbiBFUyAzLjAgc3BlYyBmb3IgcGFkZGVk
Um93TGVuZ3RoIGNhbGN1bGF0aW9uLgorICAvLyBrIGlzIHBhZGRlZFJvd0xlbmd0aC4KKyAgLy8g
biBpcyBudW1Db21wb25lbnRzLgorICAvLyBsIGlzIHdpZHRoLgorICAvLyBhIGlzIHBhY2suCisg
IC8vIHMgaXMgYnl0ZXNQZXJDb21wb25lbnQuCisgIHZhciBwYWRkZWRSb3dMZW5ndGg7CisgIGlm
IChieXRlc1BlckNvbXBvbmVudCA+PSBwYWNrKQorICAgIHBhZGRlZFJvd0xlbmd0aCA9IG51bUNv
bXBvbmVudHMgKiB3aWR0aDsKKyAgZWxzZQorICAgIHBhZGRlZFJvd0xlbmd0aCA9IE1hdGguZmxv
b3IoKHJvd1NpemUgKyBwYWNrIC0gMSkgLyBwYWNrKSAqIHBhY2sgLyBieXRlc1BlckNvbXBvbmVu
dDsKKyAgdmFyIHNpemUgPSB3aWR0aCAqIG51bUNvbXBvbmVudHMgKyAoaGVpZ2h0IC0gMSkgKiBw
YWRkZWRSb3dMZW5ndGg7CisgIHZhciBidWYgPSBuZXcgKGdsVHlwZVRvVHlwZWRBcnJheVR5cGUo
Z2wsIG9wdF90eXBlKSkoc2l6ZSk7CisgIGZvciAodmFyIHl5ID0gMDsgeXkgPCBoZWlnaHQ7ICsr
eXkpIHsKKyAgICB2YXIgb2ZmID0geXkgKiBwYWRkZWRSb3dMZW5ndGg7CisgICAgZm9yICh2YXIg
eHggPSAwOyB4eCA8IHdpZHRoOyArK3h4KSB7CisgICAgICBmb3IgKHZhciBqaiA9IDA7IGpqIDwg
bnVtQ29tcG9uZW50czsgKytqaikgeworICAgICAgICBidWZbb2ZmKytdID0gY29sb3JbampdOwor
ICAgICAgfQorICAgIH0KKyAgfQorICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXgp
OworICBnbC50ZXhJbWFnZTJEKAorICAgICAgZ2wuVEVYVFVSRV8yRCwgb3B0X2xldmVsLCBvcHRf
aW50ZXJuYWxGb3JtYXQsIHdpZHRoLCBoZWlnaHQsIDAsCisgICAgICBvcHRfZm9ybWF0LCBvcHRf
dHlwZSwgYnVmKTsKK307CisKKy8qKgorICogQ3JlYXRlcyBhIHRleHR1cmUgYW5kIGZpbGxzIGl0
IHdpdGggYSBzb2xpZCBjb2xvci4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0g
Z2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge251bWJlcn0g
d2lkdGggVGhlIHdpZHRoIG9mIHRoZSB0ZXh0dXJlIHRvIGNyZWF0ZS4KKyAqIEBwYXJhbSB7bnVt
YmVyfSBoZWlnaHQgVGhlIGhlaWdodCBvZiB0aGUgdGV4dHVyZSB0byBjcmVhdGUuCisgKiBAcGFy
YW0geyFBcnJheS48bnVtYmVyPn0gY29sb3IgVGhlIGNvbG9yIHRvIGZpbGwgd2l0aC4gQSA0IGVs
ZW1lbnQgYXJyYXkKKyAqICAgICAgICB3aGVyZSBlYWNoIGVsZW1lbnQgaXMgaW4gdGhlIHJhbmdl
IDAgdG8gMjU1LgorICogQHJldHVybiB7IVdlYkdMVGV4dHVyZX0KKyAqLwordmFyIGNyZWF0ZUNv
bG9yZWRUZXh0dXJlID0gZnVuY3Rpb24oZ2wsIHdpZHRoLCBoZWlnaHQsIGNvbG9yKSB7CisgIHZh
ciB0ZXggPSBnbC5jcmVhdGVUZXh0dXJlKCk7CisgIGZpbGxUZXh0dXJlKGdsLCB0ZXgsIHdpZHRo
LCBoZWlnaHQsIGNvbG9yKTsKKyAgcmV0dXJuIHRleDsKK307CisKK3ZhciB1Ynl0ZVRvRmxvYXQg
PSBmdW5jdGlvbihjKSB7CisgIHJldHVybiBjIC8gMjU1OworfTsKKwordmFyIHVieXRlQ29sb3JU
b0Zsb2F0Q29sb3IgPSBmdW5jdGlvbihjb2xvcikgeworICB2YXIgZmxvYXRDb2xvciA9IFtdOwor
ICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgY29sb3IubGVuZ3RoOyArK2lpKSB7CisgICAgZmxvYXRD
b2xvcltpaV0gPSB1Ynl0ZVRvRmxvYXQoY29sb3JbaWldKTsKKyAgfQorICByZXR1cm4gZmxvYXRD
b2xvcjsKK307CisKKy8qKgorICogU2V0cyB0aGUgInVfY29sb3IiIHVuaWZvcm0gb2YgdGhlIGN1
cnJlbnQgcHJvZ3JhbSB0byBjb2xvci4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4
dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0geyFBcnJh
eS48bnVtYmVyPn0gY29sb3IgNCBlbGVtZW50IGFycmF5IG9mIDAtMSBjb2xvcgorICogICAgICBj
b21wb25lbnRzLgorICovCit2YXIgc2V0RmxvYXREcmF3Q29sb3IgPSBmdW5jdGlvbihnbCwgY29s
b3IpIHsKKyAgdmFyIHByb2dyYW0gPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuQ1VSUkVOVF9QUk9HUkFN
KTsKKyAgdmFyIGNvbG9yTG9jYXRpb24gPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwg
InVfY29sb3IiKTsKKyAgZ2wudW5pZm9ybTRmdihjb2xvckxvY2F0aW9uLCBjb2xvcik7Cit9Owor
CisvKioKKyAqIFNldHMgdGhlICJ1X2NvbG9yIiB1bmlmb3JtIG9mIHRoZSBjdXJyZW50IHByb2dy
YW0gdG8gY29sb3IuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHshQXJyYXkuPG51bWJlcj59
IGNvbG9yIDQgZWxlbWVudCBhcnJheSBvZiAwLTI1NSBjb2xvcgorICogICAgICBjb21wb25lbnRz
LgorICovCit2YXIgc2V0VUJ5dGVEcmF3Q29sb3IgPSBmdW5jdGlvbihnbCwgY29sb3IpIHsKKyAg
c2V0RmxvYXREcmF3Q29sb3IoZ2wsIHVieXRlQ29sb3JUb0Zsb2F0Q29sb3IoY29sb3IpKTsKK307
CisKKy8qKgorICogRHJhd3MgYSBwcmV2aW91c2x5IHNldHVwIHF1YWQgaW4gdGhlIGdpdmVuIGNv
bG9yLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBjb2xvciBU
aGUgY29sb3IgdG8gZHJhdyB3aXRoLiBBIDQKKyAqICAgICAgICBlbGVtZW50IGFycmF5IHdoZXJl
IGVhY2ggZWxlbWVudCBpcyBpbiB0aGUgcmFuZ2UgMCB0bworICogICAgICAgIDEuCisgKi8KK3Zh
ciBkcmF3RmxvYXRDb2xvclF1YWQgPSBmdW5jdGlvbihnbCwgY29sb3IpIHsKKyAgdmFyIHByb2dy
YW0gPSBnbC5nZXRQYXJhbWV0ZXIoZ2wuQ1VSUkVOVF9QUk9HUkFNKTsKKyAgdmFyIGNvbG9yTG9j
YXRpb24gPSBnbC5nZXRVbmlmb3JtTG9jYXRpb24ocHJvZ3JhbSwgInVfY29sb3IiKTsKKyAgZ2wu
dW5pZm9ybTRmdihjb2xvckxvY2F0aW9uLCBjb2xvcik7CisgIGdsLmRyYXdBcnJheXMoZ2wuVFJJ
QU5HTEVTLCAwLCA2KTsKK307CisKKworLyoqCisgKiBEcmF3cyBhIHByZXZpb3VzbHkgc2V0dXAg
cXVhZCBpbiB0aGUgZ2l2ZW4gY29sb3IuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRl
eHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHshQXJy
YXkuPG51bWJlcj59IGNvbG9yIFRoZSBjb2xvciB0byBkcmF3IHdpdGguIEEgNAorICogICAgICAg
IGVsZW1lbnQgYXJyYXkgd2hlcmUgZWFjaCBlbGVtZW50IGlzIGluIHRoZSByYW5nZSAwIHRvCisg
KiAgICAgICAgMjU1LgorICovCit2YXIgZHJhd1VCeXRlQ29sb3JRdWFkID0gZnVuY3Rpb24oZ2ws
IGNvbG9yKSB7CisgIGRyYXdGbG9hdENvbG9yUXVhZChnbCwgdWJ5dGVDb2xvclRvRmxvYXRDb2xv
cihjb2xvcikpOworfTsKKworLyoqCisgKiBEcmF3cyBhIHByZXZpb3VzbHkgc2V0dXBVbml0UXVh
ZC4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVy
aW5nQ29udGV4dCB0byB1c2UuCisgKi8KK3ZhciBkcmF3VW5pdFF1YWQgPSBmdW5jdGlvbihnbCkg
eworICBnbC5kcmF3QXJyYXlzKGdsLlRSSUFOR0xFUywgMCwgNik7Cit9OworCit2YXIgZHVtbXlT
ZXRQcm9ncmFtQW5kRHJhd05vdGhpbmcgPSBmdW5jdGlvbihnbCkgeworICBpZiAoIWdsLl93dHVE
dW1teVByb2dyYW0pIHsKKyAgICBnbC5fd3R1RHVtbXlQcm9ncmFtID0gc2V0dXBQcm9ncmFtKGds
LCBbCisgICAgICAidm9pZCBtYWluKCkgeyBnbF9Qb3NpdGlvbiA9IHZlYzQoMC4wKTsgfSIsCisg
ICAgICAidm9pZCBtYWluKCkgeyBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAuMCk7IH0iCisgICAgXSwg
W10sIFtdKTsKKyAgfQorICBnbC51c2VQcm9ncmFtKGdsLl93dHVEdW1teVByb2dyYW0pOworICBn
bC5kcmF3QXJyYXlzKGdsLlRSSUFOR0xFUywgMCwgMyk7Cit9OworCisvKioKKyAqIENsZWFycyB0
aGVuIERyYXdzIGEgcHJldmlvdXNseSBzZXR1cFVuaXRRdWFkLgorICogQHBhcmFtIHshV2ViR0xS
ZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAq
IEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBvcHRfY29sb3IgVGhlIGNvbG9yIHRvIGZpbGwgY2xl
YXIgd2l0aCBiZWZvcmUKKyAqICAgICAgICBkcmF3aW5nLiBBIDQgZWxlbWVudCBhcnJheSB3aGVy
ZSBlYWNoIGVsZW1lbnQgaXMgaW4gdGhlIHJhbmdlIDAgdG8KKyAqICAgICAgICAyNTUuIERlZmF1
bHQgWzI1NSwgMjU1LCAyNTUsIDI1NV0KKyAqLwordmFyIGNsZWFyQW5kRHJhd1VuaXRRdWFkID0g
ZnVuY3Rpb24oZ2wsIG9wdF9jb2xvcikgeworICBvcHRfY29sb3IgPSBvcHRfY29sb3IgfHwgWzI1
NSwgMjU1LCAyNTUsIDI1NV07CisgIGdsLmNsZWFyQ29sb3IoCisgICAgICBvcHRfY29sb3JbMF0g
LyAyNTUsCisgICAgICBvcHRfY29sb3JbMV0gLyAyNTUsCisgICAgICBvcHRfY29sb3JbMl0gLyAy
NTUsCisgICAgICBvcHRfY29sb3JbM10gLyAyNTUpOworICBnbC5jbGVhcihnbC5DT0xPUl9CVUZG
RVJfQklUIHwgZ2wuREVQVEhfQlVGRkVSX0JJVCk7CisgIGRyYXdVbml0UXVhZChnbCk7Cit9Owor
CisvKioKKyAqIERyYXdzIGEgcXVhZCBwcmV2aW91c2x5IHNldHVwIHdpdGggc2V0dXBJbmRleGVk
UXVhZC4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge251bWJlcn0gZ3JpZFJlcyBSZXNvbHV0
aW9uIG9mIGdyaWQuCisgKi8KK3ZhciBkcmF3SW5kZXhlZFF1YWQgPSBmdW5jdGlvbihnbCwgZ3Jp
ZFJlcykgeworICBnbC5kcmF3RWxlbWVudHMoZ2wuVFJJQU5HTEVTLCBncmlkUmVzICogZ3JpZFJl
cyAqIDYsIGdsLlVOU0lHTkVEX1NIT1JULCAwKTsKK307CisKKy8qKgorICogRHJhd3MgYSBwcmV2
aW91c2x5IHNldHVwSW5kZXhlZFF1YWQKKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4
dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge251bWJl
cn0gZ3JpZFJlcyBSZXNvbHV0aW9uIG9mIGdyaWQuCisgKiBAcGFyYW0geyFBcnJheS48bnVtYmVy
Pn0gb3B0X2NvbG9yIFRoZSBjb2xvciB0byBmaWxsIGNsZWFyIHdpdGggYmVmb3JlCisgKiAgICAg
ICAgZHJhd2luZy4gQSA0IGVsZW1lbnQgYXJyYXkgd2hlcmUgZWFjaCBlbGVtZW50IGlzIGluIHRo
ZSByYW5nZSAwIHRvCisgKiAgICAgICAgMjU1LiBEZWZhdWx0IFsyNTUsIDI1NSwgMjU1LCAyNTVd
CisgKi8KK3ZhciBjbGVhckFuZERyYXdJbmRleGVkUXVhZCA9IGZ1bmN0aW9uKGdsLCBncmlkUmVz
LCBvcHRfY29sb3IpIHsKKyAgb3B0X2NvbG9yID0gb3B0X2NvbG9yIHx8IFsyNTUsIDI1NSwgMjU1
LCAyNTVdOworICBnbC5jbGVhckNvbG9yKAorICAgICAgb3B0X2NvbG9yWzBdIC8gMjU1LAorICAg
ICAgb3B0X2NvbG9yWzFdIC8gMjU1LAorICAgICAgb3B0X2NvbG9yWzJdIC8gMjU1LAorICAgICAg
b3B0X2NvbG9yWzNdIC8gMjU1KTsKKyAgZ2wuY2xlYXIoZ2wuQ09MT1JfQlVGRkVSX0JJVCB8IGds
LkRFUFRIX0JVRkZFUl9CSVQpOworICBkcmF3SW5kZXhlZFF1YWQoZ2wsIGdyaWRSZXMpOworfTsK
KworLyoqCisgKiBDbGlwcyBhIHJhbmdlIHRvIG1pbiwgbWF4CisgKiAoRWcuIGNsaXBUb1Jhbmdl
KC01LDcsMCwyMCkgd291bGQgcmV0dXJuIHt2YWx1ZTowLGV4dGVudDoyfQorICogQHBhcmFtIHtu
dW1iZXJ9IHZhbHVlIHN0YXJ0IG9mIHJhbmdlCisgKiBAcGFyYW0ge251bWJlcn0gZXh0ZW50IGV4
dGVudCBvZiByYW5nZQorICogQHBhcmFtIHtudW1iZXJ9IG1pbiBtaW4uCisgKiBAcGFyYW0ge251
bWJlcn0gbWF4IG1heC4KKyAqIEByZXR1cm4geyF7dmFsdWU6bnVtYmVyLGV4dGVudDpudW1iZXJ9
fSBUaGUgY2xpcHBlZCB2YWx1ZS4KKyAqLwordmFyIGNsaXBUb1JhbmdlID0gZnVuY3Rpb24odmFs
dWUsIGV4dGVudCwgbWluLCBtYXgpIHsKKyAgaWYgKHZhbHVlIDwgbWluKSB7CisgICAgZXh0ZW50
IC09IG1pbiAtIHZhbHVlOworICAgIHZhbHVlID0gbWluOworICB9CisgIHZhciBlbmQgPSB2YWx1
ZSArIGV4dGVudDsKKyAgaWYgKGVuZCA+IG1heCkgeworICAgIGV4dGVudCAtPSBlbmQgLSBtYXg7
CisgIH0KKyAgaWYgKGV4dGVudCA8IDApIHsKKyAgICB2YWx1ZSA9IG1heDsKKyAgICBleHRlbnQg
PSAwOworICB9CisgIHJldHVybiB7dmFsdWU6dmFsdWUsIGV4dGVudDogZXh0ZW50fTsKK307CisK
Ky8qKgorICogRGV0ZXJtaW5lcyBpZiB0aGUgcGFzc2VkIGNvbnRleHQgaXMgYW4gaW5zdGFuY2Ug
b2YgYSBXZWJHTFJlbmRlcmluZ0NvbnRleHQKKyAqIG9yIGxhdGVyIHZhcmlhbnQgKGxpa2UgV2Vi
R0wyUmVuZGVyaW5nQ29udGV4dCkKKyAqIEBwYXJhbSB7Q2FudmFzUmVuZGVyaW5nQ29udGV4dH0g
Y3R4IFRoZSBjb250ZXh0IHRvIGNoZWNrLgorICovCit2YXIgaXNXZWJHTENvbnRleHQgPSBmdW5j
dGlvbihjdHgpIHsKKyAgaWYgKGN0eCBpbnN0YW5jZW9mIFdlYkdMUmVuZGVyaW5nQ29udGV4dCkK
KyAgICByZXR1cm4gdHJ1ZTsKKworICBpZiAoJ1dlYkdMMlJlbmRlcmluZ0NvbnRleHQnIGluIHdp
bmRvdyAmJiBjdHggaW5zdGFuY2VvZiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0KQorICAgIHJldHVy
biB0cnVlOworCisgIHJldHVybiBmYWxzZTsKK307CisKKy8qKgorICogQ3JlYXRlcyBhIGNoZWNr
IHJlY3QgaXMgdXNlZCBieSBjaGVja0NhbnZhc1JlY3RzLgorICogQHBhcmFtIHtudW1iZXJ9IHgg
bGVmdCBjb3JuZXIgb2YgcmVnaW9uIHRvIGNoZWNrLgorICogQHBhcmFtIHtudW1iZXJ9IHkgYm90
dG9tIGNvcm5lciBvZiByZWdpb24gdG8gY2hlY2sgaW4gY2FzZSBvZiBjaGVja2luZyBmcm9tCisg
KiAgICAgICAgYSBHTCBjb250ZXh0IG9yIHRvcCBjb3JuZXIgaW4gY2FzZSBvZiBjaGVja2luZyBm
cm9tIGEgMkQgY29udGV4dC4KKyAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCB3aWR0aCBvZiByZWdp
b24gdG8gY2hlY2suCisgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IHdpZHRoIG9mIHJlZ2lvbiB0
byBjaGVjay4KKyAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBjb2xvciBUaGUgY29sb3IgZXhw
ZWN0ZWQuIEEgNCBlbGVtZW50IGFycmF5IHdoZXJlCisgKiAgICAgICAgZWFjaCBlbGVtZW50IGlz
IGluIHRoZSByYW5nZSAwIHRvIDI1NS4KKyAqIEBwYXJhbSB7c3RyaW5nfSBvcHRfbXNnIE1lc3Nh
Z2UgdG8gYXNzb2NpYXRlIHdpdGggc3VjY2Vzcy4gRWcKKyAqICAgICAgICAoInNob3VsZCBiZSBy
ZWQiKS4KKyAqIEBwYXJhbSB7bnVtYmVyfSBvcHRfZXJyb3JSYW5nZSBPcHRpb25hbC4gQWNjZXB0
YWJsZSBlcnJvciBpbgorICogICAgICAgIGNvbG9yIGNoZWNraW5nLiAwIGJ5IGRlZmF1bHQuCisg
Ki8KK3ZhciBtYWtlQ2hlY2tSZWN0ID0gZnVuY3Rpb24oeCwgeSwgd2lkdGgsIGhlaWdodCwgY29s
b3IsIG1zZywgZXJyb3JSYW5nZSkgeworICB2YXIgcmVjdCA9IHsKKyAgICAneCc6IHgsICd5Jzog
eSwKKyAgICAnd2lkdGgnOiB3aWR0aCwgJ2hlaWdodCc6IGhlaWdodCwKKyAgICAnY29sb3InOiBj
b2xvciwgJ21zZyc6IG1zZywKKyAgICAnZXJyb3JSYW5nZSc6IGVycm9yUmFuZ2UsCisKKyAgICAn
Y2hlY2tSZWN0JzogZnVuY3Rpb24gKGJ1ZiwgbCwgYiwgdykgeworICAgICAgZm9yICh2YXIgcHgg
PSAoeCAtIGwpIDsgcHggPCAoeCArIHdpZHRoIC0gbCkgOyArK3B4KSB7CisgICAgICAgIGZvciAo
dmFyIHB5ID0gKHkgLSBiKSA7IHB5IDwgKHkgKyBoZWlnaHQgLSBiKSA7ICsrcHkpIHsKKyAgICAg
ICAgICB2YXIgb2Zmc2V0ID0gKHB5ICogdyArIHB4KSAqIDQ7CisgICAgICAgICAgZm9yICh2YXIg
aiA9IDA7IGogPCBjb2xvci5sZW5ndGg7ICsraikgeworICAgICAgICAgICAgaWYgKE1hdGguYWJz
KGJ1ZltvZmZzZXQgKyBqXSAtIGNvbG9yW2pdKSA+IGVycm9yUmFuZ2UpIHsKKyAgICAgICAgICAg
ICAgdGVzdEZhaWxlZChtc2cpOworICAgICAgICAgICAgICB2YXIgd2FzID0gYnVmW29mZnNldCAr
IDBdLnRvU3RyaW5nKCk7CisgICAgICAgICAgICAgIGZvciAoaiA9IDE7IGogPCBjb2xvci5sZW5n
dGg7ICsraikgeworICAgICAgICAgICAgICAgIHdhcyArPSAiLCIgKyBidWZbb2Zmc2V0ICsgal07
CisgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgZGVidWcoJ2F0ICgnICsgcHggKyAnLCAn
ICsgcHkgKworICAgICAgICAgICAgICAgICAgICAnKSBleHBlY3RlZDogJyArIGNvbG9yICsgJyB3
YXMgJyArIHdhcyk7CisgICAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAg
ICAgICB9CisgICAgICAgIH0KKyAgICAgIH0KKyAgICAgIHRlc3RQYXNzZWQobXNnKTsKKyAgICB9
CisgIH0KKyAgcmV0dXJuIHJlY3Q7Cit9OworCisvKioKKyAqIENoZWNrcyB0aGF0IGEgcG9ydGlv
bnMgb2YgYSBjYW52YXMgb3IgdGhlIGN1cnJlbnRseSBhdHRhY2hlZCBmcmFtZWJ1ZmZlciBpcyAx
IGNvbG9yLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQyRH0gZ2wgVGhlCisgKiAgICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCBvciAy
RCBjb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7IUFycmF5LjxjaGVja1JlY3Q+fSBhcnJheSBv
ZiByZWN0cyB0byBjaGVjayBmb3IgbWF0Y2hpbmcgY29sb3IuCisgKi8KK3ZhciBjaGVja0NhbnZh
c1JlY3RzID0gZnVuY3Rpb24oZ2wsIHJlY3RzKSB7CisgIGlmIChyZWN0cy5sZW5ndGggPiAwKSB7
CisgICAgdmFyIGxlZnQgPSByZWN0c1swXS54OworICAgIHZhciByaWdodCA9IHJlY3RzWzBdLngg
KyByZWN0c1sxXS53aWR0aDsKKyAgICB2YXIgYm90dG9tID0gcmVjdHNbMF0ueTsKKyAgICB2YXIg
dG9wID0gcmVjdHNbMF0ueSArIHJlY3RzWzBdLmhlaWdodDsKKyAgICBmb3IgKHZhciBpID0gMTsg
aSA8IHJlY3RzLmxlbmd0aDsgKytpKSB7CisgICAgICBsZWZ0ID0gTWF0aC5taW4obGVmdCwgcmVj
dHNbaV0ueCk7CisgICAgICByaWdodCA9IE1hdGgubWF4KHJpZ2h0LCByZWN0c1tpXS54ICsgcmVj
dHNbaV0ud2lkdGgpOworICAgICAgYm90dG9tID0gTWF0aC5taW4oYm90dG9tLCByZWN0c1tpXS55
KTsKKyAgICAgIHRvcCA9IE1hdGgubWF4KHRvcCwgcmVjdHNbaV0ueSArIHJlY3RzW2ldLmhlaWdo
dCk7CisgICAgfQorICAgIHZhciB3aWR0aCA9IHJpZ2h0IC0gbGVmdDsKKyAgICB2YXIgaGVpZ2h0
ID0gdG9wIC0gYm90dG9tOworICAgIHZhciBidWYgPSBuZXcgVWludDhBcnJheSh3aWR0aCAqIGhl
aWdodCAqIDQpOworICAgIGdsLnJlYWRQaXhlbHMobGVmdCwgYm90dG9tLCB3aWR0aCwgaGVpZ2h0
LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBidWYpOworICAgIGZvciAodmFyIGkgPSAwOyBp
IDwgcmVjdHMubGVuZ3RoOyArK2kpIHsKKyAgICAgIHJlY3RzW2ldLmNoZWNrUmVjdChidWYsIGxl
ZnQsIGJvdHRvbSwgd2lkdGgpOworICAgIH0KKyAgfQorfTsKKworLyoqCisgKiBDaGVja3MgdGhh
dCBhIHBvcnRpb24gb2YgYSBjYW52YXMgb3IgdGhlIGN1cnJlbnRseSBhdHRhY2hlZCBmcmFtZWJ1
ZmZlciBpcyAxIGNvbG9yLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRH0gZ2wgVGhlCisgKiAgICAgICAgIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCBvciAyRCBjb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7bnVtYmVyfSB4IGxlZnQgY29y
bmVyIG9mIHJlZ2lvbiB0byBjaGVjay4KKyAqIEBwYXJhbSB7bnVtYmVyfSB5IGJvdHRvbSBjb3Ju
ZXIgb2YgcmVnaW9uIHRvIGNoZWNrIGluIGNhc2Ugb2YgY2hlY2tpbmcgZnJvbQorICogICAgICAg
IGEgR0wgY29udGV4dCBvciB0b3AgY29ybmVyIGluIGNhc2Ugb2YgY2hlY2tpbmcgZnJvbSBhIDJE
IGNvbnRleHQuCisgKiBAcGFyYW0ge251bWJlcn0gd2lkdGggd2lkdGggb2YgcmVnaW9uIHRvIGNo
ZWNrLgorICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCB3aWR0aCBvZiByZWdpb24gdG8gY2hlY2su
CisgKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gY29sb3IgVGhlIGNvbG9yIGV4cGVjdGVkLiBB
IDQgZWxlbWVudCBhcnJheSB3aGVyZQorICogICAgICAgIGVhY2ggZWxlbWVudCBpcyBpbiB0aGUg
cmFuZ2UgMCB0byAyNTUuCisgKiBAcGFyYW0ge251bWJlcn0gb3B0X2Vycm9yUmFuZ2UgT3B0aW9u
YWwuIEFjY2VwdGFibGUgZXJyb3IgaW4KKyAqICAgICAgICBjb2xvciBjaGVja2luZy4gMCBieSBk
ZWZhdWx0LgorICogQHBhcmFtIHshZnVuY3Rpb24oKX0gc2FtZUZuIEZ1bmN0aW9uIHRvIGNhbGwg
aWYgYWxsIHBpeGVscworICogICAgICAgIGFyZSB0aGUgc2FtZSBhcyBjb2xvci4KKyAqIEBwYXJh
bSB7IWZ1bmN0aW9uKCl9IGRpZmZlcmVudEZuIEZ1bmN0aW9uIHRvIGNhbGwgaWYgYSBwaXhlbAor
ICogICAgICAgIGlzIGRpZmZlcmVudCB0aGFuIGNvbG9yCisgKiBAcGFyYW0geyFmdW5jdGlvbigp
fSBsb2dGbiBGdW5jdGlvbiB0byBjYWxsIGZvciBsb2dnaW5nLgorICogQHBhcmFtIHtUeXBlZEFy
cmF5fSBvcHRfcmVhZEJhY2tCdWYgb3B0aW9uYWwgYnVmZmVyIHRvIHJlYWQgYmFjayBpbnRvLgor
ICogICAgICAgIFR5cGljYWxseSBwYXNzZWQgdG8gZWl0aGVyIHJldXNlIGJ1ZmZlciwgb3Igc3Vw
cG9ydCByZWFkYmFja3MgZnJvbQorICogICAgICAgIGZsb2F0aW5nLXBvaW50L25vcm0xNiBmcmFt
ZWJ1ZmZlcnMuCisgKiBAcGFyYW0ge0dMZW51bX0gb3B0X3JlYWRCYWNrVHlwZSBvcHRpb25hbCBy
ZWFkIGJhY2sgdHlwZSwgZGVmYXVsdGluZyB0bworICogICAgICAgIGdsLlVOU0lHTkVEX0JZVEUu
IENhbiBiZSB1c2VkIHRvIHN1cHBvcnQgcmVhZGJhY2sgZnJvbSBmbG9hdGluZy1wb2ludAorICog
ICAgICAgIC9ub3JtMTYgZnJhbWVidWZmZXJzLgorICogQHBhcmFtIHtHTGVudW19IG9wdF9yZWFk
QmFja0Zvcm1hdCBvcHRpb25hbCByZWFkIGJhY2sgZm9ybWF0LCBkZWZhdWx0aW5nIHRvCisgKiAg
ICAgICAgZ2wuUkdCQS4gQ2FuIGJlIHVzZWQgdG8gc3VwcG9ydCByZWFkYmFjayBmcm9tIG5vcm0x
NgorICogICAgICAgIGZyYW1lYnVmZmVycy4KKyAqLwordmFyIGNoZWNrQ2FudmFzUmVjdENvbG9y
ID0gZnVuY3Rpb24oZ2wsIHgsIHksIHdpZHRoLCBoZWlnaHQsIGNvbG9yLCBvcHRfZXJyb3JSYW5n
ZSwgc2FtZUZuLCBkaWZmZXJlbnRGbiwgbG9nRm4sIG9wdF9yZWFkQmFja0J1Ziwgb3B0X3JlYWRC
YWNrVHlwZSwgb3B0X3JlYWRCYWNrRm9ybWF0KSB7CisgIGlmIChpc1dlYkdMQ29udGV4dChnbCkg
JiYgIWdsLmdldFBhcmFtZXRlcihnbC5GUkFNRUJVRkZFUl9CSU5ESU5HKSkgeworICAgIC8vIFdl
J3JlIHJlYWRpbmcgdGhlIGJhY2tidWZmZXIgc28gY2xpcC4KKyAgICB2YXIgeHIgPSBjbGlwVG9S
YW5nZSh4LCB3aWR0aCwgMCwgZ2wuY2FudmFzLndpZHRoKTsKKyAgICB2YXIgeXIgPSBjbGlwVG9S
YW5nZSh5LCBoZWlnaHQsIDAsIGdsLmNhbnZhcy5oZWlnaHQpOworICAgIGlmICgheHIuZXh0ZW50
IHx8ICF5ci5leHRlbnQpIHsKKyAgICAgIGxvZ0ZuKCJjaGVja2luZyByZWN0OiBlZmZlY3RpdmUg
d2lkdGggb3IgaGVpZ2h0IGlzIHplcm8iKTsKKyAgICAgIHNhbWVGbigpOworICAgICAgcmV0dXJu
OworICAgIH0KKyAgICB4ID0geHIudmFsdWU7CisgICAgeSA9IHlyLnZhbHVlOworICAgIHdpZHRo
ID0geHIuZXh0ZW50OworICAgIGhlaWdodCA9IHlyLmV4dGVudDsKKyAgfQorICB2YXIgZXJyb3JS
YW5nZSA9IG9wdF9lcnJvclJhbmdlIHx8IDA7CisgIGlmICghZXJyb3JSYW5nZS5sZW5ndGgpIHsK
KyAgICBlcnJvclJhbmdlID0gW2Vycm9yUmFuZ2UsIGVycm9yUmFuZ2UsIGVycm9yUmFuZ2UsIGVy
cm9yUmFuZ2VdCisgIH0KKyAgdmFyIGJ1ZjsKKyAgaWYgKGlzV2ViR0xDb250ZXh0KGdsKSkgewor
ICAgIGJ1ZiA9IG9wdF9yZWFkQmFja0J1ZiA/IG9wdF9yZWFkQmFja0J1ZiA6IG5ldyBVaW50OEFy
cmF5KHdpZHRoICogaGVpZ2h0ICogNCk7CisgICAgdmFyIHJlYWRCYWNrVHlwZSA9IG9wdF9yZWFk
QmFja1R5cGUgPyBvcHRfcmVhZEJhY2tUeXBlIDogZ2wuVU5TSUdORURfQllURTsKKyAgICB2YXIg
cmVhZEJhY2tGb3JtYXQgPSBvcHRfcmVhZEJhY2tGb3JtYXQgPyBvcHRfcmVhZEJhY2tGb3JtYXQg
OiBnbC5SR0JBOworICAgIGdsLnJlYWRQaXhlbHMoeCwgeSwgd2lkdGgsIGhlaWdodCwgcmVhZEJh
Y2tGb3JtYXQsIHJlYWRCYWNrVHlwZSwgYnVmKTsKKyAgfSBlbHNlIHsKKyAgICBidWYgPSBnbC5n
ZXRJbWFnZURhdGEoeCwgeSwgd2lkdGgsIGhlaWdodCkuZGF0YTsKKyAgfQorICBmb3IgKHZhciBp
ID0gMDsgaSA8IHdpZHRoICogaGVpZ2h0OyArK2kpIHsKKyAgICB2YXIgb2Zmc2V0ID0gaSAqIDQ7
CisgICAgZm9yICh2YXIgaiA9IDA7IGogPCBjb2xvci5sZW5ndGg7ICsraikgeworICAgICAgaWYg
KE1hdGguYWJzKGJ1ZltvZmZzZXQgKyBqXSAtIGNvbG9yW2pdKSA+IGVycm9yUmFuZ2Vbal0pIHsK
KyAgICAgICAgdmFyIHdhcyA9IGJ1ZltvZmZzZXQgKyAwXS50b1N0cmluZygpOworICAgICAgICBm
b3IgKGogPSAxOyBqIDwgY29sb3IubGVuZ3RoOyArK2opIHsKKyAgICAgICAgICB3YXMgKz0gIiwi
ICsgYnVmW29mZnNldCArIGpdOworICAgICAgICB9CisgICAgICAgIGRpZmZlcmVudEZuKCdhdCAo
JyArICh4ICsgKGkgJSB3aWR0aCkpICsgJywgJyArICh5ICsgTWF0aC5mbG9vcihpIC8gd2lkdGgp
KSArCisgICAgICAgICAgICAgICAgICAgICcpIGV4cGVjdGVkOiAnICsgY29sb3IgKyAnIHdhcyAn
ICsgd2FzKTsKKyAgICAgICAgcmV0dXJuOworICAgICAgfQorICAgIH0KKyAgfQorICBzYW1lRm4o
KTsKK307CisKKy8qKgorICogQ2hlY2tzIHRoYXQgYSBwb3J0aW9uIG9mIGEgY2FudmFzIG9yIHRo
ZSBjdXJyZW50bHkgYXR0YWNoZWQgZnJhbWVidWZmZXIgaXMgMSBjb2xvci4KKyAqIEBwYXJhbSB7
IVdlYkdMUmVuZGVyaW5nQ29udGV4dHxDYW52YXNSZW5kZXJpbmdDb250ZXh0MkR9IGdsIFRoZQor
ICogICAgICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQgb3IgMkQgY29udGV4dCB0byB1c2UuCisg
KiBAcGFyYW0ge251bWJlcn0geCBsZWZ0IGNvcm5lciBvZiByZWdpb24gdG8gY2hlY2suCisgKiBA
cGFyYW0ge251bWJlcn0geSBib3R0b20gY29ybmVyIG9mIHJlZ2lvbiB0byBjaGVjayBpbiBjYXNl
IG9mIGNoZWNraW5nIGZyb20KKyAqICAgICAgICBhIEdMIGNvbnRleHQgb3IgdG9wIGNvcm5lciBp
biBjYXNlIG9mIGNoZWNraW5nIGZyb20gYSAyRCBjb250ZXh0LgorICogQHBhcmFtIHtudW1iZXJ9
IHdpZHRoIHdpZHRoIG9mIHJlZ2lvbiB0byBjaGVjay4KKyAqIEBwYXJhbSB7bnVtYmVyfSBoZWln
aHQgd2lkdGggb2YgcmVnaW9uIHRvIGNoZWNrLgorICogQHBhcmFtIHshQXJyYXkuPG51bWJlcj59
IGNvbG9yIFRoZSBjb2xvciBleHBlY3RlZC4gQSA0IGVsZW1lbnQgYXJyYXkgd2hlcmUKKyAqICAg
ICAgICBlYWNoIGVsZW1lbnQgaXMgaW4gdGhlIHJhbmdlIDAgdG8gMjU1LgorICogQHBhcmFtIHtz
dHJpbmd9IG9wdF9tc2cgTWVzc2FnZSB0byBhc3NvY2lhdGUgd2l0aCBzdWNjZXNzIG9yIGZhaWx1
cmUuIEVnCisgKiAgICAgICAgKCJzaG91bGQgYmUgcmVkIikuCisgKiBAcGFyYW0ge251bWJlcn0g
b3B0X2Vycm9yUmFuZ2UgT3B0aW9uYWwuIEFjY2VwdGFibGUgZXJyb3IgaW4KKyAqICAgICAgICBj
b2xvciBjaGVja2luZy4gMCBieSBkZWZhdWx0LgorICogQHBhcmFtIHtUeXBlZEFycmF5fSBvcHRf
cmVhZEJhY2tCdWYgb3B0aW9uYWwgYnVmZmVyIHRvIHJlYWQgYmFjayBpbnRvLgorICogICAgICAg
IFR5cGljYWxseSBwYXNzZWQgdG8gZWl0aGVyIHJldXNlIGJ1ZmZlciwgb3Igc3VwcG9ydCByZWFk
YmFja3MgZnJvbQorICogICAgICAgIGZsb2F0aW5nLXBvaW50L25vcm0xNiBmcmFtZWJ1ZmZlcnMu
CisgKiBAcGFyYW0ge0dMZW51bX0gb3B0X3JlYWRCYWNrVHlwZSBvcHRpb25hbCByZWFkIGJhY2sg
dHlwZSwgZGVmYXVsdGluZyB0bworICogICAgICAgIGdsLlVOU0lHTkVEX0JZVEUuIENhbiBiZSB1
c2VkIHRvIHN1cHBvcnQgcmVhZGJhY2sgZnJvbSBmbG9hdGluZy1wb2ludAorICogICAgICAgIC9u
b3JtMTYgZnJhbWVidWZmZXJzLgorICogQHBhcmFtIHtHTGVudW19IG9wdF9yZWFkQmFja0Zvcm1h
dCBvcHRpb25hbCByZWFkIGJhY2sgZm9ybWF0LCBkZWZhdWx0aW5nIHRvCisgKiAgICAgICAgZ2wu
UkdCQS4gQ2FuIGJlIHVzZWQgdG8gc3VwcG9ydCByZWFkYmFjayBmcm9tIGZsb2F0aW5nLXBvaW50
CisgKiAgICAgICAgL25vcm0xNiBmcmFtZWJ1ZmZlcnMuCisgKi8KK3ZhciBjaGVja0NhbnZhc1Jl
Y3QgPSBmdW5jdGlvbihnbCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgY29sb3IsIG9wdF9tc2csIG9w
dF9lcnJvclJhbmdlLCBvcHRfcmVhZEJhY2tCdWYsIG9wdF9yZWFkQmFja1R5cGUsIG9wdF9yZWFk
QmFja0Zvcm1hdCkgeworICBjaGVja0NhbnZhc1JlY3RDb2xvcigKKyAgICAgIGdsLCB4LCB5LCB3
aWR0aCwgaGVpZ2h0LCBjb2xvciwgb3B0X2Vycm9yUmFuZ2UsCisgICAgICBmdW5jdGlvbigpIHsK
KyAgICAgICAgdmFyIG1zZyA9IG9wdF9tc2c7CisgICAgICAgIGlmIChtc2cgPT09IHVuZGVmaW5l
ZCkKKyAgICAgICAgICBtc2cgPSAic2hvdWxkIGJlICIgKyBjb2xvci50b1N0cmluZygpOworICAg
ICAgICB0ZXN0UGFzc2VkKG1zZyk7CisgICAgICB9LAorICAgICAgZnVuY3Rpb24oZGlmZmVyZW50
TXNnKSB7CisgICAgICAgIHZhciBtc2cgPSBvcHRfbXNnOworICAgICAgICBpZiAobXNnID09PSB1
bmRlZmluZWQpCisgICAgICAgICAgbXNnID0gInNob3VsZCBiZSAiICsgY29sb3IudG9TdHJpbmco
KTsKKyAgICAgICAgdGVzdEZhaWxlZChtc2cgKyAiXG4iICsgZGlmZmVyZW50TXNnKTsKKyAgICAg
IH0sCisgICAgICBkZWJ1ZywKKyAgICAgIG9wdF9yZWFkQmFja0J1ZiwKKyAgICAgIG9wdF9yZWFk
QmFja1R5cGUsCisgICAgICBvcHRfcmVhZEJhY2tGb3JtYXQpOworfTsKKworLyoqCisgKiBDaGVj
a3MgdGhhdCBhbiBlbnRpcmUgY2FudmFzIG9yIHRoZSBjdXJyZW50bHkgYXR0YWNoZWQgZnJhbWVi
dWZmZXIgaXMgMSBjb2xvci4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dHxDYW52
YXNSZW5kZXJpbmdDb250ZXh0MkR9IGdsIFRoZQorICogICAgICAgICBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQgb3IgMkQgY29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0g
Y29sb3IgVGhlIGNvbG9yIGV4cGVjdGVkLiBBIDQgZWxlbWVudCBhcnJheSB3aGVyZQorICogICAg
ICAgIGVhY2ggZWxlbWVudCBpcyBpbiB0aGUgcmFuZ2UgMCB0byAyNTUuCisgKiBAcGFyYW0ge3N0
cmluZ30gbXNnIE1lc3NhZ2UgdG8gYXNzb2NpYXRlIHdpdGggc3VjY2Vzcy4gRWcgKCJzaG91bGQg
YmUgcmVkIikuCisgKiBAcGFyYW0ge251bWJlcn0gZXJyb3JSYW5nZSBPcHRpb25hbC4gQWNjZXB0
YWJsZSBlcnJvciBpbgorICogICAgICAgIGNvbG9yIGNoZWNraW5nLiAwIGJ5IGRlZmF1bHQuCisg
Ki8KK3ZhciBjaGVja0NhbnZhcyA9IGZ1bmN0aW9uKGdsLCBjb2xvciwgbXNnLCBlcnJvclJhbmdl
KSB7CisgIGNoZWNrQ2FudmFzUmVjdChnbCwgMCwgMCwgZ2wuY2FudmFzLndpZHRoLCBnbC5jYW52
YXMuaGVpZ2h0LCBjb2xvciwgbXNnLCBlcnJvclJhbmdlKTsKK307CisKKy8qKgorICogQ2hlY2tz
IGEgcmVjdGFuZ3VsYXIgYXJlYSBib3RoIGluc2lkZSB0aGUgYXJlYSBhbmQgb3V0c2lkZQorICog
dGhlIGFyZWEuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR8Q2FudmFzUmVuZGVy
aW5nQ29udGV4dDJEfSBnbCBUaGUKKyAqICAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0IG9y
IDJEIGNvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtudW1iZXJ9IHggbGVmdCBjb3JuZXIgb2Yg
cmVnaW9uIHRvIGNoZWNrLgorICogQHBhcmFtIHtudW1iZXJ9IHkgYm90dG9tIGNvcm5lciBvZiBy
ZWdpb24gdG8gY2hlY2sgaW4gY2FzZSBvZiBjaGVja2luZyBmcm9tCisgKiAgICAgICAgYSBHTCBj
b250ZXh0IG9yIHRvcCBjb3JuZXIgaW4gY2FzZSBvZiBjaGVja2luZyBmcm9tIGEgMkQgY29udGV4
dC4KKyAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCB3aWR0aCBvZiByZWdpb24gdG8gY2hlY2suCisg
KiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IHdpZHRoIG9mIHJlZ2lvbiB0byBjaGVjay4KKyAqIEBw
YXJhbSB7IUFycmF5LjxudW1iZXI+fSBpbm5lckNvbG9yIFRoZSBjb2xvciBleHBlY3RlZCBpbnNp
ZGUKKyAqICAgICB0aGUgYXJlYS4gQSA0IGVsZW1lbnQgYXJyYXkgd2hlcmUgZWFjaCBlbGVtZW50
IGlzIGluIHRoZQorICogICAgIHJhbmdlIDAgdG8gMjU1LgorICogQHBhcmFtIHshQXJyYXkuPG51
bWJlcj59IG91dGVyQ29sb3IgVGhlIGNvbG9yIGV4cGVjdGVkCisgKiAgICAgb3V0c2lkZS4gQSA0
IGVsZW1lbnQgYXJyYXkgd2hlcmUgZWFjaCBlbGVtZW50IGlzIGluIHRoZQorICogICAgIHJhbmdl
IDAgdG8gMjU1LgorICogQHBhcmFtIHshbnVtYmVyfSBvcHRfZWRnZVNpemU6IFRoZSBudW1iZXIg
b2YgcGl4ZWxzIHRvIHNraXAKKyAqICAgICBhcm91bmQgdGhlIGVkZ2VzIG9mIHRoZSBhcmVhLiBE
ZWZhdXQgMC4KKyAqIEBwYXJhbSB7IXt3aWR0aDpudW1iZXIsIGhlaWdodDpudW1iZXJ9fSBvcHRf
b3V0ZXJEaW1lbnNpb25zCisgKiAgICAgVGhlIG91dGVyIGRpbWVuc2lvbnMuIERlZmF1bHQgdGhl
IHNpemUgb2YgZ2wuY2FudmFzLgorICovCit2YXIgY2hlY2tBcmVhSW5BbmRPdXQgPSBmdW5jdGlv
bihnbCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgaW5uZXJDb2xvciwgb3V0ZXJDb2xvciwgb3B0X2Vk
Z2VTaXplLCBvcHRfb3V0ZXJEaW1lbnNpb25zKSB7CisgIHZhciBvdXRlckRpbWVuc2lvbnMgPSBv
cHRfb3V0ZXJEaW1lbnNpb25zIHx8IHsgd2lkdGg6IGdsLmNhbnZhcy53aWR0aCwgaGVpZ2h0OiBn
bC5jYW52YXMuaGVpZ2h0IH07CisgIHZhciBlZGdlU2l6ZSA9IG9wdF9lZGdlU2l6ZSB8fCAwOwor
ICBjaGVja0NhbnZhc1JlY3QoZ2wsIHggKyBlZGdlU2l6ZSwgeSArIGVkZ2VTaXplLCB3aWR0aCAt
IGVkZ2VTaXplICogMiwgaGVpZ2h0IC0gZWRnZVNpemUgKiAyLCBpbm5lckNvbG9yKTsKKyAgY2hl
Y2tDYW52YXNSZWN0KGdsLCAwLCAwLCB4IC0gZWRnZVNpemUsIG91dGVyRGltZW5zaW9ucy5oZWln
aHQsIG91dGVyQ29sb3IpOworICBjaGVja0NhbnZhc1JlY3QoZ2wsIHggKyB3aWR0aCArIGVkZ2VT
aXplLCAwLCBvdXRlckRpbWVuc2lvbnMud2lkdGggLSB4IC0gd2lkdGggLSBlZGdlU2l6ZSwgb3V0
ZXJEaW1lbnNpb25zLmhlaWdodCwgb3V0ZXJDb2xvcik7CisgIGNoZWNrQ2FudmFzUmVjdChnbCwg
MCwgMCwgb3V0ZXJEaW1lbnNpb25zLndpZHRoLCB5IC0gZWRnZVNpemUsIG91dGVyQ29sb3IpOwor
ICBjaGVja0NhbnZhc1JlY3QoZ2wsIDAsIHkgKyBoZWlnaHQgKyBlZGdlU2l6ZSwgb3V0ZXJEaW1l
bnNpb25zLndpZHRoLCBvdXRlckRpbWVuc2lvbnMuaGVpZ2h0IC0geSAtIGhlaWdodCAtIGVkZ2VT
aXplLCBvdXRlckNvbG9yKTsKK307CisKKy8qKgorICogQ2hlY2tzIHRoYXQgYW4gZW50aXJlIGJ1
ZmZlciBtYXRjaGVzIHRoZSBmbG9hdGluZyBwb2ludCB2YWx1ZXMgcHJvdmlkZWQuCisgKiAoV2Vi
R0wgMi4wIG9ubHkpCisgKiBAcGFyYW0geyFXZWJHTDJSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUg
V2ViR0wyUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge251bWJlcn0gdGFyZ2V0
IFRoZSBidWZmZXIgdGFyZ2V0IHRvIGJpbmQgdG8uCisgKiBAcGFyYW0geyFBcnJheS48bnVtYmVy
Pn0gZXhwZWN0ZWQgVGhlIHZhbHVlcyBleHBlY3RlZC4KKyAqIEBwYXJhbSB7c3RyaW5nfSBvcHRf
bXNnIE9wdGlvbmFsLiBNZXNzYWdlIHRvIGFzc29jaWF0ZSB3aXRoIHN1Y2Nlc3MuIEVnICgic2hv
dWxkIGJlIHJlZCIpLgorICogQHBhcmFtIHtudW1iZXJ9IG9wdF9lcnJvclJhbmdlIE9wdGlvbmFs
LiBBY2NlcHRhYmxlIGVycm9yIGluIHZhbHVlIGNoZWNraW5nLiAwLjAwMSBieSBkZWZhdWx0Lgor
ICovCit2YXIgY2hlY2tGbG9hdEJ1ZmZlciA9IGZ1bmN0aW9uKGdsLCB0YXJnZXQsIGV4cGVjdGVk
LCBvcHRfbXNnLCBvcHRfZXJyb3JSYW5nZSkgeworICBpZiAob3B0X21zZyA9PT0gdW5kZWZpbmVk
KQorICAgIG9wdF9tc2cgPSAiYnVmZmVyIHNob3VsZCBtYXRjaCBleHBlY3RlZCB2YWx1ZXMiOwor
CisgIGlmIChvcHRfZXJyb3JSYW5nZSA9PT0gdW5kZWZpbmVkKQorICAgIG9wdF9lcnJvclJhbmdl
ID0gMC4wMDE7CisKKyAgdmFyIGZsb2F0QXJyYXkgPSBuZXcgRmxvYXQzMkFycmF5KGV4cGVjdGVk
Lmxlbmd0aCk7CisgIGdsLmdldEJ1ZmZlclN1YkRhdGEodGFyZ2V0LCAwLCBmbG9hdEFycmF5KTsK
KworICBmb3IgKHZhciBpID0gMDsgaSA8IGV4cGVjdGVkLmxlbmd0aDsgaSsrKSB7CisgICAgaWYg
KE1hdGguYWJzKGZsb2F0QXJyYXlbaV0gLSBleHBlY3RlZFtpXSkgPiBvcHRfZXJyb3JSYW5nZSkg
eworICAgICAgdGVzdEZhaWxlZChvcHRfbXNnKTsKKyAgICAgIGRlYnVnKCdhdCBbJyArIGkgKyAn
XSBleHBlY3RlZDogJyArIGV4cGVjdGVkW2ldICsgJyB3YXMgJyArIGZsb2F0QXJyYXlbaV0pOwor
ICAgICAgcmV0dXJuOworICAgIH0KKyAgfQorICB0ZXN0UGFzc2VkKG9wdF9tc2cpOworfTsKKwor
LyoqCisgKiBMb2FkcyBhIHRleHR1cmUsIGNhbGxzIGNhbGxiYWNrIHdoZW4gZmluaXNoZWQuCisg
KiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtzdHJpbmd9IHVybCBVUkwgb2YgaW1hZ2UgdG8gbG9h
ZAorICogQHBhcmFtIHtmdW5jdGlvbighSW1hZ2UpOiB2b2lkfSBjYWxsYmFjayBGdW5jdGlvbiB0
aGF0IGdldHMgY2FsbGVkIGFmdGVyCisgKiAgICAgICAgaW1hZ2UgaGFzIGxvYWRlZAorICogQHJl
dHVybiB7IVdlYkdMVGV4dHVyZX0gVGhlIGNyZWF0ZWQgdGV4dHVyZS4KKyAqLwordmFyIGxvYWRU
ZXh0dXJlID0gZnVuY3Rpb24oZ2wsIHVybCwgY2FsbGJhY2spIHsKKyAgICB2YXIgdGV4dHVyZSA9
IGdsLmNyZWF0ZVRleHR1cmUoKTsKKyAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0
ZXh0dXJlKTsKKyAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQsIGdsLlRFWFRVUkVf
TUlOX0ZJTFRFUiwgZ2wuTkVBUkVTVCk7CisgICAgZ2wudGV4UGFyYW1ldGVyaShnbC5URVhUVVJF
XzJELCBnbC5URVhUVVJFX01BR19GSUxURVIsIGdsLk5FQVJFU1QpOworICAgIHZhciBpbWFnZSA9
IG5ldyBJbWFnZSgpOworICAgIGltYWdlLm9ubG9hZCA9IGZ1bmN0aW9uKCkgeworICAgICAgICBn
bC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICAgICAgZ2wucGl4ZWxT
dG9yZWkoZ2wuVU5QQUNLX0ZMSVBfWV9XRUJHTCwgdHJ1ZSk7CisgICAgICAgIGdsLnRleEltYWdl
MkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wuUkdCQSwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwg
aW1hZ2UpOworICAgICAgICBjYWxsYmFjayhpbWFnZSk7CisgICAgfTsKKyAgICBpbWFnZS5zcmMg
PSB1cmw7CisgICAgcmV0dXJuIHRleHR1cmU7Cit9OworCisvKioKKyAqIENoZWNrcyB3aGV0aGVy
IHRoZSBib3VuZCB0ZXh0dXJlIGhhcyBleHBlY3RlZCBkaW1lbnNpb25zLiBPbmUgY29ybmVyIHBp
eGVsCisgKiBvZiB0aGUgdGV4dHVyZSB3aWxsIGJlIGNoYW5nZWQgYXMgYSBzaWRlIGVmZmVjdC4K
KyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5n
Q29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0geyFXZWJHTFRleHR1cmV9IHRleHR1cmUgVGhlIHRl
eHR1cmUgdG8gY2hlY2suCisgKiBAcGFyYW0ge251bWJlcn0gd2lkdGggRXhwZWN0ZWQgd2lkdGgu
CisgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IEV4cGVjdGVkIGhlaWdodC4KKyAqIEBwYXJhbSB7
R0xlbnVtfSBvcHRfZm9ybWF0IFRoZSB0ZXh0dXJlJ3MgZm9ybWF0LiBEZWZhdWx0cyB0byBSR0JB
LgorICogQHBhcmFtIHtHTGVudW19IG9wdF90eXBlIFRoZSB0ZXh0dXJlJ3MgdHlwZS4gRGVmYXVs
dHMgdG8gVU5TSUdORURfQllURS4KKyAqLwordmFyIGNoZWNrVGV4dHVyZVNpemUgPSBmdW5jdGlv
bihnbCwgd2lkdGgsIGhlaWdodCwgb3B0X2Zvcm1hdCwgb3B0X3R5cGUpIHsKKyAgb3B0X2Zvcm1h
dCA9IG9wdF9mb3JtYXQgfHwgZ2wuUkdCQTsKKyAgb3B0X3R5cGUgPSBvcHRfdHlwZSB8fCBnbC5V
TlNJR05FRF9CWVRFOworCisgIHZhciBudW1FbGVtZW50cyA9IGdldFR5cGVkQXJyYXlFbGVtZW50
c1BlclBpeGVsKGdsLCBvcHRfZm9ybWF0LCBvcHRfdHlwZSk7CisgIHZhciBidWYgPSBuZXcgKGds
VHlwZVRvVHlwZWRBcnJheVR5cGUoZ2wsIG9wdF90eXBlKSkobnVtRWxlbWVudHMpOworCisgIHZh
ciBlcnJvcnMgPSAwOworICBnbC50ZXhTdWJJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHdpZHRo
IC0gMSwgaGVpZ2h0IC0gMSwgMSwgMSwgb3B0X2Zvcm1hdCwgb3B0X3R5cGUsIGJ1Zik7CisgIGlm
IChnbC5nZXRFcnJvcigpICE9IGdsLk5PX0VSUk9SKSB7CisgICAgdGVzdEZhaWxlZCgiVGV4dHVy
ZSB3YXMgc21hbGxlciB0aGFuIHRoZSBleHBlY3RlZCBzaXplICIgKyB3aWR0aCArICJ4IiArIGhl
aWdodCk7CisgICAgKytlcnJvcnM7CisgIH0KKyAgZ2wudGV4U3ViSW1hZ2UyRChnbC5URVhUVVJF
XzJELCAwLCB3aWR0aCAtIDEsIGhlaWdodCwgMSwgMSwgb3B0X2Zvcm1hdCwgb3B0X3R5cGUsIGJ1
Zik7CisgIGlmIChnbC5nZXRFcnJvcigpID09IGdsLk5PX0VSUk9SKSB7CisgICAgdGVzdEZhaWxl
ZCgiVGV4dHVyZSB3YXMgdGFsbGVyIHRoYW4gIiArIGhlaWdodCk7CisgICAgKytlcnJvcnM7Cisg
IH0KKyAgZ2wudGV4U3ViSW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCB3aWR0aCwgaGVpZ2h0IC0g
MSwgMSwgMSwgb3B0X2Zvcm1hdCwgb3B0X3R5cGUsIGJ1Zik7CisgIGlmIChnbC5nZXRFcnJvcigp
ID09IGdsLk5PX0VSUk9SKSB7CisgICAgdGVzdEZhaWxlZCgiVGV4dHVyZSB3YXMgd2lkZXIgdGhh
biAiICsgd2lkdGgpOworICAgICsrZXJyb3JzOworICB9CisgIGlmIChlcnJvcnMgPT0gMCkgewor
ICAgIHRlc3RQYXNzZWQoIlRleHR1cmUgaGFkIHRoZSBleHBlY3RlZCBzaXplICIgKyB3aWR0aCAr
ICJ4IiArIGhlaWdodCk7CisgIH0KK307CisKKy8qKgorICogTWFrZXMgYSBzaGFsbG93IGNvcHkg
b2YgYW4gb2JqZWN0LgorICogQHBhcmFtIHshT2JqZWN0fSBzcmMgT2JqZWN0IHRvIGNvcHkKKyAq
IEByZXR1cm4geyFPYmplY3R9IFRoZSBjb3B5IG9mIHNyYy4KKyAqLwordmFyIHNoYWxsb3dDb3B5
T2JqZWN0ID0gZnVuY3Rpb24oc3JjKSB7CisgIHZhciBkc3QgPSB7fTsKKyAgZm9yICh2YXIgYXR0
ciBpbiBzcmMpIHsKKyAgICBpZiAoc3JjLmhhc093blByb3BlcnR5KGF0dHIpKSB7CisgICAgICBk
c3RbYXR0cl0gPSBzcmNbYXR0cl07CisgICAgfQorICB9CisgIHJldHVybiBkc3Q7Cit9OworCisv
KioKKyAqIENoZWNrcyBpZiBhbiBhdHRyaWJ1dGUgZXhpc3RzIG9uIGFuIG9iamVjdCBjYXNlIGlu
c2Vuc2l0aXZlLgorICogQHBhcmFtIHshT2JqZWN0fSBvYmogT2JqZWN0IHRvIGNoZWNrCisgKiBA
cGFyYW0ge3N0cmluZ30gYXR0ciBOYW1lIG9mIGF0dHJpYnV0ZSB0byBsb29rIGZvci4KKyAqIEBy
ZXR1cm4ge3N0cmluZz99IFRoZSBuYW1lIG9mIHRoZSBhdHRyaWJ1dGUgaWYgaXQgZXhpc3RzLAor
ICogICAgICAgICB1bmRlZmluZWQgaWYgbm90LgorICovCit2YXIgaGFzQXR0cmlidXRlQ2FzZUlu
c2Vuc2l0aXZlID0gZnVuY3Rpb24ob2JqLCBhdHRyKSB7CisgIHZhciBsb3dlciA9IGF0dHIudG9M
b3dlckNhc2UoKTsKKyAgZm9yICh2YXIga2V5IGluIG9iaikgeworICAgIGlmIChvYmouaGFzT3du
UHJvcGVydHkoa2V5KSAmJiBrZXkudG9Mb3dlckNhc2UoKSA9PSBsb3dlcikgeworICAgICAgcmV0
dXJuIGtleTsKKyAgICB9CisgIH0KK307CisKKy8qKgorICogUmV0dXJucyBhIG1hcCBvZiBVUkwg
cXVlcnlzdHJpbmcgb3B0aW9ucworICogQHJldHVybiB7T2JqZWN0P30gT2JqZWN0IGNvbnRhaW5p
bmcgYWxsIHRoZSB2YWx1ZXMgaW4gdGhlIFVSTCBxdWVyeXN0cmluZworICovCit2YXIgZ2V0VXJs
T3B0aW9ucyA9IChmdW5jdGlvbigpIHsKKyAgdmFyIF91cmxPcHRpb25zUGFyc2VkID0gZmFsc2U7
CisgIHZhciBfdXJsT3B0aW9ucyA9IHt9OworICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgaWYg
KCFfdXJsT3B0aW9uc1BhcnNlZCkgeworICAgICAgdmFyIHMgPSB3aW5kb3cubG9jYXRpb24uaHJl
ZjsKKyAgICAgIHZhciBxID0gcy5pbmRleE9mKCI/Iik7CisgICAgICB2YXIgZSA9IHMuaW5kZXhP
ZigiIyIpOworICAgICAgaWYgKGUgPCAwKSB7CisgICAgICAgIGUgPSBzLmxlbmd0aDsKKyAgICAg
IH0KKyAgICAgIHZhciBxdWVyeSA9IHMuc3Vic3RyaW5nKHEgKyAxLCBlKTsKKyAgICAgIHZhciBw
YWlycyA9IHF1ZXJ5LnNwbGl0KCImIik7CisgICAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgcGFp
cnMubGVuZ3RoOyArK2lpKSB7CisgICAgICAgIHZhciBrZXlWYWx1ZSA9IHBhaXJzW2lpXS5zcGxp
dCgiPSIpOworICAgICAgICB2YXIga2V5ID0ga2V5VmFsdWVbMF07CisgICAgICAgIHZhciB2YWx1
ZSA9IGRlY29kZVVSSUNvbXBvbmVudChrZXlWYWx1ZVsxXSk7CisgICAgICAgIF91cmxPcHRpb25z
W2tleV0gPSB2YWx1ZTsKKyAgICAgIH0KKyAgICAgIF91cmxPcHRpb25zUGFyc2VkID0gdHJ1ZTsK
KyAgICB9CisKKyAgICByZXR1cm4gX3VybE9wdGlvbnM7CisgIH0KK30pKCk7CisKK3ZhciBkZWZh
dWx0M0RDb250ZXh0VmVyc2lvbiA9IDE7CisKKy8qKgorICogU2V0IHRoZSBkZWZhdWx0IGNvbnRl
eHQgdmVyc2lvbiBmb3IgY3JlYXRlM0RDb250ZXh0LgorICogSW5pdGlhbGx5IHRoZSBkZWZhdWx0
IHZlcnNpb24gaXMgMS4KKyAqIEBwYXJhbSB7bnVtYmVyfSBEZWZhdWx0IHZlcnNpb24gb2YgV2Vi
R0wgY29udGV4dHMuCisgKi8KK3ZhciBzZXREZWZhdWx0M0RDb250ZXh0VmVyc2lvbiA9IGZ1bmN0
aW9uKHZlcnNpb24pIHsKKyAgICBkZWZhdWx0M0RDb250ZXh0VmVyc2lvbiA9IHZlcnNpb247Cit9
OworCisvKioKKyAqIEdldCB0aGUgZGVmYXVsdCBjb250ZXggdmVyc2lvbiBmb3IgY3JlYXRlM0RD
b250ZXh0LgorICogRmlyc3QgaXQgbG9va3MgYXQgdGhlIFVSSSBvcHRpb24gfHdlYmdsVmVyc2lv
bnwuIElmIGl0IGRvZXMgbm90IGV4aXN0LAorICogdGhlbiBsb29rIGF0IHRoZSBnbG9iYWwgZGVm
YXVsdDNEQ29udGV4dFZlcnNpb24gdmFyaWFibGUuCisgKi8KK3ZhciBnZXREZWZhdWx0M0RDb250
ZXh0VmVyc2lvbiA9IGZ1bmN0aW9uKCkgeworICAgIHJldHVybiBwYXJzZUludChnZXRVcmxPcHRp
b25zKCkud2ViZ2xWZXJzaW9uLCAxMCkgfHwgZGVmYXVsdDNEQ29udGV4dFZlcnNpb247Cit9Owor
CisvKioKKyAqIENyZWF0ZXMgYSB3ZWJnbCBjb250ZXh0LgorICogQHBhcmFtIHshQ2FudmFzfHN0
cmluZ30gb3B0X2NhbnZhcyBUaGUgY2FudmFzIHRhZyB0byBnZXQKKyAqICAgICBjb250ZXh0IGZy
b20uIElmIG9uZSBpcyBub3QgcGFzc2VkIGluIG9uZSB3aWxsIGJlCisgKiAgICAgY3JlYXRlZC4g
SWYgaXQncyBhIHN0cmluZyBpdCdzIGFzc3VtZWQgdG8gYmUgdGhlIGlkIG9mIGEKKyAqICAgICBj
YW52YXMuCisgKiBAcGFyYW0ge09iamVjdH0gb3B0X2F0dHJpYnV0ZXMgQ29udGV4dCBhdHRyaWJ1
dGVzLgorICogQHBhcmFtIHshbnVtYmVyfSBvcHRfdmVyc2lvbiBWZXJzaW9uIG9mIFdlYkdMIGNv
bnRleHQgdG8gY3JlYXRlLgorICogICAgIFRoZSBkZWZhdWx0IHZlcnNpb24gY2FuIGJlIHNldCBi
eSBjYWxsaW5nIHNldERlZmF1bHQzRENvbnRleHRWZXJzaW9uLgorICogQHJldHVybiB7IVdlYkdM
UmVuZGVyaW5nQ29udGV4dH0gVGhlIGNyZWF0ZWQgY29udGV4dC4KKyAqLwordmFyIGNyZWF0ZTNE
Q29udGV4dCA9IGZ1bmN0aW9uKG9wdF9jYW52YXMsIG9wdF9hdHRyaWJ1dGVzLCBvcHRfdmVyc2lv
bikgeworICBpZiAod2luZG93LmluaXRUZXN0aW5nSGFybmVzcykgeworICAgIHdpbmRvdy5pbml0
VGVzdGluZ0hhcm5lc3MoKTsKKyAgfQorICB2YXIgYXR0cmlidXRlcyA9IHNoYWxsb3dDb3B5T2Jq
ZWN0KG9wdF9hdHRyaWJ1dGVzIHx8IHt9KTsKKyAgaWYgKCFoYXNBdHRyaWJ1dGVDYXNlSW5zZW5z
aXRpdmUoYXR0cmlidXRlcywgImFudGlhbGlhcyIpKSB7CisgICAgYXR0cmlidXRlcy5hbnRpYWxp
YXMgPSBmYWxzZTsKKyAgfQorICBpZiAoIW9wdF92ZXJzaW9uKSB7CisgICAgb3B0X3ZlcnNpb24g
PSBnZXREZWZhdWx0M0RDb250ZXh0VmVyc2lvbigpOworICB9CisgIG9wdF9jYW52YXMgPSBvcHRf
Y2FudmFzIHx8IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOworICBpZiAodHlwZW9m
IG9wdF9jYW52YXMgPT0gJ3N0cmluZycpIHsKKyAgICBvcHRfY2FudmFzID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQob3B0X2NhbnZhcyk7CisgIH0KKyAgdmFyIGNvbnRleHQgPSBudWxsOworCisg
IHZhciBuYW1lczsKKyAgc3dpdGNoIChvcHRfdmVyc2lvbikgeworICAgIGNhc2UgMjoKKyAgICAg
IG5hbWVzID0gWyJ3ZWJnbDIiXTsgYnJlYWs7CisgICAgZGVmYXVsdDoKKyAgICAgIG5hbWVzID0g
WyJ3ZWJnbCIsICJleHBlcmltZW50YWwtd2ViZ2wiXTsgYnJlYWs7CisgIH0KKworICBmb3IgKHZh
ciBpID0gMDsgaSA8IG5hbWVzLmxlbmd0aDsgKytpKSB7CisgICAgdHJ5IHsKKyAgICAgIGNvbnRl
eHQgPSBvcHRfY2FudmFzLmdldENvbnRleHQobmFtZXNbaV0sIGF0dHJpYnV0ZXMpOworICAgIH0g
Y2F0Y2ggKGUpIHsKKyAgICB9CisgICAgaWYgKGNvbnRleHQpIHsKKyAgICAgIGJyZWFrOworICAg
IH0KKyAgfQorICBpZiAoIWNvbnRleHQpIHsKKyAgICB0ZXN0RmFpbGVkKCJVbmFibGUgdG8gZmV0
Y2ggV2ViR0wgcmVuZGVyaW5nIGNvbnRleHQgZm9yIENhbnZhcyIpOworICB9IGVsc2UgeworICAg
IGlmICghd2luZG93Ll93dHVfY29udGV4dHMpIHsKKyAgICAgIHdpbmRvdy5fd3R1X2NvbnRleHRz
ID0gW10KKyAgICB9CisgICAgd2luZG93Ll93dHVfY29udGV4dHMucHVzaChjb250ZXh0KTsKKyAg
fQorICByZXR1cm4gY29udGV4dDsKK307CisKKy8qKgorICogSW5kaWNhdGVzIHdoZXRoZXIgdGhl
IGdpdmVuIGNvbnRleHQgaXMgV2ViR0wgMi4wIG9yIGdyZWF0ZXIuCisgKiBAcGFyYW0geyFXZWJH
TFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgor
ICogQHJldHVybiB7Ym9vbGVhbn0gVHJ1ZSBpZiB0aGUgZ2l2ZW4gY29udGV4dCBpcyBXZWJHTCAy
LjAgb3IgZ3JlYXRlci4KKyAqLwordmFyIGlzV2ViR0wyID0gZnVuY3Rpb24oZ2wpIHsKKyAgLy8g
RHVjayB0eXBpbmcgaXMgdXNlZCBzbyB0aGF0IHRoZSBjb25mb3JtYW5jZSBzdWl0ZSBjYW4gYmUg
cnVuCisgIC8vIGFnYWluc3QgbGlicmFyaWVzIGVtdWxhdGluZyBXZWJHTCAxLjAgb24gdG9wIG9m
IFdlYkdMIDIuMC4KKyAgcmV0dXJuICEhZ2wuZHJhd0FycmF5c0luc3RhbmNlZDsKK307CisKKy8q
KgorICogRGVmaW5lcyB0aGUgZXhjZXB0aW9uIHR5cGUgZm9yIGEgR0wgZXJyb3IuCisgKiBAY29u
c3RydWN0b3IKKyAqIEBwYXJhbSB7c3RyaW5nfSBtZXNzYWdlIFRoZSBlcnJvciBtZXNzYWdlLgor
ICogQHBhcmFtIHtudW1iZXJ9IGVycm9yIEdMIGVycm9yIGNvZGUKKyAqLworZnVuY3Rpb24gR0xF
cnJvckV4Y2VwdGlvbiAobWVzc2FnZSwgZXJyb3IpIHsKKyAgIHRoaXMubWVzc2FnZSA9IG1lc3Nh
Z2U7CisgICB0aGlzLm5hbWUgPSAiR0xFcnJvckV4Y2VwdGlvbiI7CisgICB0aGlzLmVycm9yID0g
ZXJyb3I7Cit9OworCisvKioKKyAqIFdyYXBzIGEgV2ViR0wgZnVuY3Rpb24gd2l0aCBhIGZ1bmN0
aW9uIHRoYXQgdGhyb3dzIGFuIGV4Y2VwdGlvbiBpZiB0aGVyZSBpcworICogYW4gZXJyb3IuCisg
KiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtzdHJpbmd9IGZuYW1lIE5hbWUgb2YgZnVuY3Rpb24g
dG8gd3JhcC4KKyAqIEByZXR1cm4ge2Z1bmN0aW9uKCl9IFRoZSB3cmFwcGVkIGZ1bmN0aW9uLgor
ICovCit2YXIgY3JlYXRlR0xFcnJvcldyYXBwZXIgPSBmdW5jdGlvbihjb250ZXh0LCBmbmFtZSkg
eworICByZXR1cm4gZnVuY3Rpb24oKSB7CisgICAgdmFyIHJ2ID0gY29udGV4dFtmbmFtZV0uYXBw
bHkoY29udGV4dCwgYXJndW1lbnRzKTsKKyAgICB2YXIgZXJyID0gY29udGV4dC5nZXRFcnJvcigp
OworICAgIGlmIChlcnIgIT0gY29udGV4dC5OT19FUlJPUikgeworICAgICAgdmFyIG1zZyA9ICJH
TCBlcnJvciAiICsgZ2xFbnVtVG9TdHJpbmcoY29udGV4dCwgZXJyKSArICIgaW4gIiArIGZuYW1l
OworICAgICAgdGhyb3cgbmV3IEdMRXJyb3JFeGNlcHRpb24obXNnLCBlcnIpOworICAgIH0KKyAg
ICByZXR1cm4gcnY7CisgIH07Cit9OworCisvKioKKyAqIENyZWF0ZXMgYSBXZWJHTCBjb250ZXh0
IHdoZXJlIGFsbCBmdW5jdGlvbnMgYXJlIHdyYXBwZWQgdG8gdGhyb3cgYW4gZXhjZXB0aW9uCisg
KiBpZiB0aGVyZSBpcyBhbiBlcnJvci4KKyAqIEBwYXJhbSB7IUNhbnZhc30gY2FudmFzIFRoZSBI
VE1MIGNhbnZhcyB0byBnZXQgYSBjb250ZXh0IGZyb20uCisgKiBAcGFyYW0ge09iamVjdH0gb3B0
X2F0dHJpYnV0ZXMgQ29udGV4dCBhdHRyaWJ1dGVzLgorICogQHBhcmFtIHshbnVtYmVyfSBvcHRf
dmVyc2lvbiBWZXJzaW9uIG9mIFdlYkdMIGNvbnRleHQgdG8gY3JlYXRlCisgKiBAcmV0dXJuIHsh
T2JqZWN0fSBUaGUgd3JhcHBlZCBjb250ZXh0LgorICovCitmdW5jdGlvbiBjcmVhdGUzRENvbnRl
eHRXaXRoV3JhcHBlclRoYXRUaHJvd3NPbkdMRXJyb3IoY2FudmFzLCBvcHRfYXR0cmlidXRlcywg
b3B0X3ZlcnNpb24pIHsKKyAgdmFyIGNvbnRleHQgPSBjcmVhdGUzRENvbnRleHQoY2FudmFzLCBv
cHRfYXR0cmlidXRlcywgb3B0X3ZlcnNpb24pOworICB2YXIgd3JhcCA9IHt9OworICBmb3IgKHZh
ciBpIGluIGNvbnRleHQpIHsKKyAgICB0cnkgeworICAgICAgaWYgKHR5cGVvZiBjb250ZXh0W2ld
ID09ICdmdW5jdGlvbicpIHsKKyAgICAgICAgd3JhcFtpXSA9IGNyZWF0ZUdMRXJyb3JXcmFwcGVy
KGNvbnRleHQsIGkpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgd3JhcFtpXSA9IGNvbnRleHRb
aV07CisgICAgICB9CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgZXJyb3IoImNyZWF0ZUNvbnRl
eHRXcmFwcGVyVGhhdFRocm93c09uR0xFcnJvcjogRXJyb3IgYWNjZXNzaW5nICIgKyBpKTsKKyAg
ICB9CisgIH0KKyAgd3JhcC5nZXRFcnJvciA9IGZ1bmN0aW9uKCkgeworICAgICAgcmV0dXJuIGNv
bnRleHQuZ2V0RXJyb3IoKTsKKyAgfTsKKyAgcmV0dXJuIHdyYXA7Cit9OworCisvKioKKyAqIFRl
c3RzIHRoYXQgYW4gZXZhbHVhdGVkIGV4cHJlc3Npb24gZ2VuZXJhdGVzIGEgc3BlY2lmaWMgR0wg
ZXJyb3IuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJl
bmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtudW1iZXJ8QXJyYXkuPG51bWJlcj59
IGdsRXJyb3JzIFRoZSBleHBlY3RlZCBnbCBlcnJvciBvciBhbiBhcnJheSBvZiBleHBlY3RlZCBl
cnJvcnMuCisgKiBAcGFyYW0ge3N0cmluZ30gZXZhbFN0ciBUaGUgc3RyaW5nIHRvIGV2YWx1YXRl
LgorICovCit2YXIgc2hvdWxkR2VuZXJhdGVHTEVycm9yID0gZnVuY3Rpb24oZ2wsIGdsRXJyb3Jz
LCBldmFsU3RyLCBvcHRfbXNnKSB7CisgIHZhciBleGNlcHRpb247CisgIHRyeSB7CisgICAgZXZh
bChldmFsU3RyKTsKKyAgfSBjYXRjaCAoZSkgeworICAgIGV4Y2VwdGlvbiA9IGU7CisgIH0KKyAg
aWYgKGV4Y2VwdGlvbikgeworICAgIHRlc3RGYWlsZWQoZXZhbFN0ciArICIgdGhyZXcgZXhjZXB0
aW9uICIgKyBleGNlcHRpb24pOworICAgIHJldHVybiAtMTsKKyAgfSBlbHNlIHsKKyAgICBpZiAo
IW9wdF9tc2cpIHsKKyAgICAgIG9wdF9tc2cgPSAiYWZ0ZXIgZXZhbHVhdGluZzogIiArIGV2YWxT
dHI7CisgICAgfQorICAgIHJldHVybiBnbEVycm9yU2hvdWxkQmUoZ2wsIGdsRXJyb3JzLCBvcHRf
bXNnKTsKKyAgfQorfTsKKworLyoqCisgKiBUZXN0cyB0aGF0IGFuIGV2YWx1YXRlZCBleHByZXNz
aW9uIGRvZXMgbm90IGdlbmVyYXRlIGEgR0wgZXJyb3IuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRl
cmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBh
cmFtIHtzdHJpbmd9IGV2YWxTdHIgVGhlIHN0cmluZyB0byBldmFsdWF0ZS4KKyAqLwordmFyIGZh
aWxJZkdMRXJyb3IgPSBmdW5jdGlvbihnbCwgZXZhbFN0cikgeworICB2YXIgZXhjZXB0aW9uOwor
ICB0cnkgeworICAgIGV2YWwoZXZhbFN0cik7CisgIH0gY2F0Y2ggKGUpIHsKKyAgICBleGNlcHRp
b24gPSBlOworICB9CisgIGlmIChleGNlcHRpb24pIHsKKyAgICB0ZXN0RmFpbGVkKGV2YWxTdHIg
KyAiIHRocmV3IGV4Y2VwdGlvbiAiICsgZXhjZXB0aW9uKTsKKyAgfSBlbHNlIHsKKyAgICBnbEVy
cm9yU2hvdWxkQmVJbXBsKGdsLCBnbC5OT19FUlJPUiwgZmFsc2UsICJhZnRlciBldmFsdWF0aW5n
OiAiICsgZXZhbFN0cik7CisgIH0KK307CisKKy8qKgorICogVGVzdHMgdGhhdCB0aGUgZmlyc3Qg
ZXJyb3IgR0wgcmV0dXJucyBpcyB0aGUgc3BlY2lmaWVkIGVycm9yLgorICogQHBhcmFtIHshV2Vi
R0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4K
KyAqIEBwYXJhbSB7bnVtYmVyfEFycmF5LjxudW1iZXI+fSBnbEVycm9ycyBUaGUgZXhwZWN0ZWQg
Z2wgZXJyb3Igb3IgYW4gYXJyYXkgb2YgZXhwZWN0ZWQgZXJyb3JzLgorICogQHBhcmFtIHtzdHJp
bmd9IG9wdF9tc2cgT3B0aW9uYWwgYWRkaXRpb25hbCBtZXNzYWdlLgorICovCit2YXIgZ2xFcnJv
clNob3VsZEJlID0gZnVuY3Rpb24oZ2wsIGdsRXJyb3JzLCBvcHRfbXNnKSB7CisgIHJldHVybiBn
bEVycm9yU2hvdWxkQmVJbXBsKGdsLCBnbEVycm9ycywgdHJ1ZSwgb3B0X21zZyk7Cit9OworCisv
KioKKyAqIFRlc3RzIHRoYXQgdGhlIGdpdmVuIGZyYW1lYnVmZmVyIGhhcyBhIHNwZWNpZmljIHN0
YXR1cworICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7bnVtYmVyfEFycmF5LjxudW1iZXI+fSBn
bFN0YXR1c2VzIFRoZSBleHBlY3RlZCBnbAorICogICAgICAgIHN0YXR1cyBvciBhbiBhcnJheSBv
ZiBleHBlY3RlZCBzdGF0dXNlcy4KKyAqIEBwYXJhbSB7c3RyaW5nfSBvcHRfbXNnIE9wdGlvbmFs
IGFkZGl0aW9uYWwgbWVzc2FnZS4KKyAqLwordmFyIGZyYW1lYnVmZmVyU3RhdHVzU2hvdWxkQmUg
PSBmdW5jdGlvbihnbCwgdGFyZ2V0LCBnbFN0YXR1c2VzLCBvcHRfbXNnKSB7CisgIGlmICghZ2xT
dGF0dXNlcy5sZW5ndGgpIHsKKyAgICBnbFN0YXR1c2VzID0gW2dsU3RhdHVzZXNdOworICB9Cisg
IG9wdF9tc2cgPSBvcHRfbXNnIHx8ICIiOworICBjb25zdCBzdGF0dXMgPSBnbC5jaGVja0ZyYW1l
YnVmZmVyU3RhdHVzKHRhcmdldCk7CisgIGNvbnN0IG5keCA9IGdsU3RhdHVzZXMuaW5kZXhPZihz
dGF0dXMpOworICBjb25zdCBleHBlY3RlZCA9IGdsU3RhdHVzZXMubWFwKChzdGF0dXMpID0+IHsK
KyAgICByZXR1cm4gZ2xFbnVtVG9TdHJpbmcoZ2wsIHN0YXR1cyk7CisgIH0pLmpvaW4oJyBvciAn
KTsKKyAgaWYgKG5keCA8IDApIHsKKyAgICB2YXIgbXNnID0gImNoZWNrRnJhbWVidWZmZXJTdGF0
dXMgZXhwZWN0ZWQiICsgKChnbFN0YXR1c2VzLmxlbmd0aCA+IDEpID8gIiBvbmUgb2Y6ICIgOiAi
OiAiKTsKKyAgICB0ZXN0RmFpbGVkKG1zZyArIGV4cGVjdGVkICsgICIuIFdhcyAiICsgZ2xFbnVt
VG9TdHJpbmcoZ2wsIHN0YXR1cykgKyAiIDogIiArIG9wdF9tc2cpOworICB9IGVsc2UgeworICAg
IHZhciBtc2cgPSAiY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyB3YXMgIiArICgoZ2xTdGF0dXNlcy5s
ZW5ndGggPiAxKSA/ICJvbmUgb2Y6ICIgOiAiZXhwZWN0ZWQgdmFsdWU6ICIpOworICAgIHRlc3RQ
YXNzZWQobXNnICsgZXhwZWN0ZWQgKyAiIDogIiArIG9wdF9tc2cpOworICB9CisgIHJldHVybiBz
dGF0dXM7Cit9CisKKy8qKgorICogVGVzdHMgdGhhdCB0aGUgZmlyc3QgZXJyb3IgR0wgcmV0dXJu
cyBpcyB0aGUgc3BlY2lmaWVkIGVycm9yLiBBbGxvd3Mgc3VwcHJlc3Npb24gb2Ygc3VjY2Vzc2Vz
LgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJp
bmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7bnVtYmVyfEFycmF5LjxudW1iZXI+fSBnbEVy
cm9ycyBUaGUgZXhwZWN0ZWQgZ2wgZXJyb3Igb3IgYW4gYXJyYXkgb2YgZXhwZWN0ZWQgZXJyb3Jz
LgorICogQHBhcmFtIHtib29sZWFufSByZXBvcnRTdWNjZXNzZXMgV2hldGhlciB0byByZXBvcnQg
c3VjY2Vzc2VzIGFzIHBhc3Nlcywgb3IgdG8gc2lsZW50bHkgcGFzcy4KKyAqIEBwYXJhbSB7c3Ry
aW5nfSBvcHRfbXNnIE9wdGlvbmFsIGFkZGl0aW9uYWwgbWVzc2FnZS4KKyAqLwordmFyIGdsRXJy
b3JTaG91bGRCZUltcGwgPSBmdW5jdGlvbihnbCwgZ2xFcnJvcnMsIHJlcG9ydFN1Y2Nlc3Nlcywg
b3B0X21zZykgeworICBpZiAoIWdsRXJyb3JzLmxlbmd0aCkgeworICAgIGdsRXJyb3JzID0gW2ds
RXJyb3JzXTsKKyAgfQorICBvcHRfbXNnID0gb3B0X21zZyB8fCAiIjsKKworICBjb25zdCBmbkVy
clN0ciA9IGZ1bmN0aW9uKGVyclZhbCkgeworICAgIGlmIChlcnJWYWwgPT0gMCkgcmV0dXJuICJO
T19FUlJPUiI7CisgICAgcmV0dXJuIGdsRW51bVRvU3RyaW5nKGdsLCBlcnJWYWwpOworICB9Owor
CisgIHZhciBlcnIgPSBnbC5nZXRFcnJvcigpOworICB2YXIgbmR4ID0gZ2xFcnJvcnMuaW5kZXhP
ZihlcnIpOworICB2YXIgZXJyU3RycyA9IFtdOworICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgZ2xF
cnJvcnMubGVuZ3RoOyArK2lpKSB7CisgICAgZXJyU3Rycy5wdXNoKGZuRXJyU3RyKGdsRXJyb3Jz
W2lpXSkpOworICB9CisgIHZhciBleHBlY3RlZCA9IGVyclN0cnMuam9pbigiIG9yICIpOworICBp
ZiAobmR4IDwgMCkgeworICAgIHZhciBtc2cgPSAiZ2V0RXJyb3IgZXhwZWN0ZWQiICsgKChnbEVy
cm9ycy5sZW5ndGggPiAxKSA/ICIgb25lIG9mOiAiIDogIjogIik7CisgICAgdGVzdEZhaWxlZCht
c2cgKyBleHBlY3RlZCArICAiLiBXYXMgIiArIGZuRXJyU3RyKGVycikgKyAiIDogIiArIG9wdF9t
c2cpOworICB9IGVsc2UgaWYgKHJlcG9ydFN1Y2Nlc3NlcykgeworICAgIHZhciBtc2cgPSAiZ2V0
RXJyb3Igd2FzICIgKyAoKGdsRXJyb3JzLmxlbmd0aCA+IDEpID8gIm9uZSBvZjogIiA6ICJleHBl
Y3RlZCB2YWx1ZTogIik7CisgICAgdGVzdFBhc3NlZChtc2cgKyBleHBlY3RlZCArICIgOiAiICsg
b3B0X21zZyk7CisgIH0KKyAgcmV0dXJuIGVycjsKK307CisKKy8qKgorICogVGVzdHMgdGhhdCBh
IGZ1bmN0aW9uIHRocm93cyBvciBub3QuCisgKiBAcGFyYW0geyFXZWJHTENvbnRleHR9IGdsIFRo
ZSBXZWJHTENvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHRocm93VHlwZSBUeXBlIG9mIHRocm93
biBlcnJvciAoZS5nLiBUeXBlRXJyb3IpLCBvciBmYWxzZS4KKyAqIEBwYXJhbSB7c3RyaW5nfSBp
bmZvIEluZm8gb24gd2hhdCdzIGJlaW5nIHRlc3RlZAorICogQHBhcmFtIHtmdW5jdGlvbn0gZnVu
YyBUaGUgZnVuYyB0byB0ZXN0LgorICovCit2YXIgc2hvdWxkVGhyb3cgPSBmdW5jdGlvbihnbCwg
dGhyb3dUeXBlLCBpbmZvLCBmdW5jKSB7CisgIHdoaWxlIChnbC5nZXRFcnJvcigpKSB7fQorCisg
IHZhciBzaG91bGRUaHJvdyA9ICh0aHJvd1R5cGUgIT0gZmFsc2UpOworCisgIHRyeSB7CisgICAg
ZnVuYygpOworCisgICAgaWYgKHNob3VsZFRocm93KSB7CisgICAgICB0ZXN0RmFpbGVkKCJTaG91
bGQgdGhyb3cgYSAiICsgdGhyb3dUeXBlLm5hbWUgKyAiOiAiICsgaW5mbyk7CisgICAgfSBlbHNl
IHsKKyAgICAgIHRlc3RQYXNzZWQoIlNob3VsZCBub3QgaGF2ZSB0aHJvd246ICIgKyBpbmZvKTsK
KyAgICB9CisgIH0gY2F0Y2ggKGUpIHsKKyAgICBpZiAoc2hvdWxkVGhyb3cpIHsKKyAgICAgIGlm
IChlIGluc3RhbmNlb2YgdGhyb3dUeXBlKSB7CisgICAgICAgIHRlc3RQYXNzZWQoIlNob3VsZCB0
aHJvdyBhICIgKyB0aHJvd1R5cGUubmFtZSArICI6ICIgKyBpbmZvKTsKKyAgICAgIH0gZWxzZSB7
CisgICAgICAgIHRlc3RGYWlsZWQoIlNob3VsZCB0aHJvdyBhICIgKyB0aHJvd1R5cGUubmFtZSAr
ICIsIHRocmV3ICIgKyBlLm5hbWUgKyAiOiAiICsgaW5mbyk7CisgICAgICB9CisgICAgfSBlbHNl
IHsKKyAgICAgIHRlc3RGYWlsZWQoIlNob3VsZCBub3QgaGF2ZSB0aHJvd246ICIgKyBpbmZvKTsK
KyAgICB9CisKKyAgICBpZiAoZ2wuZ2V0RXJyb3IoKSkgeworICAgICAgdGVzdEZhaWxlZCgiU2hv
dWxkIG5vdCBnZW5lcmF0ZSBhbiBlcnJvciB3aGVuIHRocm93aW5nOiAiICsgaW5mbyk7CisgICAg
fQorICB9CisKKyAgd2hpbGUgKGdsLmdldEVycm9yKCkpIHt9Cit9OworCisvKioKKyAqIExpbmtz
IGEgV2ViR0wgcHJvZ3JhbSwgdGhyb3dzIGlmIHRoZXJlIGFyZSBlcnJvcnMuCisgKiBAcGFyYW0g
eyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8g
dXNlLgorICogQHBhcmFtIHshV2ViR0xQcm9ncmFtfSBwcm9ncmFtIFRoZSBXZWJHTFByb2dyYW0g
dG8gbGluay4KKyAqIEBwYXJhbSB7ZnVuY3Rpb24oc3RyaW5nKTogdm9pZH0gb3B0X2Vycm9yQ2Fs
bGJhY2sgY2FsbGJhY2sgZm9yIGVycm9ycy4KKyAqLwordmFyIGxpbmtQcm9ncmFtID0gZnVuY3Rp
b24oZ2wsIHByb2dyYW0sIG9wdF9lcnJvckNhbGxiYWNrKSB7CisgIHZhciBlcnJGbiA9IG9wdF9l
cnJvckNhbGxiYWNrIHx8IHRlc3RGYWlsZWQ7CisgIC8vIExpbmsgdGhlIHByb2dyYW0KKyAgZ2wu
bGlua1Byb2dyYW0ocHJvZ3JhbSk7CisKKyAgLy8gQ2hlY2sgdGhlIGxpbmsgc3RhdHVzCisgIHZh
ciBsaW5rZWQgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHByb2dyYW0sIGdsLkxJTktfU1RBVFVT
KTsKKyAgaWYgKCFsaW5rZWQpIHsKKyAgICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIHRo
ZSBsaW5rCisgICAgdmFyIGVycm9yID0gZ2wuZ2V0UHJvZ3JhbUluZm9Mb2cgKHByb2dyYW0pOwor
CisgICAgZXJyRm4oIkVycm9yIGluIHByb2dyYW0gbGlua2luZzoiICsgZXJyb3IpOworCisgICAg
Z2wuZGVsZXRlUHJvZ3JhbShwcm9ncmFtKTsKKyAgfQorfTsKKworLyoqCisgKiBMb2FkcyB0ZXh0
IGZyb20gYW4gZXh0ZXJuYWwgZmlsZS4gVGhpcyBmdW5jdGlvbiBpcyBhc3luY2hyb25vdXMuCisg
KiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSB1cmwgb2YgdGhlIGV4dGVybmFsIGZpbGUuCisgKiBA
cGFyYW0geyFmdW5jdGlvbihib29sLCBzdHJpbmcpOiB2b2lkfSBjYWxsYmFjayB0aGF0IGlzIHNl
bnQgYSBib29sIGZvcgorICogICAgIHN1Y2Nlc3MgYW5kIHRoZSBzdHJpbmcuCisgKi8KK3ZhciBs
b2FkVGV4dEZpbGVBc3luYyA9IGZ1bmN0aW9uKHVybCwgY2FsbGJhY2spIHsKKyAgbG9nICgibG9h
ZGluZzogIiArIHVybCk7CisgIHZhciBlcnJvciA9ICdsb2FkVGV4dEZpbGVBc3luYyBmYWlsZWQg
dG8gbG9hZCB1cmwgIicgKyB1cmwgKyAnIic7CisgIHZhciByZXF1ZXN0OworICBpZiAod2luZG93
LlhNTEh0dHBSZXF1ZXN0KSB7CisgICAgcmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOwor
ICAgIGlmIChyZXF1ZXN0Lm92ZXJyaWRlTWltZVR5cGUpIHsKKyAgICAgIHJlcXVlc3Qub3ZlcnJp
ZGVNaW1lVHlwZSgndGV4dC9wbGFpbicpOworICAgIH0KKyAgfSBlbHNlIHsKKyAgICB0aHJvdyAn
WE1MSHR0cFJlcXVlc3QgaXMgZGlzYWJsZWQnOworICB9CisgIHRyeSB7CisgICAgcmVxdWVzdC5v
cGVuKCdHRVQnLCB1cmwsIHRydWUpOworICAgIHJlcXVlc3Qub25yZWFkeXN0YXRlY2hhbmdlID0g
ZnVuY3Rpb24oKSB7CisgICAgICBpZiAocmVxdWVzdC5yZWFkeVN0YXRlID09IDQpIHsKKyAgICAg
ICAgdmFyIHRleHQgPSAnJzsKKyAgICAgICAgLy8gSFRUUCByZXBvcnRzIHN1Y2Nlc3Mgd2l0aCBh
IDIwMCBzdGF0dXMuIFRoZSBmaWxlIHByb3RvY29sIHJlcG9ydHMKKyAgICAgICAgLy8gc3VjY2Vz
cyB3aXRoIHplcm8uIEhUVFAgZG9lcyBub3QgdXNlIHplcm8gYXMgYSBzdGF0dXMgY29kZSAodGhl
eQorICAgICAgICAvLyBzdGFydCBhdCAxMDApLgorICAgICAgICAvLyBodHRwczovL2RldmVsb3Bl
ci5tb3ppbGxhLm9yZy9Fbi9Vc2luZ19YTUxIdHRwUmVxdWVzdAorICAgICAgICB2YXIgc3VjY2Vz
cyA9IHJlcXVlc3Quc3RhdHVzID09IDIwMCB8fCByZXF1ZXN0LnN0YXR1cyA9PSAwOworICAgICAg
ICBpZiAoc3VjY2VzcykgeworICAgICAgICAgIHRleHQgPSByZXF1ZXN0LnJlc3BvbnNlVGV4dDsK
KyAgICAgICAgICBsb2coImNvbXBsZXRlZCBsb2FkIHJlcXVlc3Q6ICIgKyB1cmwpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgIGxvZygibG9hZGluZyAiICsgdXJsICsgIiByZXN1bHRlZCBp
biB1bmV4cGVjdGVkIHN0YXR1czogIiArIHJlcXVlc3Quc3RhdHVzICsgIiAiICsgcmVxdWVzdC5z
dGF0dXNUZXh0KTsKKyAgICAgICAgfQorICAgICAgICBjYWxsYmFjayhzdWNjZXNzLCB0ZXh0KTsK
KyAgICAgIH0KKyAgICB9OworICAgIHJlcXVlc3Qub25lcnJvciA9IGZ1bmN0aW9uKGVycm9yRXZl
bnQpIHsKKyAgICAgIGxvZygiZXJyb3Igb2NjdXJyZWQgbG9hZGluZyAiICsgdXJsKTsKKyAgICAg
IGNhbGxiYWNrKGZhbHNlLCAnJyk7CisgICAgfTsKKyAgICByZXF1ZXN0LnNlbmQobnVsbCk7Cisg
IH0gY2F0Y2ggKGVycikgeworICAgIGxvZygiZmFpbGVkIHRvIGxvYWQ6ICIgKyB1cmwgKyAiIHdp
dGggZXhjZXB0aW9uICIgKyBlcnIubWVzc2FnZSk7CisgICAgY2FsbGJhY2soZmFsc2UsICcnKTsK
KyAgfQorfTsKKworLyoqCisgKiBSZWN1cnNpdmVseSBsb2FkcyBhIGZpbGUgYXMgYSBsaXN0LiBF
YWNoIGxpbmUgaXMgcGFyc2VkIGZvciBhIHJlbGF0aXZlCisgKiBwYXRoLiBJZiB0aGUgZmlsZSBl
bmRzIGluIC50eHQgdGhlIGNvbnRlbnRzIG9mIHRoYXQgZmlsZSBpcyBpbnNlcnRlZCBpbgorICog
dGhlIGxpc3QuCisgKgorICogQHBhcmFtIHtzdHJpbmd9IHVybCBUaGUgdXJsIG9mIHRoZSBleHRl
cm5hbCBmaWxlLgorICogQHBhcmFtIHshZnVuY3Rpb24oYm9vbCwgQXJyYXk8c3RyaW5nPik6IHZv
aWR9IGNhbGxiYWNrIHRoYXQgaXMgc2VudCBhIGJvb2wKKyAqICAgICBmb3Igc3VjY2VzcyBhbmQg
dGhlIGFycmF5IG9mIHN0cmluZ3MuCisgKi8KK3ZhciBnZXRGaWxlTGlzdEFzeW5jID0gZnVuY3Rp
b24odXJsLCBjYWxsYmFjaykgeworICB2YXIgZmlsZXMgPSBbXTsKKworICB2YXIgZ2V0RmlsZUxp
c3RJbXBsID0gZnVuY3Rpb24odXJsLCBjYWxsYmFjaykgeworICAgIHZhciBmaWxlcyA9IFtdOwor
ICAgIGlmICh1cmwuc3Vic3RyKHVybC5sZW5ndGggLSA0KSA9PSAnLnR4dCcpIHsKKyAgICAgIGxv
YWRUZXh0RmlsZUFzeW5jKHVybCwgZnVuY3Rpb24oKSB7CisgICAgICAgIHJldHVybiBmdW5jdGlv
bihzdWNjZXNzLCB0ZXh0KSB7CisgICAgICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAg
ICBjYWxsYmFjayhmYWxzZSwgJycpOworICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgIH0K
KyAgICAgICAgICB2YXIgbGluZXMgPSB0ZXh0LnNwbGl0KCdcbicpOworICAgICAgICAgIHZhciBw
cmVmaXggPSAnJzsKKyAgICAgICAgICB2YXIgbGFzdFNsYXNoID0gdXJsLmxhc3RJbmRleE9mKCcv
Jyk7CisgICAgICAgICAgaWYgKGxhc3RTbGFzaCA+PSAwKSB7CisgICAgICAgICAgICBwcmVmaXgg
PSB1cmwuc3Vic3RyKDAsIGxhc3RTbGFzaCArIDEpOworICAgICAgICAgIH0KKyAgICAgICAgICB2
YXIgZmFpbCA9IGZhbHNlOworICAgICAgICAgIHZhciBjb3VudCA9IDE7CisgICAgICAgICAgdmFy
IGluZGV4ID0gMDsKKyAgICAgICAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgbGluZXMubGVuZ3Ro
OyArK2lpKSB7CisgICAgICAgICAgICB2YXIgc3RyID0gbGluZXNbaWldLnJlcGxhY2UoL15cc1xz
Ki8sICcnKS5yZXBsYWNlKC9cc1xzKiQvLCAnJyk7CisgICAgICAgICAgICBpZiAoc3RyLmxlbmd0
aCA+IDQgJiYKKyAgICAgICAgICAgICAgICBzdHJbMF0gIT0gJyMnICYmCisgICAgICAgICAgICAg
ICAgc3RyWzBdICE9ICI7IiAmJgorICAgICAgICAgICAgICAgIHN0ci5zdWJzdHIoMCwgMikgIT0g
Ii8vIikgeworICAgICAgICAgICAgICB2YXIgbmFtZXMgPSBzdHIuc3BsaXQoLyArLyk7CisgICAg
ICAgICAgICAgIHZhciBuZXdfdXJsID0gcHJlZml4ICsgc3RyOworICAgICAgICAgICAgICBpZiAo
bmFtZXMubGVuZ3RoID09IDEpIHsKKyAgICAgICAgICAgICAgICBuZXdfdXJsID0gcHJlZml4ICsg
c3RyOworICAgICAgICAgICAgICAgICsrY291bnQ7CisgICAgICAgICAgICAgICAgZ2V0RmlsZUxp
c3RJbXBsKG5ld191cmwsIGZ1bmN0aW9uKGluZGV4KSB7CisgICAgICAgICAgICAgICAgICByZXR1
cm4gZnVuY3Rpb24oc3VjY2VzcywgbmV3X2ZpbGVzKSB7CisgICAgICAgICAgICAgICAgICAgIGxv
ZygiZ290IGZpbGVzOiAiICsgbmV3X2ZpbGVzLmxlbmd0aCk7CisgICAgICAgICAgICAgICAgICAg
IGlmIChzdWNjZXNzKSB7CisgICAgICAgICAgICAgICAgICAgICAgZmlsZXNbaW5kZXhdID0gbmV3
X2ZpbGVzOworICAgICAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIGZpbmlz
aChzdWNjZXNzKTsKKyAgICAgICAgICAgICAgICAgIH07CisgICAgICAgICAgICAgICAgfShpbmRl
eCsrKSk7CisgICAgICAgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICAgICAgdmFyIHMgPSAi
IjsKKyAgICAgICAgICAgICAgICB2YXIgcCA9ICIiOworICAgICAgICAgICAgICAgIGZvciAodmFy
IGpqID0gMDsgamogPCBuYW1lcy5sZW5ndGg7ICsramopIHsKKyAgICAgICAgICAgICAgICAgIHMg
Kz0gcCArIHByZWZpeCArIG5hbWVzW2pqXTsKKyAgICAgICAgICAgICAgICAgIHAgPSAiICI7Cisg
ICAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICAgIGZpbGVzW2luZGV4KytdID0gczsKKyAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgfQorICAgICAgICAgIH0KKyAgICAgICAgICBmaW5p
c2godHJ1ZSk7CisKKyAgICAgICAgICBmdW5jdGlvbiBmaW5pc2goc3VjY2VzcykgeworICAgICAg
ICAgICAgaWYgKCFzdWNjZXNzKSB7CisgICAgICAgICAgICAgIGZhaWwgPSB0cnVlOworICAgICAg
ICAgICAgfQorICAgICAgICAgICAgLS1jb3VudDsKKyAgICAgICAgICAgIGxvZygiY291bnQ6ICIg
KyBjb3VudCk7CisgICAgICAgICAgICBpZiAoIWNvdW50KSB7CisgICAgICAgICAgICAgIGNhbGxi
YWNrKCFmYWlsLCBmaWxlcyk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICB9
CisgICAgICB9KCkpOworCisgICAgfSBlbHNlIHsKKyAgICAgIGZpbGVzLnB1c2godXJsKTsKKyAg
ICAgIGNhbGxiYWNrKHRydWUsIGZpbGVzKTsKKyAgICB9CisgIH07CisKKyAgZ2V0RmlsZUxpc3RJ
bXBsKHVybCwgZnVuY3Rpb24oc3VjY2VzcywgZmlsZXMpIHsKKyAgICAvLyBmbGF0dGVuCisgICAg
dmFyIGZsYXQgPSBbXTsKKyAgICBmbGF0dGVuKGZpbGVzKTsKKyAgICBmdW5jdGlvbiBmbGF0dGVu
KGZpbGVzKSB7CisgICAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgZmlsZXMubGVuZ3RoOyArK2lp
KSB7CisgICAgICAgIHZhciB2YWx1ZSA9IGZpbGVzW2lpXTsKKyAgICAgICAgaWYgKHR5cGVvZih2
YWx1ZSkgPT0gInN0cmluZyIpIHsKKyAgICAgICAgICBmbGF0LnB1c2godmFsdWUpOworICAgICAg
ICB9IGVsc2UgeworICAgICAgICAgIGZsYXR0ZW4odmFsdWUpOworICAgICAgICB9CisgICAgICB9
CisgICAgfQorICAgIGNhbGxiYWNrKHN1Y2Nlc3MsIGZsYXQpOworICB9KTsKK307CisKKy8qKgor
ICogR2V0cyBhIGZpbGUgZnJvbSBhIGZpbGUvVVJMLgorICogQHBhcmFtIHtzdHJpbmd9IGZpbGUg
dGhlIFVSTCBvZiB0aGUgZmlsZSB0byBnZXQuCisgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBjb250
ZW50cyBvZiB0aGUgZmlsZS4KKyAqLwordmFyIHJlYWRGaWxlID0gZnVuY3Rpb24oZmlsZSkgewor
ICB2YXIgeGhyID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgIHhoci5vcGVuKCJHRVQiLCBmaWxl
LCBmYWxzZSk7CisgIHhoci5vdmVycmlkZU1pbWVUeXBlKCJ0ZXh0L3BsYWluIik7CisgIHhoci5z
ZW5kKCk7CisgIHJldHVybiB4aHIucmVzcG9uc2VUZXh0LnJlcGxhY2UoL1xyL2csICIiKTsKK307
CisKK3ZhciByZWFkRmlsZUxpc3QgPSBmdW5jdGlvbih1cmwpIHsKKyAgdmFyIGZpbGVzID0gW107
CisgIGlmICh1cmwuc3Vic3RyKHVybC5sZW5ndGggLSA0KSA9PSAnLnR4dCcpIHsKKyAgICB2YXIg
bGluZXMgPSByZWFkRmlsZSh1cmwpLnNwbGl0KCdcbicpOworICAgIHZhciBwcmVmaXggPSAnJzsK
KyAgICB2YXIgbGFzdFNsYXNoID0gdXJsLmxhc3RJbmRleE9mKCcvJyk7CisgICAgaWYgKGxhc3RT
bGFzaCA+PSAwKSB7CisgICAgICBwcmVmaXggPSB1cmwuc3Vic3RyKDAsIGxhc3RTbGFzaCArIDEp
OworICAgIH0KKyAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgbGluZXMubGVuZ3RoOyArK2lpKSB7
CisgICAgICB2YXIgc3RyID0gbGluZXNbaWldLnJlcGxhY2UoL15cc1xzKi8sICcnKS5yZXBsYWNl
KC9cc1xzKiQvLCAnJyk7CisgICAgICBpZiAoc3RyLmxlbmd0aCA+IDQgJiYKKyAgICAgICAgICBz
dHJbMF0gIT0gJyMnICYmCisgICAgICAgICAgc3RyWzBdICE9ICI7IiAmJgorICAgICAgICAgIHN0
ci5zdWJzdHIoMCwgMikgIT0gIi8vIikgeworICAgICAgICB2YXIgbmFtZXMgPSBzdHIuc3BsaXQo
LyArLyk7CisgICAgICAgIGlmIChuYW1lcy5sZW5ndGggPT0gMSkgeworICAgICAgICAgIHZhciBu
ZXdfdXJsID0gcHJlZml4ICsgc3RyOworICAgICAgICAgIGZpbGVzID0gZmlsZXMuY29uY2F0KHJl
YWRGaWxlTGlzdChuZXdfdXJsKSk7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdmFyIHMg
PSAiIjsKKyAgICAgICAgICB2YXIgcCA9ICIiOworICAgICAgICAgIGZvciAodmFyIGpqID0gMDsg
amogPCBuYW1lcy5sZW5ndGg7ICsramopIHsKKyAgICAgICAgICAgIHMgKz0gcCArIHByZWZpeCAr
IG5hbWVzW2pqXTsKKyAgICAgICAgICAgIHAgPSAiICI7CisgICAgICAgICAgfQorICAgICAgICAg
IGZpbGVzLnB1c2gocyk7CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgIH0gZWxzZSB7Cisg
ICAgZmlsZXMucHVzaCh1cmwpOworICB9CisgIHJldHVybiBmaWxlczsKK307CisKKy8qKgorICog
TG9hZHMgYSBzaGFkZXIuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRo
ZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtzdHJpbmd9IHNoYWRl
clNvdXJjZSBUaGUgc2hhZGVyIHNvdXJjZS4KKyAqIEBwYXJhbSB7bnVtYmVyfSBzaGFkZXJUeXBl
IFRoZSB0eXBlIG9mIHNoYWRlci4KKyAqIEBwYXJhbSB7ZnVuY3Rpb24oc3RyaW5nKTogdm9pZH0g
b3B0X2Vycm9yQ2FsbGJhY2sgY2FsbGJhY2sgZm9yIGVycm9ycy4KKyAqIEBwYXJhbSB7Ym9vbGVh
bn0gb3B0X2xvZ1NoYWRlcnMgV2hldGhlciB0byBsb2cgc2hhZGVyIHNvdXJjZS4KKyAqIEBwYXJh
bSB7c3RyaW5nfSBvcHRfc2hhZGVyTGFiZWwgTGFiZWwgdGhhdCBpZGVudGlmaWVzIHRoZSBzaGFk
ZXIgc291cmNlIGluCisgKiAgICAgdGhlIGxvZy4KKyAqIEBwYXJhbSB7c3RyaW5nfSBvcHRfdXJs
IFVSTCBmcm9tIHdoZXJlIHRoZSBzaGFkZXIgc291cmNlIHdhcyBsb2FkZWQgZnJvbS4KKyAqICAg
ICBJZiBvcHRfbG9nU2hhZGVycyBpcyBzZXQsIHRoZW4gYSBsaW5rIHRvIHRoZSBzb3VyY2UgZmls
ZSB3aWxsIGFsc28gYmUKKyAqICAgICBhZGRlZC4KKyAqIEBwYXJhbSB7Ym9vbGVhbn0gU2tpcCBj
b21waWxhdGlvbiBzdGF0dXMgY2hlY2suIERlZmF1bHQgPSBmYWxzZS4KKyAqIEByZXR1cm4geyFX
ZWJHTFNoYWRlcn0gVGhlIGNyZWF0ZWQgc2hhZGVyLgorICovCit2YXIgbG9hZFNoYWRlciA9IGZ1
bmN0aW9uKAorICAgIGdsLCBzaGFkZXJTb3VyY2UsIHNoYWRlclR5cGUsIG9wdF9lcnJvckNhbGxi
YWNrLCBvcHRfbG9nU2hhZGVycywKKyAgICBvcHRfc2hhZGVyTGFiZWwsIG9wdF91cmwsIG9wdF9z
a2lwQ29tcGlsZVN0YXR1cykgeworICB2YXIgZXJyRm4gPSBvcHRfZXJyb3JDYWxsYmFjayB8fCBl
cnJvcjsKKyAgLy8gQ3JlYXRlIHRoZSBzaGFkZXIgb2JqZWN0CisgIHZhciBzaGFkZXIgPSBnbC5j
cmVhdGVTaGFkZXIoc2hhZGVyVHlwZSk7CisgIGlmIChzaGFkZXIgPT0gbnVsbCkgeworICAgIGVy
ckZuKCIqKiogRXJyb3I6IHVuYWJsZSB0byBjcmVhdGUgc2hhZGVyICciK3NoYWRlclNvdXJjZSsi
JyIpOworICAgIHJldHVybiBudWxsOworICB9CisKKyAgLy8gTG9hZCB0aGUgc2hhZGVyIHNvdXJj
ZQorICBnbC5zaGFkZXJTb3VyY2Uoc2hhZGVyLCBzaGFkZXJTb3VyY2UpOworCisgIC8vIENvbXBp
bGUgdGhlIHNoYWRlcgorICBnbC5jb21waWxlU2hhZGVyKHNoYWRlcik7CisKKyAgaWYgKG9wdF9s
b2dTaGFkZXJzKSB7CisgICAgdmFyIGxhYmVsID0gc2hhZGVyVHlwZSA9PSBnbC5WRVJURVhfU0hB
REVSID8gJ3ZlcnRleCBzaGFkZXInIDogJ2ZyYWdtZW50X3NoYWRlcic7CisgICAgaWYgKG9wdF9z
aGFkZXJMYWJlbCkgeworICAgICAgbGFiZWwgPSBvcHRfc2hhZGVyTGFiZWwgKyAnICcgKyBsYWJl
bDsKKyAgICB9CisgICAgYWRkU2hhZGVyU291cmNlcygKKyAgICAgICAgZ2wsIGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKCdjb25zb2xlJyksIGxhYmVsLCBzaGFkZXIsIHNoYWRlclNvdXJjZSwgb3B0
X3VybCk7CisgIH0KKworICAvLyBDaGVjayB0aGUgY29tcGlsZSBzdGF0dXMKKyAgaWYgKCFvcHRf
c2tpcENvbXBpbGVTdGF0dXMpIHsKKyAgICB2YXIgY29tcGlsZWQgPSBnbC5nZXRTaGFkZXJQYXJh
bWV0ZXIoc2hhZGVyLCBnbC5DT01QSUxFX1NUQVRVUyk7CisgICAgaWYgKCFjb21waWxlZCkgewor
ICAgICAgLy8gU29tZXRoaW5nIHdlbnQgd3JvbmcgZHVyaW5nIGNvbXBpbGF0aW9uOyBnZXQgdGhl
IGVycm9yCisgICAgICBsYXN0RXJyb3IgPSBnbC5nZXRTaGFkZXJJbmZvTG9nKHNoYWRlcik7Cisg
ICAgICBlcnJGbigiKioqIEVycm9yIGNvbXBpbGluZyAiICsgZ2xFbnVtVG9TdHJpbmcoZ2wsIHNo
YWRlclR5cGUpICsgIiAnIiArIHNoYWRlciArICInOiIgKyBsYXN0RXJyb3IpOworICAgICAgZ2wu
ZGVsZXRlU2hhZGVyKHNoYWRlcik7CisgICAgICByZXR1cm4gbnVsbDsKKyAgICB9CisgIH0KKwor
ICByZXR1cm4gc2hhZGVyOworfQorCisvKioKKyAqIExvYWRzIGEgc2hhZGVyIGZyb20gYSBVUkwu
CisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtmaWxlfSBmaWxlIFRoZSBVUkwgb2YgdGhlIHNo
YWRlciBzb3VyY2UuCisgKiBAcGFyYW0ge251bWJlcn0gdHlwZSBUaGUgdHlwZSBvZiBzaGFkZXIu
CisgKiBAcGFyYW0ge2Z1bmN0aW9uKHN0cmluZyk6IHZvaWR9IG9wdF9lcnJvckNhbGxiYWNrIGNh
bGxiYWNrIGZvciBlcnJvcnMuCisgKiBAcGFyYW0ge2Jvb2xlYW59IG9wdF9sb2dTaGFkZXJzIFdo
ZXRoZXIgdG8gbG9nIHNoYWRlciBzb3VyY2UuCisgKiBAcGFyYW0ge2Jvb2xlYW59IFNraXAgY29t
cGlsYXRpb24gc3RhdHVzIGNoZWNrLiBEZWZhdWx0ID0gZmFsc2UuCisgKiBAcmV0dXJuIHshV2Vi
R0xTaGFkZXJ9IFRoZSBjcmVhdGVkIHNoYWRlci4KKyAqLwordmFyIGxvYWRTaGFkZXJGcm9tRmls
ZSA9IGZ1bmN0aW9uKAorICAgIGdsLCBmaWxlLCB0eXBlLCBvcHRfZXJyb3JDYWxsYmFjaywgb3B0
X2xvZ1NoYWRlcnMsIG9wdF9za2lwQ29tcGlsZVN0YXR1cykgeworICB2YXIgc2hhZGVyU291cmNl
ID0gcmVhZEZpbGUoZmlsZSk7CisgIHJldHVybiBsb2FkU2hhZGVyKGdsLCBzaGFkZXJTb3VyY2Us
IHR5cGUsIG9wdF9lcnJvckNhbGxiYWNrLAorICAgICAgb3B0X2xvZ1NoYWRlcnMsIHVuZGVmaW5l
ZCwgZmlsZSwgb3B0X3NraXBDb21waWxlU3RhdHVzKTsKK307CisKK3ZhciBsb2FkU2hhZGVyRnJv
bUZpbGVBc3luYyA9IGZ1bmN0aW9uKAorICAgIGdsLCBmaWxlLCB0eXBlLCBvcHRfZXJyb3JDYWxs
YmFjaywgb3B0X2xvZ1NoYWRlcnMsIG9wdF9za2lwQ29tcGlsZVN0YXR1cywgY2FsbGJhY2spIHsK
KyAgbG9hZFRleHRGaWxlQXN5bmMoZmlsZSwgZnVuY3Rpb24oZ2wsIHR5cGUsIG9wdF9lcnJvckNh
bGxiYWNrLCBvcHRfbG9nU2hhZGVycywgZmlsZSwgb3B0X3NraXBDb21waWxlU3RhdHVzKXsKKyAg
ICAgIHJldHVybiBmdW5jdGlvbihzdWNjZXNzLCBzaGFkZXJTb3VyY2UpIHsKKyAgICAgICAgaWYg
KHN1Y2Nlc3MpIHsKKyAgICAgICAgICB2YXIgc2hhZGVyID0gbG9hZFNoYWRlcihnbCwgc2hhZGVy
U291cmNlLCB0eXBlLCBvcHRfZXJyb3JDYWxsYmFjaywKKyAgICAgICAgICAgICAgb3B0X2xvZ1No
YWRlcnMsIHVuZGVmaW5lZCwgZmlsZSwgb3B0X3NraXBDb21waWxlU3RhdHVzKTsKKyAgICAgICAg
ICBjYWxsYmFjayh0cnVlLCBzaGFkZXIpOworICAgICAgICB9IGVsc2UgeworICAgICAgICAgIGNh
bGxiYWNrKGZhbHNlLCBudWxsKTsKKyAgICAgICAgfQorICAgICAgfQorICB9KGdsLCB0eXBlLCBv
cHRfZXJyb3JDYWxsYmFjaywgb3B0X2xvZ1NoYWRlcnMsIGZpbGUsIG9wdF9za2lwQ29tcGlsZVN0
YXR1cykpOworfTsKKworLyoqCisgKiBHZXRzIHRoZSBjb250ZW50IG9mIHNjcmlwdC4KKyAqIEBw
YXJhbSB7c3RyaW5nfSBzY3JpcHRJZCBUaGUgaWQgb2YgdGhlIHNjcmlwdCB0YWcuCisgKiBAcmV0
dXJuIHtzdHJpbmd9IFRoZSBjb250ZW50IG9mIHRoZSBzY3JpcHQuCisgKi8KK3ZhciBnZXRTY3Jp
cHQgPSBmdW5jdGlvbihzY3JpcHRJZCkgeworICB2YXIgc2hhZGVyU2NyaXB0ID0gZG9jdW1lbnQu
Z2V0RWxlbWVudEJ5SWQoc2NyaXB0SWQpOworICBpZiAoIXNoYWRlclNjcmlwdCkgeworICAgIHRo
cm93KCIqKiogRXJyb3I6IHVua25vd24gc2NyaXB0IGVsZW1lbnQgIiArIHNjcmlwdElkKTsKKyAg
fQorICByZXR1cm4gc2hhZGVyU2NyaXB0LnRleHQ7Cit9OworCisvKioKKyAqIExvYWRzIGEgc2hh
ZGVyIGZyb20gYSBzY3JpcHQgdGFnLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0
fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7c3RyaW5n
fSBzY3JpcHRJZCBUaGUgaWQgb2YgdGhlIHNjcmlwdCB0YWcuCisgKiBAcGFyYW0ge251bWJlcn0g
b3B0X3NoYWRlclR5cGUgVGhlIHR5cGUgb2Ygc2hhZGVyLiBJZiBub3QgcGFzc2VkIGluIGl0IHdp
bGwKKyAqICAgICBiZSBkZXJpdmVkIGZyb20gdGhlIHR5cGUgb2YgdGhlIHNjcmlwdCB0YWcuCisg
KiBAcGFyYW0ge2Z1bmN0aW9uKHN0cmluZyk6IHZvaWR9IG9wdF9lcnJvckNhbGxiYWNrIGNhbGxi
YWNrIGZvciBlcnJvcnMuCisgKiBAcGFyYW0ge2Jvb2xlYW59IG9wdF9sb2dTaGFkZXJzIFdoZXRo
ZXIgdG8gbG9nIHNoYWRlciBzb3VyY2UuCisgKiBAcGFyYW0ge2Jvb2xlYW59IFNraXAgY29tcGls
YXRpb24gc3RhdHVzIGNoZWNrLiBEZWZhdWx0ID0gZmFsc2UuCisgKiBAcmV0dXJuIHshV2ViR0xT
aGFkZXJ9IFRoZSBjcmVhdGVkIHNoYWRlci4KKyAqLwordmFyIGxvYWRTaGFkZXJGcm9tU2NyaXB0
ID0gZnVuY3Rpb24oCisgICAgZ2wsIHNjcmlwdElkLCBvcHRfc2hhZGVyVHlwZSwgb3B0X2Vycm9y
Q2FsbGJhY2ssIG9wdF9sb2dTaGFkZXJzLCBvcHRfc2tpcENvbXBpbGVTdGF0dXMpIHsKKyAgdmFy
IHNoYWRlclNvdXJjZSA9ICIiOworICB2YXIgc2hhZGVyU2NyaXB0ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoc2NyaXB0SWQpOworICBpZiAoIXNoYWRlclNjcmlwdCkgeworICAgIHRocm93KCIq
KiogRXJyb3I6IHVua25vd24gc2NyaXB0IGVsZW1lbnQgIiArIHNjcmlwdElkKTsKKyAgfQorICBz
aGFkZXJTb3VyY2UgPSBzaGFkZXJTY3JpcHQudGV4dC50cmltKCk7CisKKyAgaWYgKCFvcHRfc2hh
ZGVyVHlwZSkgeworICAgIGlmIChzaGFkZXJTY3JpcHQudHlwZSA9PSAieC1zaGFkZXIveC12ZXJ0
ZXgiKSB7CisgICAgICBvcHRfc2hhZGVyVHlwZSA9IGdsLlZFUlRFWF9TSEFERVI7CisgICAgfSBl
bHNlIGlmIChzaGFkZXJTY3JpcHQudHlwZSA9PSAieC1zaGFkZXIveC1mcmFnbWVudCIpIHsKKyAg
ICAgIG9wdF9zaGFkZXJUeXBlID0gZ2wuRlJBR01FTlRfU0hBREVSOworICAgIH0gZWxzZSB7Cisg
ICAgICB0aHJvdygiKioqIEVycm9yOiB1bmtub3duIHNoYWRlciB0eXBlIik7CisgICAgICByZXR1
cm4gbnVsbDsKKyAgICB9CisgIH0KKworICByZXR1cm4gbG9hZFNoYWRlcihnbCwgc2hhZGVyU291
cmNlLCBvcHRfc2hhZGVyVHlwZSwgb3B0X2Vycm9yQ2FsbGJhY2ssCisgICAgICBvcHRfbG9nU2hh
ZGVycywgdW5kZWZpbmVkLCB1bmRlZmluZWQsIG9wdF9za2lwQ29tcGlsZVN0YXR1cyk7Cit9Owor
Cit2YXIgbG9hZFN0YW5kYXJkUHJvZ3JhbSA9IGZ1bmN0aW9uKGdsKSB7CisgIHZhciBwcm9ncmFt
ID0gZ2wuY3JlYXRlUHJvZ3JhbSgpOworICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgbG9hZFN0
YW5kYXJkVmVydGV4U2hhZGVyKGdsKSk7CisgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBsb2Fk
U3RhbmRhcmRGcmFnbWVudFNoYWRlcihnbCkpOworICBnbC5iaW5kQXR0cmliTG9jYXRpb24ocHJv
Z3JhbSwgMCwgImFfdmVydGV4Iik7CisgIGdsLmJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAx
LCAiYV9ub3JtYWwiKTsKKyAgbGlua1Byb2dyYW0oZ2wsIHByb2dyYW0pOworICByZXR1cm4gcHJv
Z3JhbTsKK307CisKK3ZhciBsb2FkU3RhbmRhcmRQcm9ncmFtQXN5bmMgPSBmdW5jdGlvbihnbCwg
Y2FsbGJhY2spIHsKKyAgbG9hZFN0YW5kYXJkVmVydGV4U2hhZGVyQXN5bmMoZ2wsIGZ1bmN0aW9u
KGdsKSB7CisgICAgcmV0dXJuIGZ1bmN0aW9uKHN1Y2Nlc3MsIHZzKSB7CisgICAgICBpZiAoc3Vj
Y2VzcykgeworICAgICAgICBsb2FkU3RhbmRhcmRGcmFnbWVudFNoYWRlckFzeW5jKGdsLCBmdW5j
dGlvbih2cykgeworICAgICAgICAgIHJldHVybiBmdW5jdGlvbihzdWNjZXNzLCBmcykgeworICAg
ICAgICAgICAgaWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgdmFyIHByb2dyYW0gPSBnbC5j
cmVhdGVQcm9ncmFtKCk7CisgICAgICAgICAgICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCB2
cyk7CisgICAgICAgICAgICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBmcyk7CisgICAgICAg
ICAgICAgIGdsLmJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFtLCAwLCAiYV92ZXJ0ZXgiKTsKKyAg
ICAgICAgICAgICAgZ2wuYmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIDEsICJhX25vcm1hbCIp
OworICAgICAgICAgICAgICBsaW5rUHJvZ3JhbShnbCwgcHJvZ3JhbSk7CisgICAgICAgICAgICAg
IGNhbGxiYWNrKHRydWUsIHByb2dyYW0pOworICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAg
ICAgICAgY2FsbGJhY2soZmFsc2UsIG51bGwpOworICAgICAgICAgICAgfQorICAgICAgICAgIH07
CisgICAgICAgIH0odnMpKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIGNhbGxiYWNrKGZhbHNl
LCBudWxsKTsKKyAgICAgIH0KKyAgICB9OworICB9KGdsKSk7Cit9OworCisvKioKKyAqIExvYWRz
IHNoYWRlcnMgZnJvbSBmaWxlcywgY3JlYXRlcyBhIHByb2dyYW0sIGF0dGFjaGVzIHRoZSBzaGFk
ZXJzIGFuZCBsaW5rcy4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhl
IFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge3N0cmluZ30gdmVydGV4
U2hhZGVyUGF0aCBUaGUgVVJMIG9mIHRoZSB2ZXJ0ZXggc2hhZGVyLgorICogQHBhcmFtIHtzdHJp
bmd9IGZyYWdtZW50U2hhZGVyUGF0aCBUaGUgVVJMIG9mIHRoZSBmcmFnbWVudCBzaGFkZXIuCisg
KiBAcGFyYW0ge2Z1bmN0aW9uKHN0cmluZyk6IHZvaWR9IG9wdF9lcnJvckNhbGxiYWNrIGNhbGxi
YWNrIGZvciBlcnJvcnMuCisgKiBAcmV0dXJuIHshV2ViR0xQcm9ncmFtfSBUaGUgY3JlYXRlZCBw
cm9ncmFtLgorICovCit2YXIgbG9hZFByb2dyYW1Gcm9tRmlsZSA9IGZ1bmN0aW9uKAorICAgIGds
LCB2ZXJ0ZXhTaGFkZXJQYXRoLCBmcmFnbWVudFNoYWRlclBhdGgsIG9wdF9lcnJvckNhbGxiYWNr
KSB7CisgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpOworICB2YXIgdnMgPSBsb2Fk
U2hhZGVyRnJvbUZpbGUoCisgICAgICBnbCwgdmVydGV4U2hhZGVyUGF0aCwgZ2wuVkVSVEVYX1NI
QURFUiwgb3B0X2Vycm9yQ2FsbGJhY2spOworICB2YXIgZnMgPSBsb2FkU2hhZGVyRnJvbUZpbGUo
CisgICAgICBnbCwgZnJhZ21lbnRTaGFkZXJQYXRoLCBnbC5GUkFHTUVOVF9TSEFERVIsIG9wdF9l
cnJvckNhbGxiYWNrKTsKKyAgaWYgKHZzICYmIGZzKSB7CisgICAgZ2wuYXR0YWNoU2hhZGVyKHBy
b2dyYW0sIHZzKTsKKyAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZnMpOworICAgIGxpbmtQ
cm9ncmFtKGdsLCBwcm9ncmFtLCBvcHRfZXJyb3JDYWxsYmFjayk7CisgIH0KKyAgaWYgKHZzKSB7
CisgICAgZ2wuZGVsZXRlU2hhZGVyKHZzKTsKKyAgfQorICBpZiAoZnMpIHsKKyAgICBnbC5kZWxl
dGVTaGFkZXIoZnMpOworICB9CisgIHJldHVybiBwcm9ncmFtOworfTsKKworLyoqCisgKiBMb2Fk
cyBzaGFkZXJzIGZyb20gc2NyaXB0IHRhZ3MsIGNyZWF0ZXMgYSBwcm9ncmFtLCBhdHRhY2hlcyB0
aGUgc2hhZGVycyBhbmQKKyAqIGxpbmtzLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250
ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7c3Ry
aW5nfSB2ZXJ0ZXhTY3JpcHRJZCBUaGUgaWQgb2YgdGhlIHNjcmlwdCB0YWcgdGhhdCBjb250YWlu
cyB0aGUKKyAqICAgICAgICB2ZXJ0ZXggc2hhZGVyLgorICogQHBhcmFtIHtzdHJpbmd9IGZyYWdt
ZW50U2NyaXB0SWQgVGhlIGlkIG9mIHRoZSBzY3JpcHQgdGFnIHRoYXQgY29udGFpbnMgdGhlCisg
KiAgICAgICAgZnJhZ21lbnQgc2hhZGVyLgorICogQHBhcmFtIHtmdW5jdGlvbihzdHJpbmcpOiB2
b2lkfSBvcHRfZXJyb3JDYWxsYmFjayBjYWxsYmFjayBmb3IgZXJyb3JzLgorICogQHJldHVybiB7
IVdlYkdMUHJvZ3JhbX0gVGhlIGNyZWF0ZWQgcHJvZ3JhbS4KKyAqLwordmFyIGxvYWRQcm9ncmFt
RnJvbVNjcmlwdCA9IGZ1bmN0aW9uIGxvYWRQcm9ncmFtRnJvbVNjcmlwdCgKKyAgICBnbCwgdmVy
dGV4U2NyaXB0SWQsIGZyYWdtZW50U2NyaXB0SWQsIG9wdF9lcnJvckNhbGxiYWNrKSB7CisgIHZh
ciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpOworICBnbC5hdHRhY2hTaGFkZXIoCisgICAg
ICBwcm9ncmFtLAorICAgICAgbG9hZFNoYWRlckZyb21TY3JpcHQoCisgICAgICAgICAgZ2wsIHZl
cnRleFNjcmlwdElkLCBnbC5WRVJURVhfU0hBREVSLCBvcHRfZXJyb3JDYWxsYmFjaykpOworICBn
bC5hdHRhY2hTaGFkZXIoCisgICAgICBwcm9ncmFtLAorICAgICAgbG9hZFNoYWRlckZyb21TY3Jp
cHQoCisgICAgICAgICAgZ2wsIGZyYWdtZW50U2NyaXB0SWQsICBnbC5GUkFHTUVOVF9TSEFERVIs
IG9wdF9lcnJvckNhbGxiYWNrKSk7CisgIGxpbmtQcm9ncmFtKGdsLCBwcm9ncmFtLCBvcHRfZXJy
b3JDYWxsYmFjayk7CisgIHJldHVybiBwcm9ncmFtOworfTsKKworLyoqCisgKiBMb2FkcyBzaGFk
ZXJzIGZyb20gc291cmNlLCBjcmVhdGVzIGEgcHJvZ3JhbSwgYXR0YWNoZXMgdGhlIHNoYWRlcnMg
YW5kCisgKiBsaW5rcy4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhl
IFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0geyFXZWJHTFNoYWRlcn0g
dmVydGV4U2hhZGVyIFRoZSB2ZXJ0ZXggc2hhZGVyLgorICogQHBhcmFtIHshV2ViR0xTaGFkZXJ9
IGZyYWdtZW50U2hhZGVyIFRoZSBmcmFnbWVudCBzaGFkZXIuCisgKiBAcGFyYW0ge2Z1bmN0aW9u
KHN0cmluZyk6IHZvaWR9IG9wdF9lcnJvckNhbGxiYWNrIGNhbGxiYWNrIGZvciBlcnJvcnMuCisg
KiBAcmV0dXJuIHshV2ViR0xQcm9ncmFtfSBUaGUgY3JlYXRlZCBwcm9ncmFtLgorICovCit2YXIg
Y3JlYXRlUHJvZ3JhbSA9IGZ1bmN0aW9uKGdsLCB2ZXJ0ZXhTaGFkZXIsIGZyYWdtZW50U2hhZGVy
LCBvcHRfZXJyb3JDYWxsYmFjaykgeworICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0o
KTsKKyAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIHZlcnRleFNoYWRlcik7CisgIGdsLmF0dGFj
aFNoYWRlcihwcm9ncmFtLCBmcmFnbWVudFNoYWRlcik7CisgIGxpbmtQcm9ncmFtKGdsLCBwcm9n
cmFtLCBvcHRfZXJyb3JDYWxsYmFjayk7CisgIHJldHVybiBwcm9ncmFtOworfTsKKworLyoqCisg
KiBMb2FkcyBzaGFkZXJzIGZyb20gc291cmNlLCBjcmVhdGVzIGEgcHJvZ3JhbSwgYXR0YWNoZXMg
dGhlIHNoYWRlcnMgYW5kCisgKiBsaW5rcy4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29u
dGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge3N0
cmluZ30gdmVydGV4U2hhZGVyIFRoZSB2ZXJ0ZXggc2hhZGVyIHNvdXJjZS4KKyAqIEBwYXJhbSB7
c3RyaW5nfSBmcmFnbWVudFNoYWRlciBUaGUgZnJhZ21lbnQgc2hhZGVyIHNvdXJjZS4KKyAqIEBw
YXJhbSB7ZnVuY3Rpb24oc3RyaW5nKTogdm9pZH0gb3B0X2Vycm9yQ2FsbGJhY2sgY2FsbGJhY2sg
Zm9yIGVycm9ycy4KKyAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0X2xvZ1NoYWRlcnMgV2hldGhlciB0
byBsb2cgc2hhZGVyIHNvdXJjZS4KKyAqIEByZXR1cm4geyFXZWJHTFByb2dyYW19IFRoZSBjcmVh
dGVkIHByb2dyYW0uCisgKi8KK3ZhciBsb2FkUHJvZ3JhbSA9IGZ1bmN0aW9uKAorICAgIGdsLCB2
ZXJ0ZXhTaGFkZXIsIGZyYWdtZW50U2hhZGVyLCBvcHRfZXJyb3JDYWxsYmFjaywgb3B0X2xvZ1No
YWRlcnMpIHsKKyAgdmFyIHByb2dyYW07CisgIHZhciB2cyA9IGxvYWRTaGFkZXIoCisgICAgICBn
bCwgdmVydGV4U2hhZGVyLCBnbC5WRVJURVhfU0hBREVSLCBvcHRfZXJyb3JDYWxsYmFjaywgb3B0
X2xvZ1NoYWRlcnMpOworICB2YXIgZnMgPSBsb2FkU2hhZGVyKAorICAgICAgZ2wsIGZyYWdtZW50
U2hhZGVyLCBnbC5GUkFHTUVOVF9TSEFERVIsIG9wdF9lcnJvckNhbGxiYWNrLCBvcHRfbG9nU2hh
ZGVycyk7CisgIGlmICh2cyAmJiBmcykgeworICAgIHByb2dyYW0gPSBjcmVhdGVQcm9ncmFtKGds
LCB2cywgZnMsIG9wdF9lcnJvckNhbGxiYWNrKQorICB9CisgIGlmICh2cykgeworICAgIGdsLmRl
bGV0ZVNoYWRlcih2cyk7CisgIH0KKyAgaWYgKGZzKSB7CisgICAgZ2wuZGVsZXRlU2hhZGVyKGZz
KTsKKyAgfQorICByZXR1cm4gcHJvZ3JhbTsKK307CisKKy8qKgorICogTG9hZHMgc2hhZGVycyBm
cm9tIHNvdXJjZSwgY3JlYXRlcyBhIHByb2dyYW0sIGF0dGFjaGVzIHRoZSBzaGFkZXJzIGFuZAor
ICogbGlua3MgYnV0IGV4cGVjdHMgZXJyb3IuCisgKgorICogR0xTTCAxLjAuMTcgMTAuMjcgZWZm
ZWN0aXZlbHkgc2F5cyB0aGF0IGNvbXBpbGVTaGFkZXIgY2FuCisgKiBhbHdheXMgc3VjY2VlZCBh
cyBsb25nIGFzIGxpbmtQcm9ncmFtIGZhaWxzIHNvIHdlIGNhbid0CisgKiByZWx5IG9uIGNvbXBp
bGVTaGFkZXIgZmFpbGluZy4gVGhpcyBmdW5jdGlvbiBleHBlY3RzCisgKiBvbmUgb2YgdGhlIHNo
YWRlciB0byBmYWlsIE9SIGxpbmtpbmcgdG8gZmFpbC4KKyAqCisgKiBAcGFyYW0geyFXZWJHTFJl
bmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICog
QHBhcmFtIHtzdHJpbmd9IHZlcnRleFNoYWRlclNjcmlwdElkIFRoZSB2ZXJ0ZXggc2hhZGVyLgor
ICogQHBhcmFtIHtzdHJpbmd9IGZyYWdtZW50U2hhZGVyU2NyaXB0SWQgVGhlIGZyYWdtZW50IHNo
YWRlci4KKyAqIEByZXR1cm4ge1dlYkdMUHJvZ3JhbX0gVGhlIGNyZWF0ZWQgcHJvZ3JhbS4KKyAq
LwordmFyIGxvYWRQcm9ncmFtRnJvbVNjcmlwdEV4cGVjdEVycm9yID0gZnVuY3Rpb24oCisgICAg
Z2wsIHZlcnRleFNoYWRlclNjcmlwdElkLCBmcmFnbWVudFNoYWRlclNjcmlwdElkKSB7CisgIHZh
ciB2ZXJ0ZXhTaGFkZXIgPSBsb2FkU2hhZGVyRnJvbVNjcmlwdChnbCwgdmVydGV4U2hhZGVyU2Ny
aXB0SWQpOworICBpZiAoIXZlcnRleFNoYWRlcikgeworICAgIHJldHVybiBudWxsOworICB9Cisg
IHZhciBmcmFnbWVudFNoYWRlciA9IGxvYWRTaGFkZXJGcm9tU2NyaXB0KGdsLCBmcmFnbWVudFNo
YWRlclNjcmlwdElkKTsKKyAgaWYgKCFmcmFnbWVudFNoYWRlcikgeworICAgIHJldHVybiBudWxs
OworICB9CisgIHZhciBsaW5rU3VjY2VzcyA9IHRydWU7CisgIHZhciBwcm9ncmFtID0gZ2wuY3Jl
YXRlUHJvZ3JhbSgpOworICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgdmVydGV4U2hhZGVyKTsK
KyAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGZyYWdtZW50U2hhZGVyKTsKKyAgbGlua1N1Y2Nl
c3MgPSB0cnVlOworICBsaW5rUHJvZ3JhbShnbCwgcHJvZ3JhbSwgZnVuY3Rpb24oKSB7CisgICAg
ICBsaW5rU3VjY2VzcyA9IGZhbHNlOworICAgIH0pOworICByZXR1cm4gbGlua1N1Y2Nlc3MgPyBw
cm9ncmFtIDogbnVsbDsKK307CisKKwordmFyIGdldEFjdGl2ZU1hcCA9IGZ1bmN0aW9uKGdsLCBw
cm9ncmFtLCB0eXBlSW5mbykgeworICB2YXIgbnVtVmFyaWFibGVzID0gZ2wuZ2V0UHJvZ3JhbVBh
cmFtZXRlcihwcm9ncmFtLCBnbFt0eXBlSW5mby5wYXJhbV0pOworICB2YXIgdmFyaWFibGVzID0g
e307CisgIGZvciAodmFyIGlpID0gMDsgaWkgPCBudW1WYXJpYWJsZXM7ICsraWkpIHsKKyAgICB2
YXIgaW5mbyA9IGdsW3R5cGVJbmZvLmFjdGl2ZUZuXShwcm9ncmFtLCBpaSk7CisgICAgdmFyaWFi
bGVzW2luZm8ubmFtZV0gPSB7CisgICAgICBuYW1lOiBpbmZvLm5hbWUsCisgICAgICBzaXplOiBp
bmZvLnNpemUsCisgICAgICB0eXBlOiBpbmZvLnR5cGUsCisgICAgICBsb2NhdGlvbjogZ2xbdHlw
ZUluZm8ubG9jRm5dKHByb2dyYW0sIGluZm8ubmFtZSkKKyAgICB9OworICB9CisgIHJldHVybiB2
YXJpYWJsZXM7Cit9OworCisvKioKKyAqIFJldHVybnMgYSBtYXAgb2YgYXR0cmliIG5hbWVzIHRv
IGluZm8gYWJvdXQgdGhvc2UKKyAqIGF0dHJpYnMuCisgKgorICogZWc6CisgKiAgICB7ICJhdHRy
aWIxTmFtZSI6CisgKiAgICAgIHsKKyAqICAgICAgICBuYW1lOiAiYXR0cmliMU5hbWUiLAorICog
ICAgICAgIHNpemU6IDEsCisgKiAgICAgICAgdHlwZTogZ2wuRkxPQVRfTUFUMiwKKyAqICAgICAg
ICBsb2NhdGlvbjogMAorICogICAgICB9LAorICogICAgICAiYXR0cmliMk5hbWVbMF0iOgorICog
ICAgICB7CisgKiAgICAgICAgIG5hbWU6ICJhdHRyaWIyTmFtZVswXSIsCisgKiAgICAgICAgIHNp
emU6IDQsCisgKiAgICAgICAgIHR5cGU6IGdsLkZMT0FULAorICogICAgICAgICBsb2NhdGlvbjog
MQorICogICAgICB9LAorICogICAgfQorICoKKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29u
dGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge1dl
YkdMUHJvZ3JhbX0gVGhlIHByb2dyYW0gdG8gcXVlcnkgZm9yIGF0dHJpYnMuCisgKiBAcmV0dXJu
IHRoZSBtYXAuCisgKi8KK3ZhciBnZXRBdHRyaWJNYXAgPSBmdW5jdGlvbihnbCwgcHJvZ3JhbSkg
eworICByZXR1cm4gZ2V0QWN0aXZlTWFwKGdsLCBwcm9ncmFtLCB7CisgICAgICBwYXJhbTogIkFD
VElWRV9BVFRSSUJVVEVTIiwKKyAgICAgIGFjdGl2ZUZuOiAiZ2V0QWN0aXZlQXR0cmliIiwKKyAg
ICAgIGxvY0ZuOiAiZ2V0QXR0cmliTG9jYXRpb24iCisgIH0pOworfTsKKworLyoqCisgKiBSZXR1
cm5zIGEgbWFwIG9mIHVuaWZvcm0gbmFtZXMgdG8gaW5mbyBhYm91dCB0aG9zZSB1bmlmb3Jtcy4K
KyAqCisgKiBlZzoKKyAqICAgIHsgInVuaWZvcm0xTmFtZSI6CisgKiAgICAgIHsKKyAqICAgICAg
ICBuYW1lOiAidW5pZm9ybTFOYW1lIiwKKyAqICAgICAgICBzaXplOiAxLAorICogICAgICAgIHR5
cGU6IGdsLkZMT0FUX01BVDIsCisgKiAgICAgICAgbG9jYXRpb246IFdlYkdMVW5pZm9ybUxvY2F0
aW9uCisgKiAgICAgIH0sCisgKiAgICAgICJ1bmlmb3JtMk5hbWVbMF0iOgorICogICAgICB7Cisg
KiAgICAgICAgIG5hbWU6ICJ1bmlmb3JtMk5hbWVbMF0iLAorICogICAgICAgICBzaXplOiA0LAor
ICogICAgICAgICB0eXBlOiBnbC5GTE9BVCwKKyAqICAgICAgICAgbG9jYXRpb246IFdlYkdMVW5p
Zm9ybUxvY2F0aW9uCisgKiAgICAgIH0sCisgKiAgICB9CisgKgorICogQHBhcmFtIHshV2ViR0xS
ZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAq
IEBwYXJhbSB7V2ViR0xQcm9ncmFtfSBUaGUgcHJvZ3JhbSB0byBxdWVyeSBmb3IgdW5pZm9ybXMu
CisgKiBAcmV0dXJuIHRoZSBtYXAuCisgKi8KK3ZhciBnZXRVbmlmb3JtTWFwID0gZnVuY3Rpb24o
Z2wsIHByb2dyYW0pIHsKKyAgcmV0dXJuIGdldEFjdGl2ZU1hcChnbCwgcHJvZ3JhbSwgeworICAg
ICAgcGFyYW06ICJBQ1RJVkVfVU5JRk9STVMiLAorICAgICAgYWN0aXZlRm46ICJnZXRBY3RpdmVV
bmlmb3JtIiwKKyAgICAgIGxvY0ZuOiAiZ2V0VW5pZm9ybUxvY2F0aW9uIgorICB9KTsKK307CisK
K3ZhciBiYXNlUGF0aDsKK3ZhciBnZXRSZXNvdXJjZVBhdGggPSBmdW5jdGlvbigpIHsKKyAgaWYg
KCFiYXNlUGF0aCkgeworICAgIHZhciBleHBlY3RlZEJhc2UgPSAianMvd2ViZ2wtdGVzdC11dGls
cy5qcyI7CisgICAgdmFyIHNjcmlwdHMgPSBkb2N1bWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgn
c2NyaXB0Jyk7CisgICAgZm9yICh2YXIgc2NyaXB0LCBpID0gMDsgc2NyaXB0ID0gc2NyaXB0c1tp
XTsgaSsrKSB7CisgICAgICB2YXIgc3JjID0gc2NyaXB0LnNyYzsKKyAgICAgIHZhciBsID0gc3Jj
Lmxlbmd0aDsKKyAgICAgIGlmIChzcmMuc3Vic3RyKGwgLSBleHBlY3RlZEJhc2UubGVuZ3RoKSA9
PSBleHBlY3RlZEJhc2UpIHsKKyAgICAgICAgYmFzZVBhdGggPSBzcmMuc3Vic3RyKDAsIGwgLSBl
eHBlY3RlZEJhc2UubGVuZ3RoKTsKKyAgICAgIH0KKyAgICB9CisgIH0KKyAgcmV0dXJuIGJhc2VQ
YXRoICsgInJlc291cmNlcy8iOworfTsKKwordmFyIGxvYWRTdGFuZGFyZFZlcnRleFNoYWRlciA9
IGZ1bmN0aW9uKGdsKSB7CisgIHJldHVybiBsb2FkU2hhZGVyRnJvbUZpbGUoCisgICAgICBnbCwg
Z2V0UmVzb3VyY2VQYXRoKCkgKyAidmVydGV4U2hhZGVyLnZlcnQiLCBnbC5WRVJURVhfU0hBREVS
KTsKK307Cit2YXIgbG9hZFN0YW5kYXJkVmVydGV4U2hhZGVyQXN5bmMgPSBmdW5jdGlvbihnbCwg
Y2FsbGJhY2spIHsKKyAgbG9hZFNoYWRlckZyb21GaWxlQXN5bmMoZ2wsIGdldFJlc291cmNlUGF0
aCgpICsgInZlcnRleFNoYWRlci52ZXJ0IiwgZ2wuVkVSVEVYX1NIQURFUiwgdW5kZWZpbmVkLCB1
bmRlZmluZWQsIHVuZGVmaW5lZCwgY2FsbGJhY2spOworfTsKKwordmFyIGxvYWRTdGFuZGFyZEZy
YWdtZW50U2hhZGVyID0gZnVuY3Rpb24oZ2wpIHsKKyAgcmV0dXJuIGxvYWRTaGFkZXJGcm9tRmls
ZSgKKyAgICAgIGdsLCBnZXRSZXNvdXJjZVBhdGgoKSArICJmcmFnbWVudFNoYWRlci5mcmFnIiwg
Z2wuRlJBR01FTlRfU0hBREVSKTsKK307Cit2YXIgbG9hZFN0YW5kYXJkRnJhZ21lbnRTaGFkZXJB
c3luYyA9IGZ1bmN0aW9uKGdsLCBjYWxsYmFjaykgeworICBsb2FkU2hhZGVyRnJvbUZpbGVBc3lu
YyhnbCwgZ2V0UmVzb3VyY2VQYXRoKCkgKyAiZnJhZ21lbnRTaGFkZXIuZnJhZyIsIGdsLkZSQUdN
RU5UX1NIQURFUiwgdW5kZWZpbmVkLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgY2FsbGJhY2spOwor
fTsKKwordmFyIGxvYWRVbmlmb3JtQmxvY2tQcm9ncmFtID0gZnVuY3Rpb24oZ2wpIHsKKyAgdmFy
IHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7CisgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFt
LCBsb2FkVW5pZm9ybUJsb2NrVmVydGV4U2hhZGVyKGdsKSk7CisgIGdsLmF0dGFjaFNoYWRlcihw
cm9ncmFtLCBsb2FkVW5pZm9ybUJsb2NrRnJhZ21lbnRTaGFkZXIoZ2wpKTsKKyAgZ2wuYmluZEF0
dHJpYkxvY2F0aW9uKHByb2dyYW0sIDAsICJhX3ZlcnRleCIpOworICBnbC5iaW5kQXR0cmliTG9j
YXRpb24ocHJvZ3JhbSwgMSwgImFfbm9ybWFsIik7CisgIGxpbmtQcm9ncmFtKGdsLCBwcm9ncmFt
KTsKKyAgcmV0dXJuIHByb2dyYW07Cit9OworCit2YXIgbG9hZFVuaWZvcm1CbG9ja1ZlcnRleFNo
YWRlciA9IGZ1bmN0aW9uKGdsKSB7CisgIHJldHVybiBsb2FkU2hhZGVyRnJvbUZpbGUoCisgICAg
ICBnbCwgZ2V0UmVzb3VyY2VQYXRoKCkgKyAidW5pZm9ybUJsb2NrU2hhZGVyLnZlcnQiLCBnbC5W
RVJURVhfU0hBREVSKTsKK307CisKK3ZhciBsb2FkVW5pZm9ybUJsb2NrRnJhZ21lbnRTaGFkZXIg
PSBmdW5jdGlvbihnbCkgeworICByZXR1cm4gbG9hZFNoYWRlckZyb21GaWxlKAorICAgICAgZ2ws
IGdldFJlc291cmNlUGF0aCgpICsgInVuaWZvcm1CbG9ja1NoYWRlci5mcmFnIiwgZ2wuRlJBR01F
TlRfU0hBREVSKTsKK307CisKKy8qKgorICogTG9hZHMgYW4gaW1hZ2UgYXN5bmNocm9ub3VzbHku
CisgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFVSTCBvZiBpbWFnZSB0byBsb2FkLgorICogQHBhcmFt
IHshZnVuY3Rpb24oIUVsZW1lbnQpOiB2b2lkfSBjYWxsYmFjayBGdW5jdGlvbiB0byBjYWxsCisg
KiAgICAgd2l0aCBsb2FkZWQgaW1hZ2UuCisgKi8KK3ZhciBsb2FkSW1hZ2VBc3luYyA9IGZ1bmN0
aW9uKHVybCwgY2FsbGJhY2spIHsKKyAgdmFyIGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQo
J2ltZycpOworICBpbWcub25sb2FkID0gZnVuY3Rpb24oKSB7CisgICAgY2FsbGJhY2soaW1nKTsK
KyAgfTsKKyAgaW1nLnNyYyA9IHVybDsKK307CisKKy8qKgorICogTG9hZHMgYW4gYXJyYXkgb2Yg
aW1hZ2VzLgorICogQHBhcmFtIHshQXJyYXkuPHN0cmluZz59IHVybHMgVVJMcyBvZiBpbWFnZXMg
dG8gbG9hZC4KKyAqIEBwYXJhbSB7IWZ1bmN0aW9uKCF7c3RyaW5nLCBpbWd9KTogdm9pZH0gY2Fs
bGJhY2sgQ2FsbGJhY2sKKyAqICAgICB0aGF0IGdldHMgcGFzc2VkIG1hcCBvZiB1cmxzIHRvIGlt
ZyB0YWdzLgorICovCit2YXIgbG9hZEltYWdlc0FzeW5jID0gZnVuY3Rpb24odXJscywgY2FsbGJh
Y2spIHsKKyAgdmFyIGNvdW50ID0gMTsKKyAgdmFyIGltYWdlcyA9IHsgfTsKKyAgZnVuY3Rpb24g
Y291bnREb3duKCkgeworICAgIC0tY291bnQ7CisgICAgaWYgKGNvdW50ID09IDApIHsKKyAgICAg
IGxvZygibG9hZEltYWdlc0FzeW5jOiBhbGwgaW1hZ2VzIGxvYWRlZCIpOworICAgICAgY2FsbGJh
Y2soaW1hZ2VzKTsKKyAgICB9CisgIH0KKyAgZnVuY3Rpb24gaW1hZ2VMb2FkZWQodXJsKSB7Cisg
ICAgcmV0dXJuIGZ1bmN0aW9uKGltZykgeworICAgICAgaW1hZ2VzW3VybF0gPSBpbWc7CisgICAg
ICBsb2coImxvYWRJbWFnZXNBc3luYzogbG9hZGVkICIgKyB1cmwpOworICAgICAgY291bnREb3du
KCk7CisgICAgfQorICB9CisgIGZvciAodmFyIGlpID0gMDsgaWkgPCB1cmxzLmxlbmd0aDsgKytp
aSkgeworICAgICsrY291bnQ7CisgICAgbG9hZEltYWdlQXN5bmModXJsc1tpaV0sIGltYWdlTG9h
ZGVkKHVybHNbaWldKSk7CisgIH0KKyAgY291bnREb3duKCk7Cit9OworCisvKioKKyAqIFJldHVy
bnMgYSBtYXAgb2Yga2V5PXZhbHVlIHZhbHVlcyBmcm9tIHVybC4KKyAqIEByZXR1cm4geyFPYmpl
Y3QuPHN0cmluZywgbnVtYmVyPn0gbWFwIG9mIGtleXMgdG8gdmFsdWVzLgorICovCit2YXIgZ2V0
VXJsQXJndW1lbnRzID0gZnVuY3Rpb24oKSB7CisgIHZhciBhcmdzID0ge307CisgIHRyeSB7Cisg
ICAgdmFyIHMgPSB3aW5kb3cubG9jYXRpb24uaHJlZjsKKyAgICB2YXIgcSA9IHMuaW5kZXhPZigi
PyIpOworICAgIHZhciBlID0gcy5pbmRleE9mKCIjIik7CisgICAgaWYgKGUgPCAwKSB7CisgICAg
ICBlID0gcy5sZW5ndGg7CisgICAgfQorICAgIHZhciBxdWVyeSA9IHMuc3Vic3RyaW5nKHEgKyAx
LCBlKTsKKyAgICB2YXIgcGFpcnMgPSBxdWVyeS5zcGxpdCgiJiIpOworICAgIGZvciAodmFyIGlp
ID0gMDsgaWkgPCBwYWlycy5sZW5ndGg7ICsraWkpIHsKKyAgICAgIHZhciBrZXlWYWx1ZSA9IHBh
aXJzW2lpXS5zcGxpdCgiPSIpOworICAgICAgdmFyIGtleSA9IGtleVZhbHVlWzBdOworICAgICAg
dmFyIHZhbHVlID0gZGVjb2RlVVJJQ29tcG9uZW50KGtleVZhbHVlWzFdKTsKKyAgICAgIGFyZ3Nb
a2V5XSA9IHZhbHVlOworICAgIH0KKyAgfSBjYXRjaCAoZSkgeworICAgIHRocm93ICJjb3VsZCBu
b3QgcGFyc2UgdXJsIjsKKyAgfQorICByZXR1cm4gYXJnczsKK307CisKKy8qKgorICogTWFrZXMg
YW4gaW1hZ2UgZnJvbSBhIHNyYy4KKyAqIEBwYXJhbSB7c3RyaW5nfSBzcmMgSW1hZ2Ugc291cmNl
IFVSTC4KKyAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0gb25sb2FkIENhbGxiYWNrIHRvIGNhbGwgd2hl
biB0aGUgaW1hZ2UgaGFzIGZpbmlzZWQgbG9hZGluZy4KKyAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0g
b25lcnJvciBDYWxsYmFjayB0byBjYWxsIHdoZW4gYW4gZXJyb3Igb2NjdXJzLgorICogQHJldHVy
biB7IUltYWdlfSBUaGUgY3JlYXRlZCBpbWFnZS4KKyAqLwordmFyIG1ha2VJbWFnZSA9IGZ1bmN0
aW9uKHNyYywgb25sb2FkLCBvbmVycm9yKSB7CisgIHZhciBpbWcgPSBkb2N1bWVudC5jcmVhdGVF
bGVtZW50KCdpbWcnKTsKKyAgaWYgKG9ubG9hZCkgeworICAgIGltZy5vbmxvYWQgPSBvbmxvYWQ7
CisgIH0KKyAgaWYgKG9uZXJyb3IpIHsKKyAgICBpbWcub25lcnJvciA9IG9uZXJyb3I7CisgIH0g
ZWxzZSB7CisgICAgaW1nLm9uZXJyb3IgPSBmdW5jdGlvbigpIHsKKyAgICAgIGxvZygiV0FSTklO
RzogY3JlYXRpbmcgaW1hZ2UgZmFpbGVkOyBzcmM6ICIgKyB0aGlzLnNyYyk7CisgICAgfTsKKyAg
fQorICBpZiAoc3JjKSB7CisgICAgaW1nLnNyYyA9IHNyYzsKKyAgfQorICByZXR1cm4gaW1nOwor
fQorCisvKioKKyAqIE1ha2VzIGFuIGltYWdlIGVsZW1lbnQgZnJvbSBhIGNhbnZhcy4KKyAqIEBw
YXJhbSB7IUhUTUxDYW52YXN9IGNhbnZhcyBDYW52YXMgdG8gbWFrZSBpbWFnZSBmcm9tLgorICog
QHBhcmFtIHtmdW5jdGlvbigpfSBvbmxvYWQgQ2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRoZSBpbWFn
ZSBoYXMgZmluaXNlZCBsb2FkaW5nLgorICogQHBhcmFtIHtzdHJpbmd9IGltYWdlRm9ybWF0IElt
YWdlIGZvcm1hdCB0byBiZSBwYXNzZWQgdG8gdG9EYXRhVXJsKCkuCisgKiBAcmV0dXJuIHshSW1h
Z2V9IFRoZSBjcmVhdGVkIGltYWdlLgorICovCit2YXIgbWFrZUltYWdlRnJvbUNhbnZhcyA9IGZ1
bmN0aW9uKGNhbnZhcywgb25sb2FkLCBpbWFnZUZvcm1hdCkgeworICByZXR1cm4gbWFrZUltYWdl
KGNhbnZhcy50b0RhdGFVUkwoaW1hZ2VGb3JtYXQpLCBvbmxvYWQpOworfTsKKworLyoqCisgKiBN
YWtlcyBhIHZpZGVvIGVsZW1lbnQgZnJvbSBhIHNyYy4KKyAqIEBwYXJhbSB7c3RyaW5nfSBzcmMg
VmlkZW8gc291cmNlIFVSTC4KKyAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0gb25lcnJvciBDYWxsYmFj
ayB0byBjYWxsIHdoZW4gYW4gZXJyb3Igb2NjdXJzLgorICogQHJldHVybiB7IVZpZGVvfSBUaGUg
Y3JlYXRlZCB2aWRlby4KKyAqLwordmFyIG1ha2VWaWRlbyA9IGZ1bmN0aW9uKHNyYywgb25lcnJv
cikgeworICB2YXIgdmlkID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgndmlkZW8nKTsKKyAgdmlk
Lm11dGVkID0gdHJ1ZTsKKyAgaWYgKG9uZXJyb3IpIHsKKyAgICB2aWQub25lcnJvciA9IG9uZXJy
b3I7CisgIH0gZWxzZSB7CisgICAgdmlkLm9uZXJyb3IgPSBmdW5jdGlvbigpIHsKKyAgICAgIGxv
ZygiV0FSTklORzogY3JlYXRpbmcgdmlkZW8gZmFpbGVkOyBzcmM6ICIgKyB0aGlzLnNyYyk7Cisg
ICAgfTsKKyAgfQorICBpZiAoc3JjKSB7CisgICAgdmlkLnNyYyA9IHNyYzsKKyAgfQorICByZXR1
cm4gdmlkOworfQorCisvKioKKyAqIEluc2VydHMgYW4gaW1hZ2Ugd2l0aCBhIGNhcHRpb24gaW50
byAnZWxlbWVudCcuCisgKiBAcGFyYW0geyFIVE1MRWxlbWVudH0gZWxlbWVudCBFbGVtZW50IHRv
IGFwcGVuZCBpbWFnZSB0by4KKyAqIEBwYXJhbSB7c3RyaW5nfSBjYXB0aW9uIGNhcHRpb24gdG8g
YXNzb2NpYXRlIHdpdGggaW1hZ2UuCisgKiBAcGFyYW0geyFJbWFnZX0gaW1nIGltYWdlIHRvIGlu
c2VydC4KKyAqLwordmFyIGluc2VydEltYWdlID0gZnVuY3Rpb24oZWxlbWVudCwgY2FwdGlvbiwg
aW1nKSB7CisgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgdmFy
IGxhYmVsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7CisgIGxhYmVsLmFwcGVuZENo
aWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGNhcHRpb24pKTsKKyAgZGl2LmFwcGVuZENoaWxk
KGxhYmVsKTsKKyAgZGl2LmFwcGVuZENoaWxkKGltZyk7CisgIGVsZW1lbnQuYXBwZW5kQ2hpbGQo
ZGl2KTsKK307CisKKy8qKgorICogSW5zZXJ0cyBhICdsYWJlbCcgdGhhdCB3aGVuIGNsaWNrZWQg
ZXhwYW5kcyB0byB0aGUgcHJlIGZvcm1hdHRlZCB0ZXh0CisgKiBzdXBwbGllZCBieSAnc291cmNl
Jy4KKyAqIEBwYXJhbSB7IUhUTUxFbGVtZW50fSBlbGVtZW50IGVsZW1lbnQgdG8gYXBwZW5kIGxh
YmVsIHRvLgorICogQHBhcmFtIHtzdHJpbmd9IGxhYmVsIGxhYmVsIGZvciBhbmNob3IuCisgKiBA
cGFyYW0ge3N0cmluZ30gc291cmNlIHByZWZvcm1hdHRlZCB0ZXh0IHRvIGV4cGFuZCB0by4KKyAq
IEBwYXJhbSB7c3RyaW5nfSBvcHRfdXJsIFVSTCBvZiBzb3VyY2UuIElmIHByb3ZpZGVkIGEgbGlu
ayB0byB0aGUgc291cmNlIGZpbGUKKyAqICAgICB3aWxsIGFsc28gYmUgYWRkZWQuCisgKi8KK3Zh
ciBhZGRTaGFkZXJTb3VyY2UgPSBmdW5jdGlvbihlbGVtZW50LCBsYWJlbCwgc291cmNlLCBvcHRf
dXJsKSB7CisgIHZhciBkaXYgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgdmFy
IHMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwcmUiKTsKKyAgcy5jbGFzc05hbWUgPSAic2hh
ZGVyLXNvdXJjZSI7CisgIHMuc3R5bGUuZGlzcGxheSA9ICJub25lIjsKKyAgdmFyIG9sID0gZG9j
dW1lbnQuY3JlYXRlRWxlbWVudCgib2wiKTsKKyAgLy9zLmFwcGVuZENoaWxkKGRvY3VtZW50LmNy
ZWF0ZVRleHROb2RlKHNvdXJjZSkpOworICB2YXIgbGluZXMgPSBzb3VyY2Uuc3BsaXQoIlxuIik7
CisgIGZvciAodmFyIGlpID0gMDsgaWkgPCBsaW5lcy5sZW5ndGg7ICsraWkpIHsKKyAgICB2YXIg
bGluZSA9IGxpbmVzW2lpXTsKKyAgICB2YXIgbGkgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJs
aSIpOworICAgIGxpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGxpbmUpKTsK
KyAgICBvbC5hcHBlbmRDaGlsZChsaSk7CisgIH0KKyAgcy5hcHBlbmRDaGlsZChvbCk7CisgIHZh
ciBsID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOworICBsLmhyZWYgPSAic2hvdy1zaGFk
ZXItc291cmNlIjsKKyAgbC5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShsYWJl
bCkpOworICBsLmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgZnVuY3Rpb24oZXZlbnQpIHsKKyAg
ICAgIGlmIChldmVudC5wcmV2ZW50RGVmYXVsdCkgeworICAgICAgICBldmVudC5wcmV2ZW50RGVm
YXVsdCgpOworICAgICAgfQorICAgICAgcy5zdHlsZS5kaXNwbGF5ID0gKHMuc3R5bGUuZGlzcGxh
eSA9PSAnbm9uZScpID8gJ2Jsb2NrJyA6ICdub25lJzsKKyAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICB9LCBmYWxzZSk7CisgIGRpdi5hcHBlbmRDaGlsZChsKTsKKyAgaWYgKG9wdF91cmwpIHsKKyAg
ICB2YXIgdSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImEiKTsKKyAgICB1LmhyZWYgPSBvcHRf
dXJsOworICAgIGRpdi5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiICIpKTsK
KyAgICB1LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIoIiArIG9wdF91cmwg
KyAiKSIpKTsKKyAgICBkaXYuYXBwZW5kQ2hpbGQodSk7CisgIH0KKyAgZGl2LmFwcGVuZENoaWxk
KHMpOworICBlbGVtZW50LmFwcGVuZENoaWxkKGRpdik7Cit9OworCisvKioKKyAqIEluc2VydHMg
bGFiZWxzIHRoYXQgd2hlbiBjbGlja2VkIGV4cGFuZCB0byBzaG93IHRoZSBvcmlnaW5hbCBzb3Vy
Y2Ugb2YgdGhlCisgKiBzaGFkZXIgYW5kIGFsc28gdHJhbnNsYXRlZCBzb3VyY2Ugb2YgdGhlIHNo
YWRlciwgaWYgdGhhdCBpcyBhdmFpbGFibGUuCisgKiBAcGFyYW0ge1dlYkdMUmVuZGVyaW5nQ29u
dGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0geyFI
VE1MRWxlbWVudH0gZWxlbWVudCBlbGVtZW50IHRvIGFwcGVuZCBsYWJlbCB0by4KKyAqIEBwYXJh
bSB7c3RyaW5nfSBsYWJlbCBsYWJlbCBmb3IgYW5jaG9yLgorICogQHBhcmFtIHtXZWJHTFNoYWRl
cn0gc2hhZGVyIFNoYWRlciB0byBzaG93IHRoZSBzb3VyY2VzIGZvci4KKyAqIEBwYXJhbSB7c3Ry
aW5nfSBzaGFkZXJTb3VyY2UgT3JpZ2luYWwgc2hhZGVyIHNvdXJjZS4KKyAqIEBwYXJhbSB7c3Ry
aW5nfSBvcHRfdXJsIFVSTCBvZiBzb3VyY2UuIElmIHByb3ZpZGVkIGEgbGluayB0byB0aGUgc291
cmNlIGZpbGUKKyAqICAgICB3aWxsIGFsc28gYmUgYWRkZWQuCisgKi8KK3ZhciBhZGRTaGFkZXJT
b3VyY2VzID0gZnVuY3Rpb24oCisgICAgZ2wsIGVsZW1lbnQsIGxhYmVsLCBzaGFkZXIsIHNoYWRl
clNvdXJjZSwgb3B0X3VybCkgeworICBhZGRTaGFkZXJTb3VyY2UoZWxlbWVudCwgbGFiZWwsIHNo
YWRlclNvdXJjZSwgb3B0X3VybCk7CisKKyAgdmFyIGRlYnVnU2hhZGVycyA9IGdsLmdldEV4dGVu
c2lvbignV0VCR0xfZGVidWdfc2hhZGVycycpOworICBpZiAoZGVidWdTaGFkZXJzICYmIHNoYWRl
cikgeworICAgIHZhciB0cmFuc2xhdGVkU291cmNlID0gZGVidWdTaGFkZXJzLmdldFRyYW5zbGF0
ZWRTaGFkZXJTb3VyY2Uoc2hhZGVyKTsKKyAgICBpZiAodHJhbnNsYXRlZFNvdXJjZSAhPSAnJykg
eworICAgICAgYWRkU2hhZGVyU291cmNlKGVsZW1lbnQsIGxhYmVsICsgJyB0cmFuc2xhdGVkIGZv
ciBkcml2ZXInLCB0cmFuc2xhdGVkU291cmNlKTsKKyAgICB9CisgIH0KK307CisKKy8qKgorICog
U2VuZHMgc2hhZGVyIGluZm9ybWF0aW9uIHRvIHRoZSBzZXJ2ZXIgdG8gYmUgZHVtcGVkIGludG8g
dGV4dCBmaWxlcworICogd2hlbiB0ZXN0cyBhcmUgcnVuIGZyb20gd2l0aGluIHRoZSB0ZXN0LXJ1
bm5lciBoYXJuZXNzLgorICogQHBhcmFtIHtXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBX
ZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtzdHJpbmd9IHVybCBVUkwg
b2YgY3VycmVudC4KKyAqIEBwYXJhbSB7c3RyaW5nfSBwYXNzTXNnIFRlc3QgZGVzY3JpcHRpb24u
CisgKiBAcGFyYW0ge29iamVjdH0gdkluZm8gT2JqZWN0IGNvbnRhaW5pbmcgdmVydGV4IHNoYWRl
ciBpbmZvcm1hdGlvbi4KKyAqIEBwYXJhbSB7b2JqZWN0fSBmSW5mbyBPYmplY3QgY29udGFpbmlu
ZyBmcmFnbWVudCBzaGFkZXIgaW5mb3JtYXRpb24uCisgKi8KK3ZhciBkdW1wU2hhZGVyc0luZm8g
PSBmdW5jdGlvbihnbCwgdXJsLCBwYXNzTXNnLCB2SW5mbywgZkluZm8pIHsKKyAgdmFyIHNoYWRl
ckluZm8gPSB7fTsKKyAgc2hhZGVySW5mby51cmwgPSB1cmw7CisgIHNoYWRlckluZm8udGVzdERl
c2NyaXB0aW9uID0gcGFzc01zZzsKKyAgc2hhZGVySW5mby52TGFiZWwgPSB2SW5mby5sYWJlbDsK
KyAgc2hhZGVySW5mby52U2hvdWxkQ29tcGlsZSA9IHZJbmZvLnNoYWRlclN1Y2Nlc3M7CisgIHNo
YWRlckluZm8udlNvdXJjZSA9IHZJbmZvLnNvdXJjZTsKKyAgc2hhZGVySW5mby5mTGFiZWwgPSBm
SW5mby5sYWJlbDsKKyAgc2hhZGVySW5mby5mU2hvdWxkQ29tcGlsZSA9IGZJbmZvLnNoYWRlclN1
Y2Nlc3M7CisgIHNoYWRlckluZm8uZlNvdXJjZSA9IGZJbmZvLnNvdXJjZTsKKyAgc2hhZGVySW5m
by52VHJhbnNsYXRlZFNvdXJjZSA9IG51bGw7CisgIHNoYWRlckluZm8uZlRyYW5zbGF0ZWRTb3Vy
Y2UgPSBudWxsOworICB2YXIgZGVidWdTaGFkZXJzID0gZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJHTF9k
ZWJ1Z19zaGFkZXJzJyk7CisgIGlmIChkZWJ1Z1NoYWRlcnMpIHsKKyAgICBpZiAodkluZm8uc2hh
ZGVyKQorICAgICAgc2hhZGVySW5mby52VHJhbnNsYXRlZFNvdXJjZSA9IGRlYnVnU2hhZGVycy5n
ZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlKHZJbmZvLnNoYWRlcik7CisgICAgaWYgKGZJbmZvLnNo
YWRlcikKKyAgICAgIHNoYWRlckluZm8uZlRyYW5zbGF0ZWRTb3VyY2UgPSBkZWJ1Z1NoYWRlcnMu
Z2V0VHJhbnNsYXRlZFNoYWRlclNvdXJjZShmSW5mby5zaGFkZXIpOworICB9CisKKyAgdmFyIGR1
bXBTaGFkZXJJbmZvUmVxdWVzdCA9IG5ldyBYTUxIdHRwUmVxdWVzdCgpOworICBkdW1wU2hhZGVy
SW5mb1JlcXVlc3Qub3BlbignUE9TVCcsICIvZHVtcFNoYWRlckluZm8iLCB0cnVlKTsKKyAgZHVt
cFNoYWRlckluZm9SZXF1ZXN0LnNldFJlcXVlc3RIZWFkZXIoIkNvbnRlbnQtVHlwZSIsICJ0ZXh0
L3BsYWluIik7CisgIGR1bXBTaGFkZXJJbmZvUmVxdWVzdC5zZW5kKEpTT04uc3RyaW5naWZ5KHNo
YWRlckluZm8pKTsKK307CisKKy8vIEFkZCB5b3VyIHByZWZpeCBoZXJlLgordmFyIGJyb3dzZXJQ
cmVmaXhlcyA9IFsKKyAgIiIsCisgICJNT1pfIiwKKyAgIk9QXyIsCisgICJXRUJLSVRfIgorXTsK
KworLyoqCisgKiBHaXZlbiBhbiBleHRlbnNpb24gbmFtZSBsaWtlIFdFQkdMX2NvbXByZXNzZWRf
dGV4dHVyZV9zM3RjCisgKiByZXR1cm5zIHRoZSBuYW1lIG9mIHRoZSBzdXBwb3J0ZWQgdmVyc2lv
biBleHRlbnNpb24sIGxpa2UKKyAqIFdFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RldHVyZV9zM3Rj
CisgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOYW1lIG9mIGV4dGVuc2lvbiB0byBsb29rIGZvci4K
KyAqIEByZXR1cm4ge3N0cmluZ30gbmFtZSBvZiBleHRlbnNpb24gZm91bmQgb3IgdW5kZWZpbmVk
IGlmIG5vdAorICogICAgIGZvdW5kLgorICovCit2YXIgZ2V0U3VwcG9ydGVkRXh0ZW5zaW9uV2l0
aEtub3duUHJlZml4ZXMgPSBmdW5jdGlvbihnbCwgbmFtZSkgeworICB2YXIgc3VwcG9ydGVkID0g
Z2wuZ2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpOworICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgYnJv
d3NlclByZWZpeGVzLmxlbmd0aDsgKytpaSkgeworICAgIHZhciBwcmVmaXhlZE5hbWUgPSBicm93
c2VyUHJlZml4ZXNbaWldICsgbmFtZTsKKyAgICBpZiAoc3VwcG9ydGVkLmluZGV4T2YocHJlZml4
ZWROYW1lKSA+PSAwKSB7CisgICAgICByZXR1cm4gcHJlZml4ZWROYW1lOworICAgIH0KKyAgfQor
fTsKKworLyoqCisgKiBAcGFyYW0ge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdM
UmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOYW1lIG9m
IGV4dGVuc2lvbiB0byBsb29rIGZvci4KKyAqIEBwYXJhbSB7Ym9vbGVhbn0gZXh0ZW5zaW9uRW5h
YmxlZCBUcnVlIGlmIHRoZSBleHRlbnNpb24gd2FzIGVuYWJsZWQgc3VjY2Vzc2Z1bGx5IHZpYSBn
bC5nZXRFeHRlbnNpb24oKS4KKyAqLwordmFyIHJ1bkV4dGVuc2lvblN1cHBvcnRlZFRlc3QgPSBm
dW5jdGlvbihnbCwgbmFtZSwgZXh0ZW5zaW9uRW5hYmxlZCkgeworICB2YXIgcHJlZml4ZWROYW1l
ID0gZ2V0U3VwcG9ydGVkRXh0ZW5zaW9uV2l0aEtub3duUHJlZml4ZXMoZ2wsIG5hbWUpOworICBp
ZiAocHJlZml4ZWROYW1lICE9PSB1bmRlZmluZWQpIHsKKyAgICAgIGlmIChleHRlbnNpb25FbmFi
bGVkKSB7CisgICAgICAgICAgdGVzdFBhc3NlZChuYW1lICsgIiBsaXN0ZWQgYXMgc3VwcG9ydGVk
IGFuZCBnZXRFeHRlbnNpb24gc3VjY2VlZGVkIik7CisgICAgICB9IGVsc2UgeworICAgICAgICAg
IHRlc3RGYWlsZWQobmFtZSArICIgbGlzdGVkIGFzIHN1cHBvcnRlZCBidXQgZ2V0RXh0ZW5zaW9u
IGZhaWxlZCIpOworICAgICAgfQorICB9IGVsc2UgeworICAgICAgaWYgKGV4dGVuc2lvbkVuYWJs
ZWQpIHsKKyAgICAgICAgICB0ZXN0RmFpbGVkKG5hbWUgKyAiIG5vdCBsaXN0ZWQgYXMgc3VwcG9y
dGVkIGJ1dCBnZXRFeHRlbnNpb24gc3VjY2VlZGVkIik7CisgICAgICB9IGVsc2UgeworICAgICAg
ICAgIHRlc3RQYXNzZWQobmFtZSArICIgbm90IGxpc3RlZCBhcyBzdXBwb3J0ZWQgYW5kIGdldEV4
dGVuc2lvbiBmYWlsZWQgLS0gdGhpcyBpcyBsZWdhbCIpOworICAgICAgfQorICB9Cit9CisKKy8q
KgorICogR2l2ZW4gYW4gZXh0ZW5zaW9uIG5hbWUgbGlrZSBXRUJHTF9jb21wcmVzc2VkX3RleHR1
cmVfczN0YworICogcmV0dXJucyB0aGUgc3VwcG9ydGVkIHZlcnNpb24gZXh0ZW5zaW9uLCBsaWtl
CisgKiBXRUJLSVRfV0VCR0xfY29tcHJlc3NlZF90ZXR1cmVfczN0YworICogQHBhcmFtIHtzdHJp
bmd9IG5hbWUgTmFtZSBvZiBleHRlbnNpb24gdG8gbG9vayBmb3IuCisgKiBAcmV0dXJuIHtXZWJH
TEV4dGVuc2lvbn0gVGhlIGV4dGVuc2lvbiBvciB1bmRlZmluZWQgaWYgbm90CisgKiAgICAgZm91
bmQuCisgKi8KK3ZhciBnZXRFeHRlbnNpb25XaXRoS25vd25QcmVmaXhlcyA9IGZ1bmN0aW9uKGds
LCBuYW1lKSB7CisgIGZvciAodmFyIGlpID0gMDsgaWkgPCBicm93c2VyUHJlZml4ZXMubGVuZ3Ro
OyArK2lpKSB7CisgICAgdmFyIHByZWZpeGVkTmFtZSA9IGJyb3dzZXJQcmVmaXhlc1tpaV0gKyBu
YW1lOworICAgIHZhciBleHQgPSBnbC5nZXRFeHRlbnNpb24ocHJlZml4ZWROYW1lKTsKKyAgICBp
ZiAoZXh0KSB7CisgICAgICByZXR1cm4gZXh0OworICAgIH0KKyAgfQorfTsKKworLyoqCisgKiBS
ZXR1cm5zIHBvc3NpYmxlIHByZWZpeGVkIHZlcnNpb25zIG9mIGFuIGV4dGVuc2lvbidzIG5hbWUu
CisgKiBAcGFyYW0ge3N0cmluZ30gbmFtZSBOYW1lIG9mIGV4dGVuc2lvbi4gTWF5IGFscmVhZHkg
aW5jbHVkZSBhIHByZWZpeC4KKyAqIEByZXR1cm4ge0FycmF5LjxzdHJpbmc+fSBWYXJpYXRpb25z
IG9mIHRoZSBleHRlbnNpb24gbmFtZSB3aXRoIGtub3duCisgKiAgICAgYnJvd3NlciBwcmVmaXhl
cy4KKyAqLwordmFyIGdldEV4dGVuc2lvblByZWZpeGVkTmFtZXMgPSBmdW5jdGlvbihuYW1lKSB7
CisgIHZhciB1bnByZWZpeCA9IGZ1bmN0aW9uKG5hbWUpIHsKKyAgICBmb3IgKHZhciBpaSA9IDA7
IGlpIDwgYnJvd3NlclByZWZpeGVzLmxlbmd0aDsgKytpaSkgeworICAgICAgaWYgKGJyb3dzZXJQ
cmVmaXhlc1tpaV0ubGVuZ3RoID4gMCAmJgorICAgICAgICAgIG5hbWUuc3Vic3RyaW5nKDAsIGJy
b3dzZXJQcmVmaXhlc1tpaV0ubGVuZ3RoKS50b0xvd2VyQ2FzZSgpID09PQorICAgICAgICAgIGJy
b3dzZXJQcmVmaXhlc1tpaV0udG9Mb3dlckNhc2UoKSkgeworICAgICAgICByZXR1cm4gbmFtZS5z
dWJzdHJpbmcoYnJvd3NlclByZWZpeGVzW2lpXS5sZW5ndGgpOworICAgICAgfQorICAgIH0KKyAg
ICByZXR1cm4gbmFtZTsKKyAgfQorCisgIHZhciB1bnByZWZpeGVkID0gdW5wcmVmaXgobmFtZSk7
CisKKyAgdmFyIHZhcmlhdGlvbnMgPSBbXTsKKyAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGJyb3dz
ZXJQcmVmaXhlcy5sZW5ndGg7ICsraWkpIHsKKyAgICB2YXJpYXRpb25zLnB1c2goYnJvd3NlclBy
ZWZpeGVzW2lpXSArIHVucHJlZml4ZWQpOworICB9CisKKyAgcmV0dXJuIHZhcmlhdGlvbnM7Cit9
OworCit2YXIgcmVwbGFjZVJFID0gL1wkXCgoXHcrKVwpL2c7CisKKy8qKgorICogUmVwbGFjZXMg
c3RyaW5ncyB3aXRoIHByb3BlcnR5IHZhbHVlcy4KKyAqIEdpdmVuIGEgc3RyaW5nIGxpa2UgImhl
bGxvICQoZmlyc3QpICQobGFzdCkiIGFuZCBhbiBvYmplY3QKKyAqIGxpa2Uge2ZpcnN0OiJKb2hu
IiwgbGFzdDoiU21pdGgifSB3aWxsIHJldHVybgorICogImhlbGxvIEpvaG4gU21pdGgiLgorICog
QHBhcmFtIHtzdHJpbmd9IHN0ciBTdHJpbmcgdG8gZG8gcmVwbGFjZW1lbnRzIGluLgorICogQHBh
cmFtIHsuLi59IDEgb3IgbW9yZSBvYmplY3RzIGNvbnRhaW5pbmcgcHJvcGVydGllcy4KKyAqLwor
dmFyIHJlcGxhY2VQYXJhbXMgPSBmdW5jdGlvbihzdHIpIHsKKyAgdmFyIGFyZ3MgPSBhcmd1bWVu
dHM7CisgIHJldHVybiBzdHIucmVwbGFjZShyZXBsYWNlUkUsIGZ1bmN0aW9uKHN0ciwgcDEsIG9m
ZnNldCwgcykgeworICAgIGZvciAodmFyIGlpID0gMTsgaWkgPCBhcmdzLmxlbmd0aDsgKytpaSkg
eworICAgICAgaWYgKGFyZ3NbaWldW3AxXSAhPT0gdW5kZWZpbmVkKSB7CisgICAgICAgIHJldHVy
biBhcmdzW2lpXVtwMV07CisgICAgICB9CisgICAgfQorICAgIHRocm93ICJ1bmtub3duIHN0cmlu
ZyBwYXJhbSAnIiArIHAxICsgIiciOworICB9KTsKK307CisKK3ZhciB1cHBlckNhc2VGaXJzdExl
dHRlciA9IGZ1bmN0aW9uKHN0cikgeworICByZXR1cm4gc3RyLnN1YnN0cmluZygwLCAxKS50b1Vw
cGVyQ2FzZSgpICsgc3RyLnN1YnN0cmluZygxKTsKK307CisKKy8qKgorICogR2V0cyBhIHByZWZp
eGVkIHByb3BlcnR5LiBGb3IgZXhhbXBsZSwKKyAqCisgKiAgICAgdmFyIGZuID0gZ2V0UHJlZml4
ZWRQcm9wZXJ0eSgKKyAqICAgICAgICB3aW5kb3csCisgKiAgICAgICAgInJlcXVlc3RBbmltYXRp
b25GcmFtZSIpOworICoKKyAqIFdpbGwgcmV0dXJuIGVpdGhlcjoKKyAqICAgICJ3aW5kb3cucmVx
dWVzdEFuaW1hdGlvbkZyYW1lIiwKKyAqICAgICJ3aW5kb3cub1JlcXVlc3RBbmltYXRpb25GcmFt
ZSIsCisgKiAgICAid2luZG93Lm1zUmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwKKyAqICAgICJ3aW5k
b3cubW96UmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwKKyAqICAgICJ3aW5kb3cud2ViS2l0UmVxdWVz
dEFuaW1hdGlvbkZyYW1lIiwKKyAqICAgIHVuZGVmaW5lZAorICoKKyAqIHRoZSBub24tcHJlZml4
ZWQgZnVuY3Rpb24gaXMgdHJpZWQgZmlyc3QuCisgKi8KK3ZhciBwcm9wZXJ0eVByZWZpeGVzID0g
WyIiLCAibW96IiwgIm1zIiwgIm8iLCAid2Via2l0Il07Cit2YXIgZ2V0UHJlZml4ZWRQcm9wZXJ0
eSA9IGZ1bmN0aW9uKG9iaiwgcHJvcGVydHlOYW1lKSB7CisgIGZvciAodmFyIGlpID0gMDsgaWkg
PCBwcm9wZXJ0eVByZWZpeGVzLmxlbmd0aDsgKytpaSkgeworICAgIHZhciBwcmVmaXggPSBwcm9w
ZXJ0eVByZWZpeGVzW2lpXTsKKyAgICB2YXIgbmFtZSA9IHByZWZpeCArIHByb3BlcnR5TmFtZTsK
KyAgICBsb2cobmFtZSk7CisgICAgdmFyIHByb3BlcnR5ID0gb2JqW25hbWVdOworICAgIGlmIChw
cm9wZXJ0eSkgeworICAgICAgcmV0dXJuIHByb3BlcnR5OworICAgIH0KKyAgICBpZiAoaWkgPT0g
MCkgeworICAgICAgcHJvcGVydHlOYW1lID0gdXBwZXJDYXNlRmlyc3RMZXR0ZXIocHJvcGVydHlO
YW1lKTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIHVuZGVmaW5lZDsKK307CisKK3ZhciBfcmVxdWVz
dEFuaW1GcmFtZTsKKworLyoqCisgKiBQcm92aWRlcyByZXF1ZXN0QW5pbWF0aW9uRnJhbWUgaW4g
YSBjcm9zcyBicm93c2VyIHdheS4KKyAqLwordmFyIHJlcXVlc3RBbmltRnJhbWUgPSBmdW5jdGlv
bihjYWxsYmFjaykgeworICBpZiAoIV9yZXF1ZXN0QW5pbUZyYW1lKSB7CisgICAgX3JlcXVlc3RB
bmltRnJhbWUgPSBnZXRQcmVmaXhlZFByb3BlcnR5KHdpbmRvdywgInJlcXVlc3RBbmltYXRpb25G
cmFtZSIpIHx8CisgICAgICBmdW5jdGlvbihjYWxsYmFjaywgZWxlbWVudCkgeworICAgICAgICBy
ZXR1cm4gd2luZG93LnNldFRpbWVvdXQoY2FsbGJhY2ssIDEwMDAgLyA3MCk7CisgICAgICB9Owor
ICB9CisgIF9yZXF1ZXN0QW5pbUZyYW1lLmNhbGwod2luZG93LCBjYWxsYmFjayk7Cit9OworCisv
KioKKyAqIFByb3ZpZGVzIHZpZGVvLnJlcXVlc3RWaWRlb0ZyYW1lQ2FsbGJhY2sgaW4gYSBjcm9z
cyBicm93c2VyIHdheS4KKyAqIFJldHVybnMgYSBwcm9wZXJ0eSwgb3IgdW5kZWZpbmVkIGlmIHVu
c3Vwb3J0ZWQuCisgKi8KK3ZhciBnZXRSZXF1ZXN0VmlkRnJhbWVDYWxsYmFjayA9IGZ1bmN0aW9u
KCkgeworICByZXR1cm4gSFRNTFZpZGVvRWxlbWVudC5wcm90b3R5cGVbInJlcXVlc3RWaWRlb0Zy
YW1lQ2FsbGJhY2siXTsKK307CisKK3ZhciBfY2FuY2VsQW5pbUZyYW1lOworCisvKioKKyAqIFBy
b3ZpZGVzIGNhbmNlbEFuaW1hdGlvbkZyYW1lIGluIGEgY3Jvc3MgYnJvd3NlciB3YXkuCisgKi8K
K3ZhciBjYW5jZWxBbmltRnJhbWUgPSBmdW5jdGlvbihyZXF1ZXN0KSB7CisgIGlmICghX2NhbmNl
bEFuaW1GcmFtZSkgeworICAgIF9jYW5jZWxBbmltRnJhbWUgPSBnZXRQcmVmaXhlZFByb3BlcnR5
KHdpbmRvdywgImNhbmNlbEFuaW1hdGlvbkZyYW1lIikgfHwKKyAgICAgIHdpbmRvdy5jbGVhclRp
bWVvdXQ7CisgIH0KKyAgX2NhbmNlbEFuaW1GcmFtZS5jYWxsKHdpbmRvdywgcmVxdWVzdCk7Cit9
OworCisvKioKKyAqIFByb3ZpZGVzIHJlcXVlc3RGdWxsU2NyZWVuIGluIGEgY3Jvc3MgYnJvd3Nl
ciB3YXkuCisgKi8KK3ZhciByZXF1ZXN0RnVsbFNjcmVlbiA9IGZ1bmN0aW9uKGVsZW1lbnQpIHsK
KyAgdmFyIGZuID0gZ2V0UHJlZml4ZWRQcm9wZXJ0eShlbGVtZW50LCAicmVxdWVzdEZ1bGxTY3Jl
ZW4iKTsKKyAgaWYgKGZuKSB7CisgICAgZm4uY2FsbChlbGVtZW50KTsKKyAgfQorfTsKKworLyoq
CisgKiBQcm92aWRlcyBjYW5jZWxGdWxsU2NyZWVuIGluIGEgY3Jvc3MgYnJvd3NlciB3YXkuCisg
Ki8KK3ZhciBjYW5jZWxGdWxsU2NyZWVuID0gZnVuY3Rpb24oKSB7CisgIHZhciBmbiA9IGdldFBy
ZWZpeGVkUHJvcGVydHkoZG9jdW1lbnQsICJjYW5jZWxGdWxsU2NyZWVuIik7CisgIGlmIChmbikg
eworICAgIGZuLmNhbGwoZG9jdW1lbnQpOworICB9Cit9OworCit2YXIgZnVsbFNjcmVlblN0YXRl
TmFtZTsKKyhmdW5jdGlvbigpIHsKKyAgdmFyIGZ1bGxTY3JlZW5TdGF0ZU5hbWVzID0gWworICAg
ICJpc0Z1bGxTY3JlZW4iLAorICAgICJmdWxsU2NyZWVuIgorICBdOworICBmb3IgKHZhciBpaSA9
IDA7IGlpIDwgZnVsbFNjcmVlblN0YXRlTmFtZXMubGVuZ3RoOyArK2lpKSB7CisgICAgdmFyIHBy
b3BlcnR5TmFtZSA9IGZ1bGxTY3JlZW5TdGF0ZU5hbWVzW2lpXTsKKyAgICBmb3IgKHZhciBqaiA9
IDA7IGpqIDwgcHJvcGVydHlQcmVmaXhlcy5sZW5ndGg7ICsramopIHsKKyAgICAgIHZhciBwcmVm
aXggPSBwcm9wZXJ0eVByZWZpeGVzW2pqXTsKKyAgICAgIGlmIChwcmVmaXgubGVuZ3RoKSB7Cisg
ICAgICAgIHByb3BlcnR5TmFtZSA9IHVwcGVyQ2FzZUZpcnN0TGV0dGVyKHByb3BlcnR5TmFtZSk7
CisgICAgICAgIGZ1bGxTY3JlZW5TdGF0ZU5hbWUgPSBwcmVmaXggKyBwcm9wZXJ0eU5hbWU7Cisg
ICAgICAgIGlmIChkb2N1bWVudFtmdWxsU2NyZWVuU3RhdGVOYW1lXSAhPT0gdW5kZWZpbmVkKSB7
CisgICAgICAgICAgcmV0dXJuOworICAgICAgICB9CisgICAgICB9CisgICAgfQorICAgIGZ1bGxT
Y3JlZW5TdGF0ZU5hbWUgPSB1bmRlZmluZWQ7CisgIH0KK30oKSk7CisKKy8qKgorICogQHJldHVy
biB7Ym9vbGVhbn0gVHJ1ZSBpZiBmdWxsc2NyZWVuIG1vZGUgaXMgYWN0aXZlLgorICovCit2YXIg
Z2V0RnVsbFNjcmVlblN0YXRlID0gZnVuY3Rpb24oKSB7CisgIGxvZygiZnVsbHNjcmVlbnN0YXRl
bmFtZToiICsgZnVsbFNjcmVlblN0YXRlTmFtZSk7CisgIGxvZyhkb2N1bWVudFtmdWxsU2NyZWVu
U3RhdGVOYW1lXSk7CisgIHJldHVybiBkb2N1bWVudFtmdWxsU2NyZWVuU3RhdGVOYW1lXTsKK307
CisKKy8qKgorICogQHBhcmFtIHshSFRNTEVsZW1lbnR9IGVsZW1lbnQgVGhlIGVsZW1lbnQgdG8g
Z28gZnVsbHNjcmVlbi4KKyAqIEBwYXJhbSB7IWZ1bmN0aW9uKGJvb2xlYW4pfSBjYWxsYmFjayBB
IGZ1bmN0aW9uIHRoYXQgd2lsbCBiZSBjYWxsZWQKKyAqICAgICAgICB3aGVuIGVudGVyaW5nL2V4
aXRpbmcgZnVsbHNjcmVlbi4gSXQgaXMgcGFzc2VkIHRydWUgaWYKKyAqICAgICAgICBlbnRlcmlu
ZyBmdWxsc2NyZWVuLCBmYWxzZSBpZiBleGl0aW5nLgorICovCit2YXIgb25GdWxsU2NyZWVuQ2hh
bmdlID0gZnVuY3Rpb24oZWxlbWVudCwgY2FsbGJhY2spIHsKKyAgcHJvcGVydHlQcmVmaXhlcy5m
b3JFYWNoKGZ1bmN0aW9uKHByZWZpeCkgeworICAgIHZhciBldmVudE5hbWUgPSBwcmVmaXggKyAi
ZnVsbHNjcmVlbmNoYW5nZSI7CisgICAgbG9nKCJhZGRldmVudDogIiArIGV2ZW50TmFtZSk7Cisg
ICAgZG9jdW1lbnQuYWRkRXZlbnRMaXN0ZW5lcihldmVudE5hbWUsIGZ1bmN0aW9uKGV2ZW50KSB7
CisgICAgICBsb2coImV2ZW50OiAiICsgZXZlbnROYW1lKTsKKyAgICAgIGNhbGxiYWNrKGdldEZ1
bGxTY3JlZW5TdGF0ZSgpKTsKKyAgICB9KTsKKyAgfSk7Cit9OworCisvKioKKyAqIEBwYXJhbSB7
IXN0cmluZ30gYnV0dG9uSWQgVGhlIGlkIG9mIHRoZSBidXR0b24gdGhhdCB3aWxsIHRvZ2dsZSBm
dWxsc2NyZWVuCisgKiAgICAgICAgbW9kZS4KKyAqIEBwYXJhbSB7IXN0cmluZ30gZnVsbHNjcmVl
bklkIFRoZSBpZCBvZiB0aGUgZWxlbWVudCB0byBnbyBmdWxsc2NyZWVuLgorICogQHBhcmFtIHsh
ZnVuY3Rpb24oYm9vbGVhbil9IGNhbGxiYWNrIEEgZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxl
ZAorICogICAgICAgIHdoZW4gZW50ZXJpbmcvZXhpdGluZyBmdWxsc2NyZWVuLiBJdCBpcyBwYXNz
ZWQgdHJ1ZSBpZgorICogICAgICAgIGVudGVyaW5nIGZ1bGxzY3JlZW4sIGZhbHNlIGlmIGV4aXRp
bmcuCisgKiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIGZ1bGxzY3JlZW4gbW9kZSBpcyBzdXBw
b3J0ZWQuCisgKi8KK3ZhciBzZXR1cEZ1bGxzY3JlZW4gPSBmdW5jdGlvbihidXR0b25JZCwgZnVs
bHNjcmVlbklkLCBjYWxsYmFjaykgeworICBpZiAoIWZ1bGxTY3JlZW5TdGF0ZU5hbWUpIHsKKyAg
ICByZXR1cm4gZmFsc2U7CisgIH0KKworICB2YXIgZnVsbHNjcmVlbkVsZW1lbnQgPSBkb2N1bWVu
dC5nZXRFbGVtZW50QnlJZChmdWxsc2NyZWVuSWQpOworICBvbkZ1bGxTY3JlZW5DaGFuZ2UoZnVs
bHNjcmVlbkVsZW1lbnQsIGNhbGxiYWNrKTsKKworICB2YXIgdG9nZ2xlRnVsbFNjcmVlbiA9IGZ1
bmN0aW9uKGV2ZW50KSB7CisgICAgaWYgKGdldEZ1bGxTY3JlZW5TdGF0ZSgpKSB7CisgICAgICBj
YW5jZWxGdWxsU2NyZWVuKGZ1bGxzY3JlZW5FbGVtZW50KTsKKyAgICB9IGVsc2UgeworICAgICAg
cmVxdWVzdEZ1bGxTY3JlZW4oZnVsbHNjcmVlbkVsZW1lbnQpOworICAgIH0KKyAgICBldmVudC5w
cmV2ZW50RGVmYXVsdCgpOworICAgIHJldHVybiBmYWxzZTsKKyAgfTsKKworICB2YXIgYnV0dG9u
RWxlbWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKGJ1dHRvbklkKTsKKyAgYnV0dG9uRWxl
bWVudC5hZGRFdmVudExpc3RlbmVyKCdjbGljaycsIHRvZ2dsZUZ1bGxTY3JlZW4pOworCisgIHJl
dHVybiB0cnVlOworfTsKKworLyoqCisgKiBXYWl0cyBmb3IgdGhlIGJyb3dzZXIgdG8gY29tcG9z
aXRlIHRoZSB3ZWIgcGFnZS4KKyAqIEBwYXJhbSB7ZnVuY3Rpb24oKX0gY2FsbGJhY2sgQSBmdW5j
dGlvbiB0byBjYWxsIGFmdGVyIGNvbXBvc2l0aW5nIGhhcyB0YWtlbgorICogICAgICAgIHBsYWNl
LgorICovCit2YXIgd2FpdEZvckNvbXBvc2l0ZSA9IGZ1bmN0aW9uKGNhbGxiYWNrKSB7CisgIHZh
ciBmcmFtZXMgPSA1OworICB2YXIgY291bnREb3duID0gZnVuY3Rpb24oKSB7CisgICAgaWYgKGZy
YW1lcyA9PSAwKSB7CisgICAgICAvLyBUT0RPKGticik6IHVuaWZ5IHdpdGgganMtdGVzdC1wcmUu
anMgYW5kIGVuYWJsZSB0aGVzZSB3aXRoCisgICAgICAvLyB2ZXJib3NlIGxvZ2dpbmcuCisgICAg
ICAvLyBsb2coIndhaXRGb3JDb21wb3NpdGU6IGNhbGxiYWNrIik7CisgICAgICBjYWxsYmFjaygp
OworICAgIH0gZWxzZSB7CisgICAgICAvLyBsb2coIndhaXRGb3JDb21wb3NpdGU6IGNvdW50ZG93
bigiICsgZnJhbWVzICsgIikiKTsKKyAgICAgIC0tZnJhbWVzOworICAgICAgcmVxdWVzdEFuaW1G
cmFtZS5jYWxsKHdpbmRvdywgY291bnREb3duKTsKKyAgICB9CisgIH07CisgIGNvdW50RG93bigp
OworfTsKKwordmFyIHNldFplcm9UaW1lb3V0ID0gKGZ1bmN0aW9uKCkgeworICAvLyBTZWUgaHR0
cHM6Ly9kYmFyb24ub3JnL2xvZy8yMDEwMDMwOS1mYXN0ZXItdGltZW91dHMKKworICB2YXIgdGlt
ZW91dHMgPSBbXTsKKyAgdmFyIG1lc3NhZ2VOYW1lID0gInplcm8tdGltZW91dC1tZXNzYWdlIjsK
KworICAvLyBMaWtlIHNldFRpbWVvdXQsIGJ1dCBvbmx5IHRha2VzIGEgZnVuY3Rpb24gYXJndW1l
bnQuICBUaGVyZSdzCisgIC8vIG5vIHRpbWUgYXJndW1lbnQgKGFsd2F5cyB6ZXJvKSBhbmQgbm8g
YXJndW1lbnRzICh5b3UgaGF2ZSB0bworICAvLyB1c2UgYSBjbG9zdXJlKS4KKyAgZnVuY3Rpb24g
c2V0WmVyb1RpbWVvdXQoZm4pIHsKKyAgICAgIHRpbWVvdXRzLnB1c2goZm4pOworICAgICAgd2lu
ZG93LnBvc3RNZXNzYWdlKG1lc3NhZ2VOYW1lLCAiKiIpOworICB9CisKKyAgZnVuY3Rpb24gaGFu
ZGxlTWVzc2FnZShldmVudCkgeworICAgICAgaWYgKGV2ZW50LnNvdXJjZSA9PSB3aW5kb3cgJiYg
ZXZlbnQuZGF0YSA9PSBtZXNzYWdlTmFtZSkgeworICAgICAgICAgIGV2ZW50LnN0b3BQcm9wYWdh
dGlvbigpOworICAgICAgICAgIGlmICh0aW1lb3V0cy5sZW5ndGggPiAwKSB7CisgICAgICAgICAg
ICAgIHZhciBmbiA9IHRpbWVvdXRzLnNoaWZ0KCk7CisgICAgICAgICAgICAgIGZuKCk7CisgICAg
ICAgICAgfQorICAgICAgfQorICB9CisKKyAgd2luZG93LmFkZEV2ZW50TGlzdGVuZXIoIm1lc3Nh
Z2UiLCBoYW5kbGVNZXNzYWdlLCB0cnVlKTsKKworICByZXR1cm4gc2V0WmVyb1RpbWVvdXQ7Cit9
KSgpOworCitmdW5jdGlvbiBkaXNwYXRjaFByb21pc2UoZm4pIHsKKyAgcmV0dXJuIG5ldyBQcm9t
aXNlKChmbl9yZXNvbHZlLCBmbl9yZWplY3QpID0+IHsKKyAgICBzZXRaZXJvVGltZW91dCgoKSA9
PiB7CisgICAgICBmbl9yZXNvbHZlKGZuKCkpOworICAgIH0pOworICB9KTsKK30KKworLyoqCisg
KiBSdW5zIGFuIGFycmF5IG9mIGZ1bmN0aW9ucywgeWllbGRpbmcgdG8gdGhlIGJyb3dzZXIgYmV0
d2VlbiBlYWNoIHN0ZXAuCisgKiBJZiB5b3Ugd2FudCB0byBrbm93IHdoZW4gYWxsIHRoZSBzdGVw
cyBhcmUgZmluaXNoZWQgYWRkIGEgbGFzdCBzdGVwLgorICogQHBhcmFtIHshQXJyYXkuPGZ1bmN0
aW9uKCk6IHZvaWQ+fSBzdGVwcyBBcnJheSBvZiBmdW5jdGlvbnMuCisgKi8KK3ZhciBydW5TdGVw
cyA9IGZ1bmN0aW9uKHN0ZXBzKSB7CisgIGlmICghc3RlcHMubGVuZ3RoKSB7CisgICAgcmV0dXJu
OworICB9CisKKyAgLy8gY29weSBzdGVwcyBzbyB0aGV5IGNhbid0IGJlIG1vZGlmZWQuCisgIHZh
ciBzdGVwc1RvUnVuID0gc3RlcHMuc2xpY2UoKTsKKyAgdmFyIGN1cnJlbnRTdGVwID0gMDsKKyAg
dmFyIHJ1bk5leHRTdGVwID0gZnVuY3Rpb24oKSB7CisgICAgc3RlcHNUb1J1bltjdXJyZW50U3Rl
cCsrXSgpOworICAgIGlmIChjdXJyZW50U3RlcCA8IHN0ZXBzVG9SdW4ubGVuZ3RoKSB7CisgICAg
ICBzZXRUaW1lb3V0KHJ1bk5leHRTdGVwLCAxKTsKKyAgICB9CisgIH07CisgIHJ1bk5leHRTdGVw
KCk7Cit9OworCisvKioKKyAqIFN0YXJ0cyBwbGF5aW5nIGEgdmlkZW8gYW5kIHdhaXRzIGZvciBp
dCB0byBiZSBjb25zdW1hYmxlLgorICogQHBhcmFtIHshSFRNTFZpZGVvRWxlbWVudH0gdmlkZW8g
QW4gSFRNTDUgVmlkZW8gZWxlbWVudC4KKyAqIEBwYXJhbSB7IWZ1bmN0aW9uKCFIVE1MVmlkZW9F
bGVtZW50KTogdm9pZH0gY2FsbGJhY2sgRnVuY3Rpb24gdG8gY2FsbCB3aGVuCisgKiAgICAgICAg
dmlkZW8gaXMgcmVhZHkuCisgKi8KK3ZhciBzdGFydFBsYXlpbmdBbmRXYWl0Rm9yVmlkZW8gPSBm
dW5jdGlvbih2aWRlbywgY2FsbGJhY2spIHsKKyAgdmFyIHJ2ZmMgPSBnZXRSZXF1ZXN0VmlkRnJh
bWVDYWxsYmFjaygpOworICBpZiAocnZmYyA9PT0gdW5kZWZpbmVkKSB7CisgICAgdmFyIHRpbWVX
YXRjaGVyID0gZnVuY3Rpb24oKSB7CisgICAgICBpZiAodmlkZW8uY3VycmVudFRpbWUgPiAwKSB7
CisgICAgICAgIGNhbGxiYWNrKHZpZGVvKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHJlcXVl
c3RBbmltRnJhbWUuY2FsbCh3aW5kb3csIHRpbWVXYXRjaGVyKTsKKyAgICAgIH0KKyAgICB9Owor
CisgICAgdGltZVdhdGNoZXIoKTsKKyAgfSBlbHNlIHsKKyAgICAvLyBDYWxscyB2aWRlby5yZXF1
ZXN0VmlkZW9GcmFtZUNhbGxiYWNrKF8gPT4geyBjYWxsYmFjayh2aWRlbykgfSkKKyAgICBydmZj
LmNhbGwodmlkZW8sIF8gPT4geyBjYWxsYmFjayh2aWRlbykgfSk7CisgIH0KKworICB2aWRlby5s
b29wID0gdHJ1ZTsKKyAgdmlkZW8ubXV0ZWQgPSB0cnVlOworICAvLyBTZWUgd2hldGhlciBzZXR0
aW5nIHRoZSBwcmVsb2FkIGZsYWcgZGUtZmxha2VzIHZpZGVvLXJlbGF0ZWQgdGVzdHMuCisgIHZp
ZGVvLnByZWxvYWQgPSAnYXV0byc7CisgIHZpZGVvLnBsYXkoKTsKK307CisKK3ZhciBnZXRIb3N0
ID0gZnVuY3Rpb24odXJsKSB7CisgIHVybCA9IHVybC5yZXBsYWNlKCJcXCIsICIvIik7CisgIHZh
ciBwb3MgPSB1cmwuaW5kZXhPZigiOi8vIik7CisgIGlmIChwb3MgPj0gMCkgeworICAgIHVybCA9
IHVybC5zdWJzdHIocG9zICsgMyk7CisgIH0KKyAgdmFyIHBhcnRzID0gdXJsLnNwbGl0KCcvJyk7
CisgIHJldHVybiBwYXJ0c1swXTsKK30KKworLy8gVGhpcyBmdW5jdGlvbiByZXR1cm5zIHRoZSBs
YXN0IDIgd29yZHMgb2YgdGhlIGRvbWFpbiBvZiBhIFVSTAorLy8gVGhpcyBpcyBwcm9iYWJseSBu
b3QgdGhlIGNvcnJlY3QgY2hlY2sgYnV0IGl0IHdpbGwgZG8gZm9yIG5vdy4KK3ZhciBnZXRCYXNl
RG9tYWluID0gZnVuY3Rpb24oaG9zdCkgeworICB2YXIgcGFydHMgPSBob3N0LnNwbGl0KCI6Iik7
CisgIHZhciBob3N0bmFtZSA9IHBhcnRzWzBdOworICB2YXIgcG9ydCA9IHBhcnRzWzFdIHx8ICI4
MCI7CisgIHBhcnRzID0gaG9zdG5hbWUuc3BsaXQoIi4iKTsKKyAgaWYocGFydHMubGVuZ3RoIDwg
MikKKyAgICByZXR1cm4gaG9zdG5hbWUgKyAiOiIgKyBwb3J0OworICB2YXIgdGxkID0gcGFydHNb
cGFydHMubGVuZ3RoLTFdOworICB2YXIgZG9tYWluID0gcGFydHNbcGFydHMubGVuZ3RoLTJdOwor
ICByZXR1cm4gZG9tYWluICsgIi4iICsgdGxkICsgIjoiICsgcG9ydDsKK30KKwordmFyIHJ1bm5p
bmdPbkxvY2FsaG9zdCA9IGZ1bmN0aW9uKCkgeworICBsZXQgaG9zdG5hbWUgPSB3aW5kb3cubG9j
YXRpb24uaG9zdG5hbWU7CisgIHJldHVybiBob3N0bmFtZSA9PSAibG9jYWxob3N0IiB8fAorICAg
IGhvc3RuYW1lID09ICIxMjcuMC4wLjEiIHx8CisgICAgaG9zdG5hbWUgPT0gIjo6MSI7Cit9CisK
K3ZhciBnZXRMb2NhbENyb3NzT3JpZ2luID0gZnVuY3Rpb24oKSB7CisgIHZhciBkb21haW47Cisg
IGlmICh3aW5kb3cubG9jYXRpb24uaG9zdC5pbmRleE9mKCJsb2NhbGhvc3QiKSAhPSAtMSkgewor
ICAgIC8vIFRPRE8oa2JyKTogZmlndXJlIG91dCB3aGV0aGVyIHRvIHVzZSBhbiBJUHY2IGxvb3Bi
YWNrIGFkZHJlc3MuCisgICAgZG9tYWluID0gIjEyNy4wLjAuMSI7CisgIH0gZWxzZSB7CisgICAg
ZG9tYWluID0gImxvY2FsaG9zdCI7CisgIH0KKworICB2YXIgcG9ydCA9IHdpbmRvdy5sb2NhdGlv
bi5wb3J0IHx8ICI4MCI7CisgIHJldHVybiB3aW5kb3cubG9jYXRpb24ucHJvdG9jb2wgKyAiLy8i
ICsgZG9tYWluICsgIjoiICsgcG9ydAorfQorCit2YXIgZ2V0UmVsYXRpdmVQYXRoID0gZnVuY3Rp
b24ocGF0aCkgeworICB2YXIgcmVscGFydHMgPSB3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUuc3Bs
aXQoIi8iKTsKKyAgcmVscGFydHMucG9wKCk7IC8vIFBvcCBvZmYgZmlsZW5hbWUKKyAgdmFyIHBh
dGhwYXJ0cyA9IHBhdGguc3BsaXQoIi8iKTsKKworICB2YXIgaTsKKyAgZm9yIChpID0gMDsgaSA8
IHBhdGhwYXJ0cy5sZW5ndGg7ICsraSkgeworICAgIHN3aXRjaCAocGF0aHBhcnRzW2ldKSB7Cisg
ICAgICBjYXNlICIiOiBicmVhazsKKyAgICAgIGNhc2UgIi4iOiBicmVhazsKKyAgICAgIGNhc2Ug
Ii4uIjoKKyAgICAgICAgcmVscGFydHMucG9wKCk7CisgICAgICAgIGJyZWFrOworICAgICAgZGVm
YXVsdDoKKyAgICAgICAgcmVscGFydHMucHVzaChwYXRocGFydHNbaV0pOworICAgICAgICBicmVh
azsKKyAgICB9CisgIH0KKworICByZXR1cm4gcmVscGFydHMuam9pbigiLyIpOworfQorCithc3lu
YyBmdW5jdGlvbiBsb2FkQ3Jvc3NPcmlnaW5JbWFnZShpbWcsIHdlYlVybCwgbG9jYWxVcmwpIHsK
KyAgaWYgKHJ1bm5pbmdPbkxvY2FsaG9zdCgpKSB7CisgICAgaW1nLnNyYyA9IGdldExvY2FsQ3Jv
c3NPcmlnaW4oKSArIGdldFJlbGF0aXZlUGF0aChsb2NhbFVybCk7CisgICAgY29uc29sZS5sb2co
J1tsb2FkQ3Jvc3NPcmlnaW5JbWFnZV0nLCAnICB0cnlpbmcnLCBpbWcuc3JjKTsKKyAgICBhd2Fp
dCBpbWcuZGVjb2RlKCk7CisgICAgcmV0dXJuOworICB9CisKKyAgdHJ5IHsKKyAgICBpbWcuc3Jj
ID0gZ2V0VXJsT3B0aW9ucygpLmltZ1VybCB8fCB3ZWJVcmw7CisgICAgY29uc29sZS5sb2coJ1ts
b2FkQ3Jvc3NPcmlnaW5JbWFnZV0nLCAndHJ5aW5nJywgaW1nLnNyYyk7CisgICAgYXdhaXQgaW1n
LmRlY29kZSgpOworICAgIHJldHVybjsKKyAgfSBjYXRjaCB7fQorCisgIHRocm93ICdjcmVhdGVD
cm9zc09yaWdpbkltYWdlIGZhaWxlZCc7Cit9CisKKy8qKgorICogQ29udmVydCBzUkdCIGNvbG9y
IHRvIGxpbmVhciBjb2xvci4KKyAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBjb2xvciBUaGUg
Y29sb3IgdG8gYmUgY29udmVydGVkLgorICogICAgICAgIFRoZSBhcnJheSBoYXMgNCBlbGVtZW50
cywgZm9yIGV4YW1wbGUgW1IsIEcsIEIsIEFdLgorICogICAgICAgIHdoZXJlIGVhY2ggZWxlbWVu
dCBpcyBpbiB0aGUgcmFuZ2UgMCB0byAyNTUuCisgKiBAcmV0dXJuIHshQXJyYXkuPG51bWJlcj59
IGNvbG9yIFRoZSBjb2xvciB0byBiZSBjb252ZXJ0ZWQuCisgKiAgICAgICAgVGhlIGFycmF5IGhh
cyA0IGVsZW1lbnRzLCBmb3IgZXhhbXBsZSBbUiwgRywgQiwgQV0uCisgKiAgICAgICAgd2hlcmUg
ZWFjaCBlbGVtZW50IGlzIGluIHRoZSByYW5nZSAwIHRvIDI1NS4KKyAqLwordmFyIHNSR0JUb0xp
bmVhciA9IGZ1bmN0aW9uKGNvbG9yKSB7CisgICAgcmV0dXJuIFtzUkdCQ2hhbm5lbFRvTGluZWFy
KGNvbG9yWzBdKSwKKyAgICAgICAgICAgIHNSR0JDaGFubmVsVG9MaW5lYXIoY29sb3JbMV0pLAor
ICAgICAgICAgICAgc1JHQkNoYW5uZWxUb0xpbmVhcihjb2xvclsyXSksCisgICAgICAgICAgICBj
b2xvclszXV0KK30KKworLyoqCisgKiBDb252ZXJ0IGxpbmVhciBjb2xvciB0byBzUkdCIGNvbG9y
LgorICogQHBhcmFtIHshQXJyYXkuPG51bWJlcj59IGNvbG9yIFRoZSBjb2xvciB0byBiZSBjb252
ZXJ0ZWQuCisgKiAgICAgICAgVGhlIGFycmF5IGhhcyA0IGVsZW1lbnRzLCBmb3IgZXhhbXBsZSBb
UiwgRywgQiwgQV0uCisgKiAgICAgICAgd2hlcmUgZWFjaCBlbGVtZW50IGlzIGluIHRoZSByYW5n
ZSAwIHRvIDI1NS4KKyAqIEByZXR1cm4geyFBcnJheS48bnVtYmVyPn0gY29sb3IgVGhlIGNvbG9y
IHRvIGJlIGNvbnZlcnRlZC4KKyAqICAgICAgICBUaGUgYXJyYXkgaGFzIDQgZWxlbWVudHMsIGZv
ciBleGFtcGxlIFtSLCBHLCBCLCBBXS4KKyAqICAgICAgICB3aGVyZSBlYWNoIGVsZW1lbnQgaXMg
aW4gdGhlIHJhbmdlIDAgdG8gMjU1LgorICovCit2YXIgbGluZWFyVG9TUkdCID0gZnVuY3Rpb24o
Y29sb3IpIHsKKyAgICByZXR1cm4gW2xpbmVhckNoYW5uZWxUb1NSR0IoY29sb3JbMF0pLAorICAg
ICAgICAgICAgbGluZWFyQ2hhbm5lbFRvU1JHQihjb2xvclsxXSksCisgICAgICAgICAgICBsaW5l
YXJDaGFubmVsVG9TUkdCKGNvbG9yWzJdKSwKKyAgICAgICAgICAgIGNvbG9yWzNdXQorfQorCitm
dW5jdGlvbiBzUkdCQ2hhbm5lbFRvTGluZWFyKHZhbHVlKSB7CisgICAgdmFsdWUgPSB2YWx1ZSAv
IDI1NTsKKyAgICBpZiAodmFsdWUgPD0gMC4wNDA0NSkKKyAgICAgICAgdmFsdWUgPSB2YWx1ZSAv
IDEyLjkyOworICAgIGVsc2UKKyAgICAgICAgdmFsdWUgPSBNYXRoLnBvdygodmFsdWUgKyAwLjA1
NSkgLyAxLjA1NSwgMi40KTsKKyAgICByZXR1cm4gTWF0aC50cnVuYyh2YWx1ZSAqIDI1NSArIDAu
NSk7Cit9CisKK2Z1bmN0aW9uIGxpbmVhckNoYW5uZWxUb1NSR0IodmFsdWUpIHsKKyAgICB2YWx1
ZSA9IHZhbHVlIC8gMjU1OworICAgIGlmICh2YWx1ZSA8PSAwLjApIHsKKyAgICAgICAgdmFsdWUg
PSAwLjA7CisgICAgfSBlbHNlIGlmICh2YWx1ZSA8IDAuMDAzMTMwOCkgeworICAgICAgICB2YWx1
ZSA9IHZhbHVlICogMTIuOTI7CisgICAgfSBlbHNlIGlmICh2YWx1ZSA8IDEpIHsKKyAgICAgICAg
dmFsdWUgPSBNYXRoLnBvdyh2YWx1ZSwgMC40MTY2NikgKiAxLjA1NSAtIDAuMDU1OworICAgIH0g
ZWxzZSB7CisgICAgICAgIHZhbHVlID0gMS4wOworICAgIH0KKyAgICByZXR1cm4gTWF0aC50cnVu
Yyh2YWx1ZSAqIDI1NSArIDAuNSk7Cit9CisKK2Z1bmN0aW9uIGNvbXBhcmVQaXhlbHMoY21wLCBy
ZWYsIHRvbGVyYW5jZSwgZGlmZikgeworICAgIGlmIChjbXAubGVuZ3RoICE9IHJlZi5sZW5ndGgp
IHsKKyAgICAgICAgdGVzdEZhaWxlZCgiaW52YWxpZCBwaXhlbCBzaXplLiIpOworICAgIH0KKwor
ICAgIHZhciBjb3VudCA9IDA7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBjbXAubGVuZ3RoOyBp
KyspIHsKKyAgICAgICAgaWYgKGRpZmYpIHsKKyAgICAgICAgICAgIGRpZmZbaSAqIDRdID0gMDsK
KyAgICAgICAgICAgIGRpZmZbaSAqIDQgKyAxXSA9IDI1NTsKKyAgICAgICAgICAgIGRpZmZbaSAq
IDQgKyAyXSA9IDA7CisgICAgICAgICAgICBkaWZmW2kgKiA0ICsgM10gPSAyNTU7CisgICAgICAg
IH0KKyAgICAgICAgaWYgKE1hdGguYWJzKGNtcFtpICogNF0gLSByZWZbaSAqIDRdKSA+IHRvbGVy
YW5jZSB8fAorICAgICAgICAgICAgTWF0aC5hYnMoY21wW2kgKiA0ICsgMV0gLSByZWZbaSAqIDQg
KyAxXSkgPiB0b2xlcmFuY2UgfHwKKyAgICAgICAgICAgIE1hdGguYWJzKGNtcFtpICogNCArIDJd
IC0gcmVmW2kgKiA0ICsgMl0pID4gdG9sZXJhbmNlIHx8CisgICAgICAgICAgICBNYXRoLmFicyhj
bXBbaSAqIDQgKyAzXSAtIHJlZltpICogNCArIDNdKSA+IHRvbGVyYW5jZSkgeworICAgICAgICAg
ICAgaWYgKGNvdW50IDwgMTApIHsKKyAgICAgICAgICAgICAgICB0ZXN0RmFpbGVkKCJQaXhlbCAi
ICsgaSArICI6IGV4cGVjdGVkICgiICsKKyAgICAgICAgICAgICAgICBbcmVmW2kgKiA0XSwgcmVm
W2kgKiA0ICsgMV0sIHJlZltpICogNCArIDJdLCByZWZbaSAqIDQgKyAzXV0gKyAiKSwgZ290ICgi
ICsKKyAgICAgICAgICAgICAgICBbY21wW2kgKiA0XSwgY21wW2kgKiA0ICsgMV0sIGNtcFtpICog
NCArIDJdLCBjbXBbaSAqIDQgKyAzXV0gKyAiKSIpOworICAgICAgICAgICAgfQorICAgICAgICAg
ICAgY291bnQrKzsKKyAgICAgICAgICAgIGlmIChkaWZmKSB7CisgICAgICAgICAgICAgICAgZGlm
ZltpICogNF0gPSAyNTU7CisgICAgICAgICAgICAgICAgZGlmZltpICogNCArIDFdID0gMDsKKyAg
ICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0KKworICAgIHJldHVybiBjb3VudDsKK30KKwor
ZnVuY3Rpb24gZGVzdHJveUNvbnRleHQoZ2wpIHsKKyAgZ2wuY2FudmFzLndpZHRoID0gMTsKKyAg
Z2wuY2FudmFzLmhlaWdodCA9IDE7CisgIGNvbnN0IGV4dCA9IGdsLmdldEV4dGVuc2lvbignV0VC
R0xfbG9zZV9jb250ZXh0Jyk7CisgIGlmIChleHQpIHsKKyAgICBleHQubG9zZUNvbnRleHQoKTsK
KyAgfQorfQorCitmdW5jdGlvbiBkZXN0cm95QWxsQ29udGV4dHMoKSB7CisgIGlmICghd2luZG93
Ll93dHVfY29udGV4dHMpCisgICAgcmV0dXJuOworICBmb3IgKGNvbnN0IHggb2Ygd2luZG93Ll93
dHVfY29udGV4dHMpIHsKKyAgICBkZXN0cm95Q29udGV4dCh4KTsKKyAgfQorICB3aW5kb3cuX3d0
dV9jb250ZXh0cyA9IFtdOworfQorCitmdW5jdGlvbiBkaXNwbGF5SW1hZ2VEaWZmKGNtcCwgcmVm
LCBkaWZmLCB3aWR0aCwgaGVpZ2h0KSB7CisgICAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoImRpdiIpOworCisgICAgdmFyIGNtcEltZyA9IGNyZWF0ZUltYWdlRnJvbVBpeGVsKGNt
cCwgd2lkdGgsIGhlaWdodCk7CisgICAgdmFyIHJlZkltZyA9IGNyZWF0ZUltYWdlRnJvbVBpeGVs
KHJlZiwgd2lkdGgsIGhlaWdodCk7CisgICAgdmFyIGRpZmZJbWcgPSBjcmVhdGVJbWFnZUZyb21Q
aXhlbChkaWZmLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICB3dHUuaW5zZXJ0SW1hZ2UoZGl2LCAiUmVm
ZXJlbmNlIiwgcmVmSW1nKTsKKyAgICB3dHUuaW5zZXJ0SW1hZ2UoZGl2LCAiUmVzdWx0IiwgY21w
SW1nKTsKKyAgICB3dHUuaW5zZXJ0SW1hZ2UoZGl2LCAiRGlmZmVyZW5jZSIsIGRpZmZJbWcpOwor
CisgICAgdmFyIGNvbnNvbGUgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpOwor
ICAgIGNvbnNvbGUuYXBwZW5kQ2hpbGQoZGl2KTsKK30KKworZnVuY3Rpb24gY3JlYXRlSW1hZ2VG
cm9tUGl4ZWwoYnVmLCB3aWR0aCwgaGVpZ2h0KSB7CisgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50
LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOworICAgIGNhbnZhcy53aWR0aCA9IHdpZHRoOworICAg
IGNhbnZhcy5oZWlnaHQgPSBoZWlnaHQ7CisgICAgdmFyIGN0eCA9IGNhbnZhcy5nZXRDb250ZXh0
KCIyZCIpOworICAgIHZhciBpbWdEYXRhID0gY3R4LmdldEltYWdlRGF0YSgwLCAwLCB3aWR0aCwg
aGVpZ2h0KTsKKworICAgIGZvciAodmFyIGkgPSAwOyBpIDwgYnVmLmxlbmd0aDsgaSsrKQorICAg
ICAgICBpbWdEYXRhLmRhdGFbaV0gPSBidWZbaV07CisgICAgY3R4LnB1dEltYWdlRGF0YShpbWdE
YXRhLCAwLCAwKTsKKyAgICB2YXIgaW1nID0gd3R1Lm1ha2VJbWFnZUZyb21DYW52YXMoY2FudmFz
KTsKKyAgICByZXR1cm4gaW1nOworfQorCithc3luYyBmdW5jdGlvbiBhd2FpdFRpbWVvdXQobXMp
IHsKKyAgYXdhaXQgbmV3IFByb21pc2UocmVzID0+IHsKKyAgICBzZXRUaW1lb3V0KCgpID0+IHsK
KyAgICAgIHJlcygpOworICAgIH0sIG1zKTsKKyAgfSk7Cit9CisKK2FzeW5jIGZ1bmN0aW9uIGF3
YWl0T3JUaW1lb3V0KHByb21pc2UsIG9wdF90aW1lb3V0X21zKSB7CisgIGFzeW5jIGZ1bmN0aW9u
IHRocm93T25UaW1lb3V0KG1zKSB7CisgICAgYXdhaXQgYXdhaXRUaW1lb3V0KG1zKTsKKyAgICB0
aHJvdyAndGltZW91dCc7CisgIH0KKworICBsZXQgdGltZW91dF9tcyA9IG9wdF90aW1lb3V0X21z
OworICBpZiAodGltZW91dF9tcyA9PT0gdW5kZWZpbmVkKQorICAgIHRpbWVvdXRfbXMgPSA1MDAw
OworCisgIGF3YWl0IFByb21pc2UucmFjZShbcHJvbWlzZSwgdGhyb3dPblRpbWVvdXQodGltZW91
dF9tcyldKTsKK30KKwordmFyIEFQSSA9IHsKKyAgYWRkU2hhZGVyU291cmNlOiBhZGRTaGFkZXJT
b3VyY2UsCisgIGFkZFNoYWRlclNvdXJjZXM6IGFkZFNoYWRlclNvdXJjZXMsCisgIGNhbmNlbEFu
aW1GcmFtZTogY2FuY2VsQW5pbUZyYW1lLAorICBjcmVhdGUzRENvbnRleHQ6IGNyZWF0ZTNEQ29u
dGV4dCwKKyAgR0xFcnJvckV4Y2VwdGlvbjogR0xFcnJvckV4Y2VwdGlvbiwKKyAgY3JlYXRlM0RD
b250ZXh0V2l0aFdyYXBwZXJUaGF0VGhyb3dzT25HTEVycm9yOiBjcmVhdGUzRENvbnRleHRXaXRo
V3JhcHBlclRoYXRUaHJvd3NPbkdMRXJyb3IsCisgIGNoZWNrQXJlYUluQW5kT3V0OiBjaGVja0Fy
ZWFJbkFuZE91dCwKKyAgY2hlY2tDYW52YXM6IGNoZWNrQ2FudmFzLAorICBjaGVja0NhbnZhc1Jl
Y3Q6IGNoZWNrQ2FudmFzUmVjdCwKKyAgY2hlY2tDYW52YXNSZWN0Q29sb3I6IGNoZWNrQ2FudmFz
UmVjdENvbG9yLAorICBjaGVja0NhbnZhc1JlY3RzOiBjaGVja0NhbnZhc1JlY3RzLAorICBjaGVj
a0Zsb2F0QnVmZmVyOiBjaGVja0Zsb2F0QnVmZmVyLAorICBjaGVja1RleHR1cmVTaXplOiBjaGVj
a1RleHR1cmVTaXplLAorICBjbGlwVG9SYW5nZTogY2xpcFRvUmFuZ2UsCisgIGNyZWF0ZUNvbG9y
ZWRUZXh0dXJlOiBjcmVhdGVDb2xvcmVkVGV4dHVyZSwKKyAgY3JlYXRlUHJvZ3JhbTogY3JlYXRl
UHJvZ3JhbSwKKyAgY2xlYXJBbmREcmF3VW5pdFF1YWQ6IGNsZWFyQW5kRHJhd1VuaXRRdWFkLAor
ICBjbGVhckFuZERyYXdJbmRleGVkUXVhZDogY2xlYXJBbmREcmF3SW5kZXhlZFF1YWQsCisgIGNv
bXBhcmVQaXhlbHM6IGNvbXBhcmVQaXhlbHMsCisgIGRlc3Ryb3lBbGxDb250ZXh0czogZGVzdHJv
eUFsbENvbnRleHRzLAorICBkZXN0cm95Q29udGV4dDogZGVzdHJveUNvbnRleHQsCisgIGRpc3Bh
dGNoUHJvbWlzZTogZGlzcGF0Y2hQcm9taXNlLAorICBkaXNwbGF5SW1hZ2VEaWZmOiBkaXNwbGF5
SW1hZ2VEaWZmLAorICBkcmF3VW5pdFF1YWQ6IGRyYXdVbml0UXVhZCwKKyAgZHJhd0luZGV4ZWRR
dWFkOiBkcmF3SW5kZXhlZFF1YWQsCisgIGRyYXdVQnl0ZUNvbG9yUXVhZDogZHJhd1VCeXRlQ29s
b3JRdWFkLAorICBkcmF3RmxvYXRDb2xvclF1YWQ6IGRyYXdGbG9hdENvbG9yUXVhZCwKKyAgZHVt
bXlTZXRQcm9ncmFtQW5kRHJhd05vdGhpbmc6IGR1bW15U2V0UHJvZ3JhbUFuZERyYXdOb3RoaW5n
LAorICBkdW1wU2hhZGVyc0luZm86IGR1bXBTaGFkZXJzSW5mbywKKyAgZW5kc1dpdGg6IGVuZHNX
aXRoLAorICBmYWlsSWZHTEVycm9yOiBmYWlsSWZHTEVycm9yLAorICBmaWxsVGV4dHVyZTogZmls
bFRleHR1cmUsCisgIGZyYW1lYnVmZmVyU3RhdHVzU2hvdWxkQmU6IGZyYW1lYnVmZmVyU3RhdHVz
U2hvdWxkQmUsCisgIGdldEJ5dGVzUGVyQ29tcG9uZW50OiBnZXRCeXRlc1BlckNvbXBvbmVudCwK
KyAgZ2V0RGVmYXVsdDNEQ29udGV4dFZlcnNpb246IGdldERlZmF1bHQzRENvbnRleHRWZXJzaW9u
LAorICBnZXRFeHRlbnNpb25QcmVmaXhlZE5hbWVzOiBnZXRFeHRlbnNpb25QcmVmaXhlZE5hbWVz
LAorICBnZXRFeHRlbnNpb25XaXRoS25vd25QcmVmaXhlczogZ2V0RXh0ZW5zaW9uV2l0aEtub3du
UHJlZml4ZXMsCisgIGdldEZpbGVMaXN0QXN5bmM6IGdldEZpbGVMaXN0QXN5bmMsCisgIGdldExh
c3RFcnJvcjogZ2V0TGFzdEVycm9yLAorICBnZXRQcmVmaXhlZFByb3BlcnR5OiBnZXRQcmVmaXhl
ZFByb3BlcnR5LAorICBnZXRTY3JpcHQ6IGdldFNjcmlwdCwKKyAgZ2V0U3VwcG9ydGVkRXh0ZW5z
aW9uV2l0aEtub3duUHJlZml4ZXM6IGdldFN1cHBvcnRlZEV4dGVuc2lvbldpdGhLbm93blByZWZp
eGVzLAorICBnZXRUeXBlZEFycmF5RWxlbWVudHNQZXJQaXhlbDogZ2V0VHlwZWRBcnJheUVsZW1l
bnRzUGVyUGl4ZWwsCisgIGdldFVybEFyZ3VtZW50czogZ2V0VXJsQXJndW1lbnRzLAorICBnZXRV
cmxPcHRpb25zOiBnZXRVcmxPcHRpb25zLAorICBnZXRBdHRyaWJNYXA6IGdldEF0dHJpYk1hcCwK
KyAgZ2V0VW5pZm9ybU1hcDogZ2V0VW5pZm9ybU1hcCwKKyAgZ2xFbnVtVG9TdHJpbmc6IGdsRW51
bVRvU3RyaW5nLAorICBnbEVycm9yU2hvdWxkQmU6IGdsRXJyb3JTaG91bGRCZSwKKyAgZ2xUeXBl
VG9UeXBlZEFycmF5VHlwZTogZ2xUeXBlVG9UeXBlZEFycmF5VHlwZSwKKyAgaGFzQXR0cmlidXRl
Q2FzZUluc2Vuc2l0aXZlOiBoYXNBdHRyaWJ1dGVDYXNlSW5zZW5zaXRpdmUsCisgIGluc2VydElt
YWdlOiBpbnNlcnRJbWFnZSwKKyAgaXNXZWJHTDI6IGlzV2ViR0wyLAorICBsaW5rUHJvZ3JhbTog
bGlua1Byb2dyYW0sCisgIGxvYWRDcm9zc09yaWdpbkltYWdlOiBsb2FkQ3Jvc3NPcmlnaW5JbWFn
ZSwKKyAgbG9hZEltYWdlQXN5bmM6IGxvYWRJbWFnZUFzeW5jLAorICBsb2FkSW1hZ2VzQXN5bmM6
IGxvYWRJbWFnZXNBc3luYywKKyAgbG9hZFByb2dyYW06IGxvYWRQcm9ncmFtLAorICBsb2FkUHJv
Z3JhbUZyb21GaWxlOiBsb2FkUHJvZ3JhbUZyb21GaWxlLAorICBsb2FkUHJvZ3JhbUZyb21TY3Jp
cHQ6IGxvYWRQcm9ncmFtRnJvbVNjcmlwdCwKKyAgbG9hZFByb2dyYW1Gcm9tU2NyaXB0RXhwZWN0
RXJyb3I6IGxvYWRQcm9ncmFtRnJvbVNjcmlwdEV4cGVjdEVycm9yLAorICBsb2FkU2hhZGVyOiBs
b2FkU2hhZGVyLAorICBsb2FkU2hhZGVyRnJvbUZpbGU6IGxvYWRTaGFkZXJGcm9tRmlsZSwKKyAg
bG9hZFNoYWRlckZyb21TY3JpcHQ6IGxvYWRTaGFkZXJGcm9tU2NyaXB0LAorICBsb2FkU3RhbmRh
cmRQcm9ncmFtOiBsb2FkU3RhbmRhcmRQcm9ncmFtLAorICBsb2FkU3RhbmRhcmRQcm9ncmFtQXN5
bmM6IGxvYWRTdGFuZGFyZFByb2dyYW1Bc3luYywKKyAgbG9hZFN0YW5kYXJkVmVydGV4U2hhZGVy
OiBsb2FkU3RhbmRhcmRWZXJ0ZXhTaGFkZXIsCisgIGxvYWRTdGFuZGFyZFZlcnRleFNoYWRlckFz
eW5jOiBsb2FkU3RhbmRhcmRWZXJ0ZXhTaGFkZXJBc3luYywKKyAgbG9hZFN0YW5kYXJkRnJhZ21l
bnRTaGFkZXI6IGxvYWRTdGFuZGFyZEZyYWdtZW50U2hhZGVyLAorICBsb2FkU3RhbmRhcmRGcmFn
bWVudFNoYWRlckFzeW5jOiBsb2FkU3RhbmRhcmRGcmFnbWVudFNoYWRlckFzeW5jLAorICBsb2Fk
VW5pZm9ybUJsb2NrUHJvZ3JhbTogbG9hZFVuaWZvcm1CbG9ja1Byb2dyYW0sCisgIGxvYWRVbmlm
b3JtQmxvY2tWZXJ0ZXhTaGFkZXI6IGxvYWRVbmlmb3JtQmxvY2tWZXJ0ZXhTaGFkZXIsCisgIGxv
YWRVbmlmb3JtQmxvY2tGcmFnbWVudFNoYWRlcjogbG9hZFVuaWZvcm1CbG9ja0ZyYWdtZW50U2hh
ZGVyLAorICBsb2FkVGV4dEZpbGVBc3luYzogbG9hZFRleHRGaWxlQXN5bmMsCisgIGxvYWRUZXh0
dXJlOiBsb2FkVGV4dHVyZSwKKyAgbG9nOiBsb2csCisgIGxvZ2dpbmdPZmY6IGxvZ2dpbmdPZmYs
CisgIG1ha2VDaGVja1JlY3Q6IG1ha2VDaGVja1JlY3QsCisgIG1ha2VJbWFnZTogbWFrZUltYWdl
LAorICBtYWtlSW1hZ2VGcm9tQ2FudmFzOiBtYWtlSW1hZ2VGcm9tQ2FudmFzLAorICBtYWtlVmlk
ZW86IG1ha2VWaWRlbywKKyAgZXJyb3I6IGVycm9yLAorICBydW5FeHRlbnNpb25TdXBwb3J0ZWRU
ZXN0OiBydW5FeHRlbnNpb25TdXBwb3J0ZWRUZXN0LAorICBzaGFsbG93Q29weU9iamVjdDogc2hh
bGxvd0NvcHlPYmplY3QsCisgIHNldERlZmF1bHQzRENvbnRleHRWZXJzaW9uOiBzZXREZWZhdWx0
M0RDb250ZXh0VmVyc2lvbiwKKyAgc2V0dXBDb2xvclF1YWQ6IHNldHVwQ29sb3JRdWFkLAorICBz
ZXR1cFByb2dyYW06IHNldHVwUHJvZ3JhbSwKKyAgc2V0dXBUcmFuc2Zvcm1GZWVkYmFja1Byb2dy
YW06IHNldHVwVHJhbnNmb3JtRmVlZGJhY2tQcm9ncmFtLAorICBzZXR1cFF1YWQ6IHNldHVwUXVh
ZCwKKyAgc2V0dXBRdWFkV2l0aFRleENvb3Jkczogc2V0dXBRdWFkV2l0aFRleENvb3JkcywKKyAg
c2V0dXBJbmRleGVkUXVhZDogc2V0dXBJbmRleGVkUXVhZCwKKyAgc2V0dXBJbmRleGVkUXVhZFdp
dGhPcHRpb25zOiBzZXR1cEluZGV4ZWRRdWFkV2l0aE9wdGlvbnMsCisgIHNldHVwU2ltcGxlQ29s
b3JQcm9ncmFtOiBzZXR1cFNpbXBsZUNvbG9yUHJvZ3JhbSwKKyAgc2V0dXBTaW1wbGVUZXh0dXJl
UHJvZ3JhbTogc2V0dXBTaW1wbGVUZXh0dXJlUHJvZ3JhbSwKKyAgc2V0dXBTaW1wbGVUZXh0dXJl
UHJvZ3JhbUVTU0wzMDA6IHNldHVwU2ltcGxlVGV4dHVyZVByb2dyYW1FU1NMMzAwLAorICBzZXR1
cFNpbXBsZUN1YmVNYXBUZXh0dXJlUHJvZ3JhbTogc2V0dXBTaW1wbGVDdWJlTWFwVGV4dHVyZVBy
b2dyYW0sCisgIHNldHVwU2ltcGxlVmVydGV4Q29sb3JQcm9ncmFtOiBzZXR1cFNpbXBsZVZlcnRl
eENvbG9yUHJvZ3JhbSwKKyAgc2V0dXBOb1RleENvb3JkVGV4dHVyZVByb2dyYW06IHNldHVwTm9U
ZXhDb29yZFRleHR1cmVQcm9ncmFtLAorICBzZXR1cFRleHR1cmVkUXVhZDogc2V0dXBUZXh0dXJl
ZFF1YWQsCisgIHNldHVwVGV4dHVyZWRRdWFkV2l0aFRleENvb3Jkczogc2V0dXBUZXh0dXJlZFF1
YWRXaXRoVGV4Q29vcmRzLAorICBzZXR1cFRleHR1cmVkUXVhZFdpdGhDdWJlTWFwOiBzZXR1cFRl
eHR1cmVkUXVhZFdpdGhDdWJlTWFwLAorICBzZXR1cFVuaXRRdWFkOiBzZXR1cFVuaXRRdWFkLAor
ICBzZXRGbG9hdERyYXdDb2xvcjogc2V0RmxvYXREcmF3Q29sb3IsCisgIHNldFVCeXRlRHJhd0Nv
bG9yOiBzZXRVQnl0ZURyYXdDb2xvciwKKyAgc3RhcnRQbGF5aW5nQW5kV2FpdEZvclZpZGVvOiBz
dGFydFBsYXlpbmdBbmRXYWl0Rm9yVmlkZW8sCisgIHN0YXJ0c1dpdGg6IHN0YXJ0c1dpdGgsCisg
IHNob3VsZEdlbmVyYXRlR0xFcnJvcjogc2hvdWxkR2VuZXJhdGVHTEVycm9yLAorICBzaG91bGRU
aHJvdzogc2hvdWxkVGhyb3csCisgIHJlYWRGaWxlOiByZWFkRmlsZSwKKyAgcmVhZEZpbGVMaXN0
OiByZWFkRmlsZUxpc3QsCisgIHJlcGxhY2VQYXJhbXM6IHJlcGxhY2VQYXJhbXMsCisgIHJlcXVl
c3RBbmltRnJhbWU6IHJlcXVlc3RBbmltRnJhbWUsCisgIHJ1blN0ZXBzOiBydW5TdGVwcywKKyAg
d2FpdEZvckNvbXBvc2l0ZTogd2FpdEZvckNvbXBvc2l0ZSwKKworICAvLyBmdWxsc2NyZWVuIGFw
aQorICBzZXR1cEZ1bGxzY3JlZW46IHNldHVwRnVsbHNjcmVlbiwKKworICAvLyBzUkdCIGNvbnZl
cnRlciBhcGkKKyAgc1JHQlRvTGluZWFyOiBzUkdCVG9MaW5lYXIsCisgIGxpbmVhclRvU1JHQjog
bGluZWFyVG9TUkdCLAorCisgIGdldEhvc3Q6IGdldEhvc3QsCisgIGdldEJhc2VEb21haW46IGdl
dEJhc2VEb21haW4sCisgIHJ1bm5pbmdPbkxvY2FsaG9zdDogcnVubmluZ09uTG9jYWxob3N0LAor
ICBnZXRMb2NhbENyb3NzT3JpZ2luOiBnZXRMb2NhbENyb3NzT3JpZ2luLAorICBnZXRSZWxhdGl2
ZVBhdGg6IGdldFJlbGF0aXZlUGF0aCwKKyAgYXdhaXRPclRpbWVvdXQ6IGF3YWl0T3JUaW1lb3V0
LAorICBhd2FpdFRpbWVvdXQ6IGF3YWl0VGltZW91dCwKKworICBub25lOiBmYWxzZQorfTsKKwor
T2JqZWN0LmRlZmluZVByb3BlcnRpZXMoQVBJLCB7CisgIG5vVGV4Q29vcmRUZXh0dXJlVmVydGV4
U2hhZGVyOiB7IHZhbHVlOiBub1RleENvb3JkVGV4dHVyZVZlcnRleFNoYWRlciwgd3JpdGFibGU6
IGZhbHNlIH0sCisgIHNpbXBsZVRleHR1cmVWZXJ0ZXhTaGFkZXI6IHsgdmFsdWU6IHNpbXBsZVRl
eHR1cmVWZXJ0ZXhTaGFkZXIsIHdyaXRhYmxlOiBmYWxzZSB9LAorICBzaW1wbGVUZXh0dXJlVmVy
dGV4U2hhZGVyRVNTTDMwMDogeyB2YWx1ZTogc2ltcGxlVGV4dHVyZVZlcnRleFNoYWRlckVTU0wz
MDAsIHdyaXRhYmxlOiBmYWxzZSB9LAorICBzaW1wbGVDb2xvckZyYWdtZW50U2hhZGVyOiB7IHZh
bHVlOiBzaW1wbGVDb2xvckZyYWdtZW50U2hhZGVyLCB3cml0YWJsZTogZmFsc2UgfSwKKyAgc2lt
cGxlQ29sb3JGcmFnbWVudFNoYWRlckVTU0wzMDA6IHsgdmFsdWU6IHNpbXBsZUNvbG9yRnJhZ21l
bnRTaGFkZXJFU1NMMzAwLCB3cml0YWJsZTogZmFsc2UgfSwKKyAgc2ltcGxlVmVydGV4U2hhZGVy
OiB7IHZhbHVlOiBzaW1wbGVWZXJ0ZXhTaGFkZXIsIHdyaXRhYmxlOiBmYWxzZSB9LAorICBzaW1w
bGVWZXJ0ZXhTaGFkZXJFU1NMMzAwOiB7IHZhbHVlOiBzaW1wbGVWZXJ0ZXhTaGFkZXJFU1NMMzAw
LCB3cml0YWJsZTogZmFsc2UgfSwKKyAgc2ltcGxlVGV4dHVyZUZyYWdtZW50U2hhZGVyOiB7IHZh
bHVlOiBzaW1wbGVUZXh0dXJlRnJhZ21lbnRTaGFkZXIsIHdyaXRhYmxlOiBmYWxzZSB9LAorICBz
aW1wbGVUZXh0dXJlRnJhZ21lbnRTaGFkZXJFU1NMMzAwOiB7IHZhbHVlOiBzaW1wbGVUZXh0dXJl
RnJhZ21lbnRTaGFkZXJFU1NMMzAwLCB3cml0YWJsZTogZmFsc2UgfSwKKyAgc2ltcGxlSGlnaFBy
ZWNpc2lvblRleHR1cmVGcmFnbWVudFNoYWRlcjogeyB2YWx1ZTogc2ltcGxlSGlnaFByZWNpc2lv
blRleHR1cmVGcmFnbWVudFNoYWRlciwgd3JpdGFibGU6IGZhbHNlIH0sCisgIHNpbXBsZUN1YmVN
YXBUZXh0dXJlRnJhZ21lbnRTaGFkZXI6IHsgdmFsdWU6IHNpbXBsZUN1YmVNYXBUZXh0dXJlRnJh
Z21lbnRTaGFkZXIsIHdyaXRhYmxlOiBmYWxzZSB9LAorICBzaW1wbGVWZXJ0ZXhDb2xvckZyYWdt
ZW50U2hhZGVyOiB7IHZhbHVlOiBzaW1wbGVWZXJ0ZXhDb2xvckZyYWdtZW50U2hhZGVyLCB3cml0
YWJsZTogZmFsc2UgfSwKKyAgc2ltcGxlVmVydGV4Q29sb3JWZXJ0ZXhTaGFkZXI6IHsgdmFsdWU6
IHNpbXBsZVZlcnRleENvbG9yVmVydGV4U2hhZGVyLCB3cml0YWJsZTogZmFsc2UgfQorfSk7CisK
K3JldHVybiBBUEk7CisKK30oKSk7CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJnbC9yZXNv
dXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5jc3MgYi9MYXlv
dXRUZXN0cy93ZWJnbC9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9yZXNvdXJjZXMvanMtdGVz
dC1zdHlsZS5jc3MKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uNWY2ODM5YjYyMTQ3NzNiMGEwMGJjOGEyYjNiNjJhY2Y2
NGRjMWRlZQotLS0gL2Rldi9udWxsCisrKyBiL0xheW91dFRlc3RzL3dlYmdsL3Jlc291cmNlcy93
ZWJnbF90ZXN0X2ZpbGVzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcwpAQCAtMCwwICsxLDIw
IEBACisucGFzcyB7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgY29sb3I6IGdyZWVuOwor
fQorLmZhaWwgeworICAgIGZvbnQtd2VpZ2h0OiBib2xkOworICAgIGNvbG9yOiByZWQ7Cit9Cisu
d2FybiB7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgY29sb3I6IHllbGxvdzsKKyAgICB0
ZXh0LXNoYWRvdzogMXB4IDFweCAjZmYwMDAwCit9CisjY29uc29sZSB7CisgICAgd2hpdGUtc3Bh
Y2U6IHByZS13cmFwOworICAgIGZvbnQtZmFtaWx5OiBtb25vc3BhY2U7Cit9Citib2R5IHsKKyAg
ICBiYWNrZ3JvdW5kLWNvbG9yOiAjZmZmZmZmOworfQo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409741</attachid>
            <date>2020-09-25 14:35:38 -0700</date>
            <delta_ts>2020-09-25 14:53:35 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216949-20200925143538.patch</filename>
            <type>text/plain</type>
            <size>183511</size>
            <attacher name="James Darpinian">jdarpinian</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3Mzg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggYTNmYjY4OWRlNjEwNTlmMzdkZTRhMTkwMTJhZmUzZWI1ZmExMTM0MS4uMjhhMjNlNjYyZGE4
MDY3ZGE2ZWQ5ZjJlOWQ0NWE3ZWNjYzY4Yjc4YSAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA5LTI0ICBKYW1lcyBEYXJwaW5pYW4gIDxqZGFycGlu
aWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBTdXBwb3J0IEVYVF9mbG9hdF9ibGVuZAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2OTQ5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiBzcmMvbGliQU5H
TEUvcmVuZGVyZXIvZ2wvcmVuZGVyZXJnbF91dGlscy5jcHA6CisgICAgICAgIChyeDo6bmF0aXZl
Z2xfZ2w6OkdlbmVyYXRlQ2Fwcyk6CisKIDIwMjAtMDktMTEgIEphbWVzIERhcnBpbmlhbiAgPGpk
YXJwaW5pYW5AY2hyb21pdW0ub3JnPgogCiAgICAgICAgIFtXZWJHTDJdIFN1cHBvcnQgRVhUX2Nv
bG9yX2J1ZmZlcl9oYWxmX2Zsb2F0IG9uIFdlYkdMIDIuMCBjb250ZXh0cwpkaWZmIC0tZ2l0IGEv
U291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCmluZGV4
IDJiODkxNGY3NDhlYjkzNjg2Y2MzZjUzMDQ2M2M5ZTAyYzJiYjgzNjEuLjJlYTE4NGQ4Y2UzMjc2
ODZhZDBlZWEwZGU5ZmQ4YjVjMjJhNGUwYzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0No
YW5nZUxvZworKysgYi9Tb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKQEAgLTEsMyArMSwzNiBAQAor
MjAyMC0wOS0yNCAgSmFtZXMgRGFycGluaWFuICA8amRhcnBpbmlhbkBjaHJvbWl1bS5vcmc+CisK
KyAgICAgICAgU3VwcG9ydCBFWFRfZmxvYXRfYmxlbmQKKyAgICAgICAgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTIxNjk0OQorCisgICAgICAgIFJldmlld2VkIGJ5IE5P
Qk9EWSAoT09QUyEpLgorCisgICAgICAgIFRlc3Q6IHdlYmdsL2NvbmZvcm1hbmNlL2V4dGVuc2lv
bnMvZXh0LWZsb2F0LWJsZW5kLmh0bWwKKworICAgICAgICAqIENNYWtlTGlzdHMudHh0OgorICAg
ICAgICAqIERlcml2ZWRTb3VyY2VzLm1ha2U6CisgICAgICAgICogU291cmNlcy50eHQ6CisgICAg
ICAgICogV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qOgorICAgICAgICAqIGJpbmRp
bmdzL2pzL0pTRE9NQ29udmVydFdlYkdMLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OmNvbnZlcnRU
b0pTVmFsdWUpOgorICAgICAgICAqIGh0bWwvY2FudmFzL0VYVEZsb2F0QmxlbmQuY3BwOiBBZGRl
ZC4KKyAgICAgICAgKFdlYkNvcmU6OkVYVEZsb2F0QmxlbmQ6OkVYVEZsb2F0QmxlbmQpOgorICAg
ICAgICAoV2ViQ29yZTo6RVhURmxvYXRCbGVuZDo6Z2V0TmFtZSBjb25zdCk6CisgICAgICAgIChX
ZWJDb3JlOjpFWFRGbG9hdEJsZW5kOjpzdXBwb3J0ZWQpOgorICAgICAgICAqIGh0bWwvY2FudmFz
L0VYVEZsb2F0QmxlbmQuaDogQWRkZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvRVhURmxvYXRC
bGVuZC5pZGw6IEFkZGVkLgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0Nv
bnRleHQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6Z2V0
RXh0ZW5zaW9uKToKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMMlJlbmRlcmluZ0NvbnRleHQ6Omdl
dFN1cHBvcnRlZEV4dGVuc2lvbnMpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMRXh0ZW5z
aW9uLmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcDoK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0RXh0ZW5zaW9uKToK
KyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dDo6Z2V0U3VwcG9ydGVkRXh0
ZW5zaW9ucyk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpleHRl
bnNpb25Jc0VuYWJsZWQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZTo6bG9zZUV4dGVuc2lvbnMpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dEJhc2UuaDoKKwogMjAyMC0wOS0yMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpAYXBw
bGUuY29tPgogCiAgICAgICAgIFZhbHVlcyByZXR1cm5lZCBieSBGRlRGcmFtZTo6ZG9GRlQoKSBh
cmUgdHdpY2UgYXMgbGFyZ2UgYXMgdGhleSBzaG91bGQgYmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9U
aGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9yZW5kZXJlcmdsX3V0aWxz
LmNwcCBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9nbC9y
ZW5kZXJlcmdsX3V0aWxzLmNwcAppbmRleCA0ZWExMDZhY2U4ODRlMzVlYjFkNDIyNGNlZWY5MDhh
MTc2MWNlMzAxLi4zYWI2NTc5NWJiNjY5MDQxNWM5MDdkZWY2NWZlZmZiODIyMDIyMGIyIDEwMDY0
NAotLS0gYS9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMvbGliQU5HTEUvcmVuZGVyZXIvZ2wv
cmVuZGVyZXJnbF91dGlscy5jcHAKKysrIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xp
YkFOR0xFL3JlbmRlcmVyL2dsL3JlbmRlcmVyZ2xfdXRpbHMuY3BwCkBAIC0xNDgxLDcgKzE0ODEs
OCBAQCB2b2lkIEdlbmVyYXRlQ2Fwcyhjb25zdCBGdW5jdGlvbnNHTCAqZnVuY3Rpb25zLAogICAg
IC8vIEVYVF9mbG9hdF9ibGVuZAogICAgIC8vIEFzc3VtZSBhbGwgZGVza3RvcCBkcml2ZXIgc3Vw
cG9ydHMgdGhpcyBieSBkZWZhdWx0LgogICAgIGV4dGVuc2lvbnMtPmZsb2F0QmxlbmQgPSBmdW5j
dGlvbnMtPnN0YW5kYXJkID09IFNUQU5EQVJEX0dMX0RFU0tUT1AgfHwKLSAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgZnVuY3Rpb25zLT5oYXNHTEVTRXh0ZW5zaW9uKCJHTF9FWFRfZmxvYXRf
YmxlbmQiKTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZnVuY3Rpb25zLT5oYXNHTEVT
RXh0ZW5zaW9uKCJHTF9FWFRfZmxvYXRfYmxlbmQiKSB8fAorICAgICAgICAgICAgICAgICAgICAg
ICAgICAgICBmdW5jdGlvbnMtPmlzQXRMZWFzdEdMRVMoZ2w6OlZlcnNpb24oMywgMikpOwogCiAg
ICAgLy8gQU5HTEVfYmFzZV92ZXJ0ZXhfYmFzZV9pbnN0YW5jZQogICAgIGV4dGVuc2lvbnMtPmJh
c2VWZXJ0ZXhCYXNlSW5zdGFuY2UgPQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvQ01ha2VM
aXN0cy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dAppbmRleCA1MDc5Y2IxOWY0
NDYwNDdiZTY4NWE4ZjhmNGE5YWI1YWZlZDYyN2NjLi41MjY5ZGM3ZDFhZmRiYTI3ZTRhZjkzNDJj
NjkwMDQzZTAxMzhkMjMzIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4
dAorKysgYi9Tb3VyY2UvV2ViQ29yZS9DTWFrZUxpc3RzLnR4dApAQCAtMTQzOCw2ICsxNDM4LDcg
QEAgaWYgKEVOQUJMRV9XRUJHTCkKICAgICAgICAgaHRtbC9jYW52YXMvRVhUQmxlbmRNaW5NYXgu
Y3BwCiAgICAgICAgIGh0bWwvY2FudmFzL0VYVENvbG9yQnVmZmVyRmxvYXQuY3BwCiAgICAgICAg
IGh0bWwvY2FudmFzL0VYVENvbG9yQnVmZmVySGFsZkZsb2F0LmNwcAorICAgICAgICBodG1sL2Nh
bnZhcy9FWFRGbG9hdEJsZW5kLmNwcAogICAgICAgICBodG1sL2NhbnZhcy9FWFRGcmFnRGVwdGgu
Y3BwCiAgICAgICAgIGh0bWwvY2FudmFzL0VYVFNoYWRlclRleHR1cmVMT0QuY3BwCiAgICAgICAg
IGh0bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5jcHAKQEAgLTE0OTQsNiAr
MTQ5NSw3IEBAIGxpc3QoQVBQRU5EIFdlYkNvcmVfSURMX0ZJTEVTCiAgICAgaHRtbC9jYW52YXMv
RVhUQmxlbmRNaW5NYXguaWRsCiAgICAgaHRtbC9jYW52YXMvRVhUQ29sb3JCdWZmZXJGbG9hdC5p
ZGwKICAgICBodG1sL2NhbnZhcy9FWFRDb2xvckJ1ZmZlckhhbGZGbG9hdC5pZGwKKyAgICBodG1s
L2NhbnZhcy9FWFRGbG9hdEJsZW5kLmlkbAogICAgIGh0bWwvY2FudmFzL0VYVEZyYWdEZXB0aC5p
ZGwKICAgICBodG1sL2NhbnZhcy9FWFRTaGFkZXJUZXh0dXJlTE9ELmlkbAogICAgIGh0bWwvY2Fu
dmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5pZGwKZGlmZiAtLWdpdCBhL1NvdXJjZS9X
ZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UgYi9Tb3VyY2UvV2ViQ29yZS9EZXJpdmVkU291cmNl
cy5tYWtlCmluZGV4IGUwYWYyMGY1ZDgyNzA3NzA4YTc0Nzc2NzU0ZWJiZGNlMmUwNDM0ZTAuLmIx
NTY1ZmIwYzE0ZjIyYjE4Y2ZlNGViMmExZWEyYzg1YjIyY2QyMWMgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL0Rlcml2ZWRTb3VyY2VzLm1ha2UKKysrIGIvU291cmNlL1dlYkNvcmUvRGVyaXZl
ZFNvdXJjZXMubWFrZQpAQCAtOTQ1LDYgKzk0NSw3IEBAIEpTX0JJTkRJTkdfSURMUyA9IFwKICAg
ICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0VYVEJsZW5kTWluTWF4LmlkbCBcCiAgICAgJChXZWJD
b3JlKS9odG1sL2NhbnZhcy9FWFRDb2xvckJ1ZmZlckZsb2F0LmlkbCBcCiAgICAgJChXZWJDb3Jl
KS9odG1sL2NhbnZhcy9FWFRDb2xvckJ1ZmZlckhhbGZGbG9hdC5pZGwgXAorICAgICQoV2ViQ29y
ZSkvaHRtbC9jYW52YXMvRVhURmxvYXRCbGVuZC5pZGwgXAogICAgICQoV2ViQ29yZSkvaHRtbC9j
YW52YXMvRVhURnJhZ0RlcHRoLmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9FWFRT
aGFkZXJUZXh0dXJlTE9ELmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1sL2NhbnZhcy9FWFRUZXh0
dXJlRmlsdGVyQW5pc290cm9waWMuaWRsIFwKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1Nv
dXJjZXMudHh0IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKaW5kZXggNzI3NTYzZTVmYjc3
YTQ1OTQzMTBjNDBlMzNlZTQ2NjhjYjg1YThmOC4uNDA3ZjZiNTQ3YjA3ODI4YjE1NjRmMGFlN2Jj
YTBlZmJkMzk3YThmMCAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKKysr
IGIvU291cmNlL1dlYkNvcmUvU291cmNlcy50eHQKQEAgLTEyMzksNiArMTIzOSw3IEBAIGh0bWwv
Y2FudmFzL0NhbnZhc1N0eWxlLmNwcAogaHRtbC9jYW52YXMvRVhUQmxlbmRNaW5NYXguY3BwCiBo
dG1sL2NhbnZhcy9FWFRDb2xvckJ1ZmZlckZsb2F0LmNwcAogaHRtbC9jYW52YXMvRVhUQ29sb3JC
dWZmZXJIYWxmRmxvYXQuY3BwCitodG1sL2NhbnZhcy9FWFRGbG9hdEJsZW5kLmNwcAogaHRtbC9j
YW52YXMvRVhURnJhZ0RlcHRoLmNwcAogaHRtbC9jYW52YXMvRVhUU2hhZGVyVGV4dHVyZUxPRC5j
cHAKIGh0bWwvY2FudmFzL0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5jcHAKQEAgLTI4NDks
NiArMjg1MCw3IEBAIEpTRHluYW1pY3NDb21wcmVzc29yT3B0aW9ucy5jcHAKIEpTRVhUQmxlbmRN
aW5NYXguY3BwCiBKU0VYVENvbG9yQnVmZmVyRmxvYXQuY3BwCiBKU0VYVENvbG9yQnVmZmVySGFs
ZkZsb2F0LmNwcAorSlNFWFRGbG9hdEJsZW5kLmNwcAogSlNFWFRGcmFnRGVwdGguY3BwCiBKU0VY
VFNoYWRlclRleHR1cmVMT0QuY3BwCiBKU0VYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5jcHAK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4
cHJvaiBiL1NvdXJjZS9XZWJDb3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagpp
bmRleCAzZGNjNWU3MWI4YjEzMzkwMDI2MjFhYzdiNmNhYjc0MGFkZmNlMjFiLi5jYTM5Nzc0YjQw
NDk5ZDIyMmI3Nzg4NjMyOWIyZDhmYTY4ODBiODBjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKKysrIGIvU291cmNlL1dlYkNvcmUv
V2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9qCkBAIC0xMjA0Myw2ICsxMjA0Myw5IEBA
CiAJCUEzM0M5RjkxMjRGODM1QUEwMDBGMDg0NSAvKiBXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNU
Q3NSR0IuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBs
YXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gV2ViR0xDb21wcmVzc2Vk
VGV4dHVyZVMzVENzUkdCLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CiAJCUEzM0M5Rjkz
MjRGODM1QUIwMDBGMDg0NSAvKiBXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQ3NSR0IuY3BwICov
ID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jcHAuY3BwOyBwYXRoID0gV2ViR0xDb21wcmVzc2VkVGV4dHVy
ZVMzVENzUkdCLmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTMzQzlGOTQyNEY4
MzVBQjAwMEYwODQ1IC8qIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDc1JHQi5pZGwgKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSB0ZXh0OyBwYXRoID0gV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVENzUkdCLmlkbDsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTM3MDQ5RDgyNTFENEI4RTAwOUJBMUIzIC8qIEVY
VEZsb2F0QmxlbmQuaWRsICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGlu
ZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gdGV4dDsgcGF0aCA9IEVYVEZsb2F0QmxlbmQuaWRs
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMzcwNDlEQTI1MUQ0QjhFMDA5QkExQjMg
LyogRVhURmxvYXRCbGVuZC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBFWFRG
bG9hdEJsZW5kLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEzNzA0OURCMjUxRDRC
OEYwMDlCQTFCMyAvKiBFWFRGbG9hdEJsZW5kLmNwcCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJl
bmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3Bw
LmNwcDsgcGF0aCA9IEVYVEZsb2F0QmxlbmQuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9
OwogCQlBM0FGOUQ4MTIwMzI1MkVFMDA2Q0FEMDYgLyogVXNlckFnZW50Q29jb2EubW0gKi8gPSB7
aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5
cGUgPSBzb3VyY2Vjb2RlLmNwcC5vYmpjcHA7IHBhdGggPSBVc2VyQWdlbnRDb2NvYS5tbTsgc291
cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTNBRjlEODIyMDMyNTMyNDAwNkNBRDA2IC8qIFVz
ZXJBZ2VudC5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBVc2VyQWdlbnQuaDsg
c291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTNBRjlEODMyMDMyNTY5MTAwNkNBRDA2IC8q
IFVzZXJBZ2VudElPUy5tbSAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2Rp
bmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9
IFVzZXJBZ2VudElPUy5tbTsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKQEAgLTE5MzMwLDYg
KzE5MzMzLDkgQEAKIAkJCQk2RTUzODhEQTI0NThBRTE5MDA3NkFFMDMgLyogRVhUQ29sb3JCdWZm
ZXJIYWxmRmxvYXQuY3BwICovLAogCQkJCTZFNTM4OERFMjQ1OEFFMUMwMDc2QUUwMyAvKiBFWFRD
b2xvckJ1ZmZlckhhbGZGbG9hdC5oICovLAogCQkJCTZFNTM4OERGMjQ1OEFFMUMwMDc2QUUwMyAv
KiBFWFRDb2xvckJ1ZmZlckhhbGZGbG9hdC5pZGwgKi8sCisJCQkJQTM3MDQ5REIyNTFENEI4RjAw
OUJBMUIzIC8qIEVYVEZsb2F0QmxlbmQuY3BwICovLAorCQkJCUEzNzA0OURBMjUxRDRCOEUwMDlC
QTFCMyAvKiBFWFRGbG9hdEJsZW5kLmggKi8sCisJCQkJQTM3MDQ5RDgyNTFENEI4RTAwOUJBMUIz
IC8qIEVYVEZsb2F0QmxlbmQuaWRsICovLAogCQkJCTcyRjFBRDlGMUEzOTA0QzMwMDAxNEUxOCAv
KiBFWFRGcmFnRGVwdGguY3BwICovLAogCQkJCTcyRjFBREEwMUEzOTA0QzMwMDAxNEUxOCAvKiBF
WFRGcmFnRGVwdGguaCAqLywKIAkJCQk3MkYxQURBMTFBMzkwNEMzMDAwMTRFMTggLyogRVhURnJh
Z0RlcHRoLmlkbCAqLywKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pT
RE9NQ29udmVydFdlYkdMLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29u
dmVydFdlYkdMLmNwcAppbmRleCBkMDU2YTI2OGU2N2FmMjE3MjcxZDk2MDI3ZjE5NjBhMjY1OGIx
ZjMxLi44NzVhZjM0NGY2NzAzZjNkNmEzMDE0MTdkNDg3N2EyM2YwNjU1Nzg3IDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRXZWJHTC5jcHAKKysrIGIv
U291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01Db252ZXJ0V2ViR0wuY3BwCkBAIC0zMyw2
ICszMyw3IEBACiAjaW5jbHVkZSAiSlNFWFRCbGVuZE1pbk1heC5oIgogI2luY2x1ZGUgIkpTRVhU
Q29sb3JCdWZmZXJGbG9hdC5oIgogI2luY2x1ZGUgIkpTRVhUQ29sb3JCdWZmZXJIYWxmRmxvYXQu
aCIKKyNpbmNsdWRlICJKU0VYVEZsb2F0QmxlbmQuaCIKICNpbmNsdWRlICJKU0VYVEZyYWdEZXB0
aC5oIgogI2luY2x1ZGUgIkpTRVhUU2hhZGVyVGV4dHVyZUxPRC5oIgogI2luY2x1ZGUgIkpTRVhU
VGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmgiCkBAIC0yMTcsNiArMjE4LDggQEAgSlNWYWx1ZSBj
b252ZXJ0VG9KU1ZhbHVlKEpTR2xvYmFsT2JqZWN0JiBsZXhpY2FsR2xvYmFsT2JqZWN0LCBKU0RP
TUdsb2JhbE9iamVjdCYKICAgICAgICAgcmV0dXJuIHRvSlMoJmxleGljYWxHbG9iYWxPYmplY3Qs
ICZnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0PEFOR0xFSW5zdGFuY2VkQXJyYXlzJj4oZXh0ZW5z
aW9uKSk7CiAgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6RVhUQ29sb3JCdWZmZXJIYWxmRmxvYXRO
YW1lOgogICAgICAgICByZXR1cm4gdG9KUygmbGV4aWNhbEdsb2JhbE9iamVjdCwgJmdsb2JhbE9i
amVjdCwgc3RhdGljX2Nhc3Q8RVhUQ29sb3JCdWZmZXJIYWxmRmxvYXQmPihleHRlbnNpb24pKTsK
KyAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpFWFRGbG9hdEJsZW5kTmFtZToKKyAgICAgICAgcmV0
dXJuIHRvSlMoJmxleGljYWxHbG9iYWxPYmplY3QsICZnbG9iYWxPYmplY3QsIHN0YXRpY19jYXN0
PEVYVEZsb2F0QmxlbmQmPihleHRlbnNpb24pKTsKICAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpX
ZWJHTENvbG9yQnVmZmVyRmxvYXROYW1lOgogICAgICAgICByZXR1cm4gdG9KUygmbGV4aWNhbEds
b2JhbE9iamVjdCwgJmdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8V2ViR0xDb2xvckJ1ZmZlckZs
b2F0Jj4oZXh0ZW5zaW9uKSk7CiAgICAgY2FzZSBXZWJHTEV4dGVuc2lvbjo6RVhUQ29sb3JCdWZm
ZXJGbG9hdE5hbWU6CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRG
bG9hdEJsZW5kLmNwcCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVEZsb2F0QmxlbmQu
Y3BwCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAuLjhlZjY4NzkzM2FhZWNmNWI4ZDMzY2UwMjA3ODgyYzJiZGQ1Nzg5NjEK
LS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRGbG9hdEJs
ZW5kLmNwcApAQCAtMCwwICsxLDU4IEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxl
IEluYy4gQWxsIHJpZ2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNl
IGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNh
dGlvbiwgYXJlIHBlcm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9u
cworICogYXJlIG1ldDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2Rl
IG11c3QgcmV0YWluIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlz
dCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVk
aXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5
cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9s
bG93aW5nIGRpc2NsYWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3Ro
ZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElT
IFNPRlRXQVJFIElTIFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJ
UyIgQU5EIEFOWQorICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFO
VEFCSUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElT
Q0xBSU1FRC4gSU4gTk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBM
SUFCTEUgRk9SIEFOWQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwg
RVhFTVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBO
T1QgTElNSVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNF
UzsKKyAqIExPU1MgT0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJV
UFRJT04pIEhPV0VWRVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFks
IFdIRVRIRVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNM
VURJTkcgTkVHTElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0Yg
VEhFIFVTRSBPRgorICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NT
SUJJTElUWSBPRiBTVUNIIERBTUFHRS4KKyAqLworCisjaW5jbHVkZSAiY29uZmlnLmgiCisKKyNp
ZiBFTkFCTEUoV0VCR0wpCisjaW5jbHVkZSAiRVhURmxvYXRCbGVuZC5oIgorCisjaW5jbHVkZSAi
RXh0ZW5zaW9uc0dMLmgiCisjaW5jbHVkZSA8d3RmL0lzb01hbGxvY0lubGluZXMuaD4KKworbmFt
ZXNwYWNlIFdlYkNvcmUgeworCitXVEZfTUFLRV9JU09fQUxMT0NBVEVEX0lNUEwoRVhURmxvYXRC
bGVuZCk7CisKK0VYVEZsb2F0QmxlbmQ6OkVYVEZsb2F0QmxlbmQoV2ViR0xSZW5kZXJpbmdDb250
ZXh0QmFzZSYgY29udGV4dCkKKyAgICA6IFdlYkdMRXh0ZW5zaW9uKGNvbnRleHQpCit7CisgICAg
Y29udGV4dC5ncmFwaGljc0NvbnRleHRHTCgpLT5nZXRFeHRlbnNpb25zKCkuZW5zdXJlRW5hYmxl
ZCgiR0xfRVhUX2Zsb2F0X2JsZW5kIl9zKTsKK30KKworRVhURmxvYXRCbGVuZDo6fkVYVEZsb2F0
QmxlbmQoKSA9IGRlZmF1bHQ7CisKK1dlYkdMRXh0ZW5zaW9uOjpFeHRlbnNpb25OYW1lIEVYVEZs
b2F0QmxlbmQ6OmdldE5hbWUoKSBjb25zdAoreworICAgIHJldHVybiBFWFRGbG9hdEJsZW5kTmFt
ZTsKK30KKworYm9vbCBFWFRGbG9hdEJsZW5kOjpzdXBwb3J0ZWQoY29uc3QgV2ViR0xSZW5kZXJp
bmdDb250ZXh0QmFzZSYgY29udGV4dCkKK3sKKyAgICByZXR1cm4gY29udGV4dC5ncmFwaGljc0Nv
bnRleHRHTCgpLT5nZXRFeHRlbnNpb25zKCkuc3VwcG9ydHMoIkdMX0VYVF9mbG9hdF9ibGVuZCJf
cyk7Cit9CisgICAgCit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCisKKyNlbmRpZiAvLyBFTkFCTEUo
V0VCR0wpCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRGbG9hdEJs
ZW5kLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9FWFRGbG9hdEJsZW5kLmgKbmV3IGZp
bGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMC4uMjJjMzAyYTMzMGE2MjIyMzVjZjY4NTI5M2NkOGMxNjg1NmE0NTdiZQotLS0gL2Rldi9u
dWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVEZsb2F0QmxlbmQuaApAQCAt
MCwwICsxLDQzIEBACisvKgorICogQ29weXJpZ2h0IChDKSAyMDIwIEFwcGxlIEluYy4gQWxsIHJp
Z2h0cyByZXNlcnZlZC4KKyAqCisgKiBSZWRpc3RyaWJ1dGlvbiBhbmQgdXNlIGluIHNvdXJjZSBh
bmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyAqIG1vZGlmaWNhdGlvbiwgYXJlIHBl
cm1pdHRlZCBwcm92aWRlZCB0aGF0IHRoZSBmb2xsb3dpbmcgY29uZGl0aW9ucworICogYXJlIG1l
dDoKKyAqCisgKiAxLiAgUmVkaXN0cmlidXRpb25zIG9mIHNvdXJjZSBjb2RlIG11c3QgcmV0YWlu
IHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAgICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRp
b25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisgKiAyLiAgUmVkaXN0cmlidXRpb25z
IGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBjb3B5cmlnaHQKKyAqICAg
ICBub3RpY2UsIHRoaXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2Ns
YWltZXIgaW4gdGhlCisgKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Igb3RoZXIgbWF0ZXJpYWxz
IHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyAqCisgKiBUSElTIFNPRlRXQVJFIElT
IFBST1ZJREVEIEJZIEFQUExFIEFORCBJVFMgQ09OVFJJQlVUT1JTICJBUyBJUyIgQU5EIEFOWQor
ICogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywgQlVUIE5PVCBMSU1J
VEVEIFRPLCBUSEUgSU1QTElFRAorICogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFCSUxJVFkgQU5E
IEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorICogRElTQ0xBSU1FRC4gSU4g
Tk8gRVZFTlQgU0hBTEwgQVBQTEUgT1IgSVRTIENPTlRSSUJVVE9SUyBCRSBMSUFCTEUgRk9SIEFO
WQorICogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhFTVBMQVJZLCBP
UiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyAqIChJTkNMVURJTkcsIEJVVCBOT1QgTElNSVRFRCBU
TywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyAqIExPU1Mg
T0YgVVNFLCBEQVRBLCBPUiBQUk9GSVRTOyBPUiBCVVNJTkVTUyBJTlRFUlJVUFRJT04pIEhPV0VW
RVIgQ0FVU0VEIEFORAorICogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRIRVIgSU4g
Q09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyAqIChJTkNMVURJTkcgTkVHTElH
RU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBPRgor
ICogVEhJUyBTT0ZUV0FSRSwgRVZFTiBJRiBBRFZJU0VEIE9GIFRIRSBQT1NTSUJJTElUWSBPRiBT
VUNIIERBTUFHRS4KKyAqLworCisjcHJhZ21hIG9uY2UKKworI2luY2x1ZGUgIldlYkdMRXh0ZW5z
aW9uLmgiCisKK25hbWVzcGFjZSBXZWJDb3JlIHsKKworY2xhc3MgRVhURmxvYXRCbGVuZCBmaW5h
bCA6IHB1YmxpYyBXZWJHTEV4dGVuc2lvbiB7CisgICAgV1RGX01BS0VfSVNPX0FMTE9DQVRFRChF
WFRGbG9hdEJsZW5kKTsKK3B1YmxpYzoKKyAgICBleHBsaWNpdCBFWFRGbG9hdEJsZW5kKFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2UmKTsKKyAgICB2aXJ0dWFsIH5FWFRGbG9hdEJsZW5kKCk7CisK
KyAgICBFeHRlbnNpb25OYW1lIGdldE5hbWUoKSBjb25zdCBvdmVycmlkZTsKKworICAgIHN0YXRp
YyBib29sIHN1cHBvcnRlZChjb25zdCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlJik7Cit9Owor
Cit9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9FWFRGbG9hdEJsZW5kLmlkbCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VY
VEZsb2F0QmxlbmQuaWRsCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjE1OWIwYjhmNTAwMmYwZDNlYTI5NzVhZGFjNmZh
NjE1YmI3MjUzZDcKLS0tIC9kZXYvbnVsbAorKysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZh
cy9FWFRGbG9hdEJsZW5kLmlkbApAQCAtMCwwICsxLDMxIEBACisvKgorKiBDb3B5cmlnaHQgKEMp
IDIwMjAgQXBwbGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorKgorKiBSZWRpc3RyaWJ1dGlv
biBhbmQgdXNlIGluIHNvdXJjZSBhbmQgYmluYXJ5IGZvcm1zLCB3aXRoIG9yIHdpdGhvdXQKKyog
bW9kaWZpY2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBj
b25kaXRpb25zCisqIGFyZSBtZXQ6CisqCisqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNl
IGNvZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorKiAgICAgbm90aWNlLCB0aGlz
IGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhlIGZvbGxvd2luZyBkaXNjbGFpbWVyLgorKiAyLiAg
UmVkaXN0cmlidXRpb25zIGluIGJpbmFyeSBmb3JtIG11c3QgcmVwcm9kdWNlIHRoZSBhYm92ZSBj
b3B5cmlnaHQKKyogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyogICAgIGRvY3VtZW50YXRpb24gYW5kL29yIG90
aGVyIG1hdGVyaWFscyBwcm92aWRlZCB3aXRoIHRoZSBkaXN0cmlidXRpb24uCisqCisqIFRISVMg
U09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElT
IiBBTkQgQU5ZCisqIEVYUFJFU1MgT1IgSU1QTElFRCBXQVJSQU5USUVTLCBJTkNMVURJTkcsIEJV
VCBOT1QgTElNSVRFRCBUTywgVEhFIElNUExJRUQKKyogV0FSUkFOVElFUyBPRiBNRVJDSEFOVEFC
SUxJVFkgQU5EIEZJVE5FU1MgRk9SIEEgUEFSVElDVUxBUiBQVVJQT1NFIEFSRQorKiBESVNDTEFJ
TUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJM
RSBGT1IgQU5ZCisqIERJUkVDVCwgSU5ESVJFQ1QsIElOQ0lERU5UQUwsIFNQRUNJQUwsIEVYRU1Q
TEFSWSwgT1IgQ09OU0VRVUVOVElBTCBEQU1BR0VTCisqIChJTkNMVURJTkcsIEJVVCBOT1QgTElN
SVRFRCBUTywgUFJPQ1VSRU1FTlQgT0YgU1VCU1RJVFVURSBHT09EUyBPUiBTRVJWSUNFUzsKKyog
TE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikg
SE9XRVZFUiBDQVVTRUQgQU5ECisqIE9OIEFOWSBUSEVPUlkgT0YgTElBQklMSVRZLCBXSEVUSEVS
IElOIENPTlRSQUNULCBTVFJJQ1QgTElBQklMSVRZLCBPUiBUT1JUCisqIChJTkNMVURJTkcgTkVH
TElHRU5DRSBPUiBPVEhFUldJU0UpIEFSSVNJTkcgSU4gQU5ZIFdBWSBPVVQgT0YgVEhFIFVTRSBP
RgorKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorKi8KKworWworICAgIENvbmRpdGlvbmFsPVdFQkdMLAorICAgIEdlbmVy
YXRlSXNSZWFjaGFibGU9SW1wbFdlYkdMUmVuZGVyaW5nQ29udGV4dCwKKyAgICBMZWdhY3lOb0lu
dGVyZmFjZU9iamVjdCwKK10gaW50ZXJmYWNlIEVYVEZsb2F0QmxlbmQgeworfTsKZGlmZiAtLWdp
dCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMMlJlbmRlcmluZ0NvbnRleHQuY3Bw
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAK
aW5kZXggNDQ1ZDA5NmRhMDhkNjhjNjdiMjg1NzMwMDg4MDVmNjQ2NjQ2MDMwMy4uZjEzZmNiZjEy
Zjk3ODE1MWRmMjMzMDMyMjAxYWU0M2Q5NmUxY2FiYyAxMDA2NDQKLS0tIGEvU291cmNlL1dlYkNv
cmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291cmNlL1dl
YkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTMxLDYgKzMx
LDcgQEAKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkVYVENvbG9yQnVmZmVy
RmxvYXQuaCIKICNpbmNsdWRlICJFWFRDb2xvckJ1ZmZlckhhbGZGbG9hdC5oIgorI2luY2x1ZGUg
IkVYVEZsb2F0QmxlbmQuaCIKICNpbmNsdWRlICJFWFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMu
aCIKICNpbmNsdWRlICJFdmVudExvb3AuaCIKICNpbmNsdWRlICJFeHRlbnNpb25zR0wuaCIKQEAg
LTI2OTAsNiArMjY5MSw3IEBAIFdlYkdMRXh0ZW5zaW9uKiBXZWJHTDJSZW5kZXJpbmdDb250ZXh0
OjpnZXRFeHRlbnNpb24oY29uc3QgU3RyaW5nJiBuYW1lKQogICAgIEVOQUJMRV9JRl9SRVFVRVNU
RUQoV2ViR0xEZWJ1Z1NoYWRlcnMsIG1fd2ViZ2xEZWJ1Z1NoYWRlcnMsICJXRUJHTF9kZWJ1Z19z
aGFkZXJzIiwgbV9jb250ZXh0LT5nZXRFeHRlbnNpb25zKCkuc3VwcG9ydHMoIkdMX0FOR0xFX3Ry
YW5zbGF0ZWRfc2hhZGVyX3NvdXJjZSJfcykpOwogICAgIEVOQUJMRV9JRl9SRVFVRVNURUQoRVhU
Q29sb3JCdWZmZXJGbG9hdCwgbV9leHRDb2xvckJ1ZmZlckZsb2F0LCAiRVhUX2NvbG9yX2J1ZmZl
cl9mbG9hdCIsIEVYVENvbG9yQnVmZmVyRmxvYXQ6OnN1cHBvcnRlZCgqdGhpcykpOwogICAgIEVO
QUJMRV9JRl9SRVFVRVNURUQoRVhUQ29sb3JCdWZmZXJIYWxmRmxvYXQsIG1fZXh0Q29sb3JCdWZm
ZXJIYWxmRmxvYXQsICJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiLCBFWFRDb2xvckJ1ZmZl
ckhhbGZGbG9hdDo6c3VwcG9ydGVkKCp0aGlzKSk7CisgICAgRU5BQkxFX0lGX1JFUVVFU1RFRChF
WFRGbG9hdEJsZW5kLCBtX2V4dEZsb2F0QmxlbmQsICJFWFRfZmxvYXRfYmxlbmQiLCBFWFRGbG9h
dEJsZW5kOjpzdXBwb3J0ZWQoKnRoaXMpKTsKICAgICByZXR1cm4gbnVsbHB0cjsKIH0KIApAQCAt
MjczNiw2ICsyNzM4LDggQEAgT3B0aW9uYWw8VmVjdG9yPFN0cmluZz4+IFdlYkdMMlJlbmRlcmlu
Z0NvbnRleHQ6OmdldFN1cHBvcnRlZEV4dGVuc2lvbnMoKQogICAgICAgICByZXN1bHQuYXBwZW5k
KCJFWFRfY29sb3JfYnVmZmVyX2Zsb2F0Il9zKTsKICAgICBpZiAoRVhUQ29sb3JCdWZmZXJIYWxm
RmxvYXQ6OnN1cHBvcnRlZCgqdGhpcykpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoIkVYVF9jb2xv
cl9idWZmZXJfaGFsZl9mbG9hdCJfcyk7CisgICAgaWYgKEVYVEZsb2F0QmxlbmQ6OnN1cHBvcnRl
ZCgqdGhpcykpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIkVYVF9mbG9hdF9ibGVuZCJfcyk7CiAK
ICAgICByZXR1cm4gcmVzdWx0OwogfQpkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9j
YW52YXMvV2ViR0xFeHRlbnNpb24uaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
RXh0ZW5zaW9uLmgKaW5kZXggZDMzNGNjODAyNjI4MDgwMGFlODlmMjEwNmIwYjc3ZWJkOWY4YzNh
Yi4uZDA4NjAzOGM3ZThmM2NmNjllNzA5ZGNmZWZlNTVmZGY0NTc3MWNhMSAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xFeHRlbnNpb24uaAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEV4dGVuc2lvbi5oCkBAIC02Myw2ICs2Myw3IEBAIHB1
YmxpYzoKICAgICAgICAgV2ViR0xDb21wcmVzc2VkVGV4dHVyZUFTVENOYW1lLAogICAgICAgICBB
TkdMRUluc3RhbmNlZEFycmF5c05hbWUsCiAgICAgICAgIEVYVENvbG9yQnVmZmVySGFsZkZsb2F0
TmFtZSwKKyAgICAgICAgRVhURmxvYXRCbGVuZE5hbWUsCiAgICAgICAgIFdlYkdMQ29sb3JCdWZm
ZXJGbG9hdE5hbWUsCiAgICAgICAgIEVYVENvbG9yQnVmZmVyRmxvYXROYW1lLAogICAgIH07CmRp
ZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
LmNwcAppbmRleCA5NGU5YWEyYjU3ZDM5YWI2NmM1MjhjZjAyNGZhNWQwM2Y1MTIyYjMyLi5jNjIw
OWI1ZTY1ZjI5MTRjMDRmNjU0MTIxM2Q5NGQxZWQ5NjY0NTY0IDEwMDY0NAotLS0gYS9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3BwCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKQEAgLTMyLDYg
KzMyLDcgQEAKICNpbmNsdWRlICJDYWNoZWRJbWFnZS5oIgogI2luY2x1ZGUgIkVYVEJsZW5kTWlu
TWF4LmgiCiAjaW5jbHVkZSAiRVhUQ29sb3JCdWZmZXJIYWxmRmxvYXQuaCIKKyNpbmNsdWRlICJF
WFRGbG9hdEJsZW5kLmgiCiAjaW5jbHVkZSAiRVhURnJhZ0RlcHRoLmgiCiAjaW5jbHVkZSAiRVhU
U2hhZGVyVGV4dHVyZUxPRC5oIgogI2luY2x1ZGUgIkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3Bp
Yy5oIgpAQCAtMTk0LDYgKzE5NSw3IEBAIFdlYkdMRXh0ZW5zaW9uKiBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OmdldEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCiAgICAgRU5BQkxFX0lGX1JF
UVVFU1RFRChXZWJHTERlYnVnUmVuZGVyZXJJbmZvLCBtX3dlYmdsRGVidWdSZW5kZXJlckluZm8s
ICJXRUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIiwgdHJ1ZSk7CiAgICAgRU5BQkxFX0lGX1JFUVVF
U1RFRChXZWJHTERlYnVnU2hhZGVycywgbV93ZWJnbERlYnVnU2hhZGVycywgIldFQkdMX2RlYnVn
X3NoYWRlcnMiLCBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfQU5HTEVf
dHJhbnNsYXRlZF9zaGFkZXJfc291cmNlIl9zKSk7CiAgICAgRU5BQkxFX0lGX1JFUVVFU1RFRChF
WFRDb2xvckJ1ZmZlckhhbGZGbG9hdCwgbV9leHRDb2xvckJ1ZmZlckhhbGZGbG9hdCwgIkVYVF9j
b2xvcl9idWZmZXJfaGFsZl9mbG9hdCIsIEVYVENvbG9yQnVmZmVySGFsZkZsb2F0OjpzdXBwb3J0
ZWQoKnRoaXMpKTsKKyAgICBFTkFCTEVfSUZfUkVRVUVTVEVEKEVYVEZsb2F0QmxlbmQsIG1fZXh0
RmxvYXRCbGVuZCwgIkVYVF9mbG9hdF9ibGVuZCIsIEVYVEZsb2F0QmxlbmQ6OnN1cHBvcnRlZCgq
dGhpcykpOwogICAgIEVOQUJMRV9JRl9SRVFVRVNURUQoV2ViR0xDb2xvckJ1ZmZlckZsb2F0LCBt
X3dlYmdsQ29sb3JCdWZmZXJGbG9hdCwgIldFQkdMX2NvbG9yX2J1ZmZlcl9mbG9hdCIsIFdlYkdM
Q29sb3JCdWZmZXJGbG9hdDo6c3VwcG9ydGVkKCp0aGlzKSk7CiAgICAgcmV0dXJuIG51bGxwdHI7
CiB9CkBAIC0yNTgsNiArMjYwLDggQEAgT3B0aW9uYWw8VmVjdG9yPFN0cmluZz4+IFdlYkdMUmVu
ZGVyaW5nQ29udGV4dDo6Z2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpCiAgICAgcmVzdWx0LmFwcGVu
ZCgiV0VCR0xfZGVidWdfcmVuZGVyZXJfaW5mbyJfcyk7CiAgICAgaWYgKEVYVENvbG9yQnVmZmVy
SGFsZkZsb2F0OjpzdXBwb3J0ZWQoKnRoaXMpKQogICAgICAgICByZXN1bHQuYXBwZW5kKCJFWFRf
Y29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiX3MpOworICAgIGlmIChFWFRGbG9hdEJsZW5kOjpzdXBw
b3J0ZWQoKnRoaXMpKQorICAgICAgICByZXN1bHQuYXBwZW5kKCJFWFRfZmxvYXRfYmxlbmQiX3Mp
OwogICAgIGlmIChXZWJHTENvbG9yQnVmZmVyRmxvYXQ6OnN1cHBvcnRlZCgqdGhpcykpCiAgICAg
ICAgIHJlc3VsdC5hcHBlbmQoIldFQkdMX2NvbG9yX2J1ZmZlcl9mbG9hdCJfcyk7CiAKZGlmZiAt
LWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJh
c2UuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5jcHAKaW5kZXggODA1NGFkMzMzZThkMTQ0ZDE2OTA2Y2JlYTBlZTlhODdhYzk0Y2U4Ni4u
ZDlhOGJkZGFjYWExMjk5YjRjNjA3YjU0Y2Y5YjA2ZDA4MGVhMDk1NyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5jcHAKKysr
IGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5j
cHAKQEAgLTM3LDYgKzM3LDcgQEAKICNpbmNsdWRlICJFWFRCbGVuZE1pbk1heC5oIgogI2luY2x1
ZGUgIkVYVENvbG9yQnVmZmVyRmxvYXQuaCIKICNpbmNsdWRlICJFWFRDb2xvckJ1ZmZlckhhbGZG
bG9hdC5oIgorI2luY2x1ZGUgIkVYVEZsb2F0QmxlbmQuaCIKICNpbmNsdWRlICJFWFRGcmFnRGVw
dGguaCIKICNpbmNsdWRlICJFWFRTaGFkZXJUZXh0dXJlTE9ELmgiCiAjaW5jbHVkZSAiRVhUVGV4
dHVyZUZpbHRlckFuaXNvdHJvcGljLmgiCkBAIC0zNzM2LDYgKzM3MzcsNyBAQCBib29sIFdlYkdM
UmVuZGVyaW5nQ29udGV4dEJhc2U6OmV4dGVuc2lvbklzRW5hYmxlZChjb25zdCBTdHJpbmcmIG5h
bWUpCiAgICAgQ0hFQ0tfRVhURU5TSU9OKG1fd2ViZ2xEcmF3QnVmZmVycywgIldFQkdMX2RyYXdf
YnVmZmVycyIpOwogICAgIENIRUNLX0VYVEVOU0lPTihtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzLCAi
QU5HTEVfaW5zdGFuY2VkX2FycmF5cyIpOwogICAgIENIRUNLX0VYVEVOU0lPTihtX2V4dENvbG9y
QnVmZmVySGFsZkZsb2F0LCAiRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0Iik7CisgICAgQ0hF
Q0tfRVhURU5TSU9OKG1fZXh0RmxvYXRCbGVuZCwgIkVYVF9mbG9hdF9ibGVuZCIpOwogICAgIENI
RUNLX0VYVEVOU0lPTihtX3dlYmdsQ29sb3JCdWZmZXJGbG9hdCwgIldFQkdMX2NvbG9yX2J1ZmZl
cl9mbG9hdCIpOwogICAgIENIRUNLX0VYVEVOU0lPTihtX2V4dENvbG9yQnVmZmVyRmxvYXQsICJF
WFRfY29sb3JfYnVmZmVyX2Zsb2F0Iik7CiAgICAgcmV0dXJuIGZhbHNlOwpAQCAtNzgwMiw2ICs3
ODA0LDcgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlOjpsb3NlRXh0ZW5zaW9ucyhM
b3N0Q29udGV4dE1vZGUgbW9kZSkKICAgICBMT1NFX0VYVEVOU0lPTihtX3dlYmdsRHJhd0J1ZmZl
cnMpOwogICAgIExPU0VfRVhURU5TSU9OKG1fYW5nbGVJbnN0YW5jZWRBcnJheXMpOwogICAgIExP
U0VfRVhURU5TSU9OKG1fZXh0Q29sb3JCdWZmZXJIYWxmRmxvYXQpOworICAgIExPU0VfRVhURU5T
SU9OKG1fZXh0RmxvYXRCbGVuZCk7CiAgICAgTE9TRV9FWFRFTlNJT04obV93ZWJnbENvbG9yQnVm
ZmVyRmxvYXQpOwogICAgIExPU0VfRVhURU5TSU9OKG1fZXh0Q29sb3JCdWZmZXJGbG9hdCk7CiB9
CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlLmggYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlLmgKaW5kZXggZmQ4MDFkMGFiYTFmMDY3NmZmYjFhNDVhZTc4NzNiYWZjMTI1MzM3
MS4uM2UwNDU1ZmM4NDg4OTNiOWU1ZTliMGM3OTYzYTQyYTExMGQyYzc1YiAxMDA2NDQKLS0tIGEv
U291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFzZS5oCisr
KyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2Uu
aApAQCAtNzEsNiArNzEsNyBAQCBjbGFzcyBBTkdMRUluc3RhbmNlZEFycmF5czsKIGNsYXNzIEVY
VEJsZW5kTWluTWF4OwogY2xhc3MgRVhUQ29sb3JCdWZmZXJGbG9hdDsKIGNsYXNzIEVYVENvbG9y
QnVmZmVySGFsZkZsb2F0OworY2xhc3MgRVhURmxvYXRCbGVuZDsKIGNsYXNzIEVYVFRleHR1cmVG
aWx0ZXJBbmlzb3Ryb3BpYzsKIGNsYXNzIEVYVFNoYWRlclRleHR1cmVMT0Q7CiBjbGFzcyBFWFRz
UkdCOwpAQCAtNjkwLDYgKzY5MSw3IEBAIHByb3RlY3RlZDoKICAgICBSZWZQdHI8V2ViR0xEcmF3
QnVmZmVycz4gbV93ZWJnbERyYXdCdWZmZXJzOwogICAgIFJlZlB0cjxBTkdMRUluc3RhbmNlZEFy
cmF5cz4gbV9hbmdsZUluc3RhbmNlZEFycmF5czsKICAgICBSZWZQdHI8RVhUQ29sb3JCdWZmZXJI
YWxmRmxvYXQ+IG1fZXh0Q29sb3JCdWZmZXJIYWxmRmxvYXQ7CisgICAgUmVmUHRyPEVYVEZsb2F0
QmxlbmQ+IG1fZXh0RmxvYXRCbGVuZDsKICAgICBSZWZQdHI8V2ViR0xDb2xvckJ1ZmZlckZsb2F0
PiBtX3dlYmdsQ29sb3JCdWZmZXJGbG9hdDsKICAgICBSZWZQdHI8RVhUQ29sb3JCdWZmZXJGbG9h
dD4gbV9leHRDb2xvckJ1ZmZlckZsb2F0OwogCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy9DaGFu
Z2VMb2cgYi9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKaW5kZXggNjlhNzk4MWYxNmU4NGRiNjU0ZWI3
NmExZDZiZTc1MWFlNzNkMGI0NC4uY2Y3YzVjZDUzODdiY2RlNjdkYzcwZWRmMzZhMDBiNjgwOTc1
ZWUwMCAxMDA2NDQKLS0tIGEvTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCisrKyBiL0xheW91dFRlc3Rz
L0NoYW5nZUxvZwpAQCAtMSwzICsxLDE0IEBACisyMDIwLTA5LTI0ICBKYW1lcyBEYXJwaW5pYW4g
IDxqZGFycGluaWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBTdXBwb3J0IEVYVF9mbG9hdF9i
bGVuZAorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2
OTQ5CisKKyAgICAgICAgUmV2aWV3ZWQgYnkgTk9CT0RZIChPT1BTISkuCisKKyAgICAgICAgKiB3
ZWJnbC9jb25mb3JtYW5jZS9leHRlbnNpb25zL2V4dC1mbG9hdC1ibGVuZC1leHBlY3RlZC50eHQ6
IEFkZGVkLgorICAgICAgICAqIHdlYmdsL2NvbmZvcm1hbmNlL2V4dGVuc2lvbnMvZXh0LWZsb2F0
LWJsZW5kLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdsL3Jlc291cmNlcy8uLi46IEFkZGVk
IHNvbWUgc3VwcG9ydCBmaWxlcy4KKwogMjAyMC0wOS0yMSAgQ2hyaXMgRHVtZXogIDxjZHVtZXpA
YXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHVuc2tpcCB3ZWJhdWRpby9BbmFseXNl
ci9oYW5kbGUtc2lsZW50LWlucHV0cy5odG1sLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2Vi
Z2wvY29uZm9ybWFuY2UvZXh0ZW5zaW9ucy9leHQtZmxvYXQtYmxlbmQtZXhwZWN0ZWQudHh0IGIv
TGF5b3V0VGVzdHMvd2ViZ2wvY29uZm9ybWFuY2UvZXh0ZW5zaW9ucy9leHQtZmxvYXQtYmxlbmQt
ZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMxOWExM2E5YmY5ZTUyYmUwNGQ3MzUwMGVmOTYxMGY4
OWJhOTBlNTEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJnbC9jb25mb3JtYW5j
ZS9leHRlbnNpb25zL2V4dC1mbG9hdC1ibGVuZC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1IEBA
CitUaGlzIHRlc3QgcnVucyB0aGUgV2ViR0wgVGVzdCBsaXN0ZWQgYmVsb3cgaW4gYW4gaWZyYW1l
IGFuZCByZXBvcnRzIFBBU1Mgb3IgRkFJTC4KKworVGVzdDogLi4vLi4vcmVzb3VyY2VzL3dlYmds
X3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvZXh0ZW5zaW9ucy9leHQtZmxvYXQtYmxlbmQuaHRtbAor
UEFTUworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJnbC9jb25mb3JtYW5jZS9leHRlbnNp
b25zL2V4dC1mbG9hdC1ibGVuZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ2wvY29uZm9ybWFuY2Uv
ZXh0ZW5zaW9ucy9leHQtZmxvYXQtYmxlbmQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRl
eCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYWIzMjU5MTdkMTlm
M2ZlMTJmMzExMjY5YzRlMDUxOTkxM2Q2YjRlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVz
dHMvd2ViZ2wvY29uZm9ybWFuY2UvZXh0ZW5zaW9ucy9leHQtZmxvYXQtYmxlbmQuaHRtbApAQCAt
MCwwICsxLDE4IEBACis8IS0tIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5lcmF0
ZS13ZWJnbC10ZXN0cy5weS4gRE8gTk9UIEVESVQgLS0+Cis8IURPQ1RZUEUgaHRtbD4KKzxodG1s
PgorPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cis8dGl0bGU+V2ViR0wgQ29uZm9ybWFu
Y2UgVGVzdCBXcmFwcGVyIGZvciBleHQtZmxvYXQtYmxlbmQuaHRtbDwvdGl0bGU+Cis8c2NyaXB0
IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1w
cmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0iLi4v
Li4vcmVzb3VyY2VzL3dlYmtpdC13ZWJnbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0PgorPC9o
ZWFkPgorPGJvZHk+Cis8cD5UaGlzIHRlc3QgcnVucyB0aGUgV2ViR0wgVGVzdCBsaXN0ZWQgYmVs
b3cgaW4gYW4gaWZyYW1lIGFuZCByZXBvcnRzIFBBU1Mgb3IgRkFJTC48L3A+CitUZXN0OiA8YSBo
cmVmPSIuLi8uLi9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS9leHRlbnNp
b25zL2V4dC1mbG9hdC1ibGVuZC5odG1sIj4uLi8uLi9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxl
cy9jb25mb3JtYW5jZS9leHRlbnNpb25zL2V4dC1mbG9hdC1ibGVuZC5odG1sPC9hPgorPGRpdiBp
ZD0icmVzdWx0Ij48L2Rpdj4KKzxkaXYgaWQ9ImlmcmFtZSI+Cis8aWZyYW1lIHNyYz0iLi4vLi4v
cmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvZXh0ZW5zaW9ucy9leHQtZmxv
YXQtYmxlbmQuaHRtbCIgd2lkdGg9IjgwMCIgaGVpZ2h0PSI2MDAiPjwvaWZyYW1lPgorPC9kaXY+
Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJnbC9yZXNvdXJj
ZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS9leHRlbnNpb25zL2V4dC1mbG9hdC1ibGVu
ZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29u
Zm9ybWFuY2UvZXh0ZW5zaW9ucy9leHQtZmxvYXQtYmxlbmQuaHRtbApuZXcgZmlsZSBtb2RlIDEw
MDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5hODI1
ZDc4YmVmNmU5Yzg5MTc4NGNkNWEzODE0ZjE1MGQ1MmY5MTFlCi0tLSAvZGV2L251bGwKKysrIGIv
TGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2Uv
ZXh0ZW5zaW9ucy9leHQtZmxvYXQtYmxlbmQuaHRtbApAQCAtMCwwICsxLDk4IEBACis8IURPQ1RZ
UEUgaHRtbD4NCis8aHRtbD4NCis8aGVhZD4NCis8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+DQorPHRp
dGxlPldlYkdMIEVYVF9mbG9hdF9ibGVuZCBDb25mb3JtYW5jZSBUZXN0czwvdGl0bGU+DQorPGxp
bmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1zdHlsZS5j
c3MiLz4NCis8c2NyaXB0IHNyYz0iLi4vLi4vanMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0Pg0K
KzxzY3JpcHQgc3JjPSIuLi8uLi9qcy93ZWJnbC10ZXN0LXV0aWxzLmpzIj48L3NjcmlwdD4NCis8
c2NyaXB0IHNyYz0iLi4vLi4vanMvdGVzdHMvZXh0LWZsb2F0LWJsZW5kLmpzIj48L3NjcmlwdD4N
Cis8L2hlYWQ+DQorPGJvZHk+DQorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2Pg0KKzxkaXYg
aWQ9ImNvbnNvbGUiPjwvZGl2Pg0KKzxzY3JpcHQ+DQorInVzZSBzdHJpY3QiOw0KK2Rlc2NyaXB0
aW9uKCJUaGlzIHRlc3QgdmVyaWZpZXMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIEVYVF9mbG9h
dF9ibGVuZCBleHRlbnNpb24sIGlmIGl0IGlzIGF2YWlsYWJsZS4iKTsNCisNCit2YXIgd3R1ID0g
V2ViR0xUZXN0VXRpbHM7DQordmFyIGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJj
YW52YXMiKTsNCit2YXIgZ2wgPSB3dHUuY3JlYXRlM0RDb250ZXh0KGNhbnZhcyk7DQordmFyIGV4
dCA9IG51bGw7DQorDQorZnVuY3Rpb24gZXh0RmxvYXRCbGVuZFRlc3RzKHZlcnNpb24sIGNvbmZp
Zykgew0KKyAgICBkZWJ1ZygiIik7DQorICAgIGRlYnVnKCJUZXN0aW5nIGZsb2F0MzIgYmxlbmRp
bmcgd2l0aG91dCBFWFRfZmxvYXRfYmxlbmQiKTsNCisgICAgdGVzdEV4dEZsb2F0QmxlbmQoY29u
ZmlnLmludGVybmFsRm9ybWF0KTsNCisgICAgdGVzdEV4dEZsb2F0QmxlbmRNUlQodmVyc2lvbiwg
Y29uZmlnLmRyYXdCdWZmZXJzKTsNCisgICAgdGVzdEV4dEZsb2F0QmxlbmROb25GbG9hdDMyVHlw
ZSh2ZXJzaW9uLCBjb25maWcub2VzVGV4dHVyZUhhbGZGbG9hdCk7DQorDQorICAgIGNvbnN0IGZs
b2F0QmxlbmQgPSBnbC5nZXRFeHRlbnNpb24oIkVYVF9mbG9hdF9ibGVuZCIpOw0KKyAgICBpZiAo
IWZsb2F0QmxlbmQpIHsNCisgICAgICAgIHRlc3RQYXNzZWQoIkVYVF9mbG9hdF9ibGVuZCBpcyBh
bGxvd2VkIHRvIGJlIG1pc3NpbmcuIik7DQorICAgICAgICByZXR1cm47DQorICAgIH0NCisNCisg
ICAgZGVidWcoIiIpOw0KKyAgICBkZWJ1ZygiVGVzdGluZyB0aGF0IGZsb2F0MzIgYmxlbmRpbmcg
aXMgYWxsb3dlZCB3aXRoIEVYVF9mbG9hdF9ibGVuZCIpOw0KKyAgICB0ZXN0RXh0RmxvYXRCbGVu
ZChjb25maWcuaW50ZXJuYWxGb3JtYXQpOw0KKyAgICB0ZXN0RXh0RmxvYXRCbGVuZE1SVCh2ZXJz
aW9uLCBjb25maWcuZHJhd0J1ZmZlcnMpOw0KKyAgICB0ZXN0RXh0RmxvYXRCbGVuZE5vbkZsb2F0
MzJUeXBlKHZlcnNpb24sIGNvbmZpZy5vZXNUZXh0dXJlSGFsZkZsb2F0KTsNCit9DQorDQorKGZ1
bmN0aW9uKCl7DQorICAgIGlmICh3dHUuZ2V0RGVmYXVsdDNEQ29udGV4dFZlcnNpb24oKSA8IDIp
IHsNCisgICAgICAgIGNvbnN0IG9lc1RleHR1cmVGbG9hdCA9IGdsLmdldEV4dGVuc2lvbigiT0VT
X3RleHR1cmVfZmxvYXQiKTsNCisgICAgICAgIGlmICghb2VzVGV4dHVyZUZsb2F0KSB7DQorICAg
ICAgICAgICAgdGVzdFBhc3NlZCgiT0VTX3RleHR1cmVfZmxvYXQgaXMgYWxsb3dlZCB0byBiZSBt
aXNzaW5nLiIpOw0KKyAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgIH0NCisNCisgICAgICAg
IGNvbnN0IGNvbG9yQnVmZmVyRmxvYXQgPSBnbC5nZXRFeHRlbnNpb24oIldFQkdMX2NvbG9yX2J1
ZmZlcl9mbG9hdCIpOw0KKyAgICAgICAgaWYgKCFjb2xvckJ1ZmZlckZsb2F0KSB7DQorICAgICAg
ICAgICAgdGVzdFBhc3NlZCgiV0VCR0xfY29sb3JfYnVmZmVyX2Zsb2F0IGlzIGFsbG93ZWQgdG8g
YmUgbWlzc2luZy4iKTsNCisgICAgICAgICAgICByZXR1cm47DQorICAgICAgICB9DQorDQorICAg
ICAgICBjb25zdCBkcmF3QnVmZmVycyA9IGdsLmdldEV4dGVuc2lvbigiV0VCR0xfZHJhd19idWZm
ZXJzIik7DQorICAgICAgICBpZiAoIWRyYXdCdWZmZXJzKSB7DQorICAgICAgICAgICAgZGVidWco
IldFQkdMX2RyYXdfYnVmZmVycyBpcyBhbGxvd2VkIHRvIGJlIG1pc3NpbmcuIE1SVCB0ZXN0cyB3
aWxsIGJlIHNraXBwZWQuIik7DQorICAgICAgICB9DQorDQorICAgICAgICBjb25zdCBvZXNUZXh0
dXJlSGFsZkZsb2F0ID0gZ2wuZ2V0RXh0ZW5zaW9uKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0Iik7
DQorICAgICAgICBjb25zdCBleHRDb2xvckJ1ZmZlckhhbGZGbG9hdCA9IGdsLmdldEV4dGVuc2lv
bigiRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0Iik7DQorICAgICAgICBjb25zdCB0ZXN0SGFs
ZkZsb2F0ID0gISghb2VzVGV4dHVyZUhhbGZGbG9hdCB8fCAhZXh0Q29sb3JCdWZmZXJIYWxmRmxv
YXQpOw0KKyAgICAgICAgaWYgKCF0ZXN0SGFsZkZsb2F0KSB7DQorICAgICAgICAgICAgZGVidWco
Ik9FU190ZXh0dXJlX2hhbGZfZmxvYXQgb3IgRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0IGlz
IGFsbG93ZWQgdG8gYmUgbWlzc2luZy4gTm9uRmxvYXQzMlR5cGUgdGVzdHMgd2lsbCBiZSBza2lw
cGVkLiIpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgY29uc3QgaW50ZXJuYWxGb3JtYXQgPSBn
bC5SR0JBOw0KKyAgICAgICAgZXh0RmxvYXRCbGVuZFRlc3RzKDEsIHsNCisgICAgICAgICAgICBp
bnRlcm5hbEZvcm1hdCwgZHJhd0J1ZmZlcnMsIG9lc1RleHR1cmVIYWxmRmxvYXQNCisgICAgICAg
IH0pOw0KKyAgICB9IGVsc2Ugew0KKyAgICAgICAgY29uc3QgY29sb3JCdWZmZXJGbG9hdCA9IGds
LmdldEV4dGVuc2lvbigiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpOw0KKyAgICAgICAgaWYgKCFj
b2xvckJ1ZmZlckZsb2F0KSB7DQorICAgICAgICAgICAgdGVzdFBhc3NlZCgiRVhUX2NvbG9yX2J1
ZmZlcl9mbG9hdCBpcyBhbGxvd2VkIHRvIGJlIG1pc3NpbmcuIik7DQorICAgICAgICAgICAgcmV0
dXJuOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgY29uc3QgaW50ZXJuYWxGb3JtYXQgPSBnbC5S
R0JBMzJGOw0KKyAgICAgICAgZXh0RmxvYXRCbGVuZFRlc3RzKDIsIHsNCisgICAgICAgICAgICBp
bnRlcm5hbEZvcm1hdA0KKyAgICAgICAgfSk7DQorICAgIH0NCit9KSgpOw0KKw0KK2RlYnVnKCIi
KTsNCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsNCis8L3NjcmlwdD4NCis8c2NyaXB0
IHNyYz0iLi4vLi4vanMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4NCisNCis8L2JvZHk+DQor
PC9odG1sPg0KKzwhLS0NCitDb3B5cmlnaHQgKGMpIDIwMTkgVGhlIEtocm9ub3MgR3JvdXAgSW5j
Lg0KK1VzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHlsZSBs
aWNlbnNlIHRoYXQgY2FuIGJlDQorZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUuDQorLS0+
DQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmls
ZXMvanMvanMtdGVzdC1wb3N0LmpzIGIvTGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3dlYmds
X3Rlc3RfZmlsZXMvanMvanMtdGVzdC1wb3N0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZmODllNTg2ZWJkYWZj
ZDE1Y2I0Njg1ZDA3MGRmZDI2ODU5MTY2NjUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJnbC9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9qcy9qcy10ZXN0LXBvc3QuanMKQEAg
LTAsMCArMSwxMiBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxOSBUaGUgS2hyb25vcyBHcm91cCBJ
bmMuCitVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5bGUg
bGljZW5zZSB0aGF0IGNhbiBiZQorZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUuCisqLwor
CitzaG91bGRCZVRydWUoInN1Y2Nlc3NmdWxseVBhcnNlZCIpOworX2FkZFNwYW4oJzxiciAvPjxz
cGFuIGNsYXNzPSJwYXNzIj5URVNUIENPTVBMRVRFPC9zcGFuPicpOworaWYgKF9qc1Rlc3RQcmVW
ZXJib3NlTG9nZ2luZykgeworICAgIF9idWZmZXJlZExvZ1RvQ29uc29sZSgnVEVTVCBDT01QTEVU
RScpOworfQorbm90aWZ5RmluaXNoZWRUb0hhcm5lc3MoKQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVz
dHMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvanMvanMtdGVzdC1wcmUuanMgYi9M
YXlvdXRUZXN0cy93ZWJnbC9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9qcy9qcy10ZXN0LXBy
ZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwLi5iNjIwMmEyNzg5ZGI2ZGJkMDUzYjMzMzM2NjJmZjNkOGVjYTVjMTRh
Ci0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsX3Rl
c3RfZmlsZXMvanMvanMtdGVzdC1wcmUuanMKQEAgLTAsMCArMSw3NzYgQEAKKy8qCitDb3B5cmln
aHQgKGMpIDIwMTkgVGhlIEtocm9ub3MgR3JvdXAgSW5jLgorVXNlIG9mIHRoaXMgc291cmNlIGNv
ZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKK2ZvdW5k
IGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlLgorKi8KKworKGZ1bmN0aW9uKCkgeworICB2YXIgdGVz
dEhhcm5lc3NJbml0aWFsaXplZCA9IGZhbHNlOworCisgIHZhciBpbml0Tm9uS2hyb25vc0ZyYW1l
d29yayA9IGZ1bmN0aW9uKCkgeworICAgIGlmICh0ZXN0SGFybmVzc0luaXRpYWxpemVkKSB7Cisg
ICAgICByZXR1cm47CisgICAgfQorICAgIHRlc3RIYXJuZXNzSW5pdGlhbGl6ZWQgPSB0cnVlOwor
CisgICAgLyogLS0gcGxhZm9ybSBzcGVjaWZpYyBjb2RlIC0tICovCisKKyAgICAvLyBXZWJLaXQg
U3BlY2lmaWMgY29kZS4gQWRkIHlvdXIgY29kZSBoZXJlLgorICAgIGlmICh3aW5kb3cudGVzdFJ1
bm5lciAmJiAhd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICB3aW5kb3cubGF5
b3V0VGVzdENvbnRyb2xsZXIgPSB3aW5kb3cudGVzdFJ1bm5lcjsKKyAgICB9CisKKyAgICBpZiAo
d2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICB3aW5kb3cubGF5b3V0VGVzdENv
bnRyb2xsZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRXZWJHTEVuYWJsZWQiLCAiMSIpOwor
ICAgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAgIHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQorICAgIGlm
ICh3aW5kb3cuaW50ZXJuYWxzKSB7CisgICAgICAvLyBUaGUgV2ViS2l0IHRlc3Rpbmcgc3lzdGVt
IGNvbXBhcmVzIGNvbnNvbGUgb3V0cHV0LgorICAgICAgLy8gQmVjYXVzZSB0aGUgb3V0cHV0IG9m
IHRoZSBXZWJHTCBUZXN0cyBpcyBHUFUgZGVwZW5kZW50CisgICAgICAvLyB3ZSB0dXJuIG9mZiBj
b25zb2xlIG1lc3NhZ2VzLgorICAgICAgd2luZG93LmNvbnNvbGUubG9nID0gZnVuY3Rpb24oKSB7
IH07CisgICAgICB3aW5kb3cuY29uc29sZS5lcnJvciA9IGZ1bmN0aW9uKCkgeyB9OworICAgICAg
d2luZG93LmludGVybmFscy5zZXR0aW5ncy5zZXRXZWJHTEVycm9yc1RvQ29uc29sZUVuYWJsZWQo
ZmFsc2UpOworICAgIH0KKworICAgIC8qIC0tIGVuZCBwbGF0Zm9ybSBzcGVjaWZpYyBjb2RlIC0t
Ki8KKyAgfQorCisgIHRoaXMuaW5pdFRlc3RpbmdIYXJuZXNzID0gZnVuY3Rpb24oKSB7CisgICAg
aW5pdE5vbktocm9ub3NGcmFtZXdvcmsoKTsKKyAgfQorfSgpKTsKKwordmFyIGdldFVybE9wdGlv
bnMgPSAoZnVuY3Rpb24oKSB7CisgIHZhciBfdXJsT3B0aW9uc1BhcnNlZCA9IGZhbHNlOworICB2
YXIgX3VybE9wdGlvbnMgPSB7fTsKKyAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgIGlmICghX3Vy
bE9wdGlvbnNQYXJzZWQpIHsKKyAgICAgIHZhciBzID0gd2luZG93LmxvY2F0aW9uLmhyZWY7Cisg
ICAgICB2YXIgcSA9IHMuaW5kZXhPZigiPyIpOworICAgICAgdmFyIGUgPSBzLmluZGV4T2YoIiMi
KTsKKyAgICAgIGlmIChlIDwgMCkgeworICAgICAgICBlID0gcy5sZW5ndGg7CisgICAgICB9Cisg
ICAgICB2YXIgcXVlcnkgPSBzLnN1YnN0cmluZyhxICsgMSwgZSk7CisgICAgICB2YXIgcGFpcnMg
PSBxdWVyeS5zcGxpdCgiJiIpOworICAgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IHBhaXJzLmxl
bmd0aDsgKytpaSkgeworICAgICAgICB2YXIga2V5VmFsdWUgPSBwYWlyc1tpaV0uc3BsaXQoIj0i
KTsKKyAgICAgICAgdmFyIGtleSA9IGtleVZhbHVlWzBdOworICAgICAgICB2YXIgdmFsdWUgPSBk
ZWNvZGVVUklDb21wb25lbnQoa2V5VmFsdWVbMV0pOworICAgICAgICBfdXJsT3B0aW9uc1trZXld
ID0gdmFsdWU7CisgICAgICB9CisgICAgICBfdXJsT3B0aW9uc1BhcnNlZCA9IHRydWU7CisgICAg
fQorCisgICAgcmV0dXJuIF91cmxPcHRpb25zOworICB9Cit9KSgpOworCitpZiAodHlwZW9mIHF1
aWV0TW9kZSA9PSAndW5kZWZpbmVkJykgeworICB2YXIgcXVpZXRNb2RlID0gKGZ1bmN0aW9uKCkg
eworICAgIHZhciBfcXVpZXRNb2RlQ2hlY2tlZCA9IGZhbHNlOworICAgIHZhciBfaXNRdWlldCA9
IGZhbHNlOworICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgIGlmICghX3F1aWV0TW9kZUNo
ZWNrZWQpIHsKKyAgICAgICAgX2lzUXVpZXQgPSAoZ2V0VXJsT3B0aW9ucygpLnF1aWV0ID09IDEp
OworICAgICAgICBfcXVpZXRNb2RlQ2hlY2tlZCA9IHRydWU7CisgICAgICB9CisgICAgICByZXR1
cm4gX2lzUXVpZXQ7CisgICAgfQorICB9KSgpOworfQorCitmdW5jdGlvbiBub25LaHJvbm9zRnJh
bWV3b3JrTm90aWZ5RG9uZSgpIHsKKyAgLy8gV2ViS2l0IFNwZWNpZmljIGNvZGUuIEFkZCB5b3Vy
IGNvZGUgaGVyZS4KKyAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAgIHdp
bmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgIH0KK30KKworZnVuY3Rp
b24gcmVwb3J0VGVzdFJlc3VsdHNUb0hhcm5lc3Moc3VjY2VzcywgbXNnKSB7CisgIGlmICh3aW5k
b3cucGFyZW50LndlYmdsVGVzdEhhcm5lc3MpIHsKKyAgICB3aW5kb3cucGFyZW50LndlYmdsVGVz
dEhhcm5lc3MucmVwb3J0UmVzdWx0cyh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUsIHN1Y2Nlc3Ms
IG1zZyk7CisgIH0KK30KKworZnVuY3Rpb24gcmVwb3J0U2tpcHBlZFRlc3RSZXN1bHRzVG9IYXJu
ZXNzKHN1Y2Nlc3MsIG1zZykgeworICBpZiAod2luZG93LnBhcmVudC53ZWJnbFRlc3RIYXJuZXNz
KSB7CisgICAgd2luZG93LnBhcmVudC53ZWJnbFRlc3RIYXJuZXNzLnJlcG9ydFJlc3VsdHMod2lu
ZG93LmxvY2F0aW9uLnBhdGhuYW1lLCBzdWNjZXNzLCBtc2csIHRydWUpOworICB9Cit9CisKK2Z1
bmN0aW9uIG5vdGlmeUZpbmlzaGVkVG9IYXJuZXNzKCkgeworICBpZiAod2luZG93LnBhcmVudC53
ZWJnbFRlc3RIYXJuZXNzKSB7CisgICAgd2luZG93LnBhcmVudC53ZWJnbFRlc3RIYXJuZXNzLm5v
dGlmeUZpbmlzaGVkKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSk7CisgIH0KKyAgaWYgKHdpbmRv
dy5ub25LaHJvbm9zRnJhbWV3b3JrTm90aWZ5RG9uZSkgeworICAgIHdpbmRvdy5ub25LaHJvbm9z
RnJhbWV3b3JrTm90aWZ5RG9uZSgpOworICB9Cit9CisKK3ZhciBfYnVmZmVyZWRDb25zb2xlTG9n
cyA9IFtdOworCitmdW5jdGlvbiBfYnVmZmVyZWRMb2dUb0NvbnNvbGUobXNnKQoreworICBpZiAo
X2J1ZmZlcmVkQ29uc29sZUxvZ3MpIHsKKyAgICBfYnVmZmVyZWRDb25zb2xlTG9ncy5wdXNoKG1z
Zyk7CisgIH0gZWxzZSBpZiAod2luZG93LmNvbnNvbGUpIHsKKyAgICB3aW5kb3cuY29uc29sZS5s
b2cobXNnKTsKKyAgfQorfQorCisvLyBQdWJsaWMgZW50cnkgcG9pbnQgZXhwb3NlZCB0byBtYW55
IG90aGVyIGZpbGVzLgorZnVuY3Rpb24gYnVmZmVyZWRMb2dUb0NvbnNvbGUobXNnKQoreworICBf
YnVmZmVyZWRMb2dUb0NvbnNvbGUobXNnKTsKK30KKworLy8gQ2FsbGVkIGltcGxpY2l0bHkgYnkg
dGVzdEZhaWxlZCgpLgorZnVuY3Rpb24gX2ZsdXNoQnVmZmVyZWRMb2dzVG9Db25zb2xlKCkKK3sK
KyAgaWYgKF9idWZmZXJlZENvbnNvbGVMb2dzKSB7CisgICAgaWYgKHdpbmRvdy5jb25zb2xlKSB7
CisgICAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgX2J1ZmZlcmVkQ29uc29sZUxvZ3MubGVuZ3Ro
OyArK2lpKSB7CisgICAgICAgIHdpbmRvdy5jb25zb2xlLmxvZyhfYnVmZmVyZWRDb25zb2xlTG9n
c1tpaV0pOworICAgICAgfQorICAgIH0KKyAgICBfYnVmZmVyZWRDb25zb2xlTG9ncyA9IG51bGw7
CisgIH0KK30KKwordmFyIF9qc1Rlc3RQcmVWZXJib3NlTG9nZ2luZyA9IGZhbHNlOworCitmdW5j
dGlvbiBlbmFibGVKU1Rlc3RQcmVWZXJib3NlTG9nZ2luZygpCit7CisgICAgX2pzVGVzdFByZVZl
cmJvc2VMb2dnaW5nID0gdHJ1ZTsKK30KKworZnVuY3Rpb24gZGVzY3JpcHRpb24obXNnKQorewor
ICAgIGluaXRUZXN0aW5nSGFybmVzcygpOworICAgIGlmIChtc2cgPT09IHVuZGVmaW5lZCkgewor
ICAgICAgbXNnID0gZG9jdW1lbnQudGl0bGU7CisgICAgfQorICAgIC8vIEZvciBNU0lFIDYgY29t
cGF0aWJpbGl0eQorICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIp
OworICAgIHNwYW4uaW5uZXJIVE1MID0gJzxwPicgKyBtc2cgKyAnPC9wPjxwPk9uIHN1Y2Nlc3Ms
IHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiPHNwYW4gY2xhc3M9InBhc3MiPlBBU1M8L3NwYW4+
IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIjxzcGFuIGNsYXNzPSJwYXNzIj5URVNUIENPTVBMRVRF
PC9zcGFuPiIuPC9wPic7CisgICAgdmFyIGRlc2NyaXB0aW9uID0gZG9jdW1lbnQuZ2V0RWxlbWVu
dEJ5SWQoImRlc2NyaXB0aW9uIik7CisgICAgaWYgKGRlc2NyaXB0aW9uLmZpcnN0Q2hpbGQpCisg
ICAgICAgIGRlc2NyaXB0aW9uLnJlcGxhY2VDaGlsZChzcGFuLCBkZXNjcmlwdGlvbi5maXJzdENo
aWxkKTsKKyAgICBlbHNlCisgICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZENoaWxkKHNwYW4pOwor
ICAgIGlmIChfanNUZXN0UHJlVmVyYm9zZUxvZ2dpbmcpIHsKKyAgICAgICAgX2J1ZmZlcmVkTG9n
VG9Db25zb2xlKG1zZyk7CisgICAgfQorfQorCitmdW5jdGlvbiBfYWRkU3Bhbihjb250ZW50cykK
K3sKKyAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAgICBk
b2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmFwcGVuZENoaWxkKHNwYW4pOyAvLyBp
bnNlcnQgaXQgZmlyc3Qgc28gWEhUTUwga25vd3MgdGhlIG5hbWVzcGFjZQorICAgIHNwYW4uaW5u
ZXJIVE1MID0gY29udGVudHMgKyAnPGJyIC8+JzsKK30KKworZnVuY3Rpb24gZGVidWcobXNnKQor
eworICAgIGlmICghcXVpZXRNb2RlKCkpCisgICAgICBfYWRkU3Bhbihtc2cpOworICAgIGlmIChf
anNUZXN0UHJlVmVyYm9zZUxvZ2dpbmcpIHsKKyAgICAgICAgX2J1ZmZlcmVkTG9nVG9Db25zb2xl
KG1zZyk7CisgICAgfQorfQorCitmdW5jdGlvbiBlc2NhcGVIVE1MKHRleHQpCit7CisgICAgcmV0
dXJuIHRleHQucmVwbGFjZSgvJi9nLCAiJmFtcDsiKS5yZXBsYWNlKC88L2csICImbHQ7Iik7Cit9
CisvKioKKyAqIERlZmluZXMgdGhlIGV4Y2VwdGlvbiB0eXBlIGZvciBhIHRlc3QgZmFpbHVyZS4K
KyAqIEBjb25zdHJ1Y3RvcgorICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1l
c3NhZ2UuCisgKi8KK3ZhciBUZXN0RmFpbGVkRXhjZXB0aW9uID0gZnVuY3Rpb24gKG1lc3NhZ2Up
IHsKKyAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7CisgICB0aGlzLm5hbWUgPSAiVGVzdEZhaWxl
ZEV4Y2VwdGlvbiI7Cit9OworCisvKioKKyAqIEBwYXJhbSAge3N0cmluZz19IG1zZworICovCitm
dW5jdGlvbiB0ZXN0UGFzc2VkKG1zZykgeworICAgIG1zZyA9IG1zZyB8fCAnUGFzc2VkJzsKKyAg
ICBpZiAoX2N1cnJlbnRUZXN0TmFtZSkKKyAgICAgIG1zZyA9IF9jdXJyZW50VGVzdE5hbWUgKyAn
OiAnICsgbXNnOworCisgICAgcmVwb3J0VGVzdFJlc3VsdHNUb0hhcm5lc3ModHJ1ZSwgbXNnKTsK
KworICAgIGlmICghcXVpZXRNb2RlKCkpCisgICAgICBfYWRkU3BhbignPHNwYW4+PHNwYW4gY2xh
c3M9InBhc3MiPlBBU1M8L3NwYW4+ICcgKyBlc2NhcGVIVE1MKG1zZykgKyAnPC9zcGFuPicpOwor
ICAgIGlmIChfanNUZXN0UHJlVmVyYm9zZUxvZ2dpbmcpIHsKKyAgICAgICAgX2J1ZmZlcmVkTG9n
VG9Db25zb2xlKCdQQVNTICcgKyBtc2cpOworICAgIH0KK30KKworLyoqCisgKiBAcGFyYW0gIHtz
dHJpbmc9fSBtc2cKKyAqLworZnVuY3Rpb24gdGVzdEZhaWxlZChtc2cpIHsKKyAgICBtc2cgPSBt
c2cgfHwgJ0ZhaWxlZCc7CisgICAgaWYgKF9jdXJyZW50VGVzdE5hbWUpCisgICAgICBtc2cgPSBf
Y3VycmVudFRlc3ROYW1lICsgJzogJyArIG1zZzsKKworICAgIHJlcG9ydFRlc3RSZXN1bHRzVG9I
YXJuZXNzKGZhbHNlLCBtc2cpOworICAgIF9hZGRTcGFuKCc8c3Bhbj48c3BhbiBjbGFzcz0iZmFp
bCI+RkFJTDwvc3Bhbj4gJyArIGVzY2FwZUhUTUwobXNnKSArICc8L3NwYW4+Jyk7CisgICAgX2J1
ZmZlcmVkTG9nVG9Db25zb2xlKCdGQUlMICcgKyBtc2cpOworICAgIF9mbHVzaEJ1ZmZlcmVkTG9n
c1RvQ29uc29sZSgpOworfQorCit2YXIgX2N1cnJlbnRUZXN0TmFtZTsKKworLyoqCisgKiBTZXRz
IHRoZSBjdXJyZW50IHRlc3QgbmFtZSBmb3IgdXNhZ2Ugd2l0aGluIHRlc3RQYXNzZWRPcHRpb25z
L3Rlc3RGYWlsZWRPcHRpb25zLgorICogQHBhcmFtIHtzdHJpbmc9fSBuYW1lIFRoZSBuYW1lIHRv
IHNldCBhcyB0aGUgY3VycmVudCB0ZXN0IG5hbWUuCisgKi8KK2Z1bmN0aW9uIHNldEN1cnJlbnRU
ZXN0TmFtZShuYW1lKQoreworICAgIF9jdXJyZW50VGVzdE5hbWUgPSBuYW1lOworfQorCisvKioK
KyAqIEdldHMgdGhlIGN1cnJlbnQgdGVzdCBuYW1lIGluIHVzZSB3aXRoaW4gdGVzdFBhc3NlZE9w
dGlvbnMvdGVzdEZhaWxlZE9wdGlvbnMuCisgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBuYW1lIG9m
IHRoZSBjdXJyZW50IHRlc3QuCisgKi8KK2Z1bmN0aW9uIGdldEN1cnJlbnRUZXN0TmFtZSgpCit7
CisgICAgcmV0dXJuIF9jdXJyZW50VGVzdE5hbWU7Cit9CisKKy8qKgorICogVmFyaWF0aW9uIG9m
IHRoZSB0ZXN0UGFzc2VkIGZ1bmN0aW9uLCB3aXRoIHRoZSBvcHRpb24gdG8gbm90IHNob3cgKGFu
ZCB0aHVzIG5vdCBjb3VudCkgdGhlIHRlc3QncyBwYXNzIHJlc3VsdC4KKyAqIEBwYXJhbSB7c3Ry
aW5nfSBtc2cgVGhlIG1lc3NhZ2UgdG8gYmUgc2hvd24gaW4gdGhlIHBhc3MgcmVzdWx0LgorICog
QHBhcmFtIHtib29sZWFufSBhZGRTcGFuIEluZGljYXRlcyB3aGV0aGVyIHRoZSBtZXNzYWdlIHdp
bGwgYmUgdmlzaWJsZSAodGh1cyBjb3VudGVkIGluIHRoZSByZXN1bHRzKSBvciBub3QuCisgKi8K
K2Z1bmN0aW9uIHRlc3RQYXNzZWRPcHRpb25zKG1zZywgYWRkU3BhbikKK3sKKyAgICBpZiAoYWRk
U3BhbiAmJiAhcXVpZXRNb2RlKCkpCisgICAgeworICAgICAgICByZXBvcnRUZXN0UmVzdWx0c1Rv
SGFybmVzcyh0cnVlLCBfY3VycmVudFRlc3ROYW1lICsgIjogIiArIG1zZyk7CisgICAgICAgIF9h
ZGRTcGFuKCc8c3Bhbj48c3BhbiBjbGFzcz0icGFzcyI+UEFTUzwvc3Bhbj4gJyArIGVzY2FwZUhU
TUwoX2N1cnJlbnRUZXN0TmFtZSkgKyAiOiAiICsgZXNjYXBlSFRNTChtc2cpICsgJzwvc3Bhbj4n
KTsKKyAgICB9CisgICAgaWYgKF9qc1Rlc3RQcmVWZXJib3NlTG9nZ2luZykgeworICAgICAgICBf
YnVmZmVyZWRMb2dUb0NvbnNvbGUoJ1BBU1MgJyArIG1zZyk7CisgICAgfQorfQorCisvKioKKyAq
IFJlcG9ydCBza2lwcGVkIHRlc3RzLgorICogQHBhcmFtIHtzdHJpbmd9IG1zZyBUaGUgbWVzc2Fn
ZSB0byBiZSBzaG93biBpbiB0aGUgc2tpcCByZXN1bHQuCisgKiBAcGFyYW0ge2Jvb2xlYW59IGFk
ZFNwYW4gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIG1lc3NhZ2Ugd2lsbCBiZSB2aXNpYmxlICh0aHVz
IGNvdW50ZWQgaW4gdGhlIHJlc3VsdHMpIG9yIG5vdC4KKyAqLworZnVuY3Rpb24gdGVzdFNraXBw
ZWRPcHRpb25zKG1zZywgYWRkU3BhbikKK3sKKyAgICBpZiAoYWRkU3BhbiAmJiAhcXVpZXRNb2Rl
KCkpCisgICAgeworICAgICAgICByZXBvcnRTa2lwcGVkVGVzdFJlc3VsdHNUb0hhcm5lc3ModHJ1
ZSwgX2N1cnJlbnRUZXN0TmFtZSArICI6ICIgKyBtc2cpOworICAgICAgICBfYWRkU3BhbignPHNw
YW4+PHNwYW4gY2xhc3M9Indhcm4iPlNLSVA8L3NwYW4+ICcgKyBlc2NhcGVIVE1MKF9jdXJyZW50
VGVzdE5hbWUpICsgIjogIiArIGVzY2FwZUhUTUwobXNnKSArICc8L3NwYW4+Jyk7CisgICAgfQor
ICAgIGlmIChfanNUZXN0UHJlVmVyYm9zZUxvZ2dpbmcpIHsKKyAgICAgICAgX2J1ZmZlcmVkTG9n
VG9Db25zb2xlKCdTS0lQJyArIG1zZyk7CisgICAgfQorfQorCisvKioKKyAqIFZhcmlhdGlvbiBv
ZiB0aGUgdGVzdEZhaWxlZCBmdW5jdGlvbiwgd2l0aCB0aGUgb3B0aW9uIHRvIHRocm93IGFuIGV4
Y2VwdGlvbiBvciBub3QuCisgKiBAcGFyYW0ge3N0cmluZ30gbXNnIFRoZSBtZXNzYWdlIHRvIGJl
IHNob3duIGluIHRoZSBmYWlsIHJlc3VsdC4KKyAqIEBwYXJhbSB7Ym9vbGVhbn0gZXh0aHJvdyBJ
bmRpY2F0ZXMgd2hldGhlciB0aGUgZnVuY3Rpb24gd2lsbCB0aHJvdyBhIFRlc3RGYWlsZWRFeGNl
cHRpb24gb3Igbm90LgorICovCitmdW5jdGlvbiB0ZXN0RmFpbGVkT3B0aW9ucyhtc2csIGV4dGhy
b3cpCit7CisgICAgcmVwb3J0VGVzdFJlc3VsdHNUb0hhcm5lc3MoZmFsc2UsIF9jdXJyZW50VGVz
dE5hbWUgKyAiOiAiICsgbXNnKTsKKyAgICBfYWRkU3BhbignPHNwYW4+PHNwYW4gY2xhc3M9ImZh
aWwiPkZBSUw8L3NwYW4+ICcgKyBlc2NhcGVIVE1MKF9jdXJyZW50VGVzdE5hbWUpICsgIjogIiAr
IGVzY2FwZUhUTUwobXNnKSArICc8L3NwYW4+Jyk7CisgICAgX2J1ZmZlcmVkTG9nVG9Db25zb2xl
KCdGQUlMICcgKyBtc2cpOworICAgIF9mbHVzaEJ1ZmZlcmVkTG9nc1RvQ29uc29sZSgpOworICAg
IGlmIChleHRocm93KSB7CisgICAgICAgIF9jdXJyZW50VGVzdE5hbWUgPSAiIjsgLy9SZW1lbWJl
cmluZyB0byBzZXQgdGhlIG5hbWUgb2YgY3VycmVudCB0ZXN0Y2FzZSB0byBlbXB0eSBzdHJpbmcu
CisgICAgICAgIHRocm93IG5ldyBUZXN0RmFpbGVkRXhjZXB0aW9uKG1zZyk7CisgICAgfQorfQor
CitmdW5jdGlvbiBhcmVBcnJheXNFcXVhbChfYSwgX2IpCit7CisgICAgdHJ5IHsKKyAgICAgICAg
aWYgKF9hLmxlbmd0aCAhPT0gX2IubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
ICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IF9hLmxlbmd0aDsgaSsrKQorICAgICAgICAgICAg
aWYgKF9hW2ldICE9PSBfYltpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAg
fSBjYXRjaCAoZXgpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1cm4g
dHJ1ZTsKK30KKworZnVuY3Rpb24gaXNNaW51c1plcm8obikKK3sKKyAgICAvLyB0aGUgb25seSB3
YXkgdG8gdGVsbCAwIGZyb20gLTAgaW4gSlMgaXMgdGhlIGZhY3QgdGhhdCAxLy0wIGlzCisgICAg
Ly8gLUluZmluaXR5IGluc3RlYWQgb2YgSW5maW5pdHkKKyAgICByZXR1cm4gbiA9PT0gMCAmJiAx
L24gPCAwOworfQorCitmdW5jdGlvbiBpc1Jlc3VsdENvcnJlY3QoX2FjdHVhbCwgX2V4cGVjdGVk
KQoreworICAgIGlmIChfZXhwZWN0ZWQgPT09IDApCisgICAgICAgIHJldHVybiBfYWN0dWFsID09
PSBfZXhwZWN0ZWQgJiYgKDEvX2FjdHVhbCkgPT09ICgxL19leHBlY3RlZCk7CisgICAgaWYgKF9h
Y3R1YWwgPT09IF9leHBlY3RlZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHR5cGVv
ZihfZXhwZWN0ZWQpID09ICJudW1iZXIiICYmIGlzTmFOKF9leHBlY3RlZCkpCisgICAgICAgIHJl
dHVybiB0eXBlb2YoX2FjdHVhbCkgPT0gIm51bWJlciIgJiYgaXNOYU4oX2FjdHVhbCk7CisgICAg
aWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChfZXhwZWN0ZWQpID09IE9iamVjdC5w
cm90b3R5cGUudG9TdHJpbmcuY2FsbChbXSkpCisgICAgICAgIHJldHVybiBhcmVBcnJheXNFcXVh
bChfYWN0dWFsLCBfZXhwZWN0ZWQpOworICAgIHJldHVybiBmYWxzZTsKK30KKworZnVuY3Rpb24g
c3RyaW5naWZ5KHYpCit7CisgICAgaWYgKHYgPT09IDAgJiYgMS92IDwgMCkKKyAgICAgICAgcmV0
dXJuICItMCI7CisgICAgZWxzZSByZXR1cm4gIiIgKyB2OworfQorCitmdW5jdGlvbiBldmFsQW5k
TG9nKF9hKQoreworICBpZiAodHlwZW9mIF9hICE9ICJzdHJpbmciKQorICAgIGRlYnVnKCJXQVJO
OiB0cnlBbmRMb2coKSBleHBlY3RzIGEgc3RyaW5nIGFyZ3VtZW50Iik7CisKKyAgLy8gTG9nIGZp
cnN0IGluIGNhc2UgdGhpbmdzIGdvIGhvcnJpYmx5IHdyb25nIG9yIHRoaXMgY2F1c2VzIGEgc3lu
YyBldmVudC4KKyAgZGVidWcoX2EpOworCisgIHZhciBfYXY7CisgIHRyeSB7CisgICAgIF9hdiA9
IGV2YWwoX2EpOworICB9IGNhdGNoIChlKSB7CisgICAgdGVzdEZhaWxlZChfYSArICIgdGhyZXcg
ZXhjZXB0aW9uICIgKyBlKTsKKyAgfQorICByZXR1cm4gX2F2OworfQorCitmdW5jdGlvbiBzaG91
bGRCZVN0cmluZyhldmFsYWJsZSwgZXhwZWN0ZWQpIHsKKyAgICBjb25zdCB2YWwgPSBldmFsKGV2
YWxhYmxlKTsKKyAgICBjb25zdCB0ZXh0ID0gZXZhbGFibGUgKyAiIHNob3VsZCBiZSAiICsgZXhw
ZWN0ZWQgKyAiLiI7CisgICAgaWYgKHZhbCA9PSBleHBlY3RlZCkgeworICAgICAgICB0ZXN0UGFz
c2VkKHRleHQpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRlc3RGYWlsZWQodGV4dCArICIgKHdh
cyAiICsgdmFsICsgIikiKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHNob3VsZEJlKF9hLCBfYiwg
cXVpZXQpCit7CisgICAgaWYgKHR5cGVvZiBfYSAhPSAic3RyaW5nIiB8fCB0eXBlb2YgX2IgIT0g
InN0cmluZyIpCisgICAgICAgIGRlYnVnKCJXQVJOOiBzaG91bGRCZSgpIGV4cGVjdHMgc3RyaW5n
IGFyZ3VtZW50cyIpOworICAgIHZhciBleGNlcHRpb247CisgICAgdmFyIF9hdjsKKyAgICB0cnkg
eworICAgICAgICBfYXYgPSBldmFsKF9hKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGV4
Y2VwdGlvbiA9IGU7CisgICAgfQorICAgIHZhciBfYnYgPSBldmFsKF9iKTsKKworICAgIGlmIChl
eGNlcHRpb24pCisgICAgICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSAiICsgX2J2ICsg
Ii4gVGhyZXcgZXhjZXB0aW9uICIgKyBleGNlcHRpb24pOworICAgIGVsc2UgaWYgKGlzUmVzdWx0
Q29ycmVjdChfYXYsIF9idikpIHsKKyAgICAgICAgaWYgKCFxdWlldCkgeworICAgICAgICAgICAg
dGVzdFBhc3NlZChfYSArICIgaXMgIiArIF9iKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBpZiAo
dHlwZW9mKF9hdikgPT0gdHlwZW9mKF9idikpCisgICAgICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNo
b3VsZCBiZSAiICsgX2J2ICsgIi4gV2FzICIgKyBzdHJpbmdpZnkoX2F2KSArICIuIik7CisgICAg
ZWxzZQorICAgICAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQgYmUgIiArIF9idiArICIgKG9m
IHR5cGUgIiArIHR5cGVvZiBfYnYgKyAiKS4gV2FzICIgKyBfYXYgKyAiIChvZiB0eXBlICIgKyB0
eXBlb2YgX2F2ICsgIikuIik7Cit9CisKK2Z1bmN0aW9uIHNob3VsZE5vdEJlKF9hLCBfYiwgcXVp
ZXQpCit7CisgICAgaWYgKHR5cGVvZiBfYSAhPSAic3RyaW5nIiB8fCB0eXBlb2YgX2IgIT0gInN0
cmluZyIpCisgICAgICAgIGRlYnVnKCJXQVJOOiBzaG91bGROb3RCZSgpIGV4cGVjdHMgc3RyaW5n
IGFyZ3VtZW50cyIpOworICAgIHZhciBleGNlcHRpb247CisgICAgdmFyIF9hdjsKKyAgICB0cnkg
eworICAgICAgICBfYXYgPSBldmFsKF9hKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGV4
Y2VwdGlvbiA9IGU7CisgICAgfQorICAgIHZhciBfYnYgPSBldmFsKF9iKTsKKworICAgIGlmIChl
eGNlcHRpb24pCisgICAgICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBub3QgYmUgIiArIF9i
diArICIuIFRocmV3IGV4Y2VwdGlvbiAiICsgZXhjZXB0aW9uKTsKKyAgICBlbHNlIGlmICghaXNS
ZXN1bHRDb3JyZWN0KF9hdiwgX2J2KSkgeworICAgICAgICBpZiAoIXF1aWV0KSB7CisgICAgICAg
ICAgICB0ZXN0UGFzc2VkKF9hICsgIiBpcyBub3QgIiArIF9iKTsKKyAgICAgICAgfQorICAgIH0g
ZWxzZQorICAgICAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQgbm90IGJlICIgKyBfYnYgKyAi
LiIpOworfQorCitmdW5jdGlvbiBzaG91bGRCZVRydWUoX2EpIHsgc2hvdWxkQmUoX2EsICJ0cnVl
Iik7IH0KK2Z1bmN0aW9uIHNob3VsZEJlRmFsc2UoX2EpIHsgc2hvdWxkQmUoX2EsICJmYWxzZSIp
OyB9CitmdW5jdGlvbiBzaG91bGRCZU5hTihfYSkgeyBzaG91bGRCZShfYSwgIk5hTiIpOyB9Citm
dW5jdGlvbiBzaG91bGRCZU51bGwoX2EpIHsgc2hvdWxkQmUoX2EsICJudWxsIik7IH0KKworZnVu
Y3Rpb24gc2hvdWxkQmVFcXVhbFRvU3RyaW5nKGEsIGIpCit7CisgIHZhciB1bmV2YWxlZFN0cmlu
ZyA9ICciJyArIGIucmVwbGFjZSgvIi9nLCAiXCIiKSArICciJzsKKyAgc2hvdWxkQmUoYSwgdW5l
dmFsZWRTdHJpbmcpOworfQorCitmdW5jdGlvbiBzaG91bGRFdmFsdWF0ZVRvKGFjdHVhbCwgZXhw
ZWN0ZWQpIHsKKyAgLy8gQSBnZW5lcmFsLXB1cnBvc2UgY29tcGFyYXRvci4gICdhY3R1YWwnIHNo
b3VsZCBiZSBhIHN0cmluZyB0byBiZQorICAvLyBldmFsdWF0ZWQsIGFzIGZvciBzaG91bGRCZSgp
LiAnZXhwZWN0ZWQnIG1heSBiZSBhbnkgdHlwZSBhbmQgd2lsbCBiZQorICAvLyB1c2VkIHdpdGhv
dXQgYmVpbmcgZXZhbCdlZC4KKyAgaWYgKGV4cGVjdGVkID09IG51bGwpIHsKKyAgICAvLyBEbyB0
aGlzIGJlZm9yZSB0aGUgb2JqZWN0IHRlc3QsIHNpbmNlIG51bGwgaXMgb2YgdHlwZSAnb2JqZWN0
Jy4KKyAgICBzaG91bGRCZU51bGwoYWN0dWFsKTsKKyAgfSBlbHNlIGlmICh0eXBlb2YgZXhwZWN0
ZWQgPT0gInVuZGVmaW5lZCIpIHsKKyAgICBzaG91bGRCZVVuZGVmaW5lZChhY3R1YWwpOworICB9
IGVsc2UgaWYgKHR5cGVvZiBleHBlY3RlZCA9PSAiZnVuY3Rpb24iKSB7CisgICAgLy8gQWxsIHRo
aXMgZnVzcyBpcyB0byBhdm9pZCB0aGUgc3RyaW5nLWFyZyB3YXJuaW5nIGZyb20gc2hvdWxkQmUo
KS4KKyAgICB0cnkgeworICAgICAgdmFyIGFjdHVhbFZhbHVlID0gZXZhbChhY3R1YWwpOworICAg
IH0gY2F0Y2ggKGUpIHsKKyAgICAgIHRlc3RGYWlsZWQoIkV2YWx1YXRpbmcgIiArIGFjdHVhbCAr
ICI6IFRocmV3IGV4Y2VwdGlvbiAiICsgZSk7CisgICAgICByZXR1cm47CisgICAgfQorICAgIHNo
b3VsZEJlKCInIiArIGFjdHVhbFZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZSgvXG4vZywgIiIpICsg
IiciLAorICAgICAgICAgICAgICInIiArIGV4cGVjdGVkLnRvU3RyaW5nKCkucmVwbGFjZSgvXG4v
ZywgIiIpICsgIiciKTsKKyAgfSBlbHNlIGlmICh0eXBlb2YgZXhwZWN0ZWQgPT0gIm9iamVjdCIp
IHsKKyAgICBzaG91bGRCZVRydWUoYWN0dWFsICsgIiA9PSAnIiArIGV4cGVjdGVkICsgIiciKTsK
KyAgfSBlbHNlIGlmICh0eXBlb2YgZXhwZWN0ZWQgPT0gInN0cmluZyIpIHsKKyAgICBzaG91bGRC
ZShhY3R1YWwsIGV4cGVjdGVkKTsKKyAgfSBlbHNlIGlmICh0eXBlb2YgZXhwZWN0ZWQgPT0gImJv
b2xlYW4iKSB7CisgICAgc2hvdWxkQmUoInR5cGVvZiAiICsgYWN0dWFsLCAiJ2Jvb2xlYW4nIik7
CisgICAgaWYgKGV4cGVjdGVkKQorICAgICAgc2hvdWxkQmVUcnVlKGFjdHVhbCk7CisgICAgZWxz
ZQorICAgICAgc2hvdWxkQmVGYWxzZShhY3R1YWwpOworICB9IGVsc2UgaWYgKHR5cGVvZiBleHBl
Y3RlZCA9PSAibnVtYmVyIikgeworICAgIHNob3VsZEJlKGFjdHVhbCwgc3RyaW5naWZ5KGV4cGVj
dGVkKSk7CisgIH0gZWxzZSB7CisgICAgZGVidWcoZXhwZWN0ZWQgKyAiIGlzIHVua25vd24gdHlw
ZSAiICsgdHlwZW9mIGV4cGVjdGVkKTsKKyAgICBzaG91bGRCZVRydWUoYWN0dWFsLCAiJyIgICtl
eHBlY3RlZC50b1N0cmluZygpICsgIiciKTsKKyAgfQorfQorCitmdW5jdGlvbiBzaG91bGRCZU5v
blplcm8oX2EpCit7CisgIHZhciBleGNlcHRpb247CisgIHZhciBfYXY7CisgIHRyeSB7CisgICAg
IF9hdiA9IGV2YWwoX2EpOworICB9IGNhdGNoIChlKSB7CisgICAgIGV4Y2VwdGlvbiA9IGU7Cisg
IH0KKworICBpZiAoZXhjZXB0aW9uKQorICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSBu
b24temVyby4gVGhyZXcgZXhjZXB0aW9uICIgKyBleGNlcHRpb24pOworICBlbHNlIGlmIChfYXYg
IT0gMCkKKyAgICB0ZXN0UGFzc2VkKF9hICsgIiBpcyBub24temVyby4iKTsKKyAgZWxzZQorICAg
IHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSBub24temVyby4gV2FzICIgKyBfYXYpOworfQor
CitmdW5jdGlvbiBzaG91bGRCZU5vbk51bGwoX2EpCit7CisgIHZhciBleGNlcHRpb247CisgIHZh
ciBfYXY7CisgIHRyeSB7CisgICAgIF9hdiA9IGV2YWwoX2EpOworICB9IGNhdGNoIChlKSB7Cisg
ICAgIGV4Y2VwdGlvbiA9IGU7CisgIH0KKworICBpZiAoZXhjZXB0aW9uKQorICAgIHRlc3RGYWls
ZWQoX2EgKyAiIHNob3VsZCBiZSBub24tbnVsbC4gVGhyZXcgZXhjZXB0aW9uICIgKyBleGNlcHRp
b24pOworICBlbHNlIGlmIChfYXYgIT0gbnVsbCkKKyAgICB0ZXN0UGFzc2VkKF9hICsgIiBpcyBu
b24tbnVsbC4iKTsKKyAgZWxzZQorICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSBub24t
bnVsbC4gV2FzICIgKyBfYXYpOworfQorCitmdW5jdGlvbiBzaG91bGRCZVVuZGVmaW5lZChfYSkK
K3sKKyAgdmFyIGV4Y2VwdGlvbjsKKyAgdmFyIF9hdjsKKyAgdHJ5IHsKKyAgICAgX2F2ID0gZXZh
bChfYSk7CisgIH0gY2F0Y2ggKGUpIHsKKyAgICAgZXhjZXB0aW9uID0gZTsKKyAgfQorCisgIGlm
IChleGNlcHRpb24pCisgICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIGJlIHVuZGVmaW5lZC4g
VGhyZXcgZXhjZXB0aW9uICIgKyBleGNlcHRpb24pOworICBlbHNlIGlmICh0eXBlb2YgX2F2ID09
ICJ1bmRlZmluZWQiKQorICAgIHRlc3RQYXNzZWQoX2EgKyAiIGlzIHVuZGVmaW5lZC4iKTsKKyAg
ZWxzZQorICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSB1bmRlZmluZWQuIFdhcyAiICsg
X2F2KTsKK30KKworZnVuY3Rpb24gc2hvdWxkQmVEZWZpbmVkKF9hKQoreworICB2YXIgZXhjZXB0
aW9uOworICB2YXIgX2F2OworICB0cnkgeworICAgICBfYXYgPSBldmFsKF9hKTsKKyAgfSBjYXRj
aCAoZSkgeworICAgICBleGNlcHRpb24gPSBlOworICB9CisKKyAgaWYgKGV4Y2VwdGlvbikKKyAg
ICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQgYmUgZGVmaW5lZC4gVGhyZXcgZXhjZXB0aW9uICIg
KyBleGNlcHRpb24pOworICBlbHNlIGlmIChfYXYgIT09IHVuZGVmaW5lZCkKKyAgICB0ZXN0UGFz
c2VkKF9hICsgIiBpcyBkZWZpbmVkLiIpOworICBlbHNlCisgICAgdGVzdEZhaWxlZChfYSArICIg
c2hvdWxkIGJlIGRlZmluZWQuIFdhcyAiICsgX2F2KTsKK30KKworZnVuY3Rpb24gc2hvdWxkQmVM
ZXNzVGhhbk9yRXF1YWwoX2EsIF9iKSB7CisgICAgaWYgKHR5cGVvZiBfYSAhPSAic3RyaW5nIiB8
fCB0eXBlb2YgX2IgIT0gInN0cmluZyIpCisgICAgICAgIGRlYnVnKCJXQVJOOiBzaG91bGRCZUxl
c3NUaGFuT3JFcXVhbCBleHBlY3RzIHN0cmluZyBhcmd1bWVudHMiKTsKKworICAgIHZhciBleGNl
cHRpb247CisgICAgdmFyIF9hdjsKKyAgICB0cnkgeworICAgICAgICBfYXYgPSBldmFsKF9hKTsK
KyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGV4Y2VwdGlvbiA9IGU7CisgICAgfQorICAgIHZh
ciBfYnYgPSBldmFsKF9iKTsKKworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHRlc3RGYWls
ZWQoX2EgKyAiIHNob3VsZCBiZSA8PSAiICsgX2IgKyAiLiBUaHJldyBleGNlcHRpb24gIiArIGV4
Y2VwdGlvbik7CisgICAgZWxzZSBpZiAodHlwZW9mIF9hdiA9PSAidW5kZWZpbmVkIiB8fCBfYXYg
PiBfYnYpCisgICAgICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSA+PSAiICsgX2IgKyAi
LiBXYXMgIiArIF9hdiArICIgKG9mIHR5cGUgIiArIHR5cGVvZiBfYXYgKyAiKS4iKTsKKyAgICBl
bHNlCisgICAgICAgIHRlc3RQYXNzZWQoX2EgKyAiIGlzIDw9ICIgKyBfYik7Cit9CisKK2Z1bmN0
aW9uIHNob3VsZEJlR3JlYXRlclRoYW5PckVxdWFsKF9hLCBfYikgeworICAgIGlmICh0eXBlb2Yg
X2EgIT0gInN0cmluZyIgfHwgdHlwZW9mIF9iICE9ICJzdHJpbmciKQorICAgICAgICBkZWJ1Zygi
V0FSTjogc2hvdWxkQmVHcmVhdGVyVGhhbk9yRXF1YWwgZXhwZWN0cyBzdHJpbmcgYXJndW1lbnRz
Iik7CisKKyAgICB2YXIgZXhjZXB0aW9uOworICAgIHZhciBfYXY7CisgICAgdHJ5IHsKKyAgICAg
ICAgX2F2ID0gZXZhbChfYSk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBleGNlcHRpb24g
PSBlOworICAgIH0KKyAgICB2YXIgX2J2ID0gZXZhbChfYik7CisKKyAgICBpZiAoZXhjZXB0aW9u
KQorICAgICAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQgYmUgPj0gIiArIF9iICsgIi4gVGhy
ZXcgZXhjZXB0aW9uICIgKyBleGNlcHRpb24pOworICAgIGVsc2UgaWYgKHR5cGVvZiBfYXYgPT0g
InVuZGVmaW5lZCIgfHwgX2F2IDwgX2J2KQorICAgICAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91
bGQgYmUgPj0gIiArIF9iICsgIi4gV2FzICIgKyBfYXYgKyAiIChvZiB0eXBlICIgKyB0eXBlb2Yg
X2F2ICsgIikuIik7CisgICAgZWxzZQorICAgICAgICB0ZXN0UGFzc2VkKF9hICsgIiBpcyA+PSAi
ICsgX2IpOworfQorCitmdW5jdGlvbiBleHBlY3RUcnVlKHYsIG1zZykgeworICBpZiAodikgewor
ICAgIHRlc3RQYXNzZWQobXNnKTsKKyAgfSBlbHNlIHsKKyAgICB0ZXN0RmFpbGVkKG1zZyk7Cisg
IH0KK30KKworZnVuY3Rpb24gbWF4QXJyYXlEaWZmKGEsIGIpIHsKKyAgICBpZiAoYS5sZW5ndGgg
IT0gYi5sZW5ndGgpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihgYSBhbmQgYiBoYXZlIGRpZmZl
cmVudCBsZW5ndGhzOiAke2EubGVuZ3RofSB2cyAke2IubGVuZ3RofWApOworCisgICAgbGV0IGRp
ZmYgPSAwOworICAgIGZvciAoY29uc3QgaSBpbiBhKSB7CisgICAgICAgIGRpZmYgPSBNYXRoLm1h
eChkaWZmLCBNYXRoLmFicyhhW2ldIC0gYltpXSkpOworICAgIH0KKyAgICByZXR1cm4gZGlmZjsK
K30KKworZnVuY3Rpb24gZXhwZWN0QXJyYXkod2FzLCBleHBlY3RlZCwgbWF4RGlmZj0wKSB7Cisg
ICAgY29uc3QgZGlmZiA9IG1heEFycmF5RGlmZihleHBlY3RlZCwgd2FzKTsKKyAgICBsZXQgc3Ry
ID0gYEV4cGVjdGVkIFske2V4cGVjdGVkLnRvU3RyaW5nKCl9XWA7CisgICAgbGV0IGZuID0gdGVz
dFBhc3NlZDsKKyAgICBpZiAobWF4RGlmZikgeworICAgICAgICBzdHIgKz0gJyArLy0gJyArIG1h
eERpZmY7CisgICAgfQorICAgIGlmIChkaWZmID4gbWF4RGlmZikgeworICAgICAgICBmbiA9IHRl
c3RGYWlsZWQ7CisgICAgICAgIHN0ciArPSBgLCB3YXMgWyR7d2FzLnRvU3RyaW5nKCl9XWA7Cisg
ICAgfQorICAgIGZuKHN0cik7Cit9CisKK2Z1bmN0aW9uIHNob3VsZFRocm93KF9hLCBfZSkKK3sK
KyAgdmFyIGV4Y2VwdGlvbjsKKyAgdmFyIF9hdjsKKyAgdHJ5IHsKKyAgICAgX2F2ID0gZXZhbChf
YSk7CisgIH0gY2F0Y2ggKGUpIHsKKyAgICAgZXhjZXB0aW9uID0gZTsKKyAgfQorCisgIHZhciBf
ZXY7CisgIGlmIChfZSkKKyAgICAgIF9ldiA9ICBldmFsKF9lKTsKKworICBpZiAoZXhjZXB0aW9u
KSB7CisgICAgaWYgKHR5cGVvZiBfZSA9PSAidW5kZWZpbmVkIiB8fCBleGNlcHRpb24gPT0gX2V2
KQorICAgICAgdGVzdFBhc3NlZChfYSArICIgdGhyZXcgZXhjZXB0aW9uICIgKyBleGNlcHRpb24g
KyAiLiIpOworICAgIGVsc2UKKyAgICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCB0aHJvdyAi
ICsgKHR5cGVvZiBfZSA9PSAidW5kZWZpbmVkIiA/ICJhbiBleGNlcHRpb24iIDogX2V2KSArICIu
IFRocmV3IGV4Y2VwdGlvbiAiICsgZXhjZXB0aW9uICsgIi4iKTsKKyAgfSBlbHNlIGlmICh0eXBl
b2YgX2F2ID09ICJ1bmRlZmluZWQiKQorICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCB0aHJv
dyAiICsgKHR5cGVvZiBfZSA9PSAidW5kZWZpbmVkIiA/ICJhbiBleGNlcHRpb24iIDogX2V2KSAr
ICIuIFdhcyB1bmRlZmluZWQuIik7CisgIGVsc2UKKyAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91
bGQgdGhyb3cgIiArICh0eXBlb2YgX2UgPT0gInVuZGVmaW5lZCIgPyAiYW4gZXhjZXB0aW9uIiA6
IF9ldikgKyAiLiBXYXMgIiArIF9hdiArICIuIik7Cit9CisKK2Z1bmN0aW9uIHNob3VsZE5vdFRo
cm93KGV2YWxTdHIsIGRlc2MpIHsKKyAgZGVzYyA9IGRlc2MgfHwgYFxgJHtldmFsU3RyfVxgYDsK
KyAgdHJ5IHsKKyAgICBldmFsKGV2YWxTdHIpOworICAgIHRlc3RQYXNzZWQoYCR7ZGVzY30gc2hv
dWxkIG5vdCB0aHJvdy5gKTsKKyAgfSBjYXRjaCAoZSkgeworICAgIHRlc3RGYWlsZWQoYCR7ZGVz
Y30gc2hvdWxkIG5vdCB0aHJvdywgYnV0IHRocmV3IGV4Y2VwdGlvbiAke2V9LmApOworICB9Cit9
CisKKworZnVuY3Rpb24gc2hvdWxkQmVUeXBlKF9hLCBfdHlwZSkgeworICAgIHZhciBleGNlcHRp
b247CisgICAgdmFyIF9hdjsKKyAgICB0cnkgeworICAgICAgICBfYXYgPSBldmFsKF9hKTsKKyAg
ICB9IGNhdGNoIChlKSB7CisgICAgICAgIGV4Y2VwdGlvbiA9IGU7CisgICAgfQorCisgICAgdmFy
IF90eXBldiA9IGV2YWwoX3R5cGUpOworCisgICAgaWYoX3R5cGV2ID09PSBOdW1iZXIpeworICAg
ICAgICBpZihfYXYgaW5zdGFuY2VvZiBOdW1iZXIpeworICAgICAgICAgICAgdGVzdFBhc3NlZChf
YSArICIgaXMgYW4gaW5zdGFuY2Ugb2YgTnVtYmVyIik7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZSBpZih0eXBlb2YoX2F2KSA9PT0gJ251bWJlcicpeworICAgICAgICAgICAgdGVzdFBhc3NlZChf
YSArICIgaXMgYW4gaW5zdGFuY2Ugb2YgTnVtYmVyIik7CisgICAgICAgIH0KKyAgICAgICAgZWxz
ZXsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoX2EgKyAiIGlzIG5vdCBhbiBpbnN0YW5jZSBvZiBO
dW1iZXIiKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChfYXYgaW5zdGFuY2VvZiBf
dHlwZXYpIHsKKyAgICAgICAgdGVzdFBhc3NlZChfYSArICIgaXMgYW4gaW5zdGFuY2Ugb2YgIiAr
IF90eXBlKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0ZXN0RmFpbGVkKF9hICsgIiBpcyBub3Qg
YW4gaW5zdGFuY2Ugb2YgIiArIF90eXBlKTsKKyAgICB9Cit9CisKKy8qKgorICogU2hvd3MgYSBt
ZXNzYWdlIGluIGNhc2UgZXhwcmVzc2lvbiB0ZXN0IGZhaWxzLgorICogQHBhcmFtIHtib29sZWFu
fSBleHAKKyAqIEBwYXJhbSB7c3RyYWluZ30gbWVzc2FnZQorICovCitmdW5jdGlvbiBjaGVja01l
c3NhZ2UoZXhwLCBtZXNzYWdlKSB7CisgICAgaWYgKCAhZXhwICkKKyAgICAgICAgX2FkZFNwYW4o
JzxzcGFuPjxzcGFuIGNsYXNzPSJ3YXJuIj5XQVJOSU5HPC9zcGFuPiAnICsgZXNjYXBlSFRNTChf
Y3VycmVudFRlc3ROYW1lKSArICI6ICIgKyBlc2NhcGVIVE1MKG1lc3NhZ2UpICsgJzwvc3Bhbj4n
KTsKK30KKworZnVuY3Rpb24gYXNzZXJ0TXNnKGFzc2VydGlvbiwgbXNnKSB7CisgICAgaWYgKGFz
c2VydGlvbikgeworICAgICAgICB0ZXN0UGFzc2VkKG1zZyk7CisgICAgfSBlbHNlIHsKKyAgICAg
ICAgdGVzdEZhaWxlZChtc2cpOworICAgIH0KK30KKworLyoqCisgKiBWYXJpYXRpb24gb2YgdGhl
IGFzc2VydE1zZyBmdW5jdGlvbiwgd2l0aCB0aGUgb3B0aW9uIHRvIG5vdCBzaG93IChhbmQgdGh1
cyBub3QgY291bnQpIHRoZSB0ZXN0J3MgcGFzcyByZXN1bHQsCisgKiBhbmQgdGhyb3cgb3Igbm90
IGEgVGVzdEZhaWxlZEV4Y2VwdGlvbiBpbiBjYXNlIG9mIGZhaWx1cmUuCisgKiBAcGFyYW0ge2Jv
b2xlYW59IGFzc2VydGlvbiBJZiB0aGlzIGlzIHRydWUsIG1lYW5zIHN1Y2Nlc3MsIGVsc2UgZmFp
bHVyZS4KKyAqIEBwYXJhbSB7P3N0cmluZ30gbXNnIFRoZSBtZXNzYWdlIHRvIGJlIHNob3duIGlu
IHRoZSByZXN1bHQuCisgKiBAcGFyYW0ge2Jvb2xlYW59IHZlcmJvc2UgSW4gY2FzZSBvZiBzdWNj
ZXNzLCBkZXRlcm1pbmVzIGlmIHRoZSB0ZXN0IHdpbGwgc2hvdyBpdCdzIHJlc3VsdCBhbmQgY291
bnQgaW4gdGhlIHJlc3VsdHMuCisgKiBAcGFyYW0ge2Jvb2xlYW59IGV4dGhyb3cgSW4gY2FzZSBv
ZiBmYWlsdXJlLCBkZXRlcm1pbmVzIGlmIHRoZSBmdW5jdGlvbiB3aWxsIHRocm93IGEgVGVzdEZh
aWxlZEV4Y2VwdGlvbi4KKyAqLworZnVuY3Rpb24gYXNzZXJ0TXNnT3B0aW9ucyhhc3NlcnRpb24s
IG1zZywgdmVyYm9zZSwgZXh0aHJvdykgeworICAgIGlmIChhc3NlcnRpb24pIHsKKyAgICAgICAg
dGVzdFBhc3NlZE9wdGlvbnMobXNnLCB2ZXJib3NlKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0
ZXN0RmFpbGVkT3B0aW9ucyhtc2csIGV4dGhyb3cpOworICAgIH0KK30KKworCitmdW5jdGlvbiB3
ZWJnbEhhcm5lc3NDb2xsZWN0R2FyYmFnZSgpIHsKKyAgICBpZiAod2luZG93LkdDQ29udHJvbGxl
cikgeworICAgICAgICB3aW5kb3cuR0NDb250cm9sbGVyLmNvbGxlY3QoKTsKKyAgICAgICAgcmV0
dXJuOworICAgIH0KKworICAgIGlmICh3aW5kb3cub3BlcmEgJiYgd2luZG93Lm9wZXJhLmNvbGxl
Y3QpIHsKKyAgICAgICAgd2luZG93Lm9wZXJhLmNvbGxlY3QoKTsKKyAgICAgICAgcmV0dXJuOwor
ICAgIH0KKworICAgIHRyeSB7CisgICAgICAgIHdpbmRvdy5RdWVyeUludGVyZmFjZShDb21wb25l
bnRzLmludGVyZmFjZXMubnNJSW50ZXJmYWNlUmVxdWVzdG9yKQorICAgICAgICAgICAgICAuZ2V0
SW50ZXJmYWNlKENvbXBvbmVudHMuaW50ZXJmYWNlcy5uc0lET01XaW5kb3dVdGlscykKKyAgICAg
ICAgICAgICAgLmdhcmJhZ2VDb2xsZWN0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9IGNhdGNo
KGUpIHt9CisKKyAgICBpZiAod2luZG93LmdjKSB7CisgICAgICAgIHdpbmRvdy5nYygpOworICAg
ICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHdpbmRvdy5Db2xsZWN0R2FyYmFnZSkgewor
ICAgICAgICBDb2xsZWN0R2FyYmFnZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAg
Ly8gV2ViS2l0J3MgTWluaUJyb3dzZXIgd2l0aCB0aGUgZm9sbG93aW5nIGVudmlyb25tZW50IHZh
cmlhYmxlcyBzZXQ6CisgICAgLy8gICBleHBvcnQgSlNDX3VzZURvbGxhclZNPTEKKyAgICAvLyAg
IGV4cG9ydCBfX1hQQ19KU0NfdXNlRG9sbGFyVk09MQorICAgIGlmICh3aW5kb3cuJHZtKSB7Cisg
ICAgICAgIHdpbmRvdy4kdm0uZ2MoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAgIGZ1
bmN0aW9uIGdjUmVjKG4pIHsKKyAgICAgICAgaWYgKG4gPCAxKQorICAgICAgICAgICAgcmV0dXJu
IHt9OworICAgICAgICB2YXIgdGVtcCA9IHtpOiAiYWIiICsgaSArIChpIC8gMTAwMDAwKX07Cisg
ICAgICAgIHRlbXAgKz0gImZvbyI7CisgICAgICAgIGdjUmVjKG4tMSk7CisgICAgfQorICAgIGZv
ciAodmFyIGkgPSAwOyBpIDwgMTAwMDsgaSsrKQorICAgICAgICBnY1JlYygxMCk7Cit9CisKK2Z1
bmN0aW9uIGZpbmlzaFRlc3QoKSB7CisgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7CisgIHZh
ciBlcGlsb2d1ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOworICB2YXIgYmFz
ZVBhdGggPSAiIjsKKyAgdmFyIGV4cGVjdGVkQmFzZSA9ICJqcy10ZXN0LXByZS5qcyI7CisgIHZh
ciBzY3JpcHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpOworICBm
b3IgKHZhciBzY3JpcHQsIGkgPSAwOyBzY3JpcHQgPSBzY3JpcHRzW2ldOyBpKyspIHsKKyAgICB2
YXIgc3JjID0gc2NyaXB0LnNyYzsKKyAgICB2YXIgbCA9IHNyYy5sZW5ndGg7CisgICAgaWYgKHNy
Yy5zdWJzdHIobCAtIGV4cGVjdGVkQmFzZS5sZW5ndGgpID09IGV4cGVjdGVkQmFzZSkgeworICAg
ICAgYmFzZVBhdGggPSBzcmMuc3Vic3RyKDAsIGwgLSBleHBlY3RlZEJhc2UubGVuZ3RoKTsKKyAg
ICAgIGJyZWFrOworICAgIH0KKyAgfQorICBlcGlsb2d1ZS5zcmMgPSBiYXNlUGF0aCArICJqcy10
ZXN0LXBvc3QuanMiOworICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVwaWxvZ3VlKTsKK30K
KwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmls
ZXMvanMvdGVzdHMvZXh0LWZsb2F0LWJsZW5kLmpzIGIvTGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3Vy
Y2VzL3dlYmdsX3Rlc3RfZmlsZXMvanMvdGVzdHMvZXh0LWZsb2F0LWJsZW5kLmpzCm5ldyBmaWxl
IG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAuLmFiMmY5ZjkyODhmNjgyYmYyNzM0MGJkOTU2YzYyMTI5YTI3ZDFlODgKLS0tIC9kZXYvbnVs
bAorKysgYi9MYXlvdXRUZXN0cy93ZWJnbC9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9qcy90
ZXN0cy9leHQtZmxvYXQtYmxlbmQuanMKQEAgLTAsMCArMSwyMzcgQEAKKyd1c2Ugc3RyaWN0JzsK
KworY29uc3QgdHJpdmlhbFZzU3JjID0gYAordm9pZCBtYWluKCkKK3sKKyAgICBnbF9Qb3NpdGlv
biA9IHZlYzQoMCwwLDAsMSk7Cit9CitgOworY29uc3QgdHJpdmlhbEZzU3JjID0gYAordm9pZCBt
YWluKCkKK3sKKyAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAsMSwwLDEpOworfQorYDsKK2NvbnN0
IHRyaXZpYWxWc01ydFNyYzEwMCA9IGAKK3ZvaWQgbWFpbigpCit7CisgICAgZ2xfUG9zaXRpb24g
PSB2ZWM0KDAsMCwwLDEpOworfQorYDsKK2NvbnN0IHRyaXZpYWxGc01ydFNyYzEwMCA9IGAKKyNl
eHRlbnNpb24gR0xfRVhUX2RyYXdfYnVmZmVycyA6IHJlcXVpcmUKK3ByZWNpc2lvbiBtZWRpdW1w
IGZsb2F0Owordm9pZCBtYWluKCkKK3sKKyAgICBnbF9GcmFnRGF0YVswXSA9IHZlYzQoMSwgMCwg
MCwgMSk7CisgICAgZ2xfRnJhZ0RhdGFbMV0gPSB2ZWM0KDAsIDEsIDAsIDEpOworfQorYDsKK2Nv
bnN0IHRyaXZpYWxWc01ydFNyYzMwMCA9IGAjdmVyc2lvbiAzMDAgZXMKK3ZvaWQgbWFpbigpCit7
CisgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDEpOworfQorYDsKK2NvbnN0IHRyaXZpYWxG
c01ydFNyYzMwMCA9IGAjdmVyc2lvbiAzMDAgZXMKK3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0Owor
bGF5b3V0KGxvY2F0aW9uID0gMCkgb3V0IHZlYzQgb19jb2xvcjA7CitsYXlvdXQobG9jYXRpb24g
PSAxKSBvdXQgdmVjNCBvX2NvbG9yMTsKK3ZvaWQgbWFpbigpCit7CisgICAgb19jb2xvcjAgPSB2
ZWM0KDEsIDAsIDAsIDEpOworICAgIG9fY29sb3IxID0gdmVjNCgwLCAxLCAwLCAxKTsKK30KK2A7
CisKK2Z1bmN0aW9uIHRlc3RFeHRGbG9hdEJsZW5kKGludGVybmFsRm9ybWF0KSB7CisgICAgY29u
c3Qgc2hvdWxkQmxlbmQgPSBnbC5nZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCkuaW5kZXhPZignRVhU
X2Zsb2F0X2JsZW5kJykgIT0gLTE7CisKKyAgICBjb25zdCBwcm9nID0gd3R1LnNldHVwUHJvZ3Jh
bShnbCwgW3RyaXZpYWxWc1NyYywgdHJpdmlhbEZzU3JjXSk7CisgICAgZ2wudXNlUHJvZ3JhbShw
cm9nKTsKKworICAgIGNvbnN0IHRleCA9IGdsLmNyZWF0ZVRleHR1cmUoKTsKKyAgICBnbC5iaW5k
VGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXgpOworICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVS
RV8yRCwgMCwgaW50ZXJuYWxGb3JtYXQsIDEsIDEsIDAsIGdsLlJHQkEsIGdsLkZMT0FULCBudWxs
KTsKKworICAgIGNvbnN0IGZiID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICBnbC5iaW5k
RnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIGZiKTsKKyAgICBnbC5mcmFtZWJ1ZmZlclRleHR1
cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlRFWFRVUkVfMkQs
IHRleCwgMCk7CisgICAgc2hvdWxkQmUoJ2dsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJB
TUVCVUZGRVIpJywgJ2dsLkZSQU1FQlVGRkVSX0NPTVBMRVRFJyk7CisKKyAgICBnbC5kaXNhYmxl
KGdsLkJMRU5EKTsKKyAgICBnbC5kcmF3QXJyYXlzKGdsLlBPSU5UUywgMCwgMSk7CisgICAgd3R1
LmdsRXJyb3JTaG91bGRCZShnbCwgMCwgJ0Zsb2F0MzIgZHJhdyB0YXJnZXQgd2l0aG91dCBibGVu
ZGluZycpOworCisgICAgZ2wuZW5hYmxlKGdsLkJMRU5EKTsKKyAgICBnbC5kcmF3QXJyYXlzKGds
LlBPSU5UUywgMCwgMSk7CisgICAgd3R1LmdsRXJyb3JTaG91bGRCZShnbCwgc2hvdWxkQmxlbmQg
PyAwIDogZ2wuSU5WQUxJRF9PUEVSQVRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAnRmxv
YXQzMiBibGVuZGluZyBpcyAnICsgKHNob3VsZEJsZW5kID8gJycgOiAnbm90ICcpICsgJ2FsbG93
ZWQgJyk7CisKKyAgICBnbC5kZWxldGVGcmFtZWJ1ZmZlcihmYik7CisgICAgZ2wuZGVsZXRlVGV4
dHVyZSh0ZXgpOworfQorCitmdW5jdGlvbiB0ZXN0RXh0RmxvYXRCbGVuZE1SVEltcGwodmVyc2lv
biwgaW50ZXJuYWxGb3JtYXQsIHNoYWRlcnMsIGF0dGFjaG1lbnRzLCBkcmF3QnVmZmVycykgewor
ICAgIGNvbnN0IHNob3VsZEJsZW5kID0gZ2wuZ2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpLmluZGV4
T2YoJ0VYVF9mbG9hdF9ibGVuZCcpICE9IC0xOworCisgICAgY29uc3QgcHJvZyA9IHd0dS5zZXR1
cFByb2dyYW0oZ2wsIHNoYWRlcnMpOworICAgIGdsLnVzZVByb2dyYW0ocHJvZyk7CisKKyAgICBj
b25zdCB0ZXgxID0gZ2wuY3JlYXRlVGV4dHVyZSgpOworICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRF
WFRVUkVfMkQsIHRleDEpOworICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wu
UkdCQSwgMSwgMSwgMCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgbnVsbCk7CisKKyAgICBj
b25zdCB0ZXgyID0gZ2wuY3JlYXRlVGV4dHVyZSgpOworICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRF
WFRVUkVfMkQsIHRleDIpOworICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wu
UkdCQSwgMSwgMSwgMCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgbnVsbCk7CisKKyAgICBj
b25zdCB0ZXhGMSA9IGdsLmNyZWF0ZVRleHR1cmUoKTsKKyAgICBnbC5iaW5kVGV4dHVyZShnbC5U
RVhUVVJFXzJELCB0ZXhGMSk7CisgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBp
bnRlcm5hbEZvcm1hdCwgMSwgMSwgMCwgZ2wuUkdCQSwgZ2wuRkxPQVQsIG51bGwpOworCisgICAg
Y29uc3QgdGV4RjIgPSBnbC5jcmVhdGVUZXh0dXJlKCk7CisgICAgZ2wuYmluZFRleHR1cmUoZ2wu
VEVYVFVSRV8yRCwgdGV4RjIpOworICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwg
aW50ZXJuYWxGb3JtYXQsIDEsIDEsIDAsIGdsLlJHQkEsIGdsLkZMT0FULCBudWxsKTsKKworICAg
IGNvbnN0IGZiID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICBnbC5iaW5kRnJhbWVidWZm
ZXIoZ2wuRlJBTUVCVUZGRVIsIGZiKTsKKyAgICBnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChnbC5G
UkFNRUJVRkZFUiwgYXR0YWNobWVudHNbMF0sIGdsLlRFWFRVUkVfMkQsIHRleDEsIDApOworICAg
IGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBhdHRhY2htZW50c1sxXSwg
Z2wuVEVYVFVSRV8yRCwgdGV4MiwgMCk7CisgICAgc2hvdWxkQmUoJ2dsLmNoZWNrRnJhbWVidWZm
ZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpJywgJ2dsLkZSQU1FQlVGRkVSX0NPTVBMRVRFJyk7CisK
KyAgICBkcmF3QnVmZmVycyhhdHRhY2htZW50cyk7CisKKyAgICBnbC5lbmFibGUoZ2wuQkxFTkQp
OworCisgICAgZ2wuZHJhd0FycmF5cyhnbC5QT0lOVFMsIDAsIDEpOworICAgIHd0dS5nbEVycm9y
U2hvdWxkQmUoZ2wsIDAsICdObyBGbG9hdDMyIGNvbG9yIGF0dGFjaG1lbnQnKTsKKworICAgIGlm
ICh2ZXJzaW9uIDwgMikgeworICAgICAgICAvLyBFWFRfZHJhd19idWZmZXJzIHJlcXVpcmUgYWxs
IGNvbG9yIGJ1ZmZlcnMgaGF2aW5nIHRoZSBzYW1lIG51bWJlciBvZiBiaXRwbGFuZXMKKyAgICAg
ICAgZ2wuZnJhbWVidWZmZXJUZXh0dXJlMkQoZ2wuRlJBTUVCVUZGRVIsIGF0dGFjaG1lbnRzWzBd
LCBnbC5URVhUVVJFXzJELCB0ZXhGMSwgMCk7CisgICAgICAgIGdsLmZyYW1lYnVmZmVyVGV4dHVy
ZTJEKGdsLkZSQU1FQlVGRkVSLCBhdHRhY2htZW50c1sxXSwgZ2wuVEVYVFVSRV8yRCwgdGV4RjIs
IDApOworICAgICAgICBzaG91bGRCZSgnZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5GUkFN
RUJVRkZFUiknLCAnZ2wuRlJBTUVCVUZGRVJfQ09NUExFVEUnKTsKKyAgICAgICAgZ2wuZHJhd0Fy
cmF5cyhnbC5QT0lOVFMsIDAsIDEpOworICAgICAgICB3dHUuZ2xFcnJvclNob3VsZEJlKGdsLCBz
aG91bGRCbGVuZCA/IDAgOiBnbC5JTlZBTElEX09QRVJBVElPTiwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAnRmxvYXQzMiBibGVuZGluZyBpcyAnICsgKHNob3VsZEJsZW5kID8gJycgOiAn
bm90ICcpICsgJ2FsbG93ZWQgJyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZ2wuZnJhbWVidWZm
ZXJUZXh0dXJlMkQoZ2wuRlJBTUVCVUZGRVIsIGF0dGFjaG1lbnRzWzBdLCBnbC5URVhUVVJFXzJE
LCB0ZXhGMSwgMCk7CisgICAgICAgIHNob3VsZEJlKCdnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVz
KGdsLkZSQU1FQlVGRkVSKScsICdnbC5GUkFNRUJVRkZFUl9DT01QTEVURScpOworICAgICAgICBn
bC5kcmF3QXJyYXlzKGdsLlBPSU5UUywgMCwgMSk7CisgICAgICAgIHd0dS5nbEVycm9yU2hvdWxk
QmUoZ2wsIHNob3VsZEJsZW5kID8gMCA6IGdsLklOVkFMSURfT1BFUkFUSU9OLAorICAgICAgICAg
ICAgICAgICAgICAgICAgICAgICdGbG9hdDMyIGJsZW5kaW5nIGlzICcgKyAoc2hvdWxkQmxlbmQg
PyAnJyA6ICdub3QgJykgKyAnYWxsb3dlZCAnKTsKKworICAgICAgICBnbC5mcmFtZWJ1ZmZlclRl
eHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgYXR0YWNobWVudHNbMV0sIGdsLlRFWFRVUkVfMkQsIHRl
eEYyLCAwKTsKKyAgICAgICAgc2hvdWxkQmUoJ2dsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wu
RlJBTUVCVUZGRVIpJywgJ2dsLkZSQU1FQlVGRkVSX0NPTVBMRVRFJyk7CisgICAgICAgIGdsLmRy
YXdBcnJheXMoZ2wuUE9JTlRTLCAwLCAxKTsKKyAgICAgICAgd3R1LmdsRXJyb3JTaG91bGRCZShn
bCwgc2hvdWxkQmxlbmQgPyAwIDogZ2wuSU5WQUxJRF9PUEVSQVRJT04sCisgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgJ0Zsb2F0MzIgYmxlbmRpbmcgaXMgJyArIChzaG91bGRCbGVuZCA/ICcn
IDogJ25vdCAnKSArICdhbGxvd2VkICcpOworCisgICAgICAgIGdsLmZyYW1lYnVmZmVyVGV4dHVy
ZTJEKGdsLkZSQU1FQlVGRkVSLCBhdHRhY2htZW50c1swXSwgZ2wuVEVYVFVSRV8yRCwgdGV4MSwg
MCk7CisgICAgICAgIHNob3VsZEJlKCdnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1F
QlVGRkVSKScsICdnbC5GUkFNRUJVRkZFUl9DT01QTEVURScpOworICAgICAgICBnbC5kcmF3QXJy
YXlzKGdsLlBPSU5UUywgMCwgMSk7CisgICAgICAgIHd0dS5nbEVycm9yU2hvdWxkQmUoZ2wsIHNo
b3VsZEJsZW5kID8gMCA6IGdsLklOVkFMSURfT1BFUkFUSU9OLAorICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICdGbG9hdDMyIGJsZW5kaW5nIGlzICcgKyAoc2hvdWxkQmxlbmQgPyAnJyA6ICdu
b3QgJykgKyAnYWxsb3dlZCAnKTsKKworICAgICAgICBkcmF3QnVmZmVycyhbYXR0YWNobWVudHNb
MF1dKTsKKyAgICAgICAgc2hvdWxkQmUoJ2dsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wuRlJB
TUVCVUZGRVIpJywgJ2dsLkZSQU1FQlVGRkVSX0NPTVBMRVRFJyk7CisKKyAgICAgICAgZ2wuZHJh
d0FycmF5cyhnbC5QT0lOVFMsIDAsIDEpOworICAgICAgICB3dHUuZ2xFcnJvclNob3VsZEJlKGds
LCAwLCAnRmxvYXQzMiBjb2xvciBhdHRhY2htZW50IGRyYXcgYnVmZmVyIGlzIG5vdCBlbmFibGVk
Jyk7CisKKyAgICAgICAgZHJhd0J1ZmZlcnMoYXR0YWNobWVudHMpOworICAgICAgICBnbC5mcmFt
ZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgYXR0YWNobWVudHNbMV0sIGdsLlRFWFRV
UkVfMkQsIHRleDIsIDApOworICAgICAgICBzaG91bGRCZSgnZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0
YXR1cyhnbC5GUkFNRUJVRkZFUiknLCAnZ2wuRlJBTUVCVUZGRVJfQ09NUExFVEUnKTsKKworICAg
ICAgICBnbC5kcmF3QXJyYXlzKGdsLlBPSU5UUywgMCwgMSk7CisgICAgICAgIHd0dS5nbEVycm9y
U2hvdWxkQmUoZ2wsIDAsICdObyBGbG9hdDMyIGNvbG9yIGF0dGFjaG1lbnQnKTsKKyAgICB9CisK
KyAgICBnbC5kZWxldGVGcmFtZWJ1ZmZlcihmYik7CisgICAgZ2wuZGVsZXRlVGV4dHVyZSh0ZXgx
KTsKKyAgICBnbC5kZWxldGVUZXh0dXJlKHRleDIpOworICAgIGdsLmRlbGV0ZVRleHR1cmUodGV4
RjEpOworICAgIGdsLmRlbGV0ZVRleHR1cmUodGV4RjIpOworfQorCitmdW5jdGlvbiB0ZXN0RXh0
RmxvYXRCbGVuZE1SVCh2ZXJzaW9uLCBkcmF3QnVmZmVyc0V4dCkgeworICAgIGlmICh2ZXJzaW9u
IDwgMikgeworICAgICAgICBpZiAoIWRyYXdCdWZmZXJzRXh0KSByZXR1cm47CisgICAgICAgIHRl
c3RFeHRGbG9hdEJsZW5kTVJUSW1wbCgKKyAgICAgICAgICAgIHZlcnNpb24sCisgICAgICAgICAg
ICBnbC5SR0JBLAorICAgICAgICAgICAgW3RyaXZpYWxWc01ydFNyYzEwMCwgdHJpdmlhbEZzTXJ0
U3JjMTAwXSwKKyAgICAgICAgICAgIFtkcmF3QnVmZmVyc0V4dC5DT0xPUl9BVFRBQ0hNRU5UMF9X
RUJHTCwgZHJhd0J1ZmZlcnNFeHQuQ09MT1JfQVRUQUNITUVOVDFfV0VCR0xdLAorICAgICAgICAg
ICAgZHJhd0J1ZmZlcnNFeHQuZHJhd0J1ZmZlcnNXRUJHTC5iaW5kKGRyYXdCdWZmZXJzRXh0KQor
ICAgICAgICApOworICAgIH0gZWxzZSB7CisgICAgICAgIHRlc3RFeHRGbG9hdEJsZW5kTVJUSW1w
bCgKKyAgICAgICAgICAgIHZlcnNpb24sCisgICAgICAgICAgICBnbC5SR0JBMzJGLAorICAgICAg
ICAgICAgW3RyaXZpYWxWc01ydFNyYzMwMCwgdHJpdmlhbEZzTXJ0U3JjMzAwXSwKKyAgICAgICAg
ICAgIFtnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuQ09MT1JfQVRUQUNITUVOVDFdLAorICAgICAg
ICAgICAgZ2wuZHJhd0J1ZmZlcnMuYmluZChnbCkKKyAgICAgICAgKTsKKyAgICB9Cit9CisKK2Z1
bmN0aW9uIHRlc3RFeHRGbG9hdEJsZW5kTm9uRmxvYXQzMlR5cGVJbXBsKGludGVybmFsRm9ybWF0
LCBmb3JtYXRzKSB7CisgICAgY29uc3Qgc2hvdWxkQmxlbmQgPSBnbC5nZXRTdXBwb3J0ZWRFeHRl
bnNpb25zKCkuaW5kZXhPZignRVhUX2Zsb2F0X2JsZW5kJykgIT0gLTE7CisKKyAgICBjb25zdCBw
cm9nID0gd3R1LnNldHVwUHJvZ3JhbShnbCwgW3RyaXZpYWxWc1NyYywgdHJpdmlhbEZzU3JjXSk7
CisgICAgZ2wudXNlUHJvZ3JhbShwcm9nKTsKKworICAgIGdsLmVuYWJsZShnbC5CTEVORCk7CisK
KyAgICBjb25zdCB0ZXggPSBnbC5jcmVhdGVUZXh0dXJlKCk7CisgICAgZ2wuYmluZFRleHR1cmUo
Z2wuVEVYVFVSRV8yRCwgdGV4KTsKKyAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAs
IGludGVybmFsRm9ybWF0LCAxLCAxLCAwLCBnbC5SR0JBLCBnbC5GTE9BVCwgbnVsbCk7CisKKyAg
ICBjb25zdCBmYiA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAgZ2wuYmluZEZyYW1lYnVm
ZmVyKGdsLkZSQU1FQlVGRkVSLCBmYik7CisgICAgZ2wuZnJhbWVidWZmZXJUZXh0dXJlMkQoZ2wu
RlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFDSE1FTlQwLCBnbC5URVhUVVJFXzJELCB0ZXgsIDAp
OworICAgIHNob3VsZEJlKCdnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVGRkVS
KScsICdnbC5GUkFNRUJVRkZFUl9DT01QTEVURScpOworCisgICAgZ2wuZHJhd0FycmF5cyhnbC5Q
T0lOVFMsIDAsIDEpOworICAgIHd0dS5nbEVycm9yU2hvdWxkQmUoZ2wsIHNob3VsZEJsZW5kID8g
MCA6IGdsLklOVkFMSURfT1BFUkFUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgJ0Zsb2F0
MzIgYmxlbmRpbmcgaXMgJyArIChzaG91bGRCbGVuZCA/ICcnIDogJ25vdCAnKSArICdhbGxvd2Vk
ICcpOworCisgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCAxLCAx
LCAwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBudWxsKTsKKyAgICBnbC5kcmF3QXJyYXlz
KGdsLlBPSU5UUywgMCwgMSk7CisgICAgd3R1LmdsRXJyb3JTaG91bGRCZShnbCwgMCwgJ1VOU0lH
TkVEX0JZVEUgc2hvdWxkIGJsZW5kIGFueXdheScpOworCisgICAgZm9yIChsZXQgaSA9IDAsIGxl
biA9IGZvcm1hdHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgZ2wudGV4SW1hZ2Uy
RChnbC5URVhUVVJFXzJELCAwLCBmb3JtYXRzW2ldWzBdLCAxLCAxLCAwLCBmb3JtYXRzW2ldWzFd
LCBmb3JtYXRzW2ldWzJdLCBudWxsKTsKKyAgICAgICAgZ2wuZHJhd0FycmF5cyhnbC5QT0lOVFMs
IDAsIDEpOworICAgICAgICB3dHUuZ2xFcnJvclNob3VsZEJlKGdsLCAwLCAnQW55IG90aGVyIGZs
b2F0IHR5cGUgd2hpY2ggaXMgbm90IDMyLWJpdC1GbG9hdCBzaG91bGQgYmxlbmQgYW55d2F5Jyk7
CisgICAgfQorCisgICAgZ2wuZGVsZXRlRnJhbWVidWZmZXIoZmIpOworICAgIGdsLmRlbGV0ZVRl
eHR1cmUodGV4KTsKK30KKworZnVuY3Rpb24gdGVzdEV4dEZsb2F0QmxlbmROb25GbG9hdDMyVHlw
ZSh2ZXJzaW9uLCBvZXNUZXh0dXJlSGFsZkZsb2F0KSB7CisgICAgaWYgKHZlcnNpb24gPCAyKSB7
CisgICAgICAgIGlmICghb2VzVGV4dHVyZUhhbGZGbG9hdCkgcmV0dXJuOworICAgICAgICBjb25z
dCBmb3JtYXRzID0gWworICAgICAgICAgICAgW2dsLlJHQkEsIGdsLlJHQkEsIG9lc1RleHR1cmVI
YWxmRmxvYXQuSEFMRl9GTE9BVF9PRVNdCisgICAgICAgIF07CisgICAgICAgIHRlc3RFeHRGbG9h
dEJsZW5kTm9uRmxvYXQzMlR5cGVJbXBsKGdsLlJHQkEsIGZvcm1hdHMpOworICAgIH0gZWxzZSB7
CisgICAgICAgIGNvbnN0IGZvcm1hdHMgPSBbCisgICAgICAgICAgICBbZ2wuUkdCQTE2RiwgZ2wu
UkdCQSwgZ2wuSEFMRl9GTE9BVF0sCisgICAgICAgICAgICBbZ2wuUkdCQTE2RiwgZ2wuUkdCQSwg
Z2wuRkxPQVRdLAorICAgICAgICAgICAgW2dsLlJHMTZGLCBnbC5SRywgZ2wuRkxPQVRdLAorICAg
ICAgICAgICAgW2dsLlIxNkYsIGdsLlJFRCwgZ2wuRkxPQVRdLAorICAgICAgICAgICAgW2dsLlIx
MUZfRzExRl9CMTBGLCBnbC5SR0IsIGdsLkZMT0FUXQorICAgICAgICBdOworICAgICAgICB0ZXN0
RXh0RmxvYXRCbGVuZE5vbkZsb2F0MzJUeXBlSW1wbChnbC5SR0JBMzJGLCBmb3JtYXRzKTsKKyAg
ICB9Cit9CisKKy8qCitDb3B5cmlnaHQgKGMpIDIwMTkgVGhlIEtocm9ub3MgR3JvdXAgSW5jLgor
VXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vu
c2UgdGhhdCBjYW4gYmUKK2ZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlLgorKi8KZGlmZiAt
LWdpdCBhL0xheW91dFRlc3RzL3dlYmdsL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2pzL3dl
YmdsLXRlc3QtdXRpbHMuanMgYi9MYXlvdXRUZXN0cy93ZWJnbC9yZXNvdXJjZXMvd2ViZ2xfdGVz
dF9maWxlcy9qcy93ZWJnbC10ZXN0LXV0aWxzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4
IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNhNjA1ZGZiNjAxYWFk
ODY3MGYyMzk4N2U3NDNiZjI3YmFkZGM2OTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0
cy93ZWJnbC9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9qcy93ZWJnbC10ZXN0LXV0aWxzLmpz
CkBAIC0wLDAgKzEsMzU0MCBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxOSBUaGUgS2hyb25vcyBH
cm91cCBJbmMuCitVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQt
c3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUu
CisqLwordmFyIFdlYkdMVGVzdFV0aWxzID0gKGZ1bmN0aW9uKCkgeworInVzZSBzdHJpY3QiOwor
CisvKioKKyAqIFdyYXBwZWQgbG9nZ2luZyBmdW5jdGlvbi4KKyAqIEBwYXJhbSB7c3RyaW5nfSBt
c2cgVGhlIG1lc3NhZ2UgdG8gbG9nLgorICovCit2YXIgbG9nID0gZnVuY3Rpb24obXNnKSB7Cisg
IGJ1ZmZlcmVkTG9nVG9Db25zb2xlKG1zZyk7Cit9OworCisvKioKKyAqIFdyYXBwZWQgbG9nZ2lu
ZyBmdW5jdGlvbi4KKyAqIEBwYXJhbSB7c3RyaW5nfSBtc2cgVGhlIG1lc3NhZ2UgdG8gbG9nLgor
ICovCit2YXIgZXJyb3IgPSBmdW5jdGlvbihtc2cpIHsKKyAgLy8gRm9yIHRoZSB0aW1lIGJlaW5n
LCBkaXZlcnRpbmcgdGhpcyB0byB3aW5kb3cuY29uc29sZS5sb2cgcmF0aGVyCisgIC8vIHRoYW4g
d2luZG93LmNvbnNvbGUuZXJyb3IuIElmIGFueW9uZSBjYXJlcyBlbm91Z2ggdGhleSBjYW4KKyAg
Ly8gZ2VuZXJhbGl6ZSB0aGUgbWVjaGFuaXNtIGluIGpzLXRlc3QtcHJlLmpzLgorICBsb2cobXNn
KTsKK307CisKKy8qKgorICogVHVybiBvZmYgYWxsIGxvZ2dpbmcuCisgKi8KK3ZhciBsb2dnaW5n
T2ZmID0gZnVuY3Rpb24oKSB7CisgIGxvZyA9IGZ1bmN0aW9uKCkge307CisgIGVycm9yID0gZnVu
Y3Rpb24oKSB7fTsKK307CisKK2NvbnN0IEVOVU1fTkFNRV9SRUdFWCA9IFJlZ0V4cCgnW0EtWl1b
QS1aMC05X10qJyk7Citjb25zdCBFTlVNX05BTUVfQllfVkFMVUUgPSB7fTsKK2NvbnN0IEVOVU1f
TkFNRV9QUk9UT1RZUEVTID0gbmV3IE1hcCgpOworCisvKioKKyAqIENvbnZlcnRzIGEgV2ViR0wg
ZW51bSB0byBhIHN0cmluZy4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wg
VGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge251bWJlcn0gdmFs
dWUgVGhlIGVudW0gdmFsdWUuCisgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBlbnVtIGFzIGEgc3Ry
aW5nLgorICovCit2YXIgZ2xFbnVtVG9TdHJpbmcgPSBmdW5jdGlvbihnbE9yRXh0LCB2YWx1ZSkg
eworICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkKKyAgICB0aHJvdyBuZXcgRXJyb3IoJ2dsRW51
bVRvU3RyaW5nOiBgdmFsdWVgIG11c3Qgbm90IGJlIHVuZGVmaW5lZCcpOworCisgIGNvbnN0IHBy
b3RvID0gZ2xPckV4dC5fX3Byb3RvX187CisgIGlmICghRU5VTV9OQU1FX1BST1RPVFlQRVMuaGFz
KHByb3RvKSkgeworICAgIEVOVU1fTkFNRV9QUk9UT1RZUEVTLnNldChwcm90bywgdHJ1ZSk7CisK
KyAgICBmb3IgKGNvbnN0IGsgaW4gcHJvdG8pIHsKKyAgICAgIGlmICghRU5VTV9OQU1FX1JFR0VY
LnRlc3QoaykpIGNvbnRpbnVlOworCisgICAgICBjb25zdCB2ID0gZ2xPckV4dFtrXTsKKyAgICAg
IGlmIChFTlVNX05BTUVfQllfVkFMVUVbdl0gPT09IHVuZGVmaW5lZCkgeworICAgICAgICBFTlVN
X05BTUVfQllfVkFMVUVbdl0gPSBrOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgRU5VTV9OQU1F
X0JZX1ZBTFVFW3ZdICs9ICcvJyArIGs7CisgICAgICB9CisgICAgfQorICB9CisKKyAgY29uc3Qg
a2V5ID0gRU5VTV9OQU1FX0JZX1ZBTFVFW3ZhbHVlXTsKKyAgaWYgKGtleSAhPT0gdW5kZWZpbmVk
KSByZXR1cm4ga2V5OworCisgIHJldHVybiAiMHgiICsgTnVtYmVyKHZhbHVlKS50b1N0cmluZygx
Nik7Cit9OworCit2YXIgbGFzdEVycm9yID0gIiI7CisKKy8qKgorICogUmV0dXJucyB0aGUgbGFz
dCBjb21waWxlci9saW5rZXIgZXJyb3IuCisgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBsYXN0IGNv
bXBpbGVyL2xpbmtlciBlcnJvci4KKyAqLwordmFyIGdldExhc3RFcnJvciA9IGZ1bmN0aW9uKCkg
eworICByZXR1cm4gbGFzdEVycm9yOworfTsKKworLyoqCisgKiBXaGV0aGVyIGEgaGF5c3RhY2sg
ZW5kcyB3aXRoIGEgbmVlZGxlLgorICogQHBhcmFtIHtzdHJpbmd9IGhheXN0YWNrIFN0cmluZyB0
byBzZWFyY2gKKyAqIEBwYXJhbSB7c3RyaW5nfSBuZWVkbGUgU3RyaW5nIHRvIHNlYXJjaCBmb3Iu
CisgKiBAcGFyYW0ge2Jvb2xlYW59IFRydWUgaWYgaGF5c3RhY2sgZW5kcyB3aXRoIG5lZWRsZS4K
KyAqLwordmFyIGVuZHNXaXRoID0gZnVuY3Rpb24oaGF5c3RhY2ssIG5lZWRsZSkgeworICByZXR1
cm4gaGF5c3RhY2suc3Vic3RyKGhheXN0YWNrLmxlbmd0aCAtIG5lZWRsZS5sZW5ndGgpID09PSBu
ZWVkbGU7Cit9OworCisvKioKKyAqIFdoZXRoZXIgYSBoYXlzdGFjayBzdGFydHMgd2l0aCBhIG5l
ZWRsZS4KKyAqIEBwYXJhbSB7c3RyaW5nfSBoYXlzdGFjayBTdHJpbmcgdG8gc2VhcmNoCisgKiBA
cGFyYW0ge3N0cmluZ30gbmVlZGxlIFN0cmluZyB0byBzZWFyY2ggZm9yLgorICogQHBhcmFtIHti
b29sZWFufSBUcnVlIGlmIGhheXN0YWNrIHN0YXJ0cyB3aXRoIG5lZWRsZS4KKyAqLwordmFyIHN0
YXJ0c1dpdGggPSBmdW5jdGlvbihoYXlzdGFjaywgbmVlZGxlKSB7CisgIHJldHVybiBoYXlzdGFj
ay5zdWJzdHIoMCwgbmVlZGxlLmxlbmd0aCkgPT09IG5lZWRsZTsKK307CisKKy8qKgorICogQSB2
ZXJ0ZXggc2hhZGVyIGZvciBhIHNpbmdsZSB0ZXh0dXJlLgorICogQHR5cGUge3N0cmluZ30KKyAq
LwordmFyIHNpbXBsZVRleHR1cmVWZXJ0ZXhTaGFkZXIgPSBbCisgICdhdHRyaWJ1dGUgdmVjNCB2
UG9zaXRpb247JywKKyAgJ2F0dHJpYnV0ZSB2ZWMyIHRleENvb3JkMDsnLAorICAndmFyeWluZyB2
ZWMyIHRleENvb3JkOycsCisgICd2b2lkIG1haW4oKSB7JywKKyAgJyAgICBnbF9Qb3NpdGlvbiA9
IHZQb3NpdGlvbjsnLAorICAnICAgIHRleENvb3JkID0gdGV4Q29vcmQwOycsCisgICd9J10uam9p
bignXG4nKTsKKworLyoqCisgKiBBIHZlcnRleCBzaGFkZXIgZm9yIGEgc2luZ2xlIHRleHR1cmUu
CisgKiBAdHlwZSB7c3RyaW5nfQorICovCit2YXIgc2ltcGxlVGV4dHVyZVZlcnRleFNoYWRlckVT
U0wzMDAgPSBbCisgICcjdmVyc2lvbiAzMDAgZXMnLAorICAnbGF5b3V0KGxvY2F0aW9uPTApIGlu
IHZlYzQgdlBvc2l0aW9uOycsCisgICdsYXlvdXQobG9jYXRpb249MSkgaW4gdmVjMiB0ZXhDb29y
ZDA7JywKKyAgJ291dCB2ZWMyIHRleENvb3JkOycsCisgICd2b2lkIG1haW4oKSB7JywKKyAgJyAg
ICBnbF9Qb3NpdGlvbiA9IHZQb3NpdGlvbjsnLAorICAnICAgIHRleENvb3JkID0gdGV4Q29vcmQw
OycsCisgICd9J10uam9pbignXG4nKTsKKworLyoqCisgKiBBIGZyYWdtZW50IHNoYWRlciBmb3Ig
YSBzaW5nbGUgdGV4dHVyZS4KKyAqIEB0eXBlIHtzdHJpbmd9CisgKi8KK3ZhciBzaW1wbGVUZXh0
dXJlRnJhZ21lbnRTaGFkZXIgPSBbCisgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLAorICAn
dW5pZm9ybSBzYW1wbGVyMkQgdGV4OycsCisgICd2YXJ5aW5nIHZlYzIgdGV4Q29vcmQ7JywKKyAg
J3ZvaWQgbWFpbigpIHsnLAorICAnICAgIGdsX0ZyYWdEYXRhWzBdID0gdGV4dHVyZTJEKHRleCwg
dGV4Q29vcmQpOycsCisgICd9J10uam9pbignXG4nKTsKKworLyoqCisgKiBBIGZyYWdtZW50IHNo
YWRlciBmb3IgYSBzaW5nbGUgdGV4dHVyZS4KKyAqIEB0eXBlIHtzdHJpbmd9CisgKi8KK3ZhciBz
aW1wbGVUZXh0dXJlRnJhZ21lbnRTaGFkZXJFU1NMMzAwID0gWworICAnI3ZlcnNpb24gMzAwIGVz
JywKKyAgJ3ByZWNpc2lvbiBoaWdocCBmbG9hdDsnLAorICAndW5pZm9ybSBoaWdocCBzYW1wbGVy
MkQgdGV4OycsCisgICdpbiB2ZWMyIHRleENvb3JkOycsCisgICdvdXQgdmVjNCBvdXRfY29sb3I7
JywKKyAgJ3ZvaWQgbWFpbigpIHsnLAorICAnICAgIG91dF9jb2xvciA9IHRleHR1cmUodGV4LCB0
ZXhDb29yZCk7JywKKyAgJ30nXS5qb2luKCdcbicpOworCisvKioKKyAqIEEgZnJhZ21lbnQgc2hh
ZGVyIGZvciBhIHNpbmdsZSB0ZXh0dXJlIHdpdGggaGlnaCBwcmVjaXNpb24uCisgKiBAdHlwZSB7
c3RyaW5nfQorICovCit2YXIgc2ltcGxlSGlnaFByZWNpc2lvblRleHR1cmVGcmFnbWVudFNoYWRl
ciA9IFsKKyAgJ3ByZWNpc2lvbiBoaWdocCBmbG9hdDsnLAorICAndW5pZm9ybSBoaWdocCBzYW1w
bGVyMkQgdGV4OycsCisgICd2YXJ5aW5nIHZlYzIgdGV4Q29vcmQ7JywKKyAgJ3ZvaWQgbWFpbigp
IHsnLAorICAnICAgIGdsX0ZyYWdEYXRhWzBdID0gdGV4dHVyZTJEKHRleCwgdGV4Q29vcmQpOycs
CisgICd9J10uam9pbignXG4nKTsKKworLyoqCisgKiBBIGZyYWdtZW50IHNoYWRlciBmb3IgYSBz
aW5nbGUgY3ViZSBtYXAgdGV4dHVyZS4KKyAqIEB0eXBlIHtzdHJpbmd9CisgKi8KK3ZhciBzaW1w
bGVDdWJlTWFwVGV4dHVyZUZyYWdtZW50U2hhZGVyID0gWworICAncHJlY2lzaW9uIG1lZGl1bXAg
ZmxvYXQ7JywKKyAgJ3VuaWZvcm0gc2FtcGxlckN1YmUgdGV4OycsCisgICd1bmlmb3JtIGhpZ2hw
IGludCBmYWNlOycsCisgICd2YXJ5aW5nIHZlYzIgdGV4Q29vcmQ7JywKKyAgJ3ZvaWQgbWFpbigp
IHsnLAorICAvLyBUcmFuc2Zvcm0gWzAsIDFdIC0+IFstMSwgMV0KKyAgJyAgICB2ZWMyIHRleEMy
ID0gKHRleENvb3JkICogMi4pIC0gMS47JywKKyAgLy8gVHJhbnNmb3JtIDJkIHRleCBjb29yZC4g
dG8gZWFjaCBmYWNlIG9mIFRFWFRVUkVfQ1VCRV9NQVAgY29vcmQuCisgICcgICAgdmVjMyB0ZXhD
dWJlID0gdmVjMygwLiwgMC4sIDAuKTsnLAorICAnICAgIGlmIChmYWNlID09IDM0MDY5KSB7Jywg
ICAgICAgICAvLyBURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gKKyAgJyAgICAgICAgdGV4Q3Vi
ZSA9IHZlYzMoMS4sIC10ZXhDMi55LCAtdGV4QzIueCk7JywKKyAgJyAgICB9IGVsc2UgaWYgKGZh
Y2UgPT0gMzQwNzApIHsnLCAgLy8gVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YCisgICcgICAg
ICAgIHRleEN1YmUgPSB2ZWMzKC0xLiwgLXRleEMyLnksIHRleEMyLngpOycsCisgICcgICAgfSBl
bHNlIGlmIChmYWNlID09IDM0MDcxKSB7JywgIC8vIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJVkVf
WQorICAnICAgICAgICB0ZXhDdWJlID0gdmVjMyh0ZXhDMi54LCAxLiwgdGV4QzIueSk7JywKKyAg
JyAgICB9IGVsc2UgaWYgKGZhY2UgPT0gMzQwNzIpIHsnLCAgLy8gVEVYVFVSRV9DVUJFX01BUF9O
RUdBVElWRV9ZCisgICcgICAgICAgIHRleEN1YmUgPSB2ZWMzKHRleEMyLngsIC0xLiwgLXRleEMy
LnkpOycsCisgICcgICAgfSBlbHNlIGlmIChmYWNlID09IDM0MDczKSB7JywgIC8vIFRFWFRVUkVf
Q1VCRV9NQVBfUE9TSVRJVkVfWgorICAnICAgICAgICB0ZXhDdWJlID0gdmVjMyh0ZXhDMi54LCAt
dGV4QzIueSwgMS4pOycsCisgICcgICAgfSBlbHNlIGlmIChmYWNlID09IDM0MDc0KSB7JywgIC8v
IFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWgorICAnICAgICAgICB0ZXhDdWJlID0gdmVjMygt
dGV4QzIueCwgLXRleEMyLnksIC0xLik7JywKKyAgJyAgICB9JywKKyAgJyAgICBnbF9GcmFnRGF0
YVswXSA9IHRleHR1cmVDdWJlKHRleCwgdGV4Q3ViZSk7JywKKyAgJ30nXS5qb2luKCdcbicpOwor
CisvKioKKyAqIEEgdmVydGV4IHNoYWRlciBmb3IgYSBzaW5nbGUgdGV4dHVyZS4KKyAqIEB0eXBl
IHtzdHJpbmd9CisgKi8KK3ZhciBub1RleENvb3JkVGV4dHVyZVZlcnRleFNoYWRlciA9IFsKKyAg
J2F0dHJpYnV0ZSB2ZWM0IHZQb3NpdGlvbjsnLAorICAndmFyeWluZyB2ZWMyIHRleENvb3JkOycs
CisgICd2b2lkIG1haW4oKSB7JywKKyAgJyAgICBnbF9Qb3NpdGlvbiA9IHZQb3NpdGlvbjsnLAor
ICAnICAgIHRleENvb3JkID0gdlBvc2l0aW9uLnh5ICogMC41ICsgMC41OycsCisgICd9J10uam9p
bignXG4nKTsKKworLyoqCisgKiBBIHZlcnRleCBzaGFkZXIgZm9yIGEgdW5pZm9ybSBjb2xvci4K
KyAqIEB0eXBlIHtzdHJpbmd9CisgKi8KK3ZhciBzaW1wbGVWZXJ0ZXhTaGFkZXIgPSBbCisgICdh
dHRyaWJ1dGUgdmVjNCB2UG9zaXRpb247JywKKyAgJ3ZvaWQgbWFpbigpIHsnLAorICAnICAgIGds
X1Bvc2l0aW9uID0gdlBvc2l0aW9uOycsCisgICd9J10uam9pbignXG4nKTsKKworLyoqCisgKiBB
IHZlcnRleCBzaGFkZXIgZm9yIGEgdW5pZm9ybSBjb2xvci4KKyAqIEB0eXBlIHtzdHJpbmd9Cisg
Ki8KK3ZhciBzaW1wbGVWZXJ0ZXhTaGFkZXJFU1NMMzAwID0gWworICAnI3ZlcnNpb24gMzAwIGVz
JywKKyAgJ2luIHZlYzQgdlBvc2l0aW9uOycsCisgICd2b2lkIG1haW4oKSB7JywKKyAgJyAgICBn
bF9Qb3NpdGlvbiA9IHZQb3NpdGlvbjsnLAorICAnfSddLmpvaW4oJ1xuJyk7CisKKy8qKgorICog
QSBmcmFnbWVudCBzaGFkZXIgZm9yIGEgdW5pZm9ybSBjb2xvci4KKyAqIEB0eXBlIHtzdHJpbmd9
CisgKi8KK3ZhciBzaW1wbGVDb2xvckZyYWdtZW50U2hhZGVyID0gWworICAncHJlY2lzaW9uIG1l
ZGl1bXAgZmxvYXQ7JywKKyAgJ3VuaWZvcm0gdmVjNCB1X2NvbG9yOycsCisgICd2b2lkIG1haW4o
KSB7JywKKyAgJyAgICBnbF9GcmFnRGF0YVswXSA9IHVfY29sb3I7JywKKyAgJ30nXS5qb2luKCdc
bicpOworCisvKioKKyAqIEEgZnJhZ21lbnQgc2hhZGVyIGZvciBhIHVuaWZvcm0gY29sb3IuCisg
KiBAdHlwZSB7c3RyaW5nfQorICovCit2YXIgc2ltcGxlQ29sb3JGcmFnbWVudFNoYWRlckVTU0wz
MDAgPSBbCisgICcjdmVyc2lvbiAzMDAgZXMnLAorICAncHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7
JywKKyAgJ291dCB2ZWM0IG91dF9jb2xvcjsnLAorICAndW5pZm9ybSB2ZWM0IHVfY29sb3I7JywK
KyAgJ3ZvaWQgbWFpbigpIHsnLAorICAnICAgIG91dF9jb2xvciA9IHVfY29sb3I7JywKKyAgJ30n
XS5qb2luKCdcbicpOworCisvKioKKyAqIEEgdmVydGV4IHNoYWRlciBmb3IgdmVydGV4IGNvbG9y
cy4KKyAqIEB0eXBlIHtzdHJpbmd9CisgKi8KK3ZhciBzaW1wbGVWZXJ0ZXhDb2xvclZlcnRleFNo
YWRlciA9IFsKKyAgJ2F0dHJpYnV0ZSB2ZWM0IHZQb3NpdGlvbjsnLAorICAnYXR0cmlidXRlIHZl
YzQgYV9jb2xvcjsnLAorICAndmFyeWluZyB2ZWM0IHZfY29sb3I7JywKKyAgJ3ZvaWQgbWFpbigp
IHsnLAorICAnICAgIGdsX1Bvc2l0aW9uID0gdlBvc2l0aW9uOycsCisgICcgICAgdl9jb2xvciA9
IGFfY29sb3I7JywKKyAgJ30nXS5qb2luKCdcbicpOworCisvKioKKyAqIEEgZnJhZ21lbnQgc2hh
ZGVyIGZvciB2ZXJ0ZXggY29sb3JzLgorICogQHR5cGUge3N0cmluZ30KKyAqLwordmFyIHNpbXBs
ZVZlcnRleENvbG9yRnJhZ21lbnRTaGFkZXIgPSBbCisgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9h
dDsnLAorICAndmFyeWluZyB2ZWM0IHZfY29sb3I7JywKKyAgJ3ZvaWQgbWFpbigpIHsnLAorICAn
ICAgIGdsX0ZyYWdEYXRhWzBdID0gdl9jb2xvcjsnLAorICAnfSddLmpvaW4oJ1xuJyk7CisKKy8q
KgorICogQ3JlYXRlcyBhIHByb2dyYW0sIGF0dGFjaGVzIHNoYWRlcnMsIGJpbmRzIGF0dHJpYiBs
b2NhdGlvbnMsIGxpbmtzIHRoZQorICogcHJvZ3JhbSBhbmQgY2FsbHMgdXNlUHJvZ3JhbS4KKyAq
IEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCB0byB1c2UuCisgKiBAcGFyYW0geyFBcnJheS48IVdlYkdMU2hhZGVyfHN0cmluZz59IHNo
YWRlcnMgVGhlIHNoYWRlcnMgdG8KKyAqICAgICAgICBhdHRhY2gsIG9yIHRoZSBzb3VyY2UsIG9y
IHRoZSBpZCBvZiBhIHNjcmlwdCB0byBnZXQKKyAqICAgICAgICB0aGUgc291cmNlIGZyb20uCisg
KiBAcGFyYW0geyFBcnJheS48c3RyaW5nPn0gb3B0X2F0dHJpYnMgVGhlIGF0dHJpYnMgbmFtZXMu
CisgKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gb3B0X2xvY2F0aW9ucyBUaGUgbG9jYXRpb25z
IGZvciB0aGUgYXR0cmlicy4KKyAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0X2xvZ1NoYWRlcnMgV2hl
dGhlciB0byBsb2cgc2hhZGVyIHNvdXJjZS4KKyAqLwordmFyIHNldHVwUHJvZ3JhbSA9IGZ1bmN0
aW9uKAorICAgIGdsLCBzaGFkZXJzLCBvcHRfYXR0cmlicywgb3B0X2xvY2F0aW9ucywgb3B0X2xv
Z1NoYWRlcnMpIHsKKyAgdmFyIHJlYWxTaGFkZXJzID0gW107CisgIHZhciBwcm9ncmFtID0gZ2wu
Y3JlYXRlUHJvZ3JhbSgpOworICB2YXIgc2hhZGVyQ291bnQgPSAwOworICBmb3IgKHZhciBpaSA9
IDA7IGlpIDwgc2hhZGVycy5sZW5ndGg7ICsraWkpIHsKKyAgICB2YXIgc2hhZGVyID0gc2hhZGVy
c1tpaV07CisgICAgdmFyIHNoYWRlclR5cGUgPSB1bmRlZmluZWQ7CisgICAgaWYgKHR5cGVvZiBz
aGFkZXIgPT0gJ3N0cmluZycpIHsKKyAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoc2hhZGVyKTsKKyAgICAgIGlmIChlbGVtZW50KSB7CisgICAgICAgIGlmIChlbGVt
ZW50LnR5cGUgIT0gIngtc2hhZGVyL3gtdmVydGV4IiAmJiBlbGVtZW50LnR5cGUgIT0gIngtc2hh
ZGVyL3gtZnJhZ21lbnQiKQorICAgICAgICAgIHNoYWRlclR5cGUgPSBpaSA/IGdsLkZSQUdNRU5U
X1NIQURFUiA6IGdsLlZFUlRFWF9TSEFERVI7CisgICAgICAgIHNoYWRlciA9IGxvYWRTaGFkZXJG
cm9tU2NyaXB0KGdsLCBzaGFkZXIsIHNoYWRlclR5cGUsIHVuZGVmaW5lZCwgb3B0X2xvZ1NoYWRl
cnMpOworICAgICAgfSBlbHNlIGlmIChlbmRzV2l0aChzaGFkZXIsICIudmVydCIpKSB7CisgICAg
ICAgIHNoYWRlciA9IGxvYWRTaGFkZXJGcm9tRmlsZShnbCwgc2hhZGVyLCBnbC5WRVJURVhfU0hB
REVSLCB1bmRlZmluZWQsIG9wdF9sb2dTaGFkZXJzKTsKKyAgICAgIH0gZWxzZSBpZiAoZW5kc1dp
dGgoc2hhZGVyLCAiLmZyYWciKSkgeworICAgICAgICBzaGFkZXIgPSBsb2FkU2hhZGVyRnJvbUZp
bGUoZ2wsIHNoYWRlciwgZ2wuRlJBR01FTlRfU0hBREVSLCB1bmRlZmluZWQsIG9wdF9sb2dTaGFk
ZXJzKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHNoYWRlciA9IGxvYWRTaGFkZXIoZ2wsIHNo
YWRlciwgaWkgPyBnbC5GUkFHTUVOVF9TSEFERVIgOiBnbC5WRVJURVhfU0hBREVSLCB1bmRlZmlu
ZWQsIG9wdF9sb2dTaGFkZXJzKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKG9wdF9sb2dTaGFk
ZXJzKSB7CisgICAgICB0aHJvdyAnU2hhZGVyIHNvdXJjZSBsb2dnaW5nIHJlcXVlc3RlZCBidXQg
bm8gc2hhZGVyIHNvdXJjZSBwcm92aWRlZCc7CisgICAgfQorICAgIGlmIChzaGFkZXIpIHsKKyAg
ICAgICsrc2hhZGVyQ291bnQ7CisgICAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgc2hhZGVy
KTsKKyAgICB9CisgIH0KKyAgaWYgKHNoYWRlckNvdW50ICE9IDIpIHsKKyAgICBlcnJvcigiRXJy
b3IgaW4gY29tcGlsaW5nIHNoYWRlciIpOworICAgIHJldHVybiBudWxsOworICB9CisgIGlmIChv
cHRfYXR0cmlicykgeworICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCBvcHRfYXR0cmlicy5sZW5n
dGg7ICsraWkpIHsKKyAgICAgIGdsLmJpbmRBdHRyaWJMb2NhdGlvbigKKyAgICAgICAgICBwcm9n
cmFtLAorICAgICAgICAgIG9wdF9sb2NhdGlvbnMgPyBvcHRfbG9jYXRpb25zW2lpXSA6IGlpLAor
ICAgICAgICAgIG9wdF9hdHRyaWJzW2lpXSk7CisgICAgfQorICB9CisgIGdsLmxpbmtQcm9ncmFt
KHByb2dyYW0pOworCisgIC8vIENoZWNrIHRoZSBsaW5rIHN0YXR1cworICB2YXIgbGlua2VkID0g
Z2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUyk7CisgIGlmICgh
bGlua2VkKSB7CisgICAgICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIHRoZSBsaW5rCisg
ICAgICBsYXN0RXJyb3IgPSBnbC5nZXRQcm9ncmFtSW5mb0xvZyAocHJvZ3JhbSk7CisgICAgICBl
cnJvcigiRXJyb3IgaW4gcHJvZ3JhbSBsaW5raW5nOiIgKyBsYXN0RXJyb3IpOworCisgICAgICBn
bC5kZWxldGVQcm9ncmFtKHByb2dyYW0pOworICAgICAgcmV0dXJuIG51bGw7CisgIH0KKworICBn
bC51c2VQcm9ncmFtKHByb2dyYW0pOworICByZXR1cm4gcHJvZ3JhbTsKK307CisKKy8qKgorICog
Q3JlYXRlcyBhIHByb2dyYW0sIGF0dGFjaGVzIHNoYWRlciwgc2V0cyB1cCB0cmFzbmZvcm0gZmVl
ZGJhY2sgdmFyeWluZ3MsCisgKiBiaW5kcyBhdHRyaWIgbG9jYXRpb25zLCBsaW5rcyB0aGUgcHJv
Z3JhbSBhbmQgY2FsbHMgdXNlUHJvZ3JhbS4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29u
dGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0geyFB
cnJheS48IVdlYkdMU2hhZGVyfHN0cmluZz59IHNoYWRlcnMgVGhlIHNoYWRlcnMgdG8KKyAqICAg
ICAgICBhdHRhY2gsIG9yIHRoZSBzb3VyY2UsIG9yIHRoZSBpZCBvZiBhIHNjcmlwdCB0byBnZXQK
KyAqICAgICAgICB0aGUgc291cmNlIGZyb20uCisgKiBAcGFyYW0geyFBcnJheS48c3RyaW5nPn0g
dmFyeWluZ3MgVGhlIHRyYW5zZm9ybSBmZWVkYmFjayB2YXJ5aW5nIG5hbWVzLgorICogQHBhcmFt
IHtudW1iZXJ9IGJ1ZmZlck1vZGUgVGhlIG1vZGUgdXNlZCB0byBjYXB0dXJlIHRoZSB2YXJ5aW5n
IHZhcmlhYmxlcy4KKyAqIEBwYXJhbSB7IUFycmF5LjxzdHJpbmc+fSBvcHRfYXR0cmlicyBUaGUg
YXR0cmlicyBuYW1lcy4KKyAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBvcHRfbG9jYXRpb25z
IFRoZSBsb2NhdGlvbnMgZm9yIHRoZSBhdHRyaWJzLgorICogQHBhcmFtIHtib29sZWFufSBvcHRf
bG9nU2hhZGVycyBXaGV0aGVyIHRvIGxvZyBzaGFkZXIgc291cmNlLgorICovCit2YXIgc2V0dXBU
cmFuc2Zvcm1GZWVkYmFja1Byb2dyYW0gPSBmdW5jdGlvbigKKyAgICBnbCwgc2hhZGVycywgdmFy
eWluZ3MsIGJ1ZmZlck1vZGUsIG9wdF9hdHRyaWJzLCBvcHRfbG9jYXRpb25zLCBvcHRfbG9nU2hh
ZGVycywgb3B0X3NraXBDb21waWxlU3RhdHVzKSB7CisgIHZhciByZWFsU2hhZGVycyA9IFtdOwor
ICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTsKKyAgdmFyIHNoYWRlckNvdW50ID0g
MDsKKyAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IHNoYWRlcnMubGVuZ3RoOyArK2lpKSB7CisgICAg
dmFyIHNoYWRlciA9IHNoYWRlcnNbaWldOworICAgIHZhciBzaGFkZXJUeXBlID0gdW5kZWZpbmVk
OworICAgIGlmICh0eXBlb2Ygc2hhZGVyID09ICdzdHJpbmcnKSB7CisgICAgICB2YXIgZWxlbWVu
dCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNoYWRlcik7CisgICAgICBpZiAoZWxlbWVudCkg
eworICAgICAgICBpZiAoZWxlbWVudC50eXBlICE9ICJ4LXNoYWRlci94LXZlcnRleCIgJiYgZWxl
bWVudC50eXBlICE9ICJ4LXNoYWRlci94LWZyYWdtZW50IikKKyAgICAgICAgICBzaGFkZXJUeXBl
ID0gaWkgPyBnbC5GUkFHTUVOVF9TSEFERVIgOiBnbC5WRVJURVhfU0hBREVSOworICAgICAgICBz
aGFkZXIgPSBsb2FkU2hhZGVyRnJvbVNjcmlwdChnbCwgc2hhZGVyLCBzaGFkZXJUeXBlLCB1bmRl
ZmluZWQsIG9wdF9sb2dTaGFkZXJzLCBvcHRfc2tpcENvbXBpbGVTdGF0dXMpOworICAgICAgfSBl
bHNlIGlmIChlbmRzV2l0aChzaGFkZXIsICIudmVydCIpKSB7CisgICAgICAgIHNoYWRlciA9IGxv
YWRTaGFkZXJGcm9tRmlsZShnbCwgc2hhZGVyLCBnbC5WRVJURVhfU0hBREVSLCB1bmRlZmluZWQs
IG9wdF9sb2dTaGFkZXJzLCBvcHRfc2tpcENvbXBpbGVTdGF0dXMpOworICAgICAgfSBlbHNlIGlm
IChlbmRzV2l0aChzaGFkZXIsICIuZnJhZyIpKSB7CisgICAgICAgIHNoYWRlciA9IGxvYWRTaGFk
ZXJGcm9tRmlsZShnbCwgc2hhZGVyLCBnbC5GUkFHTUVOVF9TSEFERVIsIHVuZGVmaW5lZCwgb3B0
X2xvZ1NoYWRlcnMsIG9wdF9za2lwQ29tcGlsZVN0YXR1cyk7CisgICAgICB9IGVsc2UgeworICAg
ICAgICBzaGFkZXIgPSBsb2FkU2hhZGVyKGdsLCBzaGFkZXIsIGlpID8gZ2wuRlJBR01FTlRfU0hB
REVSIDogZ2wuVkVSVEVYX1NIQURFUiwgdW5kZWZpbmVkLCBvcHRfbG9nU2hhZGVycywgdW5kZWZp
bmVkLCB1bmRlZmluZWQsIG9wdF9za2lwQ29tcGlsZVN0YXR1cyk7CisgICAgICB9CisgICAgfSBl
bHNlIGlmIChvcHRfbG9nU2hhZGVycykgeworICAgICAgdGhyb3cgJ1NoYWRlciBzb3VyY2UgbG9n
Z2luZyByZXF1ZXN0ZWQgYnV0IG5vIHNoYWRlciBzb3VyY2UgcHJvdmlkZWQnOworICAgIH0KKyAg
ICBpZiAoc2hhZGVyKSB7CisgICAgICArK3NoYWRlckNvdW50OworICAgICAgZ2wuYXR0YWNoU2hh
ZGVyKHByb2dyYW0sIHNoYWRlcik7CisgICAgfQorICB9CisgIGlmIChzaGFkZXJDb3VudCAhPSAy
KSB7CisgICAgZXJyb3IoIkVycm9yIGluIGNvbXBpbGluZyBzaGFkZXIiKTsKKyAgICByZXR1cm4g
bnVsbDsKKyAgfQorCisgIGlmIChvcHRfYXR0cmlicykgeworICAgIGZvciAodmFyIGlpID0gMDsg
aWkgPCBvcHRfYXR0cmlicy5sZW5ndGg7ICsraWkpIHsKKyAgICAgIGdsLmJpbmRBdHRyaWJMb2Nh
dGlvbigKKyAgICAgICAgICBwcm9ncmFtLAorICAgICAgICAgIG9wdF9sb2NhdGlvbnMgPyBvcHRf
bG9jYXRpb25zW2lpXSA6IGlpLAorICAgICAgICAgIG9wdF9hdHRyaWJzW2lpXSk7CisgICAgfQor
ICB9CisKKyAgZ2wudHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhwcm9ncmFtLCB2YXJ5aW5ncywg
YnVmZmVyTW9kZSk7CisKKyAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7CisKKyAgLy8gQ2hlY2sg
dGhlIGxpbmsgc3RhdHVzCisgIHZhciBsaW5rZWQgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVyKHBy
b2dyYW0sIGdsLkxJTktfU1RBVFVTKTsKKyAgaWYgKCFsaW5rZWQpIHsKKyAgICAgIC8vIHNvbWV0
aGluZyB3ZW50IHdyb25nIHdpdGggdGhlIGxpbmsKKyAgICAgIGxhc3RFcnJvciA9IGdsLmdldFBy
b2dyYW1JbmZvTG9nIChwcm9ncmFtKTsKKyAgICAgIGVycm9yKCJFcnJvciBpbiBwcm9ncmFtIGxp
bmtpbmc6IiArIGxhc3RFcnJvcik7CisKKyAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3JhbSk7
CisgICAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIGdsLnVzZVByb2dyYW0ocHJvZ3JhbSk7Cisg
IHJldHVybiBwcm9ncmFtOworfTsKKworLyoqCisgKiBDcmVhdGVzIGEgc2ltcGxlIHRleHR1cmUg
cHJvZ3JhbS4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdM
UmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcmV0dXJuIHtXZWJHTFByb2dyYW19CisgKi8K
K3ZhciBzZXR1cE5vVGV4Q29vcmRUZXh0dXJlUHJvZ3JhbSA9IGZ1bmN0aW9uKGdsKSB7CisgIHJl
dHVybiBzZXR1cFByb2dyYW0oZ2wsCisgICAgICAgICAgICAgICAgICAgICAgW25vVGV4Q29vcmRU
ZXh0dXJlVmVydGV4U2hhZGVyLCBzaW1wbGVUZXh0dXJlRnJhZ21lbnRTaGFkZXJdLAorICAgICAg
ICAgICAgICAgICAgICAgIFsndlBvc2l0aW9uJ10sCisgICAgICAgICAgICAgICAgICAgICAgWzBd
KTsKK307CisKKy8qKgorICogQ3JlYXRlcyBhIHNpbXBsZSB0ZXh0dXJlIHByb2dyYW0uCisgKiBA
cGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRl
eHQgdG8gdXNlLgorICogQHBhcmFtIHtudW1iZXJ9IG9wdF9wb3NpdGlvbkxvY2F0aW9uIFRoZSBh
dHRyaWIgbG9jYXRpb24gZm9yIHBvc2l0aW9uLgorICogQHBhcmFtIHtudW1iZXJ9IG9wdF90ZXhj
b29yZExvY2F0aW9uIFRoZSBhdHRyaWIgbG9jYXRpb24gZm9yIHRleHR1cmUgY29vcmRzLgorICog
QHBhcmFtIHtzdHJpbmd9IG9wdF9mcmFnbWVudFNoYWRlck92ZXJyaWRlIFRoZSBhbHRlcm5hdGl2
ZSBmcmFnbWVudCBzaGFkZXIgdG8gdXNlLgorICogQHJldHVybiB7V2ViR0xQcm9ncmFtfQorICov
Cit2YXIgc2V0dXBTaW1wbGVUZXh0dXJlUHJvZ3JhbSA9IGZ1bmN0aW9uKAorICAgIGdsLCBvcHRf
cG9zaXRpb25Mb2NhdGlvbiwgb3B0X3RleGNvb3JkTG9jYXRpb24sIG9wdF9mcmFnbWVudFNoYWRl
ck92ZXJyaWRlKSB7CisgIG9wdF9wb3NpdGlvbkxvY2F0aW9uID0gb3B0X3Bvc2l0aW9uTG9jYXRp
b24gfHwgMDsKKyAgb3B0X3RleGNvb3JkTG9jYXRpb24gPSBvcHRfdGV4Y29vcmRMb2NhdGlvbiB8
fCAxOworICBvcHRfZnJhZ21lbnRTaGFkZXJPdmVycmlkZSA9IG9wdF9mcmFnbWVudFNoYWRlck92
ZXJyaWRlIHx8IHNpbXBsZVRleHR1cmVGcmFnbWVudFNoYWRlcjsKKyAgcmV0dXJuIHNldHVwUHJv
Z3JhbShnbCwKKyAgICAgICAgICAgICAgICAgICAgICBbc2ltcGxlVGV4dHVyZVZlcnRleFNoYWRl
ciwgb3B0X2ZyYWdtZW50U2hhZGVyT3ZlcnJpZGVdLAorICAgICAgICAgICAgICAgICAgICAgIFsn
dlBvc2l0aW9uJywgJ3RleENvb3JkMCddLAorICAgICAgICAgICAgICAgICAgICAgIFtvcHRfcG9z
aXRpb25Mb2NhdGlvbiwgb3B0X3RleGNvb3JkTG9jYXRpb25dKTsKK307CisKKy8qKgorICogQ3Jl
YXRlcyBhIHNpbXBsZSB0ZXh0dXJlIHByb2dyYW0gdXNpbmcgZ2xzbCB2ZXJzaW9uIDMwMC4KKyAq
IEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge251bWJlcn0gb3B0X3Bvc2l0aW9uTG9jYXRpb24gVGhl
IGF0dHJpYiBsb2NhdGlvbiBmb3IgcG9zaXRpb24uCisgKiBAcGFyYW0ge251bWJlcn0gb3B0X3Rl
eGNvb3JkTG9jYXRpb24gVGhlIGF0dHJpYiBsb2NhdGlvbiBmb3IgdGV4dHVyZSBjb29yZHMuCisg
KiBAcGFyYW0ge3N0cmluZ30gb3B0X2ZyYWdtZW50U2hhZGVyT3ZlcnJpZGUgVGhlIGFsdGVybmF0
aXZlIGZyYWdtZW50IHNoYWRlciB0byB1c2UuCisgKiBAcmV0dXJuIHtXZWJHTFByb2dyYW19Cisg
Ki8KK3ZhciBzZXR1cFNpbXBsZVRleHR1cmVQcm9ncmFtRVNTTDMwMCA9IGZ1bmN0aW9uKAorICAg
IGdsLCBvcHRfcG9zaXRpb25Mb2NhdGlvbiwgb3B0X3RleGNvb3JkTG9jYXRpb24sIG9wdF9mcmFn
bWVudFNoYWRlck92ZXJyaWRlKSB7CisgIG9wdF9wb3NpdGlvbkxvY2F0aW9uID0gb3B0X3Bvc2l0
aW9uTG9jYXRpb24gfHwgMDsKKyAgb3B0X3RleGNvb3JkTG9jYXRpb24gPSBvcHRfdGV4Y29vcmRM
b2NhdGlvbiB8fCAxOworICBvcHRfZnJhZ21lbnRTaGFkZXJPdmVycmlkZSA9IG9wdF9mcmFnbWVu
dFNoYWRlck92ZXJyaWRlIHx8IHNpbXBsZVRleHR1cmVGcmFnbWVudFNoYWRlckVTU0wzMDA7Cisg
IHJldHVybiBzZXR1cFByb2dyYW0oZ2wsCisgICAgICAgICAgICAgICAgICAgICAgW3NpbXBsZVRl
eHR1cmVWZXJ0ZXhTaGFkZXJFU1NMMzAwLCBvcHRfZnJhZ21lbnRTaGFkZXJPdmVycmlkZV0sCisg
ICAgICAgICAgICAgICAgICAgICAgWyd2UG9zaXRpb24nLCAndGV4Q29vcmQwJ10sCisgICAgICAg
ICAgICAgICAgICAgICAgW29wdF9wb3NpdGlvbkxvY2F0aW9uLCBvcHRfdGV4Y29vcmRMb2NhdGlv
bl0pOworfTsKKworLyoqCisgKiBDcmVhdGVzIGEgc2ltcGxlIGN1YmUgbWFwIHRleHR1cmUgcHJv
Z3JhbS4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge251bWJlcn0gb3B0X3Bvc2l0aW9uTG9j
YXRpb24gVGhlIGF0dHJpYiBsb2NhdGlvbiBmb3IgcG9zaXRpb24uCisgKiBAcGFyYW0ge251bWJl
cn0gb3B0X3RleGNvb3JkTG9jYXRpb24gVGhlIGF0dHJpYiBsb2NhdGlvbiBmb3IgdGV4dHVyZSBj
b29yZHMuCisgKiBAcmV0dXJuIHtXZWJHTFByb2dyYW19CisgKi8KK3ZhciBzZXR1cFNpbXBsZUN1
YmVNYXBUZXh0dXJlUHJvZ3JhbSA9IGZ1bmN0aW9uKAorICAgIGdsLCBvcHRfcG9zaXRpb25Mb2Nh
dGlvbiwgb3B0X3RleGNvb3JkTG9jYXRpb24pIHsKKyAgb3B0X3Bvc2l0aW9uTG9jYXRpb24gPSBv
cHRfcG9zaXRpb25Mb2NhdGlvbiB8fCAwOworICBvcHRfdGV4Y29vcmRMb2NhdGlvbiA9IG9wdF90
ZXhjb29yZExvY2F0aW9uIHx8IDE7CisgIHJldHVybiBzZXR1cFByb2dyYW0oZ2wsCisgICAgICAg
ICAgICAgICAgICAgICAgW3NpbXBsZVRleHR1cmVWZXJ0ZXhTaGFkZXIsIHNpbXBsZUN1YmVNYXBU
ZXh0dXJlRnJhZ21lbnRTaGFkZXJdLAorICAgICAgICAgICAgICAgICAgICAgIFsndlBvc2l0aW9u
JywgJ3RleENvb3JkMCddLAorICAgICAgICAgICAgICAgICAgICAgIFtvcHRfcG9zaXRpb25Mb2Nh
dGlvbiwgb3B0X3RleGNvb3JkTG9jYXRpb25dKTsKK307CisKKy8qKgorICogQ3JlYXRlcyBhIHNp
bXBsZSB2ZXJ0ZXggY29sb3IgcHJvZ3JhbS4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29u
dGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge251
bWJlcn0gb3B0X3Bvc2l0aW9uTG9jYXRpb24gVGhlIGF0dHJpYiBsb2NhdGlvbiBmb3IgcG9zaXRp
b24uCisgKiBAcGFyYW0ge251bWJlcn0gb3B0X3ZlcnRleENvbG9yTG9jYXRpb24gVGhlIGF0dHJp
YiBsb2NhdGlvbgorICogICAgICAgIGZvciB2ZXJ0ZXggY29sb3JzLgorICogQHJldHVybiB7V2Vi
R0xQcm9ncmFtfQorICovCit2YXIgc2V0dXBTaW1wbGVWZXJ0ZXhDb2xvclByb2dyYW0gPSBmdW5j
dGlvbigKKyAgICBnbCwgb3B0X3Bvc2l0aW9uTG9jYXRpb24sIG9wdF92ZXJ0ZXhDb2xvckxvY2F0
aW9uKSB7CisgIG9wdF9wb3NpdGlvbkxvY2F0aW9uID0gb3B0X3Bvc2l0aW9uTG9jYXRpb24gfHwg
MDsKKyAgb3B0X3ZlcnRleENvbG9yTG9jYXRpb24gPSBvcHRfdmVydGV4Q29sb3JMb2NhdGlvbiB8
fCAxOworICByZXR1cm4gc2V0dXBQcm9ncmFtKGdsLAorICAgICAgICAgICAgICAgICAgICAgIFtz
aW1wbGVWZXJ0ZXhDb2xvclZlcnRleFNoYWRlciwgc2ltcGxlVmVydGV4Q29sb3JGcmFnbWVudFNo
YWRlcl0sCisgICAgICAgICAgICAgICAgICAgICAgWyd2UG9zaXRpb24nLCAnYV9jb2xvciddLAor
ICAgICAgICAgICAgICAgICAgICAgIFtvcHRfcG9zaXRpb25Mb2NhdGlvbiwgb3B0X3ZlcnRleENv
bG9yTG9jYXRpb25dKTsKK307CisKKy8qKgorICogQ3JlYXRlcyBhIHNpbXBsZSBjb2xvciBwcm9n
cmFtLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7bnVtYmVyfSBvcHRfcG9zaXRpb25Mb2Nh
dGlvbiBUaGUgYXR0cmliIGxvY2F0aW9uIGZvciBwb3NpdGlvbi4KKyAqIEByZXR1cm4ge1dlYkdM
UHJvZ3JhbX0KKyAqLwordmFyIHNldHVwU2ltcGxlQ29sb3JQcm9ncmFtID0gZnVuY3Rpb24oZ2ws
IG9wdF9wb3NpdGlvbkxvY2F0aW9uKSB7CisgIG9wdF9wb3NpdGlvbkxvY2F0aW9uID0gb3B0X3Bv
c2l0aW9uTG9jYXRpb24gfHwgMDsKKyAgcmV0dXJuIHNldHVwUHJvZ3JhbShnbCwKKyAgICAgICAg
ICAgICAgICAgICAgICBbc2ltcGxlVmVydGV4U2hhZGVyLCBzaW1wbGVDb2xvckZyYWdtZW50U2hh
ZGVyXSwKKyAgICAgICAgICAgICAgICAgICAgICBbJ3ZQb3NpdGlvbiddLAorICAgICAgICAgICAg
ICAgICAgICAgIFtvcHRfcG9zaXRpb25Mb2NhdGlvbl0pOworfTsKKworLyoqCisgKiBDcmVhdGVz
IGJ1ZmZlcnMgZm9yIGEgdGV4dHVyZWQgdW5pdCBxdWFkIGFuZCBhdHRhY2hlcyB0aGVtIHRvIHZl
cnRleCBhdHRyaWJzLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUg
V2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7bnVtYmVyfSBvcHRfcG9z
aXRpb25Mb2NhdGlvbiBUaGUgYXR0cmliIGxvY2F0aW9uIGZvciBwb3NpdGlvbi4KKyAqIEBwYXJh
bSB7bnVtYmVyfSBvcHRfdGV4Y29vcmRMb2NhdGlvbiBUaGUgYXR0cmliIGxvY2F0aW9uIGZvciB0
ZXh0dXJlIGNvb3Jkcy4KKyAqIEBwYXJhbSB7IU9iamVjdH0gdmFyaW91cyBvcHRpb25zLiBTZWUg
c2V0dXBRdWFkIGZvciBkZXRhaWxzLgorICogQHJldHVybiB7IUFycmF5LjxXZWJHTEJ1ZmZlcj59
IFRoZSBidWZmZXIgb2JqZWN0cyB0aGF0IHdlcmUKKyAqICAgICAgY3JlYXRlZC4KKyAqLwordmFy
IHNldHVwVW5pdFF1YWQgPSBmdW5jdGlvbihnbCwgb3B0X3Bvc2l0aW9uTG9jYXRpb24sIG9wdF90
ZXhjb29yZExvY2F0aW9uLCBvcHRpb25zKSB7CisgIHJldHVybiBzZXR1cFF1YWRXaXRoVGV4Q29v
cmRzKGdsLCBbIDAuMCwgMC4wIF0sIFsgMS4wLCAxLjAgXSwKKyAgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgb3B0X3Bvc2l0aW9uTG9jYXRpb24sIG9wdF90ZXhjb29yZExvY2F0aW9uLAor
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zKTsKK307CisKKy8qKgorICog
Q3JlYXRlcyBidWZmZXJzIGZvciBhIHRleHR1cmVkIHF1YWQgd2l0aCBzcGVjaWZpZWQgbG93ZXIg
bGVmdAorICogYW5kIHVwcGVyIHJpZ2h0IHRleHR1cmUgY29vcmRpbmF0ZXMsIGFuZCBhdHRhY2hl
cyB0aGVtIHRvIHZlcnRleAorICogYXR0cmlicy4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5n
Q29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0g
eyFBcnJheS48bnVtYmVyPn0gbG93ZXJMZWZ0VGV4Q29vcmRzIFRoZSB0ZXh0dXJlIGNvb3JkaW5h
dGVzIGZvciB0aGUgbG93ZXIgbGVmdCBjb3JuZXIuCisgKiBAcGFyYW0geyFBcnJheS48bnVtYmVy
Pn0gdXBwZXJSaWdodFRleENvb3JkcyBUaGUgdGV4dHVyZSBjb29yZGluYXRlcyBmb3IgdGhlIHVw
cGVyIHJpZ2h0IGNvcm5lci4KKyAqIEBwYXJhbSB7bnVtYmVyfSBvcHRfcG9zaXRpb25Mb2NhdGlv
biBUaGUgYXR0cmliIGxvY2F0aW9uIGZvciBwb3NpdGlvbi4KKyAqIEBwYXJhbSB7bnVtYmVyfSBv
cHRfdGV4Y29vcmRMb2NhdGlvbiBUaGUgYXR0cmliIGxvY2F0aW9uIGZvciB0ZXh0dXJlIGNvb3Jk
cy4KKyAqIEBwYXJhbSB7IU9iamVjdH0gdmFyaW91cyBvcHRpb25zLiBTZWUgc2V0dXBRdWFkIGZv
ciBkZXRhaWxzLgorICogQHJldHVybiB7IUFycmF5LjxXZWJHTEJ1ZmZlcj59IFRoZSBidWZmZXIg
b2JqZWN0cyB0aGF0IHdlcmUKKyAqICAgICAgY3JlYXRlZC4KKyAqLwordmFyIHNldHVwUXVhZFdp
dGhUZXhDb29yZHMgPSBmdW5jdGlvbigKKyAgICBnbCwgbG93ZXJMZWZ0VGV4Q29vcmRzLCB1cHBl
clJpZ2h0VGV4Q29vcmRzLAorICAgIG9wdF9wb3NpdGlvbkxvY2F0aW9uLCBvcHRfdGV4Y29vcmRM
b2NhdGlvbiwgb3B0aW9ucykgeworICB2YXIgZGVmYXVsdE9wdGlvbnMgPSB7CisgICAgcG9zaXRp
b25Mb2NhdGlvbjogb3B0X3Bvc2l0aW9uTG9jYXRpb24gfHwgMCwKKyAgICB0ZXhjb29yZExvY2F0
aW9uOiBvcHRfdGV4Y29vcmRMb2NhdGlvbiB8fCAxLAorICAgIGxvd2VyTGVmdFRleENvb3Jkczog
bG93ZXJMZWZ0VGV4Q29vcmRzLAorICAgIHVwcGVyUmlnaHRUZXhDb29yZHM6IHVwcGVyUmlnaHRU
ZXhDb29yZHMKKyAgfTsKKyAgaWYgKG9wdGlvbnMpIHsKKyAgICBmb3IgKHZhciBwcm9wIGluIG9w
dGlvbnMpIHsKKyAgICAgIGRlZmF1bHRPcHRpb25zW3Byb3BdID0gb3B0aW9uc1twcm9wXQorICAg
IH0KKyAgfQorICByZXR1cm4gc2V0dXBRdWFkKGdsLCBkZWZhdWx0T3B0aW9ucyk7Cit9OworCisv
KioKKyAqIE1ha2VzIGEgcXVhZCB3aXRoIHZhcmlvdXMgb3B0aW9ucy4KKyAqIEBwYXJhbSB7IVdl
YkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2Uu
CisgKiBAcGFyYW0geyFPYmplY3R9IG9wdGlvbnMKKyAqCisgKiBzY2FsZTogc2NhbGUgdG8gbXVs
dGlwbHkgdW5pdCBxdWFkIHZhbHVlcyBieS4gZGVmYXVsdCAxLjAuCisgKiBwb3NpdGlvbkxvY2F0
aW9uOiBhdHRyaWJ1dGUgbG9jYXRpb24gZm9yIHBvc2l0aW9uLgorICogdGV4Y29vcmRMb2NhdGlv
bjogYXR0cmlidXRlIGxvY2F0aW9uIGZvciB0ZXhjb29yZHMuCisgKiAgICAgSWYgdGhpcyBkb2Vz
IG5vdCBleGlzdCBubyB0ZXh0dXJlIGNvb3JkcyBhcmUgY3JlYXRlZC4KKyAqIGxvd2VyTGVmdFRl
eENvb3JkczogYW4gYXJyYXkgb2YgMiB2YWx1ZXMgZm9yIHRoZQorICogICAgIGxvd2VyTGVmdFRl
eENvb3Jkcy4KKyAqIHVwcGVyUmlnaHRUZXhDb29yZHM6IGFuIGFycmF5IG9mIDIgdmFsdWVzIGZv
ciB0aGUKKyAqICAgICB1cHBlclJpZ2h0VGV4Q29vcmRzLgorICovCit2YXIgc2V0dXBRdWFkID0g
ZnVuY3Rpb24oZ2wsIG9wdGlvbnMpIHsKKyAgdmFyIHBvc2l0aW9uTG9jYXRpb24gPSBvcHRpb25z
LnBvc2l0aW9uTG9jYXRpb24gfHwgMDsKKyAgdmFyIHNjYWxlID0gb3B0aW9ucy5zY2FsZSB8fCAx
OworCisgIHZhciBvYmplY3RzID0gW107CisKKyAgdmFyIHZlcnRleE9iamVjdCA9IGdsLmNyZWF0
ZUJ1ZmZlcigpOworICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdmVydGV4T2JqZWN0
KTsKKyAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG5ldyBGbG9hdDMyQXJyYXkoWwor
ICAgICAgIDEuMCAqIHNjYWxlICwgIDEuMCAqIHNjYWxlLAorICAgICAgLTEuMCAqIHNjYWxlICwg
IDEuMCAqIHNjYWxlLAorICAgICAgLTEuMCAqIHNjYWxlICwgLTEuMCAqIHNjYWxlLAorICAgICAg
IDEuMCAqIHNjYWxlICwgIDEuMCAqIHNjYWxlLAorICAgICAgLTEuMCAqIHNjYWxlICwgLTEuMCAq
IHNjYWxlLAorICAgICAgIDEuMCAqIHNjYWxlICwgLTEuMCAqIHNjYWxlXSksIGdsLlNUQVRJQ19E
UkFXKTsKKyAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocG9zaXRpb25Mb2NhdGlvbik7Cisg
IGdsLnZlcnRleEF0dHJpYlBvaW50ZXIocG9zaXRpb25Mb2NhdGlvbiwgMiwgZ2wuRkxPQVQsIGZh
bHNlLCAwLCAwKTsKKyAgb2JqZWN0cy5wdXNoKHZlcnRleE9iamVjdCk7CisKKyAgaWYgKG9wdGlv
bnMudGV4Y29vcmRMb2NhdGlvbiAhPT0gdW5kZWZpbmVkKSB7CisgICAgdmFyIGxseCA9IG9wdGlv
bnMubG93ZXJMZWZ0VGV4Q29vcmRzWzBdOworICAgIHZhciBsbHkgPSBvcHRpb25zLmxvd2VyTGVm
dFRleENvb3Jkc1sxXTsKKyAgICB2YXIgdXJ4ID0gb3B0aW9ucy51cHBlclJpZ2h0VGV4Q29vcmRz
WzBdOworICAgIHZhciB1cnkgPSBvcHRpb25zLnVwcGVyUmlnaHRUZXhDb29yZHNbMV07CisKKyAg
ICB2ZXJ0ZXhPYmplY3QgPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgICBnbC5iaW5kQnVmZmVyKGds
LkFSUkFZX0JVRkZFUiwgdmVydGV4T2JqZWN0KTsKKyAgICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZ
X0JVRkZFUiwgbmV3IEZsb2F0MzJBcnJheShbCisgICAgICAgIHVyeCwgdXJ5LAorICAgICAgICBs
bHgsIHVyeSwKKyAgICAgICAgbGx4LCBsbHksCisgICAgICAgIHVyeCwgdXJ5LAorICAgICAgICBs
bHgsIGxseSwKKyAgICAgICAgdXJ4LCBsbHldKSwgZ2wuU1RBVElDX0RSQVcpOworICAgIGdsLmVu
YWJsZVZlcnRleEF0dHJpYkFycmF5KG9wdGlvbnMudGV4Y29vcmRMb2NhdGlvbik7CisgICAgZ2wu
dmVydGV4QXR0cmliUG9pbnRlcihvcHRpb25zLnRleGNvb3JkTG9jYXRpb24sIDIsIGdsLkZMT0FU
LCBmYWxzZSwgMCwgMCk7CisgICAgb2JqZWN0cy5wdXNoKHZlcnRleE9iamVjdCk7CisgIH0KKwor
ICByZXR1cm4gb2JqZWN0czsKK307CisKKy8qKgorICogQ3JlYXRlcyBhIHByb2dyYW0gYW5kIGJ1
ZmZlcnMgZm9yIHJlbmRlcmluZyBhIHRleHR1cmVkIHF1YWQuCisgKiBAcGFyYW0geyFXZWJHTFJl
bmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICog
QHBhcmFtIHtudW1iZXJ9IG9wdF9wb3NpdGlvbkxvY2F0aW9uIFRoZSBhdHRyaWIgbG9jYXRpb24g
Zm9yCisgKiAgICAgICAgcG9zaXRpb24uIERlZmF1bHQgPSAwLgorICogQHBhcmFtIHtudW1iZXJ9
IG9wdF90ZXhjb29yZExvY2F0aW9uIFRoZSBhdHRyaWIgbG9jYXRpb24gZm9yCisgKiAgICAgICAg
dGV4dHVyZSBjb29yZHMuIERlZmF1bHQgPSAxLgorICogQHBhcmFtIHshT2JqZWN0fSB2YXJpb3Vz
IG9wdGlvbnMgZGVmaW5lZCBieSBzZXR1cFF1YWQsIHBsdXMgYW4gb3B0aW9uCisgICAgICAgICAg
ZnJhZ21lbnRTaGFkZXJPdmVycmlkZSB0byBzcGVjaWZ5IGEgY3VzdG9tIGZyYWdtZW50IHNoYWRl
ci4KKyAqIEByZXR1cm4geyFXZWJHTFByb2dyYW19CisgKi8KK3ZhciBzZXR1cFRleHR1cmVkUXVh
ZCA9IGZ1bmN0aW9uKAorICAgIGdsLCBvcHRfcG9zaXRpb25Mb2NhdGlvbiwgb3B0X3RleGNvb3Jk
TG9jYXRpb24sIG9wdGlvbnMpIHsKKyAgdmFyIHByb2dyYW0gPSBzZXR1cFNpbXBsZVRleHR1cmVQ
cm9ncmFtKAorICAgICAgZ2wsIG9wdF9wb3NpdGlvbkxvY2F0aW9uLCBvcHRfdGV4Y29vcmRMb2Nh
dGlvbiwgb3B0aW9ucyAmJiBvcHRpb25zLmZyYWdtZW50U2hhZGVyT3ZlcnJpZGUpOworICBzZXR1
cFVuaXRRdWFkKGdsLCBvcHRfcG9zaXRpb25Mb2NhdGlvbiwgb3B0X3RleGNvb3JkTG9jYXRpb24s
IG9wdGlvbnMpOworICByZXR1cm4gcHJvZ3JhbTsKK307CisKKy8qKgorICogQ3JlYXRlcyBhIHBy
b2dyYW0gYW5kIGJ1ZmZlcnMgZm9yIHJlbmRlcmluZyBhIGNvbG9yIHF1YWQuCisgKiBAcGFyYW0g
eyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8g
dXNlLgorICogQHBhcmFtIHtudW1iZXJ9IG9wdF9wb3NpdGlvbkxvY2F0aW9uIFRoZSBhdHRyaWIg
bG9jYXRpb24gZm9yIHBvc2l0aW9uLgorICogQHBhcmFtIHshT2JqZWN0fSB2YXJpb3VzIG9wdGlv
bnMuIFNlZSBzZXR1cFF1YWQgZm9yIGRldGFpbHMuCisgKiBAcmV0dXJuIHshV2ViR0xQcm9ncmFt
fQorICovCit2YXIgc2V0dXBDb2xvclF1YWQgPSBmdW5jdGlvbihnbCwgb3B0X3Bvc2l0aW9uTG9j
YXRpb24sIG9wdGlvbnMpIHsKKyAgb3B0X3Bvc2l0aW9uTG9jYXRpb24gPSBvcHRfcG9zaXRpb25M
b2NhdGlvbiB8fCAwOworICB2YXIgcHJvZ3JhbSA9IHNldHVwU2ltcGxlQ29sb3JQcm9ncmFtKGds
LCBvcHRfcG9zaXRpb25Mb2NhdGlvbik7CisgIHNldHVwVW5pdFF1YWQoZ2wsIG9wdF9wb3NpdGlv
bkxvY2F0aW9uLCAwLCBvcHRpb25zKTsKKyAgcmV0dXJuIHByb2dyYW07Cit9OworCisvKioKKyAq
IENyZWF0ZXMgYSBwcm9ncmFtIGFuZCBidWZmZXJzIGZvciByZW5kZXJpbmcgYSB0ZXh0dXJlZCBx
dWFkIHdpdGgKKyAqIHNwZWNpZmllZCBsb3dlciBsZWZ0IGFuZCB1cHBlciByaWdodCB0ZXh0dXJl
IGNvb3JkaW5hdGVzLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUg
V2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+
fSBsb3dlckxlZnRUZXhDb29yZHMgVGhlIHRleHR1cmUgY29vcmRpbmF0ZXMgZm9yIHRoZSBsb3dl
ciBsZWZ0IGNvcm5lci4KKyAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSB1cHBlclJpZ2h0VGV4
Q29vcmRzIFRoZSB0ZXh0dXJlIGNvb3JkaW5hdGVzIGZvciB0aGUgdXBwZXIgcmlnaHQgY29ybmVy
LgorICogQHBhcmFtIHtudW1iZXJ9IG9wdF9wb3NpdGlvbkxvY2F0aW9uIFRoZSBhdHRyaWIgbG9j
YXRpb24gZm9yIHBvc2l0aW9uLgorICogQHBhcmFtIHtudW1iZXJ9IG9wdF90ZXhjb29yZExvY2F0
aW9uIFRoZSBhdHRyaWIgbG9jYXRpb24gZm9yIHRleHR1cmUgY29vcmRzLgorICogQHJldHVybiB7
IVdlYkdMUHJvZ3JhbX0KKyAqLwordmFyIHNldHVwVGV4dHVyZWRRdWFkV2l0aFRleENvb3JkcyA9
IGZ1bmN0aW9uKAorICAgIGdsLCBsb3dlckxlZnRUZXhDb29yZHMsIHVwcGVyUmlnaHRUZXhDb29y
ZHMsCisgICAgb3B0X3Bvc2l0aW9uTG9jYXRpb24sIG9wdF90ZXhjb29yZExvY2F0aW9uKSB7Cisg
IHZhciBwcm9ncmFtID0gc2V0dXBTaW1wbGVUZXh0dXJlUHJvZ3JhbSgKKyAgICAgIGdsLCBvcHRf
cG9zaXRpb25Mb2NhdGlvbiwgb3B0X3RleGNvb3JkTG9jYXRpb24pOworICBzZXR1cFF1YWRXaXRo
VGV4Q29vcmRzKGdsLCBsb3dlckxlZnRUZXhDb29yZHMsIHVwcGVyUmlnaHRUZXhDb29yZHMsCisg
ICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3Bvc2l0aW9uTG9jYXRpb24sIG9wdF90ZXhjb29y
ZExvY2F0aW9uKTsKKyAgcmV0dXJuIHByb2dyYW07Cit9OworCisvKioKKyAqIENyZWF0ZXMgYSBw
cm9ncmFtIGFuZCBidWZmZXJzIGZvciByZW5kZXJpbmcgYSB0ZXh0dXJlZCBxdWFkIHdpdGgKKyAq
IGEgY3ViZSBtYXAgdGV4dHVyZS4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0g
Z2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge251bWJlcn0g
b3B0X3Bvc2l0aW9uTG9jYXRpb24gVGhlIGF0dHJpYiBsb2NhdGlvbiBmb3IKKyAqICAgICAgICBw
b3NpdGlvbi4gRGVmYXVsdCA9IDAuCisgKiBAcGFyYW0ge251bWJlcn0gb3B0X3RleGNvb3JkTG9j
YXRpb24gVGhlIGF0dHJpYiBsb2NhdGlvbiBmb3IKKyAqICAgICAgICB0ZXh0dXJlIGNvb3Jkcy4g
RGVmYXVsdCA9IDEuCisgKiBAcmV0dXJuIHshV2ViR0xQcm9ncmFtfQorICovCit2YXIgc2V0dXBU
ZXh0dXJlZFF1YWRXaXRoQ3ViZU1hcCA9IGZ1bmN0aW9uKAorICAgIGdsLCBvcHRfcG9zaXRpb25M
b2NhdGlvbiwgb3B0X3RleGNvb3JkTG9jYXRpb24pIHsKKyAgdmFyIHByb2dyYW0gPSBzZXR1cFNp
bXBsZUN1YmVNYXBUZXh0dXJlUHJvZ3JhbSgKKyAgICAgIGdsLCBvcHRfcG9zaXRpb25Mb2NhdGlv
biwgb3B0X3RleGNvb3JkTG9jYXRpb24pOworICBzZXR1cFVuaXRRdWFkKGdsLCBvcHRfcG9zaXRp
b25Mb2NhdGlvbiwgb3B0X3RleGNvb3JkTG9jYXRpb24sIHVuZGVmaW5lZCk7CisgIHJldHVybiBw
cm9ncmFtOworfTsKKworLyoqCisgKiBDcmVhdGVzIGEgdW5pdCBxdWFkIHdpdGggb25seSBwb3Np
dGlvbnMgb2YgYSBnaXZlbiByZXNvbHV0aW9uLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdD
b250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7
bnVtYmVyfSBncmlkUmVzIFRoZSByZXNvbHV0aW9uIG9mIHRoZSBtZXNoIGdyaWQsCisgKiAgICAg
ZXhwcmVzc2VkIGluIHRoZSBudW1iZXIgb2YgcXVhZHMgYWNyb3NzIGFuZCBkb3duLgorICogQHBh
cmFtIHtudW1iZXJ9IG9wdF9wb3NpdGlvbkxvY2F0aW9uIFRoZSBhdHRyaWIgbG9jYXRpb24gZm9y
IHBvc2l0aW9uLgorICovCit2YXIgc2V0dXBJbmRleGVkUXVhZCA9IGZ1bmN0aW9uICgKKyAgICBn
bCwgZ3JpZFJlcywgb3B0X3Bvc2l0aW9uTG9jYXRpb24sIG9wdF9mbGlwT2RkVHJpYW5nbGVzKSB7
CisgIHJldHVybiBzZXR1cEluZGV4ZWRRdWFkV2l0aE9wdGlvbnMoZ2wsCisgICAgeyBncmlkUmVz
OiBncmlkUmVzLAorICAgICAgcG9zaXRpb25Mb2NhdGlvbjogb3B0X3Bvc2l0aW9uTG9jYXRpb24s
CisgICAgICBmbGlwT2RkVHJpYW5nbGVzOiBvcHRfZmxpcE9kZFRyaWFuZ2xlcworICAgIH0pOwor
fTsKKworLyoqCisgKiBDcmVhdGVzIGEgcXVhZCB3aXRoIHZhcmlvdXMgb3B0aW9ucy4KKyAqIEBw
YXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4
dCB0byB1c2UuCisgKiBAcGFyYW0geyFPYmplY3R9IG9wdGlvbnMgVGhlIG9wdGlvbnMuIFNlZSBi
ZWxvdy4KKyAqIEByZXR1cm4geyFBcnJheS48V2ViR0xCdWZmZXI+fSBUaGUgY3JlYXRlZCBidWZm
ZXJzLgorICogICAgIFtwb3NpdGlvbnMsIDxjb2xvcnM+LCBpbmRpY2VzXQorICoKKyAqIE9wdGlv
bnM6CisgKiAgIGdyaWRSZXM6IG51bWJlciBvZiBxdWFkcyBhY3Jvc3MgYW5kIGRvd24gZ3JpZC4K
KyAqICAgcG9zaXRpb25Mb2NhdGlvbjogYXR0cmliIGxvY2F0aW9uIGZvciBwb3NpdGlvbgorICog
ICBmbGlwT2RkVHJpYW5nbGVzOiByZXZlcnNlIG9yZGVyIG9mIHZlcnRpY2VzIG9mIGV2ZXJ5IG90
aGVyCisgKiAgICAgICB0cmlhbmdsZQorICogICBwb3NpdGlvbk9mZnNldDogb2Zmc2V0IGFkZGVk
IHRvIGVhY2ggdmVydGV4CisgKiAgIHBvc2l0aW9uTXVsdDogbXVsdGlwaWVyIGZvciBlYWNoIHZl
cnRleAorICogICBjb2xvckxvY2F0aW9uOiBhdHRyaWIgbG9jYXRpb24gZm9yIHZlcnRleCBjb2xv
cnMuIElmCisgKiAgICAgIHVuZGVmaW5lZCBubyB2ZXJ0ZXggY29sb3JzIHdpbGwgYmUgY3JlYXRl
ZC4KKyAqLwordmFyIHNldHVwSW5kZXhlZFF1YWRXaXRoT3B0aW9ucyA9IGZ1bmN0aW9uIChnbCwg
b3B0aW9ucykgeworICB2YXIgcG9zaXRpb25Mb2NhdGlvbiA9IG9wdGlvbnMucG9zaXRpb25Mb2Nh
dGlvbiB8fCAwOworICB2YXIgb2JqZWN0cyA9IFtdOworCisgIHZhciBncmlkUmVzID0gb3B0aW9u
cy5ncmlkUmVzIHx8IDE7CisgIHZhciBwb3NpdGlvbk9mZnNldCA9IG9wdGlvbnMucG9zaXRpb25P
ZmZzZXQgfHwgMDsKKyAgdmFyIHBvc2l0aW9uTXVsdCA9IG9wdGlvbnMucG9zaXRpb25NdWx0IHx8
IDE7CisgIHZhciB2ZXJ0c0Fjcm9zcyA9IGdyaWRSZXMgKyAxOworICB2YXIgbnVtVmVydHMgPSB2
ZXJ0c0Fjcm9zcyAqIHZlcnRzQWNyb3NzOworICB2YXIgcG9zaXRpb25zID0gbmV3IEZsb2F0MzJB
cnJheShudW1WZXJ0cyAqIDMpOworICB2YXIgaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSg2ICog
Z3JpZFJlcyAqIGdyaWRSZXMpOworICB2YXIgcG9mZnNldCA9IDA7CisKKyAgZm9yICh2YXIgeXkg
PSAwOyB5eSA8PSBncmlkUmVzOyArK3l5KSB7CisgICAgZm9yICh2YXIgeHggPSAwOyB4eCA8PSBn
cmlkUmVzOyArK3h4KSB7CisgICAgICBwb3NpdGlvbnNbcG9mZnNldCArIDBdID0gKC0xICsgMiAq
IHh4IC8gZ3JpZFJlcykgKiBwb3NpdGlvbk11bHQgKyBwb3NpdGlvbk9mZnNldDsKKyAgICAgIHBv
c2l0aW9uc1twb2Zmc2V0ICsgMV0gPSAoLTEgKyAyICogeXkgLyBncmlkUmVzKSAqIHBvc2l0aW9u
TXVsdCArIHBvc2l0aW9uT2Zmc2V0OworICAgICAgcG9zaXRpb25zW3BvZmZzZXQgKyAyXSA9IDA7
CisKKyAgICAgIHBvZmZzZXQgKz0gMzsKKyAgICB9CisgIH0KKworICB2YXIgYnVmID0gZ2wuY3Jl
YXRlQnVmZmVyKCk7CisgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBidWYpOworICBn
bC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgcG9zaXRpb25zLCBnbC5TVEFUSUNfRFJBVyk7
CisgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHBvc2l0aW9uTG9jYXRpb24pOworICBnbC52
ZXJ0ZXhBdHRyaWJQb2ludGVyKHBvc2l0aW9uTG9jYXRpb24sIDMsIGdsLkZMT0FULCBmYWxzZSwg
MCwgMCk7CisgIG9iamVjdHMucHVzaChidWYpOworCisgIGlmIChvcHRpb25zLmNvbG9yTG9jYXRp
b24gIT09IHVuZGVmaW5lZCkgeworICAgIHZhciBjb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5KG51
bVZlcnRzICogNCk7CisgICAgcG9mZnNldCA9IDA7CisgICAgZm9yICh2YXIgeXkgPSAwOyB5eSA8
PSBncmlkUmVzOyArK3l5KSB7CisgICAgICBmb3IgKHZhciB4eCA9IDA7IHh4IDw9IGdyaWRSZXM7
ICsreHgpIHsKKyAgICAgICAgaWYgKG9wdGlvbnMuY29sb3IgIT09IHVuZGVmaW5lZCkgeworICAg
ICAgICAgIGNvbG9yc1twb2Zmc2V0ICsgMF0gPSBvcHRpb25zLmNvbG9yWzBdOworICAgICAgICAg
IGNvbG9yc1twb2Zmc2V0ICsgMV0gPSBvcHRpb25zLmNvbG9yWzFdOworICAgICAgICAgIGNvbG9y
c1twb2Zmc2V0ICsgMl0gPSBvcHRpb25zLmNvbG9yWzJdOworICAgICAgICAgIGNvbG9yc1twb2Zm
c2V0ICsgM10gPSBvcHRpb25zLmNvbG9yWzNdOworICAgICAgICB9IGVsc2UgeworICAgICAgICAg
IGNvbG9yc1twb2Zmc2V0ICsgMF0gPSB4eCAvIGdyaWRSZXM7CisgICAgICAgICAgY29sb3JzW3Bv
ZmZzZXQgKyAxXSA9IHl5IC8gZ3JpZFJlczsKKyAgICAgICAgICBjb2xvcnNbcG9mZnNldCArIDJd
ID0gKHh4IC8gZ3JpZFJlcykgKiAoeXkgLyBncmlkUmVzKTsKKyAgICAgICAgICBjb2xvcnNbcG9m
ZnNldCArIDNdID0gKHl5ICUgMikgKiAwLjUgKyAwLjU7CisgICAgICAgIH0KKyAgICAgICAgcG9m
ZnNldCArPSA0OworICAgICAgfQorICAgIH0KKworICAgIGJ1ZiA9IGdsLmNyZWF0ZUJ1ZmZlcigp
OworICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBidWYpOworICAgIGdsLmJ1ZmZl
ckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBjb2xvcnMsIGdsLlNUQVRJQ19EUkFXKTsKKyAgICBnbC5l
bmFibGVWZXJ0ZXhBdHRyaWJBcnJheShvcHRpb25zLmNvbG9yTG9jYXRpb24pOworICAgIGdsLnZl
cnRleEF0dHJpYlBvaW50ZXIob3B0aW9ucy5jb2xvckxvY2F0aW9uLCA0LCBnbC5GTE9BVCwgZmFs
c2UsIDAsIDApOworICAgIG9iamVjdHMucHVzaChidWYpOworICB9CisKKyAgdmFyIHRiYXNlID0g
MDsKKyAgZm9yICh2YXIgeXkgPSAwOyB5eSA8IGdyaWRSZXM7ICsreXkpIHsKKyAgICB2YXIgaW5k
ZXggPSB5eSAqIHZlcnRzQWNyb3NzOworICAgIGZvciAodmFyIHh4ID0gMDsgeHggPCBncmlkUmVz
OyArK3h4KSB7CisgICAgICBpbmRpY2VzW3RiYXNlICsgMF0gPSBpbmRleCArIDA7CisgICAgICBp
bmRpY2VzW3RiYXNlICsgMV0gPSBpbmRleCArIDE7CisgICAgICBpbmRpY2VzW3RiYXNlICsgMl0g
PSBpbmRleCArIHZlcnRzQWNyb3NzOworICAgICAgaW5kaWNlc1t0YmFzZSArIDNdID0gaW5kZXgg
KyB2ZXJ0c0Fjcm9zczsKKyAgICAgIGluZGljZXNbdGJhc2UgKyA0XSA9IGluZGV4ICsgMTsKKyAg
ICAgIGluZGljZXNbdGJhc2UgKyA1XSA9IGluZGV4ICsgdmVydHNBY3Jvc3MgKyAxOworCisgICAg
ICBpZiAob3B0aW9ucy5mbGlwT2RkVHJpYW5nbGVzKSB7CisgICAgICAgIGluZGljZXNbdGJhc2Ug
KyA0XSA9IGluZGV4ICsgdmVydHNBY3Jvc3MgKyAxOworICAgICAgICBpbmRpY2VzW3RiYXNlICsg
NV0gPSBpbmRleCArIDE7CisgICAgICB9CisKKyAgICAgIGluZGV4ICs9IDE7CisgICAgICB0YmFz
ZSArPSA2OworICAgIH0KKyAgfQorCisgIGJ1ZiA9IGdsLmNyZWF0ZUJ1ZmZlcigpOworICBnbC5i
aW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBidWYpOworICBnbC5idWZmZXJEYXRh
KGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBpbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7CisgIG9i
amVjdHMucHVzaChidWYpOworCisgIHJldHVybiBvYmplY3RzOworfTsKKworLyoqCisgKiBSZXR1
cm5zIHRoZSBjb25zdHJ1Y3RvciBmb3IgYSB0eXBlZCBhcnJheSB0aGF0IGNvcnJlc3BvbmRzIHRv
IHRoZSBnaXZlbgorICogV2ViR0wgdHlwZS4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29u
dGV4dH0gZ2wgQSBXZWJHTFJlbmRlcmluZ0NvbnRleHQuCisgKiBAcGFyYW0ge251bWJlcn0gdHlw
ZSBUaGUgV2ViR0wgdHlwZSAoZWcsIGdsLlVOU0lHTkVEX0JZVEUpCisgKiBAcmV0dXJuIHshQ29u
c3RydWN0b3J9IFRoZSB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvciB0aGF0CisgKiAgICAgIGNvcnJl
c3BvbmRzIHRvIHRoZSBnaXZlbiB0eXBlLgorICovCit2YXIgZ2xUeXBlVG9UeXBlZEFycmF5VHlw
ZSA9IGZ1bmN0aW9uKGdsLCB0eXBlKSB7CisgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2UgZ2wu
QllURToKKyAgICAgIHJldHVybiB3aW5kb3cuSW50OEFycmF5OworICAgIGNhc2UgZ2wuVU5TSUdO
RURfQllURToKKyAgICAgIHJldHVybiB3aW5kb3cuVWludDhBcnJheTsKKyAgICBjYXNlIGdsLlNI
T1JUOgorICAgICAgcmV0dXJuIHdpbmRvdy5JbnQxNkFycmF5OworICAgIGNhc2UgZ2wuVU5TSUdO
RURfU0hPUlQ6CisgICAgY2FzZSBnbC5VTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICBjYXNlIGds
LlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CisgICAgY2FzZSBnbC5VTlNJR05FRF9TSE9SVF81XzVf
NV8xOgorICAgICAgcmV0dXJuIHdpbmRvdy5VaW50MTZBcnJheTsKKyAgICBjYXNlIGdsLklOVDoK
KyAgICAgIHJldHVybiB3aW5kb3cuSW50MzJBcnJheTsKKyAgICBjYXNlIGdsLlVOU0lHTkVEX0lO
VDoKKyAgICBjYXNlIGdsLlVOU0lHTkVEX0lOVF81XzlfOV85X1JFVjoKKyAgICBjYXNlIGdsLlVO
U0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVY6CisgICAgY2FzZSBnbC5VTlNJR05FRF9JTlRfMl8x
MF8xMF8xMF9SRVY6CisgICAgY2FzZSBnbC5VTlNJR05FRF9JTlRfMjRfODoKKyAgICAgIHJldHVy
biB3aW5kb3cuVWludDMyQXJyYXk7CisgICAgY2FzZSBnbC5IQUxGX0ZMT0FUOgorICAgIGNhc2Ug
MHg4RDYxOiAgLy8gSEFMRl9GTE9BVF9PRVMKKyAgICAgIHJldHVybiB3aW5kb3cuVWludDE2QXJy
YXk7CisgICAgY2FzZSBnbC5GTE9BVDoKKyAgICAgIHJldHVybiB3aW5kb3cuRmxvYXQzMkFycmF5
OworICAgIGRlZmF1bHQ6CisgICAgICB0aHJvdyAndW5rbm93biBnbCB0eXBlICcgKyBnbEVudW1U
b1N0cmluZyhnbCwgdHlwZSk7CisgIH0KK307CisKKy8qKgorICogUmV0dXJucyB0aGUgbnVtYmVy
IG9mIGJ5dGVzIHBlciBjb21wb25lbnQgZm9yIGEgZ2l2ZW4gV2ViR0wgdHlwZS4KKyAqIEBwYXJh
bSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgQSBXZWJHTFJlbmRlcmluZ0NvbnRleHQuCisg
KiBAcGFyYW0ge0dMZW51bX0gdHlwZSBUaGUgV2ViR0wgdHlwZSAoZWcsIGdsLlVOU0lHTkVEX0JZ
VEUpCisgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgYnl0ZXMgcGVyIGNvbXBvbmVu
dC4KKyAqLwordmFyIGdldEJ5dGVzUGVyQ29tcG9uZW50ID0gZnVuY3Rpb24oZ2wsIHR5cGUpIHsK
KyAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBnbC5CWVRFOgorICAgIGNhc2UgZ2wuVU5TSUdO
RURfQllURToKKyAgICAgIHJldHVybiAxOworICAgIGNhc2UgZ2wuU0hPUlQ6CisgICAgY2FzZSBn
bC5VTlNJR05FRF9TSE9SVDoKKyAgICBjYXNlIGdsLlVOU0lHTkVEX1NIT1JUXzVfNl81OgorICAg
IGNhc2UgZ2wuVU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICBjYXNlIGdsLlVOU0lHTkVEX1NI
T1JUXzVfNV81XzE6CisgICAgY2FzZSBnbC5IQUxGX0ZMT0FUOgorICAgIGNhc2UgMHg4RDYxOiAg
Ly8gSEFMRl9GTE9BVF9PRVMKKyAgICAgIHJldHVybiAyOworICAgIGNhc2UgZ2wuSU5UOgorICAg
IGNhc2UgZ2wuVU5TSUdORURfSU5UOgorICAgIGNhc2UgZ2wuVU5TSUdORURfSU5UXzVfOV85Xzlf
UkVWOgorICAgIGNhc2UgZ2wuVU5TSUdORURfSU5UXzEwRl8xMUZfMTFGX1JFVjoKKyAgICBjYXNl
IGdsLlVOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVjoKKyAgICBjYXNlIGdsLlVOU0lHTkVEX0lO
VF8yNF84OgorICAgIGNhc2UgZ2wuRkxPQVQ6CisgICAgICByZXR1cm4gNDsKKyAgICBkZWZhdWx0
OgorICAgICAgdGhyb3cgJ3Vua25vd24gZ2wgdHlwZSAnICsgZ2xFbnVtVG9TdHJpbmcoZ2wsIHR5
cGUpOworICB9Cit9OworCisvKioKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiB0eXBlZCBhcnJh
eSBlbGVtZW50cyBwZXIgcGl4ZWwgZm9yIGEgZ2l2ZW4gV2ViR0wKKyAqIGZvcm1hdC90eXBlIGNv
bWJpbmF0aW9uLiBUaGUgY29ycmVzcG9uZGluZyB0eXBlZCBhcnJheSB0eXBlIGNhbiBiZSBkZXRl
cm1pbmVkCisgKiBieSBjYWxsaW5nIGdsVHlwZVRvVHlwZWRBcnJheVR5cGUuCisgKiBAcGFyYW0g
eyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIEEgV2ViR0xSZW5kZXJpbmdDb250ZXh0LgorICog
QHBhcmFtIHtHTGVudW19IGZvcm1hdCBUaGUgV2ViR0wgZm9ybWF0IChlZywgZ2wuUkdCQSkKKyAq
IEBwYXJhbSB7R0xlbnVtfSB0eXBlIFRoZSBXZWJHTCB0eXBlIChlZywgZ2wuVU5TSUdORURfQllU
RSkKKyAqIEByZXR1cm4ge251bWJlcn0gVGhlIG51bWJlciBvZiB0eXBlZCBhcnJheSBlbGVtZW50
cyBwZXIgcGl4ZWwuCisgKi8KK3ZhciBnZXRUeXBlZEFycmF5RWxlbWVudHNQZXJQaXhlbCA9IGZ1
bmN0aW9uKGdsLCBmb3JtYXQsIHR5cGUpIHsKKyAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBn
bC5VTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICBjYXNlIGdsLlVOU0lHTkVEX1NIT1JUXzRfNF80
XzQ6CisgICAgY2FzZSBnbC5VTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgcmV0dXJuIDE7
CisgICAgY2FzZSBnbC5VTlNJR05FRF9CWVRFOgorICAgICAgYnJlYWs7CisgICAgZGVmYXVsdDoK
KyAgICAgIHRocm93ICdub3QgYSBnbCB0eXBlIGZvciBjb2xvciBpbmZvcm1hdGlvbiAnICsgZ2xF
bnVtVG9TdHJpbmcoZ2wsIHR5cGUpOworICB9CisKKyAgc3dpdGNoIChmb3JtYXQpIHsKKyAgICBj
YXNlIGdsLlJHQkE6CisgICAgICByZXR1cm4gNDsKKyAgICBjYXNlIGdsLlJHQjoKKyAgICAgIHJl
dHVybiAzOworICAgIGNhc2UgZ2wuTFVNSU5BTkNFX0FMUEhBOgorICAgICAgcmV0dXJuIDI7Cisg
ICAgY2FzZSBnbC5MVU1JTkFOQ0U6CisgICAgY2FzZSBnbC5BTFBIQToKKyAgICAgIHJldHVybiAx
OworICAgIGRlZmF1bHQ6CisgICAgICB0aHJvdyAndW5rbm93biBnbCBmb3JtYXQgJyArIGdsRW51
bVRvU3RyaW5nKGdsLCBmb3JtYXQpOworICB9Cit9OworCisvKioKKyAqIEZpbGxzIHRoZSBnaXZl
biB0ZXh0dXJlIHdpdGggYSBzb2xpZCBjb2xvci4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5n
Q29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0g
eyFXZWJHTFRleHR1cmV9IHRleCBUaGUgdGV4dHVyZSB0byBmaWxsLgorICogQHBhcmFtIHtudW1i
ZXJ9IHdpZHRoIFRoZSB3aWR0aCBvZiB0aGUgdGV4dHVyZSB0byBjcmVhdGUuCisgKiBAcGFyYW0g
e251bWJlcn0gaGVpZ2h0IFRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUgdG8gY3JlYXRlLgorICog
QHBhcmFtIHshQXJyYXkuPG51bWJlcj59IGNvbG9yIFRoZSBjb2xvciB0byBmaWxsIHdpdGguCisg
KiAgICAgICAgd2hlcmUgZWFjaCBlbGVtZW50IGlzIGluIHRoZSByYW5nZSAwIHRvIDI1NS4KKyAq
IEBwYXJhbSB7bnVtYmVyfSBvcHRfbGV2ZWwgVGhlIGxldmVsIG9mIHRoZSB0ZXh0dXJlIHRvIGZp
bGwuIERlZmF1bHQgPSAwLgorICogQHBhcmFtIHtudW1iZXJ9IG9wdF9mb3JtYXQgVGhlIGZvcm1h
dCBmb3IgdGhlIHRleHR1cmUuCisgKiBAcGFyYW0ge251bWJlcn0gb3B0X2ludGVybmFsRm9ybWF0
IFRoZSBpbnRlcm5hbCBmb3JtYXQgZm9yIHRoZSB0ZXh0dXJlLgorICovCit2YXIgZmlsbFRleHR1
cmUgPSBmdW5jdGlvbihnbCwgdGV4LCB3aWR0aCwgaGVpZ2h0LCBjb2xvciwgb3B0X2xldmVsLCBv
cHRfZm9ybWF0LCBvcHRfdHlwZSwgb3B0X2ludGVybmFsRm9ybWF0KSB7CisgIG9wdF9sZXZlbCA9
IG9wdF9sZXZlbCB8fCAwOworICBvcHRfZm9ybWF0ID0gb3B0X2Zvcm1hdCB8fCBnbC5SR0JBOwor
ICBvcHRfdHlwZSA9IG9wdF90eXBlIHx8IGdsLlVOU0lHTkVEX0JZVEU7CisgIG9wdF9pbnRlcm5h
bEZvcm1hdCA9IG9wdF9pbnRlcm5hbEZvcm1hdCB8fCBvcHRfZm9ybWF0OworICB2YXIgcGFjayA9
IGdsLmdldFBhcmFtZXRlcihnbC5VTlBBQ0tfQUxJR05NRU5UKTsKKyAgdmFyIG51bUNvbXBvbmVu
dHMgPSBjb2xvci5sZW5ndGg7CisgIHZhciBieXRlc1BlckNvbXBvbmVudCA9IGdldEJ5dGVzUGVy
Q29tcG9uZW50KGdsLCBvcHRfdHlwZSk7CisgIHZhciByb3dTaXplID0gbnVtQ29tcG9uZW50cyAq
IHdpZHRoICogYnl0ZXNQZXJDb21wb25lbnQ7CisgIC8vIFNlZSBlcXVhdGlvbiAzLjEwIGluIEVT
IDIuMCBzcGVjIGFuZCBlcXVhdGlvbiAzLjEzIGluIEVTIDMuMCBzcGVjIGZvciBwYWRkZWRSb3dM
ZW5ndGggY2FsY3VsYXRpb24uCisgIC8vIGsgaXMgcGFkZGVkUm93TGVuZ3RoLgorICAvLyBuIGlz
IG51bUNvbXBvbmVudHMuCisgIC8vIGwgaXMgd2lkdGguCisgIC8vIGEgaXMgcGFjay4KKyAgLy8g
cyBpcyBieXRlc1BlckNvbXBvbmVudC4KKyAgdmFyIHBhZGRlZFJvd0xlbmd0aDsKKyAgaWYgKGJ5
dGVzUGVyQ29tcG9uZW50ID49IHBhY2spCisgICAgcGFkZGVkUm93TGVuZ3RoID0gbnVtQ29tcG9u
ZW50cyAqIHdpZHRoOworICBlbHNlCisgICAgcGFkZGVkUm93TGVuZ3RoID0gTWF0aC5mbG9vcigo
cm93U2l6ZSArIHBhY2sgLSAxKSAvIHBhY2spICogcGFjayAvIGJ5dGVzUGVyQ29tcG9uZW50Owor
ICB2YXIgc2l6ZSA9IHdpZHRoICogbnVtQ29tcG9uZW50cyArIChoZWlnaHQgLSAxKSAqIHBhZGRl
ZFJvd0xlbmd0aDsKKyAgdmFyIGJ1ZiA9IG5ldyAoZ2xUeXBlVG9UeXBlZEFycmF5VHlwZShnbCwg
b3B0X3R5cGUpKShzaXplKTsKKyAgZm9yICh2YXIgeXkgPSAwOyB5eSA8IGhlaWdodDsgKyt5eSkg
eworICAgIHZhciBvZmYgPSB5eSAqIHBhZGRlZFJvd0xlbmd0aDsKKyAgICBmb3IgKHZhciB4eCA9
IDA7IHh4IDwgd2lkdGg7ICsreHgpIHsKKyAgICAgIGZvciAodmFyIGpqID0gMDsgamogPCBudW1D
b21wb25lbnRzOyArK2pqKSB7CisgICAgICAgIGJ1ZltvZmYrK10gPSBjb2xvcltqal07CisgICAg
ICB9CisgICAgfQorICB9CisgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleCk7Cisg
IGdsLnRleEltYWdlMkQoCisgICAgICBnbC5URVhUVVJFXzJELCBvcHRfbGV2ZWwsIG9wdF9pbnRl
cm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwKKyAgICAgIG9wdF9mb3JtYXQsIG9wdF90eXBl
LCBidWYpOworfTsKKworLyoqCisgKiBDcmVhdGVzIGEgdGV4dHVyZSBhbmQgZmlsbHMgaXQgd2l0
aCBhIHNvbGlkIGNvbG9yLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBU
aGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0
aCBUaGUgd2lkdGggb2YgdGhlIHRleHR1cmUgdG8gY3JlYXRlLgorICogQHBhcmFtIHtudW1iZXJ9
IGhlaWdodCBUaGUgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlIHRvIGNyZWF0ZS4KKyAqIEBwYXJhbSB7
IUFycmF5LjxudW1iZXI+fSBjb2xvciBUaGUgY29sb3IgdG8gZmlsbCB3aXRoLiBBIDQgZWxlbWVu
dCBhcnJheQorICogICAgICAgIHdoZXJlIGVhY2ggZWxlbWVudCBpcyBpbiB0aGUgcmFuZ2UgMCB0
byAyNTUuCisgKiBAcmV0dXJuIHshV2ViR0xUZXh0dXJlfQorICovCit2YXIgY3JlYXRlQ29sb3Jl
ZFRleHR1cmUgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgY29sb3IpIHsKKyAgdmFyIHRl
eCA9IGdsLmNyZWF0ZVRleHR1cmUoKTsKKyAgZmlsbFRleHR1cmUoZ2wsIHRleCwgd2lkdGgsIGhl
aWdodCwgY29sb3IpOworICByZXR1cm4gdGV4OworfTsKKwordmFyIHVieXRlVG9GbG9hdCA9IGZ1
bmN0aW9uKGMpIHsKKyAgcmV0dXJuIGMgLyAyNTU7Cit9OworCit2YXIgdWJ5dGVDb2xvclRvRmxv
YXRDb2xvciA9IGZ1bmN0aW9uKGNvbG9yKSB7CisgIHZhciBmbG9hdENvbG9yID0gW107CisgIGZv
ciAodmFyIGlpID0gMDsgaWkgPCBjb2xvci5sZW5ndGg7ICsraWkpIHsKKyAgICBmbG9hdENvbG9y
W2lpXSA9IHVieXRlVG9GbG9hdChjb2xvcltpaV0pOworICB9CisgIHJldHVybiBmbG9hdENvbG9y
OworfTsKKworLyoqCisgKiBTZXRzIHRoZSAidV9jb2xvciIgdW5pZm9ybSBvZiB0aGUgY3VycmVu
dCBwcm9ncmFtIHRvIGNvbG9yLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBn
bCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7IUFycmF5Ljxu
dW1iZXI+fSBjb2xvciA0IGVsZW1lbnQgYXJyYXkgb2YgMC0xIGNvbG9yCisgKiAgICAgIGNvbXBv
bmVudHMuCisgKi8KK3ZhciBzZXRGbG9hdERyYXdDb2xvciA9IGZ1bmN0aW9uKGdsLCBjb2xvcikg
eworICB2YXIgcHJvZ3JhbSA9IGdsLmdldFBhcmFtZXRlcihnbC5DVVJSRU5UX1BST0dSQU0pOwor
ICB2YXIgY29sb3JMb2NhdGlvbiA9IGdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAidV9j
b2xvciIpOworICBnbC51bmlmb3JtNGZ2KGNvbG9yTG9jYXRpb24sIGNvbG9yKTsKK307CisKKy8q
KgorICogU2V0cyB0aGUgInVfY29sb3IiIHVuaWZvcm0gb2YgdGhlIGN1cnJlbnQgcHJvZ3JhbSB0
byBjb2xvci4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdM
UmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gY29s
b3IgNCBlbGVtZW50IGFycmF5IG9mIDAtMjU1IGNvbG9yCisgKiAgICAgIGNvbXBvbmVudHMuCisg
Ki8KK3ZhciBzZXRVQnl0ZURyYXdDb2xvciA9IGZ1bmN0aW9uKGdsLCBjb2xvcikgeworICBzZXRG
bG9hdERyYXdDb2xvcihnbCwgdWJ5dGVDb2xvclRvRmxvYXRDb2xvcihjb2xvcikpOworfTsKKwor
LyoqCisgKiBEcmF3cyBhIHByZXZpb3VzbHkgc2V0dXAgcXVhZCBpbiB0aGUgZ2l2ZW4gY29sb3Iu
CisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHshQXJyYXkuPG51bWJlcj59IGNvbG9yIFRoZSBj
b2xvciB0byBkcmF3IHdpdGguIEEgNAorICogICAgICAgIGVsZW1lbnQgYXJyYXkgd2hlcmUgZWFj
aCBlbGVtZW50IGlzIGluIHRoZSByYW5nZSAwIHRvCisgKiAgICAgICAgMS4KKyAqLwordmFyIGRy
YXdGbG9hdENvbG9yUXVhZCA9IGZ1bmN0aW9uKGdsLCBjb2xvcikgeworICB2YXIgcHJvZ3JhbSA9
IGdsLmdldFBhcmFtZXRlcihnbC5DVVJSRU5UX1BST0dSQU0pOworICB2YXIgY29sb3JMb2NhdGlv
biA9IGdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAidV9jb2xvciIpOworICBnbC51bmlm
b3JtNGZ2KGNvbG9yTG9jYXRpb24sIGNvbG9yKTsKKyAgZ2wuZHJhd0FycmF5cyhnbC5UUklBTkdM
RVMsIDAsIDYpOworfTsKKworCisvKioKKyAqIERyYXdzIGEgcHJldmlvdXNseSBzZXR1cCBxdWFk
IGluIHRoZSBnaXZlbiBjb2xvci4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0g
Z2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0geyFBcnJheS48
bnVtYmVyPn0gY29sb3IgVGhlIGNvbG9yIHRvIGRyYXcgd2l0aC4gQSA0CisgKiAgICAgICAgZWxl
bWVudCBhcnJheSB3aGVyZSBlYWNoIGVsZW1lbnQgaXMgaW4gdGhlIHJhbmdlIDAgdG8KKyAqICAg
ICAgICAyNTUuCisgKi8KK3ZhciBkcmF3VUJ5dGVDb2xvclF1YWQgPSBmdW5jdGlvbihnbCwgY29s
b3IpIHsKKyAgZHJhd0Zsb2F0Q29sb3JRdWFkKGdsLCB1Ynl0ZUNvbG9yVG9GbG9hdENvbG9yKGNv
bG9yKSk7Cit9OworCisvKioKKyAqIERyYXdzIGEgcHJldmlvdXNseSBzZXR1cFVuaXRRdWFkLgor
ICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdD
b250ZXh0IHRvIHVzZS4KKyAqLwordmFyIGRyYXdVbml0UXVhZCA9IGZ1bmN0aW9uKGdsKSB7Cisg
IGdsLmRyYXdBcnJheXMoZ2wuVFJJQU5HTEVTLCAwLCA2KTsKK307CisKK3ZhciBkdW1teVNldFBy
b2dyYW1BbmREcmF3Tm90aGluZyA9IGZ1bmN0aW9uKGdsKSB7CisgIGlmICghZ2wuX3d0dUR1bW15
UHJvZ3JhbSkgeworICAgIGdsLl93dHVEdW1teVByb2dyYW0gPSBzZXR1cFByb2dyYW0oZ2wsIFsK
KyAgICAgICJ2b2lkIG1haW4oKSB7IGdsX1Bvc2l0aW9uID0gdmVjNCgwLjApOyB9IiwKKyAgICAg
ICJ2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTsgfSIKKyAgICBdLCBbXSwg
W10pOworICB9CisgIGdsLnVzZVByb2dyYW0oZ2wuX3d0dUR1bW15UHJvZ3JhbSk7CisgIGdsLmRy
YXdBcnJheXMoZ2wuVFJJQU5HTEVTLCAwLCAzKTsKK307CisKKy8qKgorICogQ2xlYXJzIHRoZW4g
RHJhd3MgYSBwcmV2aW91c2x5IHNldHVwVW5pdFF1YWQuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRl
cmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBh
cmFtIHshQXJyYXkuPG51bWJlcj59IG9wdF9jb2xvciBUaGUgY29sb3IgdG8gZmlsbCBjbGVhciB3
aXRoIGJlZm9yZQorICogICAgICAgIGRyYXdpbmcuIEEgNCBlbGVtZW50IGFycmF5IHdoZXJlIGVh
Y2ggZWxlbWVudCBpcyBpbiB0aGUgcmFuZ2UgMCB0bworICogICAgICAgIDI1NS4gRGVmYXVsdCBb
MjU1LCAyNTUsIDI1NSwgMjU1XQorICovCit2YXIgY2xlYXJBbmREcmF3VW5pdFF1YWQgPSBmdW5j
dGlvbihnbCwgb3B0X2NvbG9yKSB7CisgIG9wdF9jb2xvciA9IG9wdF9jb2xvciB8fCBbMjU1LCAy
NTUsIDI1NSwgMjU1XTsKKyAgZ2wuY2xlYXJDb2xvcigKKyAgICAgIG9wdF9jb2xvclswXSAvIDI1
NSwKKyAgICAgIG9wdF9jb2xvclsxXSAvIDI1NSwKKyAgICAgIG9wdF9jb2xvclsyXSAvIDI1NSwK
KyAgICAgIG9wdF9jb2xvclszXSAvIDI1NSk7CisgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZFUl9C
SVQgfCBnbC5ERVBUSF9CVUZGRVJfQklUKTsKKyAgZHJhd1VuaXRRdWFkKGdsKTsKK307CisKKy8q
KgorICogRHJhd3MgYSBxdWFkIHByZXZpb3VzbHkgc2V0dXAgd2l0aCBzZXR1cEluZGV4ZWRRdWFk
LgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJp
bmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7bnVtYmVyfSBncmlkUmVzIFJlc29sdXRpb24g
b2YgZ3JpZC4KKyAqLwordmFyIGRyYXdJbmRleGVkUXVhZCA9IGZ1bmN0aW9uKGdsLCBncmlkUmVz
KSB7CisgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIGdyaWRSZXMgKiBncmlkUmVzICog
NiwgZ2wuVU5TSUdORURfU0hPUlQsIDApOworfTsKKworLyoqCisgKiBEcmF3cyBhIHByZXZpb3Vz
bHkgc2V0dXBJbmRleGVkUXVhZAorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBn
bCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7bnVtYmVyfSBn
cmlkUmVzIFJlc29sdXRpb24gb2YgZ3JpZC4KKyAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBv
cHRfY29sb3IgVGhlIGNvbG9yIHRvIGZpbGwgY2xlYXIgd2l0aCBiZWZvcmUKKyAqICAgICAgICBk
cmF3aW5nLiBBIDQgZWxlbWVudCBhcnJheSB3aGVyZSBlYWNoIGVsZW1lbnQgaXMgaW4gdGhlIHJh
bmdlIDAgdG8KKyAqICAgICAgICAyNTUuIERlZmF1bHQgWzI1NSwgMjU1LCAyNTUsIDI1NV0KKyAq
LwordmFyIGNsZWFyQW5kRHJhd0luZGV4ZWRRdWFkID0gZnVuY3Rpb24oZ2wsIGdyaWRSZXMsIG9w
dF9jb2xvcikgeworICBvcHRfY29sb3IgPSBvcHRfY29sb3IgfHwgWzI1NSwgMjU1LCAyNTUsIDI1
NV07CisgIGdsLmNsZWFyQ29sb3IoCisgICAgICBvcHRfY29sb3JbMF0gLyAyNTUsCisgICAgICBv
cHRfY29sb3JbMV0gLyAyNTUsCisgICAgICBvcHRfY29sb3JbMl0gLyAyNTUsCisgICAgICBvcHRf
Y29sb3JbM10gLyAyNTUpOworICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUIHwgZ2wuREVQ
VEhfQlVGRkVSX0JJVCk7CisgIGRyYXdJbmRleGVkUXVhZChnbCwgZ3JpZFJlcyk7Cit9OworCisv
KioKKyAqIENsaXBzIGEgcmFuZ2UgdG8gbWluLCBtYXgKKyAqIChFZy4gY2xpcFRvUmFuZ2UoLTUs
NywwLDIwKSB3b3VsZCByZXR1cm4ge3ZhbHVlOjAsZXh0ZW50OjJ9CisgKiBAcGFyYW0ge251bWJl
cn0gdmFsdWUgc3RhcnQgb2YgcmFuZ2UKKyAqIEBwYXJhbSB7bnVtYmVyfSBleHRlbnQgZXh0ZW50
IG9mIHJhbmdlCisgKiBAcGFyYW0ge251bWJlcn0gbWluIG1pbi4KKyAqIEBwYXJhbSB7bnVtYmVy
fSBtYXggbWF4LgorICogQHJldHVybiB7IXt2YWx1ZTpudW1iZXIsZXh0ZW50Om51bWJlcn19IFRo
ZSBjbGlwcGVkIHZhbHVlLgorICovCit2YXIgY2xpcFRvUmFuZ2UgPSBmdW5jdGlvbih2YWx1ZSwg
ZXh0ZW50LCBtaW4sIG1heCkgeworICBpZiAodmFsdWUgPCBtaW4pIHsKKyAgICBleHRlbnQgLT0g
bWluIC0gdmFsdWU7CisgICAgdmFsdWUgPSBtaW47CisgIH0KKyAgdmFyIGVuZCA9IHZhbHVlICsg
ZXh0ZW50OworICBpZiAoZW5kID4gbWF4KSB7CisgICAgZXh0ZW50IC09IGVuZCAtIG1heDsKKyAg
fQorICBpZiAoZXh0ZW50IDwgMCkgeworICAgIHZhbHVlID0gbWF4OworICAgIGV4dGVudCA9IDA7
CisgIH0KKyAgcmV0dXJuIHt2YWx1ZTp2YWx1ZSwgZXh0ZW50OiBleHRlbnR9OworfTsKKworLyoq
CisgKiBEZXRlcm1pbmVzIGlmIHRoZSBwYXNzZWQgY29udGV4dCBpcyBhbiBpbnN0YW5jZSBvZiBh
IFdlYkdMUmVuZGVyaW5nQ29udGV4dAorICogb3IgbGF0ZXIgdmFyaWFudCAobGlrZSBXZWJHTDJS
ZW5kZXJpbmdDb250ZXh0KQorICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0fSBjdHgg
VGhlIGNvbnRleHQgdG8gY2hlY2suCisgKi8KK3ZhciBpc1dlYkdMQ29udGV4dCA9IGZ1bmN0aW9u
KGN0eCkgeworICBpZiAoY3R4IGluc3RhbmNlb2YgV2ViR0xSZW5kZXJpbmdDb250ZXh0KQorICAg
IHJldHVybiB0cnVlOworCisgIGlmICgnV2ViR0wyUmVuZGVyaW5nQ29udGV4dCcgaW4gd2luZG93
ICYmIGN0eCBpbnN0YW5jZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQpCisgICAgcmV0dXJuIHRy
dWU7CisKKyAgcmV0dXJuIGZhbHNlOworfTsKKworLyoqCisgKiBDcmVhdGVzIGEgY2hlY2sgcmVj
dCBpcyB1c2VkIGJ5IGNoZWNrQ2FudmFzUmVjdHMuCisgKiBAcGFyYW0ge251bWJlcn0geCBsZWZ0
IGNvcm5lciBvZiByZWdpb24gdG8gY2hlY2suCisgKiBAcGFyYW0ge251bWJlcn0geSBib3R0b20g
Y29ybmVyIG9mIHJlZ2lvbiB0byBjaGVjayBpbiBjYXNlIG9mIGNoZWNraW5nIGZyb20KKyAqICAg
ICAgICBhIEdMIGNvbnRleHQgb3IgdG9wIGNvcm5lciBpbiBjYXNlIG9mIGNoZWNraW5nIGZyb20g
YSAyRCBjb250ZXh0LgorICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIHdpZHRoIG9mIHJlZ2lvbiB0
byBjaGVjay4KKyAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgd2lkdGggb2YgcmVnaW9uIHRvIGNo
ZWNrLgorICogQHBhcmFtIHshQXJyYXkuPG51bWJlcj59IGNvbG9yIFRoZSBjb2xvciBleHBlY3Rl
ZC4gQSA0IGVsZW1lbnQgYXJyYXkgd2hlcmUKKyAqICAgICAgICBlYWNoIGVsZW1lbnQgaXMgaW4g
dGhlIHJhbmdlIDAgdG8gMjU1LgorICogQHBhcmFtIHtzdHJpbmd9IG9wdF9tc2cgTWVzc2FnZSB0
byBhc3NvY2lhdGUgd2l0aCBzdWNjZXNzLiBFZworICogICAgICAgICgic2hvdWxkIGJlIHJlZCIp
LgorICogQHBhcmFtIHtudW1iZXJ9IG9wdF9lcnJvclJhbmdlIE9wdGlvbmFsLiBBY2NlcHRhYmxl
IGVycm9yIGluCisgKiAgICAgICAgY29sb3IgY2hlY2tpbmcuIDAgYnkgZGVmYXVsdC4KKyAqLwor
dmFyIG1ha2VDaGVja1JlY3QgPSBmdW5jdGlvbih4LCB5LCB3aWR0aCwgaGVpZ2h0LCBjb2xvciwg
bXNnLCBlcnJvclJhbmdlKSB7CisgIHZhciByZWN0ID0geworICAgICd4JzogeCwgJ3knOiB5LAor
ICAgICd3aWR0aCc6IHdpZHRoLCAnaGVpZ2h0JzogaGVpZ2h0LAorICAgICdjb2xvcic6IGNvbG9y
LCAnbXNnJzogbXNnLAorICAgICdlcnJvclJhbmdlJzogZXJyb3JSYW5nZSwKKworICAgICdjaGVj
a1JlY3QnOiBmdW5jdGlvbiAoYnVmLCBsLCBiLCB3KSB7CisgICAgICBmb3IgKHZhciBweCA9ICh4
IC0gbCkgOyBweCA8ICh4ICsgd2lkdGggLSBsKSA7ICsrcHgpIHsKKyAgICAgICAgZm9yICh2YXIg
cHkgPSAoeSAtIGIpIDsgcHkgPCAoeSArIGhlaWdodCAtIGIpIDsgKytweSkgeworICAgICAgICAg
IHZhciBvZmZzZXQgPSAocHkgKiB3ICsgcHgpICogNDsKKyAgICAgICAgICBmb3IgKHZhciBqID0g
MDsgaiA8IGNvbG9yLmxlbmd0aDsgKytqKSB7CisgICAgICAgICAgICBpZiAoTWF0aC5hYnMoYnVm
W29mZnNldCArIGpdIC0gY29sb3Jbal0pID4gZXJyb3JSYW5nZSkgeworICAgICAgICAgICAgICB0
ZXN0RmFpbGVkKG1zZyk7CisgICAgICAgICAgICAgIHZhciB3YXMgPSBidWZbb2Zmc2V0ICsgMF0u
dG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgZm9yIChqID0gMTsgaiA8IGNvbG9yLmxlbmd0aDsg
KytqKSB7CisgICAgICAgICAgICAgICAgd2FzICs9ICIsIiArIGJ1ZltvZmZzZXQgKyBqXTsKKyAg
ICAgICAgICAgICAgfQorICAgICAgICAgICAgICBkZWJ1ZygnYXQgKCcgKyBweCArICcsICcgKyBw
eSArCisgICAgICAgICAgICAgICAgICAgICcpIGV4cGVjdGVkOiAnICsgY29sb3IgKyAnIHdhcyAn
ICsgd2FzKTsKKyAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAgICAg
IH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgdGVzdFBhc3NlZChtc2cpOworICAgIH0KKyAg
fQorICByZXR1cm4gcmVjdDsKK307CisKKy8qKgorICogQ2hlY2tzIHRoYXQgYSBwb3J0aW9ucyBv
ZiBhIGNhbnZhcyBvciB0aGUgY3VycmVudGx5IGF0dGFjaGVkIGZyYW1lYnVmZmVyIGlzIDEgY29s
b3IuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR8Q2FudmFzUmVuZGVyaW5nQ29u
dGV4dDJEfSBnbCBUaGUKKyAqICAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0IG9yIDJEIGNv
bnRleHQgdG8gdXNlLgorICogQHBhcmFtIHshQXJyYXkuPGNoZWNrUmVjdD59IGFycmF5IG9mIHJl
Y3RzIHRvIGNoZWNrIGZvciBtYXRjaGluZyBjb2xvci4KKyAqLwordmFyIGNoZWNrQ2FudmFzUmVj
dHMgPSBmdW5jdGlvbihnbCwgcmVjdHMpIHsKKyAgaWYgKHJlY3RzLmxlbmd0aCA+IDApIHsKKyAg
ICB2YXIgbGVmdCA9IHJlY3RzWzBdLng7CisgICAgdmFyIHJpZ2h0ID0gcmVjdHNbMF0ueCArIHJl
Y3RzWzFdLndpZHRoOworICAgIHZhciBib3R0b20gPSByZWN0c1swXS55OworICAgIHZhciB0b3Ag
PSByZWN0c1swXS55ICsgcmVjdHNbMF0uaGVpZ2h0OworICAgIGZvciAodmFyIGkgPSAxOyBpIDwg
cmVjdHMubGVuZ3RoOyArK2kpIHsKKyAgICAgIGxlZnQgPSBNYXRoLm1pbihsZWZ0LCByZWN0c1tp
XS54KTsKKyAgICAgIHJpZ2h0ID0gTWF0aC5tYXgocmlnaHQsIHJlY3RzW2ldLnggKyByZWN0c1tp
XS53aWR0aCk7CisgICAgICBib3R0b20gPSBNYXRoLm1pbihib3R0b20sIHJlY3RzW2ldLnkpOwor
ICAgICAgdG9wID0gTWF0aC5tYXgodG9wLCByZWN0c1tpXS55ICsgcmVjdHNbaV0uaGVpZ2h0KTsK
KyAgICB9CisgICAgdmFyIHdpZHRoID0gcmlnaHQgLSBsZWZ0OworICAgIHZhciBoZWlnaHQgPSB0
b3AgLSBib3R0b207CisgICAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KHdpZHRoICogaGVpZ2h0
ICogNCk7CisgICAgZ2wucmVhZFBpeGVscyhsZWZ0LCBib3R0b20sIHdpZHRoLCBoZWlnaHQsIGds
LlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGJ1Zik7CisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBy
ZWN0cy5sZW5ndGg7ICsraSkgeworICAgICAgcmVjdHNbaV0uY2hlY2tSZWN0KGJ1ZiwgbGVmdCwg
Ym90dG9tLCB3aWR0aCk7CisgICAgfQorICB9Cit9OworCisvKioKKyAqIENoZWNrcyB0aGF0IGEg
cG9ydGlvbiBvZiBhIGNhbnZhcyBvciB0aGUgY3VycmVudGx5IGF0dGFjaGVkIGZyYW1lYnVmZmVy
IGlzIDEgY29sb3IuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR8Q2FudmFzUmVu
ZGVyaW5nQ29udGV4dDJEfSBnbCBUaGUKKyAqICAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0
IG9yIDJEIGNvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtudW1iZXJ9IHggbGVmdCBjb3JuZXIg
b2YgcmVnaW9uIHRvIGNoZWNrLgorICogQHBhcmFtIHtudW1iZXJ9IHkgYm90dG9tIGNvcm5lciBv
ZiByZWdpb24gdG8gY2hlY2sgaW4gY2FzZSBvZiBjaGVja2luZyBmcm9tCisgKiAgICAgICAgYSBH
TCBjb250ZXh0IG9yIHRvcCBjb3JuZXIgaW4gY2FzZSBvZiBjaGVja2luZyBmcm9tIGEgMkQgY29u
dGV4dC4KKyAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCB3aWR0aCBvZiByZWdpb24gdG8gY2hlY2su
CisgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IHdpZHRoIG9mIHJlZ2lvbiB0byBjaGVjay4KKyAq
IEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBjb2xvciBUaGUgY29sb3IgZXhwZWN0ZWQuIEEgNCBl
bGVtZW50IGFycmF5IHdoZXJlCisgKiAgICAgICAgZWFjaCBlbGVtZW50IGlzIGluIHRoZSByYW5n
ZSAwIHRvIDI1NS4KKyAqIEBwYXJhbSB7bnVtYmVyfSBvcHRfZXJyb3JSYW5nZSBPcHRpb25hbC4g
QWNjZXB0YWJsZSBlcnJvciBpbgorICogICAgICAgIGNvbG9yIGNoZWNraW5nLiAwIGJ5IGRlZmF1
bHQuCisgKiBAcGFyYW0geyFmdW5jdGlvbigpfSBzYW1lRm4gRnVuY3Rpb24gdG8gY2FsbCBpZiBh
bGwgcGl4ZWxzCisgKiAgICAgICAgYXJlIHRoZSBzYW1lIGFzIGNvbG9yLgorICogQHBhcmFtIHsh
ZnVuY3Rpb24oKX0gZGlmZmVyZW50Rm4gRnVuY3Rpb24gdG8gY2FsbCBpZiBhIHBpeGVsCisgKiAg
ICAgICAgaXMgZGlmZmVyZW50IHRoYW4gY29sb3IKKyAqIEBwYXJhbSB7IWZ1bmN0aW9uKCl9IGxv
Z0ZuIEZ1bmN0aW9uIHRvIGNhbGwgZm9yIGxvZ2dpbmcuCisgKiBAcGFyYW0ge1R5cGVkQXJyYXl9
IG9wdF9yZWFkQmFja0J1ZiBvcHRpb25hbCBidWZmZXIgdG8gcmVhZCBiYWNrIGludG8uCisgKiAg
ICAgICAgVHlwaWNhbGx5IHBhc3NlZCB0byBlaXRoZXIgcmV1c2UgYnVmZmVyLCBvciBzdXBwb3J0
IHJlYWRiYWNrcyBmcm9tCisgKiAgICAgICAgZmxvYXRpbmctcG9pbnQvbm9ybTE2IGZyYW1lYnVm
ZmVycy4KKyAqIEBwYXJhbSB7R0xlbnVtfSBvcHRfcmVhZEJhY2tUeXBlIG9wdGlvbmFsIHJlYWQg
YmFjayB0eXBlLCBkZWZhdWx0aW5nIHRvCisgKiAgICAgICAgZ2wuVU5TSUdORURfQllURS4gQ2Fu
IGJlIHVzZWQgdG8gc3VwcG9ydCByZWFkYmFjayBmcm9tIGZsb2F0aW5nLXBvaW50CisgKiAgICAg
ICAgL25vcm0xNiBmcmFtZWJ1ZmZlcnMuCisgKiBAcGFyYW0ge0dMZW51bX0gb3B0X3JlYWRCYWNr
Rm9ybWF0IG9wdGlvbmFsIHJlYWQgYmFjayBmb3JtYXQsIGRlZmF1bHRpbmcgdG8KKyAqICAgICAg
ICBnbC5SR0JBLiBDYW4gYmUgdXNlZCB0byBzdXBwb3J0IHJlYWRiYWNrIGZyb20gbm9ybTE2Cisg
KiAgICAgICAgZnJhbWVidWZmZXJzLgorICovCit2YXIgY2hlY2tDYW52YXNSZWN0Q29sb3IgPSBm
dW5jdGlvbihnbCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgY29sb3IsIG9wdF9lcnJvclJhbmdlLCBz
YW1lRm4sIGRpZmZlcmVudEZuLCBsb2dGbiwgb3B0X3JlYWRCYWNrQnVmLCBvcHRfcmVhZEJhY2tU
eXBlLCBvcHRfcmVhZEJhY2tGb3JtYXQpIHsKKyAgaWYgKGlzV2ViR0xDb250ZXh0KGdsKSAmJiAh
Z2wuZ2V0UGFyYW1ldGVyKGdsLkZSQU1FQlVGRkVSX0JJTkRJTkcpKSB7CisgICAgLy8gV2UncmUg
cmVhZGluZyB0aGUgYmFja2J1ZmZlciBzbyBjbGlwLgorICAgIHZhciB4ciA9IGNsaXBUb1Jhbmdl
KHgsIHdpZHRoLCAwLCBnbC5jYW52YXMud2lkdGgpOworICAgIHZhciB5ciA9IGNsaXBUb1Jhbmdl
KHksIGhlaWdodCwgMCwgZ2wuY2FudmFzLmhlaWdodCk7CisgICAgaWYgKCF4ci5leHRlbnQgfHwg
IXlyLmV4dGVudCkgeworICAgICAgbG9nRm4oImNoZWNraW5nIHJlY3Q6IGVmZmVjdGl2ZSB3aWR0
aCBvciBoZWlnaHQgaXMgemVybyIpOworICAgICAgc2FtZUZuKCk7CisgICAgICByZXR1cm47Cisg
ICAgfQorICAgIHggPSB4ci52YWx1ZTsKKyAgICB5ID0geXIudmFsdWU7CisgICAgd2lkdGggPSB4
ci5leHRlbnQ7CisgICAgaGVpZ2h0ID0geXIuZXh0ZW50OworICB9CisgIHZhciBlcnJvclJhbmdl
ID0gb3B0X2Vycm9yUmFuZ2UgfHwgMDsKKyAgaWYgKCFlcnJvclJhbmdlLmxlbmd0aCkgeworICAg
IGVycm9yUmFuZ2UgPSBbZXJyb3JSYW5nZSwgZXJyb3JSYW5nZSwgZXJyb3JSYW5nZSwgZXJyb3JS
YW5nZV0KKyAgfQorICB2YXIgYnVmOworICBpZiAoaXNXZWJHTENvbnRleHQoZ2wpKSB7CisgICAg
YnVmID0gb3B0X3JlYWRCYWNrQnVmID8gb3B0X3JlYWRCYWNrQnVmIDogbmV3IFVpbnQ4QXJyYXko
d2lkdGggKiBoZWlnaHQgKiA0KTsKKyAgICB2YXIgcmVhZEJhY2tUeXBlID0gb3B0X3JlYWRCYWNr
VHlwZSA/IG9wdF9yZWFkQmFja1R5cGUgOiBnbC5VTlNJR05FRF9CWVRFOworICAgIHZhciByZWFk
QmFja0Zvcm1hdCA9IG9wdF9yZWFkQmFja0Zvcm1hdCA/IG9wdF9yZWFkQmFja0Zvcm1hdCA6IGds
LlJHQkE7CisgICAgZ2wucmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCByZWFkQmFja0Zv
cm1hdCwgcmVhZEJhY2tUeXBlLCBidWYpOworICB9IGVsc2UgeworICAgIGJ1ZiA9IGdsLmdldElt
YWdlRGF0YSh4LCB5LCB3aWR0aCwgaGVpZ2h0KS5kYXRhOworICB9CisgIGZvciAodmFyIGkgPSAw
OyBpIDwgd2lkdGggKiBoZWlnaHQ7ICsraSkgeworICAgIHZhciBvZmZzZXQgPSBpICogNDsKKyAg
ICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbG9yLmxlbmd0aDsgKytqKSB7CisgICAgICBpZiAoTWF0
aC5hYnMoYnVmW29mZnNldCArIGpdIC0gY29sb3Jbal0pID4gZXJyb3JSYW5nZVtqXSkgeworICAg
ICAgICB2YXIgd2FzID0gYnVmW29mZnNldCArIDBdLnRvU3RyaW5nKCk7CisgICAgICAgIGZvciAo
aiA9IDE7IGogPCBjb2xvci5sZW5ndGg7ICsraikgeworICAgICAgICAgIHdhcyArPSAiLCIgKyBi
dWZbb2Zmc2V0ICsgal07CisgICAgICAgIH0KKyAgICAgICAgZGlmZmVyZW50Rm4oJ2F0ICgnICsg
KHggKyAoaSAlIHdpZHRoKSkgKyAnLCAnICsgKHkgKyBNYXRoLmZsb29yKGkgLyB3aWR0aCkpICsK
KyAgICAgICAgICAgICAgICAgICAgJykgZXhwZWN0ZWQ6ICcgKyBjb2xvciArICcgd2FzICcgKyB3
YXMpOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgfQorICB9CisgIHNhbWVGbigpOwor
fTsKKworLyoqCisgKiBDaGVja3MgdGhhdCBhIHBvcnRpb24gb2YgYSBjYW52YXMgb3IgdGhlIGN1
cnJlbnRseSBhdHRhY2hlZCBmcmFtZWJ1ZmZlciBpcyAxIGNvbG9yLgorICogQHBhcmFtIHshV2Vi
R0xSZW5kZXJpbmdDb250ZXh0fENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gZ2wgVGhlCisgKiAg
ICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCBvciAyRCBjb250ZXh0IHRvIHVzZS4KKyAqIEBw
YXJhbSB7bnVtYmVyfSB4IGxlZnQgY29ybmVyIG9mIHJlZ2lvbiB0byBjaGVjay4KKyAqIEBwYXJh
bSB7bnVtYmVyfSB5IGJvdHRvbSBjb3JuZXIgb2YgcmVnaW9uIHRvIGNoZWNrIGluIGNhc2Ugb2Yg
Y2hlY2tpbmcgZnJvbQorICogICAgICAgIGEgR0wgY29udGV4dCBvciB0b3AgY29ybmVyIGluIGNh
c2Ugb2YgY2hlY2tpbmcgZnJvbSBhIDJEIGNvbnRleHQuCisgKiBAcGFyYW0ge251bWJlcn0gd2lk
dGggd2lkdGggb2YgcmVnaW9uIHRvIGNoZWNrLgorICogQHBhcmFtIHtudW1iZXJ9IGhlaWdodCB3
aWR0aCBvZiByZWdpb24gdG8gY2hlY2suCisgKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gY29s
b3IgVGhlIGNvbG9yIGV4cGVjdGVkLiBBIDQgZWxlbWVudCBhcnJheSB3aGVyZQorICogICAgICAg
IGVhY2ggZWxlbWVudCBpcyBpbiB0aGUgcmFuZ2UgMCB0byAyNTUuCisgKiBAcGFyYW0ge3N0cmlu
Z30gb3B0X21zZyBNZXNzYWdlIHRvIGFzc29jaWF0ZSB3aXRoIHN1Y2Nlc3Mgb3IgZmFpbHVyZS4g
RWcKKyAqICAgICAgICAoInNob3VsZCBiZSByZWQiKS4KKyAqIEBwYXJhbSB7bnVtYmVyfSBvcHRf
ZXJyb3JSYW5nZSBPcHRpb25hbC4gQWNjZXB0YWJsZSBlcnJvciBpbgorICogICAgICAgIGNvbG9y
IGNoZWNraW5nLiAwIGJ5IGRlZmF1bHQuCisgKiBAcGFyYW0ge1R5cGVkQXJyYXl9IG9wdF9yZWFk
QmFja0J1ZiBvcHRpb25hbCBidWZmZXIgdG8gcmVhZCBiYWNrIGludG8uCisgKiAgICAgICAgVHlw
aWNhbGx5IHBhc3NlZCB0byBlaXRoZXIgcmV1c2UgYnVmZmVyLCBvciBzdXBwb3J0IHJlYWRiYWNr
cyBmcm9tCisgKiAgICAgICAgZmxvYXRpbmctcG9pbnQvbm9ybTE2IGZyYW1lYnVmZmVycy4KKyAq
IEBwYXJhbSB7R0xlbnVtfSBvcHRfcmVhZEJhY2tUeXBlIG9wdGlvbmFsIHJlYWQgYmFjayB0eXBl
LCBkZWZhdWx0aW5nIHRvCisgKiAgICAgICAgZ2wuVU5TSUdORURfQllURS4gQ2FuIGJlIHVzZWQg
dG8gc3VwcG9ydCByZWFkYmFjayBmcm9tIGZsb2F0aW5nLXBvaW50CisgKiAgICAgICAgL25vcm0x
NiBmcmFtZWJ1ZmZlcnMuCisgKiBAcGFyYW0ge0dMZW51bX0gb3B0X3JlYWRCYWNrRm9ybWF0IG9w
dGlvbmFsIHJlYWQgYmFjayBmb3JtYXQsIGRlZmF1bHRpbmcgdG8KKyAqICAgICAgICBnbC5SR0JB
LiBDYW4gYmUgdXNlZCB0byBzdXBwb3J0IHJlYWRiYWNrIGZyb20gZmxvYXRpbmctcG9pbnQKKyAq
ICAgICAgICAvbm9ybTE2IGZyYW1lYnVmZmVycy4KKyAqLwordmFyIGNoZWNrQ2FudmFzUmVjdCA9
IGZ1bmN0aW9uKGdsLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBjb2xvciwgb3B0X21zZywgb3B0X2Vy
cm9yUmFuZ2UsIG9wdF9yZWFkQmFja0J1Ziwgb3B0X3JlYWRCYWNrVHlwZSwgb3B0X3JlYWRCYWNr
Rm9ybWF0KSB7CisgIGNoZWNrQ2FudmFzUmVjdENvbG9yKAorICAgICAgZ2wsIHgsIHksIHdpZHRo
LCBoZWlnaHQsIGNvbG9yLCBvcHRfZXJyb3JSYW5nZSwKKyAgICAgIGZ1bmN0aW9uKCkgeworICAg
ICAgICB2YXIgbXNnID0gb3B0X21zZzsKKyAgICAgICAgaWYgKG1zZyA9PT0gdW5kZWZpbmVkKQor
ICAgICAgICAgIG1zZyA9ICJzaG91bGQgYmUgIiArIGNvbG9yLnRvU3RyaW5nKCk7CisgICAgICAg
IHRlc3RQYXNzZWQobXNnKTsKKyAgICAgIH0sCisgICAgICBmdW5jdGlvbihkaWZmZXJlbnRNc2cp
IHsKKyAgICAgICAgdmFyIG1zZyA9IG9wdF9tc2c7CisgICAgICAgIGlmIChtc2cgPT09IHVuZGVm
aW5lZCkKKyAgICAgICAgICBtc2cgPSAic2hvdWxkIGJlICIgKyBjb2xvci50b1N0cmluZygpOwor
ICAgICAgICB0ZXN0RmFpbGVkKG1zZyArICJcbiIgKyBkaWZmZXJlbnRNc2cpOworICAgICAgfSwK
KyAgICAgIGRlYnVnLAorICAgICAgb3B0X3JlYWRCYWNrQnVmLAorICAgICAgb3B0X3JlYWRCYWNr
VHlwZSwKKyAgICAgIG9wdF9yZWFkQmFja0Zvcm1hdCk7Cit9OworCisvKioKKyAqIENoZWNrcyB0
aGF0IGFuIGVudGlyZSBjYW52YXMgb3IgdGhlIGN1cnJlbnRseSBhdHRhY2hlZCBmcmFtZWJ1ZmZl
ciBpcyAxIGNvbG9yLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fENhbnZhc1Jl
bmRlcmluZ0NvbnRleHQyRH0gZ2wgVGhlCisgKiAgICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4
dCBvciAyRCBjb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBjb2xv
ciBUaGUgY29sb3IgZXhwZWN0ZWQuIEEgNCBlbGVtZW50IGFycmF5IHdoZXJlCisgKiAgICAgICAg
ZWFjaCBlbGVtZW50IGlzIGluIHRoZSByYW5nZSAwIHRvIDI1NS4KKyAqIEBwYXJhbSB7c3RyaW5n
fSBtc2cgTWVzc2FnZSB0byBhc3NvY2lhdGUgd2l0aCBzdWNjZXNzLiBFZyAoInNob3VsZCBiZSBy
ZWQiKS4KKyAqIEBwYXJhbSB7bnVtYmVyfSBlcnJvclJhbmdlIE9wdGlvbmFsLiBBY2NlcHRhYmxl
IGVycm9yIGluCisgKiAgICAgICAgY29sb3IgY2hlY2tpbmcuIDAgYnkgZGVmYXVsdC4KKyAqLwor
dmFyIGNoZWNrQ2FudmFzID0gZnVuY3Rpb24oZ2wsIGNvbG9yLCBtc2csIGVycm9yUmFuZ2UpIHsK
KyAgY2hlY2tDYW52YXNSZWN0KGdsLCAwLCAwLCBnbC5jYW52YXMud2lkdGgsIGdsLmNhbnZhcy5o
ZWlnaHQsIGNvbG9yLCBtc2csIGVycm9yUmFuZ2UpOworfTsKKworLyoqCisgKiBDaGVja3MgYSBy
ZWN0YW5ndWxhciBhcmVhIGJvdGggaW5zaWRlIHRoZSBhcmVhIGFuZCBvdXRzaWRlCisgKiB0aGUg
YXJlYS4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dHxDYW52YXNSZW5kZXJpbmdD
b250ZXh0MkR9IGdsIFRoZQorICogICAgICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQgb3IgMkQg
Y29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge251bWJlcn0geCBsZWZ0IGNvcm5lciBvZiByZWdp
b24gdG8gY2hlY2suCisgKiBAcGFyYW0ge251bWJlcn0geSBib3R0b20gY29ybmVyIG9mIHJlZ2lv
biB0byBjaGVjayBpbiBjYXNlIG9mIGNoZWNraW5nIGZyb20KKyAqICAgICAgICBhIEdMIGNvbnRl
eHQgb3IgdG9wIGNvcm5lciBpbiBjYXNlIG9mIGNoZWNraW5nIGZyb20gYSAyRCBjb250ZXh0Lgor
ICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIHdpZHRoIG9mIHJlZ2lvbiB0byBjaGVjay4KKyAqIEBw
YXJhbSB7bnVtYmVyfSBoZWlnaHQgd2lkdGggb2YgcmVnaW9uIHRvIGNoZWNrLgorICogQHBhcmFt
IHshQXJyYXkuPG51bWJlcj59IGlubmVyQ29sb3IgVGhlIGNvbG9yIGV4cGVjdGVkIGluc2lkZQor
ICogICAgIHRoZSBhcmVhLiBBIDQgZWxlbWVudCBhcnJheSB3aGVyZSBlYWNoIGVsZW1lbnQgaXMg
aW4gdGhlCisgKiAgICAgcmFuZ2UgMCB0byAyNTUuCisgKiBAcGFyYW0geyFBcnJheS48bnVtYmVy
Pn0gb3V0ZXJDb2xvciBUaGUgY29sb3IgZXhwZWN0ZWQKKyAqICAgICBvdXRzaWRlLiBBIDQgZWxl
bWVudCBhcnJheSB3aGVyZSBlYWNoIGVsZW1lbnQgaXMgaW4gdGhlCisgKiAgICAgcmFuZ2UgMCB0
byAyNTUuCisgKiBAcGFyYW0geyFudW1iZXJ9IG9wdF9lZGdlU2l6ZTogVGhlIG51bWJlciBvZiBw
aXhlbHMgdG8gc2tpcAorICogICAgIGFyb3VuZCB0aGUgZWRnZXMgb2YgdGhlIGFyZWEuIERlZmF1
dCAwLgorICogQHBhcmFtIHshe3dpZHRoOm51bWJlciwgaGVpZ2h0Om51bWJlcn19IG9wdF9vdXRl
ckRpbWVuc2lvbnMKKyAqICAgICBUaGUgb3V0ZXIgZGltZW5zaW9ucy4gRGVmYXVsdCB0aGUgc2l6
ZSBvZiBnbC5jYW52YXMuCisgKi8KK3ZhciBjaGVja0FyZWFJbkFuZE91dCA9IGZ1bmN0aW9uKGds
LCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBpbm5lckNvbG9yLCBvdXRlckNvbG9yLCBvcHRfZWRnZVNp
emUsIG9wdF9vdXRlckRpbWVuc2lvbnMpIHsKKyAgdmFyIG91dGVyRGltZW5zaW9ucyA9IG9wdF9v
dXRlckRpbWVuc2lvbnMgfHwgeyB3aWR0aDogZ2wuY2FudmFzLndpZHRoLCBoZWlnaHQ6IGdsLmNh
bnZhcy5oZWlnaHQgfTsKKyAgdmFyIGVkZ2VTaXplID0gb3B0X2VkZ2VTaXplIHx8IDA7CisgIGNo
ZWNrQ2FudmFzUmVjdChnbCwgeCArIGVkZ2VTaXplLCB5ICsgZWRnZVNpemUsIHdpZHRoIC0gZWRn
ZVNpemUgKiAyLCBoZWlnaHQgLSBlZGdlU2l6ZSAqIDIsIGlubmVyQ29sb3IpOworICBjaGVja0Nh
bnZhc1JlY3QoZ2wsIDAsIDAsIHggLSBlZGdlU2l6ZSwgb3V0ZXJEaW1lbnNpb25zLmhlaWdodCwg
b3V0ZXJDb2xvcik7CisgIGNoZWNrQ2FudmFzUmVjdChnbCwgeCArIHdpZHRoICsgZWRnZVNpemUs
IDAsIG91dGVyRGltZW5zaW9ucy53aWR0aCAtIHggLSB3aWR0aCAtIGVkZ2VTaXplLCBvdXRlckRp
bWVuc2lvbnMuaGVpZ2h0LCBvdXRlckNvbG9yKTsKKyAgY2hlY2tDYW52YXNSZWN0KGdsLCAwLCAw
LCBvdXRlckRpbWVuc2lvbnMud2lkdGgsIHkgLSBlZGdlU2l6ZSwgb3V0ZXJDb2xvcik7CisgIGNo
ZWNrQ2FudmFzUmVjdChnbCwgMCwgeSArIGhlaWdodCArIGVkZ2VTaXplLCBvdXRlckRpbWVuc2lv
bnMud2lkdGgsIG91dGVyRGltZW5zaW9ucy5oZWlnaHQgLSB5IC0gaGVpZ2h0IC0gZWRnZVNpemUs
IG91dGVyQ29sb3IpOworfTsKKworLyoqCisgKiBDaGVja3MgdGhhdCBhbiBlbnRpcmUgYnVmZmVy
IG1hdGNoZXMgdGhlIGZsb2F0aW5nIHBvaW50IHZhbHVlcyBwcm92aWRlZC4KKyAqIChXZWJHTCAy
LjAgb25seSkKKyAqIEBwYXJhbSB7IVdlYkdMMlJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJH
TDJSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7bnVtYmVyfSB0YXJnZXQgVGhl
IGJ1ZmZlciB0YXJnZXQgdG8gYmluZCB0by4KKyAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBl
eHBlY3RlZCBUaGUgdmFsdWVzIGV4cGVjdGVkLgorICogQHBhcmFtIHtzdHJpbmd9IG9wdF9tc2cg
T3B0aW9uYWwuIE1lc3NhZ2UgdG8gYXNzb2NpYXRlIHdpdGggc3VjY2Vzcy4gRWcgKCJzaG91bGQg
YmUgcmVkIikuCisgKiBAcGFyYW0ge251bWJlcn0gb3B0X2Vycm9yUmFuZ2UgT3B0aW9uYWwuIEFj
Y2VwdGFibGUgZXJyb3IgaW4gdmFsdWUgY2hlY2tpbmcuIDAuMDAxIGJ5IGRlZmF1bHQuCisgKi8K
K3ZhciBjaGVja0Zsb2F0QnVmZmVyID0gZnVuY3Rpb24oZ2wsIHRhcmdldCwgZXhwZWN0ZWQsIG9w
dF9tc2csIG9wdF9lcnJvclJhbmdlKSB7CisgIGlmIChvcHRfbXNnID09PSB1bmRlZmluZWQpCisg
ICAgb3B0X21zZyA9ICJidWZmZXIgc2hvdWxkIG1hdGNoIGV4cGVjdGVkIHZhbHVlcyI7CisKKyAg
aWYgKG9wdF9lcnJvclJhbmdlID09PSB1bmRlZmluZWQpCisgICAgb3B0X2Vycm9yUmFuZ2UgPSAw
LjAwMTsKKworICB2YXIgZmxvYXRBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoZXhwZWN0ZWQubGVu
Z3RoKTsKKyAgZ2wuZ2V0QnVmZmVyU3ViRGF0YSh0YXJnZXQsIDAsIGZsb2F0QXJyYXkpOworCisg
IGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWQubGVuZ3RoOyBpKyspIHsKKyAgICBpZiAoTWF0
aC5hYnMoZmxvYXRBcnJheVtpXSAtIGV4cGVjdGVkW2ldKSA+IG9wdF9lcnJvclJhbmdlKSB7Cisg
ICAgICB0ZXN0RmFpbGVkKG9wdF9tc2cpOworICAgICAgZGVidWcoJ2F0IFsnICsgaSArICddIGV4
cGVjdGVkOiAnICsgZXhwZWN0ZWRbaV0gKyAnIHdhcyAnICsgZmxvYXRBcnJheVtpXSk7CisgICAg
ICByZXR1cm47CisgICAgfQorICB9CisgIHRlc3RQYXNzZWQob3B0X21zZyk7Cit9OworCisvKioK
KyAqIExvYWRzIGEgdGV4dHVyZSwgY2FsbHMgY2FsbGJhY2sgd2hlbiBmaW5pc2hlZC4KKyAqIEBw
YXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4
dCB0byB1c2UuCisgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFVSTCBvZiBpbWFnZSB0byBsb2FkCisg
KiBAcGFyYW0ge2Z1bmN0aW9uKCFJbWFnZSk6IHZvaWR9IGNhbGxiYWNrIEZ1bmN0aW9uIHRoYXQg
Z2V0cyBjYWxsZWQgYWZ0ZXIKKyAqICAgICAgICBpbWFnZSBoYXMgbG9hZGVkCisgKiBAcmV0dXJu
IHshV2ViR0xUZXh0dXJlfSBUaGUgY3JlYXRlZCB0ZXh0dXJlLgorICovCit2YXIgbG9hZFRleHR1
cmUgPSBmdW5jdGlvbihnbCwgdXJsLCBjYWxsYmFjaykgeworICAgIHZhciB0ZXh0dXJlID0gZ2wu
Y3JlYXRlVGV4dHVyZSgpOworICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1
cmUpOworICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9NSU5f
RklMVEVSLCBnbC5ORUFSRVNUKTsKKyAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVfMkQs
IGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZ2wuTkVBUkVTVCk7CisgICAgdmFyIGltYWdlID0gbmV3
IEltYWdlKCk7CisgICAgaW1hZ2Uub25sb2FkID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGdsLmJp
bmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpOworICAgICAgICBnbC5waXhlbFN0b3Jl
aShnbC5VTlBBQ0tfRkxJUF9ZX1dFQkdMLCB0cnVlKTsKKyAgICAgICAgZ2wudGV4SW1hZ2UyRChn
bC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBpbWFn
ZSk7CisgICAgICAgIGNhbGxiYWNrKGltYWdlKTsKKyAgICB9OworICAgIGltYWdlLnNyYyA9IHVy
bDsKKyAgICByZXR1cm4gdGV4dHVyZTsKK307CisKKy8qKgorICogQ2hlY2tzIHdoZXRoZXIgdGhl
IGJvdW5kIHRleHR1cmUgaGFzIGV4cGVjdGVkIGRpbWVuc2lvbnMuIE9uZSBjb3JuZXIgcGl4ZWwK
KyAqIG9mIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2hhbmdlZCBhcyBhIHNpZGUgZWZmZWN0LgorICog
QHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250
ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7IVdlYkdMVGV4dHVyZX0gdGV4dHVyZSBUaGUgdGV4dHVy
ZSB0byBjaGVjay4KKyAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCBFeHBlY3RlZCB3aWR0aC4KKyAq
IEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgRXhwZWN0ZWQgaGVpZ2h0LgorICogQHBhcmFtIHtHTGVu
dW19IG9wdF9mb3JtYXQgVGhlIHRleHR1cmUncyBmb3JtYXQuIERlZmF1bHRzIHRvIFJHQkEuCisg
KiBAcGFyYW0ge0dMZW51bX0gb3B0X3R5cGUgVGhlIHRleHR1cmUncyB0eXBlLiBEZWZhdWx0cyB0
byBVTlNJR05FRF9CWVRFLgorICovCit2YXIgY2hlY2tUZXh0dXJlU2l6ZSA9IGZ1bmN0aW9uKGds
LCB3aWR0aCwgaGVpZ2h0LCBvcHRfZm9ybWF0LCBvcHRfdHlwZSkgeworICBvcHRfZm9ybWF0ID0g
b3B0X2Zvcm1hdCB8fCBnbC5SR0JBOworICBvcHRfdHlwZSA9IG9wdF90eXBlIHx8IGdsLlVOU0lH
TkVEX0JZVEU7CisKKyAgdmFyIG51bUVsZW1lbnRzID0gZ2V0VHlwZWRBcnJheUVsZW1lbnRzUGVy
UGl4ZWwoZ2wsIG9wdF9mb3JtYXQsIG9wdF90eXBlKTsKKyAgdmFyIGJ1ZiA9IG5ldyAoZ2xUeXBl
VG9UeXBlZEFycmF5VHlwZShnbCwgb3B0X3R5cGUpKShudW1FbGVtZW50cyk7CisKKyAgdmFyIGVy
cm9ycyA9IDA7CisgIGdsLnRleFN1YkltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgd2lkdGggLSAx
LCBoZWlnaHQgLSAxLCAxLCAxLCBvcHRfZm9ybWF0LCBvcHRfdHlwZSwgYnVmKTsKKyAgaWYgKGds
LmdldEVycm9yKCkgIT0gZ2wuTk9fRVJST1IpIHsKKyAgICB0ZXN0RmFpbGVkKCJUZXh0dXJlIHdh
cyBzbWFsbGVyIHRoYW4gdGhlIGV4cGVjdGVkIHNpemUgIiArIHdpZHRoICsgIngiICsgaGVpZ2h0
KTsKKyAgICArK2Vycm9yczsKKyAgfQorICBnbC50ZXhTdWJJbWFnZTJEKGdsLlRFWFRVUkVfMkQs
IDAsIHdpZHRoIC0gMSwgaGVpZ2h0LCAxLCAxLCBvcHRfZm9ybWF0LCBvcHRfdHlwZSwgYnVmKTsK
KyAgaWYgKGdsLmdldEVycm9yKCkgPT0gZ2wuTk9fRVJST1IpIHsKKyAgICB0ZXN0RmFpbGVkKCJU
ZXh0dXJlIHdhcyB0YWxsZXIgdGhhbiAiICsgaGVpZ2h0KTsKKyAgICArK2Vycm9yczsKKyAgfQor
ICBnbC50ZXhTdWJJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHdpZHRoLCBoZWlnaHQgLSAxLCAx
LCAxLCBvcHRfZm9ybWF0LCBvcHRfdHlwZSwgYnVmKTsKKyAgaWYgKGdsLmdldEVycm9yKCkgPT0g
Z2wuTk9fRVJST1IpIHsKKyAgICB0ZXN0RmFpbGVkKCJUZXh0dXJlIHdhcyB3aWRlciB0aGFuICIg
KyB3aWR0aCk7CisgICAgKytlcnJvcnM7CisgIH0KKyAgaWYgKGVycm9ycyA9PSAwKSB7CisgICAg
dGVzdFBhc3NlZCgiVGV4dHVyZSBoYWQgdGhlIGV4cGVjdGVkIHNpemUgIiArIHdpZHRoICsgIngi
ICsgaGVpZ2h0KTsKKyAgfQorfTsKKworLyoqCisgKiBNYWtlcyBhIHNoYWxsb3cgY29weSBvZiBh
biBvYmplY3QuCisgKiBAcGFyYW0geyFPYmplY3R9IHNyYyBPYmplY3QgdG8gY29weQorICogQHJl
dHVybiB7IU9iamVjdH0gVGhlIGNvcHkgb2Ygc3JjLgorICovCit2YXIgc2hhbGxvd0NvcHlPYmpl
Y3QgPSBmdW5jdGlvbihzcmMpIHsKKyAgdmFyIGRzdCA9IHt9OworICBmb3IgKHZhciBhdHRyIGlu
IHNyYykgeworICAgIGlmIChzcmMuaGFzT3duUHJvcGVydHkoYXR0cikpIHsKKyAgICAgIGRzdFth
dHRyXSA9IHNyY1thdHRyXTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIGRzdDsKK307CisKKy8qKgor
ICogQ2hlY2tzIGlmIGFuIGF0dHJpYnV0ZSBleGlzdHMgb24gYW4gb2JqZWN0IGNhc2UgaW5zZW5z
aXRpdmUuCisgKiBAcGFyYW0geyFPYmplY3R9IG9iaiBPYmplY3QgdG8gY2hlY2sKKyAqIEBwYXJh
bSB7c3RyaW5nfSBhdHRyIE5hbWUgb2YgYXR0cmlidXRlIHRvIGxvb2sgZm9yLgorICogQHJldHVy
biB7c3RyaW5nP30gVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSBpZiBpdCBleGlzdHMsCisgKiAg
ICAgICAgIHVuZGVmaW5lZCBpZiBub3QuCisgKi8KK3ZhciBoYXNBdHRyaWJ1dGVDYXNlSW5zZW5z
aXRpdmUgPSBmdW5jdGlvbihvYmosIGF0dHIpIHsKKyAgdmFyIGxvd2VyID0gYXR0ci50b0xvd2Vy
Q2FzZSgpOworICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7CisgICAgaWYgKG9iai5oYXNPd25Qcm9w
ZXJ0eShrZXkpICYmIGtleS50b0xvd2VyQ2FzZSgpID09IGxvd2VyKSB7CisgICAgICByZXR1cm4g
a2V5OworICAgIH0KKyAgfQorfTsKKworLyoqCisgKiBSZXR1cm5zIGEgbWFwIG9mIFVSTCBxdWVy
eXN0cmluZyBvcHRpb25zCisgKiBAcmV0dXJuIHtPYmplY3Q/fSBPYmplY3QgY29udGFpbmluZyBh
bGwgdGhlIHZhbHVlcyBpbiB0aGUgVVJMIHF1ZXJ5c3RyaW5nCisgKi8KK3ZhciBnZXRVcmxPcHRp
b25zID0gKGZ1bmN0aW9uKCkgeworICB2YXIgX3VybE9wdGlvbnNQYXJzZWQgPSBmYWxzZTsKKyAg
dmFyIF91cmxPcHRpb25zID0ge307CisgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICBpZiAoIV91
cmxPcHRpb25zUGFyc2VkKSB7CisgICAgICB2YXIgcyA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmOwor
ICAgICAgdmFyIHEgPSBzLmluZGV4T2YoIj8iKTsKKyAgICAgIHZhciBlID0gcy5pbmRleE9mKCIj
Iik7CisgICAgICBpZiAoZSA8IDApIHsKKyAgICAgICAgZSA9IHMubGVuZ3RoOworICAgICAgfQor
ICAgICAgdmFyIHF1ZXJ5ID0gcy5zdWJzdHJpbmcocSArIDEsIGUpOworICAgICAgdmFyIHBhaXJz
ID0gcXVlcnkuc3BsaXQoIiYiKTsKKyAgICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCBwYWlycy5s
ZW5ndGg7ICsraWkpIHsKKyAgICAgICAgdmFyIGtleVZhbHVlID0gcGFpcnNbaWldLnNwbGl0KCI9
Iik7CisgICAgICAgIHZhciBrZXkgPSBrZXlWYWx1ZVswXTsKKyAgICAgICAgdmFyIHZhbHVlID0g
ZGVjb2RlVVJJQ29tcG9uZW50KGtleVZhbHVlWzFdKTsKKyAgICAgICAgX3VybE9wdGlvbnNba2V5
XSA9IHZhbHVlOworICAgICAgfQorICAgICAgX3VybE9wdGlvbnNQYXJzZWQgPSB0cnVlOworICAg
IH0KKworICAgIHJldHVybiBfdXJsT3B0aW9uczsKKyAgfQorfSkoKTsKKwordmFyIGRlZmF1bHQz
RENvbnRleHRWZXJzaW9uID0gMTsKKworLyoqCisgKiBTZXQgdGhlIGRlZmF1bHQgY29udGV4dCB2
ZXJzaW9uIGZvciBjcmVhdGUzRENvbnRleHQuCisgKiBJbml0aWFsbHkgdGhlIGRlZmF1bHQgdmVy
c2lvbiBpcyAxLgorICogQHBhcmFtIHtudW1iZXJ9IERlZmF1bHQgdmVyc2lvbiBvZiBXZWJHTCBj
b250ZXh0cy4KKyAqLwordmFyIHNldERlZmF1bHQzRENvbnRleHRWZXJzaW9uID0gZnVuY3Rpb24o
dmVyc2lvbikgeworICAgIGRlZmF1bHQzRENvbnRleHRWZXJzaW9uID0gdmVyc2lvbjsKK307CisK
Ky8qKgorICogR2V0IHRoZSBkZWZhdWx0IGNvbnRleCB2ZXJzaW9uIGZvciBjcmVhdGUzRENvbnRl
eHQuCisgKiBGaXJzdCBpdCBsb29rcyBhdCB0aGUgVVJJIG9wdGlvbiB8d2ViZ2xWZXJzaW9ufC4g
SWYgaXQgZG9lcyBub3QgZXhpc3QsCisgKiB0aGVuIGxvb2sgYXQgdGhlIGdsb2JhbCBkZWZhdWx0
M0RDb250ZXh0VmVyc2lvbiB2YXJpYWJsZS4KKyAqLwordmFyIGdldERlZmF1bHQzRENvbnRleHRW
ZXJzaW9uID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHBhcnNlSW50KGdldFVybE9wdGlvbnMo
KS53ZWJnbFZlcnNpb24sIDEwKSB8fCBkZWZhdWx0M0RDb250ZXh0VmVyc2lvbjsKK307CisKKy8q
KgorICogQ3JlYXRlcyBhIHdlYmdsIGNvbnRleHQuCisgKiBAcGFyYW0geyFDYW52YXN8c3RyaW5n
fSBvcHRfY2FudmFzIFRoZSBjYW52YXMgdGFnIHRvIGdldAorICogICAgIGNvbnRleHQgZnJvbS4g
SWYgb25lIGlzIG5vdCBwYXNzZWQgaW4gb25lIHdpbGwgYmUKKyAqICAgICBjcmVhdGVkLiBJZiBp
dCdzIGEgc3RyaW5nIGl0J3MgYXNzdW1lZCB0byBiZSB0aGUgaWQgb2YgYQorICogICAgIGNhbnZh
cy4KKyAqIEBwYXJhbSB7T2JqZWN0fSBvcHRfYXR0cmlidXRlcyBDb250ZXh0IGF0dHJpYnV0ZXMu
CisgKiBAcGFyYW0geyFudW1iZXJ9IG9wdF92ZXJzaW9uIFZlcnNpb24gb2YgV2ViR0wgY29udGV4
dCB0byBjcmVhdGUuCisgKiAgICAgVGhlIGRlZmF1bHQgdmVyc2lvbiBjYW4gYmUgc2V0IGJ5IGNh
bGxpbmcgc2V0RGVmYXVsdDNEQ29udGV4dFZlcnNpb24uCisgKiBAcmV0dXJuIHshV2ViR0xSZW5k
ZXJpbmdDb250ZXh0fSBUaGUgY3JlYXRlZCBjb250ZXh0LgorICovCit2YXIgY3JlYXRlM0RDb250
ZXh0ID0gZnVuY3Rpb24ob3B0X2NhbnZhcywgb3B0X2F0dHJpYnV0ZXMsIG9wdF92ZXJzaW9uKSB7
CisgIGlmICh3aW5kb3cuaW5pdFRlc3RpbmdIYXJuZXNzKSB7CisgICAgd2luZG93LmluaXRUZXN0
aW5nSGFybmVzcygpOworICB9CisgIHZhciBhdHRyaWJ1dGVzID0gc2hhbGxvd0NvcHlPYmplY3Qo
b3B0X2F0dHJpYnV0ZXMgfHwge30pOworICBpZiAoIWhhc0F0dHJpYnV0ZUNhc2VJbnNlbnNpdGl2
ZShhdHRyaWJ1dGVzLCAiYW50aWFsaWFzIikpIHsKKyAgICBhdHRyaWJ1dGVzLmFudGlhbGlhcyA9
IGZhbHNlOworICB9CisgIGlmICghb3B0X3ZlcnNpb24pIHsKKyAgICBvcHRfdmVyc2lvbiA9IGdl
dERlZmF1bHQzRENvbnRleHRWZXJzaW9uKCk7CisgIH0KKyAgb3B0X2NhbnZhcyA9IG9wdF9jYW52
YXMgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CisgIGlmICh0eXBlb2Ygb3B0
X2NhbnZhcyA9PSAnc3RyaW5nJykgeworICAgIG9wdF9jYW52YXMgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZChvcHRfY2FudmFzKTsKKyAgfQorICB2YXIgY29udGV4dCA9IG51bGw7CisKKyAgdmFy
IG5hbWVzOworICBzd2l0Y2ggKG9wdF92ZXJzaW9uKSB7CisgICAgY2FzZSAyOgorICAgICAgbmFt
ZXMgPSBbIndlYmdsMiJdOyBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgbmFtZXMgPSBbIndl
YmdsIiwgImV4cGVyaW1lbnRhbC13ZWJnbCJdOyBicmVhazsKKyAgfQorCisgIGZvciAodmFyIGkg
PSAwOyBpIDwgbmFtZXMubGVuZ3RoOyArK2kpIHsKKyAgICB0cnkgeworICAgICAgY29udGV4dCA9
IG9wdF9jYW52YXMuZ2V0Q29udGV4dChuYW1lc1tpXSwgYXR0cmlidXRlcyk7CisgICAgfSBjYXRj
aCAoZSkgeworICAgIH0KKyAgICBpZiAoY29udGV4dCkgeworICAgICAgYnJlYWs7CisgICAgfQor
ICB9CisgIGlmICghY29udGV4dCkgeworICAgIHRlc3RGYWlsZWQoIlVuYWJsZSB0byBmZXRjaCBX
ZWJHTCByZW5kZXJpbmcgY29udGV4dCBmb3IgQ2FudmFzIik7CisgIH0gZWxzZSB7CisgICAgaWYg
KCF3aW5kb3cuX3d0dV9jb250ZXh0cykgeworICAgICAgd2luZG93Ll93dHVfY29udGV4dHMgPSBb
XQorICAgIH0KKyAgICB3aW5kb3cuX3d0dV9jb250ZXh0cy5wdXNoKGNvbnRleHQpOworICB9Cisg
IHJldHVybiBjb250ZXh0OworfTsKKworLyoqCisgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZ2l2
ZW4gY29udGV4dCBpcyBXZWJHTCAyLjAgb3IgZ3JlYXRlci4KKyAqIEBwYXJhbSB7IVdlYkdMUmVu
ZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBA
cmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBnaXZlbiBjb250ZXh0IGlzIFdlYkdMIDIuMCBv
ciBncmVhdGVyLgorICovCit2YXIgaXNXZWJHTDIgPSBmdW5jdGlvbihnbCkgeworICAvLyBEdWNr
IHR5cGluZyBpcyB1c2VkIHNvIHRoYXQgdGhlIGNvbmZvcm1hbmNlIHN1aXRlIGNhbiBiZSBydW4K
KyAgLy8gYWdhaW5zdCBsaWJyYXJpZXMgZW11bGF0aW5nIFdlYkdMIDEuMCBvbiB0b3Agb2YgV2Vi
R0wgMi4wLgorICByZXR1cm4gISFnbC5kcmF3QXJyYXlzSW5zdGFuY2VkOworfTsKKworLyoqCisg
KiBEZWZpbmVzIHRoZSBleGNlcHRpb24gdHlwZSBmb3IgYSBHTCBlcnJvci4KKyAqIEBjb25zdHJ1
Y3RvcgorICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuCisgKiBA
cGFyYW0ge251bWJlcn0gZXJyb3IgR0wgZXJyb3IgY29kZQorICovCitmdW5jdGlvbiBHTEVycm9y
RXhjZXB0aW9uIChtZXNzYWdlLCBlcnJvcikgeworICAgdGhpcy5tZXNzYWdlID0gbWVzc2FnZTsK
KyAgIHRoaXMubmFtZSA9ICJHTEVycm9yRXhjZXB0aW9uIjsKKyAgIHRoaXMuZXJyb3IgPSBlcnJv
cjsKK307CisKKy8qKgorICogV3JhcHMgYSBXZWJHTCBmdW5jdGlvbiB3aXRoIGEgZnVuY3Rpb24g
dGhhdCB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZXJlIGlzCisgKiBhbiBlcnJvci4KKyAqIEBw
YXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4
dCB0byB1c2UuCisgKiBAcGFyYW0ge3N0cmluZ30gZm5hbWUgTmFtZSBvZiBmdW5jdGlvbiB0byB3
cmFwLgorICogQHJldHVybiB7ZnVuY3Rpb24oKX0gVGhlIHdyYXBwZWQgZnVuY3Rpb24uCisgKi8K
K3ZhciBjcmVhdGVHTEVycm9yV3JhcHBlciA9IGZ1bmN0aW9uKGNvbnRleHQsIGZuYW1lKSB7Cisg
IHJldHVybiBmdW5jdGlvbigpIHsKKyAgICB2YXIgcnYgPSBjb250ZXh0W2ZuYW1lXS5hcHBseShj
b250ZXh0LCBhcmd1bWVudHMpOworICAgIHZhciBlcnIgPSBjb250ZXh0LmdldEVycm9yKCk7Cisg
ICAgaWYgKGVyciAhPSBjb250ZXh0Lk5PX0VSUk9SKSB7CisgICAgICB2YXIgbXNnID0gIkdMIGVy
cm9yICIgKyBnbEVudW1Ub1N0cmluZyhjb250ZXh0LCBlcnIpICsgIiBpbiAiICsgZm5hbWU7Cisg
ICAgICB0aHJvdyBuZXcgR0xFcnJvckV4Y2VwdGlvbihtc2csIGVycik7CisgICAgfQorICAgIHJl
dHVybiBydjsKKyAgfTsKK307CisKKy8qKgorICogQ3JlYXRlcyBhIFdlYkdMIGNvbnRleHQgd2hl
cmUgYWxsIGZ1bmN0aW9ucyBhcmUgd3JhcHBlZCB0byB0aHJvdyBhbiBleGNlcHRpb24KKyAqIGlm
IHRoZXJlIGlzIGFuIGVycm9yLgorICogQHBhcmFtIHshQ2FudmFzfSBjYW52YXMgVGhlIEhUTUwg
Y2FudmFzIHRvIGdldCBhIGNvbnRleHQgZnJvbS4KKyAqIEBwYXJhbSB7T2JqZWN0fSBvcHRfYXR0
cmlidXRlcyBDb250ZXh0IGF0dHJpYnV0ZXMuCisgKiBAcGFyYW0geyFudW1iZXJ9IG9wdF92ZXJz
aW9uIFZlcnNpb24gb2YgV2ViR0wgY29udGV4dCB0byBjcmVhdGUKKyAqIEByZXR1cm4geyFPYmpl
Y3R9IFRoZSB3cmFwcGVkIGNvbnRleHQuCisgKi8KK2Z1bmN0aW9uIGNyZWF0ZTNEQ29udGV4dFdp
dGhXcmFwcGVyVGhhdFRocm93c09uR0xFcnJvcihjYW52YXMsIG9wdF9hdHRyaWJ1dGVzLCBvcHRf
dmVyc2lvbikgeworICB2YXIgY29udGV4dCA9IGNyZWF0ZTNEQ29udGV4dChjYW52YXMsIG9wdF9h
dHRyaWJ1dGVzLCBvcHRfdmVyc2lvbik7CisgIHZhciB3cmFwID0ge307CisgIGZvciAodmFyIGkg
aW4gY29udGV4dCkgeworICAgIHRyeSB7CisgICAgICBpZiAodHlwZW9mIGNvbnRleHRbaV0gPT0g
J2Z1bmN0aW9uJykgeworICAgICAgICB3cmFwW2ldID0gY3JlYXRlR0xFcnJvcldyYXBwZXIoY29u
dGV4dCwgaSk7CisgICAgICB9IGVsc2UgeworICAgICAgICB3cmFwW2ldID0gY29udGV4dFtpXTsK
KyAgICAgIH0KKyAgICB9IGNhdGNoIChlKSB7CisgICAgICBlcnJvcigiY3JlYXRlQ29udGV4dFdy
YXBwZXJUaGF0VGhyb3dzT25HTEVycm9yOiBFcnJvciBhY2Nlc3NpbmcgIiArIGkpOworICAgIH0K
KyAgfQorICB3cmFwLmdldEVycm9yID0gZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gY29udGV4
dC5nZXRFcnJvcigpOworICB9OworICByZXR1cm4gd3JhcDsKK307CisKKy8qKgorICogVGVzdHMg
dGhhdCBhbiBldmFsdWF0ZWQgZXhwcmVzc2lvbiBnZW5lcmF0ZXMgYSBzcGVjaWZpYyBHTCBlcnJv
ci4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVy
aW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge251bWJlcnxBcnJheS48bnVtYmVyPn0gZ2xF
cnJvcnMgVGhlIGV4cGVjdGVkIGdsIGVycm9yIG9yIGFuIGFycmF5IG9mIGV4cGVjdGVkIGVycm9y
cy4KKyAqIEBwYXJhbSB7c3RyaW5nfSBldmFsU3RyIFRoZSBzdHJpbmcgdG8gZXZhbHVhdGUuCisg
Ki8KK3ZhciBzaG91bGRHZW5lcmF0ZUdMRXJyb3IgPSBmdW5jdGlvbihnbCwgZ2xFcnJvcnMsIGV2
YWxTdHIsIG9wdF9tc2cpIHsKKyAgdmFyIGV4Y2VwdGlvbjsKKyAgdHJ5IHsKKyAgICBldmFsKGV2
YWxTdHIpOworICB9IGNhdGNoIChlKSB7CisgICAgZXhjZXB0aW9uID0gZTsKKyAgfQorICBpZiAo
ZXhjZXB0aW9uKSB7CisgICAgdGVzdEZhaWxlZChldmFsU3RyICsgIiB0aHJldyBleGNlcHRpb24g
IiArIGV4Y2VwdGlvbik7CisgICAgcmV0dXJuIC0xOworICB9IGVsc2UgeworICAgIGlmICghb3B0
X21zZykgeworICAgICAgb3B0X21zZyA9ICJhZnRlciBldmFsdWF0aW5nOiAiICsgZXZhbFN0cjsK
KyAgICB9CisgICAgcmV0dXJuIGdsRXJyb3JTaG91bGRCZShnbCwgZ2xFcnJvcnMsIG9wdF9tc2cp
OworICB9Cit9OworCisvKioKKyAqIFRlc3RzIHRoYXQgYW4gZXZhbHVhdGVkIGV4cHJlc3Npb24g
ZG9lcyBub3QgZ2VuZXJhdGUgYSBHTCBlcnJvci4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5n
Q29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0g
e3N0cmluZ30gZXZhbFN0ciBUaGUgc3RyaW5nIHRvIGV2YWx1YXRlLgorICovCit2YXIgZmFpbElm
R0xFcnJvciA9IGZ1bmN0aW9uKGdsLCBldmFsU3RyKSB7CisgIHZhciBleGNlcHRpb247CisgIHRy
eSB7CisgICAgZXZhbChldmFsU3RyKTsKKyAgfSBjYXRjaCAoZSkgeworICAgIGV4Y2VwdGlvbiA9
IGU7CisgIH0KKyAgaWYgKGV4Y2VwdGlvbikgeworICAgIHRlc3RGYWlsZWQoZXZhbFN0ciArICIg
dGhyZXcgZXhjZXB0aW9uICIgKyBleGNlcHRpb24pOworICB9IGVsc2UgeworICAgIGdsRXJyb3JT
aG91bGRCZUltcGwoZ2wsIGdsLk5PX0VSUk9SLCBmYWxzZSwgImFmdGVyIGV2YWx1YXRpbmc6ICIg
KyBldmFsU3RyKTsKKyAgfQorfTsKKworLyoqCisgKiBUZXN0cyB0aGF0IHRoZSBmaXJzdCBlcnJv
ciBHTCByZXR1cm5zIGlzIHRoZSBzcGVjaWZpZWQgZXJyb3IuCisgKiBAcGFyYW0geyFXZWJHTFJl
bmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICog
QHBhcmFtIHtudW1iZXJ8QXJyYXkuPG51bWJlcj59IGdsRXJyb3JzIFRoZSBleHBlY3RlZCBnbCBl
cnJvciBvciBhbiBhcnJheSBvZiBleHBlY3RlZCBlcnJvcnMuCisgKiBAcGFyYW0ge3N0cmluZ30g
b3B0X21zZyBPcHRpb25hbCBhZGRpdGlvbmFsIG1lc3NhZ2UuCisgKi8KK3ZhciBnbEVycm9yU2hv
dWxkQmUgPSBmdW5jdGlvbihnbCwgZ2xFcnJvcnMsIG9wdF9tc2cpIHsKKyAgcmV0dXJuIGdsRXJy
b3JTaG91bGRCZUltcGwoZ2wsIGdsRXJyb3JzLCB0cnVlLCBvcHRfbXNnKTsKK307CisKKy8qKgor
ICogVGVzdHMgdGhhdCB0aGUgZ2l2ZW4gZnJhbWVidWZmZXIgaGFzIGEgc3BlY2lmaWMgc3RhdHVz
CisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtudW1iZXJ8QXJyYXkuPG51bWJlcj59IGdsU3Rh
dHVzZXMgVGhlIGV4cGVjdGVkIGdsCisgKiAgICAgICAgc3RhdHVzIG9yIGFuIGFycmF5IG9mIGV4
cGVjdGVkIHN0YXR1c2VzLgorICogQHBhcmFtIHtzdHJpbmd9IG9wdF9tc2cgT3B0aW9uYWwgYWRk
aXRpb25hbCBtZXNzYWdlLgorICovCit2YXIgZnJhbWVidWZmZXJTdGF0dXNTaG91bGRCZSA9IGZ1
bmN0aW9uKGdsLCB0YXJnZXQsIGdsU3RhdHVzZXMsIG9wdF9tc2cpIHsKKyAgaWYgKCFnbFN0YXR1
c2VzLmxlbmd0aCkgeworICAgIGdsU3RhdHVzZXMgPSBbZ2xTdGF0dXNlc107CisgIH0KKyAgb3B0
X21zZyA9IG9wdF9tc2cgfHwgIiI7CisgIGNvbnN0IHN0YXR1cyA9IGdsLmNoZWNrRnJhbWVidWZm
ZXJTdGF0dXModGFyZ2V0KTsKKyAgY29uc3QgbmR4ID0gZ2xTdGF0dXNlcy5pbmRleE9mKHN0YXR1
cyk7CisgIGNvbnN0IGV4cGVjdGVkID0gZ2xTdGF0dXNlcy5tYXAoKHN0YXR1cykgPT4geworICAg
IHJldHVybiBnbEVudW1Ub1N0cmluZyhnbCwgc3RhdHVzKTsKKyAgfSkuam9pbignIG9yICcpOwor
ICBpZiAobmR4IDwgMCkgeworICAgIHZhciBtc2cgPSAiY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyBl
eHBlY3RlZCIgKyAoKGdsU3RhdHVzZXMubGVuZ3RoID4gMSkgPyAiIG9uZSBvZjogIiA6ICI6ICIp
OworICAgIHRlc3RGYWlsZWQobXNnICsgZXhwZWN0ZWQgKyAgIi4gV2FzICIgKyBnbEVudW1Ub1N0
cmluZyhnbCwgc3RhdHVzKSArICIgOiAiICsgb3B0X21zZyk7CisgIH0gZWxzZSB7CisgICAgdmFy
IG1zZyA9ICJjaGVja0ZyYW1lYnVmZmVyU3RhdHVzIHdhcyAiICsgKChnbFN0YXR1c2VzLmxlbmd0
aCA+IDEpID8gIm9uZSBvZjogIiA6ICJleHBlY3RlZCB2YWx1ZTogIik7CisgICAgdGVzdFBhc3Nl
ZChtc2cgKyBleHBlY3RlZCArICIgOiAiICsgb3B0X21zZyk7CisgIH0KKyAgcmV0dXJuIHN0YXR1
czsKK30KKworLyoqCisgKiBUZXN0cyB0aGF0IHRoZSBmaXJzdCBlcnJvciBHTCByZXR1cm5zIGlz
IHRoZSBzcGVjaWZpZWQgZXJyb3IuIEFsbG93cyBzdXBwcmVzc2lvbiBvZiBzdWNjZXNzZXMuCisg
KiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtudW1iZXJ8QXJyYXkuPG51bWJlcj59IGdsRXJyb3Jz
IFRoZSBleHBlY3RlZCBnbCBlcnJvciBvciBhbiBhcnJheSBvZiBleHBlY3RlZCBlcnJvcnMuCisg
KiBAcGFyYW0ge2Jvb2xlYW59IHJlcG9ydFN1Y2Nlc3NlcyBXaGV0aGVyIHRvIHJlcG9ydCBzdWNj
ZXNzZXMgYXMgcGFzc2VzLCBvciB0byBzaWxlbnRseSBwYXNzLgorICogQHBhcmFtIHtzdHJpbmd9
IG9wdF9tc2cgT3B0aW9uYWwgYWRkaXRpb25hbCBtZXNzYWdlLgorICovCit2YXIgZ2xFcnJvclNo
b3VsZEJlSW1wbCA9IGZ1bmN0aW9uKGdsLCBnbEVycm9ycywgcmVwb3J0U3VjY2Vzc2VzLCBvcHRf
bXNnKSB7CisgIGlmICghZ2xFcnJvcnMubGVuZ3RoKSB7CisgICAgZ2xFcnJvcnMgPSBbZ2xFcnJv
cnNdOworICB9CisgIG9wdF9tc2cgPSBvcHRfbXNnIHx8ICIiOworCisgIGNvbnN0IGZuRXJyU3Ry
ID0gZnVuY3Rpb24oZXJyVmFsKSB7CisgICAgaWYgKGVyclZhbCA9PSAwKSByZXR1cm4gIk5PX0VS
Uk9SIjsKKyAgICByZXR1cm4gZ2xFbnVtVG9TdHJpbmcoZ2wsIGVyclZhbCk7CisgIH07CisKKyAg
dmFyIGVyciA9IGdsLmdldEVycm9yKCk7CisgIHZhciBuZHggPSBnbEVycm9ycy5pbmRleE9mKGVy
cik7CisgIHZhciBlcnJTdHJzID0gW107CisgIGZvciAodmFyIGlpID0gMDsgaWkgPCBnbEVycm9y
cy5sZW5ndGg7ICsraWkpIHsKKyAgICBlcnJTdHJzLnB1c2goZm5FcnJTdHIoZ2xFcnJvcnNbaWld
KSk7CisgIH0KKyAgdmFyIGV4cGVjdGVkID0gZXJyU3Rycy5qb2luKCIgb3IgIik7CisgIGlmIChu
ZHggPCAwKSB7CisgICAgdmFyIG1zZyA9ICJnZXRFcnJvciBleHBlY3RlZCIgKyAoKGdsRXJyb3Jz
Lmxlbmd0aCA+IDEpID8gIiBvbmUgb2Y6ICIgOiAiOiAiKTsKKyAgICB0ZXN0RmFpbGVkKG1zZyAr
IGV4cGVjdGVkICsgICIuIFdhcyAiICsgZm5FcnJTdHIoZXJyKSArICIgOiAiICsgb3B0X21zZyk7
CisgIH0gZWxzZSBpZiAocmVwb3J0U3VjY2Vzc2VzKSB7CisgICAgdmFyIG1zZyA9ICJnZXRFcnJv
ciB3YXMgIiArICgoZ2xFcnJvcnMubGVuZ3RoID4gMSkgPyAib25lIG9mOiAiIDogImV4cGVjdGVk
IHZhbHVlOiAiKTsKKyAgICB0ZXN0UGFzc2VkKG1zZyArIGV4cGVjdGVkICsgIiA6ICIgKyBvcHRf
bXNnKTsKKyAgfQorICByZXR1cm4gZXJyOworfTsKKworLyoqCisgKiBUZXN0cyB0aGF0IGEgZnVu
Y3Rpb24gdGhyb3dzIG9yIG5vdC4KKyAqIEBwYXJhbSB7IVdlYkdMQ29udGV4dH0gZ2wgVGhlIFdl
YkdMQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0gdGhyb3dUeXBlIFR5cGUgb2YgdGhyb3duIGVy
cm9yIChlLmcuIFR5cGVFcnJvciksIG9yIGZhbHNlLgorICogQHBhcmFtIHtzdHJpbmd9IGluZm8g
SW5mbyBvbiB3aGF0J3MgYmVpbmcgdGVzdGVkCisgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmdW5jIFRo
ZSBmdW5jIHRvIHRlc3QuCisgKi8KK3ZhciBzaG91bGRUaHJvdyA9IGZ1bmN0aW9uKGdsLCB0aHJv
d1R5cGUsIGluZm8sIGZ1bmMpIHsKKyAgd2hpbGUgKGdsLmdldEVycm9yKCkpIHt9CisKKyAgdmFy
IHNob3VsZFRocm93ID0gKHRocm93VHlwZSAhPSBmYWxzZSk7CisKKyAgdHJ5IHsKKyAgICBmdW5j
KCk7CisKKyAgICBpZiAoc2hvdWxkVGhyb3cpIHsKKyAgICAgIHRlc3RGYWlsZWQoIlNob3VsZCB0
aHJvdyBhICIgKyB0aHJvd1R5cGUubmFtZSArICI6ICIgKyBpbmZvKTsKKyAgICB9IGVsc2Ugewor
ICAgICAgdGVzdFBhc3NlZCgiU2hvdWxkIG5vdCBoYXZlIHRocm93bjogIiArIGluZm8pOworICAg
IH0KKyAgfSBjYXRjaCAoZSkgeworICAgIGlmIChzaG91bGRUaHJvdykgeworICAgICAgaWYgKGUg
aW5zdGFuY2VvZiB0aHJvd1R5cGUpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgiU2hvdWxkIHRocm93
IGEgIiArIHRocm93VHlwZS5uYW1lICsgIjogIiArIGluZm8pOworICAgICAgfSBlbHNlIHsKKyAg
ICAgICAgdGVzdEZhaWxlZCgiU2hvdWxkIHRocm93IGEgIiArIHRocm93VHlwZS5uYW1lICsgIiwg
dGhyZXcgIiArIGUubmFtZSArICI6ICIgKyBpbmZvKTsKKyAgICAgIH0KKyAgICB9IGVsc2Ugewor
ICAgICAgdGVzdEZhaWxlZCgiU2hvdWxkIG5vdCBoYXZlIHRocm93bjogIiArIGluZm8pOworICAg
IH0KKworICAgIGlmIChnbC5nZXRFcnJvcigpKSB7CisgICAgICB0ZXN0RmFpbGVkKCJTaG91bGQg
bm90IGdlbmVyYXRlIGFuIGVycm9yIHdoZW4gdGhyb3dpbmc6ICIgKyBpbmZvKTsKKyAgICB9Cisg
IH0KKworICB3aGlsZSAoZ2wuZ2V0RXJyb3IoKSkge30KK307CisKKy8qKgorICogTGlua3MgYSBX
ZWJHTCBwcm9ncmFtLCB0aHJvd3MgaWYgdGhlcmUgYXJlIGVycm9ycy4KKyAqIEBwYXJhbSB7IVdl
YkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2Uu
CisgKiBAcGFyYW0geyFXZWJHTFByb2dyYW19IHByb2dyYW0gVGhlIFdlYkdMUHJvZ3JhbSB0byBs
aW5rLgorICogQHBhcmFtIHtmdW5jdGlvbihzdHJpbmcpOiB2b2lkfSBvcHRfZXJyb3JDYWxsYmFj
ayBjYWxsYmFjayBmb3IgZXJyb3JzLgorICovCit2YXIgbGlua1Byb2dyYW0gPSBmdW5jdGlvbihn
bCwgcHJvZ3JhbSwgb3B0X2Vycm9yQ2FsbGJhY2spIHsKKyAgdmFyIGVyckZuID0gb3B0X2Vycm9y
Q2FsbGJhY2sgfHwgdGVzdEZhaWxlZDsKKyAgLy8gTGluayB0aGUgcHJvZ3JhbQorICBnbC5saW5r
UHJvZ3JhbShwcm9ncmFtKTsKKworICAvLyBDaGVjayB0aGUgbGluayBzdGF0dXMKKyAgdmFyIGxp
bmtlZCA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMpOwor
ICBpZiAoIWxpbmtlZCkgeworICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggdGhlIGxp
bmsKKyAgICB2YXIgZXJyb3IgPSBnbC5nZXRQcm9ncmFtSW5mb0xvZyAocHJvZ3JhbSk7CisKKyAg
ICBlcnJGbigiRXJyb3IgaW4gcHJvZ3JhbSBsaW5raW5nOiIgKyBlcnJvcik7CisKKyAgICBnbC5k
ZWxldGVQcm9ncmFtKHByb2dyYW0pOworICB9Cit9OworCisvKioKKyAqIExvYWRzIHRleHQgZnJv
bSBhbiBleHRlcm5hbCBmaWxlLiBUaGlzIGZ1bmN0aW9uIGlzIGFzeW5jaHJvbm91cy4KKyAqIEBw
YXJhbSB7c3RyaW5nfSB1cmwgVGhlIHVybCBvZiB0aGUgZXh0ZXJuYWwgZmlsZS4KKyAqIEBwYXJh
bSB7IWZ1bmN0aW9uKGJvb2wsIHN0cmluZyk6IHZvaWR9IGNhbGxiYWNrIHRoYXQgaXMgc2VudCBh
IGJvb2wgZm9yCisgKiAgICAgc3VjY2VzcyBhbmQgdGhlIHN0cmluZy4KKyAqLwordmFyIGxvYWRU
ZXh0RmlsZUFzeW5jID0gZnVuY3Rpb24odXJsLCBjYWxsYmFjaykgeworICBsb2cgKCJsb2FkaW5n
OiAiICsgdXJsKTsKKyAgdmFyIGVycm9yID0gJ2xvYWRUZXh0RmlsZUFzeW5jIGZhaWxlZCB0byBs
b2FkIHVybCAiJyArIHVybCArICciJzsKKyAgdmFyIHJlcXVlc3Q7CisgIGlmICh3aW5kb3cuWE1M
SHR0cFJlcXVlc3QpIHsKKyAgICByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgICAg
aWYgKHJlcXVlc3Qub3ZlcnJpZGVNaW1lVHlwZSkgeworICAgICAgcmVxdWVzdC5vdmVycmlkZU1p
bWVUeXBlKCd0ZXh0L3BsYWluJyk7CisgICAgfQorICB9IGVsc2UgeworICAgIHRocm93ICdYTUxI
dHRwUmVxdWVzdCBpcyBkaXNhYmxlZCc7CisgIH0KKyAgdHJ5IHsKKyAgICByZXF1ZXN0Lm9wZW4o
J0dFVCcsIHVybCwgdHJ1ZSk7CisgICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBmdW5j
dGlvbigpIHsKKyAgICAgIGlmIChyZXF1ZXN0LnJlYWR5U3RhdGUgPT0gNCkgeworICAgICAgICB2
YXIgdGV4dCA9ICcnOworICAgICAgICAvLyBIVFRQIHJlcG9ydHMgc3VjY2VzcyB3aXRoIGEgMjAw
IHN0YXR1cy4gVGhlIGZpbGUgcHJvdG9jb2wgcmVwb3J0cworICAgICAgICAvLyBzdWNjZXNzIHdp
dGggemVyby4gSFRUUCBkb2VzIG5vdCB1c2UgemVybyBhcyBhIHN0YXR1cyBjb2RlICh0aGV5Cisg
ICAgICAgIC8vIHN0YXJ0IGF0IDEwMCkuCisgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVyLm1v
emlsbGEub3JnL0VuL1VzaW5nX1hNTEh0dHBSZXF1ZXN0CisgICAgICAgIHZhciBzdWNjZXNzID0g
cmVxdWVzdC5zdGF0dXMgPT0gMjAwIHx8IHJlcXVlc3Quc3RhdHVzID09IDA7CisgICAgICAgIGlm
IChzdWNjZXNzKSB7CisgICAgICAgICAgdGV4dCA9IHJlcXVlc3QucmVzcG9uc2VUZXh0OworICAg
ICAgICAgIGxvZygiY29tcGxldGVkIGxvYWQgcmVxdWVzdDogIiArIHVybCk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgbG9nKCJsb2FkaW5nICIgKyB1cmwgKyAiIHJlc3VsdGVkIGluIHVu
ZXhwZWN0ZWQgc3RhdHVzOiAiICsgcmVxdWVzdC5zdGF0dXMgKyAiICIgKyByZXF1ZXN0LnN0YXR1
c1RleHQpOworICAgICAgICB9CisgICAgICAgIGNhbGxiYWNrKHN1Y2Nlc3MsIHRleHQpOworICAg
ICAgfQorICAgIH07CisgICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24oZXJyb3JFdmVudCkg
eworICAgICAgbG9nKCJlcnJvciBvY2N1cnJlZCBsb2FkaW5nICIgKyB1cmwpOworICAgICAgY2Fs
bGJhY2soZmFsc2UsICcnKTsKKyAgICB9OworICAgIHJlcXVlc3Quc2VuZChudWxsKTsKKyAgfSBj
YXRjaCAoZXJyKSB7CisgICAgbG9nKCJmYWlsZWQgdG8gbG9hZDogIiArIHVybCArICIgd2l0aCBl
eGNlcHRpb24gIiArIGVyci5tZXNzYWdlKTsKKyAgICBjYWxsYmFjayhmYWxzZSwgJycpOworICB9
Cit9OworCisvKioKKyAqIFJlY3Vyc2l2ZWx5IGxvYWRzIGEgZmlsZSBhcyBhIGxpc3QuIEVhY2gg
bGluZSBpcyBwYXJzZWQgZm9yIGEgcmVsYXRpdmUKKyAqIHBhdGguIElmIHRoZSBmaWxlIGVuZHMg
aW4gLnR4dCB0aGUgY29udGVudHMgb2YgdGhhdCBmaWxlIGlzIGluc2VydGVkIGluCisgKiB0aGUg
bGlzdC4KKyAqCisgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSB1cmwgb2YgdGhlIGV4dGVybmFs
IGZpbGUuCisgKiBAcGFyYW0geyFmdW5jdGlvbihib29sLCBBcnJheTxzdHJpbmc+KTogdm9pZH0g
Y2FsbGJhY2sgdGhhdCBpcyBzZW50IGEgYm9vbAorICogICAgIGZvciBzdWNjZXNzIGFuZCB0aGUg
YXJyYXkgb2Ygc3RyaW5ncy4KKyAqLwordmFyIGdldEZpbGVMaXN0QXN5bmMgPSBmdW5jdGlvbih1
cmwsIGNhbGxiYWNrKSB7CisgIHZhciBmaWxlcyA9IFtdOworCisgIHZhciBnZXRGaWxlTGlzdElt
cGwgPSBmdW5jdGlvbih1cmwsIGNhbGxiYWNrKSB7CisgICAgdmFyIGZpbGVzID0gW107CisgICAg
aWYgKHVybC5zdWJzdHIodXJsLmxlbmd0aCAtIDQpID09ICcudHh0JykgeworICAgICAgbG9hZFRl
eHRGaWxlQXN5bmModXJsLCBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHN1
Y2Nlc3MsIHRleHQpIHsKKyAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgIGNh
bGxiYWNrKGZhbHNlLCAnJyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgfQorICAg
ICAgICAgIHZhciBsaW5lcyA9IHRleHQuc3BsaXQoJ1xuJyk7CisgICAgICAgICAgdmFyIHByZWZp
eCA9ICcnOworICAgICAgICAgIHZhciBsYXN0U2xhc2ggPSB1cmwubGFzdEluZGV4T2YoJy8nKTsK
KyAgICAgICAgICBpZiAobGFzdFNsYXNoID49IDApIHsKKyAgICAgICAgICAgIHByZWZpeCA9IHVy
bC5zdWJzdHIoMCwgbGFzdFNsYXNoICsgMSk7CisgICAgICAgICAgfQorICAgICAgICAgIHZhciBm
YWlsID0gZmFsc2U7CisgICAgICAgICAgdmFyIGNvdW50ID0gMTsKKyAgICAgICAgICB2YXIgaW5k
ZXggPSAwOworICAgICAgICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCBsaW5lcy5sZW5ndGg7ICsr
aWkpIHsKKyAgICAgICAgICAgIHZhciBzdHIgPSBsaW5lc1tpaV0ucmVwbGFjZSgvXlxzXHMqLywg
JycpLnJlcGxhY2UoL1xzXHMqJC8sICcnKTsKKyAgICAgICAgICAgIGlmIChzdHIubGVuZ3RoID4g
NCAmJgorICAgICAgICAgICAgICAgIHN0clswXSAhPSAnIycgJiYKKyAgICAgICAgICAgICAgICBz
dHJbMF0gIT0gIjsiICYmCisgICAgICAgICAgICAgICAgc3RyLnN1YnN0cigwLCAyKSAhPSAiLy8i
KSB7CisgICAgICAgICAgICAgIHZhciBuYW1lcyA9IHN0ci5zcGxpdCgvICsvKTsKKyAgICAgICAg
ICAgICAgdmFyIG5ld191cmwgPSBwcmVmaXggKyBzdHI7CisgICAgICAgICAgICAgIGlmIChuYW1l
cy5sZW5ndGggPT0gMSkgeworICAgICAgICAgICAgICAgIG5ld191cmwgPSBwcmVmaXggKyBzdHI7
CisgICAgICAgICAgICAgICAgKytjb3VudDsKKyAgICAgICAgICAgICAgICBnZXRGaWxlTGlzdElt
cGwobmV3X3VybCwgZnVuY3Rpb24oaW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgIHJldHVybiBm
dW5jdGlvbihzdWNjZXNzLCBuZXdfZmlsZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgbG9nKCJn
b3QgZmlsZXM6ICIgKyBuZXdfZmlsZXMubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAgaWYg
KHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgICBmaWxlc1tpbmRleF0gPSBuZXdfZmls
ZXM7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZmluaXNoKHN1
Y2Nlc3MpOworICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9KGluZGV4Kysp
KTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgcyA9ICIiOwor
ICAgICAgICAgICAgICAgIHZhciBwID0gIiI7CisgICAgICAgICAgICAgICAgZm9yICh2YXIgamog
PSAwOyBqaiA8IG5hbWVzLmxlbmd0aDsgKytqaikgeworICAgICAgICAgICAgICAgICAgcyArPSBw
ICsgcHJlZml4ICsgbmFtZXNbampdOworICAgICAgICAgICAgICAgICAgcCA9ICIgIjsKKyAgICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZmlsZXNbaW5kZXgrK10gPSBzOworICAgICAg
ICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGZpbmlzaCh0
cnVlKTsKKworICAgICAgICAgIGZ1bmN0aW9uIGZpbmlzaChzdWNjZXNzKSB7CisgICAgICAgICAg
ICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgZmFpbCA9IHRydWU7CisgICAgICAgICAg
ICB9CisgICAgICAgICAgICAtLWNvdW50OworICAgICAgICAgICAgbG9nKCJjb3VudDogIiArIGNv
dW50KTsKKyAgICAgICAgICAgIGlmICghY291bnQpIHsKKyAgICAgICAgICAgICAgY2FsbGJhY2so
IWZhaWwsIGZpbGVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0KKyAg
ICAgIH0oKSk7CisKKyAgICB9IGVsc2UgeworICAgICAgZmlsZXMucHVzaCh1cmwpOworICAgICAg
Y2FsbGJhY2sodHJ1ZSwgZmlsZXMpOworICAgIH0KKyAgfTsKKworICBnZXRGaWxlTGlzdEltcGwo
dXJsLCBmdW5jdGlvbihzdWNjZXNzLCBmaWxlcykgeworICAgIC8vIGZsYXR0ZW4KKyAgICB2YXIg
ZmxhdCA9IFtdOworICAgIGZsYXR0ZW4oZmlsZXMpOworICAgIGZ1bmN0aW9uIGZsYXR0ZW4oZmls
ZXMpIHsKKyAgICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCBmaWxlcy5sZW5ndGg7ICsraWkpIHsK
KyAgICAgICAgdmFyIHZhbHVlID0gZmlsZXNbaWldOworICAgICAgICBpZiAodHlwZW9mKHZhbHVl
KSA9PSAic3RyaW5nIikgeworICAgICAgICAgIGZsYXQucHVzaCh2YWx1ZSk7CisgICAgICAgIH0g
ZWxzZSB7CisgICAgICAgICAgZmxhdHRlbih2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgIH0KKyAg
ICB9CisgICAgY2FsbGJhY2soc3VjY2VzcywgZmxhdCk7CisgIH0pOworfTsKKworLyoqCisgKiBH
ZXRzIGEgZmlsZSBmcm9tIGEgZmlsZS9VUkwuCisgKiBAcGFyYW0ge3N0cmluZ30gZmlsZSB0aGUg
VVJMIG9mIHRoZSBmaWxlIHRvIGdldC4KKyAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNvbnRlbnRz
IG9mIHRoZSBmaWxlLgorICovCit2YXIgcmVhZEZpbGUgPSBmdW5jdGlvbihmaWxlKSB7CisgIHZh
ciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgeGhyLm9wZW4oIkdFVCIsIGZpbGUsIGZh
bHNlKTsKKyAgeGhyLm92ZXJyaWRlTWltZVR5cGUoInRleHQvcGxhaW4iKTsKKyAgeGhyLnNlbmQo
KTsKKyAgcmV0dXJuIHhoci5yZXNwb25zZVRleHQucmVwbGFjZSgvXHIvZywgIiIpOworfTsKKwor
dmFyIHJlYWRGaWxlTGlzdCA9IGZ1bmN0aW9uKHVybCkgeworICB2YXIgZmlsZXMgPSBbXTsKKyAg
aWYgKHVybC5zdWJzdHIodXJsLmxlbmd0aCAtIDQpID09ICcudHh0JykgeworICAgIHZhciBsaW5l
cyA9IHJlYWRGaWxlKHVybCkuc3BsaXQoJ1xuJyk7CisgICAgdmFyIHByZWZpeCA9ICcnOworICAg
IHZhciBsYXN0U2xhc2ggPSB1cmwubGFzdEluZGV4T2YoJy8nKTsKKyAgICBpZiAobGFzdFNsYXNo
ID49IDApIHsKKyAgICAgIHByZWZpeCA9IHVybC5zdWJzdHIoMCwgbGFzdFNsYXNoICsgMSk7Cisg
ICAgfQorICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCBsaW5lcy5sZW5ndGg7ICsraWkpIHsKKyAg
ICAgIHZhciBzdHIgPSBsaW5lc1tpaV0ucmVwbGFjZSgvXlxzXHMqLywgJycpLnJlcGxhY2UoL1xz
XHMqJC8sICcnKTsKKyAgICAgIGlmIChzdHIubGVuZ3RoID4gNCAmJgorICAgICAgICAgIHN0clsw
XSAhPSAnIycgJiYKKyAgICAgICAgICBzdHJbMF0gIT0gIjsiICYmCisgICAgICAgICAgc3RyLnN1
YnN0cigwLCAyKSAhPSAiLy8iKSB7CisgICAgICAgIHZhciBuYW1lcyA9IHN0ci5zcGxpdCgvICsv
KTsKKyAgICAgICAgaWYgKG5hbWVzLmxlbmd0aCA9PSAxKSB7CisgICAgICAgICAgdmFyIG5ld191
cmwgPSBwcmVmaXggKyBzdHI7CisgICAgICAgICAgZmlsZXMgPSBmaWxlcy5jb25jYXQocmVhZEZp
bGVMaXN0KG5ld191cmwpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB2YXIgcyA9ICIi
OworICAgICAgICAgIHZhciBwID0gIiI7CisgICAgICAgICAgZm9yICh2YXIgamogPSAwOyBqaiA8
IG5hbWVzLmxlbmd0aDsgKytqaikgeworICAgICAgICAgICAgcyArPSBwICsgcHJlZml4ICsgbmFt
ZXNbampdOworICAgICAgICAgICAgcCA9ICIgIjsKKyAgICAgICAgICB9CisgICAgICAgICAgZmls
ZXMucHVzaChzKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfSBlbHNlIHsKKyAgICBm
aWxlcy5wdXNoKHVybCk7CisgIH0KKyAgcmV0dXJuIGZpbGVzOworfTsKKworLyoqCisgKiBMb2Fk
cyBhIHNoYWRlci4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdl
YkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge3N0cmluZ30gc2hhZGVyU291
cmNlIFRoZSBzaGFkZXIgc291cmNlLgorICogQHBhcmFtIHtudW1iZXJ9IHNoYWRlclR5cGUgVGhl
IHR5cGUgb2Ygc2hhZGVyLgorICogQHBhcmFtIHtmdW5jdGlvbihzdHJpbmcpOiB2b2lkfSBvcHRf
ZXJyb3JDYWxsYmFjayBjYWxsYmFjayBmb3IgZXJyb3JzLgorICogQHBhcmFtIHtib29sZWFufSBv
cHRfbG9nU2hhZGVycyBXaGV0aGVyIHRvIGxvZyBzaGFkZXIgc291cmNlLgorICogQHBhcmFtIHtz
dHJpbmd9IG9wdF9zaGFkZXJMYWJlbCBMYWJlbCB0aGF0IGlkZW50aWZpZXMgdGhlIHNoYWRlciBz
b3VyY2UgaW4KKyAqICAgICB0aGUgbG9nLgorICogQHBhcmFtIHtzdHJpbmd9IG9wdF91cmwgVVJM
IGZyb20gd2hlcmUgdGhlIHNoYWRlciBzb3VyY2Ugd2FzIGxvYWRlZCBmcm9tLgorICogICAgIElm
IG9wdF9sb2dTaGFkZXJzIGlzIHNldCwgdGhlbiBhIGxpbmsgdG8gdGhlIHNvdXJjZSBmaWxlIHdp
bGwgYWxzbyBiZQorICogICAgIGFkZGVkLgorICogQHBhcmFtIHtib29sZWFufSBTa2lwIGNvbXBp
bGF0aW9uIHN0YXR1cyBjaGVjay4gRGVmYXVsdCA9IGZhbHNlLgorICogQHJldHVybiB7IVdlYkdM
U2hhZGVyfSBUaGUgY3JlYXRlZCBzaGFkZXIuCisgKi8KK3ZhciBsb2FkU2hhZGVyID0gZnVuY3Rp
b24oCisgICAgZ2wsIHNoYWRlclNvdXJjZSwgc2hhZGVyVHlwZSwgb3B0X2Vycm9yQ2FsbGJhY2ss
IG9wdF9sb2dTaGFkZXJzLAorICAgIG9wdF9zaGFkZXJMYWJlbCwgb3B0X3VybCwgb3B0X3NraXBD
b21waWxlU3RhdHVzKSB7CisgIHZhciBlcnJGbiA9IG9wdF9lcnJvckNhbGxiYWNrIHx8IGVycm9y
OworICAvLyBDcmVhdGUgdGhlIHNoYWRlciBvYmplY3QKKyAgdmFyIHNoYWRlciA9IGdsLmNyZWF0
ZVNoYWRlcihzaGFkZXJUeXBlKTsKKyAgaWYgKHNoYWRlciA9PSBudWxsKSB7CisgICAgZXJyRm4o
IioqKiBFcnJvcjogdW5hYmxlIHRvIGNyZWF0ZSBzaGFkZXIgJyIrc2hhZGVyU291cmNlKyInIik7
CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICAvLyBMb2FkIHRoZSBzaGFkZXIgc291cmNlCisg
IGdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNoYWRlclNvdXJjZSk7CisKKyAgLy8gQ29tcGlsZSB0
aGUgc2hhZGVyCisgIGdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTsKKworICBpZiAob3B0X2xvZ1No
YWRlcnMpIHsKKyAgICB2YXIgbGFiZWwgPSBzaGFkZXJUeXBlID09IGdsLlZFUlRFWF9TSEFERVIg
PyAndmVydGV4IHNoYWRlcicgOiAnZnJhZ21lbnRfc2hhZGVyJzsKKyAgICBpZiAob3B0X3NoYWRl
ckxhYmVsKSB7CisgICAgICBsYWJlbCA9IG9wdF9zaGFkZXJMYWJlbCArICcgJyArIGxhYmVsOwor
ICAgIH0KKyAgICBhZGRTaGFkZXJTb3VyY2VzKAorICAgICAgICBnbCwgZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoJ2NvbnNvbGUnKSwgbGFiZWwsIHNoYWRlciwgc2hhZGVyU291cmNlLCBvcHRfdXJs
KTsKKyAgfQorCisgIC8vIENoZWNrIHRoZSBjb21waWxlIHN0YXR1cworICBpZiAoIW9wdF9za2lw
Q29tcGlsZVN0YXR1cykgeworICAgIHZhciBjb21waWxlZCA9IGdsLmdldFNoYWRlclBhcmFtZXRl
cihzaGFkZXIsIGdsLkNPTVBJTEVfU1RBVFVTKTsKKyAgICBpZiAoIWNvbXBpbGVkKSB7CisgICAg
ICAvLyBTb21ldGhpbmcgd2VudCB3cm9uZyBkdXJpbmcgY29tcGlsYXRpb247IGdldCB0aGUgZXJy
b3IKKyAgICAgIGxhc3RFcnJvciA9IGdsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKTsKKyAgICAg
IGVyckZuKCIqKiogRXJyb3IgY29tcGlsaW5nICIgKyBnbEVudW1Ub1N0cmluZyhnbCwgc2hhZGVy
VHlwZSkgKyAiICciICsgc2hhZGVyICsgIic6IiArIGxhc3RFcnJvcik7CisgICAgICBnbC5kZWxl
dGVTaGFkZXIoc2hhZGVyKTsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgfQorCisgIHJl
dHVybiBzaGFkZXI7Cit9CisKKy8qKgorICogTG9hZHMgYSBzaGFkZXIgZnJvbSBhIFVSTC4KKyAq
IEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge2ZpbGV9IGZpbGUgVGhlIFVSTCBvZiB0aGUgc2hhZGVy
IHNvdXJjZS4KKyAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlIFRoZSB0eXBlIG9mIHNoYWRlci4KKyAq
IEBwYXJhbSB7ZnVuY3Rpb24oc3RyaW5nKTogdm9pZH0gb3B0X2Vycm9yQ2FsbGJhY2sgY2FsbGJh
Y2sgZm9yIGVycm9ycy4KKyAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0X2xvZ1NoYWRlcnMgV2hldGhl
ciB0byBsb2cgc2hhZGVyIHNvdXJjZS4KKyAqIEBwYXJhbSB7Ym9vbGVhbn0gU2tpcCBjb21waWxh
dGlvbiBzdGF0dXMgY2hlY2suIERlZmF1bHQgPSBmYWxzZS4KKyAqIEByZXR1cm4geyFXZWJHTFNo
YWRlcn0gVGhlIGNyZWF0ZWQgc2hhZGVyLgorICovCit2YXIgbG9hZFNoYWRlckZyb21GaWxlID0g
ZnVuY3Rpb24oCisgICAgZ2wsIGZpbGUsIHR5cGUsIG9wdF9lcnJvckNhbGxiYWNrLCBvcHRfbG9n
U2hhZGVycywgb3B0X3NraXBDb21waWxlU3RhdHVzKSB7CisgIHZhciBzaGFkZXJTb3VyY2UgPSBy
ZWFkRmlsZShmaWxlKTsKKyAgcmV0dXJuIGxvYWRTaGFkZXIoZ2wsIHNoYWRlclNvdXJjZSwgdHlw
ZSwgb3B0X2Vycm9yQ2FsbGJhY2ssCisgICAgICBvcHRfbG9nU2hhZGVycywgdW5kZWZpbmVkLCBm
aWxlLCBvcHRfc2tpcENvbXBpbGVTdGF0dXMpOworfTsKKwordmFyIGxvYWRTaGFkZXJGcm9tRmls
ZUFzeW5jID0gZnVuY3Rpb24oCisgICAgZ2wsIGZpbGUsIHR5cGUsIG9wdF9lcnJvckNhbGxiYWNr
LCBvcHRfbG9nU2hhZGVycywgb3B0X3NraXBDb21waWxlU3RhdHVzLCBjYWxsYmFjaykgeworICBs
b2FkVGV4dEZpbGVBc3luYyhmaWxlLCBmdW5jdGlvbihnbCwgdHlwZSwgb3B0X2Vycm9yQ2FsbGJh
Y2ssIG9wdF9sb2dTaGFkZXJzLCBmaWxlLCBvcHRfc2tpcENvbXBpbGVTdGF0dXMpeworICAgICAg
cmV0dXJuIGZ1bmN0aW9uKHN1Y2Nlc3MsIHNoYWRlclNvdXJjZSkgeworICAgICAgICBpZiAoc3Vj
Y2VzcykgeworICAgICAgICAgIHZhciBzaGFkZXIgPSBsb2FkU2hhZGVyKGdsLCBzaGFkZXJTb3Vy
Y2UsIHR5cGUsIG9wdF9lcnJvckNhbGxiYWNrLAorICAgICAgICAgICAgICBvcHRfbG9nU2hhZGVy
cywgdW5kZWZpbmVkLCBmaWxlLCBvcHRfc2tpcENvbXBpbGVTdGF0dXMpOworICAgICAgICAgIGNh
bGxiYWNrKHRydWUsIHNoYWRlcik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgY2FsbGJh
Y2soZmFsc2UsIG51bGwpOworICAgICAgICB9CisgICAgICB9CisgIH0oZ2wsIHR5cGUsIG9wdF9l
cnJvckNhbGxiYWNrLCBvcHRfbG9nU2hhZGVycywgZmlsZSwgb3B0X3NraXBDb21waWxlU3RhdHVz
KSk7Cit9OworCisvKioKKyAqIEdldHMgdGhlIGNvbnRlbnQgb2Ygc2NyaXB0LgorICogQHBhcmFt
IHtzdHJpbmd9IHNjcmlwdElkIFRoZSBpZCBvZiB0aGUgc2NyaXB0IHRhZy4KKyAqIEByZXR1cm4g
e3N0cmluZ30gVGhlIGNvbnRlbnQgb2YgdGhlIHNjcmlwdC4KKyAqLwordmFyIGdldFNjcmlwdCA9
IGZ1bmN0aW9uKHNjcmlwdElkKSB7CisgIHZhciBzaGFkZXJTY3JpcHQgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZChzY3JpcHRJZCk7CisgIGlmICghc2hhZGVyU2NyaXB0KSB7CisgICAgdGhyb3co
IioqKiBFcnJvcjogdW5rbm93biBzY3JpcHQgZWxlbWVudCAiICsgc2NyaXB0SWQpOworICB9Cisg
IHJldHVybiBzaGFkZXJTY3JpcHQudGV4dDsKK307CisKKy8qKgorICogTG9hZHMgYSBzaGFkZXIg
ZnJvbSBhIHNjcmlwdCB0YWcuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGds
IFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtzdHJpbmd9IHNj
cmlwdElkIFRoZSBpZCBvZiB0aGUgc2NyaXB0IHRhZy4KKyAqIEBwYXJhbSB7bnVtYmVyfSBvcHRf
c2hhZGVyVHlwZSBUaGUgdHlwZSBvZiBzaGFkZXIuIElmIG5vdCBwYXNzZWQgaW4gaXQgd2lsbAor
ICogICAgIGJlIGRlcml2ZWQgZnJvbSB0aGUgdHlwZSBvZiB0aGUgc2NyaXB0IHRhZy4KKyAqIEBw
YXJhbSB7ZnVuY3Rpb24oc3RyaW5nKTogdm9pZH0gb3B0X2Vycm9yQ2FsbGJhY2sgY2FsbGJhY2sg
Zm9yIGVycm9ycy4KKyAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0X2xvZ1NoYWRlcnMgV2hldGhlciB0
byBsb2cgc2hhZGVyIHNvdXJjZS4KKyAqIEBwYXJhbSB7Ym9vbGVhbn0gU2tpcCBjb21waWxhdGlv
biBzdGF0dXMgY2hlY2suIERlZmF1bHQgPSBmYWxzZS4KKyAqIEByZXR1cm4geyFXZWJHTFNoYWRl
cn0gVGhlIGNyZWF0ZWQgc2hhZGVyLgorICovCit2YXIgbG9hZFNoYWRlckZyb21TY3JpcHQgPSBm
dW5jdGlvbigKKyAgICBnbCwgc2NyaXB0SWQsIG9wdF9zaGFkZXJUeXBlLCBvcHRfZXJyb3JDYWxs
YmFjaywgb3B0X2xvZ1NoYWRlcnMsIG9wdF9za2lwQ29tcGlsZVN0YXR1cykgeworICB2YXIgc2hh
ZGVyU291cmNlID0gIiI7CisgIHZhciBzaGFkZXJTY3JpcHQgPSBkb2N1bWVudC5nZXRFbGVtZW50
QnlJZChzY3JpcHRJZCk7CisgIGlmICghc2hhZGVyU2NyaXB0KSB7CisgICAgdGhyb3coIioqKiBF
cnJvcjogdW5rbm93biBzY3JpcHQgZWxlbWVudCAiICsgc2NyaXB0SWQpOworICB9CisgIHNoYWRl
clNvdXJjZSA9IHNoYWRlclNjcmlwdC50ZXh0LnRyaW0oKTsKKworICBpZiAoIW9wdF9zaGFkZXJU
eXBlKSB7CisgICAgaWYgKHNoYWRlclNjcmlwdC50eXBlID09ICJ4LXNoYWRlci94LXZlcnRleCIp
IHsKKyAgICAgIG9wdF9zaGFkZXJUeXBlID0gZ2wuVkVSVEVYX1NIQURFUjsKKyAgICB9IGVsc2Ug
aWYgKHNoYWRlclNjcmlwdC50eXBlID09ICJ4LXNoYWRlci94LWZyYWdtZW50IikgeworICAgICAg
b3B0X3NoYWRlclR5cGUgPSBnbC5GUkFHTUVOVF9TSEFERVI7CisgICAgfSBlbHNlIHsKKyAgICAg
IHRocm93KCIqKiogRXJyb3I6IHVua25vd24gc2hhZGVyIHR5cGUiKTsKKyAgICAgIHJldHVybiBu
dWxsOworICAgIH0KKyAgfQorCisgIHJldHVybiBsb2FkU2hhZGVyKGdsLCBzaGFkZXJTb3VyY2Us
IG9wdF9zaGFkZXJUeXBlLCBvcHRfZXJyb3JDYWxsYmFjaywKKyAgICAgIG9wdF9sb2dTaGFkZXJz
LCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgb3B0X3NraXBDb21waWxlU3RhdHVzKTsKK307CisKK3Zh
ciBsb2FkU3RhbmRhcmRQcm9ncmFtID0gZnVuY3Rpb24oZ2wpIHsKKyAgdmFyIHByb2dyYW0gPSBn
bC5jcmVhdGVQcm9ncmFtKCk7CisgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBsb2FkU3RhbmRh
cmRWZXJ0ZXhTaGFkZXIoZ2wpKTsKKyAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGxvYWRTdGFu
ZGFyZEZyYWdtZW50U2hhZGVyKGdsKSk7CisgIGdsLmJpbmRBdHRyaWJMb2NhdGlvbihwcm9ncmFt
LCAwLCAiYV92ZXJ0ZXgiKTsKKyAgZ2wuYmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIDEsICJh
X25vcm1hbCIpOworICBsaW5rUHJvZ3JhbShnbCwgcHJvZ3JhbSk7CisgIHJldHVybiBwcm9ncmFt
OworfTsKKwordmFyIGxvYWRTdGFuZGFyZFByb2dyYW1Bc3luYyA9IGZ1bmN0aW9uKGdsLCBjYWxs
YmFjaykgeworICBsb2FkU3RhbmRhcmRWZXJ0ZXhTaGFkZXJBc3luYyhnbCwgZnVuY3Rpb24oZ2wp
IHsKKyAgICByZXR1cm4gZnVuY3Rpb24oc3VjY2VzcywgdnMpIHsKKyAgICAgIGlmIChzdWNjZXNz
KSB7CisgICAgICAgIGxvYWRTdGFuZGFyZEZyYWdtZW50U2hhZGVyQXN5bmMoZ2wsIGZ1bmN0aW9u
KHZzKSB7CisgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHN1Y2Nlc3MsIGZzKSB7CisgICAgICAg
ICAgICBpZiAoc3VjY2VzcykgeworICAgICAgICAgICAgICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0
ZVByb2dyYW0oKTsKKyAgICAgICAgICAgICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIHZzKTsK
KyAgICAgICAgICAgICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGZzKTsKKyAgICAgICAgICAg
ICAgZ2wuYmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIDAsICJhX3ZlcnRleCIpOworICAgICAg
ICAgICAgICBnbC5iaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgMSwgImFfbm9ybWFsIik7Cisg
ICAgICAgICAgICAgIGxpbmtQcm9ncmFtKGdsLCBwcm9ncmFtKTsKKyAgICAgICAgICAgICAgY2Fs
bGJhY2sodHJ1ZSwgcHJvZ3JhbSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAgICAg
ICBjYWxsYmFjayhmYWxzZSwgbnVsbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfTsKKyAg
ICAgICAgfSh2cykpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgY2FsbGJhY2soZmFsc2UsIG51
bGwpOworICAgICAgfQorICAgIH07CisgIH0oZ2wpKTsKK307CisKKy8qKgorICogTG9hZHMgc2hh
ZGVycyBmcm9tIGZpbGVzLCBjcmVhdGVzIGEgcHJvZ3JhbSwgYXR0YWNoZXMgdGhlIHNoYWRlcnMg
YW5kIGxpbmtzLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJ0ZXhTaGFk
ZXJQYXRoIFRoZSBVUkwgb2YgdGhlIHZlcnRleCBzaGFkZXIuCisgKiBAcGFyYW0ge3N0cmluZ30g
ZnJhZ21lbnRTaGFkZXJQYXRoIFRoZSBVUkwgb2YgdGhlIGZyYWdtZW50IHNoYWRlci4KKyAqIEBw
YXJhbSB7ZnVuY3Rpb24oc3RyaW5nKTogdm9pZH0gb3B0X2Vycm9yQ2FsbGJhY2sgY2FsbGJhY2sg
Zm9yIGVycm9ycy4KKyAqIEByZXR1cm4geyFXZWJHTFByb2dyYW19IFRoZSBjcmVhdGVkIHByb2dy
YW0uCisgKi8KK3ZhciBsb2FkUHJvZ3JhbUZyb21GaWxlID0gZnVuY3Rpb24oCisgICAgZ2wsIHZl
cnRleFNoYWRlclBhdGgsIGZyYWdtZW50U2hhZGVyUGF0aCwgb3B0X2Vycm9yQ2FsbGJhY2spIHsK
KyAgdmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7CisgIHZhciB2cyA9IGxvYWRTaGFk
ZXJGcm9tRmlsZSgKKyAgICAgIGdsLCB2ZXJ0ZXhTaGFkZXJQYXRoLCBnbC5WRVJURVhfU0hBREVS
LCBvcHRfZXJyb3JDYWxsYmFjayk7CisgIHZhciBmcyA9IGxvYWRTaGFkZXJGcm9tRmlsZSgKKyAg
ICAgIGdsLCBmcmFnbWVudFNoYWRlclBhdGgsIGdsLkZSQUdNRU5UX1NIQURFUiwgb3B0X2Vycm9y
Q2FsbGJhY2spOworICBpZiAodnMgJiYgZnMpIHsKKyAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3Jh
bSwgdnMpOworICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBmcyk7CisgICAgbGlua1Byb2dy
YW0oZ2wsIHByb2dyYW0sIG9wdF9lcnJvckNhbGxiYWNrKTsKKyAgfQorICBpZiAodnMpIHsKKyAg
ICBnbC5kZWxldGVTaGFkZXIodnMpOworICB9CisgIGlmIChmcykgeworICAgIGdsLmRlbGV0ZVNo
YWRlcihmcyk7CisgIH0KKyAgcmV0dXJuIHByb2dyYW07Cit9OworCisvKioKKyAqIExvYWRzIHNo
YWRlcnMgZnJvbSBzY3JpcHQgdGFncywgY3JlYXRlcyBhIHByb2dyYW0sIGF0dGFjaGVzIHRoZSBz
aGFkZXJzIGFuZAorICogbGlua3MuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9
IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtzdHJpbmd9
IHZlcnRleFNjcmlwdElkIFRoZSBpZCBvZiB0aGUgc2NyaXB0IHRhZyB0aGF0IGNvbnRhaW5zIHRo
ZQorICogICAgICAgIHZlcnRleCBzaGFkZXIuCisgKiBAcGFyYW0ge3N0cmluZ30gZnJhZ21lbnRT
Y3JpcHRJZCBUaGUgaWQgb2YgdGhlIHNjcmlwdCB0YWcgdGhhdCBjb250YWlucyB0aGUKKyAqICAg
ICAgICBmcmFnbWVudCBzaGFkZXIuCisgKiBAcGFyYW0ge2Z1bmN0aW9uKHN0cmluZyk6IHZvaWR9
IG9wdF9lcnJvckNhbGxiYWNrIGNhbGxiYWNrIGZvciBlcnJvcnMuCisgKiBAcmV0dXJuIHshV2Vi
R0xQcm9ncmFtfSBUaGUgY3JlYXRlZCBwcm9ncmFtLgorICovCit2YXIgbG9hZFByb2dyYW1Gcm9t
U2NyaXB0ID0gZnVuY3Rpb24gbG9hZFByb2dyYW1Gcm9tU2NyaXB0KAorICAgIGdsLCB2ZXJ0ZXhT
Y3JpcHRJZCwgZnJhZ21lbnRTY3JpcHRJZCwgb3B0X2Vycm9yQ2FsbGJhY2spIHsKKyAgdmFyIHBy
b2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7CisgIGdsLmF0dGFjaFNoYWRlcigKKyAgICAgIHBy
b2dyYW0sCisgICAgICBsb2FkU2hhZGVyRnJvbVNjcmlwdCgKKyAgICAgICAgICBnbCwgdmVydGV4
U2NyaXB0SWQsIGdsLlZFUlRFWF9TSEFERVIsIG9wdF9lcnJvckNhbGxiYWNrKSk7CisgIGdsLmF0
dGFjaFNoYWRlcigKKyAgICAgIHByb2dyYW0sCisgICAgICBsb2FkU2hhZGVyRnJvbVNjcmlwdCgK
KyAgICAgICAgICBnbCwgZnJhZ21lbnRTY3JpcHRJZCwgIGdsLkZSQUdNRU5UX1NIQURFUiwgb3B0
X2Vycm9yQ2FsbGJhY2spKTsKKyAgbGlua1Byb2dyYW0oZ2wsIHByb2dyYW0sIG9wdF9lcnJvckNh
bGxiYWNrKTsKKyAgcmV0dXJuIHByb2dyYW07Cit9OworCisvKioKKyAqIExvYWRzIHNoYWRlcnMg
ZnJvbSBzb3VyY2UsIGNyZWF0ZXMgYSBwcm9ncmFtLCBhdHRhY2hlcyB0aGUgc2hhZGVycyBhbmQK
KyAqIGxpbmtzLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7IVdlYkdMU2hhZGVyfSB2ZXJ0
ZXhTaGFkZXIgVGhlIHZlcnRleCBzaGFkZXIuCisgKiBAcGFyYW0geyFXZWJHTFNoYWRlcn0gZnJh
Z21lbnRTaGFkZXIgVGhlIGZyYWdtZW50IHNoYWRlci4KKyAqIEBwYXJhbSB7ZnVuY3Rpb24oc3Ry
aW5nKTogdm9pZH0gb3B0X2Vycm9yQ2FsbGJhY2sgY2FsbGJhY2sgZm9yIGVycm9ycy4KKyAqIEBy
ZXR1cm4geyFXZWJHTFByb2dyYW19IFRoZSBjcmVhdGVkIHByb2dyYW0uCisgKi8KK3ZhciBjcmVh
dGVQcm9ncmFtID0gZnVuY3Rpb24oZ2wsIHZlcnRleFNoYWRlciwgZnJhZ21lbnRTaGFkZXIsIG9w
dF9lcnJvckNhbGxiYWNrKSB7CisgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgpOwor
ICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgdmVydGV4U2hhZGVyKTsKKyAgZ2wuYXR0YWNoU2hh
ZGVyKHByb2dyYW0sIGZyYWdtZW50U2hhZGVyKTsKKyAgbGlua1Byb2dyYW0oZ2wsIHByb2dyYW0s
IG9wdF9lcnJvckNhbGxiYWNrKTsKKyAgcmV0dXJuIHByb2dyYW07Cit9OworCisvKioKKyAqIExv
YWRzIHNoYWRlcnMgZnJvbSBzb3VyY2UsIGNyZWF0ZXMgYSBwcm9ncmFtLCBhdHRhY2hlcyB0aGUg
c2hhZGVycyBhbmQKKyAqIGxpbmtzLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0
fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7c3RyaW5n
fSB2ZXJ0ZXhTaGFkZXIgVGhlIHZlcnRleCBzaGFkZXIgc291cmNlLgorICogQHBhcmFtIHtzdHJp
bmd9IGZyYWdtZW50U2hhZGVyIFRoZSBmcmFnbWVudCBzaGFkZXIgc291cmNlLgorICogQHBhcmFt
IHtmdW5jdGlvbihzdHJpbmcpOiB2b2lkfSBvcHRfZXJyb3JDYWxsYmFjayBjYWxsYmFjayBmb3Ig
ZXJyb3JzLgorICogQHBhcmFtIHtib29sZWFufSBvcHRfbG9nU2hhZGVycyBXaGV0aGVyIHRvIGxv
ZyBzaGFkZXIgc291cmNlLgorICogQHJldHVybiB7IVdlYkdMUHJvZ3JhbX0gVGhlIGNyZWF0ZWQg
cHJvZ3JhbS4KKyAqLwordmFyIGxvYWRQcm9ncmFtID0gZnVuY3Rpb24oCisgICAgZ2wsIHZlcnRl
eFNoYWRlciwgZnJhZ21lbnRTaGFkZXIsIG9wdF9lcnJvckNhbGxiYWNrLCBvcHRfbG9nU2hhZGVy
cykgeworICB2YXIgcHJvZ3JhbTsKKyAgdmFyIHZzID0gbG9hZFNoYWRlcigKKyAgICAgIGdsLCB2
ZXJ0ZXhTaGFkZXIsIGdsLlZFUlRFWF9TSEFERVIsIG9wdF9lcnJvckNhbGxiYWNrLCBvcHRfbG9n
U2hhZGVycyk7CisgIHZhciBmcyA9IGxvYWRTaGFkZXIoCisgICAgICBnbCwgZnJhZ21lbnRTaGFk
ZXIsIGdsLkZSQUdNRU5UX1NIQURFUiwgb3B0X2Vycm9yQ2FsbGJhY2ssIG9wdF9sb2dTaGFkZXJz
KTsKKyAgaWYgKHZzICYmIGZzKSB7CisgICAgcHJvZ3JhbSA9IGNyZWF0ZVByb2dyYW0oZ2wsIHZz
LCBmcywgb3B0X2Vycm9yQ2FsbGJhY2spCisgIH0KKyAgaWYgKHZzKSB7CisgICAgZ2wuZGVsZXRl
U2hhZGVyKHZzKTsKKyAgfQorICBpZiAoZnMpIHsKKyAgICBnbC5kZWxldGVTaGFkZXIoZnMpOwor
ICB9CisgIHJldHVybiBwcm9ncmFtOworfTsKKworLyoqCisgKiBMb2FkcyBzaGFkZXJzIGZyb20g
c291cmNlLCBjcmVhdGVzIGEgcHJvZ3JhbSwgYXR0YWNoZXMgdGhlIHNoYWRlcnMgYW5kCisgKiBs
aW5rcyBidXQgZXhwZWN0cyBlcnJvci4KKyAqCisgKiBHTFNMIDEuMC4xNyAxMC4yNyBlZmZlY3Rp
dmVseSBzYXlzIHRoYXQgY29tcGlsZVNoYWRlciBjYW4KKyAqIGFsd2F5cyBzdWNjZWVkIGFzIGxv
bmcgYXMgbGlua1Byb2dyYW0gZmFpbHMgc28gd2UgY2FuJ3QKKyAqIHJlbHkgb24gY29tcGlsZVNo
YWRlciBmYWlsaW5nLiBUaGlzIGZ1bmN0aW9uIGV4cGVjdHMKKyAqIG9uZSBvZiB0aGUgc2hhZGVy
IHRvIGZhaWwgT1IgbGlua2luZyB0byBmYWlsLgorICoKKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVy
aW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFy
YW0ge3N0cmluZ30gdmVydGV4U2hhZGVyU2NyaXB0SWQgVGhlIHZlcnRleCBzaGFkZXIuCisgKiBA
cGFyYW0ge3N0cmluZ30gZnJhZ21lbnRTaGFkZXJTY3JpcHRJZCBUaGUgZnJhZ21lbnQgc2hhZGVy
LgorICogQHJldHVybiB7V2ViR0xQcm9ncmFtfSBUaGUgY3JlYXRlZCBwcm9ncmFtLgorICovCit2
YXIgbG9hZFByb2dyYW1Gcm9tU2NyaXB0RXhwZWN0RXJyb3IgPSBmdW5jdGlvbigKKyAgICBnbCwg
dmVydGV4U2hhZGVyU2NyaXB0SWQsIGZyYWdtZW50U2hhZGVyU2NyaXB0SWQpIHsKKyAgdmFyIHZl
cnRleFNoYWRlciA9IGxvYWRTaGFkZXJGcm9tU2NyaXB0KGdsLCB2ZXJ0ZXhTaGFkZXJTY3JpcHRJ
ZCk7CisgIGlmICghdmVydGV4U2hhZGVyKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKyAgdmFy
IGZyYWdtZW50U2hhZGVyID0gbG9hZFNoYWRlckZyb21TY3JpcHQoZ2wsIGZyYWdtZW50U2hhZGVy
U2NyaXB0SWQpOworICBpZiAoIWZyYWdtZW50U2hhZGVyKSB7CisgICAgcmV0dXJuIG51bGw7Cisg
IH0KKyAgdmFyIGxpbmtTdWNjZXNzID0gdHJ1ZTsKKyAgdmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQ
cm9ncmFtKCk7CisgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIpOworICBn
bC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXIpOworICBsaW5rU3VjY2VzcyA9
IHRydWU7CisgIGxpbmtQcm9ncmFtKGdsLCBwcm9ncmFtLCBmdW5jdGlvbigpIHsKKyAgICAgIGxp
bmtTdWNjZXNzID0gZmFsc2U7CisgICAgfSk7CisgIHJldHVybiBsaW5rU3VjY2VzcyA/IHByb2dy
YW0gOiBudWxsOworfTsKKworCit2YXIgZ2V0QWN0aXZlTWFwID0gZnVuY3Rpb24oZ2wsIHByb2dy
YW0sIHR5cGVJbmZvKSB7CisgIHZhciBudW1WYXJpYWJsZXMgPSBnbC5nZXRQcm9ncmFtUGFyYW1l
dGVyKHByb2dyYW0sIGdsW3R5cGVJbmZvLnBhcmFtXSk7CisgIHZhciB2YXJpYWJsZXMgPSB7fTsK
KyAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IG51bVZhcmlhYmxlczsgKytpaSkgeworICAgIHZhciBp
bmZvID0gZ2xbdHlwZUluZm8uYWN0aXZlRm5dKHByb2dyYW0sIGlpKTsKKyAgICB2YXJpYWJsZXNb
aW5mby5uYW1lXSA9IHsKKyAgICAgIG5hbWU6IGluZm8ubmFtZSwKKyAgICAgIHNpemU6IGluZm8u
c2l6ZSwKKyAgICAgIHR5cGU6IGluZm8udHlwZSwKKyAgICAgIGxvY2F0aW9uOiBnbFt0eXBlSW5m
by5sb2NGbl0ocHJvZ3JhbSwgaW5mby5uYW1lKQorICAgIH07CisgIH0KKyAgcmV0dXJuIHZhcmlh
YmxlczsKK307CisKKy8qKgorICogUmV0dXJucyBhIG1hcCBvZiBhdHRyaWIgbmFtZXMgdG8gaW5m
byBhYm91dCB0aG9zZQorICogYXR0cmlicy4KKyAqCisgKiBlZzoKKyAqICAgIHsgImF0dHJpYjFO
YW1lIjoKKyAqICAgICAgeworICogICAgICAgIG5hbWU6ICJhdHRyaWIxTmFtZSIsCisgKiAgICAg
ICAgc2l6ZTogMSwKKyAqICAgICAgICB0eXBlOiBnbC5GTE9BVF9NQVQyLAorICogICAgICAgIGxv
Y2F0aW9uOiAwCisgKiAgICAgIH0sCisgKiAgICAgICJhdHRyaWIyTmFtZVswXSI6CisgKiAgICAg
IHsKKyAqICAgICAgICAgbmFtZTogImF0dHJpYjJOYW1lWzBdIiwKKyAqICAgICAgICAgc2l6ZTog
NCwKKyAqICAgICAgICAgdHlwZTogZ2wuRkxPQVQsCisgKiAgICAgICAgIGxvY2F0aW9uOiAxCisg
KiAgICAgIH0sCisgKiAgICB9CisgKgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0
fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7V2ViR0xQ
cm9ncmFtfSBUaGUgcHJvZ3JhbSB0byBxdWVyeSBmb3IgYXR0cmlicy4KKyAqIEByZXR1cm4gdGhl
IG1hcC4KKyAqLwordmFyIGdldEF0dHJpYk1hcCA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKSB7Cisg
IHJldHVybiBnZXRBY3RpdmVNYXAoZ2wsIHByb2dyYW0sIHsKKyAgICAgIHBhcmFtOiAiQUNUSVZF
X0FUVFJJQlVURVMiLAorICAgICAgYWN0aXZlRm46ICJnZXRBY3RpdmVBdHRyaWIiLAorICAgICAg
bG9jRm46ICJnZXRBdHRyaWJMb2NhdGlvbiIKKyAgfSk7Cit9OworCisvKioKKyAqIFJldHVybnMg
YSBtYXAgb2YgdW5pZm9ybSBuYW1lcyB0byBpbmZvIGFib3V0IHRob3NlIHVuaWZvcm1zLgorICoK
KyAqIGVnOgorICogICAgeyAidW5pZm9ybTFOYW1lIjoKKyAqICAgICAgeworICogICAgICAgIG5h
bWU6ICJ1bmlmb3JtMU5hbWUiLAorICogICAgICAgIHNpemU6IDEsCisgKiAgICAgICAgdHlwZTog
Z2wuRkxPQVRfTUFUMiwKKyAqICAgICAgICBsb2NhdGlvbjogV2ViR0xVbmlmb3JtTG9jYXRpb24K
KyAqICAgICAgfSwKKyAqICAgICAgInVuaWZvcm0yTmFtZVswXSI6CisgKiAgICAgIHsKKyAqICAg
ICAgICAgbmFtZTogInVuaWZvcm0yTmFtZVswXSIsCisgKiAgICAgICAgIHNpemU6IDQsCisgKiAg
ICAgICAgIHR5cGU6IGdsLkZMT0FULAorICogICAgICAgICBsb2NhdGlvbjogV2ViR0xVbmlmb3Jt
TG9jYXRpb24KKyAqICAgICAgfSwKKyAqICAgIH0KKyAqCisgKiBAcGFyYW0geyFXZWJHTFJlbmRl
cmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBh
cmFtIHtXZWJHTFByb2dyYW19IFRoZSBwcm9ncmFtIHRvIHF1ZXJ5IGZvciB1bmlmb3Jtcy4KKyAq
IEByZXR1cm4gdGhlIG1hcC4KKyAqLwordmFyIGdldFVuaWZvcm1NYXAgPSBmdW5jdGlvbihnbCwg
cHJvZ3JhbSkgeworICByZXR1cm4gZ2V0QWN0aXZlTWFwKGdsLCBwcm9ncmFtLCB7CisgICAgICBw
YXJhbTogIkFDVElWRV9VTklGT1JNUyIsCisgICAgICBhY3RpdmVGbjogImdldEFjdGl2ZVVuaWZv
cm0iLAorICAgICAgbG9jRm46ICJnZXRVbmlmb3JtTG9jYXRpb24iCisgIH0pOworfTsKKwordmFy
IGJhc2VQYXRoOwordmFyIGdldFJlc291cmNlUGF0aCA9IGZ1bmN0aW9uKCkgeworICBpZiAoIWJh
c2VQYXRoKSB7CisgICAgdmFyIGV4cGVjdGVkQmFzZSA9ICJqcy93ZWJnbC10ZXN0LXV0aWxzLmpz
IjsKKyAgICB2YXIgc2NyaXB0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdzY3Jp
cHQnKTsKKyAgICBmb3IgKHZhciBzY3JpcHQsIGkgPSAwOyBzY3JpcHQgPSBzY3JpcHRzW2ldOyBp
KyspIHsKKyAgICAgIHZhciBzcmMgPSBzY3JpcHQuc3JjOworICAgICAgdmFyIGwgPSBzcmMubGVu
Z3RoOworICAgICAgaWYgKHNyYy5zdWJzdHIobCAtIGV4cGVjdGVkQmFzZS5sZW5ndGgpID09IGV4
cGVjdGVkQmFzZSkgeworICAgICAgICBiYXNlUGF0aCA9IHNyYy5zdWJzdHIoMCwgbCAtIGV4cGVj
dGVkQmFzZS5sZW5ndGgpOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gYmFzZVBhdGgg
KyAicmVzb3VyY2VzLyI7Cit9OworCit2YXIgbG9hZFN0YW5kYXJkVmVydGV4U2hhZGVyID0gZnVu
Y3Rpb24oZ2wpIHsKKyAgcmV0dXJuIGxvYWRTaGFkZXJGcm9tRmlsZSgKKyAgICAgIGdsLCBnZXRS
ZXNvdXJjZVBhdGgoKSArICJ2ZXJ0ZXhTaGFkZXIudmVydCIsIGdsLlZFUlRFWF9TSEFERVIpOwor
fTsKK3ZhciBsb2FkU3RhbmRhcmRWZXJ0ZXhTaGFkZXJBc3luYyA9IGZ1bmN0aW9uKGdsLCBjYWxs
YmFjaykgeworICBsb2FkU2hhZGVyRnJvbUZpbGVBc3luYyhnbCwgZ2V0UmVzb3VyY2VQYXRoKCkg
KyAidmVydGV4U2hhZGVyLnZlcnQiLCBnbC5WRVJURVhfU0hBREVSLCB1bmRlZmluZWQsIHVuZGVm
aW5lZCwgdW5kZWZpbmVkLCBjYWxsYmFjayk7Cit9OworCit2YXIgbG9hZFN0YW5kYXJkRnJhZ21l
bnRTaGFkZXIgPSBmdW5jdGlvbihnbCkgeworICByZXR1cm4gbG9hZFNoYWRlckZyb21GaWxlKAor
ICAgICAgZ2wsIGdldFJlc291cmNlUGF0aCgpICsgImZyYWdtZW50U2hhZGVyLmZyYWciLCBnbC5G
UkFHTUVOVF9TSEFERVIpOworfTsKK3ZhciBsb2FkU3RhbmRhcmRGcmFnbWVudFNoYWRlckFzeW5j
ID0gZnVuY3Rpb24oZ2wsIGNhbGxiYWNrKSB7CisgIGxvYWRTaGFkZXJGcm9tRmlsZUFzeW5jKGds
LCBnZXRSZXNvdXJjZVBhdGgoKSArICJmcmFnbWVudFNoYWRlci5mcmFnIiwgZ2wuRlJBR01FTlRf
U0hBREVSLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBjYWxsYmFjayk7Cit9Owor
Cit2YXIgbG9hZFVuaWZvcm1CbG9ja1Byb2dyYW0gPSBmdW5jdGlvbihnbCkgeworICB2YXIgcHJv
Z3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTsKKyAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGxv
YWRVbmlmb3JtQmxvY2tWZXJ0ZXhTaGFkZXIoZ2wpKTsKKyAgZ2wuYXR0YWNoU2hhZGVyKHByb2dy
YW0sIGxvYWRVbmlmb3JtQmxvY2tGcmFnbWVudFNoYWRlcihnbCkpOworICBnbC5iaW5kQXR0cmli
TG9jYXRpb24ocHJvZ3JhbSwgMCwgImFfdmVydGV4Iik7CisgIGdsLmJpbmRBdHRyaWJMb2NhdGlv
bihwcm9ncmFtLCAxLCAiYV9ub3JtYWwiKTsKKyAgbGlua1Byb2dyYW0oZ2wsIHByb2dyYW0pOwor
ICByZXR1cm4gcHJvZ3JhbTsKK307CisKK3ZhciBsb2FkVW5pZm9ybUJsb2NrVmVydGV4U2hhZGVy
ID0gZnVuY3Rpb24oZ2wpIHsKKyAgcmV0dXJuIGxvYWRTaGFkZXJGcm9tRmlsZSgKKyAgICAgIGds
LCBnZXRSZXNvdXJjZVBhdGgoKSArICJ1bmlmb3JtQmxvY2tTaGFkZXIudmVydCIsIGdsLlZFUlRF
WF9TSEFERVIpOworfTsKKwordmFyIGxvYWRVbmlmb3JtQmxvY2tGcmFnbWVudFNoYWRlciA9IGZ1
bmN0aW9uKGdsKSB7CisgIHJldHVybiBsb2FkU2hhZGVyRnJvbUZpbGUoCisgICAgICBnbCwgZ2V0
UmVzb3VyY2VQYXRoKCkgKyAidW5pZm9ybUJsb2NrU2hhZGVyLmZyYWciLCBnbC5GUkFHTUVOVF9T
SEFERVIpOworfTsKKworLyoqCisgKiBMb2FkcyBhbiBpbWFnZSBhc3luY2hyb25vdXNseS4KKyAq
IEBwYXJhbSB7c3RyaW5nfSB1cmwgVVJMIG9mIGltYWdlIHRvIGxvYWQuCisgKiBAcGFyYW0geyFm
dW5jdGlvbighRWxlbWVudCk6IHZvaWR9IGNhbGxiYWNrIEZ1bmN0aW9uIHRvIGNhbGwKKyAqICAg
ICB3aXRoIGxvYWRlZCBpbWFnZS4KKyAqLwordmFyIGxvYWRJbWFnZUFzeW5jID0gZnVuY3Rpb24o
dXJsLCBjYWxsYmFjaykgeworICB2YXIgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgnaW1n
Jyk7CisgIGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHsKKyAgICBjYWxsYmFjayhpbWcpOworICB9
OworICBpbWcuc3JjID0gdXJsOworfTsKKworLyoqCisgKiBMb2FkcyBhbiBhcnJheSBvZiBpbWFn
ZXMuCisgKiBAcGFyYW0geyFBcnJheS48c3RyaW5nPn0gdXJscyBVUkxzIG9mIGltYWdlcyB0byBs
b2FkLgorICogQHBhcmFtIHshZnVuY3Rpb24oIXtzdHJpbmcsIGltZ30pOiB2b2lkfSBjYWxsYmFj
ayBDYWxsYmFjaworICogICAgIHRoYXQgZ2V0cyBwYXNzZWQgbWFwIG9mIHVybHMgdG8gaW1nIHRh
Z3MuCisgKi8KK3ZhciBsb2FkSW1hZ2VzQXN5bmMgPSBmdW5jdGlvbih1cmxzLCBjYWxsYmFjaykg
eworICB2YXIgY291bnQgPSAxOworICB2YXIgaW1hZ2VzID0geyB9OworICBmdW5jdGlvbiBjb3Vu
dERvd24oKSB7CisgICAgLS1jb3VudDsKKyAgICBpZiAoY291bnQgPT0gMCkgeworICAgICAgbG9n
KCJsb2FkSW1hZ2VzQXN5bmM6IGFsbCBpbWFnZXMgbG9hZGVkIik7CisgICAgICBjYWxsYmFjayhp
bWFnZXMpOworICAgIH0KKyAgfQorICBmdW5jdGlvbiBpbWFnZUxvYWRlZCh1cmwpIHsKKyAgICBy
ZXR1cm4gZnVuY3Rpb24oaW1nKSB7CisgICAgICBpbWFnZXNbdXJsXSA9IGltZzsKKyAgICAgIGxv
ZygibG9hZEltYWdlc0FzeW5jOiBsb2FkZWQgIiArIHVybCk7CisgICAgICBjb3VudERvd24oKTsK
KyAgICB9CisgIH0KKyAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IHVybHMubGVuZ3RoOyArK2lpKSB7
CisgICAgKytjb3VudDsKKyAgICBsb2FkSW1hZ2VBc3luYyh1cmxzW2lpXSwgaW1hZ2VMb2FkZWQo
dXJsc1tpaV0pKTsKKyAgfQorICBjb3VudERvd24oKTsKK307CisKKy8qKgorICogUmV0dXJucyBh
IG1hcCBvZiBrZXk9dmFsdWUgdmFsdWVzIGZyb20gdXJsLgorICogQHJldHVybiB7IU9iamVjdC48
c3RyaW5nLCBudW1iZXI+fSBtYXAgb2Yga2V5cyB0byB2YWx1ZXMuCisgKi8KK3ZhciBnZXRVcmxB
cmd1bWVudHMgPSBmdW5jdGlvbigpIHsKKyAgdmFyIGFyZ3MgPSB7fTsKKyAgdHJ5IHsKKyAgICB2
YXIgcyA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmOworICAgIHZhciBxID0gcy5pbmRleE9mKCI/Iik7
CisgICAgdmFyIGUgPSBzLmluZGV4T2YoIiMiKTsKKyAgICBpZiAoZSA8IDApIHsKKyAgICAgIGUg
PSBzLmxlbmd0aDsKKyAgICB9CisgICAgdmFyIHF1ZXJ5ID0gcy5zdWJzdHJpbmcocSArIDEsIGUp
OworICAgIHZhciBwYWlycyA9IHF1ZXJ5LnNwbGl0KCImIik7CisgICAgZm9yICh2YXIgaWkgPSAw
OyBpaSA8IHBhaXJzLmxlbmd0aDsgKytpaSkgeworICAgICAgdmFyIGtleVZhbHVlID0gcGFpcnNb
aWldLnNwbGl0KCI9Iik7CisgICAgICB2YXIga2V5ID0ga2V5VmFsdWVbMF07CisgICAgICB2YXIg
dmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQoa2V5VmFsdWVbMV0pOworICAgICAgYXJnc1trZXld
ID0gdmFsdWU7CisgICAgfQorICB9IGNhdGNoIChlKSB7CisgICAgdGhyb3cgImNvdWxkIG5vdCBw
YXJzZSB1cmwiOworICB9CisgIHJldHVybiBhcmdzOworfTsKKworLyoqCisgKiBNYWtlcyBhbiBp
bWFnZSBmcm9tIGEgc3JjLgorICogQHBhcmFtIHtzdHJpbmd9IHNyYyBJbWFnZSBzb3VyY2UgVVJM
LgorICogQHBhcmFtIHtmdW5jdGlvbigpfSBvbmxvYWQgQ2FsbGJhY2sgdG8gY2FsbCB3aGVuIHRo
ZSBpbWFnZSBoYXMgZmluaXNlZCBsb2FkaW5nLgorICogQHBhcmFtIHtmdW5jdGlvbigpfSBvbmVy
cm9yIENhbGxiYWNrIHRvIGNhbGwgd2hlbiBhbiBlcnJvciBvY2N1cnMuCisgKiBAcmV0dXJuIHsh
SW1hZ2V9IFRoZSBjcmVhdGVkIGltYWdlLgorICovCit2YXIgbWFrZUltYWdlID0gZnVuY3Rpb24o
c3JjLCBvbmxvYWQsIG9uZXJyb3IpIHsKKyAgdmFyIGltZyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1l
bnQoJ2ltZycpOworICBpZiAob25sb2FkKSB7CisgICAgaW1nLm9ubG9hZCA9IG9ubG9hZDsKKyAg
fQorICBpZiAob25lcnJvcikgeworICAgIGltZy5vbmVycm9yID0gb25lcnJvcjsKKyAgfSBlbHNl
IHsKKyAgICBpbWcub25lcnJvciA9IGZ1bmN0aW9uKCkgeworICAgICAgbG9nKCJXQVJOSU5HOiBj
cmVhdGluZyBpbWFnZSBmYWlsZWQ7IHNyYzogIiArIHRoaXMuc3JjKTsKKyAgICB9OworICB9Cisg
IGlmIChzcmMpIHsKKyAgICBpbWcuc3JjID0gc3JjOworICB9CisgIHJldHVybiBpbWc7Cit9CisK
Ky8qKgorICogTWFrZXMgYW4gaW1hZ2UgZWxlbWVudCBmcm9tIGEgY2FudmFzLgorICogQHBhcmFt
IHshSFRNTENhbnZhc30gY2FudmFzIENhbnZhcyB0byBtYWtlIGltYWdlIGZyb20uCisgKiBAcGFy
YW0ge2Z1bmN0aW9uKCl9IG9ubG9hZCBDYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIGltYWdlIGhh
cyBmaW5pc2VkIGxvYWRpbmcuCisgKiBAcGFyYW0ge3N0cmluZ30gaW1hZ2VGb3JtYXQgSW1hZ2Ug
Zm9ybWF0IHRvIGJlIHBhc3NlZCB0byB0b0RhdGFVcmwoKS4KKyAqIEByZXR1cm4geyFJbWFnZX0g
VGhlIGNyZWF0ZWQgaW1hZ2UuCisgKi8KK3ZhciBtYWtlSW1hZ2VGcm9tQ2FudmFzID0gZnVuY3Rp
b24oY2FudmFzLCBvbmxvYWQsIGltYWdlRm9ybWF0KSB7CisgIHJldHVybiBtYWtlSW1hZ2UoY2Fu
dmFzLnRvRGF0YVVSTChpbWFnZUZvcm1hdCksIG9ubG9hZCk7Cit9OworCisvKioKKyAqIE1ha2Vz
IGEgdmlkZW8gZWxlbWVudCBmcm9tIGEgc3JjLgorICogQHBhcmFtIHtzdHJpbmd9IHNyYyBWaWRl
byBzb3VyY2UgVVJMLgorICogQHBhcmFtIHtmdW5jdGlvbigpfSBvbmVycm9yIENhbGxiYWNrIHRv
IGNhbGwgd2hlbiBhbiBlcnJvciBvY2N1cnMuCisgKiBAcmV0dXJuIHshVmlkZW99IFRoZSBjcmVh
dGVkIHZpZGVvLgorICovCit2YXIgbWFrZVZpZGVvID0gZnVuY3Rpb24oc3JjLCBvbmVycm9yKSB7
CisgIHZhciB2aWQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpOworICB2aWQubXV0
ZWQgPSB0cnVlOworICBpZiAob25lcnJvcikgeworICAgIHZpZC5vbmVycm9yID0gb25lcnJvcjsK
KyAgfSBlbHNlIHsKKyAgICB2aWQub25lcnJvciA9IGZ1bmN0aW9uKCkgeworICAgICAgbG9nKCJX
QVJOSU5HOiBjcmVhdGluZyB2aWRlbyBmYWlsZWQ7IHNyYzogIiArIHRoaXMuc3JjKTsKKyAgICB9
OworICB9CisgIGlmIChzcmMpIHsKKyAgICB2aWQuc3JjID0gc3JjOworICB9CisgIHJldHVybiB2
aWQ7Cit9CisKKy8qKgorICogSW5zZXJ0cyBhbiBpbWFnZSB3aXRoIGEgY2FwdGlvbiBpbnRvICdl
bGVtZW50Jy4KKyAqIEBwYXJhbSB7IUhUTUxFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgdG8gYXBw
ZW5kIGltYWdlIHRvLgorICogQHBhcmFtIHtzdHJpbmd9IGNhcHRpb24gY2FwdGlvbiB0byBhc3Nv
Y2lhdGUgd2l0aCBpbWFnZS4KKyAqIEBwYXJhbSB7IUltYWdlfSBpbWcgaW1hZ2UgdG8gaW5zZXJ0
LgorICovCit2YXIgaW5zZXJ0SW1hZ2UgPSBmdW5jdGlvbihlbGVtZW50LCBjYXB0aW9uLCBpbWcp
IHsKKyAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICB2YXIgbGFi
ZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgbGFiZWwuYXBwZW5kQ2hpbGQo
ZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY2FwdGlvbikpOworICBkaXYuYXBwZW5kQ2hpbGQobGFi
ZWwpOworICBkaXYuYXBwZW5kQ2hpbGQoaW1nKTsKKyAgZWxlbWVudC5hcHBlbmRDaGlsZChkaXYp
OworfTsKKworLyoqCisgKiBJbnNlcnRzIGEgJ2xhYmVsJyB0aGF0IHdoZW4gY2xpY2tlZCBleHBh
bmRzIHRvIHRoZSBwcmUgZm9ybWF0dGVkIHRleHQKKyAqIHN1cHBsaWVkIGJ5ICdzb3VyY2UnLgor
ICogQHBhcmFtIHshSFRNTEVsZW1lbnR9IGVsZW1lbnQgZWxlbWVudCB0byBhcHBlbmQgbGFiZWwg
dG8uCisgKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgbGFiZWwgZm9yIGFuY2hvci4KKyAqIEBwYXJh
bSB7c3RyaW5nfSBzb3VyY2UgcHJlZm9ybWF0dGVkIHRleHQgdG8gZXhwYW5kIHRvLgorICogQHBh
cmFtIHtzdHJpbmd9IG9wdF91cmwgVVJMIG9mIHNvdXJjZS4gSWYgcHJvdmlkZWQgYSBsaW5rIHRv
IHRoZSBzb3VyY2UgZmlsZQorICogICAgIHdpbGwgYWxzbyBiZSBhZGRlZC4KKyAqLwordmFyIGFk
ZFNoYWRlclNvdXJjZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIGxhYmVsLCBzb3VyY2UsIG9wdF91cmwp
IHsKKyAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICB2YXIgcyA9
IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInByZSIpOworICBzLmNsYXNzTmFtZSA9ICJzaGFkZXIt
c291cmNlIjsKKyAgcy5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICB2YXIgb2wgPSBkb2N1bWVu
dC5jcmVhdGVFbGVtZW50KCJvbCIpOworICAvL3MuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUoc291cmNlKSk7CisgIHZhciBsaW5lcyA9IHNvdXJjZS5zcGxpdCgiXG4iKTsKKyAg
Zm9yICh2YXIgaWkgPSAwOyBpaSA8IGxpbmVzLmxlbmd0aDsgKytpaSkgeworICAgIHZhciBsaW5l
ID0gbGluZXNbaWldOworICAgIHZhciBsaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxpIik7
CisgICAgbGkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobGluZSkpOworICAg
IG9sLmFwcGVuZENoaWxkKGxpKTsKKyAgfQorICBzLmFwcGVuZENoaWxkKG9sKTsKKyAgdmFyIGwg
PSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CisgIGwuaHJlZiA9ICJzaG93LXNoYWRlci1z
b3VyY2UiOworICBsLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGxhYmVsKSk7
CisgIGwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihldmVudCkgeworICAgICAg
aWYgKGV2ZW50LnByZXZlbnREZWZhdWx0KSB7CisgICAgICAgIGV2ZW50LnByZXZlbnREZWZhdWx0
KCk7CisgICAgICB9CisgICAgICBzLnN0eWxlLmRpc3BsYXkgPSAocy5zdHlsZS5kaXNwbGF5ID09
ICdub25lJykgPyAnYmxvY2snIDogJ25vbmUnOworICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0s
IGZhbHNlKTsKKyAgZGl2LmFwcGVuZENoaWxkKGwpOworICBpZiAob3B0X3VybCkgeworICAgIHZh
ciB1ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOworICAgIHUuaHJlZiA9IG9wdF91cmw7
CisgICAgZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIgIikpOworICAg
IHUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIigiICsgb3B0X3VybCArICIp
IikpOworICAgIGRpdi5hcHBlbmRDaGlsZCh1KTsKKyAgfQorICBkaXYuYXBwZW5kQ2hpbGQocyk7
CisgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZGl2KTsKK307CisKKy8qKgorICogSW5zZXJ0cyBsYWJl
bHMgdGhhdCB3aGVuIGNsaWNrZWQgZXhwYW5kIHRvIHNob3cgdGhlIG9yaWdpbmFsIHNvdXJjZSBv
ZiB0aGUKKyAqIHNoYWRlciBhbmQgYWxzbyB0cmFuc2xhdGVkIHNvdXJjZSBvZiB0aGUgc2hhZGVy
LCBpZiB0aGF0IGlzIGF2YWlsYWJsZS4KKyAqIEBwYXJhbSB7V2ViR0xSZW5kZXJpbmdDb250ZXh0
fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7IUhUTUxF
bGVtZW50fSBlbGVtZW50IGVsZW1lbnQgdG8gYXBwZW5kIGxhYmVsIHRvLgorICogQHBhcmFtIHtz
dHJpbmd9IGxhYmVsIGxhYmVsIGZvciBhbmNob3IuCisgKiBAcGFyYW0ge1dlYkdMU2hhZGVyfSBz
aGFkZXIgU2hhZGVyIHRvIHNob3cgdGhlIHNvdXJjZXMgZm9yLgorICogQHBhcmFtIHtzdHJpbmd9
IHNoYWRlclNvdXJjZSBPcmlnaW5hbCBzaGFkZXIgc291cmNlLgorICogQHBhcmFtIHtzdHJpbmd9
IG9wdF91cmwgVVJMIG9mIHNvdXJjZS4gSWYgcHJvdmlkZWQgYSBsaW5rIHRvIHRoZSBzb3VyY2Ug
ZmlsZQorICogICAgIHdpbGwgYWxzbyBiZSBhZGRlZC4KKyAqLwordmFyIGFkZFNoYWRlclNvdXJj
ZXMgPSBmdW5jdGlvbigKKyAgICBnbCwgZWxlbWVudCwgbGFiZWwsIHNoYWRlciwgc2hhZGVyU291
cmNlLCBvcHRfdXJsKSB7CisgIGFkZFNoYWRlclNvdXJjZShlbGVtZW50LCBsYWJlbCwgc2hhZGVy
U291cmNlLCBvcHRfdXJsKTsKKworICB2YXIgZGVidWdTaGFkZXJzID0gZ2wuZ2V0RXh0ZW5zaW9u
KCdXRUJHTF9kZWJ1Z19zaGFkZXJzJyk7CisgIGlmIChkZWJ1Z1NoYWRlcnMgJiYgc2hhZGVyKSB7
CisgICAgdmFyIHRyYW5zbGF0ZWRTb3VyY2UgPSBkZWJ1Z1NoYWRlcnMuZ2V0VHJhbnNsYXRlZFNo
YWRlclNvdXJjZShzaGFkZXIpOworICAgIGlmICh0cmFuc2xhdGVkU291cmNlICE9ICcnKSB7Cisg
ICAgICBhZGRTaGFkZXJTb3VyY2UoZWxlbWVudCwgbGFiZWwgKyAnIHRyYW5zbGF0ZWQgZm9yIGRy
aXZlcicsIHRyYW5zbGF0ZWRTb3VyY2UpOworICAgIH0KKyAgfQorfTsKKworLyoqCisgKiBTZW5k
cyBzaGFkZXIgaW5mb3JtYXRpb24gdG8gdGhlIHNlcnZlciB0byBiZSBkdW1wZWQgaW50byB0ZXh0
IGZpbGVzCisgKiB3aGVuIHRlc3RzIGFyZSBydW4gZnJvbSB3aXRoaW4gdGhlIHRlc3QtcnVubmVy
IGhhcm5lc3MuCisgKiBAcGFyYW0ge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdM
UmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFVSTCBvZiBj
dXJyZW50LgorICogQHBhcmFtIHtzdHJpbmd9IHBhc3NNc2cgVGVzdCBkZXNjcmlwdGlvbi4KKyAq
IEBwYXJhbSB7b2JqZWN0fSB2SW5mbyBPYmplY3QgY29udGFpbmluZyB2ZXJ0ZXggc2hhZGVyIGlu
Zm9ybWF0aW9uLgorICogQHBhcmFtIHtvYmplY3R9IGZJbmZvIE9iamVjdCBjb250YWluaW5nIGZy
YWdtZW50IHNoYWRlciBpbmZvcm1hdGlvbi4KKyAqLwordmFyIGR1bXBTaGFkZXJzSW5mbyA9IGZ1
bmN0aW9uKGdsLCB1cmwsIHBhc3NNc2csIHZJbmZvLCBmSW5mbykgeworICB2YXIgc2hhZGVySW5m
byA9IHt9OworICBzaGFkZXJJbmZvLnVybCA9IHVybDsKKyAgc2hhZGVySW5mby50ZXN0RGVzY3Jp
cHRpb24gPSBwYXNzTXNnOworICBzaGFkZXJJbmZvLnZMYWJlbCA9IHZJbmZvLmxhYmVsOworICBz
aGFkZXJJbmZvLnZTaG91bGRDb21waWxlID0gdkluZm8uc2hhZGVyU3VjY2VzczsKKyAgc2hhZGVy
SW5mby52U291cmNlID0gdkluZm8uc291cmNlOworICBzaGFkZXJJbmZvLmZMYWJlbCA9IGZJbmZv
LmxhYmVsOworICBzaGFkZXJJbmZvLmZTaG91bGRDb21waWxlID0gZkluZm8uc2hhZGVyU3VjY2Vz
czsKKyAgc2hhZGVySW5mby5mU291cmNlID0gZkluZm8uc291cmNlOworICBzaGFkZXJJbmZvLnZU
cmFuc2xhdGVkU291cmNlID0gbnVsbDsKKyAgc2hhZGVySW5mby5mVHJhbnNsYXRlZFNvdXJjZSA9
IG51bGw7CisgIHZhciBkZWJ1Z1NoYWRlcnMgPSBnbC5nZXRFeHRlbnNpb24oJ1dFQkdMX2RlYnVn
X3NoYWRlcnMnKTsKKyAgaWYgKGRlYnVnU2hhZGVycykgeworICAgIGlmICh2SW5mby5zaGFkZXIp
CisgICAgICBzaGFkZXJJbmZvLnZUcmFuc2xhdGVkU291cmNlID0gZGVidWdTaGFkZXJzLmdldFRy
YW5zbGF0ZWRTaGFkZXJTb3VyY2UodkluZm8uc2hhZGVyKTsKKyAgICBpZiAoZkluZm8uc2hhZGVy
KQorICAgICAgc2hhZGVySW5mby5mVHJhbnNsYXRlZFNvdXJjZSA9IGRlYnVnU2hhZGVycy5nZXRU
cmFuc2xhdGVkU2hhZGVyU291cmNlKGZJbmZvLnNoYWRlcik7CisgIH0KKworICB2YXIgZHVtcFNo
YWRlckluZm9SZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgIGR1bXBTaGFkZXJJbmZv
UmVxdWVzdC5vcGVuKCdQT1NUJywgIi9kdW1wU2hhZGVySW5mbyIsIHRydWUpOworICBkdW1wU2hh
ZGVySW5mb1JlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIiwgInRleHQvcGxh
aW4iKTsKKyAgZHVtcFNoYWRlckluZm9SZXF1ZXN0LnNlbmQoSlNPTi5zdHJpbmdpZnkoc2hhZGVy
SW5mbykpOworfTsKKworLy8gQWRkIHlvdXIgcHJlZml4IGhlcmUuCit2YXIgYnJvd3NlclByZWZp
eGVzID0gWworICAiIiwKKyAgIk1PWl8iLAorICAiT1BfIiwKKyAgIldFQktJVF8iCitdOworCisv
KioKKyAqIEdpdmVuIGFuIGV4dGVuc2lvbiBuYW1lIGxpa2UgV0VCR0xfY29tcHJlc3NlZF90ZXh0
dXJlX3MzdGMKKyAqIHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHN1cHBvcnRlZCB2ZXJzaW9uIGV4
dGVuc2lvbiwgbGlrZQorICogV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV0dXJlX3MzdGMKKyAq
IEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWUgb2YgZXh0ZW5zaW9uIHRvIGxvb2sgZm9yLgorICog
QHJldHVybiB7c3RyaW5nfSBuYW1lIG9mIGV4dGVuc2lvbiBmb3VuZCBvciB1bmRlZmluZWQgaWYg
bm90CisgKiAgICAgZm91bmQuCisgKi8KK3ZhciBnZXRTdXBwb3J0ZWRFeHRlbnNpb25XaXRoS25v
d25QcmVmaXhlcyA9IGZ1bmN0aW9uKGdsLCBuYW1lKSB7CisgIHZhciBzdXBwb3J0ZWQgPSBnbC5n
ZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCk7CisgIGZvciAodmFyIGlpID0gMDsgaWkgPCBicm93c2Vy
UHJlZml4ZXMubGVuZ3RoOyArK2lpKSB7CisgICAgdmFyIHByZWZpeGVkTmFtZSA9IGJyb3dzZXJQ
cmVmaXhlc1tpaV0gKyBuYW1lOworICAgIGlmIChzdXBwb3J0ZWQuaW5kZXhPZihwcmVmaXhlZE5h
bWUpID49IDApIHsKKyAgICAgIHJldHVybiBwcmVmaXhlZE5hbWU7CisgICAgfQorICB9Cit9Owor
CisvKioKKyAqIEBwYXJhbSB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWUgb2YgZXh0
ZW5zaW9uIHRvIGxvb2sgZm9yLgorICogQHBhcmFtIHtib29sZWFufSBleHRlbnNpb25FbmFibGVk
IFRydWUgaWYgdGhlIGV4dGVuc2lvbiB3YXMgZW5hYmxlZCBzdWNjZXNzZnVsbHkgdmlhIGdsLmdl
dEV4dGVuc2lvbigpLgorICovCit2YXIgcnVuRXh0ZW5zaW9uU3VwcG9ydGVkVGVzdCA9IGZ1bmN0
aW9uKGdsLCBuYW1lLCBleHRlbnNpb25FbmFibGVkKSB7CisgIHZhciBwcmVmaXhlZE5hbWUgPSBn
ZXRTdXBwb3J0ZWRFeHRlbnNpb25XaXRoS25vd25QcmVmaXhlcyhnbCwgbmFtZSk7CisgIGlmIChw
cmVmaXhlZE5hbWUgIT09IHVuZGVmaW5lZCkgeworICAgICAgaWYgKGV4dGVuc2lvbkVuYWJsZWQp
IHsKKyAgICAgICAgICB0ZXN0UGFzc2VkKG5hbWUgKyAiIGxpc3RlZCBhcyBzdXBwb3J0ZWQgYW5k
IGdldEV4dGVuc2lvbiBzdWNjZWVkZWQiKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICAgdGVz
dEZhaWxlZChuYW1lICsgIiBsaXN0ZWQgYXMgc3VwcG9ydGVkIGJ1dCBnZXRFeHRlbnNpb24gZmFp
bGVkIik7CisgICAgICB9CisgIH0gZWxzZSB7CisgICAgICBpZiAoZXh0ZW5zaW9uRW5hYmxlZCkg
eworICAgICAgICAgIHRlc3RGYWlsZWQobmFtZSArICIgbm90IGxpc3RlZCBhcyBzdXBwb3J0ZWQg
YnV0IGdldEV4dGVuc2lvbiBzdWNjZWVkZWQiKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
dGVzdFBhc3NlZChuYW1lICsgIiBub3QgbGlzdGVkIGFzIHN1cHBvcnRlZCBhbmQgZ2V0RXh0ZW5z
aW9uIGZhaWxlZCAtLSB0aGlzIGlzIGxlZ2FsIik7CisgICAgICB9CisgIH0KK30KKworLyoqCisg
KiBHaXZlbiBhbiBleHRlbnNpb24gbmFtZSBsaWtlIFdFQkdMX2NvbXByZXNzZWRfdGV4dHVyZV9z
M3RjCisgKiByZXR1cm5zIHRoZSBzdXBwb3J0ZWQgdmVyc2lvbiBleHRlbnNpb24sIGxpa2UKKyAq
IFdFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RldHVyZV9zM3RjCisgKiBAcGFyYW0ge3N0cmluZ30g
bmFtZSBOYW1lIG9mIGV4dGVuc2lvbiB0byBsb29rIGZvci4KKyAqIEByZXR1cm4ge1dlYkdMRXh0
ZW5zaW9ufSBUaGUgZXh0ZW5zaW9uIG9yIHVuZGVmaW5lZCBpZiBub3QKKyAqICAgICBmb3VuZC4K
KyAqLwordmFyIGdldEV4dGVuc2lvbldpdGhLbm93blByZWZpeGVzID0gZnVuY3Rpb24oZ2wsIG5h
bWUpIHsKKyAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGJyb3dzZXJQcmVmaXhlcy5sZW5ndGg7ICsr
aWkpIHsKKyAgICB2YXIgcHJlZml4ZWROYW1lID0gYnJvd3NlclByZWZpeGVzW2lpXSArIG5hbWU7
CisgICAgdmFyIGV4dCA9IGdsLmdldEV4dGVuc2lvbihwcmVmaXhlZE5hbWUpOworICAgIGlmIChl
eHQpIHsKKyAgICAgIHJldHVybiBleHQ7CisgICAgfQorICB9Cit9OworCisvKioKKyAqIFJldHVy
bnMgcG9zc2libGUgcHJlZml4ZWQgdmVyc2lvbnMgb2YgYW4gZXh0ZW5zaW9uJ3MgbmFtZS4KKyAq
IEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWUgb2YgZXh0ZW5zaW9uLiBNYXkgYWxyZWFkeSBpbmNs
dWRlIGEgcHJlZml4LgorICogQHJldHVybiB7QXJyYXkuPHN0cmluZz59IFZhcmlhdGlvbnMgb2Yg
dGhlIGV4dGVuc2lvbiBuYW1lIHdpdGgga25vd24KKyAqICAgICBicm93c2VyIHByZWZpeGVzLgor
ICovCit2YXIgZ2V0RXh0ZW5zaW9uUHJlZml4ZWROYW1lcyA9IGZ1bmN0aW9uKG5hbWUpIHsKKyAg
dmFyIHVucHJlZml4ID0gZnVuY3Rpb24obmFtZSkgeworICAgIGZvciAodmFyIGlpID0gMDsgaWkg
PCBicm93c2VyUHJlZml4ZXMubGVuZ3RoOyArK2lpKSB7CisgICAgICBpZiAoYnJvd3NlclByZWZp
eGVzW2lpXS5sZW5ndGggPiAwICYmCisgICAgICAgICAgbmFtZS5zdWJzdHJpbmcoMCwgYnJvd3Nl
clByZWZpeGVzW2lpXS5sZW5ndGgpLnRvTG93ZXJDYXNlKCkgPT09CisgICAgICAgICAgYnJvd3Nl
clByZWZpeGVzW2lpXS50b0xvd2VyQ2FzZSgpKSB7CisgICAgICAgIHJldHVybiBuYW1lLnN1YnN0
cmluZyhicm93c2VyUHJlZml4ZXNbaWldLmxlbmd0aCk7CisgICAgICB9CisgICAgfQorICAgIHJl
dHVybiBuYW1lOworICB9CisKKyAgdmFyIHVucHJlZml4ZWQgPSB1bnByZWZpeChuYW1lKTsKKwor
ICB2YXIgdmFyaWF0aW9ucyA9IFtdOworICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgYnJvd3NlclBy
ZWZpeGVzLmxlbmd0aDsgKytpaSkgeworICAgIHZhcmlhdGlvbnMucHVzaChicm93c2VyUHJlZml4
ZXNbaWldICsgdW5wcmVmaXhlZCk7CisgIH0KKworICByZXR1cm4gdmFyaWF0aW9uczsKK307CisK
K3ZhciByZXBsYWNlUkUgPSAvXCRcKChcdyspXCkvZzsKKworLyoqCisgKiBSZXBsYWNlcyBzdHJp
bmdzIHdpdGggcHJvcGVydHkgdmFsdWVzLgorICogR2l2ZW4gYSBzdHJpbmcgbGlrZSAiaGVsbG8g
JChmaXJzdCkgJChsYXN0KSIgYW5kIGFuIG9iamVjdAorICogbGlrZSB7Zmlyc3Q6IkpvaG4iLCBs
YXN0OiJTbWl0aCJ9IHdpbGwgcmV0dXJuCisgKiAiaGVsbG8gSm9obiBTbWl0aCIuCisgKiBAcGFy
YW0ge3N0cmluZ30gc3RyIFN0cmluZyB0byBkbyByZXBsYWNlbWVudHMgaW4uCisgKiBAcGFyYW0g
ey4uLn0gMSBvciBtb3JlIG9iamVjdHMgY29udGFpbmluZyBwcm9wZXJ0aWVzLgorICovCit2YXIg
cmVwbGFjZVBhcmFtcyA9IGZ1bmN0aW9uKHN0cikgeworICB2YXIgYXJncyA9IGFyZ3VtZW50czsK
KyAgcmV0dXJuIHN0ci5yZXBsYWNlKHJlcGxhY2VSRSwgZnVuY3Rpb24oc3RyLCBwMSwgb2Zmc2V0
LCBzKSB7CisgICAgZm9yICh2YXIgaWkgPSAxOyBpaSA8IGFyZ3MubGVuZ3RoOyArK2lpKSB7Cisg
ICAgICBpZiAoYXJnc1tpaV1bcDFdICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgcmV0dXJuIGFy
Z3NbaWldW3AxXTsKKyAgICAgIH0KKyAgICB9CisgICAgdGhyb3cgInVua25vd24gc3RyaW5nIHBh
cmFtICciICsgcDEgKyAiJyI7CisgIH0pOworfTsKKwordmFyIHVwcGVyQ2FzZUZpcnN0TGV0dGVy
ID0gZnVuY3Rpb24oc3RyKSB7CisgIHJldHVybiBzdHIuc3Vic3RyaW5nKDAsIDEpLnRvVXBwZXJD
YXNlKCkgKyBzdHIuc3Vic3RyaW5nKDEpOworfTsKKworLyoqCisgKiBHZXRzIGEgcHJlZml4ZWQg
cHJvcGVydHkuIEZvciBleGFtcGxlLAorICoKKyAqICAgICB2YXIgZm4gPSBnZXRQcmVmaXhlZFBy
b3BlcnR5KAorICogICAgICAgIHdpbmRvdywKKyAqICAgICAgICAicmVxdWVzdEFuaW1hdGlvbkZy
YW1lIik7CisgKgorICogV2lsbCByZXR1cm4gZWl0aGVyOgorICogICAgIndpbmRvdy5yZXF1ZXN0
QW5pbWF0aW9uRnJhbWUiLAorICogICAgIndpbmRvdy5vUmVxdWVzdEFuaW1hdGlvbkZyYW1lIiwK
KyAqICAgICJ3aW5kb3cubXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLAorICogICAgIndpbmRvdy5t
b3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLAorICogICAgIndpbmRvdy53ZWJLaXRSZXF1ZXN0QW5p
bWF0aW9uRnJhbWUiLAorICogICAgdW5kZWZpbmVkCisgKgorICogdGhlIG5vbi1wcmVmaXhlZCBm
dW5jdGlvbiBpcyB0cmllZCBmaXJzdC4KKyAqLwordmFyIHByb3BlcnR5UHJlZml4ZXMgPSBbIiIs
ICJtb3oiLCAibXMiLCAibyIsICJ3ZWJraXQiXTsKK3ZhciBnZXRQcmVmaXhlZFByb3BlcnR5ID0g
ZnVuY3Rpb24ob2JqLCBwcm9wZXJ0eU5hbWUpIHsKKyAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IHBy
b3BlcnR5UHJlZml4ZXMubGVuZ3RoOyArK2lpKSB7CisgICAgdmFyIHByZWZpeCA9IHByb3BlcnR5
UHJlZml4ZXNbaWldOworICAgIHZhciBuYW1lID0gcHJlZml4ICsgcHJvcGVydHlOYW1lOworICAg
IGxvZyhuYW1lKTsKKyAgICB2YXIgcHJvcGVydHkgPSBvYmpbbmFtZV07CisgICAgaWYgKHByb3Bl
cnR5KSB7CisgICAgICByZXR1cm4gcHJvcGVydHk7CisgICAgfQorICAgIGlmIChpaSA9PSAwKSB7
CisgICAgICBwcm9wZXJ0eU5hbWUgPSB1cHBlckNhc2VGaXJzdExldHRlcihwcm9wZXJ0eU5hbWUp
OworICAgIH0KKyAgfQorICByZXR1cm4gdW5kZWZpbmVkOworfTsKKwordmFyIF9yZXF1ZXN0QW5p
bUZyYW1lOworCisvKioKKyAqIFByb3ZpZGVzIHJlcXVlc3RBbmltYXRpb25GcmFtZSBpbiBhIGNy
b3NzIGJyb3dzZXIgd2F5LgorICovCit2YXIgcmVxdWVzdEFuaW1GcmFtZSA9IGZ1bmN0aW9uKGNh
bGxiYWNrKSB7CisgIGlmICghX3JlcXVlc3RBbmltRnJhbWUpIHsKKyAgICBfcmVxdWVzdEFuaW1G
cmFtZSA9IGdldFByZWZpeGVkUHJvcGVydHkod2luZG93LCAicmVxdWVzdEFuaW1hdGlvbkZyYW1l
IikgfHwKKyAgICAgIGZ1bmN0aW9uKGNhbGxiYWNrLCBlbGVtZW50KSB7CisgICAgICAgIHJldHVy
biB3aW5kb3cuc2V0VGltZW91dChjYWxsYmFjaywgMTAwMCAvIDcwKTsKKyAgICAgIH07CisgIH0K
KyAgX3JlcXVlc3RBbmltRnJhbWUuY2FsbCh3aW5kb3csIGNhbGxiYWNrKTsKK307CisKKy8qKgor
ICogUHJvdmlkZXMgdmlkZW8ucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayBpbiBhIGNyb3NzIGJy
b3dzZXIgd2F5LgorICogUmV0dXJucyBhIHByb3BlcnR5LCBvciB1bmRlZmluZWQgaWYgdW5zdXBv
cnRlZC4KKyAqLwordmFyIGdldFJlcXVlc3RWaWRGcmFtZUNhbGxiYWNrID0gZnVuY3Rpb24oKSB7
CisgIHJldHVybiBIVE1MVmlkZW9FbGVtZW50LnByb3RvdHlwZVsicmVxdWVzdFZpZGVvRnJhbWVD
YWxsYmFjayJdOworfTsKKwordmFyIF9jYW5jZWxBbmltRnJhbWU7CisKKy8qKgorICogUHJvdmlk
ZXMgY2FuY2VsQW5pbWF0aW9uRnJhbWUgaW4gYSBjcm9zcyBicm93c2VyIHdheS4KKyAqLwordmFy
IGNhbmNlbEFuaW1GcmFtZSA9IGZ1bmN0aW9uKHJlcXVlc3QpIHsKKyAgaWYgKCFfY2FuY2VsQW5p
bUZyYW1lKSB7CisgICAgX2NhbmNlbEFuaW1GcmFtZSA9IGdldFByZWZpeGVkUHJvcGVydHkod2lu
ZG93LCAiY2FuY2VsQW5pbWF0aW9uRnJhbWUiKSB8fAorICAgICAgd2luZG93LmNsZWFyVGltZW91
dDsKKyAgfQorICBfY2FuY2VsQW5pbUZyYW1lLmNhbGwod2luZG93LCByZXF1ZXN0KTsKK307CisK
Ky8qKgorICogUHJvdmlkZXMgcmVxdWVzdEZ1bGxTY3JlZW4gaW4gYSBjcm9zcyBicm93c2VyIHdh
eS4KKyAqLwordmFyIHJlcXVlc3RGdWxsU2NyZWVuID0gZnVuY3Rpb24oZWxlbWVudCkgeworICB2
YXIgZm4gPSBnZXRQcmVmaXhlZFByb3BlcnR5KGVsZW1lbnQsICJyZXF1ZXN0RnVsbFNjcmVlbiIp
OworICBpZiAoZm4pIHsKKyAgICBmbi5jYWxsKGVsZW1lbnQpOworICB9Cit9OworCisvKioKKyAq
IFByb3ZpZGVzIGNhbmNlbEZ1bGxTY3JlZW4gaW4gYSBjcm9zcyBicm93c2VyIHdheS4KKyAqLwor
dmFyIGNhbmNlbEZ1bGxTY3JlZW4gPSBmdW5jdGlvbigpIHsKKyAgdmFyIGZuID0gZ2V0UHJlZml4
ZWRQcm9wZXJ0eShkb2N1bWVudCwgImNhbmNlbEZ1bGxTY3JlZW4iKTsKKyAgaWYgKGZuKSB7Cisg
ICAgZm4uY2FsbChkb2N1bWVudCk7CisgIH0KK307CisKK3ZhciBmdWxsU2NyZWVuU3RhdGVOYW1l
OworKGZ1bmN0aW9uKCkgeworICB2YXIgZnVsbFNjcmVlblN0YXRlTmFtZXMgPSBbCisgICAgImlz
RnVsbFNjcmVlbiIsCisgICAgImZ1bGxTY3JlZW4iCisgIF07CisgIGZvciAodmFyIGlpID0gMDsg
aWkgPCBmdWxsU2NyZWVuU3RhdGVOYW1lcy5sZW5ndGg7ICsraWkpIHsKKyAgICB2YXIgcHJvcGVy
dHlOYW1lID0gZnVsbFNjcmVlblN0YXRlTmFtZXNbaWldOworICAgIGZvciAodmFyIGpqID0gMDsg
amogPCBwcm9wZXJ0eVByZWZpeGVzLmxlbmd0aDsgKytqaikgeworICAgICAgdmFyIHByZWZpeCA9
IHByb3BlcnR5UHJlZml4ZXNbampdOworICAgICAgaWYgKHByZWZpeC5sZW5ndGgpIHsKKyAgICAg
ICAgcHJvcGVydHlOYW1lID0gdXBwZXJDYXNlRmlyc3RMZXR0ZXIocHJvcGVydHlOYW1lKTsKKyAg
ICAgICAgZnVsbFNjcmVlblN0YXRlTmFtZSA9IHByZWZpeCArIHByb3BlcnR5TmFtZTsKKyAgICAg
ICAgaWYgKGRvY3VtZW50W2Z1bGxTY3JlZW5TdGF0ZU5hbWVdICE9PSB1bmRlZmluZWQpIHsKKyAg
ICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgZnVsbFNjcmVl
blN0YXRlTmFtZSA9IHVuZGVmaW5lZDsKKyAgfQorfSgpKTsKKworLyoqCisgKiBAcmV0dXJuIHti
b29sZWFufSBUcnVlIGlmIGZ1bGxzY3JlZW4gbW9kZSBpcyBhY3RpdmUuCisgKi8KK3ZhciBnZXRG
dWxsU2NyZWVuU3RhdGUgPSBmdW5jdGlvbigpIHsKKyAgbG9nKCJmdWxsc2NyZWVuc3RhdGVuYW1l
OiIgKyBmdWxsU2NyZWVuU3RhdGVOYW1lKTsKKyAgbG9nKGRvY3VtZW50W2Z1bGxTY3JlZW5TdGF0
ZU5hbWVdKTsKKyAgcmV0dXJuIGRvY3VtZW50W2Z1bGxTY3JlZW5TdGF0ZU5hbWVdOworfTsKKwor
LyoqCisgKiBAcGFyYW0geyFIVE1MRWxlbWVudH0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBnbyBm
dWxsc2NyZWVuLgorICogQHBhcmFtIHshZnVuY3Rpb24oYm9vbGVhbil9IGNhbGxiYWNrIEEgZnVu
Y3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZAorICogICAgICAgIHdoZW4gZW50ZXJpbmcvZXhpdGlu
ZyBmdWxsc2NyZWVuLiBJdCBpcyBwYXNzZWQgdHJ1ZSBpZgorICogICAgICAgIGVudGVyaW5nIGZ1
bGxzY3JlZW4sIGZhbHNlIGlmIGV4aXRpbmcuCisgKi8KK3ZhciBvbkZ1bGxTY3JlZW5DaGFuZ2Ug
PSBmdW5jdGlvbihlbGVtZW50LCBjYWxsYmFjaykgeworICBwcm9wZXJ0eVByZWZpeGVzLmZvckVh
Y2goZnVuY3Rpb24ocHJlZml4KSB7CisgICAgdmFyIGV2ZW50TmFtZSA9IHByZWZpeCArICJmdWxs
c2NyZWVuY2hhbmdlIjsKKyAgICBsb2coImFkZGV2ZW50OiAiICsgZXZlbnROYW1lKTsKKyAgICBk
b2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuY3Rpb24oZXZlbnQpIHsKKyAg
ICAgIGxvZygiZXZlbnQ6ICIgKyBldmVudE5hbWUpOworICAgICAgY2FsbGJhY2soZ2V0RnVsbFNj
cmVlblN0YXRlKCkpOworICAgIH0pOworICB9KTsKK307CisKKy8qKgorICogQHBhcmFtIHshc3Ry
aW5nfSBidXR0b25JZCBUaGUgaWQgb2YgdGhlIGJ1dHRvbiB0aGF0IHdpbGwgdG9nZ2xlIGZ1bGxz
Y3JlZW4KKyAqICAgICAgICBtb2RlLgorICogQHBhcmFtIHshc3RyaW5nfSBmdWxsc2NyZWVuSWQg
VGhlIGlkIG9mIHRoZSBlbGVtZW50IHRvIGdvIGZ1bGxzY3JlZW4uCisgKiBAcGFyYW0geyFmdW5j
dGlvbihib29sZWFuKX0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVkCisg
KiAgICAgICAgd2hlbiBlbnRlcmluZy9leGl0aW5nIGZ1bGxzY3JlZW4uIEl0IGlzIHBhc3NlZCB0
cnVlIGlmCisgKiAgICAgICAgZW50ZXJpbmcgZnVsbHNjcmVlbiwgZmFsc2UgaWYgZXhpdGluZy4K
KyAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgZnVsbHNjcmVlbiBtb2RlIGlzIHN1cHBvcnRl
ZC4KKyAqLwordmFyIHNldHVwRnVsbHNjcmVlbiA9IGZ1bmN0aW9uKGJ1dHRvbklkLCBmdWxsc2Ny
ZWVuSWQsIGNhbGxiYWNrKSB7CisgIGlmICghZnVsbFNjcmVlblN0YXRlTmFtZSkgeworICAgIHJl
dHVybiBmYWxzZTsKKyAgfQorCisgIHZhciBmdWxsc2NyZWVuRWxlbWVudCA9IGRvY3VtZW50Lmdl
dEVsZW1lbnRCeUlkKGZ1bGxzY3JlZW5JZCk7CisgIG9uRnVsbFNjcmVlbkNoYW5nZShmdWxsc2Ny
ZWVuRWxlbWVudCwgY2FsbGJhY2spOworCisgIHZhciB0b2dnbGVGdWxsU2NyZWVuID0gZnVuY3Rp
b24oZXZlbnQpIHsKKyAgICBpZiAoZ2V0RnVsbFNjcmVlblN0YXRlKCkpIHsKKyAgICAgIGNhbmNl
bEZ1bGxTY3JlZW4oZnVsbHNjcmVlbkVsZW1lbnQpOworICAgIH0gZWxzZSB7CisgICAgICByZXF1
ZXN0RnVsbFNjcmVlbihmdWxsc2NyZWVuRWxlbWVudCk7CisgICAgfQorICAgIGV2ZW50LnByZXZl
bnREZWZhdWx0KCk7CisgICAgcmV0dXJuIGZhbHNlOworICB9OworCisgIHZhciBidXR0b25FbGVt
ZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYnV0dG9uSWQpOworICBidXR0b25FbGVtZW50
LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdG9nZ2xlRnVsbFNjcmVlbik7CisKKyAgcmV0dXJu
IHRydWU7Cit9OworCisvKioKKyAqIFdhaXRzIGZvciB0aGUgYnJvd3NlciB0byBjb21wb3NpdGUg
dGhlIHdlYiBwYWdlLgorICogQHBhcmFtIHtmdW5jdGlvbigpfSBjYWxsYmFjayBBIGZ1bmN0aW9u
IHRvIGNhbGwgYWZ0ZXIgY29tcG9zaXRpbmcgaGFzIHRha2VuCisgKiAgICAgICAgcGxhY2UuCisg
Ki8KK3ZhciB3YWl0Rm9yQ29tcG9zaXRlID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKKyAgdmFyIGZy
YW1lcyA9IDU7CisgIHZhciBjb3VudERvd24gPSBmdW5jdGlvbigpIHsKKyAgICBpZiAoZnJhbWVz
ID09IDApIHsKKyAgICAgIC8vIFRPRE8oa2JyKTogdW5pZnkgd2l0aCBqcy10ZXN0LXByZS5qcyBh
bmQgZW5hYmxlIHRoZXNlIHdpdGgKKyAgICAgIC8vIHZlcmJvc2UgbG9nZ2luZy4KKyAgICAgIC8v
IGxvZygid2FpdEZvckNvbXBvc2l0ZTogY2FsbGJhY2siKTsKKyAgICAgIGNhbGxiYWNrKCk7Cisg
ICAgfSBlbHNlIHsKKyAgICAgIC8vIGxvZygid2FpdEZvckNvbXBvc2l0ZTogY291bnRkb3duKCIg
KyBmcmFtZXMgKyAiKSIpOworICAgICAgLS1mcmFtZXM7CisgICAgICByZXF1ZXN0QW5pbUZyYW1l
LmNhbGwod2luZG93LCBjb3VudERvd24pOworICAgIH0KKyAgfTsKKyAgY291bnREb3duKCk7Cit9
OworCit2YXIgc2V0WmVyb1RpbWVvdXQgPSAoZnVuY3Rpb24oKSB7CisgIC8vIFNlZSBodHRwczov
L2RiYXJvbi5vcmcvbG9nLzIwMTAwMzA5LWZhc3Rlci10aW1lb3V0cworCisgIHZhciB0aW1lb3V0
cyA9IFtdOworICB2YXIgbWVzc2FnZU5hbWUgPSAiemVyby10aW1lb3V0LW1lc3NhZ2UiOworCisg
IC8vIExpa2Ugc2V0VGltZW91dCwgYnV0IG9ubHkgdGFrZXMgYSBmdW5jdGlvbiBhcmd1bWVudC4g
IFRoZXJlJ3MKKyAgLy8gbm8gdGltZSBhcmd1bWVudCAoYWx3YXlzIHplcm8pIGFuZCBubyBhcmd1
bWVudHMgKHlvdSBoYXZlIHRvCisgIC8vIHVzZSBhIGNsb3N1cmUpLgorICBmdW5jdGlvbiBzZXRa
ZXJvVGltZW91dChmbikgeworICAgICAgdGltZW91dHMucHVzaChmbik7CisgICAgICB3aW5kb3cu
cG9zdE1lc3NhZ2UobWVzc2FnZU5hbWUsICIqIik7CisgIH0KKworICBmdW5jdGlvbiBoYW5kbGVN
ZXNzYWdlKGV2ZW50KSB7CisgICAgICBpZiAoZXZlbnQuc291cmNlID09IHdpbmRvdyAmJiBldmVu
dC5kYXRhID09IG1lc3NhZ2VOYW1lKSB7CisgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0aW9u
KCk7CisgICAgICAgICAgaWYgKHRpbWVvdXRzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAgICAg
dmFyIGZuID0gdGltZW91dHMuc2hpZnQoKTsKKyAgICAgICAgICAgICAgZm4oKTsKKyAgICAgICAg
ICB9CisgICAgICB9CisgIH0KKworICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIs
IGhhbmRsZU1lc3NhZ2UsIHRydWUpOworCisgIHJldHVybiBzZXRaZXJvVGltZW91dDsKK30pKCk7
CisKK2Z1bmN0aW9uIGRpc3BhdGNoUHJvbWlzZShmbikgeworICByZXR1cm4gbmV3IFByb21pc2Uo
KGZuX3Jlc29sdmUsIGZuX3JlamVjdCkgPT4geworICAgIHNldFplcm9UaW1lb3V0KCgpID0+IHsK
KyAgICAgIGZuX3Jlc29sdmUoZm4oKSk7CisgICAgfSk7CisgIH0pOworfQorCisvKioKKyAqIFJ1
bnMgYW4gYXJyYXkgb2YgZnVuY3Rpb25zLCB5aWVsZGluZyB0byB0aGUgYnJvd3NlciBiZXR3ZWVu
IGVhY2ggc3RlcC4KKyAqIElmIHlvdSB3YW50IHRvIGtub3cgd2hlbiBhbGwgdGhlIHN0ZXBzIGFy
ZSBmaW5pc2hlZCBhZGQgYSBsYXN0IHN0ZXAuCisgKiBAcGFyYW0geyFBcnJheS48ZnVuY3Rpb24o
KTogdm9pZD59IHN0ZXBzIEFycmF5IG9mIGZ1bmN0aW9ucy4KKyAqLwordmFyIHJ1blN0ZXBzID0g
ZnVuY3Rpb24oc3RlcHMpIHsKKyAgaWYgKCFzdGVwcy5sZW5ndGgpIHsKKyAgICByZXR1cm47Cisg
IH0KKworICAvLyBjb3B5IHN0ZXBzIHNvIHRoZXkgY2FuJ3QgYmUgbW9kaWZlZC4KKyAgdmFyIHN0
ZXBzVG9SdW4gPSBzdGVwcy5zbGljZSgpOworICB2YXIgY3VycmVudFN0ZXAgPSAwOworICB2YXIg
cnVuTmV4dFN0ZXAgPSBmdW5jdGlvbigpIHsKKyAgICBzdGVwc1RvUnVuW2N1cnJlbnRTdGVwKytd
KCk7CisgICAgaWYgKGN1cnJlbnRTdGVwIDwgc3RlcHNUb1J1bi5sZW5ndGgpIHsKKyAgICAgIHNl
dFRpbWVvdXQocnVuTmV4dFN0ZXAsIDEpOworICAgIH0KKyAgfTsKKyAgcnVuTmV4dFN0ZXAoKTsK
K307CisKKy8qKgorICogU3RhcnRzIHBsYXlpbmcgYSB2aWRlbyBhbmQgd2FpdHMgZm9yIGl0IHRv
IGJlIGNvbnN1bWFibGUuCisgKiBAcGFyYW0geyFIVE1MVmlkZW9FbGVtZW50fSB2aWRlbyBBbiBI
VE1MNSBWaWRlbyBlbGVtZW50LgorICogQHBhcmFtIHshZnVuY3Rpb24oIUhUTUxWaWRlb0VsZW1l
bnQpOiB2b2lkfSBjYWxsYmFjayBGdW5jdGlvbiB0byBjYWxsIHdoZW4KKyAqICAgICAgICB2aWRl
byBpcyByZWFkeS4KKyAqLwordmFyIHN0YXJ0UGxheWluZ0FuZFdhaXRGb3JWaWRlbyA9IGZ1bmN0
aW9uKHZpZGVvLCBjYWxsYmFjaykgeworICB2YXIgcnZmYyA9IGdldFJlcXVlc3RWaWRGcmFtZUNh
bGxiYWNrKCk7CisgIGlmIChydmZjID09PSB1bmRlZmluZWQpIHsKKyAgICB2YXIgdGltZVdhdGNo
ZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgIGlmICh2aWRlby5jdXJyZW50VGltZSA+IDApIHsKKyAg
ICAgICAgY2FsbGJhY2sodmlkZW8pOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmVxdWVzdEFu
aW1GcmFtZS5jYWxsKHdpbmRvdywgdGltZVdhdGNoZXIpOworICAgICAgfQorICAgIH07CisKKyAg
ICB0aW1lV2F0Y2hlcigpOworICB9IGVsc2UgeworICAgIC8vIENhbGxzIHZpZGVvLnJlcXVlc3RW
aWRlb0ZyYW1lQ2FsbGJhY2soXyA9PiB7IGNhbGxiYWNrKHZpZGVvKSB9KQorICAgIHJ2ZmMuY2Fs
bCh2aWRlbywgXyA9PiB7IGNhbGxiYWNrKHZpZGVvKSB9KTsKKyAgfQorCisgIHZpZGVvLmxvb3Ag
PSB0cnVlOworICB2aWRlby5tdXRlZCA9IHRydWU7CisgIC8vIFNlZSB3aGV0aGVyIHNldHRpbmcg
dGhlIHByZWxvYWQgZmxhZyBkZS1mbGFrZXMgdmlkZW8tcmVsYXRlZCB0ZXN0cy4KKyAgdmlkZW8u
cHJlbG9hZCA9ICdhdXRvJzsKKyAgdmlkZW8ucGxheSgpOworfTsKKwordmFyIGdldEhvc3QgPSBm
dW5jdGlvbih1cmwpIHsKKyAgdXJsID0gdXJsLnJlcGxhY2UoIlxcIiwgIi8iKTsKKyAgdmFyIHBv
cyA9IHVybC5pbmRleE9mKCI6Ly8iKTsKKyAgaWYgKHBvcyA+PSAwKSB7CisgICAgdXJsID0gdXJs
LnN1YnN0cihwb3MgKyAzKTsKKyAgfQorICB2YXIgcGFydHMgPSB1cmwuc3BsaXQoJy8nKTsKKyAg
cmV0dXJuIHBhcnRzWzBdOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxhc3Qg
MiB3b3JkcyBvZiB0aGUgZG9tYWluIG9mIGEgVVJMCisvLyBUaGlzIGlzIHByb2JhYmx5IG5vdCB0
aGUgY29ycmVjdCBjaGVjayBidXQgaXQgd2lsbCBkbyBmb3Igbm93LgordmFyIGdldEJhc2VEb21h
aW4gPSBmdW5jdGlvbihob3N0KSB7CisgIHZhciBwYXJ0cyA9IGhvc3Quc3BsaXQoIjoiKTsKKyAg
dmFyIGhvc3RuYW1lID0gcGFydHNbMF07CisgIHZhciBwb3J0ID0gcGFydHNbMV0gfHwgIjgwIjsK
KyAgcGFydHMgPSBob3N0bmFtZS5zcGxpdCgiLiIpOworICBpZihwYXJ0cy5sZW5ndGggPCAyKQor
ICAgIHJldHVybiBob3N0bmFtZSArICI6IiArIHBvcnQ7CisgIHZhciB0bGQgPSBwYXJ0c1twYXJ0
cy5sZW5ndGgtMV07CisgIHZhciBkb21haW4gPSBwYXJ0c1twYXJ0cy5sZW5ndGgtMl07CisgIHJl
dHVybiBkb21haW4gKyAiLiIgKyB0bGQgKyAiOiIgKyBwb3J0OworfQorCit2YXIgcnVubmluZ09u
TG9jYWxob3N0ID0gZnVuY3Rpb24oKSB7CisgIGxldCBob3N0bmFtZSA9IHdpbmRvdy5sb2NhdGlv
bi5ob3N0bmFtZTsKKyAgcmV0dXJuIGhvc3RuYW1lID09ICJsb2NhbGhvc3QiIHx8CisgICAgaG9z
dG5hbWUgPT0gIjEyNy4wLjAuMSIgfHwKKyAgICBob3N0bmFtZSA9PSAiOjoxIjsKK30KKwordmFy
IGdldExvY2FsQ3Jvc3NPcmlnaW4gPSBmdW5jdGlvbigpIHsKKyAgdmFyIGRvbWFpbjsKKyAgaWYg
KHdpbmRvdy5sb2NhdGlvbi5ob3N0LmluZGV4T2YoImxvY2FsaG9zdCIpICE9IC0xKSB7CisgICAg
Ly8gVE9ETyhrYnIpOiBmaWd1cmUgb3V0IHdoZXRoZXIgdG8gdXNlIGFuIElQdjYgbG9vcGJhY2sg
YWRkcmVzcy4KKyAgICBkb21haW4gPSAiMTI3LjAuMC4xIjsKKyAgfSBlbHNlIHsKKyAgICBkb21h
aW4gPSAibG9jYWxob3N0IjsKKyAgfQorCisgIHZhciBwb3J0ID0gd2luZG93LmxvY2F0aW9uLnBv
cnQgfHwgIjgwIjsKKyAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICIvLyIgKyBk
b21haW4gKyAiOiIgKyBwb3J0Cit9CisKK3ZhciBnZXRSZWxhdGl2ZVBhdGggPSBmdW5jdGlvbihw
YXRoKSB7CisgIHZhciByZWxwYXJ0cyA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zcGxpdCgi
LyIpOworICByZWxwYXJ0cy5wb3AoKTsgLy8gUG9wIG9mZiBmaWxlbmFtZQorICB2YXIgcGF0aHBh
cnRzID0gcGF0aC5zcGxpdCgiLyIpOworCisgIHZhciBpOworICBmb3IgKGkgPSAwOyBpIDwgcGF0
aHBhcnRzLmxlbmd0aDsgKytpKSB7CisgICAgc3dpdGNoIChwYXRocGFydHNbaV0pIHsKKyAgICAg
IGNhc2UgIiI6IGJyZWFrOworICAgICAgY2FzZSAiLiI6IGJyZWFrOworICAgICAgY2FzZSAiLi4i
OgorICAgICAgICByZWxwYXJ0cy5wb3AoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZhdWx0
OgorICAgICAgICByZWxwYXJ0cy5wdXNoKHBhdGhwYXJ0c1tpXSk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgfQorCisgIHJldHVybiByZWxwYXJ0cy5qb2luKCIvIik7Cit9CisKK2FzeW5jIGZ1
bmN0aW9uIGxvYWRDcm9zc09yaWdpbkltYWdlKGltZywgd2ViVXJsLCBsb2NhbFVybCkgeworICBp
ZiAocnVubmluZ09uTG9jYWxob3N0KCkpIHsKKyAgICBpbWcuc3JjID0gZ2V0TG9jYWxDcm9zc09y
aWdpbigpICsgZ2V0UmVsYXRpdmVQYXRoKGxvY2FsVXJsKTsKKyAgICBjb25zb2xlLmxvZygnW2xv
YWRDcm9zc09yaWdpbkltYWdlXScsICcgIHRyeWluZycsIGltZy5zcmMpOworICAgIGF3YWl0IGlt
Zy5kZWNvZGUoKTsKKyAgICByZXR1cm47CisgIH0KKworICB0cnkgeworICAgIGltZy5zcmMgPSBn
ZXRVcmxPcHRpb25zKCkuaW1nVXJsIHx8IHdlYlVybDsKKyAgICBjb25zb2xlLmxvZygnW2xvYWRD
cm9zc09yaWdpbkltYWdlXScsICd0cnlpbmcnLCBpbWcuc3JjKTsKKyAgICBhd2FpdCBpbWcuZGVj
b2RlKCk7CisgICAgcmV0dXJuOworICB9IGNhdGNoIHt9CisKKyAgdGhyb3cgJ2NyZWF0ZUNyb3Nz
T3JpZ2luSW1hZ2UgZmFpbGVkJzsKK30KKworLyoqCisgKiBDb252ZXJ0IHNSR0IgY29sb3IgdG8g
bGluZWFyIGNvbG9yLgorICogQHBhcmFtIHshQXJyYXkuPG51bWJlcj59IGNvbG9yIFRoZSBjb2xv
ciB0byBiZSBjb252ZXJ0ZWQuCisgKiAgICAgICAgVGhlIGFycmF5IGhhcyA0IGVsZW1lbnRzLCBm
b3IgZXhhbXBsZSBbUiwgRywgQiwgQV0uCisgKiAgICAgICAgd2hlcmUgZWFjaCBlbGVtZW50IGlz
IGluIHRoZSByYW5nZSAwIHRvIDI1NS4KKyAqIEByZXR1cm4geyFBcnJheS48bnVtYmVyPn0gY29s
b3IgVGhlIGNvbG9yIHRvIGJlIGNvbnZlcnRlZC4KKyAqICAgICAgICBUaGUgYXJyYXkgaGFzIDQg
ZWxlbWVudHMsIGZvciBleGFtcGxlIFtSLCBHLCBCLCBBXS4KKyAqICAgICAgICB3aGVyZSBlYWNo
IGVsZW1lbnQgaXMgaW4gdGhlIHJhbmdlIDAgdG8gMjU1LgorICovCit2YXIgc1JHQlRvTGluZWFy
ID0gZnVuY3Rpb24oY29sb3IpIHsKKyAgICByZXR1cm4gW3NSR0JDaGFubmVsVG9MaW5lYXIoY29s
b3JbMF0pLAorICAgICAgICAgICAgc1JHQkNoYW5uZWxUb0xpbmVhcihjb2xvclsxXSksCisgICAg
ICAgICAgICBzUkdCQ2hhbm5lbFRvTGluZWFyKGNvbG9yWzJdKSwKKyAgICAgICAgICAgIGNvbG9y
WzNdXQorfQorCisvKioKKyAqIENvbnZlcnQgbGluZWFyIGNvbG9yIHRvIHNSR0IgY29sb3IuCisg
KiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gY29sb3IgVGhlIGNvbG9yIHRvIGJlIGNvbnZlcnRl
ZC4KKyAqICAgICAgICBUaGUgYXJyYXkgaGFzIDQgZWxlbWVudHMsIGZvciBleGFtcGxlIFtSLCBH
LCBCLCBBXS4KKyAqICAgICAgICB3aGVyZSBlYWNoIGVsZW1lbnQgaXMgaW4gdGhlIHJhbmdlIDAg
dG8gMjU1LgorICogQHJldHVybiB7IUFycmF5LjxudW1iZXI+fSBjb2xvciBUaGUgY29sb3IgdG8g
YmUgY29udmVydGVkLgorICogICAgICAgIFRoZSBhcnJheSBoYXMgNCBlbGVtZW50cywgZm9yIGV4
YW1wbGUgW1IsIEcsIEIsIEFdLgorICogICAgICAgIHdoZXJlIGVhY2ggZWxlbWVudCBpcyBpbiB0
aGUgcmFuZ2UgMCB0byAyNTUuCisgKi8KK3ZhciBsaW5lYXJUb1NSR0IgPSBmdW5jdGlvbihjb2xv
cikgeworICAgIHJldHVybiBbbGluZWFyQ2hhbm5lbFRvU1JHQihjb2xvclswXSksCisgICAgICAg
ICAgICBsaW5lYXJDaGFubmVsVG9TUkdCKGNvbG9yWzFdKSwKKyAgICAgICAgICAgIGxpbmVhckNo
YW5uZWxUb1NSR0IoY29sb3JbMl0pLAorICAgICAgICAgICAgY29sb3JbM11dCit9CisKK2Z1bmN0
aW9uIHNSR0JDaGFubmVsVG9MaW5lYXIodmFsdWUpIHsKKyAgICB2YWx1ZSA9IHZhbHVlIC8gMjU1
OworICAgIGlmICh2YWx1ZSA8PSAwLjA0MDQ1KQorICAgICAgICB2YWx1ZSA9IHZhbHVlIC8gMTIu
OTI7CisgICAgZWxzZQorICAgICAgICB2YWx1ZSA9IE1hdGgucG93KCh2YWx1ZSArIDAuMDU1KSAv
IDEuMDU1LCAyLjQpOworICAgIHJldHVybiBNYXRoLnRydW5jKHZhbHVlICogMjU1ICsgMC41KTsK
K30KKworZnVuY3Rpb24gbGluZWFyQ2hhbm5lbFRvU1JHQih2YWx1ZSkgeworICAgIHZhbHVlID0g
dmFsdWUgLyAyNTU7CisgICAgaWYgKHZhbHVlIDw9IDAuMCkgeworICAgICAgICB2YWx1ZSA9IDAu
MDsKKyAgICB9IGVsc2UgaWYgKHZhbHVlIDwgMC4wMDMxMzA4KSB7CisgICAgICAgIHZhbHVlID0g
dmFsdWUgKiAxMi45MjsKKyAgICB9IGVsc2UgaWYgKHZhbHVlIDwgMSkgeworICAgICAgICB2YWx1
ZSA9IE1hdGgucG93KHZhbHVlLCAwLjQxNjY2KSAqIDEuMDU1IC0gMC4wNTU7CisgICAgfSBlbHNl
IHsKKyAgICAgICAgdmFsdWUgPSAxLjA7CisgICAgfQorICAgIHJldHVybiBNYXRoLnRydW5jKHZh
bHVlICogMjU1ICsgMC41KTsKK30KKworZnVuY3Rpb24gY29tcGFyZVBpeGVscyhjbXAsIHJlZiwg
dG9sZXJhbmNlLCBkaWZmKSB7CisgICAgaWYgKGNtcC5sZW5ndGggIT0gcmVmLmxlbmd0aCkgewor
ICAgICAgICB0ZXN0RmFpbGVkKCJpbnZhbGlkIHBpeGVsIHNpemUuIik7CisgICAgfQorCisgICAg
dmFyIGNvdW50ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNtcC5sZW5ndGg7IGkrKykg
eworICAgICAgICBpZiAoZGlmZikgeworICAgICAgICAgICAgZGlmZltpICogNF0gPSAwOworICAg
ICAgICAgICAgZGlmZltpICogNCArIDFdID0gMjU1OworICAgICAgICAgICAgZGlmZltpICogNCAr
IDJdID0gMDsKKyAgICAgICAgICAgIGRpZmZbaSAqIDQgKyAzXSA9IDI1NTsKKyAgICAgICAgfQor
ICAgICAgICBpZiAoTWF0aC5hYnMoY21wW2kgKiA0XSAtIHJlZltpICogNF0pID4gdG9sZXJhbmNl
IHx8CisgICAgICAgICAgICBNYXRoLmFicyhjbXBbaSAqIDQgKyAxXSAtIHJlZltpICogNCArIDFd
KSA+IHRvbGVyYW5jZSB8fAorICAgICAgICAgICAgTWF0aC5hYnMoY21wW2kgKiA0ICsgMl0gLSBy
ZWZbaSAqIDQgKyAyXSkgPiB0b2xlcmFuY2UgfHwKKyAgICAgICAgICAgIE1hdGguYWJzKGNtcFtp
ICogNCArIDNdIC0gcmVmW2kgKiA0ICsgM10pID4gdG9sZXJhbmNlKSB7CisgICAgICAgICAgICBp
ZiAoY291bnQgPCAxMCkgeworICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoIlBpeGVsICIgKyBp
ICsgIjogZXhwZWN0ZWQgKCIgKworICAgICAgICAgICAgICAgIFtyZWZbaSAqIDRdLCByZWZbaSAq
IDQgKyAxXSwgcmVmW2kgKiA0ICsgMl0sIHJlZltpICogNCArIDNdXSArICIpLCBnb3QgKCIgKwor
ICAgICAgICAgICAgICAgIFtjbXBbaSAqIDRdLCBjbXBbaSAqIDQgKyAxXSwgY21wW2kgKiA0ICsg
Ml0sIGNtcFtpICogNCArIDNdXSArICIpIik7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBj
b3VudCsrOworICAgICAgICAgICAgaWYgKGRpZmYpIHsKKyAgICAgICAgICAgICAgICBkaWZmW2kg
KiA0XSA9IDI1NTsKKyAgICAgICAgICAgICAgICBkaWZmW2kgKiA0ICsgMV0gPSAwOworICAgICAg
ICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50OworfQorCitmdW5j
dGlvbiBkZXN0cm95Q29udGV4dChnbCkgeworICBnbC5jYW52YXMud2lkdGggPSAxOworICBnbC5j
YW52YXMuaGVpZ2h0ID0gMTsKKyAgY29uc3QgZXh0ID0gZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJHTF9s
b3NlX2NvbnRleHQnKTsKKyAgaWYgKGV4dCkgeworICAgIGV4dC5sb3NlQ29udGV4dCgpOworICB9
Cit9CisKK2Z1bmN0aW9uIGRlc3Ryb3lBbGxDb250ZXh0cygpIHsKKyAgaWYgKCF3aW5kb3cuX3d0
dV9jb250ZXh0cykKKyAgICByZXR1cm47CisgIGZvciAoY29uc3QgeCBvZiB3aW5kb3cuX3d0dV9j
b250ZXh0cykgeworICAgIGRlc3Ryb3lDb250ZXh0KHgpOworICB9CisgIHdpbmRvdy5fd3R1X2Nv
bnRleHRzID0gW107Cit9CisKK2Z1bmN0aW9uIGRpc3BsYXlJbWFnZURpZmYoY21wLCByZWYsIGRp
ZmYsIHdpZHRoLCBoZWlnaHQpIHsKKyAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVu
dCgiZGl2Iik7CisKKyAgICB2YXIgY21wSW1nID0gY3JlYXRlSW1hZ2VGcm9tUGl4ZWwoY21wLCB3
aWR0aCwgaGVpZ2h0KTsKKyAgICB2YXIgcmVmSW1nID0gY3JlYXRlSW1hZ2VGcm9tUGl4ZWwocmVm
LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICB2YXIgZGlmZkltZyA9IGNyZWF0ZUltYWdlRnJvbVBpeGVs
KGRpZmYsIHdpZHRoLCBoZWlnaHQpOworICAgIHd0dS5pbnNlcnRJbWFnZShkaXYsICJSZWZlcmVu
Y2UiLCByZWZJbWcpOworICAgIHd0dS5pbnNlcnRJbWFnZShkaXYsICJSZXN1bHQiLCBjbXBJbWcp
OworICAgIHd0dS5pbnNlcnRJbWFnZShkaXYsICJEaWZmZXJlbmNlIiwgZGlmZkltZyk7CisKKyAg
ICB2YXIgY29uc29sZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIik7CisgICAg
Y29uc29sZS5hcHBlbmRDaGlsZChkaXYpOworfQorCitmdW5jdGlvbiBjcmVhdGVJbWFnZUZyb21Q
aXhlbChidWYsIHdpZHRoLCBoZWlnaHQpIHsKKyAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQuY3Jl
YXRlRWxlbWVudCgiY2FudmFzIik7CisgICAgY2FudmFzLndpZHRoID0gd2lkdGg7CisgICAgY2Fu
dmFzLmhlaWdodCA9IGhlaWdodDsKKyAgICB2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQoIjJk
Iik7CisgICAgdmFyIGltZ0RhdGEgPSBjdHguZ2V0SW1hZ2VEYXRhKDAsIDAsIHdpZHRoLCBoZWln
aHQpOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspCisgICAgICAg
IGltZ0RhdGEuZGF0YVtpXSA9IGJ1ZltpXTsKKyAgICBjdHgucHV0SW1hZ2VEYXRhKGltZ0RhdGEs
IDAsIDApOworICAgIHZhciBpbWcgPSB3dHUubWFrZUltYWdlRnJvbUNhbnZhcyhjYW52YXMpOwor
ICAgIHJldHVybiBpbWc7Cit9CisKK2FzeW5jIGZ1bmN0aW9uIGF3YWl0VGltZW91dChtcykgewor
ICBhd2FpdCBuZXcgUHJvbWlzZShyZXMgPT4geworICAgIHNldFRpbWVvdXQoKCkgPT4geworICAg
ICAgcmVzKCk7CisgICAgfSwgbXMpOworICB9KTsKK30KKworYXN5bmMgZnVuY3Rpb24gYXdhaXRP
clRpbWVvdXQocHJvbWlzZSwgb3B0X3RpbWVvdXRfbXMpIHsKKyAgYXN5bmMgZnVuY3Rpb24gdGhy
b3dPblRpbWVvdXQobXMpIHsKKyAgICBhd2FpdCBhd2FpdFRpbWVvdXQobXMpOworICAgIHRocm93
ICd0aW1lb3V0JzsKKyAgfQorCisgIGxldCB0aW1lb3V0X21zID0gb3B0X3RpbWVvdXRfbXM7Cisg
IGlmICh0aW1lb3V0X21zID09PSB1bmRlZmluZWQpCisgICAgdGltZW91dF9tcyA9IDUwMDA7CisK
KyAgYXdhaXQgUHJvbWlzZS5yYWNlKFtwcm9taXNlLCB0aHJvd09uVGltZW91dCh0aW1lb3V0X21z
KV0pOworfQorCit2YXIgQVBJID0geworICBhZGRTaGFkZXJTb3VyY2U6IGFkZFNoYWRlclNvdXJj
ZSwKKyAgYWRkU2hhZGVyU291cmNlczogYWRkU2hhZGVyU291cmNlcywKKyAgY2FuY2VsQW5pbUZy
YW1lOiBjYW5jZWxBbmltRnJhbWUsCisgIGNyZWF0ZTNEQ29udGV4dDogY3JlYXRlM0RDb250ZXh0
LAorICBHTEVycm9yRXhjZXB0aW9uOiBHTEVycm9yRXhjZXB0aW9uLAorICBjcmVhdGUzRENvbnRl
eHRXaXRoV3JhcHBlclRoYXRUaHJvd3NPbkdMRXJyb3I6IGNyZWF0ZTNEQ29udGV4dFdpdGhXcmFw
cGVyVGhhdFRocm93c09uR0xFcnJvciwKKyAgY2hlY2tBcmVhSW5BbmRPdXQ6IGNoZWNrQXJlYUlu
QW5kT3V0LAorICBjaGVja0NhbnZhczogY2hlY2tDYW52YXMsCisgIGNoZWNrQ2FudmFzUmVjdDog
Y2hlY2tDYW52YXNSZWN0LAorICBjaGVja0NhbnZhc1JlY3RDb2xvcjogY2hlY2tDYW52YXNSZWN0
Q29sb3IsCisgIGNoZWNrQ2FudmFzUmVjdHM6IGNoZWNrQ2FudmFzUmVjdHMsCisgIGNoZWNrRmxv
YXRCdWZmZXI6IGNoZWNrRmxvYXRCdWZmZXIsCisgIGNoZWNrVGV4dHVyZVNpemU6IGNoZWNrVGV4
dHVyZVNpemUsCisgIGNsaXBUb1JhbmdlOiBjbGlwVG9SYW5nZSwKKyAgY3JlYXRlQ29sb3JlZFRl
eHR1cmU6IGNyZWF0ZUNvbG9yZWRUZXh0dXJlLAorICBjcmVhdGVQcm9ncmFtOiBjcmVhdGVQcm9n
cmFtLAorICBjbGVhckFuZERyYXdVbml0UXVhZDogY2xlYXJBbmREcmF3VW5pdFF1YWQsCisgIGNs
ZWFyQW5kRHJhd0luZGV4ZWRRdWFkOiBjbGVhckFuZERyYXdJbmRleGVkUXVhZCwKKyAgY29tcGFy
ZVBpeGVsczogY29tcGFyZVBpeGVscywKKyAgZGVzdHJveUFsbENvbnRleHRzOiBkZXN0cm95QWxs
Q29udGV4dHMsCisgIGRlc3Ryb3lDb250ZXh0OiBkZXN0cm95Q29udGV4dCwKKyAgZGlzcGF0Y2hQ
cm9taXNlOiBkaXNwYXRjaFByb21pc2UsCisgIGRpc3BsYXlJbWFnZURpZmY6IGRpc3BsYXlJbWFn
ZURpZmYsCisgIGRyYXdVbml0UXVhZDogZHJhd1VuaXRRdWFkLAorICBkcmF3SW5kZXhlZFF1YWQ6
IGRyYXdJbmRleGVkUXVhZCwKKyAgZHJhd1VCeXRlQ29sb3JRdWFkOiBkcmF3VUJ5dGVDb2xvclF1
YWQsCisgIGRyYXdGbG9hdENvbG9yUXVhZDogZHJhd0Zsb2F0Q29sb3JRdWFkLAorICBkdW1teVNl
dFByb2dyYW1BbmREcmF3Tm90aGluZzogZHVtbXlTZXRQcm9ncmFtQW5kRHJhd05vdGhpbmcsCisg
IGR1bXBTaGFkZXJzSW5mbzogZHVtcFNoYWRlcnNJbmZvLAorICBlbmRzV2l0aDogZW5kc1dpdGgs
CisgIGZhaWxJZkdMRXJyb3I6IGZhaWxJZkdMRXJyb3IsCisgIGZpbGxUZXh0dXJlOiBmaWxsVGV4
dHVyZSwKKyAgZnJhbWVidWZmZXJTdGF0dXNTaG91bGRCZTogZnJhbWVidWZmZXJTdGF0dXNTaG91
bGRCZSwKKyAgZ2V0Qnl0ZXNQZXJDb21wb25lbnQ6IGdldEJ5dGVzUGVyQ29tcG9uZW50LAorICBn
ZXREZWZhdWx0M0RDb250ZXh0VmVyc2lvbjogZ2V0RGVmYXVsdDNEQ29udGV4dFZlcnNpb24sCisg
IGdldEV4dGVuc2lvblByZWZpeGVkTmFtZXM6IGdldEV4dGVuc2lvblByZWZpeGVkTmFtZXMsCisg
IGdldEV4dGVuc2lvbldpdGhLbm93blByZWZpeGVzOiBnZXRFeHRlbnNpb25XaXRoS25vd25QcmVm
aXhlcywKKyAgZ2V0RmlsZUxpc3RBc3luYzogZ2V0RmlsZUxpc3RBc3luYywKKyAgZ2V0TGFzdEVy
cm9yOiBnZXRMYXN0RXJyb3IsCisgIGdldFByZWZpeGVkUHJvcGVydHk6IGdldFByZWZpeGVkUHJv
cGVydHksCisgIGdldFNjcmlwdDogZ2V0U2NyaXB0LAorICBnZXRTdXBwb3J0ZWRFeHRlbnNpb25X
aXRoS25vd25QcmVmaXhlczogZ2V0U3VwcG9ydGVkRXh0ZW5zaW9uV2l0aEtub3duUHJlZml4ZXMs
CisgIGdldFR5cGVkQXJyYXlFbGVtZW50c1BlclBpeGVsOiBnZXRUeXBlZEFycmF5RWxlbWVudHNQ
ZXJQaXhlbCwKKyAgZ2V0VXJsQXJndW1lbnRzOiBnZXRVcmxBcmd1bWVudHMsCisgIGdldFVybE9w
dGlvbnM6IGdldFVybE9wdGlvbnMsCisgIGdldEF0dHJpYk1hcDogZ2V0QXR0cmliTWFwLAorICBn
ZXRVbmlmb3JtTWFwOiBnZXRVbmlmb3JtTWFwLAorICBnbEVudW1Ub1N0cmluZzogZ2xFbnVtVG9T
dHJpbmcsCisgIGdsRXJyb3JTaG91bGRCZTogZ2xFcnJvclNob3VsZEJlLAorICBnbFR5cGVUb1R5
cGVkQXJyYXlUeXBlOiBnbFR5cGVUb1R5cGVkQXJyYXlUeXBlLAorICBoYXNBdHRyaWJ1dGVDYXNl
SW5zZW5zaXRpdmU6IGhhc0F0dHJpYnV0ZUNhc2VJbnNlbnNpdGl2ZSwKKyAgaW5zZXJ0SW1hZ2U6
IGluc2VydEltYWdlLAorICBpc1dlYkdMMjogaXNXZWJHTDIsCisgIGxpbmtQcm9ncmFtOiBsaW5r
UHJvZ3JhbSwKKyAgbG9hZENyb3NzT3JpZ2luSW1hZ2U6IGxvYWRDcm9zc09yaWdpbkltYWdlLAor
ICBsb2FkSW1hZ2VBc3luYzogbG9hZEltYWdlQXN5bmMsCisgIGxvYWRJbWFnZXNBc3luYzogbG9h
ZEltYWdlc0FzeW5jLAorICBsb2FkUHJvZ3JhbTogbG9hZFByb2dyYW0sCisgIGxvYWRQcm9ncmFt
RnJvbUZpbGU6IGxvYWRQcm9ncmFtRnJvbUZpbGUsCisgIGxvYWRQcm9ncmFtRnJvbVNjcmlwdDog
bG9hZFByb2dyYW1Gcm9tU2NyaXB0LAorICBsb2FkUHJvZ3JhbUZyb21TY3JpcHRFeHBlY3RFcnJv
cjogbG9hZFByb2dyYW1Gcm9tU2NyaXB0RXhwZWN0RXJyb3IsCisgIGxvYWRTaGFkZXI6IGxvYWRT
aGFkZXIsCisgIGxvYWRTaGFkZXJGcm9tRmlsZTogbG9hZFNoYWRlckZyb21GaWxlLAorICBsb2Fk
U2hhZGVyRnJvbVNjcmlwdDogbG9hZFNoYWRlckZyb21TY3JpcHQsCisgIGxvYWRTdGFuZGFyZFBy
b2dyYW06IGxvYWRTdGFuZGFyZFByb2dyYW0sCisgIGxvYWRTdGFuZGFyZFByb2dyYW1Bc3luYzog
bG9hZFN0YW5kYXJkUHJvZ3JhbUFzeW5jLAorICBsb2FkU3RhbmRhcmRWZXJ0ZXhTaGFkZXI6IGxv
YWRTdGFuZGFyZFZlcnRleFNoYWRlciwKKyAgbG9hZFN0YW5kYXJkVmVydGV4U2hhZGVyQXN5bmM6
IGxvYWRTdGFuZGFyZFZlcnRleFNoYWRlckFzeW5jLAorICBsb2FkU3RhbmRhcmRGcmFnbWVudFNo
YWRlcjogbG9hZFN0YW5kYXJkRnJhZ21lbnRTaGFkZXIsCisgIGxvYWRTdGFuZGFyZEZyYWdtZW50
U2hhZGVyQXN5bmM6IGxvYWRTdGFuZGFyZEZyYWdtZW50U2hhZGVyQXN5bmMsCisgIGxvYWRVbmlm
b3JtQmxvY2tQcm9ncmFtOiBsb2FkVW5pZm9ybUJsb2NrUHJvZ3JhbSwKKyAgbG9hZFVuaWZvcm1C
bG9ja1ZlcnRleFNoYWRlcjogbG9hZFVuaWZvcm1CbG9ja1ZlcnRleFNoYWRlciwKKyAgbG9hZFVu
aWZvcm1CbG9ja0ZyYWdtZW50U2hhZGVyOiBsb2FkVW5pZm9ybUJsb2NrRnJhZ21lbnRTaGFkZXIs
CisgIGxvYWRUZXh0RmlsZUFzeW5jOiBsb2FkVGV4dEZpbGVBc3luYywKKyAgbG9hZFRleHR1cmU6
IGxvYWRUZXh0dXJlLAorICBsb2c6IGxvZywKKyAgbG9nZ2luZ09mZjogbG9nZ2luZ09mZiwKKyAg
bWFrZUNoZWNrUmVjdDogbWFrZUNoZWNrUmVjdCwKKyAgbWFrZUltYWdlOiBtYWtlSW1hZ2UsCisg
IG1ha2VJbWFnZUZyb21DYW52YXM6IG1ha2VJbWFnZUZyb21DYW52YXMsCisgIG1ha2VWaWRlbzog
bWFrZVZpZGVvLAorICBlcnJvcjogZXJyb3IsCisgIHJ1bkV4dGVuc2lvblN1cHBvcnRlZFRlc3Q6
IHJ1bkV4dGVuc2lvblN1cHBvcnRlZFRlc3QsCisgIHNoYWxsb3dDb3B5T2JqZWN0OiBzaGFsbG93
Q29weU9iamVjdCwKKyAgc2V0RGVmYXVsdDNEQ29udGV4dFZlcnNpb246IHNldERlZmF1bHQzRENv
bnRleHRWZXJzaW9uLAorICBzZXR1cENvbG9yUXVhZDogc2V0dXBDb2xvclF1YWQsCisgIHNldHVw
UHJvZ3JhbTogc2V0dXBQcm9ncmFtLAorICBzZXR1cFRyYW5zZm9ybUZlZWRiYWNrUHJvZ3JhbTog
c2V0dXBUcmFuc2Zvcm1GZWVkYmFja1Byb2dyYW0sCisgIHNldHVwUXVhZDogc2V0dXBRdWFkLAor
ICBzZXR1cFF1YWRXaXRoVGV4Q29vcmRzOiBzZXR1cFF1YWRXaXRoVGV4Q29vcmRzLAorICBzZXR1
cEluZGV4ZWRRdWFkOiBzZXR1cEluZGV4ZWRRdWFkLAorICBzZXR1cEluZGV4ZWRRdWFkV2l0aE9w
dGlvbnM6IHNldHVwSW5kZXhlZFF1YWRXaXRoT3B0aW9ucywKKyAgc2V0dXBTaW1wbGVDb2xvclBy
b2dyYW06IHNldHVwU2ltcGxlQ29sb3JQcm9ncmFtLAorICBzZXR1cFNpbXBsZVRleHR1cmVQcm9n
cmFtOiBzZXR1cFNpbXBsZVRleHR1cmVQcm9ncmFtLAorICBzZXR1cFNpbXBsZVRleHR1cmVQcm9n
cmFtRVNTTDMwMDogc2V0dXBTaW1wbGVUZXh0dXJlUHJvZ3JhbUVTU0wzMDAsCisgIHNldHVwU2lt
cGxlQ3ViZU1hcFRleHR1cmVQcm9ncmFtOiBzZXR1cFNpbXBsZUN1YmVNYXBUZXh0dXJlUHJvZ3Jh
bSwKKyAgc2V0dXBTaW1wbGVWZXJ0ZXhDb2xvclByb2dyYW06IHNldHVwU2ltcGxlVmVydGV4Q29s
b3JQcm9ncmFtLAorICBzZXR1cE5vVGV4Q29vcmRUZXh0dXJlUHJvZ3JhbTogc2V0dXBOb1RleENv
b3JkVGV4dHVyZVByb2dyYW0sCisgIHNldHVwVGV4dHVyZWRRdWFkOiBzZXR1cFRleHR1cmVkUXVh
ZCwKKyAgc2V0dXBUZXh0dXJlZFF1YWRXaXRoVGV4Q29vcmRzOiBzZXR1cFRleHR1cmVkUXVhZFdp
dGhUZXhDb29yZHMsCisgIHNldHVwVGV4dHVyZWRRdWFkV2l0aEN1YmVNYXA6IHNldHVwVGV4dHVy
ZWRRdWFkV2l0aEN1YmVNYXAsCisgIHNldHVwVW5pdFF1YWQ6IHNldHVwVW5pdFF1YWQsCisgIHNl
dEZsb2F0RHJhd0NvbG9yOiBzZXRGbG9hdERyYXdDb2xvciwKKyAgc2V0VUJ5dGVEcmF3Q29sb3I6
IHNldFVCeXRlRHJhd0NvbG9yLAorICBzdGFydFBsYXlpbmdBbmRXYWl0Rm9yVmlkZW86IHN0YXJ0
UGxheWluZ0FuZFdhaXRGb3JWaWRlbywKKyAgc3RhcnRzV2l0aDogc3RhcnRzV2l0aCwKKyAgc2hv
dWxkR2VuZXJhdGVHTEVycm9yOiBzaG91bGRHZW5lcmF0ZUdMRXJyb3IsCisgIHNob3VsZFRocm93
OiBzaG91bGRUaHJvdywKKyAgcmVhZEZpbGU6IHJlYWRGaWxlLAorICByZWFkRmlsZUxpc3Q6IHJl
YWRGaWxlTGlzdCwKKyAgcmVwbGFjZVBhcmFtczogcmVwbGFjZVBhcmFtcywKKyAgcmVxdWVzdEFu
aW1GcmFtZTogcmVxdWVzdEFuaW1GcmFtZSwKKyAgcnVuU3RlcHM6IHJ1blN0ZXBzLAorICB3YWl0
Rm9yQ29tcG9zaXRlOiB3YWl0Rm9yQ29tcG9zaXRlLAorCisgIC8vIGZ1bGxzY3JlZW4gYXBpCisg
IHNldHVwRnVsbHNjcmVlbjogc2V0dXBGdWxsc2NyZWVuLAorCisgIC8vIHNSR0IgY29udmVydGVy
IGFwaQorICBzUkdCVG9MaW5lYXI6IHNSR0JUb0xpbmVhciwKKyAgbGluZWFyVG9TUkdCOiBsaW5l
YXJUb1NSR0IsCisKKyAgZ2V0SG9zdDogZ2V0SG9zdCwKKyAgZ2V0QmFzZURvbWFpbjogZ2V0QmFz
ZURvbWFpbiwKKyAgcnVubmluZ09uTG9jYWxob3N0OiBydW5uaW5nT25Mb2NhbGhvc3QsCisgIGdl
dExvY2FsQ3Jvc3NPcmlnaW46IGdldExvY2FsQ3Jvc3NPcmlnaW4sCisgIGdldFJlbGF0aXZlUGF0
aDogZ2V0UmVsYXRpdmVQYXRoLAorICBhd2FpdE9yVGltZW91dDogYXdhaXRPclRpbWVvdXQsCisg
IGF3YWl0VGltZW91dDogYXdhaXRUaW1lb3V0LAorCisgIG5vbmU6IGZhbHNlCit9OworCitPYmpl
Y3QuZGVmaW5lUHJvcGVydGllcyhBUEksIHsKKyAgbm9UZXhDb29yZFRleHR1cmVWZXJ0ZXhTaGFk
ZXI6IHsgdmFsdWU6IG5vVGV4Q29vcmRUZXh0dXJlVmVydGV4U2hhZGVyLCB3cml0YWJsZTogZmFs
c2UgfSwKKyAgc2ltcGxlVGV4dHVyZVZlcnRleFNoYWRlcjogeyB2YWx1ZTogc2ltcGxlVGV4dHVy
ZVZlcnRleFNoYWRlciwgd3JpdGFibGU6IGZhbHNlIH0sCisgIHNpbXBsZVRleHR1cmVWZXJ0ZXhT
aGFkZXJFU1NMMzAwOiB7IHZhbHVlOiBzaW1wbGVUZXh0dXJlVmVydGV4U2hhZGVyRVNTTDMwMCwg
d3JpdGFibGU6IGZhbHNlIH0sCisgIHNpbXBsZUNvbG9yRnJhZ21lbnRTaGFkZXI6IHsgdmFsdWU6
IHNpbXBsZUNvbG9yRnJhZ21lbnRTaGFkZXIsIHdyaXRhYmxlOiBmYWxzZSB9LAorICBzaW1wbGVD
b2xvckZyYWdtZW50U2hhZGVyRVNTTDMwMDogeyB2YWx1ZTogc2ltcGxlQ29sb3JGcmFnbWVudFNo
YWRlckVTU0wzMDAsIHdyaXRhYmxlOiBmYWxzZSB9LAorICBzaW1wbGVWZXJ0ZXhTaGFkZXI6IHsg
dmFsdWU6IHNpbXBsZVZlcnRleFNoYWRlciwgd3JpdGFibGU6IGZhbHNlIH0sCisgIHNpbXBsZVZl
cnRleFNoYWRlckVTU0wzMDA6IHsgdmFsdWU6IHNpbXBsZVZlcnRleFNoYWRlckVTU0wzMDAsIHdy
aXRhYmxlOiBmYWxzZSB9LAorICBzaW1wbGVUZXh0dXJlRnJhZ21lbnRTaGFkZXI6IHsgdmFsdWU6
IHNpbXBsZVRleHR1cmVGcmFnbWVudFNoYWRlciwgd3JpdGFibGU6IGZhbHNlIH0sCisgIHNpbXBs
ZVRleHR1cmVGcmFnbWVudFNoYWRlckVTU0wzMDA6IHsgdmFsdWU6IHNpbXBsZVRleHR1cmVGcmFn
bWVudFNoYWRlckVTU0wzMDAsIHdyaXRhYmxlOiBmYWxzZSB9LAorICBzaW1wbGVIaWdoUHJlY2lz
aW9uVGV4dHVyZUZyYWdtZW50U2hhZGVyOiB7IHZhbHVlOiBzaW1wbGVIaWdoUHJlY2lzaW9uVGV4
dHVyZUZyYWdtZW50U2hhZGVyLCB3cml0YWJsZTogZmFsc2UgfSwKKyAgc2ltcGxlQ3ViZU1hcFRl
eHR1cmVGcmFnbWVudFNoYWRlcjogeyB2YWx1ZTogc2ltcGxlQ3ViZU1hcFRleHR1cmVGcmFnbWVu
dFNoYWRlciwgd3JpdGFibGU6IGZhbHNlIH0sCisgIHNpbXBsZVZlcnRleENvbG9yRnJhZ21lbnRT
aGFkZXI6IHsgdmFsdWU6IHNpbXBsZVZlcnRleENvbG9yRnJhZ21lbnRTaGFkZXIsIHdyaXRhYmxl
OiBmYWxzZSB9LAorICBzaW1wbGVWZXJ0ZXhDb2xvclZlcnRleFNoYWRlcjogeyB2YWx1ZTogc2lt
cGxlVmVydGV4Q29sb3JWZXJ0ZXhTaGFkZXIsIHdyaXRhYmxlOiBmYWxzZSB9Cit9KTsKKworcmV0
dXJuIEFQSTsKKworfSgpKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdsL3Jlc291cmNl
cy93ZWJnbF90ZXN0X2ZpbGVzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyBiL0xheW91dFRl
c3RzL3dlYmdsL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL3Jlc291cmNlcy9qcy10ZXN0LXN0
eWxlLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi41ZjY4MzliNjIxNDc3M2IwYTAwYmM4YTJiM2I2MmFjZjY0ZGMx
ZGVlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3dlYmds
X3Rlc3RfZmlsZXMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzCkBAIC0wLDAgKzEsMjAgQEAK
Ky5wYXNzIHsKKyAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICBjb2xvcjogZ3JlZW47Cit9Cisu
ZmFpbCB7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgY29sb3I6IHJlZDsKK30KKy53YXJu
IHsKKyAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICBjb2xvcjogeWVsbG93OworICAgIHRleHQt
c2hhZG93OiAxcHggMXB4ICNmZjAwMDAKK30KKyNjb25zb2xlIHsKKyAgICB3aGl0ZS1zcGFjZTog
cHJlLXdyYXA7CisgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKK30KK2JvZHkgeworICAgIGJh
Y2tncm91bmQtY29sb3I6ICNmZmZmZmY7Cit9Cg==
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>409744</attachid>
            <date>2020-09-25 14:53:37 -0700</date>
            <delta_ts>2020-09-25 17:24:31 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-216949-20200925145336.patch</filename>
            <type>text/plain</type>
            <size>183514</size>
            <attacher name="James Darpinian">jdarpinian</attacher>
            
              <data encoding="base64">U3VidmVyc2lvbiBSZXZpc2lvbjogMjY3Mzg1CmRpZmYgLS1naXQgYS9Tb3VyY2UvVGhpcmRQYXJ0
eS9BTkdMRS9DaGFuZ2VMb2cgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9DaGFuZ2VMb2cKaW5k
ZXggYTNmYjY4OWRlNjEwNTlmMzdkZTRhMTkwMTJhZmUzZWI1ZmExMTM0MS4uNjBlMmNjYjQyYWU0
MWVkODU5NjZjM2YwMTAwMWI2Y2ZlZGUxYTA0MiAxMDA2NDQKLS0tIGEvU291cmNlL1RoaXJkUGFy
dHkvQU5HTEUvQ2hhbmdlTG9nCisrKyBiL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL0NoYW5nZUxv
ZwpAQCAtMSwzICsxLDEzIEBACisyMDIwLTA5LTI0ICBKYW1lcyBEYXJwaW5pYW4gIDxqZGFycGlu
aWFuQGNocm9taXVtLm9yZz4KKworICAgICAgICBTdXBwb3J0IEVYVF9mbG9hdF9ibGVuZAorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MjE2OTQ5CisKKyAg
ICAgICAgUmV2aWV3ZWQgYnkgS2VubmV0aCBSdXNzZWxsLgorCisgICAgICAgICogc3JjL2xpYkFO
R0xFL3JlbmRlcmVyL2dsL3JlbmRlcmVyZ2xfdXRpbHMuY3BwOgorICAgICAgICAocng6Om5hdGl2
ZWdsX2dsOjpHZW5lcmF0ZUNhcHMpOgorCiAyMDIwLTA5LTExICBKYW1lcyBEYXJwaW5pYW4gIDxq
ZGFycGluaWFuQGNocm9taXVtLm9yZz4KIAogICAgICAgICBbV2ViR0wyXSBTdXBwb3J0IEVYVF9j
b2xvcl9idWZmZXJfaGFsZl9mbG9hdCBvbiBXZWJHTCAyLjAgY29udGV4dHMKZGlmZiAtLWdpdCBh
L1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZyBiL1NvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwppbmRl
eCAyYjg5MTRmNzQ4ZWI5MzY4NmNjM2Y1MzA0NjNjOWUwMmMyYmI4MzYxLi44Y2Q2NjIwMmMyOGM1
ZTM0MGRlYTQyNmJmYjc4OTZjZjQ1NDJhNGQ5IDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9D
aGFuZ2VMb2cKKysrIGIvU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMzYgQEAK
KzIwMjAtMDktMjQgIEphbWVzIERhcnBpbmlhbiAgPGpkYXJwaW5pYW5AY2hyb21pdW0ub3JnPgor
CisgICAgICAgIFN1cHBvcnQgRVhUX2Zsb2F0X2JsZW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53
ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0yMTY5NDkKKworICAgICAgICBSZXZpZXdlZCBieSBL
ZW5uZXRoIFJ1c3NlbGwuCisKKyAgICAgICAgVGVzdDogd2ViZ2wvY29uZm9ybWFuY2UvZXh0ZW5z
aW9ucy9leHQtZmxvYXQtYmxlbmQuaHRtbAorCisgICAgICAgICogQ01ha2VMaXN0cy50eHQ6Cisg
ICAgICAgICogRGVyaXZlZFNvdXJjZXMubWFrZToKKyAgICAgICAgKiBTb3VyY2VzLnR4dDoKKyAg
ICAgICAgKiBXZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2o6CisgICAgICAgICogYmlu
ZGluZ3MvanMvSlNET01Db252ZXJ0V2ViR0wuY3BwOgorICAgICAgICAoV2ViQ29yZTo6Y29udmVy
dFRvSlNWYWx1ZSk6CisgICAgICAgICogaHRtbC9jYW52YXMvRVhURmxvYXRCbGVuZC5jcHA6IEFk
ZGVkLgorICAgICAgICAoV2ViQ29yZTo6RVhURmxvYXRCbGVuZDo6RVhURmxvYXRCbGVuZCk6Cisg
ICAgICAgIChXZWJDb3JlOjpFWFRGbG9hdEJsZW5kOjpnZXROYW1lIGNvbnN0KToKKyAgICAgICAg
KFdlYkNvcmU6OkVYVEZsb2F0QmxlbmQ6OnN1cHBvcnRlZCk6CisgICAgICAgICogaHRtbC9jYW52
YXMvRVhURmxvYXRCbGVuZC5oOiBBZGRlZC4KKyAgICAgICAgKiBodG1sL2NhbnZhcy9FWFRGbG9h
dEJsZW5kLmlkbDogQWRkZWQuCisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5n
Q29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTDJSZW5kZXJpbmdDb250ZXh0Ojpn
ZXRFeHRlbnNpb24pOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0wyUmVuZGVyaW5nQ29udGV4dDo6
Z2V0U3VwcG9ydGVkRXh0ZW5zaW9ucyk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xFeHRl
bnNpb24uaDoKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRFeHRlbnNpb24p
OgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0OjpnZXRTdXBwb3J0ZWRF
eHRlbnNpb25zKToKKyAgICAgICAgKiBodG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRC
YXNlLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6OmV4
dGVuc2lvbklzRW5hYmxlZCk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlOjpsb3NlRXh0ZW5zaW9ucyk6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xSZW5k
ZXJpbmdDb250ZXh0QmFzZS5oOgorCiAyMDIwLTA5LTIxICBDaHJpcyBEdW1leiAgPGNkdW1lekBh
cHBsZS5jb20+CiAKICAgICAgICAgVmFsdWVzIHJldHVybmVkIGJ5IEZGVEZyYW1lOjpkb0ZGVCgp
IGFyZSB0d2ljZSBhcyBsYXJnZSBhcyB0aGV5IHNob3VsZCBiZQpkaWZmIC0tZ2l0IGEvU291cmNl
L1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2dsL3JlbmRlcmVyZ2xfdXRp
bHMuY3BwIGIvU291cmNlL1RoaXJkUGFydHkvQU5HTEUvc3JjL2xpYkFOR0xFL3JlbmRlcmVyL2ds
L3JlbmRlcmVyZ2xfdXRpbHMuY3BwCmluZGV4IDRlYTEwNmFjZTg4NGUzNWViMWQ0MjI0Y2VlZjkw
OGExNzYxY2UzMDEuLjNhYjY1Nzk1YmI2NjkwNDE1YzkwN2RlZjY1ZmVmZmI4MjIwMjIwYjIgMTAw
NjQ0Ci0tLSBhL1NvdXJjZS9UaGlyZFBhcnR5L0FOR0xFL3NyYy9saWJBTkdMRS9yZW5kZXJlci9n
bC9yZW5kZXJlcmdsX3V0aWxzLmNwcAorKysgYi9Tb3VyY2UvVGhpcmRQYXJ0eS9BTkdMRS9zcmMv
bGliQU5HTEUvcmVuZGVyZXIvZ2wvcmVuZGVyZXJnbF91dGlscy5jcHAKQEAgLTE0ODEsNyArMTQ4
MSw4IEBAIHZvaWQgR2VuZXJhdGVDYXBzKGNvbnN0IEZ1bmN0aW9uc0dMICpmdW5jdGlvbnMsCiAg
ICAgLy8gRVhUX2Zsb2F0X2JsZW5kCiAgICAgLy8gQXNzdW1lIGFsbCBkZXNrdG9wIGRyaXZlciBz
dXBwb3J0cyB0aGlzIGJ5IGRlZmF1bHQuCiAgICAgZXh0ZW5zaW9ucy0+ZmxvYXRCbGVuZCA9IGZ1
bmN0aW9ucy0+c3RhbmRhcmQgPT0gU1RBTkRBUkRfR0xfREVTS1RPUCB8fAotICAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBmdW5jdGlvbnMtPmhhc0dMRVNFeHRlbnNpb24oIkdMX0VYVF9mbG9h
dF9ibGVuZCIpOworICAgICAgICAgICAgICAgICAgICAgICAgICAgICBmdW5jdGlvbnMtPmhhc0dM
RVNFeHRlbnNpb24oIkdMX0VYVF9mbG9hdF9ibGVuZCIpIHx8CisgICAgICAgICAgICAgICAgICAg
ICAgICAgICAgIGZ1bmN0aW9ucy0+aXNBdExlYXN0R0xFUyhnbDo6VmVyc2lvbigzLCAyKSk7CiAK
ICAgICAvLyBBTkdMRV9iYXNlX3ZlcnRleF9iYXNlX2luc3RhbmNlCiAgICAgZXh0ZW5zaW9ucy0+
YmFzZVZlcnRleEJhc2VJbnN0YW5jZSA9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9DTWFr
ZUxpc3RzLnR4dCBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CmluZGV4IDUwNzljYjE5
ZjQ0NjA0N2JlNjg1YThmOGY0YTlhYjVhZmVkNjI3Y2MuLjUyNjlkYzdkMWFmZGJhMjdlNGFmOTM0
MmM2OTAwNDNlMDEzOGQyMzMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMu
dHh0CisrKyBiL1NvdXJjZS9XZWJDb3JlL0NNYWtlTGlzdHMudHh0CkBAIC0xNDM4LDYgKzE0Mzgs
NyBAQCBpZiAoRU5BQkxFX1dFQkdMKQogICAgICAgICBodG1sL2NhbnZhcy9FWFRCbGVuZE1pbk1h
eC5jcHAKICAgICAgICAgaHRtbC9jYW52YXMvRVhUQ29sb3JCdWZmZXJGbG9hdC5jcHAKICAgICAg
ICAgaHRtbC9jYW52YXMvRVhUQ29sb3JCdWZmZXJIYWxmRmxvYXQuY3BwCisgICAgICAgIGh0bWwv
Y2FudmFzL0VYVEZsb2F0QmxlbmQuY3BwCiAgICAgICAgIGh0bWwvY2FudmFzL0VYVEZyYWdEZXB0
aC5jcHAKICAgICAgICAgaHRtbC9jYW52YXMvRVhUU2hhZGVyVGV4dHVyZUxPRC5jcHAKICAgICAg
ICAgaHRtbC9jYW52YXMvRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmNwcApAQCAtMTQ5NCw2
ICsxNDk1LDcgQEAgbGlzdChBUFBFTkQgV2ViQ29yZV9JRExfRklMRVMKICAgICBodG1sL2NhbnZh
cy9FWFRCbGVuZE1pbk1heC5pZGwKICAgICBodG1sL2NhbnZhcy9FWFRDb2xvckJ1ZmZlckZsb2F0
LmlkbAogICAgIGh0bWwvY2FudmFzL0VYVENvbG9yQnVmZmVySGFsZkZsb2F0LmlkbAorICAgIGh0
bWwvY2FudmFzL0VYVEZsb2F0QmxlbmQuaWRsCiAgICAgaHRtbC9jYW52YXMvRVhURnJhZ0RlcHRo
LmlkbAogICAgIGh0bWwvY2FudmFzL0VYVFNoYWRlclRleHR1cmVMT0QuaWRsCiAgICAgaHRtbC9j
YW52YXMvRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmlkbApkaWZmIC0tZ2l0IGEvU291cmNl
L1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZSBiL1NvdXJjZS9XZWJDb3JlL0Rlcml2ZWRTb3Vy
Y2VzLm1ha2UKaW5kZXggZTBhZjIwZjVkODI3MDc3MDhhNzQ3NzY3NTRlYmJkY2UyZTA0MzRlMC4u
YjE1NjVmYjBjMTRmMjJiMThjZmU0ZWIyYTFlYTJjODViMjJjZDIxYyAxMDA2NDQKLS0tIGEvU291
cmNlL1dlYkNvcmUvRGVyaXZlZFNvdXJjZXMubWFrZQorKysgYi9Tb3VyY2UvV2ViQ29yZS9EZXJp
dmVkU291cmNlcy5tYWtlCkBAIC05NDUsNiArOTQ1LDcgQEAgSlNfQklORElOR19JRExTID0gXAog
ICAgICQoV2ViQ29yZSkvaHRtbC9jYW52YXMvRVhUQmxlbmRNaW5NYXguaWRsIFwKICAgICAkKFdl
YkNvcmUpL2h0bWwvY2FudmFzL0VYVENvbG9yQnVmZmVyRmxvYXQuaWRsIFwKICAgICAkKFdlYkNv
cmUpL2h0bWwvY2FudmFzL0VYVENvbG9yQnVmZmVySGFsZkZsb2F0LmlkbCBcCisgICAgJChXZWJD
b3JlKS9odG1sL2NhbnZhcy9FWFRGbG9hdEJsZW5kLmlkbCBcCiAgICAgJChXZWJDb3JlKS9odG1s
L2NhbnZhcy9FWFRGcmFnRGVwdGguaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0VY
VFNoYWRlclRleHR1cmVMT0QuaWRsIFwKICAgICAkKFdlYkNvcmUpL2h0bWwvY2FudmFzL0VYVFRl
eHR1cmVGaWx0ZXJBbmlzb3Ryb3BpYy5pZGwgXApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUv
U291cmNlcy50eHQgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAppbmRleCA3Mjc1NjNlNWZi
NzdhNDU5NDMxMGM0MGUzM2VlNDY2OGNiODVhOGY4Li40MDdmNmI1NDdiMDc4MjhiMTU2NGYwYWU3
YmNhMGVmYmQzOTdhOGYwIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9Tb3VyY2VzLnR4dApAQCAtMTIzOSw2ICsxMjM5LDcgQEAgaHRt
bC9jYW52YXMvQ2FudmFzU3R5bGUuY3BwCiBodG1sL2NhbnZhcy9FWFRCbGVuZE1pbk1heC5jcHAK
IGh0bWwvY2FudmFzL0VYVENvbG9yQnVmZmVyRmxvYXQuY3BwCiBodG1sL2NhbnZhcy9FWFRDb2xv
ckJ1ZmZlckhhbGZGbG9hdC5jcHAKK2h0bWwvY2FudmFzL0VYVEZsb2F0QmxlbmQuY3BwCiBodG1s
L2NhbnZhcy9FWFRGcmFnRGVwdGguY3BwCiBodG1sL2NhbnZhcy9FWFRTaGFkZXJUZXh0dXJlTE9E
LmNwcAogaHRtbC9jYW52YXMvRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmNwcApAQCAtMjg0
OSw2ICsyODUwLDcgQEAgSlNEeW5hbWljc0NvbXByZXNzb3JPcHRpb25zLmNwcAogSlNFWFRCbGVu
ZE1pbk1heC5jcHAKIEpTRVhUQ29sb3JCdWZmZXJGbG9hdC5jcHAKIEpTRVhUQ29sb3JCdWZmZXJI
YWxmRmxvYXQuY3BwCitKU0VYVEZsb2F0QmxlbmQuY3BwCiBKU0VYVEZyYWdEZXB0aC5jcHAKIEpT
RVhUU2hhZGVyVGV4dHVyZUxPRC5jcHAKIEpTRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJvcGljLmNw
cApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5w
Ynhwcm9qIGIvU291cmNlL1dlYkNvcmUvV2ViQ29yZS54Y29kZXByb2ovcHJvamVjdC5wYnhwcm9q
CmluZGV4IDNkY2M1ZTcxYjhiMTMzOTAwMjYyMWFjN2I2Y2FiNzQwYWRmY2UyMWIuLmNhMzk3NzRi
NDA0OTlkMjIyYjc3ODg2MzI5YjJkOGZhNjg4MGI4MGMgMTAwNjQ0Ci0tLSBhL1NvdXJjZS9XZWJD
b3JlL1dlYkNvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJvagorKysgYi9Tb3VyY2UvV2ViQ29y
ZS9XZWJDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKQEAgLTEyMDQzLDYgKzEyMDQzLDkg
QEAKIAkJQTMzQzlGOTEyNEY4MzVBQTAwMEYwODQ1IC8qIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVT
M1RDc1JHQi5oICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7
IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBXZWJHTENvbXByZXNz
ZWRUZXh0dXJlUzNUQ3NSR0IuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKIAkJQTMzQzlG
OTMyNEY4MzVBQjAwMEYwODQ1IC8qIFdlYkdMQ29tcHJlc3NlZFRleHR1cmVTM1RDc1JHQi5jcHAg
Ki8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0gNDsgbGFzdEtub3du
RmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmNwcC5jcHA7IHBhdGggPSBXZWJHTENvbXByZXNzZWRUZXh0
dXJlUzNUQ3NSR0IuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBMzNDOUY5NDI0
RjgzNUFCMDAwRjA4NDUgLyogV2ViR0xDb21wcmVzc2VkVGV4dHVyZVMzVENzUkdCLmlkbCAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHRleHQ7IHBhdGggPSBXZWJHTENvbXByZXNzZWRUZXh0dXJlUzNUQ3NSR0IuaWRsOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OworCQlBMzcwNDlEODI1MUQ0QjhFMDA5QkExQjMgLyog
RVhURmxvYXRCbGVuZC5pZGwgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29k
aW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSB0ZXh0OyBwYXRoID0gRVhURmxvYXRCbGVuZC5p
ZGw7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IH07CisJCUEzNzA0OURBMjUxRDRCOEUwMDlCQTFC
MyAvKiBFWFRGbG9hdEJsZW5kLmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEVY
VEZsb2F0QmxlbmQuaDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgfTsKKwkJQTM3MDQ5REIyNTFE
NEI4RjAwOUJBMUIzIC8qIEVYVEZsb2F0QmxlbmQuY3BwICovID0ge2lzYSA9IFBCWEZpbGVSZWZl
cmVuY2U7IGZpbGVFbmNvZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5j
cHAuY3BwOyBwYXRoID0gRVhURmxvYXRCbGVuZC5jcHA7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7
IH07CiAJCUEzQUY5RDgxMjAzMjUyRUUwMDZDQUQwNiAvKiBVc2VyQWdlbnRDb2NvYS5tbSAqLyA9
IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxl
VHlwZSA9IHNvdXJjZWNvZGUuY3BwLm9iamNwcDsgcGF0aCA9IFVzZXJBZ2VudENvY29hLm1tOyBz
b3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBM0FGOUQ4MjIwMzI1MzI0MDA2Q0FEMDYgLyog
VXNlckFnZW50LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVuY29kaW5nID0g
NDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vjb2RlLmMuaDsgcGF0aCA9IFVzZXJBZ2VudC5o
OyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlBM0FGOUQ4MzIwMzI1NjkxMDA2Q0FEMDYg
LyogVXNlckFnZW50SU9TLm1tICovID0ge2lzYSA9IFBCWEZpbGVSZWZlcmVuY2U7IGZpbGVFbmNv
ZGluZyA9IDQ7IGxhc3RLbm93bkZpbGVUeXBlID0gc291cmNlY29kZS5jcHAub2JqY3BwOyBwYXRo
ID0gVXNlckFnZW50SU9TLm1tOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwpAQCAtMTkzMzAs
NiArMTkzMzMsOSBAQAogCQkJCTZFNTM4OERBMjQ1OEFFMTkwMDc2QUUwMyAvKiBFWFRDb2xvckJ1
ZmZlckhhbGZGbG9hdC5jcHAgKi8sCiAJCQkJNkU1Mzg4REUyNDU4QUUxQzAwNzZBRTAzIC8qIEVY
VENvbG9yQnVmZmVySGFsZkZsb2F0LmggKi8sCiAJCQkJNkU1Mzg4REYyNDU4QUUxQzAwNzZBRTAz
IC8qIEVYVENvbG9yQnVmZmVySGFsZkZsb2F0LmlkbCAqLywKKwkJCQlBMzcwNDlEQjI1MUQ0QjhG
MDA5QkExQjMgLyogRVhURmxvYXRCbGVuZC5jcHAgKi8sCisJCQkJQTM3MDQ5REEyNTFENEI4RTAw
OUJBMUIzIC8qIEVYVEZsb2F0QmxlbmQuaCAqLywKKwkJCQlBMzcwNDlEODI1MUQ0QjhFMDA5QkEx
QjMgLyogRVhURmxvYXRCbGVuZC5pZGwgKi8sCiAJCQkJNzJGMUFEOUYxQTM5MDRDMzAwMDE0RTE4
IC8qIEVYVEZyYWdEZXB0aC5jcHAgKi8sCiAJCQkJNzJGMUFEQTAxQTM5MDRDMzAwMDE0RTE4IC8q
IEVYVEZyYWdEZXB0aC5oICovLAogCQkJCTcyRjFBREExMUEzOTA0QzMwMDAxNEUxOCAvKiBFWFRG
cmFnRGVwdGguaWRsICovLApkaWZmIC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNET01Db252ZXJ0V2ViR0wuY3BwIGIvU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01D
b252ZXJ0V2ViR0wuY3BwCmluZGV4IGQwNTZhMjY4ZTY3YWYyMTcyNzFkOTYwMjdmMTk2MGEyNjU4
YjFmMzEuLjg3NWFmMzQ0ZjY3MDNmM2Q2YTMwMTQxN2Q0ODc3YTIzZjA2NTU3ODcgMTAwNjQ0Ci0t
LSBhL1NvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NQ29udmVydFdlYkdMLmNwcAorKysg
Yi9Tb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUNvbnZlcnRXZWJHTC5jcHAKQEAgLTMz
LDYgKzMzLDcgQEAKICNpbmNsdWRlICJKU0VYVEJsZW5kTWluTWF4LmgiCiAjaW5jbHVkZSAiSlNF
WFRDb2xvckJ1ZmZlckZsb2F0LmgiCiAjaW5jbHVkZSAiSlNFWFRDb2xvckJ1ZmZlckhhbGZGbG9h
dC5oIgorI2luY2x1ZGUgIkpTRVhURmxvYXRCbGVuZC5oIgogI2luY2x1ZGUgIkpTRVhURnJhZ0Rl
cHRoLmgiCiAjaW5jbHVkZSAiSlNFWFRTaGFkZXJUZXh0dXJlTE9ELmgiCiAjaW5jbHVkZSAiSlNF
WFRUZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCIKQEAgLTIxNyw2ICsyMTgsOCBAQCBKU1ZhbHVl
IGNvbnZlcnRUb0pTVmFsdWUoSlNHbG9iYWxPYmplY3QmIGxleGljYWxHbG9iYWxPYmplY3QsIEpT
RE9NR2xvYmFsT2JqZWN0JgogICAgICAgICByZXR1cm4gdG9KUygmbGV4aWNhbEdsb2JhbE9iamVj
dCwgJmdsb2JhbE9iamVjdCwgc3RhdGljX2Nhc3Q8QU5HTEVJbnN0YW5jZWRBcnJheXMmPihleHRl
bnNpb24pKTsKICAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpFWFRDb2xvckJ1ZmZlckhhbGZGbG9h
dE5hbWU6CiAgICAgICAgIHJldHVybiB0b0pTKCZsZXhpY2FsR2xvYmFsT2JqZWN0LCAmZ2xvYmFs
T2JqZWN0LCBzdGF0aWNfY2FzdDxFWFRDb2xvckJ1ZmZlckhhbGZGbG9hdCY+KGV4dGVuc2lvbikp
OworICAgIGNhc2UgV2ViR0xFeHRlbnNpb246OkVYVEZsb2F0QmxlbmROYW1lOgorICAgICAgICBy
ZXR1cm4gdG9KUygmbGV4aWNhbEdsb2JhbE9iamVjdCwgJmdsb2JhbE9iamVjdCwgc3RhdGljX2Nh
c3Q8RVhURmxvYXRCbGVuZCY+KGV4dGVuc2lvbikpOwogICAgIGNhc2UgV2ViR0xFeHRlbnNpb246
OldlYkdMQ29sb3JCdWZmZXJGbG9hdE5hbWU6CiAgICAgICAgIHJldHVybiB0b0pTKCZsZXhpY2Fs
R2xvYmFsT2JqZWN0LCAmZ2xvYmFsT2JqZWN0LCBzdGF0aWNfY2FzdDxXZWJHTENvbG9yQnVmZmVy
RmxvYXQmPihleHRlbnNpb24pKTsKICAgICBjYXNlIFdlYkdMRXh0ZW5zaW9uOjpFWFRDb2xvckJ1
ZmZlckZsb2F0TmFtZToKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VY
VEZsb2F0QmxlbmQuY3BwIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhURmxvYXRCbGVu
ZC5jcHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMC4uOGVmNjg3OTMzYWFlY2Y1YjhkMzNjZTAyMDc4ODJjMmJkZDU3ODk2
MQotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVEZsb2F0
QmxlbmQuY3BwCkBAIC0wLDAgKzEsNTggQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBw
bGUgSW5jLiBBbGwgcmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1
c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZp
Y2F0aW9uLCBhcmUgcGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRp
b25zCisgKiBhcmUgbWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNv
ZGUgbXVzdCByZXRhaW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBs
aXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBS
ZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNv
cHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBm
b2xsb3dpbmcgZGlzY2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBv
dGhlciBtYXRlcmlhbHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRI
SVMgU09GVFdBUkUgSVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFT
IElTIiBBTkQgQU5ZCisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5H
LCBCVVQgTk9UIExJTUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNI
QU5UQUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBE
SVNDTEFJTUVELiBJTiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJF
IExJQUJMRSBGT1IgQU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFM
LCBFWEVNUExBUlksIE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVU
IE5PVCBMSU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJ
Q0VTOworICogTE9TUyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVS
UlVQVElPTikgSE9XRVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElU
WSwgV0hFVEhFUiBJTiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElO
Q0xVRElORyBORUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBP
RiBUSEUgVVNFIE9GCisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBP
U1NJQklMSVRZIE9GIFNVQ0ggREFNQUdFLgorICovCisKKyNpbmNsdWRlICJjb25maWcuaCIKKwor
I2lmIEVOQUJMRShXRUJHTCkKKyNpbmNsdWRlICJFWFRGbG9hdEJsZW5kLmgiCisKKyNpbmNsdWRl
ICJFeHRlbnNpb25zR0wuaCIKKyNpbmNsdWRlIDx3dGYvSXNvTWFsbG9jSW5saW5lcy5oPgorCitu
YW1lc3BhY2UgV2ViQ29yZSB7CisKK1dURl9NQUtFX0lTT19BTExPQ0FURURfSU1QTChFWFRGbG9h
dEJsZW5kKTsKKworRVhURmxvYXRCbGVuZDo6RVhURmxvYXRCbGVuZChXZWJHTFJlbmRlcmluZ0Nv
bnRleHRCYXNlJiBjb250ZXh0KQorICAgIDogV2ViR0xFeHRlbnNpb24oY29udGV4dCkKK3sKKyAg
ICBjb250ZXh0LmdyYXBoaWNzQ29udGV4dEdMKCktPmdldEV4dGVuc2lvbnMoKS5lbnN1cmVFbmFi
bGVkKCJHTF9FWFRfZmxvYXRfYmxlbmQiX3MpOworfQorCitFWFRGbG9hdEJsZW5kOjp+RVhURmxv
YXRCbGVuZCgpID0gZGVmYXVsdDsKKworV2ViR0xFeHRlbnNpb246OkV4dGVuc2lvbk5hbWUgRVhU
RmxvYXRCbGVuZDo6Z2V0TmFtZSgpIGNvbnN0Cit7CisgICAgcmV0dXJuIEVYVEZsb2F0QmxlbmRO
YW1lOworfQorCitib29sIEVYVEZsb2F0QmxlbmQ6OnN1cHBvcnRlZChjb25zdCBXZWJHTFJlbmRl
cmluZ0NvbnRleHRCYXNlJiBjb250ZXh0KQoreworICAgIHJldHVybiBjb250ZXh0LmdyYXBoaWNz
Q29udGV4dEdMKCktPmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfRVhUX2Zsb2F0X2JsZW5k
Il9zKTsKK30KKyAgICAKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKKworI2VuZGlmIC8vIEVOQUJM
RShXRUJHTCkKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVEZsb2F0
QmxlbmQuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0VYVEZsb2F0QmxlbmQuaApuZXcg
ZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwLi4yMmMzMDJhMzMwYTYyMjIzNWNmNjg1MjkzY2Q4YzE2ODU2YTQ1N2JlCi0tLSAvZGV2
L251bGwKKysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvRVhURmxvYXRCbGVuZC5oCkBA
IC0wLDAgKzEsNDMgQEAKKy8qCisgKiBDb3B5cmlnaHQgKEMpIDIwMjAgQXBwbGUgSW5jLiBBbGwg
cmlnaHRzIHJlc2VydmVkLgorICoKKyAqIFJlZGlzdHJpYnV0aW9uIGFuZCB1c2UgaW4gc291cmNl
IGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAorICogbW9kaWZpY2F0aW9uLCBhcmUg
cGVybWl0dGVkIHByb3ZpZGVkIHRoYXQgdGhlIGZvbGxvd2luZyBjb25kaXRpb25zCisgKiBhcmUg
bWV0OgorICoKKyAqIDEuICBSZWRpc3RyaWJ1dGlvbnMgb2Ygc291cmNlIGNvZGUgbXVzdCByZXRh
aW4gdGhlIGFib3ZlIGNvcHlyaWdodAorICogICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRp
dGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlzY2xhaW1lci4KKyAqIDIuICBSZWRpc3RyaWJ1dGlv
bnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3ZlIGNvcHlyaWdodAorICog
ICAgIG5vdGljZSwgdGhpcyBsaXN0IG9mIGNvbmRpdGlvbnMgYW5kIHRoZSBmb2xsb3dpbmcgZGlz
Y2xhaW1lciBpbiB0aGUKKyAqICAgICBkb2N1bWVudGF0aW9uIGFuZC9vciBvdGhlciBtYXRlcmlh
bHMgcHJvdmlkZWQgd2l0aCB0aGUgZGlzdHJpYnV0aW9uLgorICoKKyAqIFRISVMgU09GVFdBUkUg
SVMgUFJPVklERUQgQlkgQVBQTEUgQU5EIElUUyBDT05UUklCVVRPUlMgIkFTIElTIiBBTkQgQU5Z
CisgKiBFWFBSRVNTIE9SIElNUExJRUQgV0FSUkFOVElFUywgSU5DTFVESU5HLCBCVVQgTk9UIExJ
TUlURUQgVE8sIFRIRSBJTVBMSUVECisgKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5UQUJJTElUWSBB
TkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisgKiBESVNDTEFJTUVELiBJ
TiBOTyBFVkVOVCBTSEFMTCBBUFBMRSBPUiBJVFMgQ09OVFJJQlVUT1JTIEJFIExJQUJMRSBGT1Ig
QU5ZCisgKiBESVJFQ1QsIElORElSRUNULCBJTkNJREVOVEFMLCBTUEVDSUFMLCBFWEVNUExBUlks
IE9SIENPTlNFUVVFTlRJQUwgREFNQUdFUworICogKElOQ0xVRElORywgQlVUIE5PVCBMSU1JVEVE
IFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOworICogTE9T
UyBPRiBVU0UsIERBVEEsIE9SIFBST0ZJVFM7IE9SIEJVU0lORVNTIElOVEVSUlVQVElPTikgSE9X
RVZFUiBDQVVTRUQgQU5ECisgKiBPTiBBTlkgVEhFT1JZIE9GIExJQUJJTElUWSwgV0hFVEhFUiBJ
TiBDT05UUkFDVCwgU1RSSUNUIExJQUJJTElUWSwgT1IgVE9SVAorICogKElOQ0xVRElORyBORUdM
SUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNFIE9G
CisgKiBUSElTIFNPRlRXQVJFLCBFVkVOIElGIEFEVklTRUQgT0YgVEhFIFBPU1NJQklMSVRZIE9G
IFNVQ0ggREFNQUdFLgorICovCisKKyNwcmFnbWEgb25jZQorCisjaW5jbHVkZSAiV2ViR0xFeHRl
bnNpb24uaCIKKworbmFtZXNwYWNlIFdlYkNvcmUgeworCitjbGFzcyBFWFRGbG9hdEJsZW5kIGZp
bmFsIDogcHVibGljIFdlYkdMRXh0ZW5zaW9uIHsKKyAgICBXVEZfTUFLRV9JU09fQUxMT0NBVEVE
KEVYVEZsb2F0QmxlbmQpOworcHVibGljOgorICAgIGV4cGxpY2l0IEVYVEZsb2F0QmxlbmQoV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZSYpOworICAgIHZpcnR1YWwgfkVYVEZsb2F0QmxlbmQoKTsK
KworICAgIEV4dGVuc2lvbk5hbWUgZ2V0TmFtZSgpIGNvbnN0IG92ZXJyaWRlOworCisgICAgc3Rh
dGljIGJvb2wgc3VwcG9ydGVkKGNvbnN0IFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2UmKTsKK307
CisKK30gLy8gbmFtZXNwYWNlIFdlYkNvcmUKZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0
bWwvY2FudmFzL0VYVEZsb2F0QmxlbmQuaWRsIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMv
RVhURmxvYXRCbGVuZC5pZGwKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMC4uMTU5YjBiOGY1MDAyZjBkM2VhMjk3NWFkYWM2
ZmE2MTViYjcyNTNkNwotLS0gL2Rldi9udWxsCisrKyBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2Fu
dmFzL0VYVEZsb2F0QmxlbmQuaWRsCkBAIC0wLDAgKzEsMzEgQEAKKy8qCisqIENvcHlyaWdodCAo
QykgMjAyMCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2ZWQuCisqCisqIFJlZGlzdHJpYnV0
aW9uIGFuZCB1c2UgaW4gc291cmNlIGFuZCBiaW5hcnkgZm9ybXMsIHdpdGggb3Igd2l0aG91dAor
KiBtb2RpZmljYXRpb24sIGFyZSBwZXJtaXR0ZWQgcHJvdmlkZWQgdGhhdCB0aGUgZm9sbG93aW5n
IGNvbmRpdGlvbnMKKyogYXJlIG1ldDoKKyoKKyogMS4gIFJlZGlzdHJpYnV0aW9ucyBvZiBzb3Vy
Y2UgY29kZSBtdXN0IHJldGFpbiB0aGUgYWJvdmUgY29weXJpZ2h0CisqICAgICBub3RpY2UsIHRo
aXMgbGlzdCBvZiBjb25kaXRpb25zIGFuZCB0aGUgZm9sbG93aW5nIGRpc2NsYWltZXIuCisqIDIu
ICBSZWRpc3RyaWJ1dGlvbnMgaW4gYmluYXJ5IGZvcm0gbXVzdCByZXByb2R1Y2UgdGhlIGFib3Zl
IGNvcHlyaWdodAorKiAgICAgbm90aWNlLCB0aGlzIGxpc3Qgb2YgY29uZGl0aW9ucyBhbmQgdGhl
IGZvbGxvd2luZyBkaXNjbGFpbWVyIGluIHRoZQorKiAgICAgZG9jdW1lbnRhdGlvbiBhbmQvb3Ig
b3RoZXIgbWF0ZXJpYWxzIHByb3ZpZGVkIHdpdGggdGhlIGRpc3RyaWJ1dGlvbi4KKyoKKyogVEhJ
UyBTT0ZUV0FSRSBJUyBQUk9WSURFRCBCWSBBUFBMRSBBTkQgSVRTIENPTlRSSUJVVE9SUyAiQVMg
SVMiIEFORCBBTlkKKyogRVhQUkVTUyBPUiBJTVBMSUVEIFdBUlJBTlRJRVMsIElOQ0xVRElORywg
QlVUIE5PVCBMSU1JVEVEIFRPLCBUSEUgSU1QTElFRAorKiBXQVJSQU5USUVTIE9GIE1FUkNIQU5U
QUJJTElUWSBBTkQgRklUTkVTUyBGT1IgQSBQQVJUSUNVTEFSIFBVUlBPU0UgQVJFCisqIERJU0NM
QUlNRUQuIElOIE5PIEVWRU5UIFNIQUxMIEFQUExFIE9SIElUUyBDT05UUklCVVRPUlMgQkUgTElB
QkxFIEZPUiBBTlkKKyogRElSRUNULCBJTkRJUkVDVCwgSU5DSURFTlRBTCwgU1BFQ0lBTCwgRVhF
TVBMQVJZLCBPUiBDT05TRVFVRU5USUFMIERBTUFHRVMKKyogKElOQ0xVRElORywgQlVUIE5PVCBM
SU1JVEVEIFRPLCBQUk9DVVJFTUVOVCBPRiBTVUJTVElUVVRFIEdPT0RTIE9SIFNFUlZJQ0VTOwor
KiBMT1NTIE9GIFVTRSwgREFUQSwgT1IgUFJPRklUUzsgT1IgQlVTSU5FU1MgSU5URVJSVVBUSU9O
KSBIT1dFVkVSIENBVVNFRCBBTkQKKyogT04gQU5ZIFRIRU9SWSBPRiBMSUFCSUxJVFksIFdIRVRI
RVIgSU4gQ09OVFJBQ1QsIFNUUklDVCBMSUFCSUxJVFksIE9SIFRPUlQKKyogKElOQ0xVRElORyBO
RUdMSUdFTkNFIE9SIE9USEVSV0lTRSkgQVJJU0lORyBJTiBBTlkgV0FZIE9VVCBPRiBUSEUgVVNF
IE9GCisqIFRISVMgU09GVFdBUkUsIEVWRU4gSUYgQURWSVNFRCBPRiBUSEUgUE9TU0lCSUxJVFkg
T0YgU1VDSCBEQU1BR0UuCisqLworCitbCisgICAgQ29uZGl0aW9uYWw9V0VCR0wsCisgICAgR2Vu
ZXJhdGVJc1JlYWNoYWJsZT1JbXBsV2ViR0xSZW5kZXJpbmdDb250ZXh0LAorICAgIExlZ2FjeU5v
SW50ZXJmYWNlT2JqZWN0LAorXSBpbnRlcmZhY2UgRVhURmxvYXRCbGVuZCB7Cit9OwpkaWZmIC0t
Z2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0wyUmVuZGVyaW5nQ29udGV4dC5j
cHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNw
cAppbmRleCA0NDVkMDk2ZGEwOGQ2OGM2N2IyODU3MzAwODgwNWY2NDY2NDYwMzAzLi5mMTNmY2Jm
MTJmOTc4MTUxZGYyMzMwMzIyMDFhZTQzZDk2ZTFjYWJjIDEwMDY0NAotLS0gYS9Tb3VyY2UvV2Vi
Q29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcAorKysgYi9Tb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTDJSZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtMzEsNiAr
MzEsNyBAQAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiRVhUQ29sb3JCdWZm
ZXJGbG9hdC5oIgogI2luY2x1ZGUgIkVYVENvbG9yQnVmZmVySGFsZkZsb2F0LmgiCisjaW5jbHVk
ZSAiRVhURmxvYXRCbGVuZC5oIgogI2luY2x1ZGUgIkVYVFRleHR1cmVGaWx0ZXJBbmlzb3Ryb3Bp
Yy5oIgogI2luY2x1ZGUgIkV2ZW50TG9vcC5oIgogI2luY2x1ZGUgIkV4dGVuc2lvbnNHTC5oIgpA
QCAtMjY5MCw2ICsyNjkxLDcgQEAgV2ViR0xFeHRlbnNpb24qIFdlYkdMMlJlbmRlcmluZ0NvbnRl
eHQ6OmdldEV4dGVuc2lvbihjb25zdCBTdHJpbmcmIG5hbWUpCiAgICAgRU5BQkxFX0lGX1JFUVVF
U1RFRChXZWJHTERlYnVnU2hhZGVycywgbV93ZWJnbERlYnVnU2hhZGVycywgIldFQkdMX2RlYnVn
X3NoYWRlcnMiLCBtX2NvbnRleHQtPmdldEV4dGVuc2lvbnMoKS5zdXBwb3J0cygiR0xfQU5HTEVf
dHJhbnNsYXRlZF9zaGFkZXJfc291cmNlIl9zKSk7CiAgICAgRU5BQkxFX0lGX1JFUVVFU1RFRChF
WFRDb2xvckJ1ZmZlckZsb2F0LCBtX2V4dENvbG9yQnVmZmVyRmxvYXQsICJFWFRfY29sb3JfYnVm
ZmVyX2Zsb2F0IiwgRVhUQ29sb3JCdWZmZXJGbG9hdDo6c3VwcG9ydGVkKCp0aGlzKSk7CiAgICAg
RU5BQkxFX0lGX1JFUVVFU1RFRChFWFRDb2xvckJ1ZmZlckhhbGZGbG9hdCwgbV9leHRDb2xvckJ1
ZmZlckhhbGZGbG9hdCwgIkVYVF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCIsIEVYVENvbG9yQnVm
ZmVySGFsZkZsb2F0OjpzdXBwb3J0ZWQoKnRoaXMpKTsKKyAgICBFTkFCTEVfSUZfUkVRVUVTVEVE
KEVYVEZsb2F0QmxlbmQsIG1fZXh0RmxvYXRCbGVuZCwgIkVYVF9mbG9hdF9ibGVuZCIsIEVYVEZs
b2F0QmxlbmQ6OnN1cHBvcnRlZCgqdGhpcykpOwogICAgIHJldHVybiBudWxscHRyOwogfQogCkBA
IC0yNzM2LDYgKzI3MzgsOCBAQCBPcHRpb25hbDxWZWN0b3I8U3RyaW5nPj4gV2ViR0wyUmVuZGVy
aW5nQ29udGV4dDo6Z2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpCiAgICAgICAgIHJlc3VsdC5hcHBl
bmQoIkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiX3MpOwogICAgIGlmIChFWFRDb2xvckJ1ZmZlckhh
bGZGbG9hdDo6c3VwcG9ydGVkKCp0aGlzKSkKICAgICAgICAgcmVzdWx0LmFwcGVuZCgiRVhUX2Nv
bG9yX2J1ZmZlcl9oYWxmX2Zsb2F0Il9zKTsKKyAgICBpZiAoRVhURmxvYXRCbGVuZDo6c3VwcG9y
dGVkKCp0aGlzKSkKKyAgICAgICAgcmVzdWx0LmFwcGVuZCgiRVhUX2Zsb2F0X2JsZW5kIl9zKTsK
IAogICAgIHJldHVybiByZXN1bHQ7CiB9CmRpZmYgLS1naXQgYS9Tb3VyY2UvV2ViQ29yZS9odG1s
L2NhbnZhcy9XZWJHTEV4dGVuc2lvbi5oIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2Vi
R0xFeHRlbnNpb24uaAppbmRleCBkMzM0Y2M4MDI2MjgwODAwYWU4OWYyMTA2YjBiNzdlYmQ5Zjhj
M2FiLi5kMDg2MDM4YzdlOGYzY2Y2OWU3MDlkY2ZlZmU1NWZkZjQ1NzcxY2ExIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTEV4dGVuc2lvbi5oCisrKyBiL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMRXh0ZW5zaW9uLmgKQEAgLTYzLDYgKzYzLDcgQEAg
cHVibGljOgogICAgICAgICBXZWJHTENvbXByZXNzZWRUZXh0dXJlQVNUQ05hbWUsCiAgICAgICAg
IEFOR0xFSW5zdGFuY2VkQXJyYXlzTmFtZSwKICAgICAgICAgRVhUQ29sb3JCdWZmZXJIYWxmRmxv
YXROYW1lLAorICAgICAgICBFWFRGbG9hdEJsZW5kTmFtZSwKICAgICAgICAgV2ViR0xDb2xvckJ1
ZmZlckZsb2F0TmFtZSwKICAgICAgICAgRVhUQ29sb3JCdWZmZXJGbG9hdE5hbWUsCiAgICAgfTsK
ZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29u
dGV4dC5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHQuY3BwCmluZGV4IDk0ZTlhYTJiNTdkMzlhYjY2YzUyOGNmMDI0ZmE1ZDAzZjUxMjJiMzIuLmM2
MjA5YjVlNjVmMjkxNGMwNGY2NTQxMjEzZDk0ZDFlZDk2NjQ1NjQgMTAwNjQ0Ci0tLSBhL1NvdXJj
ZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5nQ29udGV4dC5jcHAKKysrIGIvU291
cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcApAQCAtMzIs
NiArMzIsNyBAQAogI2luY2x1ZGUgIkNhY2hlZEltYWdlLmgiCiAjaW5jbHVkZSAiRVhUQmxlbmRN
aW5NYXguaCIKICNpbmNsdWRlICJFWFRDb2xvckJ1ZmZlckhhbGZGbG9hdC5oIgorI2luY2x1ZGUg
IkVYVEZsb2F0QmxlbmQuaCIKICNpbmNsdWRlICJFWFRGcmFnRGVwdGguaCIKICNpbmNsdWRlICJF
WFRTaGFkZXJUZXh0dXJlTE9ELmgiCiAjaW5jbHVkZSAiRVhUVGV4dHVyZUZpbHRlckFuaXNvdHJv
cGljLmgiCkBAIC0xOTQsNiArMTk1LDcgQEAgV2ViR0xFeHRlbnNpb24qIFdlYkdMUmVuZGVyaW5n
Q29udGV4dDo6Z2V0RXh0ZW5zaW9uKGNvbnN0IFN0cmluZyYgbmFtZSkKICAgICBFTkFCTEVfSUZf
UkVRVUVTVEVEKFdlYkdMRGVidWdSZW5kZXJlckluZm8sIG1fd2ViZ2xEZWJ1Z1JlbmRlcmVySW5m
bywgIldFQkdMX2RlYnVnX3JlbmRlcmVyX2luZm8iLCB0cnVlKTsKICAgICBFTkFCTEVfSUZfUkVR
VUVTVEVEKFdlYkdMRGVidWdTaGFkZXJzLCBtX3dlYmdsRGVidWdTaGFkZXJzLCAiV0VCR0xfZGVi
dWdfc2hhZGVycyIsIG1fY29udGV4dC0+Z2V0RXh0ZW5zaW9ucygpLnN1cHBvcnRzKCJHTF9BTkdM
RV90cmFuc2xhdGVkX3NoYWRlcl9zb3VyY2UiX3MpKTsKICAgICBFTkFCTEVfSUZfUkVRVUVTVEVE
KEVYVENvbG9yQnVmZmVySGFsZkZsb2F0LCBtX2V4dENvbG9yQnVmZmVySGFsZkZsb2F0LCAiRVhU
X2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0IiwgRVhUQ29sb3JCdWZmZXJIYWxmRmxvYXQ6OnN1cHBv
cnRlZCgqdGhpcykpOworICAgIEVOQUJMRV9JRl9SRVFVRVNURUQoRVhURmxvYXRCbGVuZCwgbV9l
eHRGbG9hdEJsZW5kLCAiRVhUX2Zsb2F0X2JsZW5kIiwgRVhURmxvYXRCbGVuZDo6c3VwcG9ydGVk
KCp0aGlzKSk7CiAgICAgRU5BQkxFX0lGX1JFUVVFU1RFRChXZWJHTENvbG9yQnVmZmVyRmxvYXQs
IG1fd2ViZ2xDb2xvckJ1ZmZlckZsb2F0LCAiV0VCR0xfY29sb3JfYnVmZmVyX2Zsb2F0IiwgV2Vi
R0xDb2xvckJ1ZmZlckZsb2F0OjpzdXBwb3J0ZWQoKnRoaXMpKTsKICAgICByZXR1cm4gbnVsbHB0
cjsKIH0KQEAgLTI1OCw2ICsyNjAsOCBAQCBPcHRpb25hbDxWZWN0b3I8U3RyaW5nPj4gV2ViR0xS
ZW5kZXJpbmdDb250ZXh0OjpnZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCkKICAgICByZXN1bHQuYXBw
ZW5kKCJXRUJHTF9kZWJ1Z19yZW5kZXJlcl9pbmZvIl9zKTsKICAgICBpZiAoRVhUQ29sb3JCdWZm
ZXJIYWxmRmxvYXQ6OnN1cHBvcnRlZCgqdGhpcykpCiAgICAgICAgIHJlc3VsdC5hcHBlbmQoIkVY
VF9jb2xvcl9idWZmZXJfaGFsZl9mbG9hdCJfcyk7CisgICAgaWYgKEVYVEZsb2F0QmxlbmQ6OnN1
cHBvcnRlZCgqdGhpcykpCisgICAgICAgIHJlc3VsdC5hcHBlbmQoIkVYVF9mbG9hdF9ibGVuZCJf
cyk7CiAgICAgaWYgKFdlYkdMQ29sb3JCdWZmZXJGbG9hdDo6c3VwcG9ydGVkKCp0aGlzKSkKICAg
ICAgICAgcmVzdWx0LmFwcGVuZCgiV0VCR0xfY29sb3JfYnVmZmVyX2Zsb2F0Il9zKTsKIApkaWZm
IC0tZ2l0IGEvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0
QmFzZS5jcHAgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRl
eHRCYXNlLmNwcAppbmRleCA4MDU0YWQzMzNlOGQxNDRkMTY5MDZjYmVhMGVlOWE4N2FjOTRjZTg2
Li5kOWE4YmRkYWNhYTEyOTliNGM2MDdiNTRjZjliMDZkMDgwZWEwOTU3IDEwMDY0NAotLS0gYS9T
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmNwcAor
KysgYi9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNl
LmNwcApAQCAtMzcsNiArMzcsNyBAQAogI2luY2x1ZGUgIkVYVEJsZW5kTWluTWF4LmgiCiAjaW5j
bHVkZSAiRVhUQ29sb3JCdWZmZXJGbG9hdC5oIgogI2luY2x1ZGUgIkVYVENvbG9yQnVmZmVySGFs
ZkZsb2F0LmgiCisjaW5jbHVkZSAiRVhURmxvYXRCbGVuZC5oIgogI2luY2x1ZGUgIkVYVEZyYWdE
ZXB0aC5oIgogI2luY2x1ZGUgIkVYVFNoYWRlclRleHR1cmVMT0QuaCIKICNpbmNsdWRlICJFWFRU
ZXh0dXJlRmlsdGVyQW5pc290cm9waWMuaCIKQEAgLTM3MzYsNiArMzczNyw3IEBAIGJvb2wgV2Vi
R0xSZW5kZXJpbmdDb250ZXh0QmFzZTo6ZXh0ZW5zaW9uSXNFbmFibGVkKGNvbnN0IFN0cmluZyYg
bmFtZSkKICAgICBDSEVDS19FWFRFTlNJT04obV93ZWJnbERyYXdCdWZmZXJzLCAiV0VCR0xfZHJh
d19idWZmZXJzIik7CiAgICAgQ0hFQ0tfRVhURU5TSU9OKG1fYW5nbGVJbnN0YW5jZWRBcnJheXMs
ICJBTkdMRV9pbnN0YW5jZWRfYXJyYXlzIik7CiAgICAgQ0hFQ0tfRVhURU5TSU9OKG1fZXh0Q29s
b3JCdWZmZXJIYWxmRmxvYXQsICJFWFRfY29sb3JfYnVmZmVyX2hhbGZfZmxvYXQiKTsKKyAgICBD
SEVDS19FWFRFTlNJT04obV9leHRGbG9hdEJsZW5kLCAiRVhUX2Zsb2F0X2JsZW5kIik7CiAgICAg
Q0hFQ0tfRVhURU5TSU9OKG1fd2ViZ2xDb2xvckJ1ZmZlckZsb2F0LCAiV0VCR0xfY29sb3JfYnVm
ZmVyX2Zsb2F0Iik7CiAgICAgQ0hFQ0tfRVhURU5TSU9OKG1fZXh0Q29sb3JCdWZmZXJGbG9hdCwg
IkVYVF9jb2xvcl9idWZmZXJfZmxvYXQiKTsKICAgICByZXR1cm4gZmFsc2U7CkBAIC03ODAyLDYg
Kzc4MDQsNyBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dEJhc2U6Omxvc2VFeHRlbnNpb25z
KExvc3RDb250ZXh0TW9kZSBtb2RlKQogICAgIExPU0VfRVhURU5TSU9OKG1fd2ViZ2xEcmF3QnVm
ZmVycyk7CiAgICAgTE9TRV9FWFRFTlNJT04obV9hbmdsZUluc3RhbmNlZEFycmF5cyk7CiAgICAg
TE9TRV9FWFRFTlNJT04obV9leHRDb2xvckJ1ZmZlckhhbGZGbG9hdCk7CisgICAgTE9TRV9FWFRF
TlNJT04obV9leHRGbG9hdEJsZW5kKTsKICAgICBMT1NFX0VYVEVOU0lPTihtX3dlYmdsQ29sb3JC
dWZmZXJGbG9hdCk7CiAgICAgTE9TRV9FWFRFTlNJT04obV9leHRDb2xvckJ1ZmZlckZsb2F0KTsK
IH0KZGlmZiAtLWdpdCBhL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuaCBiL1NvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdMUmVuZGVyaW5n
Q29udGV4dEJhc2UuaAppbmRleCBmZDgwMWQwYWJhMWYwNjc2ZmZiMWE0NWFlNzg3M2JhZmMxMjUz
MzcxLi4zZTA0NTVmYzg0ODg5M2I5ZTVlOWIwYzc5NjNhNDJhMTEwZDJjNzViIDEwMDY0NAotLS0g
YS9Tb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHRCYXNlLmgK
KysrIGIvU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0QmFz
ZS5oCkBAIC03MSw2ICs3MSw3IEBAIGNsYXNzIEFOR0xFSW5zdGFuY2VkQXJyYXlzOwogY2xhc3Mg
RVhUQmxlbmRNaW5NYXg7CiBjbGFzcyBFWFRDb2xvckJ1ZmZlckZsb2F0OwogY2xhc3MgRVhUQ29s
b3JCdWZmZXJIYWxmRmxvYXQ7CitjbGFzcyBFWFRGbG9hdEJsZW5kOwogY2xhc3MgRVhUVGV4dHVy
ZUZpbHRlckFuaXNvdHJvcGljOwogY2xhc3MgRVhUU2hhZGVyVGV4dHVyZUxPRDsKIGNsYXNzIEVY
VHNSR0I7CkBAIC02OTAsNiArNjkxLDcgQEAgcHJvdGVjdGVkOgogICAgIFJlZlB0cjxXZWJHTERy
YXdCdWZmZXJzPiBtX3dlYmdsRHJhd0J1ZmZlcnM7CiAgICAgUmVmUHRyPEFOR0xFSW5zdGFuY2Vk
QXJyYXlzPiBtX2FuZ2xlSW5zdGFuY2VkQXJyYXlzOwogICAgIFJlZlB0cjxFWFRDb2xvckJ1ZmZl
ckhhbGZGbG9hdD4gbV9leHRDb2xvckJ1ZmZlckhhbGZGbG9hdDsKKyAgICBSZWZQdHI8RVhURmxv
YXRCbGVuZD4gbV9leHRGbG9hdEJsZW5kOwogICAgIFJlZlB0cjxXZWJHTENvbG9yQnVmZmVyRmxv
YXQ+IG1fd2ViZ2xDb2xvckJ1ZmZlckZsb2F0OwogICAgIFJlZlB0cjxFWFRDb2xvckJ1ZmZlckZs
b2F0PiBtX2V4dENvbG9yQnVmZmVyRmxvYXQ7CiAKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL0No
YW5nZUxvZyBiL0xheW91dFRlc3RzL0NoYW5nZUxvZwppbmRleCA2OWE3OTgxZjE2ZTg0ZGI2NTRl
Yjc2YTFkNmJlNzUxYWU3M2QwYjQ0Li5hYzM2ODQwNDY4MGNmODlhM2UwNDcwM2VhOWU4NjQ4YWQ4
NDlhMjRlIDEwMDY0NAotLS0gYS9MYXlvdXRUZXN0cy9DaGFuZ2VMb2cKKysrIGIvTGF5b3V0VGVz
dHMvQ2hhbmdlTG9nCkBAIC0xLDMgKzEsMTQgQEAKKzIwMjAtMDktMjQgIEphbWVzIERhcnBpbmlh
biAgPGpkYXJwaW5pYW5AY2hyb21pdW0ub3JnPgorCisgICAgICAgIFN1cHBvcnQgRVhUX2Zsb2F0
X2JsZW5kCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0y
MTY5NDkKKworICAgICAgICBSZXZpZXdlZCBieSBLZW5uZXRoIFJ1c3NlbGwuCisKKyAgICAgICAg
KiB3ZWJnbC9jb25mb3JtYW5jZS9leHRlbnNpb25zL2V4dC1mbG9hdC1ibGVuZC1leHBlY3RlZC50
eHQ6IEFkZGVkLgorICAgICAgICAqIHdlYmdsL2NvbmZvcm1hbmNlL2V4dGVuc2lvbnMvZXh0LWZs
b2F0LWJsZW5kLmh0bWw6IEFkZGVkLgorICAgICAgICAqIHdlYmdsL3Jlc291cmNlcy8uLi46IEFk
ZGVkIHNvbWUgc3VwcG9ydCBmaWxlcy4KKwogMjAyMC0wOS0yMSAgQ2hyaXMgRHVtZXogIDxjZHVt
ZXpAYXBwbGUuY29tPgogCiAgICAgICAgIFVucmV2aWV3ZWQsIHVuc2tpcCB3ZWJhdWRpby9BbmFs
eXNlci9oYW5kbGUtc2lsZW50LWlucHV0cy5odG1sLgpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMv
d2ViZ2wvY29uZm9ybWFuY2UvZXh0ZW5zaW9ucy9leHQtZmxvYXQtYmxlbmQtZXhwZWN0ZWQudHh0
IGIvTGF5b3V0VGVzdHMvd2ViZ2wvY29uZm9ybWFuY2UvZXh0ZW5zaW9ucy9leHQtZmxvYXQtYmxl
bmQtZXhwZWN0ZWQudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLjMxOWExM2E5YmY5ZTUyYmUwNGQ3MzUwMGVmOTYx
MGY4OWJhOTBlNTEKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJnbC9jb25mb3Jt
YW5jZS9leHRlbnNpb25zL2V4dC1mbG9hdC1ibGVuZC1leHBlY3RlZC50eHQKQEAgLTAsMCArMSw1
IEBACitUaGlzIHRlc3QgcnVucyB0aGUgV2ViR0wgVGVzdCBsaXN0ZWQgYmVsb3cgaW4gYW4gaWZy
YW1lIGFuZCByZXBvcnRzIFBBU1Mgb3IgRkFJTC4KKworVGVzdDogLi4vLi4vcmVzb3VyY2VzL3dl
YmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvZXh0ZW5zaW9ucy9leHQtZmxvYXQtYmxlbmQuaHRt
bAorUEFTUworCmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJnbC9jb25mb3JtYW5jZS9leHRl
bnNpb25zL2V4dC1mbG9hdC1ibGVuZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ2wvY29uZm9ybWFu
Y2UvZXh0ZW5zaW9ucy9leHQtZmxvYXQtYmxlbmQuaHRtbApuZXcgZmlsZSBtb2RlIDEwMDY0NApp
bmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi4xYWIzMjU5MTdk
MTlmM2ZlMTJmMzExMjY5YzRlMDUxOTkxM2Q2YjRlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0
VGVzdHMvd2ViZ2wvY29uZm9ybWFuY2UvZXh0ZW5zaW9ucy9leHQtZmxvYXQtYmxlbmQuaHRtbApA
QCAtMCwwICsxLDE4IEBACis8IS0tIFRoaXMgZmlsZSBpcyBhdXRvLWdlbmVyYXRlZCBieSBnZW5l
cmF0ZS13ZWJnbC10ZXN0cy5weS4gRE8gTk9UIEVESVQgLS0+Cis8IURPQ1RZUEUgaHRtbD4KKzxo
dG1sPgorPGhlYWQ+Cis8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+Cis8dGl0bGU+V2ViR0wgQ29uZm9y
bWFuY2UgVGVzdCBXcmFwcGVyIGZvciBleHQtZmxvYXQtYmxlbmQuaHRtbDwvdGl0bGU+Cis8c2Ny
aXB0IHR5cGU9InRleHQvamF2YXNjcmlwdCIgc3JjPSIuLi8uLi8uLi9yZXNvdXJjZXMvanMtdGVz
dC1wcmUuanMiPjwvc2NyaXB0PgorPHNjcmlwdCB0eXBlPSJ0ZXh0L2phdmFzY3JpcHQiIHNyYz0i
Li4vLi4vcmVzb3VyY2VzL3dlYmtpdC13ZWJnbC10ZXN0LWhhcm5lc3MuanMiPjwvc2NyaXB0Pgor
PC9oZWFkPgorPGJvZHk+Cis8cD5UaGlzIHRlc3QgcnVucyB0aGUgV2ViR0wgVGVzdCBsaXN0ZWQg
YmVsb3cgaW4gYW4gaWZyYW1lIGFuZCByZXBvcnRzIFBBU1Mgb3IgRkFJTC48L3A+CitUZXN0OiA8
YSBocmVmPSIuLi8uLi9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS9leHRl
bnNpb25zL2V4dC1mbG9hdC1ibGVuZC5odG1sIj4uLi8uLi9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9m
aWxlcy9jb25mb3JtYW5jZS9leHRlbnNpb25zL2V4dC1mbG9hdC1ibGVuZC5odG1sPC9hPgorPGRp
diBpZD0icmVzdWx0Ij48L2Rpdj4KKzxkaXYgaWQ9ImlmcmFtZSI+Cis8aWZyYW1lIHNyYz0iLi4v
Li4vcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFuY2UvZXh0ZW5zaW9ucy9leHQt
ZmxvYXQtYmxlbmQuaHRtbCIgd2lkdGg9IjgwMCIgaGVpZ2h0PSI2MDAiPjwvaWZyYW1lPgorPC9k
aXY+Cis8L2JvZHk+Cis8L2h0bWw+CmRpZmYgLS1naXQgYS9MYXlvdXRUZXN0cy93ZWJnbC9yZXNv
dXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9jb25mb3JtYW5jZS9leHRlbnNpb25zL2V4dC1mbG9hdC1i
bGVuZC5odG1sIGIvTGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMv
Y29uZm9ybWFuY2UvZXh0ZW5zaW9ucy9leHQtZmxvYXQtYmxlbmQuaHRtbApuZXcgZmlsZSBtb2Rl
IDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwLi5h
ODI1ZDc4YmVmNmU5Yzg5MTc4NGNkNWEzODE0ZjE1MGQ1MmY5MTFlCi0tLSAvZGV2L251bGwKKysr
IGIvTGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvY29uZm9ybWFu
Y2UvZXh0ZW5zaW9ucy9leHQtZmxvYXQtYmxlbmQuaHRtbApAQCAtMCwwICsxLDk4IEBACis8IURP
Q1RZUEUgaHRtbD4NCis8aHRtbD4NCis8aGVhZD4NCis8bWV0YSBjaGFyc2V0PSJ1dGYtOCI+DQor
PHRpdGxlPldlYkdMIEVYVF9mbG9hdF9ibGVuZCBDb25mb3JtYW5jZSBUZXN0czwvdGl0bGU+DQor
PGxpbmsgcmVsPSJzdHlsZXNoZWV0IiBocmVmPSIuLi8uLi9yZXNvdXJjZXMvanMtdGVzdC1zdHls
ZS5jc3MiLz4NCis8c2NyaXB0IHNyYz0iLi4vLi4vanMvanMtdGVzdC1wcmUuanMiPjwvc2NyaXB0
Pg0KKzxzY3JpcHQgc3JjPSIuLi8uLi9qcy93ZWJnbC10ZXN0LXV0aWxzLmpzIj48L3NjcmlwdD4N
Cis8c2NyaXB0IHNyYz0iLi4vLi4vanMvdGVzdHMvZXh0LWZsb2F0LWJsZW5kLmpzIj48L3Njcmlw
dD4NCis8L2hlYWQ+DQorPGJvZHk+DQorPGRpdiBpZD0iZGVzY3JpcHRpb24iPjwvZGl2Pg0KKzxk
aXYgaWQ9ImNvbnNvbGUiPjwvZGl2Pg0KKzxzY3JpcHQ+DQorInVzZSBzdHJpY3QiOw0KK2Rlc2Ny
aXB0aW9uKCJUaGlzIHRlc3QgdmVyaWZpZXMgdGhlIGZ1bmN0aW9uYWxpdHkgb2YgdGhlIEVYVF9m
bG9hdF9ibGVuZCBleHRlbnNpb24sIGlmIGl0IGlzIGF2YWlsYWJsZS4iKTsNCisNCit2YXIgd3R1
ID0gV2ViR0xUZXN0VXRpbHM7DQordmFyIGNhbnZhcyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlk
KCJjYW52YXMiKTsNCit2YXIgZ2wgPSB3dHUuY3JlYXRlM0RDb250ZXh0KGNhbnZhcyk7DQordmFy
IGV4dCA9IG51bGw7DQorDQorZnVuY3Rpb24gZXh0RmxvYXRCbGVuZFRlc3RzKHZlcnNpb24sIGNv
bmZpZykgew0KKyAgICBkZWJ1ZygiIik7DQorICAgIGRlYnVnKCJUZXN0aW5nIGZsb2F0MzIgYmxl
bmRpbmcgd2l0aG91dCBFWFRfZmxvYXRfYmxlbmQiKTsNCisgICAgdGVzdEV4dEZsb2F0QmxlbmQo
Y29uZmlnLmludGVybmFsRm9ybWF0KTsNCisgICAgdGVzdEV4dEZsb2F0QmxlbmRNUlQodmVyc2lv
biwgY29uZmlnLmRyYXdCdWZmZXJzKTsNCisgICAgdGVzdEV4dEZsb2F0QmxlbmROb25GbG9hdDMy
VHlwZSh2ZXJzaW9uLCBjb25maWcub2VzVGV4dHVyZUhhbGZGbG9hdCk7DQorDQorICAgIGNvbnN0
IGZsb2F0QmxlbmQgPSBnbC5nZXRFeHRlbnNpb24oIkVYVF9mbG9hdF9ibGVuZCIpOw0KKyAgICBp
ZiAoIWZsb2F0QmxlbmQpIHsNCisgICAgICAgIHRlc3RQYXNzZWQoIkVYVF9mbG9hdF9ibGVuZCBp
cyBhbGxvd2VkIHRvIGJlIG1pc3NpbmcuIik7DQorICAgICAgICByZXR1cm47DQorICAgIH0NCisN
CisgICAgZGVidWcoIiIpOw0KKyAgICBkZWJ1ZygiVGVzdGluZyB0aGF0IGZsb2F0MzIgYmxlbmRp
bmcgaXMgYWxsb3dlZCB3aXRoIEVYVF9mbG9hdF9ibGVuZCIpOw0KKyAgICB0ZXN0RXh0RmxvYXRC
bGVuZChjb25maWcuaW50ZXJuYWxGb3JtYXQpOw0KKyAgICB0ZXN0RXh0RmxvYXRCbGVuZE1SVCh2
ZXJzaW9uLCBjb25maWcuZHJhd0J1ZmZlcnMpOw0KKyAgICB0ZXN0RXh0RmxvYXRCbGVuZE5vbkZs
b2F0MzJUeXBlKHZlcnNpb24sIGNvbmZpZy5vZXNUZXh0dXJlSGFsZkZsb2F0KTsNCit9DQorDQor
KGZ1bmN0aW9uKCl7DQorICAgIGlmICh3dHUuZ2V0RGVmYXVsdDNEQ29udGV4dFZlcnNpb24oKSA8
IDIpIHsNCisgICAgICAgIGNvbnN0IG9lc1RleHR1cmVGbG9hdCA9IGdsLmdldEV4dGVuc2lvbigi
T0VTX3RleHR1cmVfZmxvYXQiKTsNCisgICAgICAgIGlmICghb2VzVGV4dHVyZUZsb2F0KSB7DQor
ICAgICAgICAgICAgdGVzdFBhc3NlZCgiT0VTX3RleHR1cmVfZmxvYXQgaXMgYWxsb3dlZCB0byBi
ZSBtaXNzaW5nLiIpOw0KKyAgICAgICAgICAgIHJldHVybjsNCisgICAgICAgIH0NCisNCisgICAg
ICAgIGNvbnN0IGNvbG9yQnVmZmVyRmxvYXQgPSBnbC5nZXRFeHRlbnNpb24oIldFQkdMX2NvbG9y
X2J1ZmZlcl9mbG9hdCIpOw0KKyAgICAgICAgaWYgKCFjb2xvckJ1ZmZlckZsb2F0KSB7DQorICAg
ICAgICAgICAgdGVzdFBhc3NlZCgiV0VCR0xfY29sb3JfYnVmZmVyX2Zsb2F0IGlzIGFsbG93ZWQg
dG8gYmUgbWlzc2luZy4iKTsNCisgICAgICAgICAgICByZXR1cm47DQorICAgICAgICB9DQorDQor
ICAgICAgICBjb25zdCBkcmF3QnVmZmVycyA9IGdsLmdldEV4dGVuc2lvbigiV0VCR0xfZHJhd19i
dWZmZXJzIik7DQorICAgICAgICBpZiAoIWRyYXdCdWZmZXJzKSB7DQorICAgICAgICAgICAgZGVi
dWcoIldFQkdMX2RyYXdfYnVmZmVycyBpcyBhbGxvd2VkIHRvIGJlIG1pc3NpbmcuIE1SVCB0ZXN0
cyB3aWxsIGJlIHNraXBwZWQuIik7DQorICAgICAgICB9DQorDQorICAgICAgICBjb25zdCBvZXNU
ZXh0dXJlSGFsZkZsb2F0ID0gZ2wuZ2V0RXh0ZW5zaW9uKCJPRVNfdGV4dHVyZV9oYWxmX2Zsb2F0
Iik7DQorICAgICAgICBjb25zdCBleHRDb2xvckJ1ZmZlckhhbGZGbG9hdCA9IGdsLmdldEV4dGVu
c2lvbigiRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0Iik7DQorICAgICAgICBjb25zdCB0ZXN0
SGFsZkZsb2F0ID0gISghb2VzVGV4dHVyZUhhbGZGbG9hdCB8fCAhZXh0Q29sb3JCdWZmZXJIYWxm
RmxvYXQpOw0KKyAgICAgICAgaWYgKCF0ZXN0SGFsZkZsb2F0KSB7DQorICAgICAgICAgICAgZGVi
dWcoIk9FU190ZXh0dXJlX2hhbGZfZmxvYXQgb3IgRVhUX2NvbG9yX2J1ZmZlcl9oYWxmX2Zsb2F0
IGlzIGFsbG93ZWQgdG8gYmUgbWlzc2luZy4gTm9uRmxvYXQzMlR5cGUgdGVzdHMgd2lsbCBiZSBz
a2lwcGVkLiIpOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgY29uc3QgaW50ZXJuYWxGb3JtYXQg
PSBnbC5SR0JBOw0KKyAgICAgICAgZXh0RmxvYXRCbGVuZFRlc3RzKDEsIHsNCisgICAgICAgICAg
ICBpbnRlcm5hbEZvcm1hdCwgZHJhd0J1ZmZlcnMsIG9lc1RleHR1cmVIYWxmRmxvYXQNCisgICAg
ICAgIH0pOw0KKyAgICB9IGVsc2Ugew0KKyAgICAgICAgY29uc3QgY29sb3JCdWZmZXJGbG9hdCA9
IGdsLmdldEV4dGVuc2lvbigiRVhUX2NvbG9yX2J1ZmZlcl9mbG9hdCIpOw0KKyAgICAgICAgaWYg
KCFjb2xvckJ1ZmZlckZsb2F0KSB7DQorICAgICAgICAgICAgdGVzdFBhc3NlZCgiRVhUX2NvbG9y
X2J1ZmZlcl9mbG9hdCBpcyBhbGxvd2VkIHRvIGJlIG1pc3NpbmcuIik7DQorICAgICAgICAgICAg
cmV0dXJuOw0KKyAgICAgICAgfQ0KKw0KKyAgICAgICAgY29uc3QgaW50ZXJuYWxGb3JtYXQgPSBn
bC5SR0JBMzJGOw0KKyAgICAgICAgZXh0RmxvYXRCbGVuZFRlc3RzKDIsIHsNCisgICAgICAgICAg
ICBpbnRlcm5hbEZvcm1hdA0KKyAgICAgICAgfSk7DQorICAgIH0NCit9KSgpOw0KKw0KK2RlYnVn
KCIiKTsNCit2YXIgc3VjY2Vzc2Z1bGx5UGFyc2VkID0gdHJ1ZTsNCis8L3NjcmlwdD4NCis8c2Ny
aXB0IHNyYz0iLi4vLi4vanMvanMtdGVzdC1wb3N0LmpzIj48L3NjcmlwdD4NCisNCis8L2JvZHk+
DQorPC9odG1sPg0KKzwhLS0NCitDb3B5cmlnaHQgKGMpIDIwMTkgVGhlIEtocm9ub3MgR3JvdXAg
SW5jLg0KK1VzZSBvZiB0aGlzIHNvdXJjZSBjb2RlIGlzIGdvdmVybmVkIGJ5IGFuIE1JVC1zdHls
ZSBsaWNlbnNlIHRoYXQgY2FuIGJlDQorZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUuDQor
LS0+DQpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsX3Rlc3Rf
ZmlsZXMvanMvanMtdGVzdC1wb3N0LmpzIGIvTGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3dl
YmdsX3Rlc3RfZmlsZXMvanMvanMtdGVzdC1wb3N0LmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmZmODllNTg2ZWJk
YWZjZDE1Y2I0Njg1ZDA3MGRmZDI2ODU5MTY2NjUKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy93ZWJnbC9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9qcy9qcy10ZXN0LXBvc3QuanMK
QEAgLTAsMCArMSwxMiBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxOSBUaGUgS2hyb25vcyBHcm91
cCBJbmMuCitVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBNSVQtc3R5
bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZpbGUuCisq
LworCitzaG91bGRCZVRydWUoInN1Y2Nlc3NmdWxseVBhcnNlZCIpOworX2FkZFNwYW4oJzxiciAv
PjxzcGFuIGNsYXNzPSJwYXNzIj5URVNUIENPTVBMRVRFPC9zcGFuPicpOworaWYgKF9qc1Rlc3RQ
cmVWZXJib3NlTG9nZ2luZykgeworICAgIF9idWZmZXJlZExvZ1RvQ29uc29sZSgnVEVTVCBDT01Q
TEVURScpOworfQorbm90aWZ5RmluaXNoZWRUb0hhcm5lc3MoKQpkaWZmIC0tZ2l0IGEvTGF5b3V0
VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvanMvanMtdGVzdC1wcmUuanMg
Yi9MYXlvdXRUZXN0cy93ZWJnbC9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9qcy9qcy10ZXN0
LXByZS5qcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwLi5iNjIwMmEyNzg5ZGI2ZGJkMDUzYjMzMzM2NjJmZjNkOGVjYTVj
MTRhCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3dlYmds
X3Rlc3RfZmlsZXMvanMvanMtdGVzdC1wcmUuanMKQEAgLTAsMCArMSw3NzYgQEAKKy8qCitDb3B5
cmlnaHQgKGMpIDIwMTkgVGhlIEtocm9ub3MgR3JvdXAgSW5jLgorVXNlIG9mIHRoaXMgc291cmNl
IGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxpY2Vuc2UgdGhhdCBjYW4gYmUKK2Zv
dW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlLgorKi8KKworKGZ1bmN0aW9uKCkgeworICB2YXIg
dGVzdEhhcm5lc3NJbml0aWFsaXplZCA9IGZhbHNlOworCisgIHZhciBpbml0Tm9uS2hyb25vc0Zy
YW1ld29yayA9IGZ1bmN0aW9uKCkgeworICAgIGlmICh0ZXN0SGFybmVzc0luaXRpYWxpemVkKSB7
CisgICAgICByZXR1cm47CisgICAgfQorICAgIHRlc3RIYXJuZXNzSW5pdGlhbGl6ZWQgPSB0cnVl
OworCisgICAgLyogLS0gcGxhZm9ybSBzcGVjaWZpYyBjb2RlIC0tICovCisKKyAgICAvLyBXZWJL
aXQgU3BlY2lmaWMgY29kZS4gQWRkIHlvdXIgY29kZSBoZXJlLgorICAgIGlmICh3aW5kb3cudGVz
dFJ1bm5lciAmJiAhd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICB3aW5kb3cu
bGF5b3V0VGVzdENvbnRyb2xsZXIgPSB3aW5kb3cudGVzdFJ1bm5lcjsKKyAgICB9CisKKyAgICBp
ZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKSB7CisgICAgICB3aW5kb3cubGF5b3V0VGVz
dENvbnRyb2xsZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCJXZWJLaXRXZWJHTEVuYWJsZWQiLCAiMSIp
OworICAgICAgd2luZG93LmxheW91dFRlc3RDb250cm9sbGVyLmR1bXBBc1RleHQoKTsKKyAgICAg
IHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7CisgICAgfQorICAg
IGlmICh3aW5kb3cuaW50ZXJuYWxzKSB7CisgICAgICAvLyBUaGUgV2ViS2l0IHRlc3Rpbmcgc3lz
dGVtIGNvbXBhcmVzIGNvbnNvbGUgb3V0cHV0LgorICAgICAgLy8gQmVjYXVzZSB0aGUgb3V0cHV0
IG9mIHRoZSBXZWJHTCBUZXN0cyBpcyBHUFUgZGVwZW5kZW50CisgICAgICAvLyB3ZSB0dXJuIG9m
ZiBjb25zb2xlIG1lc3NhZ2VzLgorICAgICAgd2luZG93LmNvbnNvbGUubG9nID0gZnVuY3Rpb24o
KSB7IH07CisgICAgICB3aW5kb3cuY29uc29sZS5lcnJvciA9IGZ1bmN0aW9uKCkgeyB9OworICAg
ICAgd2luZG93LmludGVybmFscy5zZXR0aW5ncy5zZXRXZWJHTEVycm9yc1RvQ29uc29sZUVuYWJs
ZWQoZmFsc2UpOworICAgIH0KKworICAgIC8qIC0tIGVuZCBwbGF0Zm9ybSBzcGVjaWZpYyBjb2Rl
IC0tKi8KKyAgfQorCisgIHRoaXMuaW5pdFRlc3RpbmdIYXJuZXNzID0gZnVuY3Rpb24oKSB7Cisg
ICAgaW5pdE5vbktocm9ub3NGcmFtZXdvcmsoKTsKKyAgfQorfSgpKTsKKwordmFyIGdldFVybE9w
dGlvbnMgPSAoZnVuY3Rpb24oKSB7CisgIHZhciBfdXJsT3B0aW9uc1BhcnNlZCA9IGZhbHNlOwor
ICB2YXIgX3VybE9wdGlvbnMgPSB7fTsKKyAgcmV0dXJuIGZ1bmN0aW9uKCkgeworICAgIGlmICgh
X3VybE9wdGlvbnNQYXJzZWQpIHsKKyAgICAgIHZhciBzID0gd2luZG93LmxvY2F0aW9uLmhyZWY7
CisgICAgICB2YXIgcSA9IHMuaW5kZXhPZigiPyIpOworICAgICAgdmFyIGUgPSBzLmluZGV4T2Yo
IiMiKTsKKyAgICAgIGlmIChlIDwgMCkgeworICAgICAgICBlID0gcy5sZW5ndGg7CisgICAgICB9
CisgICAgICB2YXIgcXVlcnkgPSBzLnN1YnN0cmluZyhxICsgMSwgZSk7CisgICAgICB2YXIgcGFp
cnMgPSBxdWVyeS5zcGxpdCgiJiIpOworICAgICAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IHBhaXJz
Lmxlbmd0aDsgKytpaSkgeworICAgICAgICB2YXIga2V5VmFsdWUgPSBwYWlyc1tpaV0uc3BsaXQo
Ij0iKTsKKyAgICAgICAgdmFyIGtleSA9IGtleVZhbHVlWzBdOworICAgICAgICB2YXIgdmFsdWUg
PSBkZWNvZGVVUklDb21wb25lbnQoa2V5VmFsdWVbMV0pOworICAgICAgICBfdXJsT3B0aW9uc1tr
ZXldID0gdmFsdWU7CisgICAgICB9CisgICAgICBfdXJsT3B0aW9uc1BhcnNlZCA9IHRydWU7Cisg
ICAgfQorCisgICAgcmV0dXJuIF91cmxPcHRpb25zOworICB9Cit9KSgpOworCitpZiAodHlwZW9m
IHF1aWV0TW9kZSA9PSAndW5kZWZpbmVkJykgeworICB2YXIgcXVpZXRNb2RlID0gKGZ1bmN0aW9u
KCkgeworICAgIHZhciBfcXVpZXRNb2RlQ2hlY2tlZCA9IGZhbHNlOworICAgIHZhciBfaXNRdWll
dCA9IGZhbHNlOworICAgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICAgIGlmICghX3F1aWV0TW9k
ZUNoZWNrZWQpIHsKKyAgICAgICAgX2lzUXVpZXQgPSAoZ2V0VXJsT3B0aW9ucygpLnF1aWV0ID09
IDEpOworICAgICAgICBfcXVpZXRNb2RlQ2hlY2tlZCA9IHRydWU7CisgICAgICB9CisgICAgICBy
ZXR1cm4gX2lzUXVpZXQ7CisgICAgfQorICB9KSgpOworfQorCitmdW5jdGlvbiBub25LaHJvbm9z
RnJhbWV3b3JrTm90aWZ5RG9uZSgpIHsKKyAgLy8gV2ViS2l0IFNwZWNpZmljIGNvZGUuIEFkZCB5
b3VyIGNvZGUgaGVyZS4KKyAgaWYgKHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlcikgeworICAg
IHdpbmRvdy5sYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7CisgIH0KK30KKworZnVu
Y3Rpb24gcmVwb3J0VGVzdFJlc3VsdHNUb0hhcm5lc3Moc3VjY2VzcywgbXNnKSB7CisgIGlmICh3
aW5kb3cucGFyZW50LndlYmdsVGVzdEhhcm5lc3MpIHsKKyAgICB3aW5kb3cucGFyZW50LndlYmds
VGVzdEhhcm5lc3MucmVwb3J0UmVzdWx0cyh3aW5kb3cubG9jYXRpb24ucGF0aG5hbWUsIHN1Y2Nl
c3MsIG1zZyk7CisgIH0KK30KKworZnVuY3Rpb24gcmVwb3J0U2tpcHBlZFRlc3RSZXN1bHRzVG9I
YXJuZXNzKHN1Y2Nlc3MsIG1zZykgeworICBpZiAod2luZG93LnBhcmVudC53ZWJnbFRlc3RIYXJu
ZXNzKSB7CisgICAgd2luZG93LnBhcmVudC53ZWJnbFRlc3RIYXJuZXNzLnJlcG9ydFJlc3VsdHMo
d2luZG93LmxvY2F0aW9uLnBhdGhuYW1lLCBzdWNjZXNzLCBtc2csIHRydWUpOworICB9Cit9CisK
K2Z1bmN0aW9uIG5vdGlmeUZpbmlzaGVkVG9IYXJuZXNzKCkgeworICBpZiAod2luZG93LnBhcmVu
dC53ZWJnbFRlc3RIYXJuZXNzKSB7CisgICAgd2luZG93LnBhcmVudC53ZWJnbFRlc3RIYXJuZXNz
Lm5vdGlmeUZpbmlzaGVkKHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZSk7CisgIH0KKyAgaWYgKHdp
bmRvdy5ub25LaHJvbm9zRnJhbWV3b3JrTm90aWZ5RG9uZSkgeworICAgIHdpbmRvdy5ub25LaHJv
bm9zRnJhbWV3b3JrTm90aWZ5RG9uZSgpOworICB9Cit9CisKK3ZhciBfYnVmZmVyZWRDb25zb2xl
TG9ncyA9IFtdOworCitmdW5jdGlvbiBfYnVmZmVyZWRMb2dUb0NvbnNvbGUobXNnKQoreworICBp
ZiAoX2J1ZmZlcmVkQ29uc29sZUxvZ3MpIHsKKyAgICBfYnVmZmVyZWRDb25zb2xlTG9ncy5wdXNo
KG1zZyk7CisgIH0gZWxzZSBpZiAod2luZG93LmNvbnNvbGUpIHsKKyAgICB3aW5kb3cuY29uc29s
ZS5sb2cobXNnKTsKKyAgfQorfQorCisvLyBQdWJsaWMgZW50cnkgcG9pbnQgZXhwb3NlZCB0byBt
YW55IG90aGVyIGZpbGVzLgorZnVuY3Rpb24gYnVmZmVyZWRMb2dUb0NvbnNvbGUobXNnKQorewor
ICBfYnVmZmVyZWRMb2dUb0NvbnNvbGUobXNnKTsKK30KKworLy8gQ2FsbGVkIGltcGxpY2l0bHkg
YnkgdGVzdEZhaWxlZCgpLgorZnVuY3Rpb24gX2ZsdXNoQnVmZmVyZWRMb2dzVG9Db25zb2xlKCkK
K3sKKyAgaWYgKF9idWZmZXJlZENvbnNvbGVMb2dzKSB7CisgICAgaWYgKHdpbmRvdy5jb25zb2xl
KSB7CisgICAgICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgX2J1ZmZlcmVkQ29uc29sZUxvZ3MubGVu
Z3RoOyArK2lpKSB7CisgICAgICAgIHdpbmRvdy5jb25zb2xlLmxvZyhfYnVmZmVyZWRDb25zb2xl
TG9nc1tpaV0pOworICAgICAgfQorICAgIH0KKyAgICBfYnVmZmVyZWRDb25zb2xlTG9ncyA9IG51
bGw7CisgIH0KK30KKwordmFyIF9qc1Rlc3RQcmVWZXJib3NlTG9nZ2luZyA9IGZhbHNlOworCitm
dW5jdGlvbiBlbmFibGVKU1Rlc3RQcmVWZXJib3NlTG9nZ2luZygpCit7CisgICAgX2pzVGVzdFBy
ZVZlcmJvc2VMb2dnaW5nID0gdHJ1ZTsKK30KKworZnVuY3Rpb24gZGVzY3JpcHRpb24obXNnKQor
eworICAgIGluaXRUZXN0aW5nSGFybmVzcygpOworICAgIGlmIChtc2cgPT09IHVuZGVmaW5lZCkg
eworICAgICAgbXNnID0gZG9jdW1lbnQudGl0bGU7CisgICAgfQorICAgIC8vIEZvciBNU0lFIDYg
Y29tcGF0aWJpbGl0eQorICAgIHZhciBzcGFuID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3Bh
biIpOworICAgIHNwYW4uaW5uZXJIVE1MID0gJzxwPicgKyBtc2cgKyAnPC9wPjxwPk9uIHN1Y2Nl
c3MsIHlvdSB3aWxsIHNlZSBhIHNlcmllcyBvZiAiPHNwYW4gY2xhc3M9InBhc3MiPlBBU1M8L3Nw
YW4+IiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIjxzcGFuIGNsYXNzPSJwYXNzIj5URVNUIENPTVBM
RVRFPC9zcGFuPiIuPC9wPic7CisgICAgdmFyIGRlc2NyaXB0aW9uID0gZG9jdW1lbnQuZ2V0RWxl
bWVudEJ5SWQoImRlc2NyaXB0aW9uIik7CisgICAgaWYgKGRlc2NyaXB0aW9uLmZpcnN0Q2hpbGQp
CisgICAgICAgIGRlc2NyaXB0aW9uLnJlcGxhY2VDaGlsZChzcGFuLCBkZXNjcmlwdGlvbi5maXJz
dENoaWxkKTsKKyAgICBlbHNlCisgICAgICAgIGRlc2NyaXB0aW9uLmFwcGVuZENoaWxkKHNwYW4p
OworICAgIGlmIChfanNUZXN0UHJlVmVyYm9zZUxvZ2dpbmcpIHsKKyAgICAgICAgX2J1ZmZlcmVk
TG9nVG9Db25zb2xlKG1zZyk7CisgICAgfQorfQorCitmdW5jdGlvbiBfYWRkU3Bhbihjb250ZW50
cykKK3sKKyAgICB2YXIgc3BhbiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNwYW4iKTsKKyAg
ICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY29uc29sZSIpLmFwcGVuZENoaWxkKHNwYW4pOyAv
LyBpbnNlcnQgaXQgZmlyc3Qgc28gWEhUTUwga25vd3MgdGhlIG5hbWVzcGFjZQorICAgIHNwYW4u
aW5uZXJIVE1MID0gY29udGVudHMgKyAnPGJyIC8+JzsKK30KKworZnVuY3Rpb24gZGVidWcobXNn
KQoreworICAgIGlmICghcXVpZXRNb2RlKCkpCisgICAgICBfYWRkU3Bhbihtc2cpOworICAgIGlm
IChfanNUZXN0UHJlVmVyYm9zZUxvZ2dpbmcpIHsKKyAgICAgICAgX2J1ZmZlcmVkTG9nVG9Db25z
b2xlKG1zZyk7CisgICAgfQorfQorCitmdW5jdGlvbiBlc2NhcGVIVE1MKHRleHQpCit7CisgICAg
cmV0dXJuIHRleHQucmVwbGFjZSgvJi9nLCAiJmFtcDsiKS5yZXBsYWNlKC88L2csICImbHQ7Iik7
Cit9CisvKioKKyAqIERlZmluZXMgdGhlIGV4Y2VwdGlvbiB0eXBlIGZvciBhIHRlc3QgZmFpbHVy
ZS4KKyAqIEBjb25zdHJ1Y3RvcgorICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9y
IG1lc3NhZ2UuCisgKi8KK3ZhciBUZXN0RmFpbGVkRXhjZXB0aW9uID0gZnVuY3Rpb24gKG1lc3Nh
Z2UpIHsKKyAgIHRoaXMubWVzc2FnZSA9IG1lc3NhZ2U7CisgICB0aGlzLm5hbWUgPSAiVGVzdEZh
aWxlZEV4Y2VwdGlvbiI7Cit9OworCisvKioKKyAqIEBwYXJhbSAge3N0cmluZz19IG1zZworICov
CitmdW5jdGlvbiB0ZXN0UGFzc2VkKG1zZykgeworICAgIG1zZyA9IG1zZyB8fCAnUGFzc2VkJzsK
KyAgICBpZiAoX2N1cnJlbnRUZXN0TmFtZSkKKyAgICAgIG1zZyA9IF9jdXJyZW50VGVzdE5hbWUg
KyAnOiAnICsgbXNnOworCisgICAgcmVwb3J0VGVzdFJlc3VsdHNUb0hhcm5lc3ModHJ1ZSwgbXNn
KTsKKworICAgIGlmICghcXVpZXRNb2RlKCkpCisgICAgICBfYWRkU3BhbignPHNwYW4+PHNwYW4g
Y2xhc3M9InBhc3MiPlBBU1M8L3NwYW4+ICcgKyBlc2NhcGVIVE1MKG1zZykgKyAnPC9zcGFuPicp
OworICAgIGlmIChfanNUZXN0UHJlVmVyYm9zZUxvZ2dpbmcpIHsKKyAgICAgICAgX2J1ZmZlcmVk
TG9nVG9Db25zb2xlKCdQQVNTICcgKyBtc2cpOworICAgIH0KK30KKworLyoqCisgKiBAcGFyYW0g
IHtzdHJpbmc9fSBtc2cKKyAqLworZnVuY3Rpb24gdGVzdEZhaWxlZChtc2cpIHsKKyAgICBtc2cg
PSBtc2cgfHwgJ0ZhaWxlZCc7CisgICAgaWYgKF9jdXJyZW50VGVzdE5hbWUpCisgICAgICBtc2cg
PSBfY3VycmVudFRlc3ROYW1lICsgJzogJyArIG1zZzsKKworICAgIHJlcG9ydFRlc3RSZXN1bHRz
VG9IYXJuZXNzKGZhbHNlLCBtc2cpOworICAgIF9hZGRTcGFuKCc8c3Bhbj48c3BhbiBjbGFzcz0i
ZmFpbCI+RkFJTDwvc3Bhbj4gJyArIGVzY2FwZUhUTUwobXNnKSArICc8L3NwYW4+Jyk7CisgICAg
X2J1ZmZlcmVkTG9nVG9Db25zb2xlKCdGQUlMICcgKyBtc2cpOworICAgIF9mbHVzaEJ1ZmZlcmVk
TG9nc1RvQ29uc29sZSgpOworfQorCit2YXIgX2N1cnJlbnRUZXN0TmFtZTsKKworLyoqCisgKiBT
ZXRzIHRoZSBjdXJyZW50IHRlc3QgbmFtZSBmb3IgdXNhZ2Ugd2l0aGluIHRlc3RQYXNzZWRPcHRp
b25zL3Rlc3RGYWlsZWRPcHRpb25zLgorICogQHBhcmFtIHtzdHJpbmc9fSBuYW1lIFRoZSBuYW1l
IHRvIHNldCBhcyB0aGUgY3VycmVudCB0ZXN0IG5hbWUuCisgKi8KK2Z1bmN0aW9uIHNldEN1cnJl
bnRUZXN0TmFtZShuYW1lKQoreworICAgIF9jdXJyZW50VGVzdE5hbWUgPSBuYW1lOworfQorCisv
KioKKyAqIEdldHMgdGhlIGN1cnJlbnQgdGVzdCBuYW1lIGluIHVzZSB3aXRoaW4gdGVzdFBhc3Nl
ZE9wdGlvbnMvdGVzdEZhaWxlZE9wdGlvbnMuCisgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBuYW1l
IG9mIHRoZSBjdXJyZW50IHRlc3QuCisgKi8KK2Z1bmN0aW9uIGdldEN1cnJlbnRUZXN0TmFtZSgp
Cit7CisgICAgcmV0dXJuIF9jdXJyZW50VGVzdE5hbWU7Cit9CisKKy8qKgorICogVmFyaWF0aW9u
IG9mIHRoZSB0ZXN0UGFzc2VkIGZ1bmN0aW9uLCB3aXRoIHRoZSBvcHRpb24gdG8gbm90IHNob3cg
KGFuZCB0aHVzIG5vdCBjb3VudCkgdGhlIHRlc3QncyBwYXNzIHJlc3VsdC4KKyAqIEBwYXJhbSB7
c3RyaW5nfSBtc2cgVGhlIG1lc3NhZ2UgdG8gYmUgc2hvd24gaW4gdGhlIHBhc3MgcmVzdWx0Lgor
ICogQHBhcmFtIHtib29sZWFufSBhZGRTcGFuIEluZGljYXRlcyB3aGV0aGVyIHRoZSBtZXNzYWdl
IHdpbGwgYmUgdmlzaWJsZSAodGh1cyBjb3VudGVkIGluIHRoZSByZXN1bHRzKSBvciBub3QuCisg
Ki8KK2Z1bmN0aW9uIHRlc3RQYXNzZWRPcHRpb25zKG1zZywgYWRkU3BhbikKK3sKKyAgICBpZiAo
YWRkU3BhbiAmJiAhcXVpZXRNb2RlKCkpCisgICAgeworICAgICAgICByZXBvcnRUZXN0UmVzdWx0
c1RvSGFybmVzcyh0cnVlLCBfY3VycmVudFRlc3ROYW1lICsgIjogIiArIG1zZyk7CisgICAgICAg
IF9hZGRTcGFuKCc8c3Bhbj48c3BhbiBjbGFzcz0icGFzcyI+UEFTUzwvc3Bhbj4gJyArIGVzY2Fw
ZUhUTUwoX2N1cnJlbnRUZXN0TmFtZSkgKyAiOiAiICsgZXNjYXBlSFRNTChtc2cpICsgJzwvc3Bh
bj4nKTsKKyAgICB9CisgICAgaWYgKF9qc1Rlc3RQcmVWZXJib3NlTG9nZ2luZykgeworICAgICAg
ICBfYnVmZmVyZWRMb2dUb0NvbnNvbGUoJ1BBU1MgJyArIG1zZyk7CisgICAgfQorfQorCisvKioK
KyAqIFJlcG9ydCBza2lwcGVkIHRlc3RzLgorICogQHBhcmFtIHtzdHJpbmd9IG1zZyBUaGUgbWVz
c2FnZSB0byBiZSBzaG93biBpbiB0aGUgc2tpcCByZXN1bHQuCisgKiBAcGFyYW0ge2Jvb2xlYW59
IGFkZFNwYW4gSW5kaWNhdGVzIHdoZXRoZXIgdGhlIG1lc3NhZ2Ugd2lsbCBiZSB2aXNpYmxlICh0
aHVzIGNvdW50ZWQgaW4gdGhlIHJlc3VsdHMpIG9yIG5vdC4KKyAqLworZnVuY3Rpb24gdGVzdFNr
aXBwZWRPcHRpb25zKG1zZywgYWRkU3BhbikKK3sKKyAgICBpZiAoYWRkU3BhbiAmJiAhcXVpZXRN
b2RlKCkpCisgICAgeworICAgICAgICByZXBvcnRTa2lwcGVkVGVzdFJlc3VsdHNUb0hhcm5lc3Mo
dHJ1ZSwgX2N1cnJlbnRUZXN0TmFtZSArICI6ICIgKyBtc2cpOworICAgICAgICBfYWRkU3Bhbign
PHNwYW4+PHNwYW4gY2xhc3M9Indhcm4iPlNLSVA8L3NwYW4+ICcgKyBlc2NhcGVIVE1MKF9jdXJy
ZW50VGVzdE5hbWUpICsgIjogIiArIGVzY2FwZUhUTUwobXNnKSArICc8L3NwYW4+Jyk7CisgICAg
fQorICAgIGlmIChfanNUZXN0UHJlVmVyYm9zZUxvZ2dpbmcpIHsKKyAgICAgICAgX2J1ZmZlcmVk
TG9nVG9Db25zb2xlKCdTS0lQJyArIG1zZyk7CisgICAgfQorfQorCisvKioKKyAqIFZhcmlhdGlv
biBvZiB0aGUgdGVzdEZhaWxlZCBmdW5jdGlvbiwgd2l0aCB0aGUgb3B0aW9uIHRvIHRocm93IGFu
IGV4Y2VwdGlvbiBvciBub3QuCisgKiBAcGFyYW0ge3N0cmluZ30gbXNnIFRoZSBtZXNzYWdlIHRv
IGJlIHNob3duIGluIHRoZSBmYWlsIHJlc3VsdC4KKyAqIEBwYXJhbSB7Ym9vbGVhbn0gZXh0aHJv
dyBJbmRpY2F0ZXMgd2hldGhlciB0aGUgZnVuY3Rpb24gd2lsbCB0aHJvdyBhIFRlc3RGYWlsZWRF
eGNlcHRpb24gb3Igbm90LgorICovCitmdW5jdGlvbiB0ZXN0RmFpbGVkT3B0aW9ucyhtc2csIGV4
dGhyb3cpCit7CisgICAgcmVwb3J0VGVzdFJlc3VsdHNUb0hhcm5lc3MoZmFsc2UsIF9jdXJyZW50
VGVzdE5hbWUgKyAiOiAiICsgbXNnKTsKKyAgICBfYWRkU3BhbignPHNwYW4+PHNwYW4gY2xhc3M9
ImZhaWwiPkZBSUw8L3NwYW4+ICcgKyBlc2NhcGVIVE1MKF9jdXJyZW50VGVzdE5hbWUpICsgIjog
IiArIGVzY2FwZUhUTUwobXNnKSArICc8L3NwYW4+Jyk7CisgICAgX2J1ZmZlcmVkTG9nVG9Db25z
b2xlKCdGQUlMICcgKyBtc2cpOworICAgIF9mbHVzaEJ1ZmZlcmVkTG9nc1RvQ29uc29sZSgpOwor
ICAgIGlmIChleHRocm93KSB7CisgICAgICAgIF9jdXJyZW50VGVzdE5hbWUgPSAiIjsgLy9SZW1l
bWJlcmluZyB0byBzZXQgdGhlIG5hbWUgb2YgY3VycmVudCB0ZXN0Y2FzZSB0byBlbXB0eSBzdHJp
bmcuCisgICAgICAgIHRocm93IG5ldyBUZXN0RmFpbGVkRXhjZXB0aW9uKG1zZyk7CisgICAgfQor
fQorCitmdW5jdGlvbiBhcmVBcnJheXNFcXVhbChfYSwgX2IpCit7CisgICAgdHJ5IHsKKyAgICAg
ICAgaWYgKF9hLmxlbmd0aCAhPT0gX2IubGVuZ3RoKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworICAgICAgICBmb3IgKHZhciBpID0gMDsgaSA8IF9hLmxlbmd0aDsgaSsrKQorICAgICAgICAg
ICAgaWYgKF9hW2ldICE9PSBfYltpXSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7Cisg
ICAgfSBjYXRjaCAoZXgpIHsKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIH0KKyAgICByZXR1
cm4gdHJ1ZTsKK30KKworZnVuY3Rpb24gaXNNaW51c1plcm8obikKK3sKKyAgICAvLyB0aGUgb25s
eSB3YXkgdG8gdGVsbCAwIGZyb20gLTAgaW4gSlMgaXMgdGhlIGZhY3QgdGhhdCAxLy0wIGlzCisg
ICAgLy8gLUluZmluaXR5IGluc3RlYWQgb2YgSW5maW5pdHkKKyAgICByZXR1cm4gbiA9PT0gMCAm
JiAxL24gPCAwOworfQorCitmdW5jdGlvbiBpc1Jlc3VsdENvcnJlY3QoX2FjdHVhbCwgX2V4cGVj
dGVkKQoreworICAgIGlmIChfZXhwZWN0ZWQgPT09IDApCisgICAgICAgIHJldHVybiBfYWN0dWFs
ID09PSBfZXhwZWN0ZWQgJiYgKDEvX2FjdHVhbCkgPT09ICgxL19leHBlY3RlZCk7CisgICAgaWYg
KF9hY3R1YWwgPT09IF9leHBlY3RlZCkKKyAgICAgICAgcmV0dXJuIHRydWU7CisgICAgaWYgKHR5
cGVvZihfZXhwZWN0ZWQpID09ICJudW1iZXIiICYmIGlzTmFOKF9leHBlY3RlZCkpCisgICAgICAg
IHJldHVybiB0eXBlb2YoX2FjdHVhbCkgPT0gIm51bWJlciIgJiYgaXNOYU4oX2FjdHVhbCk7Cisg
ICAgaWYgKE9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChfZXhwZWN0ZWQpID09IE9iamVj
dC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChbXSkpCisgICAgICAgIHJldHVybiBhcmVBcnJheXNF
cXVhbChfYWN0dWFsLCBfZXhwZWN0ZWQpOworICAgIHJldHVybiBmYWxzZTsKK30KKworZnVuY3Rp
b24gc3RyaW5naWZ5KHYpCit7CisgICAgaWYgKHYgPT09IDAgJiYgMS92IDwgMCkKKyAgICAgICAg
cmV0dXJuICItMCI7CisgICAgZWxzZSByZXR1cm4gIiIgKyB2OworfQorCitmdW5jdGlvbiBldmFs
QW5kTG9nKF9hKQoreworICBpZiAodHlwZW9mIF9hICE9ICJzdHJpbmciKQorICAgIGRlYnVnKCJX
QVJOOiB0cnlBbmRMb2coKSBleHBlY3RzIGEgc3RyaW5nIGFyZ3VtZW50Iik7CisKKyAgLy8gTG9n
IGZpcnN0IGluIGNhc2UgdGhpbmdzIGdvIGhvcnJpYmx5IHdyb25nIG9yIHRoaXMgY2F1c2VzIGEg
c3luYyBldmVudC4KKyAgZGVidWcoX2EpOworCisgIHZhciBfYXY7CisgIHRyeSB7CisgICAgIF9h
diA9IGV2YWwoX2EpOworICB9IGNhdGNoIChlKSB7CisgICAgdGVzdEZhaWxlZChfYSArICIgdGhy
ZXcgZXhjZXB0aW9uICIgKyBlKTsKKyAgfQorICByZXR1cm4gX2F2OworfQorCitmdW5jdGlvbiBz
aG91bGRCZVN0cmluZyhldmFsYWJsZSwgZXhwZWN0ZWQpIHsKKyAgICBjb25zdCB2YWwgPSBldmFs
KGV2YWxhYmxlKTsKKyAgICBjb25zdCB0ZXh0ID0gZXZhbGFibGUgKyAiIHNob3VsZCBiZSAiICsg
ZXhwZWN0ZWQgKyAiLiI7CisgICAgaWYgKHZhbCA9PSBleHBlY3RlZCkgeworICAgICAgICB0ZXN0
UGFzc2VkKHRleHQpOworICAgIH0gZWxzZSB7CisgICAgICAgIHRlc3RGYWlsZWQodGV4dCArICIg
KHdhcyAiICsgdmFsICsgIikiKTsKKyAgICB9Cit9CisKK2Z1bmN0aW9uIHNob3VsZEJlKF9hLCBf
YiwgcXVpZXQpCit7CisgICAgaWYgKHR5cGVvZiBfYSAhPSAic3RyaW5nIiB8fCB0eXBlb2YgX2Ig
IT0gInN0cmluZyIpCisgICAgICAgIGRlYnVnKCJXQVJOOiBzaG91bGRCZSgpIGV4cGVjdHMgc3Ry
aW5nIGFyZ3VtZW50cyIpOworICAgIHZhciBleGNlcHRpb247CisgICAgdmFyIF9hdjsKKyAgICB0
cnkgeworICAgICAgICBfYXYgPSBldmFsKF9hKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAg
IGV4Y2VwdGlvbiA9IGU7CisgICAgfQorICAgIHZhciBfYnYgPSBldmFsKF9iKTsKKworICAgIGlm
IChleGNlcHRpb24pCisgICAgICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSAiICsgX2J2
ICsgIi4gVGhyZXcgZXhjZXB0aW9uICIgKyBleGNlcHRpb24pOworICAgIGVsc2UgaWYgKGlzUmVz
dWx0Q29ycmVjdChfYXYsIF9idikpIHsKKyAgICAgICAgaWYgKCFxdWlldCkgeworICAgICAgICAg
ICAgdGVzdFBhc3NlZChfYSArICIgaXMgIiArIF9iKTsKKyAgICAgICAgfQorICAgIH0gZWxzZSBp
ZiAodHlwZW9mKF9hdikgPT0gdHlwZW9mKF9idikpCisgICAgICAgIHRlc3RGYWlsZWQoX2EgKyAi
IHNob3VsZCBiZSAiICsgX2J2ICsgIi4gV2FzICIgKyBzdHJpbmdpZnkoX2F2KSArICIuIik7Cisg
ICAgZWxzZQorICAgICAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQgYmUgIiArIF9idiArICIg
KG9mIHR5cGUgIiArIHR5cGVvZiBfYnYgKyAiKS4gV2FzICIgKyBfYXYgKyAiIChvZiB0eXBlICIg
KyB0eXBlb2YgX2F2ICsgIikuIik7Cit9CisKK2Z1bmN0aW9uIHNob3VsZE5vdEJlKF9hLCBfYiwg
cXVpZXQpCit7CisgICAgaWYgKHR5cGVvZiBfYSAhPSAic3RyaW5nIiB8fCB0eXBlb2YgX2IgIT0g
InN0cmluZyIpCisgICAgICAgIGRlYnVnKCJXQVJOOiBzaG91bGROb3RCZSgpIGV4cGVjdHMgc3Ry
aW5nIGFyZ3VtZW50cyIpOworICAgIHZhciBleGNlcHRpb247CisgICAgdmFyIF9hdjsKKyAgICB0
cnkgeworICAgICAgICBfYXYgPSBldmFsKF9hKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAg
IGV4Y2VwdGlvbiA9IGU7CisgICAgfQorICAgIHZhciBfYnYgPSBldmFsKF9iKTsKKworICAgIGlm
IChleGNlcHRpb24pCisgICAgICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBub3QgYmUgIiAr
IF9idiArICIuIFRocmV3IGV4Y2VwdGlvbiAiICsgZXhjZXB0aW9uKTsKKyAgICBlbHNlIGlmICgh
aXNSZXN1bHRDb3JyZWN0KF9hdiwgX2J2KSkgeworICAgICAgICBpZiAoIXF1aWV0KSB7CisgICAg
ICAgICAgICB0ZXN0UGFzc2VkKF9hICsgIiBpcyBub3QgIiArIF9iKTsKKyAgICAgICAgfQorICAg
IH0gZWxzZQorICAgICAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQgbm90IGJlICIgKyBfYnYg
KyAiLiIpOworfQorCitmdW5jdGlvbiBzaG91bGRCZVRydWUoX2EpIHsgc2hvdWxkQmUoX2EsICJ0
cnVlIik7IH0KK2Z1bmN0aW9uIHNob3VsZEJlRmFsc2UoX2EpIHsgc2hvdWxkQmUoX2EsICJmYWxz
ZSIpOyB9CitmdW5jdGlvbiBzaG91bGRCZU5hTihfYSkgeyBzaG91bGRCZShfYSwgIk5hTiIpOyB9
CitmdW5jdGlvbiBzaG91bGRCZU51bGwoX2EpIHsgc2hvdWxkQmUoX2EsICJudWxsIik7IH0KKwor
ZnVuY3Rpb24gc2hvdWxkQmVFcXVhbFRvU3RyaW5nKGEsIGIpCit7CisgIHZhciB1bmV2YWxlZFN0
cmluZyA9ICciJyArIGIucmVwbGFjZSgvIi9nLCAiXCIiKSArICciJzsKKyAgc2hvdWxkQmUoYSwg
dW5ldmFsZWRTdHJpbmcpOworfQorCitmdW5jdGlvbiBzaG91bGRFdmFsdWF0ZVRvKGFjdHVhbCwg
ZXhwZWN0ZWQpIHsKKyAgLy8gQSBnZW5lcmFsLXB1cnBvc2UgY29tcGFyYXRvci4gICdhY3R1YWwn
IHNob3VsZCBiZSBhIHN0cmluZyB0byBiZQorICAvLyBldmFsdWF0ZWQsIGFzIGZvciBzaG91bGRC
ZSgpLiAnZXhwZWN0ZWQnIG1heSBiZSBhbnkgdHlwZSBhbmQgd2lsbCBiZQorICAvLyB1c2VkIHdp
dGhvdXQgYmVpbmcgZXZhbCdlZC4KKyAgaWYgKGV4cGVjdGVkID09IG51bGwpIHsKKyAgICAvLyBE
byB0aGlzIGJlZm9yZSB0aGUgb2JqZWN0IHRlc3QsIHNpbmNlIG51bGwgaXMgb2YgdHlwZSAnb2Jq
ZWN0Jy4KKyAgICBzaG91bGRCZU51bGwoYWN0dWFsKTsKKyAgfSBlbHNlIGlmICh0eXBlb2YgZXhw
ZWN0ZWQgPT0gInVuZGVmaW5lZCIpIHsKKyAgICBzaG91bGRCZVVuZGVmaW5lZChhY3R1YWwpOwor
ICB9IGVsc2UgaWYgKHR5cGVvZiBleHBlY3RlZCA9PSAiZnVuY3Rpb24iKSB7CisgICAgLy8gQWxs
IHRoaXMgZnVzcyBpcyB0byBhdm9pZCB0aGUgc3RyaW5nLWFyZyB3YXJuaW5nIGZyb20gc2hvdWxk
QmUoKS4KKyAgICB0cnkgeworICAgICAgdmFyIGFjdHVhbFZhbHVlID0gZXZhbChhY3R1YWwpOwor
ICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgIHRlc3RGYWlsZWQoIkV2YWx1YXRpbmcgIiArIGFjdHVh
bCArICI6IFRocmV3IGV4Y2VwdGlvbiAiICsgZSk7CisgICAgICByZXR1cm47CisgICAgfQorICAg
IHNob3VsZEJlKCInIiArIGFjdHVhbFZhbHVlLnRvU3RyaW5nKCkucmVwbGFjZSgvXG4vZywgIiIp
ICsgIiciLAorICAgICAgICAgICAgICInIiArIGV4cGVjdGVkLnRvU3RyaW5nKCkucmVwbGFjZSgv
XG4vZywgIiIpICsgIiciKTsKKyAgfSBlbHNlIGlmICh0eXBlb2YgZXhwZWN0ZWQgPT0gIm9iamVj
dCIpIHsKKyAgICBzaG91bGRCZVRydWUoYWN0dWFsICsgIiA9PSAnIiArIGV4cGVjdGVkICsgIici
KTsKKyAgfSBlbHNlIGlmICh0eXBlb2YgZXhwZWN0ZWQgPT0gInN0cmluZyIpIHsKKyAgICBzaG91
bGRCZShhY3R1YWwsIGV4cGVjdGVkKTsKKyAgfSBlbHNlIGlmICh0eXBlb2YgZXhwZWN0ZWQgPT0g
ImJvb2xlYW4iKSB7CisgICAgc2hvdWxkQmUoInR5cGVvZiAiICsgYWN0dWFsLCAiJ2Jvb2xlYW4n
Iik7CisgICAgaWYgKGV4cGVjdGVkKQorICAgICAgc2hvdWxkQmVUcnVlKGFjdHVhbCk7CisgICAg
ZWxzZQorICAgICAgc2hvdWxkQmVGYWxzZShhY3R1YWwpOworICB9IGVsc2UgaWYgKHR5cGVvZiBl
eHBlY3RlZCA9PSAibnVtYmVyIikgeworICAgIHNob3VsZEJlKGFjdHVhbCwgc3RyaW5naWZ5KGV4
cGVjdGVkKSk7CisgIH0gZWxzZSB7CisgICAgZGVidWcoZXhwZWN0ZWQgKyAiIGlzIHVua25vd24g
dHlwZSAiICsgdHlwZW9mIGV4cGVjdGVkKTsKKyAgICBzaG91bGRCZVRydWUoYWN0dWFsLCAiJyIg
ICtleHBlY3RlZC50b1N0cmluZygpICsgIiciKTsKKyAgfQorfQorCitmdW5jdGlvbiBzaG91bGRC
ZU5vblplcm8oX2EpCit7CisgIHZhciBleGNlcHRpb247CisgIHZhciBfYXY7CisgIHRyeSB7Cisg
ICAgIF9hdiA9IGV2YWwoX2EpOworICB9IGNhdGNoIChlKSB7CisgICAgIGV4Y2VwdGlvbiA9IGU7
CisgIH0KKworICBpZiAoZXhjZXB0aW9uKQorICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBi
ZSBub24temVyby4gVGhyZXcgZXhjZXB0aW9uICIgKyBleGNlcHRpb24pOworICBlbHNlIGlmIChf
YXYgIT0gMCkKKyAgICB0ZXN0UGFzc2VkKF9hICsgIiBpcyBub24temVyby4iKTsKKyAgZWxzZQor
ICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSBub24temVyby4gV2FzICIgKyBfYXYpOwor
fQorCitmdW5jdGlvbiBzaG91bGRCZU5vbk51bGwoX2EpCit7CisgIHZhciBleGNlcHRpb247Cisg
IHZhciBfYXY7CisgIHRyeSB7CisgICAgIF9hdiA9IGV2YWwoX2EpOworICB9IGNhdGNoIChlKSB7
CisgICAgIGV4Y2VwdGlvbiA9IGU7CisgIH0KKworICBpZiAoZXhjZXB0aW9uKQorICAgIHRlc3RG
YWlsZWQoX2EgKyAiIHNob3VsZCBiZSBub24tbnVsbC4gVGhyZXcgZXhjZXB0aW9uICIgKyBleGNl
cHRpb24pOworICBlbHNlIGlmIChfYXYgIT0gbnVsbCkKKyAgICB0ZXN0UGFzc2VkKF9hICsgIiBp
cyBub24tbnVsbC4iKTsKKyAgZWxzZQorICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSBu
b24tbnVsbC4gV2FzICIgKyBfYXYpOworfQorCitmdW5jdGlvbiBzaG91bGRCZVVuZGVmaW5lZChf
YSkKK3sKKyAgdmFyIGV4Y2VwdGlvbjsKKyAgdmFyIF9hdjsKKyAgdHJ5IHsKKyAgICAgX2F2ID0g
ZXZhbChfYSk7CisgIH0gY2F0Y2ggKGUpIHsKKyAgICAgZXhjZXB0aW9uID0gZTsKKyAgfQorCisg
IGlmIChleGNlcHRpb24pCisgICAgdGVzdEZhaWxlZChfYSArICIgc2hvdWxkIGJlIHVuZGVmaW5l
ZC4gVGhyZXcgZXhjZXB0aW9uICIgKyBleGNlcHRpb24pOworICBlbHNlIGlmICh0eXBlb2YgX2F2
ID09ICJ1bmRlZmluZWQiKQorICAgIHRlc3RQYXNzZWQoX2EgKyAiIGlzIHVuZGVmaW5lZC4iKTsK
KyAgZWxzZQorICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSB1bmRlZmluZWQuIFdhcyAi
ICsgX2F2KTsKK30KKworZnVuY3Rpb24gc2hvdWxkQmVEZWZpbmVkKF9hKQoreworICB2YXIgZXhj
ZXB0aW9uOworICB2YXIgX2F2OworICB0cnkgeworICAgICBfYXYgPSBldmFsKF9hKTsKKyAgfSBj
YXRjaCAoZSkgeworICAgICBleGNlcHRpb24gPSBlOworICB9CisKKyAgaWYgKGV4Y2VwdGlvbikK
KyAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQgYmUgZGVmaW5lZC4gVGhyZXcgZXhjZXB0aW9u
ICIgKyBleGNlcHRpb24pOworICBlbHNlIGlmIChfYXYgIT09IHVuZGVmaW5lZCkKKyAgICB0ZXN0
UGFzc2VkKF9hICsgIiBpcyBkZWZpbmVkLiIpOworICBlbHNlCisgICAgdGVzdEZhaWxlZChfYSAr
ICIgc2hvdWxkIGJlIGRlZmluZWQuIFdhcyAiICsgX2F2KTsKK30KKworZnVuY3Rpb24gc2hvdWxk
QmVMZXNzVGhhbk9yRXF1YWwoX2EsIF9iKSB7CisgICAgaWYgKHR5cGVvZiBfYSAhPSAic3RyaW5n
IiB8fCB0eXBlb2YgX2IgIT0gInN0cmluZyIpCisgICAgICAgIGRlYnVnKCJXQVJOOiBzaG91bGRC
ZUxlc3NUaGFuT3JFcXVhbCBleHBlY3RzIHN0cmluZyBhcmd1bWVudHMiKTsKKworICAgIHZhciBl
eGNlcHRpb247CisgICAgdmFyIF9hdjsKKyAgICB0cnkgeworICAgICAgICBfYXYgPSBldmFsKF9h
KTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGV4Y2VwdGlvbiA9IGU7CisgICAgfQorICAg
IHZhciBfYnYgPSBldmFsKF9iKTsKKworICAgIGlmIChleGNlcHRpb24pCisgICAgICAgIHRlc3RG
YWlsZWQoX2EgKyAiIHNob3VsZCBiZSA8PSAiICsgX2IgKyAiLiBUaHJldyBleGNlcHRpb24gIiAr
IGV4Y2VwdGlvbik7CisgICAgZWxzZSBpZiAodHlwZW9mIF9hdiA9PSAidW5kZWZpbmVkIiB8fCBf
YXYgPiBfYnYpCisgICAgICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCBiZSA+PSAiICsgX2Ig
KyAiLiBXYXMgIiArIF9hdiArICIgKG9mIHR5cGUgIiArIHR5cGVvZiBfYXYgKyAiKS4iKTsKKyAg
ICBlbHNlCisgICAgICAgIHRlc3RQYXNzZWQoX2EgKyAiIGlzIDw9ICIgKyBfYik7Cit9CisKK2Z1
bmN0aW9uIHNob3VsZEJlR3JlYXRlclRoYW5PckVxdWFsKF9hLCBfYikgeworICAgIGlmICh0eXBl
b2YgX2EgIT0gInN0cmluZyIgfHwgdHlwZW9mIF9iICE9ICJzdHJpbmciKQorICAgICAgICBkZWJ1
ZygiV0FSTjogc2hvdWxkQmVHcmVhdGVyVGhhbk9yRXF1YWwgZXhwZWN0cyBzdHJpbmcgYXJndW1l
bnRzIik7CisKKyAgICB2YXIgZXhjZXB0aW9uOworICAgIHZhciBfYXY7CisgICAgdHJ5IHsKKyAg
ICAgICAgX2F2ID0gZXZhbChfYSk7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBleGNlcHRp
b24gPSBlOworICAgIH0KKyAgICB2YXIgX2J2ID0gZXZhbChfYik7CisKKyAgICBpZiAoZXhjZXB0
aW9uKQorICAgICAgICB0ZXN0RmFpbGVkKF9hICsgIiBzaG91bGQgYmUgPj0gIiArIF9iICsgIi4g
VGhyZXcgZXhjZXB0aW9uICIgKyBleGNlcHRpb24pOworICAgIGVsc2UgaWYgKHR5cGVvZiBfYXYg
PT0gInVuZGVmaW5lZCIgfHwgX2F2IDwgX2J2KQorICAgICAgICB0ZXN0RmFpbGVkKF9hICsgIiBz
aG91bGQgYmUgPj0gIiArIF9iICsgIi4gV2FzICIgKyBfYXYgKyAiIChvZiB0eXBlICIgKyB0eXBl
b2YgX2F2ICsgIikuIik7CisgICAgZWxzZQorICAgICAgICB0ZXN0UGFzc2VkKF9hICsgIiBpcyA+
PSAiICsgX2IpOworfQorCitmdW5jdGlvbiBleHBlY3RUcnVlKHYsIG1zZykgeworICBpZiAodikg
eworICAgIHRlc3RQYXNzZWQobXNnKTsKKyAgfSBlbHNlIHsKKyAgICB0ZXN0RmFpbGVkKG1zZyk7
CisgIH0KK30KKworZnVuY3Rpb24gbWF4QXJyYXlEaWZmKGEsIGIpIHsKKyAgICBpZiAoYS5sZW5n
dGggIT0gYi5sZW5ndGgpCisgICAgICAgIHRocm93IG5ldyBFcnJvcihgYSBhbmQgYiBoYXZlIGRp
ZmZlcmVudCBsZW5ndGhzOiAke2EubGVuZ3RofSB2cyAke2IubGVuZ3RofWApOworCisgICAgbGV0
IGRpZmYgPSAwOworICAgIGZvciAoY29uc3QgaSBpbiBhKSB7CisgICAgICAgIGRpZmYgPSBNYXRo
Lm1heChkaWZmLCBNYXRoLmFicyhhW2ldIC0gYltpXSkpOworICAgIH0KKyAgICByZXR1cm4gZGlm
ZjsKK30KKworZnVuY3Rpb24gZXhwZWN0QXJyYXkod2FzLCBleHBlY3RlZCwgbWF4RGlmZj0wKSB7
CisgICAgY29uc3QgZGlmZiA9IG1heEFycmF5RGlmZihleHBlY3RlZCwgd2FzKTsKKyAgICBsZXQg
c3RyID0gYEV4cGVjdGVkIFske2V4cGVjdGVkLnRvU3RyaW5nKCl9XWA7CisgICAgbGV0IGZuID0g
dGVzdFBhc3NlZDsKKyAgICBpZiAobWF4RGlmZikgeworICAgICAgICBzdHIgKz0gJyArLy0gJyAr
IG1heERpZmY7CisgICAgfQorICAgIGlmIChkaWZmID4gbWF4RGlmZikgeworICAgICAgICBmbiA9
IHRlc3RGYWlsZWQ7CisgICAgICAgIHN0ciArPSBgLCB3YXMgWyR7d2FzLnRvU3RyaW5nKCl9XWA7
CisgICAgfQorICAgIGZuKHN0cik7Cit9CisKK2Z1bmN0aW9uIHNob3VsZFRocm93KF9hLCBfZSkK
K3sKKyAgdmFyIGV4Y2VwdGlvbjsKKyAgdmFyIF9hdjsKKyAgdHJ5IHsKKyAgICAgX2F2ID0gZXZh
bChfYSk7CisgIH0gY2F0Y2ggKGUpIHsKKyAgICAgZXhjZXB0aW9uID0gZTsKKyAgfQorCisgIHZh
ciBfZXY7CisgIGlmIChfZSkKKyAgICAgIF9ldiA9ICBldmFsKF9lKTsKKworICBpZiAoZXhjZXB0
aW9uKSB7CisgICAgaWYgKHR5cGVvZiBfZSA9PSAidW5kZWZpbmVkIiB8fCBleGNlcHRpb24gPT0g
X2V2KQorICAgICAgdGVzdFBhc3NlZChfYSArICIgdGhyZXcgZXhjZXB0aW9uICIgKyBleGNlcHRp
b24gKyAiLiIpOworICAgIGVsc2UKKyAgICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCB0aHJv
dyAiICsgKHR5cGVvZiBfZSA9PSAidW5kZWZpbmVkIiA/ICJhbiBleGNlcHRpb24iIDogX2V2KSAr
ICIuIFRocmV3IGV4Y2VwdGlvbiAiICsgZXhjZXB0aW9uICsgIi4iKTsKKyAgfSBlbHNlIGlmICh0
eXBlb2YgX2F2ID09ICJ1bmRlZmluZWQiKQorICAgIHRlc3RGYWlsZWQoX2EgKyAiIHNob3VsZCB0
aHJvdyAiICsgKHR5cGVvZiBfZSA9PSAidW5kZWZpbmVkIiA/ICJhbiBleGNlcHRpb24iIDogX2V2
KSArICIuIFdhcyB1bmRlZmluZWQuIik7CisgIGVsc2UKKyAgICB0ZXN0RmFpbGVkKF9hICsgIiBz
aG91bGQgdGhyb3cgIiArICh0eXBlb2YgX2UgPT0gInVuZGVmaW5lZCIgPyAiYW4gZXhjZXB0aW9u
IiA6IF9ldikgKyAiLiBXYXMgIiArIF9hdiArICIuIik7Cit9CisKK2Z1bmN0aW9uIHNob3VsZE5v
dFRocm93KGV2YWxTdHIsIGRlc2MpIHsKKyAgZGVzYyA9IGRlc2MgfHwgYFxgJHtldmFsU3RyfVxg
YDsKKyAgdHJ5IHsKKyAgICBldmFsKGV2YWxTdHIpOworICAgIHRlc3RQYXNzZWQoYCR7ZGVzY30g
c2hvdWxkIG5vdCB0aHJvdy5gKTsKKyAgfSBjYXRjaCAoZSkgeworICAgIHRlc3RGYWlsZWQoYCR7
ZGVzY30gc2hvdWxkIG5vdCB0aHJvdywgYnV0IHRocmV3IGV4Y2VwdGlvbiAke2V9LmApOworICB9
Cit9CisKKworZnVuY3Rpb24gc2hvdWxkQmVUeXBlKF9hLCBfdHlwZSkgeworICAgIHZhciBleGNl
cHRpb247CisgICAgdmFyIF9hdjsKKyAgICB0cnkgeworICAgICAgICBfYXYgPSBldmFsKF9hKTsK
KyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGV4Y2VwdGlvbiA9IGU7CisgICAgfQorCisgICAg
dmFyIF90eXBldiA9IGV2YWwoX3R5cGUpOworCisgICAgaWYoX3R5cGV2ID09PSBOdW1iZXIpewor
ICAgICAgICBpZihfYXYgaW5zdGFuY2VvZiBOdW1iZXIpeworICAgICAgICAgICAgdGVzdFBhc3Nl
ZChfYSArICIgaXMgYW4gaW5zdGFuY2Ugb2YgTnVtYmVyIik7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZSBpZih0eXBlb2YoX2F2KSA9PT0gJ251bWJlcicpeworICAgICAgICAgICAgdGVzdFBhc3Nl
ZChfYSArICIgaXMgYW4gaW5zdGFuY2Ugb2YgTnVtYmVyIik7CisgICAgICAgIH0KKyAgICAgICAg
ZWxzZXsKKyAgICAgICAgICAgIHRlc3RGYWlsZWQoX2EgKyAiIGlzIG5vdCBhbiBpbnN0YW5jZSBv
ZiBOdW1iZXIiKTsKKyAgICAgICAgfQorICAgIH0KKyAgICBlbHNlIGlmIChfYXYgaW5zdGFuY2Vv
ZiBfdHlwZXYpIHsKKyAgICAgICAgdGVzdFBhc3NlZChfYSArICIgaXMgYW4gaW5zdGFuY2Ugb2Yg
IiArIF90eXBlKTsKKyAgICB9IGVsc2UgeworICAgICAgICB0ZXN0RmFpbGVkKF9hICsgIiBpcyBu
b3QgYW4gaW5zdGFuY2Ugb2YgIiArIF90eXBlKTsKKyAgICB9Cit9CisKKy8qKgorICogU2hvd3Mg
YSBtZXNzYWdlIGluIGNhc2UgZXhwcmVzc2lvbiB0ZXN0IGZhaWxzLgorICogQHBhcmFtIHtib29s
ZWFufSBleHAKKyAqIEBwYXJhbSB7c3RyYWluZ30gbWVzc2FnZQorICovCitmdW5jdGlvbiBjaGVj
a01lc3NhZ2UoZXhwLCBtZXNzYWdlKSB7CisgICAgaWYgKCAhZXhwICkKKyAgICAgICAgX2FkZFNw
YW4oJzxzcGFuPjxzcGFuIGNsYXNzPSJ3YXJuIj5XQVJOSU5HPC9zcGFuPiAnICsgZXNjYXBlSFRN
TChfY3VycmVudFRlc3ROYW1lKSArICI6ICIgKyBlc2NhcGVIVE1MKG1lc3NhZ2UpICsgJzwvc3Bh
bj4nKTsKK30KKworZnVuY3Rpb24gYXNzZXJ0TXNnKGFzc2VydGlvbiwgbXNnKSB7CisgICAgaWYg
KGFzc2VydGlvbikgeworICAgICAgICB0ZXN0UGFzc2VkKG1zZyk7CisgICAgfSBlbHNlIHsKKyAg
ICAgICAgdGVzdEZhaWxlZChtc2cpOworICAgIH0KK30KKworLyoqCisgKiBWYXJpYXRpb24gb2Yg
dGhlIGFzc2VydE1zZyBmdW5jdGlvbiwgd2l0aCB0aGUgb3B0aW9uIHRvIG5vdCBzaG93IChhbmQg
dGh1cyBub3QgY291bnQpIHRoZSB0ZXN0J3MgcGFzcyByZXN1bHQsCisgKiBhbmQgdGhyb3cgb3Ig
bm90IGEgVGVzdEZhaWxlZEV4Y2VwdGlvbiBpbiBjYXNlIG9mIGZhaWx1cmUuCisgKiBAcGFyYW0g
e2Jvb2xlYW59IGFzc2VydGlvbiBJZiB0aGlzIGlzIHRydWUsIG1lYW5zIHN1Y2Nlc3MsIGVsc2Ug
ZmFpbHVyZS4KKyAqIEBwYXJhbSB7P3N0cmluZ30gbXNnIFRoZSBtZXNzYWdlIHRvIGJlIHNob3du
IGluIHRoZSByZXN1bHQuCisgKiBAcGFyYW0ge2Jvb2xlYW59IHZlcmJvc2UgSW4gY2FzZSBvZiBz
dWNjZXNzLCBkZXRlcm1pbmVzIGlmIHRoZSB0ZXN0IHdpbGwgc2hvdyBpdCdzIHJlc3VsdCBhbmQg
Y291bnQgaW4gdGhlIHJlc3VsdHMuCisgKiBAcGFyYW0ge2Jvb2xlYW59IGV4dGhyb3cgSW4gY2Fz
ZSBvZiBmYWlsdXJlLCBkZXRlcm1pbmVzIGlmIHRoZSBmdW5jdGlvbiB3aWxsIHRocm93IGEgVGVz
dEZhaWxlZEV4Y2VwdGlvbi4KKyAqLworZnVuY3Rpb24gYXNzZXJ0TXNnT3B0aW9ucyhhc3NlcnRp
b24sIG1zZywgdmVyYm9zZSwgZXh0aHJvdykgeworICAgIGlmIChhc3NlcnRpb24pIHsKKyAgICAg
ICAgdGVzdFBhc3NlZE9wdGlvbnMobXNnLCB2ZXJib3NlKTsKKyAgICB9IGVsc2UgeworICAgICAg
ICB0ZXN0RmFpbGVkT3B0aW9ucyhtc2csIGV4dGhyb3cpOworICAgIH0KK30KKworCitmdW5jdGlv
biB3ZWJnbEhhcm5lc3NDb2xsZWN0R2FyYmFnZSgpIHsKKyAgICBpZiAod2luZG93LkdDQ29udHJv
bGxlcikgeworICAgICAgICB3aW5kb3cuR0NDb250cm9sbGVyLmNvbGxlY3QoKTsKKyAgICAgICAg
cmV0dXJuOworICAgIH0KKworICAgIGlmICh3aW5kb3cub3BlcmEgJiYgd2luZG93Lm9wZXJhLmNv
bGxlY3QpIHsKKyAgICAgICAgd2luZG93Lm9wZXJhLmNvbGxlY3QoKTsKKyAgICAgICAgcmV0dXJu
OworICAgIH0KKworICAgIHRyeSB7CisgICAgICAgIHdpbmRvdy5RdWVyeUludGVyZmFjZShDb21w
b25lbnRzLmludGVyZmFjZXMubnNJSW50ZXJmYWNlUmVxdWVzdG9yKQorICAgICAgICAgICAgICAu
Z2V0SW50ZXJmYWNlKENvbXBvbmVudHMuaW50ZXJmYWNlcy5uc0lET01XaW5kb3dVdGlscykKKyAg
ICAgICAgICAgICAgLmdhcmJhZ2VDb2xsZWN0KCk7CisgICAgICAgIHJldHVybjsKKyAgICB9IGNh
dGNoKGUpIHt9CisKKyAgICBpZiAod2luZG93LmdjKSB7CisgICAgICAgIHdpbmRvdy5nYygpOwor
ICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgaWYgKHdpbmRvdy5Db2xsZWN0R2FyYmFnZSkg
eworICAgICAgICBDb2xsZWN0R2FyYmFnZSgpOworICAgICAgICByZXR1cm47CisgICAgfQorCisg
ICAgLy8gV2ViS2l0J3MgTWluaUJyb3dzZXIgd2l0aCB0aGUgZm9sbG93aW5nIGVudmlyb25tZW50
IHZhcmlhYmxlcyBzZXQ6CisgICAgLy8gICBleHBvcnQgSlNDX3VzZURvbGxhclZNPTEKKyAgICAv
LyAgIGV4cG9ydCBfX1hQQ19KU0NfdXNlRG9sbGFyVk09MQorICAgIGlmICh3aW5kb3cuJHZtKSB7
CisgICAgICAgIHdpbmRvdy4kdm0uZ2MoKTsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKworICAg
IGZ1bmN0aW9uIGdjUmVjKG4pIHsKKyAgICAgICAgaWYgKG4gPCAxKQorICAgICAgICAgICAgcmV0
dXJuIHt9OworICAgICAgICB2YXIgdGVtcCA9IHtpOiAiYWIiICsgaSArIChpIC8gMTAwMDAwKX07
CisgICAgICAgIHRlbXAgKz0gImZvbyI7CisgICAgICAgIGdjUmVjKG4tMSk7CisgICAgfQorICAg
IGZvciAodmFyIGkgPSAwOyBpIDwgMTAwMDsgaSsrKQorICAgICAgICBnY1JlYygxMCk7Cit9CisK
K2Z1bmN0aW9uIGZpbmlzaFRlc3QoKSB7CisgIHN1Y2Nlc3NmdWxseVBhcnNlZCA9IHRydWU7Cisg
IHZhciBlcGlsb2d1ZSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpOworICB2YXIg
YmFzZVBhdGggPSAiIjsKKyAgdmFyIGV4cGVjdGVkQmFzZSA9ICJqcy10ZXN0LXByZS5qcyI7Cisg
IHZhciBzY3JpcHRzID0gZG9jdW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoJ3NjcmlwdCcpOwor
ICBmb3IgKHZhciBzY3JpcHQsIGkgPSAwOyBzY3JpcHQgPSBzY3JpcHRzW2ldOyBpKyspIHsKKyAg
ICB2YXIgc3JjID0gc2NyaXB0LnNyYzsKKyAgICB2YXIgbCA9IHNyYy5sZW5ndGg7CisgICAgaWYg
KHNyYy5zdWJzdHIobCAtIGV4cGVjdGVkQmFzZS5sZW5ndGgpID09IGV4cGVjdGVkQmFzZSkgewor
ICAgICAgYmFzZVBhdGggPSBzcmMuc3Vic3RyKDAsIGwgLSBleHBlY3RlZEJhc2UubGVuZ3RoKTsK
KyAgICAgIGJyZWFrOworICAgIH0KKyAgfQorICBlcGlsb2d1ZS5zcmMgPSBiYXNlUGF0aCArICJq
cy10ZXN0LXBvc3QuanMiOworICBkb2N1bWVudC5ib2R5LmFwcGVuZENoaWxkKGVwaWxvZ3VlKTsK
K30KKwpkaWZmIC0tZ2l0IGEvTGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3dlYmdsX3Rlc3Rf
ZmlsZXMvanMvdGVzdHMvZXh0LWZsb2F0LWJsZW5kLmpzIGIvTGF5b3V0VGVzdHMvd2ViZ2wvcmVz
b3VyY2VzL3dlYmdsX3Rlc3RfZmlsZXMvanMvdGVzdHMvZXh0LWZsb2F0LWJsZW5kLmpzCm5ldyBm
aWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAuLmFiMmY5ZjkyODhmNjgyYmYyNzM0MGJkOTU2YzYyMTI5YTI3ZDFlODgKLS0tIC9kZXYv
bnVsbAorKysgYi9MYXlvdXRUZXN0cy93ZWJnbC9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9q
cy90ZXN0cy9leHQtZmxvYXQtYmxlbmQuanMKQEAgLTAsMCArMSwyMzcgQEAKKyd1c2Ugc3RyaWN0
JzsKKworY29uc3QgdHJpdmlhbFZzU3JjID0gYAordm9pZCBtYWluKCkKK3sKKyAgICBnbF9Qb3Np
dGlvbiA9IHZlYzQoMCwwLDAsMSk7Cit9CitgOworY29uc3QgdHJpdmlhbEZzU3JjID0gYAordm9p
ZCBtYWluKCkKK3sKKyAgICBnbF9GcmFnQ29sb3IgPSB2ZWM0KDAsMSwwLDEpOworfQorYDsKK2Nv
bnN0IHRyaXZpYWxWc01ydFNyYzEwMCA9IGAKK3ZvaWQgbWFpbigpCit7CisgICAgZ2xfUG9zaXRp
b24gPSB2ZWM0KDAsMCwwLDEpOworfQorYDsKK2NvbnN0IHRyaXZpYWxGc01ydFNyYzEwMCA9IGAK
KyNleHRlbnNpb24gR0xfRVhUX2RyYXdfYnVmZmVycyA6IHJlcXVpcmUKK3ByZWNpc2lvbiBtZWRp
dW1wIGZsb2F0Owordm9pZCBtYWluKCkKK3sKKyAgICBnbF9GcmFnRGF0YVswXSA9IHZlYzQoMSwg
MCwgMCwgMSk7CisgICAgZ2xfRnJhZ0RhdGFbMV0gPSB2ZWM0KDAsIDEsIDAsIDEpOworfQorYDsK
K2NvbnN0IHRyaXZpYWxWc01ydFNyYzMwMCA9IGAjdmVyc2lvbiAzMDAgZXMKK3ZvaWQgbWFpbigp
Cit7CisgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KDAsMCwwLDEpOworfQorYDsKK2NvbnN0IHRyaXZp
YWxGc01ydFNyYzMwMCA9IGAjdmVyc2lvbiAzMDAgZXMKK3ByZWNpc2lvbiBtZWRpdW1wIGZsb2F0
OworbGF5b3V0KGxvY2F0aW9uID0gMCkgb3V0IHZlYzQgb19jb2xvcjA7CitsYXlvdXQobG9jYXRp
b24gPSAxKSBvdXQgdmVjNCBvX2NvbG9yMTsKK3ZvaWQgbWFpbigpCit7CisgICAgb19jb2xvcjAg
PSB2ZWM0KDEsIDAsIDAsIDEpOworICAgIG9fY29sb3IxID0gdmVjNCgwLCAxLCAwLCAxKTsKK30K
K2A7CisKK2Z1bmN0aW9uIHRlc3RFeHRGbG9hdEJsZW5kKGludGVybmFsRm9ybWF0KSB7CisgICAg
Y29uc3Qgc2hvdWxkQmxlbmQgPSBnbC5nZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCkuaW5kZXhPZign
RVhUX2Zsb2F0X2JsZW5kJykgIT0gLTE7CisKKyAgICBjb25zdCBwcm9nID0gd3R1LnNldHVwUHJv
Z3JhbShnbCwgW3RyaXZpYWxWc1NyYywgdHJpdmlhbEZzU3JjXSk7CisgICAgZ2wudXNlUHJvZ3Jh
bShwcm9nKTsKKworICAgIGNvbnN0IHRleCA9IGdsLmNyZWF0ZVRleHR1cmUoKTsKKyAgICBnbC5i
aW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXgpOworICAgIGdsLnRleEltYWdlMkQoZ2wuVEVY
VFVSRV8yRCwgMCwgaW50ZXJuYWxGb3JtYXQsIDEsIDEsIDAsIGdsLlJHQkEsIGdsLkZMT0FULCBu
dWxsKTsKKworICAgIGNvbnN0IGZiID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICBnbC5i
aW5kRnJhbWVidWZmZXIoZ2wuRlJBTUVCVUZGRVIsIGZiKTsKKyAgICBnbC5mcmFtZWJ1ZmZlclRl
eHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgZ2wuQ09MT1JfQVRUQUNITUVOVDAsIGdsLlRFWFRVUkVf
MkQsIHRleCwgMCk7CisgICAgc2hvdWxkQmUoJ2dsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wu
RlJBTUVCVUZGRVIpJywgJ2dsLkZSQU1FQlVGRkVSX0NPTVBMRVRFJyk7CisKKyAgICBnbC5kaXNh
YmxlKGdsLkJMRU5EKTsKKyAgICBnbC5kcmF3QXJyYXlzKGdsLlBPSU5UUywgMCwgMSk7CisgICAg
d3R1LmdsRXJyb3JTaG91bGRCZShnbCwgMCwgJ0Zsb2F0MzIgZHJhdyB0YXJnZXQgd2l0aG91dCBi
bGVuZGluZycpOworCisgICAgZ2wuZW5hYmxlKGdsLkJMRU5EKTsKKyAgICBnbC5kcmF3QXJyYXlz
KGdsLlBPSU5UUywgMCwgMSk7CisgICAgd3R1LmdsRXJyb3JTaG91bGRCZShnbCwgc2hvdWxkQmxl
bmQgPyAwIDogZ2wuSU5WQUxJRF9PUEVSQVRJT04sCisgICAgICAgICAgICAgICAgICAgICAgICAn
RmxvYXQzMiBibGVuZGluZyBpcyAnICsgKHNob3VsZEJsZW5kID8gJycgOiAnbm90ICcpICsgJ2Fs
bG93ZWQgJyk7CisKKyAgICBnbC5kZWxldGVGcmFtZWJ1ZmZlcihmYik7CisgICAgZ2wuZGVsZXRl
VGV4dHVyZSh0ZXgpOworfQorCitmdW5jdGlvbiB0ZXN0RXh0RmxvYXRCbGVuZE1SVEltcGwodmVy
c2lvbiwgaW50ZXJuYWxGb3JtYXQsIHNoYWRlcnMsIGF0dGFjaG1lbnRzLCBkcmF3QnVmZmVycykg
eworICAgIGNvbnN0IHNob3VsZEJsZW5kID0gZ2wuZ2V0U3VwcG9ydGVkRXh0ZW5zaW9ucygpLmlu
ZGV4T2YoJ0VYVF9mbG9hdF9ibGVuZCcpICE9IC0xOworCisgICAgY29uc3QgcHJvZyA9IHd0dS5z
ZXR1cFByb2dyYW0oZ2wsIHNoYWRlcnMpOworICAgIGdsLnVzZVByb2dyYW0ocHJvZyk7CisKKyAg
ICBjb25zdCB0ZXgxID0gZ2wuY3JlYXRlVGV4dHVyZSgpOworICAgIGdsLmJpbmRUZXh0dXJlKGds
LlRFWFRVUkVfMkQsIHRleDEpOworICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwg
Z2wuUkdCQSwgMSwgMSwgMCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgbnVsbCk7CisKKyAg
ICBjb25zdCB0ZXgyID0gZ2wuY3JlYXRlVGV4dHVyZSgpOworICAgIGdsLmJpbmRUZXh0dXJlKGds
LlRFWFRVUkVfMkQsIHRleDIpOworICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwg
Z2wuUkdCQSwgMSwgMSwgMCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgbnVsbCk7CisKKyAg
ICBjb25zdCB0ZXhGMSA9IGdsLmNyZWF0ZVRleHR1cmUoKTsKKyAgICBnbC5iaW5kVGV4dHVyZShn
bC5URVhUVVJFXzJELCB0ZXhGMSk7CisgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAw
LCBpbnRlcm5hbEZvcm1hdCwgMSwgMSwgMCwgZ2wuUkdCQSwgZ2wuRkxPQVQsIG51bGwpOworCisg
ICAgY29uc3QgdGV4RjIgPSBnbC5jcmVhdGVUZXh0dXJlKCk7CisgICAgZ2wuYmluZFRleHR1cmUo
Z2wuVEVYVFVSRV8yRCwgdGV4RjIpOworICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwg
MCwgaW50ZXJuYWxGb3JtYXQsIDEsIDEsIDAsIGdsLlJHQkEsIGdsLkZMT0FULCBudWxsKTsKKwor
ICAgIGNvbnN0IGZiID0gZ2wuY3JlYXRlRnJhbWVidWZmZXIoKTsKKyAgICBnbC5iaW5kRnJhbWVi
dWZmZXIoZ2wuRlJBTUVCVUZGRVIsIGZiKTsKKyAgICBnbC5mcmFtZWJ1ZmZlclRleHR1cmUyRChn
bC5GUkFNRUJVRkZFUiwgYXR0YWNobWVudHNbMF0sIGdsLlRFWFRVUkVfMkQsIHRleDEsIDApOwor
ICAgIGdsLmZyYW1lYnVmZmVyVGV4dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBhdHRhY2htZW50c1sx
XSwgZ2wuVEVYVFVSRV8yRCwgdGV4MiwgMCk7CisgICAgc2hvdWxkQmUoJ2dsLmNoZWNrRnJhbWVi
dWZmZXJTdGF0dXMoZ2wuRlJBTUVCVUZGRVIpJywgJ2dsLkZSQU1FQlVGRkVSX0NPTVBMRVRFJyk7
CisKKyAgICBkcmF3QnVmZmVycyhhdHRhY2htZW50cyk7CisKKyAgICBnbC5lbmFibGUoZ2wuQkxF
TkQpOworCisgICAgZ2wuZHJhd0FycmF5cyhnbC5QT0lOVFMsIDAsIDEpOworICAgIHd0dS5nbEVy
cm9yU2hvdWxkQmUoZ2wsIDAsICdObyBGbG9hdDMyIGNvbG9yIGF0dGFjaG1lbnQnKTsKKworICAg
IGlmICh2ZXJzaW9uIDwgMikgeworICAgICAgICAvLyBFWFRfZHJhd19idWZmZXJzIHJlcXVpcmUg
YWxsIGNvbG9yIGJ1ZmZlcnMgaGF2aW5nIHRoZSBzYW1lIG51bWJlciBvZiBiaXRwbGFuZXMKKyAg
ICAgICAgZ2wuZnJhbWVidWZmZXJUZXh0dXJlMkQoZ2wuRlJBTUVCVUZGRVIsIGF0dGFjaG1lbnRz
WzBdLCBnbC5URVhUVVJFXzJELCB0ZXhGMSwgMCk7CisgICAgICAgIGdsLmZyYW1lYnVmZmVyVGV4
dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBhdHRhY2htZW50c1sxXSwgZ2wuVEVYVFVSRV8yRCwgdGV4
RjIsIDApOworICAgICAgICBzaG91bGRCZSgnZ2wuY2hlY2tGcmFtZWJ1ZmZlclN0YXR1cyhnbC5G
UkFNRUJVRkZFUiknLCAnZ2wuRlJBTUVCVUZGRVJfQ09NUExFVEUnKTsKKyAgICAgICAgZ2wuZHJh
d0FycmF5cyhnbC5QT0lOVFMsIDAsIDEpOworICAgICAgICB3dHUuZ2xFcnJvclNob3VsZEJlKGds
LCBzaG91bGRCbGVuZCA/IDAgOiBnbC5JTlZBTElEX09QRVJBVElPTiwKKyAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAnRmxvYXQzMiBibGVuZGluZyBpcyAnICsgKHNob3VsZEJsZW5kID8gJycg
OiAnbm90ICcpICsgJ2FsbG93ZWQgJyk7CisgICAgfSBlbHNlIHsKKyAgICAgICAgZ2wuZnJhbWVi
dWZmZXJUZXh0dXJlMkQoZ2wuRlJBTUVCVUZGRVIsIGF0dGFjaG1lbnRzWzBdLCBnbC5URVhUVVJF
XzJELCB0ZXhGMSwgMCk7CisgICAgICAgIHNob3VsZEJlKCdnbC5jaGVja0ZyYW1lYnVmZmVyU3Rh
dHVzKGdsLkZSQU1FQlVGRkVSKScsICdnbC5GUkFNRUJVRkZFUl9DT01QTEVURScpOworICAgICAg
ICBnbC5kcmF3QXJyYXlzKGdsLlBPSU5UUywgMCwgMSk7CisgICAgICAgIHd0dS5nbEVycm9yU2hv
dWxkQmUoZ2wsIHNob3VsZEJsZW5kID8gMCA6IGdsLklOVkFMSURfT1BFUkFUSU9OLAorICAgICAg
ICAgICAgICAgICAgICAgICAgICAgICdGbG9hdDMyIGJsZW5kaW5nIGlzICcgKyAoc2hvdWxkQmxl
bmQgPyAnJyA6ICdub3QgJykgKyAnYWxsb3dlZCAnKTsKKworICAgICAgICBnbC5mcmFtZWJ1ZmZl
clRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgYXR0YWNobWVudHNbMV0sIGdsLlRFWFRVUkVfMkQs
IHRleEYyLCAwKTsKKyAgICAgICAgc2hvdWxkQmUoJ2dsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMo
Z2wuRlJBTUVCVUZGRVIpJywgJ2dsLkZSQU1FQlVGRkVSX0NPTVBMRVRFJyk7CisgICAgICAgIGds
LmRyYXdBcnJheXMoZ2wuUE9JTlRTLCAwLCAxKTsKKyAgICAgICAgd3R1LmdsRXJyb3JTaG91bGRC
ZShnbCwgc2hvdWxkQmxlbmQgPyAwIDogZ2wuSU5WQUxJRF9PUEVSQVRJT04sCisgICAgICAgICAg
ICAgICAgICAgICAgICAgICAgJ0Zsb2F0MzIgYmxlbmRpbmcgaXMgJyArIChzaG91bGRCbGVuZCA/
ICcnIDogJ25vdCAnKSArICdhbGxvd2VkICcpOworCisgICAgICAgIGdsLmZyYW1lYnVmZmVyVGV4
dHVyZTJEKGdsLkZSQU1FQlVGRkVSLCBhdHRhY2htZW50c1swXSwgZ2wuVEVYVFVSRV8yRCwgdGV4
MSwgMCk7CisgICAgICAgIHNob3VsZEJlKCdnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZS
QU1FQlVGRkVSKScsICdnbC5GUkFNRUJVRkZFUl9DT01QTEVURScpOworICAgICAgICBnbC5kcmF3
QXJyYXlzKGdsLlBPSU5UUywgMCwgMSk7CisgICAgICAgIHd0dS5nbEVycm9yU2hvdWxkQmUoZ2ws
IHNob3VsZEJsZW5kID8gMCA6IGdsLklOVkFMSURfT1BFUkFUSU9OLAorICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICdGbG9hdDMyIGJsZW5kaW5nIGlzICcgKyAoc2hvdWxkQmxlbmQgPyAnJyA6
ICdub3QgJykgKyAnYWxsb3dlZCAnKTsKKworICAgICAgICBkcmF3QnVmZmVycyhbYXR0YWNobWVu
dHNbMF1dKTsKKyAgICAgICAgc2hvdWxkQmUoJ2dsLmNoZWNrRnJhbWVidWZmZXJTdGF0dXMoZ2wu
RlJBTUVCVUZGRVIpJywgJ2dsLkZSQU1FQlVGRkVSX0NPTVBMRVRFJyk7CisKKyAgICAgICAgZ2wu
ZHJhd0FycmF5cyhnbC5QT0lOVFMsIDAsIDEpOworICAgICAgICB3dHUuZ2xFcnJvclNob3VsZEJl
KGdsLCAwLCAnRmxvYXQzMiBjb2xvciBhdHRhY2htZW50IGRyYXcgYnVmZmVyIGlzIG5vdCBlbmFi
bGVkJyk7CisKKyAgICAgICAgZHJhd0J1ZmZlcnMoYXR0YWNobWVudHMpOworICAgICAgICBnbC5m
cmFtZWJ1ZmZlclRleHR1cmUyRChnbC5GUkFNRUJVRkZFUiwgYXR0YWNobWVudHNbMV0sIGdsLlRF
WFRVUkVfMkQsIHRleDIsIDApOworICAgICAgICBzaG91bGRCZSgnZ2wuY2hlY2tGcmFtZWJ1ZmZl
clN0YXR1cyhnbC5GUkFNRUJVRkZFUiknLCAnZ2wuRlJBTUVCVUZGRVJfQ09NUExFVEUnKTsKKwor
ICAgICAgICBnbC5kcmF3QXJyYXlzKGdsLlBPSU5UUywgMCwgMSk7CisgICAgICAgIHd0dS5nbEVy
cm9yU2hvdWxkQmUoZ2wsIDAsICdObyBGbG9hdDMyIGNvbG9yIGF0dGFjaG1lbnQnKTsKKyAgICB9
CisKKyAgICBnbC5kZWxldGVGcmFtZWJ1ZmZlcihmYik7CisgICAgZ2wuZGVsZXRlVGV4dHVyZSh0
ZXgxKTsKKyAgICBnbC5kZWxldGVUZXh0dXJlKHRleDIpOworICAgIGdsLmRlbGV0ZVRleHR1cmUo
dGV4RjEpOworICAgIGdsLmRlbGV0ZVRleHR1cmUodGV4RjIpOworfQorCitmdW5jdGlvbiB0ZXN0
RXh0RmxvYXRCbGVuZE1SVCh2ZXJzaW9uLCBkcmF3QnVmZmVyc0V4dCkgeworICAgIGlmICh2ZXJz
aW9uIDwgMikgeworICAgICAgICBpZiAoIWRyYXdCdWZmZXJzRXh0KSByZXR1cm47CisgICAgICAg
IHRlc3RFeHRGbG9hdEJsZW5kTVJUSW1wbCgKKyAgICAgICAgICAgIHZlcnNpb24sCisgICAgICAg
ICAgICBnbC5SR0JBLAorICAgICAgICAgICAgW3RyaXZpYWxWc01ydFNyYzEwMCwgdHJpdmlhbEZz
TXJ0U3JjMTAwXSwKKyAgICAgICAgICAgIFtkcmF3QnVmZmVyc0V4dC5DT0xPUl9BVFRBQ0hNRU5U
MF9XRUJHTCwgZHJhd0J1ZmZlcnNFeHQuQ09MT1JfQVRUQUNITUVOVDFfV0VCR0xdLAorICAgICAg
ICAgICAgZHJhd0J1ZmZlcnNFeHQuZHJhd0J1ZmZlcnNXRUJHTC5iaW5kKGRyYXdCdWZmZXJzRXh0
KQorICAgICAgICApOworICAgIH0gZWxzZSB7CisgICAgICAgIHRlc3RFeHRGbG9hdEJsZW5kTVJU
SW1wbCgKKyAgICAgICAgICAgIHZlcnNpb24sCisgICAgICAgICAgICBnbC5SR0JBMzJGLAorICAg
ICAgICAgICAgW3RyaXZpYWxWc01ydFNyYzMwMCwgdHJpdmlhbEZzTXJ0U3JjMzAwXSwKKyAgICAg
ICAgICAgIFtnbC5DT0xPUl9BVFRBQ0hNRU5UMCwgZ2wuQ09MT1JfQVRUQUNITUVOVDFdLAorICAg
ICAgICAgICAgZ2wuZHJhd0J1ZmZlcnMuYmluZChnbCkKKyAgICAgICAgKTsKKyAgICB9Cit9CisK
K2Z1bmN0aW9uIHRlc3RFeHRGbG9hdEJsZW5kTm9uRmxvYXQzMlR5cGVJbXBsKGludGVybmFsRm9y
bWF0LCBmb3JtYXRzKSB7CisgICAgY29uc3Qgc2hvdWxkQmxlbmQgPSBnbC5nZXRTdXBwb3J0ZWRF
eHRlbnNpb25zKCkuaW5kZXhPZignRVhUX2Zsb2F0X2JsZW5kJykgIT0gLTE7CisKKyAgICBjb25z
dCBwcm9nID0gd3R1LnNldHVwUHJvZ3JhbShnbCwgW3RyaXZpYWxWc1NyYywgdHJpdmlhbEZzU3Jj
XSk7CisgICAgZ2wudXNlUHJvZ3JhbShwcm9nKTsKKworICAgIGdsLmVuYWJsZShnbC5CTEVORCk7
CisKKyAgICBjb25zdCB0ZXggPSBnbC5jcmVhdGVUZXh0dXJlKCk7CisgICAgZ2wuYmluZFRleHR1
cmUoZ2wuVEVYVFVSRV8yRCwgdGV4KTsKKyAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQs
IDAsIGludGVybmFsRm9ybWF0LCAxLCAxLCAwLCBnbC5SR0JBLCBnbC5GTE9BVCwgbnVsbCk7CisK
KyAgICBjb25zdCBmYiA9IGdsLmNyZWF0ZUZyYW1lYnVmZmVyKCk7CisgICAgZ2wuYmluZEZyYW1l
YnVmZmVyKGdsLkZSQU1FQlVGRkVSLCBmYik7CisgICAgZ2wuZnJhbWVidWZmZXJUZXh0dXJlMkQo
Z2wuRlJBTUVCVUZGRVIsIGdsLkNPTE9SX0FUVEFDSE1FTlQwLCBnbC5URVhUVVJFXzJELCB0ZXgs
IDApOworICAgIHNob3VsZEJlKCdnbC5jaGVja0ZyYW1lYnVmZmVyU3RhdHVzKGdsLkZSQU1FQlVG
RkVSKScsICdnbC5GUkFNRUJVRkZFUl9DT01QTEVURScpOworCisgICAgZ2wuZHJhd0FycmF5cyhn
bC5QT0lOVFMsIDAsIDEpOworICAgIHd0dS5nbEVycm9yU2hvdWxkQmUoZ2wsIHNob3VsZEJsZW5k
ID8gMCA6IGdsLklOVkFMSURfT1BFUkFUSU9OLAorICAgICAgICAgICAgICAgICAgICAgICAgJ0Zs
b2F0MzIgYmxlbmRpbmcgaXMgJyArIChzaG91bGRCbGVuZCA/ICcnIDogJ25vdCAnKSArICdhbGxv
d2VkICcpOworCisgICAgZ2wudGV4SW1hZ2UyRChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCAx
LCAxLCAwLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBudWxsKTsKKyAgICBnbC5kcmF3QXJy
YXlzKGdsLlBPSU5UUywgMCwgMSk7CisgICAgd3R1LmdsRXJyb3JTaG91bGRCZShnbCwgMCwgJ1VO
U0lHTkVEX0JZVEUgc2hvdWxkIGJsZW5kIGFueXdheScpOworCisgICAgZm9yIChsZXQgaSA9IDAs
IGxlbiA9IGZvcm1hdHMubGVuZ3RoOyBpIDwgbGVuOyBpKyspIHsKKyAgICAgICAgZ2wudGV4SW1h
Z2UyRChnbC5URVhUVVJFXzJELCAwLCBmb3JtYXRzW2ldWzBdLCAxLCAxLCAwLCBmb3JtYXRzW2ld
WzFdLCBmb3JtYXRzW2ldWzJdLCBudWxsKTsKKyAgICAgICAgZ2wuZHJhd0FycmF5cyhnbC5QT0lO
VFMsIDAsIDEpOworICAgICAgICB3dHUuZ2xFcnJvclNob3VsZEJlKGdsLCAwLCAnQW55IG90aGVy
IGZsb2F0IHR5cGUgd2hpY2ggaXMgbm90IDMyLWJpdC1GbG9hdCBzaG91bGQgYmxlbmQgYW55d2F5
Jyk7CisgICAgfQorCisgICAgZ2wuZGVsZXRlRnJhbWVidWZmZXIoZmIpOworICAgIGdsLmRlbGV0
ZVRleHR1cmUodGV4KTsKK30KKworZnVuY3Rpb24gdGVzdEV4dEZsb2F0QmxlbmROb25GbG9hdDMy
VHlwZSh2ZXJzaW9uLCBvZXNUZXh0dXJlSGFsZkZsb2F0KSB7CisgICAgaWYgKHZlcnNpb24gPCAy
KSB7CisgICAgICAgIGlmICghb2VzVGV4dHVyZUhhbGZGbG9hdCkgcmV0dXJuOworICAgICAgICBj
b25zdCBmb3JtYXRzID0gWworICAgICAgICAgICAgW2dsLlJHQkEsIGdsLlJHQkEsIG9lc1RleHR1
cmVIYWxmRmxvYXQuSEFMRl9GTE9BVF9PRVNdCisgICAgICAgIF07CisgICAgICAgIHRlc3RFeHRG
bG9hdEJsZW5kTm9uRmxvYXQzMlR5cGVJbXBsKGdsLlJHQkEsIGZvcm1hdHMpOworICAgIH0gZWxz
ZSB7CisgICAgICAgIGNvbnN0IGZvcm1hdHMgPSBbCisgICAgICAgICAgICBbZ2wuUkdCQTE2Riwg
Z2wuUkdCQSwgZ2wuSEFMRl9GTE9BVF0sCisgICAgICAgICAgICBbZ2wuUkdCQTE2RiwgZ2wuUkdC
QSwgZ2wuRkxPQVRdLAorICAgICAgICAgICAgW2dsLlJHMTZGLCBnbC5SRywgZ2wuRkxPQVRdLAor
ICAgICAgICAgICAgW2dsLlIxNkYsIGdsLlJFRCwgZ2wuRkxPQVRdLAorICAgICAgICAgICAgW2ds
LlIxMUZfRzExRl9CMTBGLCBnbC5SR0IsIGdsLkZMT0FUXQorICAgICAgICBdOworICAgICAgICB0
ZXN0RXh0RmxvYXRCbGVuZE5vbkZsb2F0MzJUeXBlSW1wbChnbC5SR0JBMzJGLCBmb3JtYXRzKTsK
KyAgICB9Cit9CisKKy8qCitDb3B5cmlnaHQgKGMpIDIwMTkgVGhlIEtocm9ub3MgR3JvdXAgSW5j
LgorVXNlIG9mIHRoaXMgc291cmNlIGNvZGUgaXMgZ292ZXJuZWQgYnkgYW4gTUlULXN0eWxlIGxp
Y2Vuc2UgdGhhdCBjYW4gYmUKK2ZvdW5kIGluIHRoZSBMSUNFTlNFLnR4dCBmaWxlLgorKi8KZGlm
ZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdsL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL2pz
L3dlYmdsLXRlc3QtdXRpbHMuanMgYi9MYXlvdXRUZXN0cy93ZWJnbC9yZXNvdXJjZXMvd2ViZ2xf
dGVzdF9maWxlcy9qcy93ZWJnbC10ZXN0LXV0aWxzLmpzCm5ldyBmaWxlIG1vZGUgMTAwNjQ0Cmlu
ZGV4IDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAwMDAuLmNhNjA1ZGZiNjAx
YWFkODY3MGYyMzk4N2U3NDNiZjI3YmFkZGM2OTgKLS0tIC9kZXYvbnVsbAorKysgYi9MYXlvdXRU
ZXN0cy93ZWJnbC9yZXNvdXJjZXMvd2ViZ2xfdGVzdF9maWxlcy9qcy93ZWJnbC10ZXN0LXV0aWxz
LmpzCkBAIC0wLDAgKzEsMzU0MCBAQAorLyoKK0NvcHlyaWdodCAoYykgMjAxOSBUaGUgS2hyb25v
cyBHcm91cCBJbmMuCitVc2Ugb2YgdGhpcyBzb3VyY2UgY29kZSBpcyBnb3Zlcm5lZCBieSBhbiBN
SVQtc3R5bGUgbGljZW5zZSB0aGF0IGNhbiBiZQorZm91bmQgaW4gdGhlIExJQ0VOU0UudHh0IGZp
bGUuCisqLwordmFyIFdlYkdMVGVzdFV0aWxzID0gKGZ1bmN0aW9uKCkgeworInVzZSBzdHJpY3Qi
OworCisvKioKKyAqIFdyYXBwZWQgbG9nZ2luZyBmdW5jdGlvbi4KKyAqIEBwYXJhbSB7c3RyaW5n
fSBtc2cgVGhlIG1lc3NhZ2UgdG8gbG9nLgorICovCit2YXIgbG9nID0gZnVuY3Rpb24obXNnKSB7
CisgIGJ1ZmZlcmVkTG9nVG9Db25zb2xlKG1zZyk7Cit9OworCisvKioKKyAqIFdyYXBwZWQgbG9n
Z2luZyBmdW5jdGlvbi4KKyAqIEBwYXJhbSB7c3RyaW5nfSBtc2cgVGhlIG1lc3NhZ2UgdG8gbG9n
LgorICovCit2YXIgZXJyb3IgPSBmdW5jdGlvbihtc2cpIHsKKyAgLy8gRm9yIHRoZSB0aW1lIGJl
aW5nLCBkaXZlcnRpbmcgdGhpcyB0byB3aW5kb3cuY29uc29sZS5sb2cgcmF0aGVyCisgIC8vIHRo
YW4gd2luZG93LmNvbnNvbGUuZXJyb3IuIElmIGFueW9uZSBjYXJlcyBlbm91Z2ggdGhleSBjYW4K
KyAgLy8gZ2VuZXJhbGl6ZSB0aGUgbWVjaGFuaXNtIGluIGpzLXRlc3QtcHJlLmpzLgorICBsb2co
bXNnKTsKK307CisKKy8qKgorICogVHVybiBvZmYgYWxsIGxvZ2dpbmcuCisgKi8KK3ZhciBsb2dn
aW5nT2ZmID0gZnVuY3Rpb24oKSB7CisgIGxvZyA9IGZ1bmN0aW9uKCkge307CisgIGVycm9yID0g
ZnVuY3Rpb24oKSB7fTsKK307CisKK2NvbnN0IEVOVU1fTkFNRV9SRUdFWCA9IFJlZ0V4cCgnW0Et
Wl1bQS1aMC05X10qJyk7Citjb25zdCBFTlVNX05BTUVfQllfVkFMVUUgPSB7fTsKK2NvbnN0IEVO
VU1fTkFNRV9QUk9UT1RZUEVTID0gbmV3IE1hcCgpOworCisvKioKKyAqIENvbnZlcnRzIGEgV2Vi
R0wgZW51bSB0byBhIHN0cmluZy4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0g
Z2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge251bWJlcn0g
dmFsdWUgVGhlIGVudW0gdmFsdWUuCisgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBlbnVtIGFzIGEg
c3RyaW5nLgorICovCit2YXIgZ2xFbnVtVG9TdHJpbmcgPSBmdW5jdGlvbihnbE9yRXh0LCB2YWx1
ZSkgeworICBpZiAodmFsdWUgPT09IHVuZGVmaW5lZCkKKyAgICB0aHJvdyBuZXcgRXJyb3IoJ2ds
RW51bVRvU3RyaW5nOiBgdmFsdWVgIG11c3Qgbm90IGJlIHVuZGVmaW5lZCcpOworCisgIGNvbnN0
IHByb3RvID0gZ2xPckV4dC5fX3Byb3RvX187CisgIGlmICghRU5VTV9OQU1FX1BST1RPVFlQRVMu
aGFzKHByb3RvKSkgeworICAgIEVOVU1fTkFNRV9QUk9UT1RZUEVTLnNldChwcm90bywgdHJ1ZSk7
CisKKyAgICBmb3IgKGNvbnN0IGsgaW4gcHJvdG8pIHsKKyAgICAgIGlmICghRU5VTV9OQU1FX1JF
R0VYLnRlc3QoaykpIGNvbnRpbnVlOworCisgICAgICBjb25zdCB2ID0gZ2xPckV4dFtrXTsKKyAg
ICAgIGlmIChFTlVNX05BTUVfQllfVkFMVUVbdl0gPT09IHVuZGVmaW5lZCkgeworICAgICAgICBF
TlVNX05BTUVfQllfVkFMVUVbdl0gPSBrOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgRU5VTV9O
QU1FX0JZX1ZBTFVFW3ZdICs9ICcvJyArIGs7CisgICAgICB9CisgICAgfQorICB9CisKKyAgY29u
c3Qga2V5ID0gRU5VTV9OQU1FX0JZX1ZBTFVFW3ZhbHVlXTsKKyAgaWYgKGtleSAhPT0gdW5kZWZp
bmVkKSByZXR1cm4ga2V5OworCisgIHJldHVybiAiMHgiICsgTnVtYmVyKHZhbHVlKS50b1N0cmlu
ZygxNik7Cit9OworCit2YXIgbGFzdEVycm9yID0gIiI7CisKKy8qKgorICogUmV0dXJucyB0aGUg
bGFzdCBjb21waWxlci9saW5rZXIgZXJyb3IuCisgKiBAcmV0dXJuIHtzdHJpbmd9IFRoZSBsYXN0
IGNvbXBpbGVyL2xpbmtlciBlcnJvci4KKyAqLwordmFyIGdldExhc3RFcnJvciA9IGZ1bmN0aW9u
KCkgeworICByZXR1cm4gbGFzdEVycm9yOworfTsKKworLyoqCisgKiBXaGV0aGVyIGEgaGF5c3Rh
Y2sgZW5kcyB3aXRoIGEgbmVlZGxlLgorICogQHBhcmFtIHtzdHJpbmd9IGhheXN0YWNrIFN0cmlu
ZyB0byBzZWFyY2gKKyAqIEBwYXJhbSB7c3RyaW5nfSBuZWVkbGUgU3RyaW5nIHRvIHNlYXJjaCBm
b3IuCisgKiBAcGFyYW0ge2Jvb2xlYW59IFRydWUgaWYgaGF5c3RhY2sgZW5kcyB3aXRoIG5lZWRs
ZS4KKyAqLwordmFyIGVuZHNXaXRoID0gZnVuY3Rpb24oaGF5c3RhY2ssIG5lZWRsZSkgeworICBy
ZXR1cm4gaGF5c3RhY2suc3Vic3RyKGhheXN0YWNrLmxlbmd0aCAtIG5lZWRsZS5sZW5ndGgpID09
PSBuZWVkbGU7Cit9OworCisvKioKKyAqIFdoZXRoZXIgYSBoYXlzdGFjayBzdGFydHMgd2l0aCBh
IG5lZWRsZS4KKyAqIEBwYXJhbSB7c3RyaW5nfSBoYXlzdGFjayBTdHJpbmcgdG8gc2VhcmNoCisg
KiBAcGFyYW0ge3N0cmluZ30gbmVlZGxlIFN0cmluZyB0byBzZWFyY2ggZm9yLgorICogQHBhcmFt
IHtib29sZWFufSBUcnVlIGlmIGhheXN0YWNrIHN0YXJ0cyB3aXRoIG5lZWRsZS4KKyAqLwordmFy
IHN0YXJ0c1dpdGggPSBmdW5jdGlvbihoYXlzdGFjaywgbmVlZGxlKSB7CisgIHJldHVybiBoYXlz
dGFjay5zdWJzdHIoMCwgbmVlZGxlLmxlbmd0aCkgPT09IG5lZWRsZTsKK307CisKKy8qKgorICog
QSB2ZXJ0ZXggc2hhZGVyIGZvciBhIHNpbmdsZSB0ZXh0dXJlLgorICogQHR5cGUge3N0cmluZ30K
KyAqLwordmFyIHNpbXBsZVRleHR1cmVWZXJ0ZXhTaGFkZXIgPSBbCisgICdhdHRyaWJ1dGUgdmVj
NCB2UG9zaXRpb247JywKKyAgJ2F0dHJpYnV0ZSB2ZWMyIHRleENvb3JkMDsnLAorICAndmFyeWlu
ZyB2ZWMyIHRleENvb3JkOycsCisgICd2b2lkIG1haW4oKSB7JywKKyAgJyAgICBnbF9Qb3NpdGlv
biA9IHZQb3NpdGlvbjsnLAorICAnICAgIHRleENvb3JkID0gdGV4Q29vcmQwOycsCisgICd9J10u
am9pbignXG4nKTsKKworLyoqCisgKiBBIHZlcnRleCBzaGFkZXIgZm9yIGEgc2luZ2xlIHRleHR1
cmUuCisgKiBAdHlwZSB7c3RyaW5nfQorICovCit2YXIgc2ltcGxlVGV4dHVyZVZlcnRleFNoYWRl
ckVTU0wzMDAgPSBbCisgICcjdmVyc2lvbiAzMDAgZXMnLAorICAnbGF5b3V0KGxvY2F0aW9uPTAp
IGluIHZlYzQgdlBvc2l0aW9uOycsCisgICdsYXlvdXQobG9jYXRpb249MSkgaW4gdmVjMiB0ZXhD
b29yZDA7JywKKyAgJ291dCB2ZWMyIHRleENvb3JkOycsCisgICd2b2lkIG1haW4oKSB7JywKKyAg
JyAgICBnbF9Qb3NpdGlvbiA9IHZQb3NpdGlvbjsnLAorICAnICAgIHRleENvb3JkID0gdGV4Q29v
cmQwOycsCisgICd9J10uam9pbignXG4nKTsKKworLyoqCisgKiBBIGZyYWdtZW50IHNoYWRlciBm
b3IgYSBzaW5nbGUgdGV4dHVyZS4KKyAqIEB0eXBlIHtzdHJpbmd9CisgKi8KK3ZhciBzaW1wbGVU
ZXh0dXJlRnJhZ21lbnRTaGFkZXIgPSBbCisgICdwcmVjaXNpb24gbWVkaXVtcCBmbG9hdDsnLAor
ICAndW5pZm9ybSBzYW1wbGVyMkQgdGV4OycsCisgICd2YXJ5aW5nIHZlYzIgdGV4Q29vcmQ7JywK
KyAgJ3ZvaWQgbWFpbigpIHsnLAorICAnICAgIGdsX0ZyYWdEYXRhWzBdID0gdGV4dHVyZTJEKHRl
eCwgdGV4Q29vcmQpOycsCisgICd9J10uam9pbignXG4nKTsKKworLyoqCisgKiBBIGZyYWdtZW50
IHNoYWRlciBmb3IgYSBzaW5nbGUgdGV4dHVyZS4KKyAqIEB0eXBlIHtzdHJpbmd9CisgKi8KK3Zh
ciBzaW1wbGVUZXh0dXJlRnJhZ21lbnRTaGFkZXJFU1NMMzAwID0gWworICAnI3ZlcnNpb24gMzAw
IGVzJywKKyAgJ3ByZWNpc2lvbiBoaWdocCBmbG9hdDsnLAorICAndW5pZm9ybSBoaWdocCBzYW1w
bGVyMkQgdGV4OycsCisgICdpbiB2ZWMyIHRleENvb3JkOycsCisgICdvdXQgdmVjNCBvdXRfY29s
b3I7JywKKyAgJ3ZvaWQgbWFpbigpIHsnLAorICAnICAgIG91dF9jb2xvciA9IHRleHR1cmUodGV4
LCB0ZXhDb29yZCk7JywKKyAgJ30nXS5qb2luKCdcbicpOworCisvKioKKyAqIEEgZnJhZ21lbnQg
c2hhZGVyIGZvciBhIHNpbmdsZSB0ZXh0dXJlIHdpdGggaGlnaCBwcmVjaXNpb24uCisgKiBAdHlw
ZSB7c3RyaW5nfQorICovCit2YXIgc2ltcGxlSGlnaFByZWNpc2lvblRleHR1cmVGcmFnbWVudFNo
YWRlciA9IFsKKyAgJ3ByZWNpc2lvbiBoaWdocCBmbG9hdDsnLAorICAndW5pZm9ybSBoaWdocCBz
YW1wbGVyMkQgdGV4OycsCisgICd2YXJ5aW5nIHZlYzIgdGV4Q29vcmQ7JywKKyAgJ3ZvaWQgbWFp
bigpIHsnLAorICAnICAgIGdsX0ZyYWdEYXRhWzBdID0gdGV4dHVyZTJEKHRleCwgdGV4Q29vcmQp
OycsCisgICd9J10uam9pbignXG4nKTsKKworLyoqCisgKiBBIGZyYWdtZW50IHNoYWRlciBmb3Ig
YSBzaW5nbGUgY3ViZSBtYXAgdGV4dHVyZS4KKyAqIEB0eXBlIHtzdHJpbmd9CisgKi8KK3ZhciBz
aW1wbGVDdWJlTWFwVGV4dHVyZUZyYWdtZW50U2hhZGVyID0gWworICAncHJlY2lzaW9uIG1lZGl1
bXAgZmxvYXQ7JywKKyAgJ3VuaWZvcm0gc2FtcGxlckN1YmUgdGV4OycsCisgICd1bmlmb3JtIGhp
Z2hwIGludCBmYWNlOycsCisgICd2YXJ5aW5nIHZlYzIgdGV4Q29vcmQ7JywKKyAgJ3ZvaWQgbWFp
bigpIHsnLAorICAvLyBUcmFuc2Zvcm0gWzAsIDFdIC0+IFstMSwgMV0KKyAgJyAgICB2ZWMyIHRl
eEMyID0gKHRleENvb3JkICogMi4pIC0gMS47JywKKyAgLy8gVHJhbnNmb3JtIDJkIHRleCBjb29y
ZC4gdG8gZWFjaCBmYWNlIG9mIFRFWFRVUkVfQ1VCRV9NQVAgY29vcmQuCisgICcgICAgdmVjMyB0
ZXhDdWJlID0gdmVjMygwLiwgMC4sIDAuKTsnLAorICAnICAgIGlmIChmYWNlID09IDM0MDY5KSB7
JywgICAgICAgICAvLyBURVhUVVJFX0NVQkVfTUFQX1BPU0lUSVZFX1gKKyAgJyAgICAgICAgdGV4
Q3ViZSA9IHZlYzMoMS4sIC10ZXhDMi55LCAtdGV4QzIueCk7JywKKyAgJyAgICB9IGVsc2UgaWYg
KGZhY2UgPT0gMzQwNzApIHsnLCAgLy8gVEVYVFVSRV9DVUJFX01BUF9ORUdBVElWRV9YCisgICcg
ICAgICAgIHRleEN1YmUgPSB2ZWMzKC0xLiwgLXRleEMyLnksIHRleEMyLngpOycsCisgICcgICAg
fSBlbHNlIGlmIChmYWNlID09IDM0MDcxKSB7JywgIC8vIFRFWFRVUkVfQ1VCRV9NQVBfUE9TSVRJ
VkVfWQorICAnICAgICAgICB0ZXhDdWJlID0gdmVjMyh0ZXhDMi54LCAxLiwgdGV4QzIueSk7JywK
KyAgJyAgICB9IGVsc2UgaWYgKGZhY2UgPT0gMzQwNzIpIHsnLCAgLy8gVEVYVFVSRV9DVUJFX01B
UF9ORUdBVElWRV9ZCisgICcgICAgICAgIHRleEN1YmUgPSB2ZWMzKHRleEMyLngsIC0xLiwgLXRl
eEMyLnkpOycsCisgICcgICAgfSBlbHNlIGlmIChmYWNlID09IDM0MDczKSB7JywgIC8vIFRFWFRV
UkVfQ1VCRV9NQVBfUE9TSVRJVkVfWgorICAnICAgICAgICB0ZXhDdWJlID0gdmVjMyh0ZXhDMi54
LCAtdGV4QzIueSwgMS4pOycsCisgICcgICAgfSBlbHNlIGlmIChmYWNlID09IDM0MDc0KSB7Jywg
IC8vIFRFWFRVUkVfQ1VCRV9NQVBfTkVHQVRJVkVfWgorICAnICAgICAgICB0ZXhDdWJlID0gdmVj
MygtdGV4QzIueCwgLXRleEMyLnksIC0xLik7JywKKyAgJyAgICB9JywKKyAgJyAgICBnbF9GcmFn
RGF0YVswXSA9IHRleHR1cmVDdWJlKHRleCwgdGV4Q3ViZSk7JywKKyAgJ30nXS5qb2luKCdcbicp
OworCisvKioKKyAqIEEgdmVydGV4IHNoYWRlciBmb3IgYSBzaW5nbGUgdGV4dHVyZS4KKyAqIEB0
eXBlIHtzdHJpbmd9CisgKi8KK3ZhciBub1RleENvb3JkVGV4dHVyZVZlcnRleFNoYWRlciA9IFsK
KyAgJ2F0dHJpYnV0ZSB2ZWM0IHZQb3NpdGlvbjsnLAorICAndmFyeWluZyB2ZWMyIHRleENvb3Jk
OycsCisgICd2b2lkIG1haW4oKSB7JywKKyAgJyAgICBnbF9Qb3NpdGlvbiA9IHZQb3NpdGlvbjsn
LAorICAnICAgIHRleENvb3JkID0gdlBvc2l0aW9uLnh5ICogMC41ICsgMC41OycsCisgICd9J10u
am9pbignXG4nKTsKKworLyoqCisgKiBBIHZlcnRleCBzaGFkZXIgZm9yIGEgdW5pZm9ybSBjb2xv
ci4KKyAqIEB0eXBlIHtzdHJpbmd9CisgKi8KK3ZhciBzaW1wbGVWZXJ0ZXhTaGFkZXIgPSBbCisg
ICdhdHRyaWJ1dGUgdmVjNCB2UG9zaXRpb247JywKKyAgJ3ZvaWQgbWFpbigpIHsnLAorICAnICAg
IGdsX1Bvc2l0aW9uID0gdlBvc2l0aW9uOycsCisgICd9J10uam9pbignXG4nKTsKKworLyoqCisg
KiBBIHZlcnRleCBzaGFkZXIgZm9yIGEgdW5pZm9ybSBjb2xvci4KKyAqIEB0eXBlIHtzdHJpbmd9
CisgKi8KK3ZhciBzaW1wbGVWZXJ0ZXhTaGFkZXJFU1NMMzAwID0gWworICAnI3ZlcnNpb24gMzAw
IGVzJywKKyAgJ2luIHZlYzQgdlBvc2l0aW9uOycsCisgICd2b2lkIG1haW4oKSB7JywKKyAgJyAg
ICBnbF9Qb3NpdGlvbiA9IHZQb3NpdGlvbjsnLAorICAnfSddLmpvaW4oJ1xuJyk7CisKKy8qKgor
ICogQSBmcmFnbWVudCBzaGFkZXIgZm9yIGEgdW5pZm9ybSBjb2xvci4KKyAqIEB0eXBlIHtzdHJp
bmd9CisgKi8KK3ZhciBzaW1wbGVDb2xvckZyYWdtZW50U2hhZGVyID0gWworICAncHJlY2lzaW9u
IG1lZGl1bXAgZmxvYXQ7JywKKyAgJ3VuaWZvcm0gdmVjNCB1X2NvbG9yOycsCisgICd2b2lkIG1h
aW4oKSB7JywKKyAgJyAgICBnbF9GcmFnRGF0YVswXSA9IHVfY29sb3I7JywKKyAgJ30nXS5qb2lu
KCdcbicpOworCisvKioKKyAqIEEgZnJhZ21lbnQgc2hhZGVyIGZvciBhIHVuaWZvcm0gY29sb3Iu
CisgKiBAdHlwZSB7c3RyaW5nfQorICovCit2YXIgc2ltcGxlQ29sb3JGcmFnbWVudFNoYWRlckVT
U0wzMDAgPSBbCisgICcjdmVyc2lvbiAzMDAgZXMnLAorICAncHJlY2lzaW9uIG1lZGl1bXAgZmxv
YXQ7JywKKyAgJ291dCB2ZWM0IG91dF9jb2xvcjsnLAorICAndW5pZm9ybSB2ZWM0IHVfY29sb3I7
JywKKyAgJ3ZvaWQgbWFpbigpIHsnLAorICAnICAgIG91dF9jb2xvciA9IHVfY29sb3I7JywKKyAg
J30nXS5qb2luKCdcbicpOworCisvKioKKyAqIEEgdmVydGV4IHNoYWRlciBmb3IgdmVydGV4IGNv
bG9ycy4KKyAqIEB0eXBlIHtzdHJpbmd9CisgKi8KK3ZhciBzaW1wbGVWZXJ0ZXhDb2xvclZlcnRl
eFNoYWRlciA9IFsKKyAgJ2F0dHJpYnV0ZSB2ZWM0IHZQb3NpdGlvbjsnLAorICAnYXR0cmlidXRl
IHZlYzQgYV9jb2xvcjsnLAorICAndmFyeWluZyB2ZWM0IHZfY29sb3I7JywKKyAgJ3ZvaWQgbWFp
bigpIHsnLAorICAnICAgIGdsX1Bvc2l0aW9uID0gdlBvc2l0aW9uOycsCisgICcgICAgdl9jb2xv
ciA9IGFfY29sb3I7JywKKyAgJ30nXS5qb2luKCdcbicpOworCisvKioKKyAqIEEgZnJhZ21lbnQg
c2hhZGVyIGZvciB2ZXJ0ZXggY29sb3JzLgorICogQHR5cGUge3N0cmluZ30KKyAqLwordmFyIHNp
bXBsZVZlcnRleENvbG9yRnJhZ21lbnRTaGFkZXIgPSBbCisgICdwcmVjaXNpb24gbWVkaXVtcCBm
bG9hdDsnLAorICAndmFyeWluZyB2ZWM0IHZfY29sb3I7JywKKyAgJ3ZvaWQgbWFpbigpIHsnLAor
ICAnICAgIGdsX0ZyYWdEYXRhWzBdID0gdl9jb2xvcjsnLAorICAnfSddLmpvaW4oJ1xuJyk7CisK
Ky8qKgorICogQ3JlYXRlcyBhIHByb2dyYW0sIGF0dGFjaGVzIHNoYWRlcnMsIGJpbmRzIGF0dHJp
YiBsb2NhdGlvbnMsIGxpbmtzIHRoZQorICogcHJvZ3JhbSBhbmQgY2FsbHMgdXNlUHJvZ3JhbS4K
KyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5n
Q29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0geyFBcnJheS48IVdlYkdMU2hhZGVyfHN0cmluZz59
IHNoYWRlcnMgVGhlIHNoYWRlcnMgdG8KKyAqICAgICAgICBhdHRhY2gsIG9yIHRoZSBzb3VyY2Us
IG9yIHRoZSBpZCBvZiBhIHNjcmlwdCB0byBnZXQKKyAqICAgICAgICB0aGUgc291cmNlIGZyb20u
CisgKiBAcGFyYW0geyFBcnJheS48c3RyaW5nPn0gb3B0X2F0dHJpYnMgVGhlIGF0dHJpYnMgbmFt
ZXMuCisgKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gb3B0X2xvY2F0aW9ucyBUaGUgbG9jYXRp
b25zIGZvciB0aGUgYXR0cmlicy4KKyAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0X2xvZ1NoYWRlcnMg
V2hldGhlciB0byBsb2cgc2hhZGVyIHNvdXJjZS4KKyAqLwordmFyIHNldHVwUHJvZ3JhbSA9IGZ1
bmN0aW9uKAorICAgIGdsLCBzaGFkZXJzLCBvcHRfYXR0cmlicywgb3B0X2xvY2F0aW9ucywgb3B0
X2xvZ1NoYWRlcnMpIHsKKyAgdmFyIHJlYWxTaGFkZXJzID0gW107CisgIHZhciBwcm9ncmFtID0g
Z2wuY3JlYXRlUHJvZ3JhbSgpOworICB2YXIgc2hhZGVyQ291bnQgPSAwOworICBmb3IgKHZhciBp
aSA9IDA7IGlpIDwgc2hhZGVycy5sZW5ndGg7ICsraWkpIHsKKyAgICB2YXIgc2hhZGVyID0gc2hh
ZGVyc1tpaV07CisgICAgdmFyIHNoYWRlclR5cGUgPSB1bmRlZmluZWQ7CisgICAgaWYgKHR5cGVv
ZiBzaGFkZXIgPT0gJ3N0cmluZycpIHsKKyAgICAgIHZhciBlbGVtZW50ID0gZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoc2hhZGVyKTsKKyAgICAgIGlmIChlbGVtZW50KSB7CisgICAgICAgIGlmIChl
bGVtZW50LnR5cGUgIT0gIngtc2hhZGVyL3gtdmVydGV4IiAmJiBlbGVtZW50LnR5cGUgIT0gIngt
c2hhZGVyL3gtZnJhZ21lbnQiKQorICAgICAgICAgIHNoYWRlclR5cGUgPSBpaSA/IGdsLkZSQUdN
RU5UX1NIQURFUiA6IGdsLlZFUlRFWF9TSEFERVI7CisgICAgICAgIHNoYWRlciA9IGxvYWRTaGFk
ZXJGcm9tU2NyaXB0KGdsLCBzaGFkZXIsIHNoYWRlclR5cGUsIHVuZGVmaW5lZCwgb3B0X2xvZ1No
YWRlcnMpOworICAgICAgfSBlbHNlIGlmIChlbmRzV2l0aChzaGFkZXIsICIudmVydCIpKSB7Cisg
ICAgICAgIHNoYWRlciA9IGxvYWRTaGFkZXJGcm9tRmlsZShnbCwgc2hhZGVyLCBnbC5WRVJURVhf
U0hBREVSLCB1bmRlZmluZWQsIG9wdF9sb2dTaGFkZXJzKTsKKyAgICAgIH0gZWxzZSBpZiAoZW5k
c1dpdGgoc2hhZGVyLCAiLmZyYWciKSkgeworICAgICAgICBzaGFkZXIgPSBsb2FkU2hhZGVyRnJv
bUZpbGUoZ2wsIHNoYWRlciwgZ2wuRlJBR01FTlRfU0hBREVSLCB1bmRlZmluZWQsIG9wdF9sb2dT
aGFkZXJzKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgIHNoYWRlciA9IGxvYWRTaGFkZXIoZ2ws
IHNoYWRlciwgaWkgPyBnbC5GUkFHTUVOVF9TSEFERVIgOiBnbC5WRVJURVhfU0hBREVSLCB1bmRl
ZmluZWQsIG9wdF9sb2dTaGFkZXJzKTsKKyAgICAgIH0KKyAgICB9IGVsc2UgaWYgKG9wdF9sb2dT
aGFkZXJzKSB7CisgICAgICB0aHJvdyAnU2hhZGVyIHNvdXJjZSBsb2dnaW5nIHJlcXVlc3RlZCBi
dXQgbm8gc2hhZGVyIHNvdXJjZSBwcm92aWRlZCc7CisgICAgfQorICAgIGlmIChzaGFkZXIpIHsK
KyAgICAgICsrc2hhZGVyQ291bnQ7CisgICAgICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgc2hh
ZGVyKTsKKyAgICB9CisgIH0KKyAgaWYgKHNoYWRlckNvdW50ICE9IDIpIHsKKyAgICBlcnJvcigi
RXJyb3IgaW4gY29tcGlsaW5nIHNoYWRlciIpOworICAgIHJldHVybiBudWxsOworICB9CisgIGlm
IChvcHRfYXR0cmlicykgeworICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCBvcHRfYXR0cmlicy5s
ZW5ndGg7ICsraWkpIHsKKyAgICAgIGdsLmJpbmRBdHRyaWJMb2NhdGlvbigKKyAgICAgICAgICBw
cm9ncmFtLAorICAgICAgICAgIG9wdF9sb2NhdGlvbnMgPyBvcHRfbG9jYXRpb25zW2lpXSA6IGlp
LAorICAgICAgICAgIG9wdF9hdHRyaWJzW2lpXSk7CisgICAgfQorICB9CisgIGdsLmxpbmtQcm9n
cmFtKHByb2dyYW0pOworCisgIC8vIENoZWNrIHRoZSBsaW5rIHN0YXR1cworICB2YXIgbGlua2Vk
ID0gZ2wuZ2V0UHJvZ3JhbVBhcmFtZXRlcihwcm9ncmFtLCBnbC5MSU5LX1NUQVRVUyk7CisgIGlm
ICghbGlua2VkKSB7CisgICAgICAvLyBzb21ldGhpbmcgd2VudCB3cm9uZyB3aXRoIHRoZSBsaW5r
CisgICAgICBsYXN0RXJyb3IgPSBnbC5nZXRQcm9ncmFtSW5mb0xvZyAocHJvZ3JhbSk7CisgICAg
ICBlcnJvcigiRXJyb3IgaW4gcHJvZ3JhbSBsaW5raW5nOiIgKyBsYXN0RXJyb3IpOworCisgICAg
ICBnbC5kZWxldGVQcm9ncmFtKHByb2dyYW0pOworICAgICAgcmV0dXJuIG51bGw7CisgIH0KKwor
ICBnbC51c2VQcm9ncmFtKHByb2dyYW0pOworICByZXR1cm4gcHJvZ3JhbTsKK307CisKKy8qKgor
ICogQ3JlYXRlcyBhIHByb2dyYW0sIGF0dGFjaGVzIHNoYWRlciwgc2V0cyB1cCB0cmFzbmZvcm0g
ZmVlZGJhY2sgdmFyeWluZ3MsCisgKiBiaW5kcyBhdHRyaWIgbG9jYXRpb25zLCBsaW5rcyB0aGUg
cHJvZ3JhbSBhbmQgY2FsbHMgdXNlUHJvZ3JhbS4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5n
Q29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0g
eyFBcnJheS48IVdlYkdMU2hhZGVyfHN0cmluZz59IHNoYWRlcnMgVGhlIHNoYWRlcnMgdG8KKyAq
ICAgICAgICBhdHRhY2gsIG9yIHRoZSBzb3VyY2UsIG9yIHRoZSBpZCBvZiBhIHNjcmlwdCB0byBn
ZXQKKyAqICAgICAgICB0aGUgc291cmNlIGZyb20uCisgKiBAcGFyYW0geyFBcnJheS48c3RyaW5n
Pn0gdmFyeWluZ3MgVGhlIHRyYW5zZm9ybSBmZWVkYmFjayB2YXJ5aW5nIG5hbWVzLgorICogQHBh
cmFtIHtudW1iZXJ9IGJ1ZmZlck1vZGUgVGhlIG1vZGUgdXNlZCB0byBjYXB0dXJlIHRoZSB2YXJ5
aW5nIHZhcmlhYmxlcy4KKyAqIEBwYXJhbSB7IUFycmF5LjxzdHJpbmc+fSBvcHRfYXR0cmlicyBU
aGUgYXR0cmlicyBuYW1lcy4KKyAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBvcHRfbG9jYXRp
b25zIFRoZSBsb2NhdGlvbnMgZm9yIHRoZSBhdHRyaWJzLgorICogQHBhcmFtIHtib29sZWFufSBv
cHRfbG9nU2hhZGVycyBXaGV0aGVyIHRvIGxvZyBzaGFkZXIgc291cmNlLgorICovCit2YXIgc2V0
dXBUcmFuc2Zvcm1GZWVkYmFja1Byb2dyYW0gPSBmdW5jdGlvbigKKyAgICBnbCwgc2hhZGVycywg
dmFyeWluZ3MsIGJ1ZmZlck1vZGUsIG9wdF9hdHRyaWJzLCBvcHRfbG9jYXRpb25zLCBvcHRfbG9n
U2hhZGVycywgb3B0X3NraXBDb21waWxlU3RhdHVzKSB7CisgIHZhciByZWFsU2hhZGVycyA9IFtd
OworICB2YXIgcHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTsKKyAgdmFyIHNoYWRlckNvdW50
ID0gMDsKKyAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IHNoYWRlcnMubGVuZ3RoOyArK2lpKSB7Cisg
ICAgdmFyIHNoYWRlciA9IHNoYWRlcnNbaWldOworICAgIHZhciBzaGFkZXJUeXBlID0gdW5kZWZp
bmVkOworICAgIGlmICh0eXBlb2Ygc2hhZGVyID09ICdzdHJpbmcnKSB7CisgICAgICB2YXIgZWxl
bWVudCA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKHNoYWRlcik7CisgICAgICBpZiAoZWxlbWVu
dCkgeworICAgICAgICBpZiAoZWxlbWVudC50eXBlICE9ICJ4LXNoYWRlci94LXZlcnRleCIgJiYg
ZWxlbWVudC50eXBlICE9ICJ4LXNoYWRlci94LWZyYWdtZW50IikKKyAgICAgICAgICBzaGFkZXJU
eXBlID0gaWkgPyBnbC5GUkFHTUVOVF9TSEFERVIgOiBnbC5WRVJURVhfU0hBREVSOworICAgICAg
ICBzaGFkZXIgPSBsb2FkU2hhZGVyRnJvbVNjcmlwdChnbCwgc2hhZGVyLCBzaGFkZXJUeXBlLCB1
bmRlZmluZWQsIG9wdF9sb2dTaGFkZXJzLCBvcHRfc2tpcENvbXBpbGVTdGF0dXMpOworICAgICAg
fSBlbHNlIGlmIChlbmRzV2l0aChzaGFkZXIsICIudmVydCIpKSB7CisgICAgICAgIHNoYWRlciA9
IGxvYWRTaGFkZXJGcm9tRmlsZShnbCwgc2hhZGVyLCBnbC5WRVJURVhfU0hBREVSLCB1bmRlZmlu
ZWQsIG9wdF9sb2dTaGFkZXJzLCBvcHRfc2tpcENvbXBpbGVTdGF0dXMpOworICAgICAgfSBlbHNl
IGlmIChlbmRzV2l0aChzaGFkZXIsICIuZnJhZyIpKSB7CisgICAgICAgIHNoYWRlciA9IGxvYWRT
aGFkZXJGcm9tRmlsZShnbCwgc2hhZGVyLCBnbC5GUkFHTUVOVF9TSEFERVIsIHVuZGVmaW5lZCwg
b3B0X2xvZ1NoYWRlcnMsIG9wdF9za2lwQ29tcGlsZVN0YXR1cyk7CisgICAgICB9IGVsc2Ugewor
ICAgICAgICBzaGFkZXIgPSBsb2FkU2hhZGVyKGdsLCBzaGFkZXIsIGlpID8gZ2wuRlJBR01FTlRf
U0hBREVSIDogZ2wuVkVSVEVYX1NIQURFUiwgdW5kZWZpbmVkLCBvcHRfbG9nU2hhZGVycywgdW5k
ZWZpbmVkLCB1bmRlZmluZWQsIG9wdF9za2lwQ29tcGlsZVN0YXR1cyk7CisgICAgICB9CisgICAg
fSBlbHNlIGlmIChvcHRfbG9nU2hhZGVycykgeworICAgICAgdGhyb3cgJ1NoYWRlciBzb3VyY2Ug
bG9nZ2luZyByZXF1ZXN0ZWQgYnV0IG5vIHNoYWRlciBzb3VyY2UgcHJvdmlkZWQnOworICAgIH0K
KyAgICBpZiAoc2hhZGVyKSB7CisgICAgICArK3NoYWRlckNvdW50OworICAgICAgZ2wuYXR0YWNo
U2hhZGVyKHByb2dyYW0sIHNoYWRlcik7CisgICAgfQorICB9CisgIGlmIChzaGFkZXJDb3VudCAh
PSAyKSB7CisgICAgZXJyb3IoIkVycm9yIGluIGNvbXBpbGluZyBzaGFkZXIiKTsKKyAgICByZXR1
cm4gbnVsbDsKKyAgfQorCisgIGlmIChvcHRfYXR0cmlicykgeworICAgIGZvciAodmFyIGlpID0g
MDsgaWkgPCBvcHRfYXR0cmlicy5sZW5ndGg7ICsraWkpIHsKKyAgICAgIGdsLmJpbmRBdHRyaWJM
b2NhdGlvbigKKyAgICAgICAgICBwcm9ncmFtLAorICAgICAgICAgIG9wdF9sb2NhdGlvbnMgPyBv
cHRfbG9jYXRpb25zW2lpXSA6IGlpLAorICAgICAgICAgIG9wdF9hdHRyaWJzW2lpXSk7CisgICAg
fQorICB9CisKKyAgZ2wudHJhbnNmb3JtRmVlZGJhY2tWYXJ5aW5ncyhwcm9ncmFtLCB2YXJ5aW5n
cywgYnVmZmVyTW9kZSk7CisKKyAgZ2wubGlua1Byb2dyYW0ocHJvZ3JhbSk7CisKKyAgLy8gQ2hl
Y2sgdGhlIGxpbmsgc3RhdHVzCisgIHZhciBsaW5rZWQgPSBnbC5nZXRQcm9ncmFtUGFyYW1ldGVy
KHByb2dyYW0sIGdsLkxJTktfU1RBVFVTKTsKKyAgaWYgKCFsaW5rZWQpIHsKKyAgICAgIC8vIHNv
bWV0aGluZyB3ZW50IHdyb25nIHdpdGggdGhlIGxpbmsKKyAgICAgIGxhc3RFcnJvciA9IGdsLmdl
dFByb2dyYW1JbmZvTG9nIChwcm9ncmFtKTsKKyAgICAgIGVycm9yKCJFcnJvciBpbiBwcm9ncmFt
IGxpbmtpbmc6IiArIGxhc3RFcnJvcik7CisKKyAgICAgIGdsLmRlbGV0ZVByb2dyYW0ocHJvZ3Jh
bSk7CisgICAgICByZXR1cm4gbnVsbDsKKyAgfQorCisgIGdsLnVzZVByb2dyYW0ocHJvZ3JhbSk7
CisgIHJldHVybiBwcm9ncmFtOworfTsKKworLyoqCisgKiBDcmVhdGVzIGEgc2ltcGxlIHRleHR1
cmUgcHJvZ3JhbS4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdl
YkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcmV0dXJuIHtXZWJHTFByb2dyYW19Cisg
Ki8KK3ZhciBzZXR1cE5vVGV4Q29vcmRUZXh0dXJlUHJvZ3JhbSA9IGZ1bmN0aW9uKGdsKSB7Cisg
IHJldHVybiBzZXR1cFByb2dyYW0oZ2wsCisgICAgICAgICAgICAgICAgICAgICAgW25vVGV4Q29v
cmRUZXh0dXJlVmVydGV4U2hhZGVyLCBzaW1wbGVUZXh0dXJlRnJhZ21lbnRTaGFkZXJdLAorICAg
ICAgICAgICAgICAgICAgICAgIFsndlBvc2l0aW9uJ10sCisgICAgICAgICAgICAgICAgICAgICAg
WzBdKTsKK307CisKKy8qKgorICogQ3JlYXRlcyBhIHNpbXBsZSB0ZXh0dXJlIHByb2dyYW0uCisg
KiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0Nv
bnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtudW1iZXJ9IG9wdF9wb3NpdGlvbkxvY2F0aW9uIFRo
ZSBhdHRyaWIgbG9jYXRpb24gZm9yIHBvc2l0aW9uLgorICogQHBhcmFtIHtudW1iZXJ9IG9wdF90
ZXhjb29yZExvY2F0aW9uIFRoZSBhdHRyaWIgbG9jYXRpb24gZm9yIHRleHR1cmUgY29vcmRzLgor
ICogQHBhcmFtIHtzdHJpbmd9IG9wdF9mcmFnbWVudFNoYWRlck92ZXJyaWRlIFRoZSBhbHRlcm5h
dGl2ZSBmcmFnbWVudCBzaGFkZXIgdG8gdXNlLgorICogQHJldHVybiB7V2ViR0xQcm9ncmFtfQor
ICovCit2YXIgc2V0dXBTaW1wbGVUZXh0dXJlUHJvZ3JhbSA9IGZ1bmN0aW9uKAorICAgIGdsLCBv
cHRfcG9zaXRpb25Mb2NhdGlvbiwgb3B0X3RleGNvb3JkTG9jYXRpb24sIG9wdF9mcmFnbWVudFNo
YWRlck92ZXJyaWRlKSB7CisgIG9wdF9wb3NpdGlvbkxvY2F0aW9uID0gb3B0X3Bvc2l0aW9uTG9j
YXRpb24gfHwgMDsKKyAgb3B0X3RleGNvb3JkTG9jYXRpb24gPSBvcHRfdGV4Y29vcmRMb2NhdGlv
biB8fCAxOworICBvcHRfZnJhZ21lbnRTaGFkZXJPdmVycmlkZSA9IG9wdF9mcmFnbWVudFNoYWRl
ck92ZXJyaWRlIHx8IHNpbXBsZVRleHR1cmVGcmFnbWVudFNoYWRlcjsKKyAgcmV0dXJuIHNldHVw
UHJvZ3JhbShnbCwKKyAgICAgICAgICAgICAgICAgICAgICBbc2ltcGxlVGV4dHVyZVZlcnRleFNo
YWRlciwgb3B0X2ZyYWdtZW50U2hhZGVyT3ZlcnJpZGVdLAorICAgICAgICAgICAgICAgICAgICAg
IFsndlBvc2l0aW9uJywgJ3RleENvb3JkMCddLAorICAgICAgICAgICAgICAgICAgICAgIFtvcHRf
cG9zaXRpb25Mb2NhdGlvbiwgb3B0X3RleGNvb3JkTG9jYXRpb25dKTsKK307CisKKy8qKgorICog
Q3JlYXRlcyBhIHNpbXBsZSB0ZXh0dXJlIHByb2dyYW0gdXNpbmcgZ2xzbCB2ZXJzaW9uIDMwMC4K
KyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5n
Q29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge251bWJlcn0gb3B0X3Bvc2l0aW9uTG9jYXRpb24g
VGhlIGF0dHJpYiBsb2NhdGlvbiBmb3IgcG9zaXRpb24uCisgKiBAcGFyYW0ge251bWJlcn0gb3B0
X3RleGNvb3JkTG9jYXRpb24gVGhlIGF0dHJpYiBsb2NhdGlvbiBmb3IgdGV4dHVyZSBjb29yZHMu
CisgKiBAcGFyYW0ge3N0cmluZ30gb3B0X2ZyYWdtZW50U2hhZGVyT3ZlcnJpZGUgVGhlIGFsdGVy
bmF0aXZlIGZyYWdtZW50IHNoYWRlciB0byB1c2UuCisgKiBAcmV0dXJuIHtXZWJHTFByb2dyYW19
CisgKi8KK3ZhciBzZXR1cFNpbXBsZVRleHR1cmVQcm9ncmFtRVNTTDMwMCA9IGZ1bmN0aW9uKAor
ICAgIGdsLCBvcHRfcG9zaXRpb25Mb2NhdGlvbiwgb3B0X3RleGNvb3JkTG9jYXRpb24sIG9wdF9m
cmFnbWVudFNoYWRlck92ZXJyaWRlKSB7CisgIG9wdF9wb3NpdGlvbkxvY2F0aW9uID0gb3B0X3Bv
c2l0aW9uTG9jYXRpb24gfHwgMDsKKyAgb3B0X3RleGNvb3JkTG9jYXRpb24gPSBvcHRfdGV4Y29v
cmRMb2NhdGlvbiB8fCAxOworICBvcHRfZnJhZ21lbnRTaGFkZXJPdmVycmlkZSA9IG9wdF9mcmFn
bWVudFNoYWRlck92ZXJyaWRlIHx8IHNpbXBsZVRleHR1cmVGcmFnbWVudFNoYWRlckVTU0wzMDA7
CisgIHJldHVybiBzZXR1cFByb2dyYW0oZ2wsCisgICAgICAgICAgICAgICAgICAgICAgW3NpbXBs
ZVRleHR1cmVWZXJ0ZXhTaGFkZXJFU1NMMzAwLCBvcHRfZnJhZ21lbnRTaGFkZXJPdmVycmlkZV0s
CisgICAgICAgICAgICAgICAgICAgICAgWyd2UG9zaXRpb24nLCAndGV4Q29vcmQwJ10sCisgICAg
ICAgICAgICAgICAgICAgICAgW29wdF9wb3NpdGlvbkxvY2F0aW9uLCBvcHRfdGV4Y29vcmRMb2Nh
dGlvbl0pOworfTsKKworLyoqCisgKiBDcmVhdGVzIGEgc2ltcGxlIGN1YmUgbWFwIHRleHR1cmUg
cHJvZ3JhbS4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdM
UmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge251bWJlcn0gb3B0X3Bvc2l0aW9u
TG9jYXRpb24gVGhlIGF0dHJpYiBsb2NhdGlvbiBmb3IgcG9zaXRpb24uCisgKiBAcGFyYW0ge251
bWJlcn0gb3B0X3RleGNvb3JkTG9jYXRpb24gVGhlIGF0dHJpYiBsb2NhdGlvbiBmb3IgdGV4dHVy
ZSBjb29yZHMuCisgKiBAcmV0dXJuIHtXZWJHTFByb2dyYW19CisgKi8KK3ZhciBzZXR1cFNpbXBs
ZUN1YmVNYXBUZXh0dXJlUHJvZ3JhbSA9IGZ1bmN0aW9uKAorICAgIGdsLCBvcHRfcG9zaXRpb25M
b2NhdGlvbiwgb3B0X3RleGNvb3JkTG9jYXRpb24pIHsKKyAgb3B0X3Bvc2l0aW9uTG9jYXRpb24g
PSBvcHRfcG9zaXRpb25Mb2NhdGlvbiB8fCAwOworICBvcHRfdGV4Y29vcmRMb2NhdGlvbiA9IG9w
dF90ZXhjb29yZExvY2F0aW9uIHx8IDE7CisgIHJldHVybiBzZXR1cFByb2dyYW0oZ2wsCisgICAg
ICAgICAgICAgICAgICAgICAgW3NpbXBsZVRleHR1cmVWZXJ0ZXhTaGFkZXIsIHNpbXBsZUN1YmVN
YXBUZXh0dXJlRnJhZ21lbnRTaGFkZXJdLAorICAgICAgICAgICAgICAgICAgICAgIFsndlBvc2l0
aW9uJywgJ3RleENvb3JkMCddLAorICAgICAgICAgICAgICAgICAgICAgIFtvcHRfcG9zaXRpb25M
b2NhdGlvbiwgb3B0X3RleGNvb3JkTG9jYXRpb25dKTsKK307CisKKy8qKgorICogQ3JlYXRlcyBh
IHNpbXBsZSB2ZXJ0ZXggY29sb3IgcHJvZ3JhbS4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5n
Q29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0g
e251bWJlcn0gb3B0X3Bvc2l0aW9uTG9jYXRpb24gVGhlIGF0dHJpYiBsb2NhdGlvbiBmb3IgcG9z
aXRpb24uCisgKiBAcGFyYW0ge251bWJlcn0gb3B0X3ZlcnRleENvbG9yTG9jYXRpb24gVGhlIGF0
dHJpYiBsb2NhdGlvbgorICogICAgICAgIGZvciB2ZXJ0ZXggY29sb3JzLgorICogQHJldHVybiB7
V2ViR0xQcm9ncmFtfQorICovCit2YXIgc2V0dXBTaW1wbGVWZXJ0ZXhDb2xvclByb2dyYW0gPSBm
dW5jdGlvbigKKyAgICBnbCwgb3B0X3Bvc2l0aW9uTG9jYXRpb24sIG9wdF92ZXJ0ZXhDb2xvckxv
Y2F0aW9uKSB7CisgIG9wdF9wb3NpdGlvbkxvY2F0aW9uID0gb3B0X3Bvc2l0aW9uTG9jYXRpb24g
fHwgMDsKKyAgb3B0X3ZlcnRleENvbG9yTG9jYXRpb24gPSBvcHRfdmVydGV4Q29sb3JMb2NhdGlv
biB8fCAxOworICByZXR1cm4gc2V0dXBQcm9ncmFtKGdsLAorICAgICAgICAgICAgICAgICAgICAg
IFtzaW1wbGVWZXJ0ZXhDb2xvclZlcnRleFNoYWRlciwgc2ltcGxlVmVydGV4Q29sb3JGcmFnbWVu
dFNoYWRlcl0sCisgICAgICAgICAgICAgICAgICAgICAgWyd2UG9zaXRpb24nLCAnYV9jb2xvcidd
LAorICAgICAgICAgICAgICAgICAgICAgIFtvcHRfcG9zaXRpb25Mb2NhdGlvbiwgb3B0X3ZlcnRl
eENvbG9yTG9jYXRpb25dKTsKK307CisKKy8qKgorICogQ3JlYXRlcyBhIHNpbXBsZSBjb2xvciBw
cm9ncmFtLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7bnVtYmVyfSBvcHRfcG9zaXRpb25M
b2NhdGlvbiBUaGUgYXR0cmliIGxvY2F0aW9uIGZvciBwb3NpdGlvbi4KKyAqIEByZXR1cm4ge1dl
YkdMUHJvZ3JhbX0KKyAqLwordmFyIHNldHVwU2ltcGxlQ29sb3JQcm9ncmFtID0gZnVuY3Rpb24o
Z2wsIG9wdF9wb3NpdGlvbkxvY2F0aW9uKSB7CisgIG9wdF9wb3NpdGlvbkxvY2F0aW9uID0gb3B0
X3Bvc2l0aW9uTG9jYXRpb24gfHwgMDsKKyAgcmV0dXJuIHNldHVwUHJvZ3JhbShnbCwKKyAgICAg
ICAgICAgICAgICAgICAgICBbc2ltcGxlVmVydGV4U2hhZGVyLCBzaW1wbGVDb2xvckZyYWdtZW50
U2hhZGVyXSwKKyAgICAgICAgICAgICAgICAgICAgICBbJ3ZQb3NpdGlvbiddLAorICAgICAgICAg
ICAgICAgICAgICAgIFtvcHRfcG9zaXRpb25Mb2NhdGlvbl0pOworfTsKKworLyoqCisgKiBDcmVh
dGVzIGJ1ZmZlcnMgZm9yIGEgdGV4dHVyZWQgdW5pdCBxdWFkIGFuZCBhdHRhY2hlcyB0aGVtIHRv
IHZlcnRleCBhdHRyaWJzLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBU
aGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7bnVtYmVyfSBvcHRf
cG9zaXRpb25Mb2NhdGlvbiBUaGUgYXR0cmliIGxvY2F0aW9uIGZvciBwb3NpdGlvbi4KKyAqIEBw
YXJhbSB7bnVtYmVyfSBvcHRfdGV4Y29vcmRMb2NhdGlvbiBUaGUgYXR0cmliIGxvY2F0aW9uIGZv
ciB0ZXh0dXJlIGNvb3Jkcy4KKyAqIEBwYXJhbSB7IU9iamVjdH0gdmFyaW91cyBvcHRpb25zLiBT
ZWUgc2V0dXBRdWFkIGZvciBkZXRhaWxzLgorICogQHJldHVybiB7IUFycmF5LjxXZWJHTEJ1ZmZl
cj59IFRoZSBidWZmZXIgb2JqZWN0cyB0aGF0IHdlcmUKKyAqICAgICAgY3JlYXRlZC4KKyAqLwor
dmFyIHNldHVwVW5pdFF1YWQgPSBmdW5jdGlvbihnbCwgb3B0X3Bvc2l0aW9uTG9jYXRpb24sIG9w
dF90ZXhjb29yZExvY2F0aW9uLCBvcHRpb25zKSB7CisgIHJldHVybiBzZXR1cFF1YWRXaXRoVGV4
Q29vcmRzKGdsLCBbIDAuMCwgMC4wIF0sIFsgMS4wLCAxLjAgXSwKKyAgICAgICAgICAgICAgICAg
ICAgICAgICAgICAgICAgb3B0X3Bvc2l0aW9uTG9jYXRpb24sIG9wdF90ZXhjb29yZExvY2F0aW9u
LAorICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBvcHRpb25zKTsKK307CisKKy8qKgor
ICogQ3JlYXRlcyBidWZmZXJzIGZvciBhIHRleHR1cmVkIHF1YWQgd2l0aCBzcGVjaWZpZWQgbG93
ZXIgbGVmdAorICogYW5kIHVwcGVyIHJpZ2h0IHRleHR1cmUgY29vcmRpbmF0ZXMsIGFuZCBhdHRh
Y2hlcyB0aGVtIHRvIHZlcnRleAorICogYXR0cmlicy4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVy
aW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFy
YW0geyFBcnJheS48bnVtYmVyPn0gbG93ZXJMZWZ0VGV4Q29vcmRzIFRoZSB0ZXh0dXJlIGNvb3Jk
aW5hdGVzIGZvciB0aGUgbG93ZXIgbGVmdCBjb3JuZXIuCisgKiBAcGFyYW0geyFBcnJheS48bnVt
YmVyPn0gdXBwZXJSaWdodFRleENvb3JkcyBUaGUgdGV4dHVyZSBjb29yZGluYXRlcyBmb3IgdGhl
IHVwcGVyIHJpZ2h0IGNvcm5lci4KKyAqIEBwYXJhbSB7bnVtYmVyfSBvcHRfcG9zaXRpb25Mb2Nh
dGlvbiBUaGUgYXR0cmliIGxvY2F0aW9uIGZvciBwb3NpdGlvbi4KKyAqIEBwYXJhbSB7bnVtYmVy
fSBvcHRfdGV4Y29vcmRMb2NhdGlvbiBUaGUgYXR0cmliIGxvY2F0aW9uIGZvciB0ZXh0dXJlIGNv
b3Jkcy4KKyAqIEBwYXJhbSB7IU9iamVjdH0gdmFyaW91cyBvcHRpb25zLiBTZWUgc2V0dXBRdWFk
IGZvciBkZXRhaWxzLgorICogQHJldHVybiB7IUFycmF5LjxXZWJHTEJ1ZmZlcj59IFRoZSBidWZm
ZXIgb2JqZWN0cyB0aGF0IHdlcmUKKyAqICAgICAgY3JlYXRlZC4KKyAqLwordmFyIHNldHVwUXVh
ZFdpdGhUZXhDb29yZHMgPSBmdW5jdGlvbigKKyAgICBnbCwgbG93ZXJMZWZ0VGV4Q29vcmRzLCB1
cHBlclJpZ2h0VGV4Q29vcmRzLAorICAgIG9wdF9wb3NpdGlvbkxvY2F0aW9uLCBvcHRfdGV4Y29v
cmRMb2NhdGlvbiwgb3B0aW9ucykgeworICB2YXIgZGVmYXVsdE9wdGlvbnMgPSB7CisgICAgcG9z
aXRpb25Mb2NhdGlvbjogb3B0X3Bvc2l0aW9uTG9jYXRpb24gfHwgMCwKKyAgICB0ZXhjb29yZExv
Y2F0aW9uOiBvcHRfdGV4Y29vcmRMb2NhdGlvbiB8fCAxLAorICAgIGxvd2VyTGVmdFRleENvb3Jk
czogbG93ZXJMZWZ0VGV4Q29vcmRzLAorICAgIHVwcGVyUmlnaHRUZXhDb29yZHM6IHVwcGVyUmln
aHRUZXhDb29yZHMKKyAgfTsKKyAgaWYgKG9wdGlvbnMpIHsKKyAgICBmb3IgKHZhciBwcm9wIGlu
IG9wdGlvbnMpIHsKKyAgICAgIGRlZmF1bHRPcHRpb25zW3Byb3BdID0gb3B0aW9uc1twcm9wXQor
ICAgIH0KKyAgfQorICByZXR1cm4gc2V0dXBRdWFkKGdsLCBkZWZhdWx0T3B0aW9ucyk7Cit9Owor
CisvKioKKyAqIE1ha2VzIGEgcXVhZCB3aXRoIHZhcmlvdXMgb3B0aW9ucy4KKyAqIEBwYXJhbSB7
IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1
c2UuCisgKiBAcGFyYW0geyFPYmplY3R9IG9wdGlvbnMKKyAqCisgKiBzY2FsZTogc2NhbGUgdG8g
bXVsdGlwbHkgdW5pdCBxdWFkIHZhbHVlcyBieS4gZGVmYXVsdCAxLjAuCisgKiBwb3NpdGlvbkxv
Y2F0aW9uOiBhdHRyaWJ1dGUgbG9jYXRpb24gZm9yIHBvc2l0aW9uLgorICogdGV4Y29vcmRMb2Nh
dGlvbjogYXR0cmlidXRlIGxvY2F0aW9uIGZvciB0ZXhjb29yZHMuCisgKiAgICAgSWYgdGhpcyBk
b2VzIG5vdCBleGlzdCBubyB0ZXh0dXJlIGNvb3JkcyBhcmUgY3JlYXRlZC4KKyAqIGxvd2VyTGVm
dFRleENvb3JkczogYW4gYXJyYXkgb2YgMiB2YWx1ZXMgZm9yIHRoZQorICogICAgIGxvd2VyTGVm
dFRleENvb3Jkcy4KKyAqIHVwcGVyUmlnaHRUZXhDb29yZHM6IGFuIGFycmF5IG9mIDIgdmFsdWVz
IGZvciB0aGUKKyAqICAgICB1cHBlclJpZ2h0VGV4Q29vcmRzLgorICovCit2YXIgc2V0dXBRdWFk
ID0gZnVuY3Rpb24oZ2wsIG9wdGlvbnMpIHsKKyAgdmFyIHBvc2l0aW9uTG9jYXRpb24gPSBvcHRp
b25zLnBvc2l0aW9uTG9jYXRpb24gfHwgMDsKKyAgdmFyIHNjYWxlID0gb3B0aW9ucy5zY2FsZSB8
fCAxOworCisgIHZhciBvYmplY3RzID0gW107CisKKyAgdmFyIHZlcnRleE9iamVjdCA9IGdsLmNy
ZWF0ZUJ1ZmZlcigpOworICBnbC5iaW5kQnVmZmVyKGdsLkFSUkFZX0JVRkZFUiwgdmVydGV4T2Jq
ZWN0KTsKKyAgZ2wuYnVmZmVyRGF0YShnbC5BUlJBWV9CVUZGRVIsIG5ldyBGbG9hdDMyQXJyYXko
WworICAgICAgIDEuMCAqIHNjYWxlICwgIDEuMCAqIHNjYWxlLAorICAgICAgLTEuMCAqIHNjYWxl
ICwgIDEuMCAqIHNjYWxlLAorICAgICAgLTEuMCAqIHNjYWxlICwgLTEuMCAqIHNjYWxlLAorICAg
ICAgIDEuMCAqIHNjYWxlICwgIDEuMCAqIHNjYWxlLAorICAgICAgLTEuMCAqIHNjYWxlICwgLTEu
MCAqIHNjYWxlLAorICAgICAgIDEuMCAqIHNjYWxlICwgLTEuMCAqIHNjYWxlXSksIGdsLlNUQVRJ
Q19EUkFXKTsKKyAgZ2wuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkocG9zaXRpb25Mb2NhdGlvbik7
CisgIGdsLnZlcnRleEF0dHJpYlBvaW50ZXIocG9zaXRpb25Mb2NhdGlvbiwgMiwgZ2wuRkxPQVQs
IGZhbHNlLCAwLCAwKTsKKyAgb2JqZWN0cy5wdXNoKHZlcnRleE9iamVjdCk7CisKKyAgaWYgKG9w
dGlvbnMudGV4Y29vcmRMb2NhdGlvbiAhPT0gdW5kZWZpbmVkKSB7CisgICAgdmFyIGxseCA9IG9w
dGlvbnMubG93ZXJMZWZ0VGV4Q29vcmRzWzBdOworICAgIHZhciBsbHkgPSBvcHRpb25zLmxvd2Vy
TGVmdFRleENvb3Jkc1sxXTsKKyAgICB2YXIgdXJ4ID0gb3B0aW9ucy51cHBlclJpZ2h0VGV4Q29v
cmRzWzBdOworICAgIHZhciB1cnkgPSBvcHRpb25zLnVwcGVyUmlnaHRUZXhDb29yZHNbMV07CisK
KyAgICB2ZXJ0ZXhPYmplY3QgPSBnbC5jcmVhdGVCdWZmZXIoKTsKKyAgICBnbC5iaW5kQnVmZmVy
KGdsLkFSUkFZX0JVRkZFUiwgdmVydGV4T2JqZWN0KTsKKyAgICBnbC5idWZmZXJEYXRhKGdsLkFS
UkFZX0JVRkZFUiwgbmV3IEZsb2F0MzJBcnJheShbCisgICAgICAgIHVyeCwgdXJ5LAorICAgICAg
ICBsbHgsIHVyeSwKKyAgICAgICAgbGx4LCBsbHksCisgICAgICAgIHVyeCwgdXJ5LAorICAgICAg
ICBsbHgsIGxseSwKKyAgICAgICAgdXJ4LCBsbHldKSwgZ2wuU1RBVElDX0RSQVcpOworICAgIGds
LmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KG9wdGlvbnMudGV4Y29vcmRMb2NhdGlvbik7CisgICAg
Z2wudmVydGV4QXR0cmliUG9pbnRlcihvcHRpb25zLnRleGNvb3JkTG9jYXRpb24sIDIsIGdsLkZM
T0FULCBmYWxzZSwgMCwgMCk7CisgICAgb2JqZWN0cy5wdXNoKHZlcnRleE9iamVjdCk7CisgIH0K
KworICByZXR1cm4gb2JqZWN0czsKK307CisKKy8qKgorICogQ3JlYXRlcyBhIHByb2dyYW0gYW5k
IGJ1ZmZlcnMgZm9yIHJlbmRlcmluZyBhIHRleHR1cmVkIHF1YWQuCisgKiBAcGFyYW0geyFXZWJH
TFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgor
ICogQHBhcmFtIHtudW1iZXJ9IG9wdF9wb3NpdGlvbkxvY2F0aW9uIFRoZSBhdHRyaWIgbG9jYXRp
b24gZm9yCisgKiAgICAgICAgcG9zaXRpb24uIERlZmF1bHQgPSAwLgorICogQHBhcmFtIHtudW1i
ZXJ9IG9wdF90ZXhjb29yZExvY2F0aW9uIFRoZSBhdHRyaWIgbG9jYXRpb24gZm9yCisgKiAgICAg
ICAgdGV4dHVyZSBjb29yZHMuIERlZmF1bHQgPSAxLgorICogQHBhcmFtIHshT2JqZWN0fSB2YXJp
b3VzIG9wdGlvbnMgZGVmaW5lZCBieSBzZXR1cFF1YWQsIHBsdXMgYW4gb3B0aW9uCisgICAgICAg
ICAgZnJhZ21lbnRTaGFkZXJPdmVycmlkZSB0byBzcGVjaWZ5IGEgY3VzdG9tIGZyYWdtZW50IHNo
YWRlci4KKyAqIEByZXR1cm4geyFXZWJHTFByb2dyYW19CisgKi8KK3ZhciBzZXR1cFRleHR1cmVk
UXVhZCA9IGZ1bmN0aW9uKAorICAgIGdsLCBvcHRfcG9zaXRpb25Mb2NhdGlvbiwgb3B0X3RleGNv
b3JkTG9jYXRpb24sIG9wdGlvbnMpIHsKKyAgdmFyIHByb2dyYW0gPSBzZXR1cFNpbXBsZVRleHR1
cmVQcm9ncmFtKAorICAgICAgZ2wsIG9wdF9wb3NpdGlvbkxvY2F0aW9uLCBvcHRfdGV4Y29vcmRM
b2NhdGlvbiwgb3B0aW9ucyAmJiBvcHRpb25zLmZyYWdtZW50U2hhZGVyT3ZlcnJpZGUpOworICBz
ZXR1cFVuaXRRdWFkKGdsLCBvcHRfcG9zaXRpb25Mb2NhdGlvbiwgb3B0X3RleGNvb3JkTG9jYXRp
b24sIG9wdGlvbnMpOworICByZXR1cm4gcHJvZ3JhbTsKK307CisKKy8qKgorICogQ3JlYXRlcyBh
IHByb2dyYW0gYW5kIGJ1ZmZlcnMgZm9yIHJlbmRlcmluZyBhIGNvbG9yIHF1YWQuCisgKiBAcGFy
YW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQg
dG8gdXNlLgorICogQHBhcmFtIHtudW1iZXJ9IG9wdF9wb3NpdGlvbkxvY2F0aW9uIFRoZSBhdHRy
aWIgbG9jYXRpb24gZm9yIHBvc2l0aW9uLgorICogQHBhcmFtIHshT2JqZWN0fSB2YXJpb3VzIG9w
dGlvbnMuIFNlZSBzZXR1cFF1YWQgZm9yIGRldGFpbHMuCisgKiBAcmV0dXJuIHshV2ViR0xQcm9n
cmFtfQorICovCit2YXIgc2V0dXBDb2xvclF1YWQgPSBmdW5jdGlvbihnbCwgb3B0X3Bvc2l0aW9u
TG9jYXRpb24sIG9wdGlvbnMpIHsKKyAgb3B0X3Bvc2l0aW9uTG9jYXRpb24gPSBvcHRfcG9zaXRp
b25Mb2NhdGlvbiB8fCAwOworICB2YXIgcHJvZ3JhbSA9IHNldHVwU2ltcGxlQ29sb3JQcm9ncmFt
KGdsLCBvcHRfcG9zaXRpb25Mb2NhdGlvbik7CisgIHNldHVwVW5pdFF1YWQoZ2wsIG9wdF9wb3Np
dGlvbkxvY2F0aW9uLCAwLCBvcHRpb25zKTsKKyAgcmV0dXJuIHByb2dyYW07Cit9OworCisvKioK
KyAqIENyZWF0ZXMgYSBwcm9ncmFtIGFuZCBidWZmZXJzIGZvciByZW5kZXJpbmcgYSB0ZXh0dXJl
ZCBxdWFkIHdpdGgKKyAqIHNwZWNpZmllZCBsb3dlciBsZWZ0IGFuZCB1cHBlciByaWdodCB0ZXh0
dXJlIGNvb3JkaW5hdGVzLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBU
aGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7IUFycmF5LjxudW1i
ZXI+fSBsb3dlckxlZnRUZXhDb29yZHMgVGhlIHRleHR1cmUgY29vcmRpbmF0ZXMgZm9yIHRoZSBs
b3dlciBsZWZ0IGNvcm5lci4KKyAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSB1cHBlclJpZ2h0
VGV4Q29vcmRzIFRoZSB0ZXh0dXJlIGNvb3JkaW5hdGVzIGZvciB0aGUgdXBwZXIgcmlnaHQgY29y
bmVyLgorICogQHBhcmFtIHtudW1iZXJ9IG9wdF9wb3NpdGlvbkxvY2F0aW9uIFRoZSBhdHRyaWIg
bG9jYXRpb24gZm9yIHBvc2l0aW9uLgorICogQHBhcmFtIHtudW1iZXJ9IG9wdF90ZXhjb29yZExv
Y2F0aW9uIFRoZSBhdHRyaWIgbG9jYXRpb24gZm9yIHRleHR1cmUgY29vcmRzLgorICogQHJldHVy
biB7IVdlYkdMUHJvZ3JhbX0KKyAqLwordmFyIHNldHVwVGV4dHVyZWRRdWFkV2l0aFRleENvb3Jk
cyA9IGZ1bmN0aW9uKAorICAgIGdsLCBsb3dlckxlZnRUZXhDb29yZHMsIHVwcGVyUmlnaHRUZXhD
b29yZHMsCisgICAgb3B0X3Bvc2l0aW9uTG9jYXRpb24sIG9wdF90ZXhjb29yZExvY2F0aW9uKSB7
CisgIHZhciBwcm9ncmFtID0gc2V0dXBTaW1wbGVUZXh0dXJlUHJvZ3JhbSgKKyAgICAgIGdsLCBv
cHRfcG9zaXRpb25Mb2NhdGlvbiwgb3B0X3RleGNvb3JkTG9jYXRpb24pOworICBzZXR1cFF1YWRX
aXRoVGV4Q29vcmRzKGdsLCBsb3dlckxlZnRUZXhDb29yZHMsIHVwcGVyUmlnaHRUZXhDb29yZHMs
CisgICAgICAgICAgICAgICAgICAgICAgICAgb3B0X3Bvc2l0aW9uTG9jYXRpb24sIG9wdF90ZXhj
b29yZExvY2F0aW9uKTsKKyAgcmV0dXJuIHByb2dyYW07Cit9OworCisvKioKKyAqIENyZWF0ZXMg
YSBwcm9ncmFtIGFuZCBidWZmZXJzIGZvciByZW5kZXJpbmcgYSB0ZXh0dXJlZCBxdWFkIHdpdGgK
KyAqIGEgY3ViZSBtYXAgdGV4dHVyZS4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4
dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge251bWJl
cn0gb3B0X3Bvc2l0aW9uTG9jYXRpb24gVGhlIGF0dHJpYiBsb2NhdGlvbiBmb3IKKyAqICAgICAg
ICBwb3NpdGlvbi4gRGVmYXVsdCA9IDAuCisgKiBAcGFyYW0ge251bWJlcn0gb3B0X3RleGNvb3Jk
TG9jYXRpb24gVGhlIGF0dHJpYiBsb2NhdGlvbiBmb3IKKyAqICAgICAgICB0ZXh0dXJlIGNvb3Jk
cy4gRGVmYXVsdCA9IDEuCisgKiBAcmV0dXJuIHshV2ViR0xQcm9ncmFtfQorICovCit2YXIgc2V0
dXBUZXh0dXJlZFF1YWRXaXRoQ3ViZU1hcCA9IGZ1bmN0aW9uKAorICAgIGdsLCBvcHRfcG9zaXRp
b25Mb2NhdGlvbiwgb3B0X3RleGNvb3JkTG9jYXRpb24pIHsKKyAgdmFyIHByb2dyYW0gPSBzZXR1
cFNpbXBsZUN1YmVNYXBUZXh0dXJlUHJvZ3JhbSgKKyAgICAgIGdsLCBvcHRfcG9zaXRpb25Mb2Nh
dGlvbiwgb3B0X3RleGNvb3JkTG9jYXRpb24pOworICBzZXR1cFVuaXRRdWFkKGdsLCBvcHRfcG9z
aXRpb25Mb2NhdGlvbiwgb3B0X3RleGNvb3JkTG9jYXRpb24sIHVuZGVmaW5lZCk7CisgIHJldHVy
biBwcm9ncmFtOworfTsKKworLyoqCisgKiBDcmVhdGVzIGEgdW5pdCBxdWFkIHdpdGggb25seSBw
b3NpdGlvbnMgb2YgYSBnaXZlbiByZXNvbHV0aW9uLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJp
bmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJh
bSB7bnVtYmVyfSBncmlkUmVzIFRoZSByZXNvbHV0aW9uIG9mIHRoZSBtZXNoIGdyaWQsCisgKiAg
ICAgZXhwcmVzc2VkIGluIHRoZSBudW1iZXIgb2YgcXVhZHMgYWNyb3NzIGFuZCBkb3duLgorICog
QHBhcmFtIHtudW1iZXJ9IG9wdF9wb3NpdGlvbkxvY2F0aW9uIFRoZSBhdHRyaWIgbG9jYXRpb24g
Zm9yIHBvc2l0aW9uLgorICovCit2YXIgc2V0dXBJbmRleGVkUXVhZCA9IGZ1bmN0aW9uICgKKyAg
ICBnbCwgZ3JpZFJlcywgb3B0X3Bvc2l0aW9uTG9jYXRpb24sIG9wdF9mbGlwT2RkVHJpYW5nbGVz
KSB7CisgIHJldHVybiBzZXR1cEluZGV4ZWRRdWFkV2l0aE9wdGlvbnMoZ2wsCisgICAgeyBncmlk
UmVzOiBncmlkUmVzLAorICAgICAgcG9zaXRpb25Mb2NhdGlvbjogb3B0X3Bvc2l0aW9uTG9jYXRp
b24sCisgICAgICBmbGlwT2RkVHJpYW5nbGVzOiBvcHRfZmxpcE9kZFRyaWFuZ2xlcworICAgIH0p
OworfTsKKworLyoqCisgKiBDcmVhdGVzIGEgcXVhZCB3aXRoIHZhcmlvdXMgb3B0aW9ucy4KKyAq
IEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCB0byB1c2UuCisgKiBAcGFyYW0geyFPYmplY3R9IG9wdGlvbnMgVGhlIG9wdGlvbnMuIFNl
ZSBiZWxvdy4KKyAqIEByZXR1cm4geyFBcnJheS48V2ViR0xCdWZmZXI+fSBUaGUgY3JlYXRlZCBi
dWZmZXJzLgorICogICAgIFtwb3NpdGlvbnMsIDxjb2xvcnM+LCBpbmRpY2VzXQorICoKKyAqIE9w
dGlvbnM6CisgKiAgIGdyaWRSZXM6IG51bWJlciBvZiBxdWFkcyBhY3Jvc3MgYW5kIGRvd24gZ3Jp
ZC4KKyAqICAgcG9zaXRpb25Mb2NhdGlvbjogYXR0cmliIGxvY2F0aW9uIGZvciBwb3NpdGlvbgor
ICogICBmbGlwT2RkVHJpYW5nbGVzOiByZXZlcnNlIG9yZGVyIG9mIHZlcnRpY2VzIG9mIGV2ZXJ5
IG90aGVyCisgKiAgICAgICB0cmlhbmdsZQorICogICBwb3NpdGlvbk9mZnNldDogb2Zmc2V0IGFk
ZGVkIHRvIGVhY2ggdmVydGV4CisgKiAgIHBvc2l0aW9uTXVsdDogbXVsdGlwaWVyIGZvciBlYWNo
IHZlcnRleAorICogICBjb2xvckxvY2F0aW9uOiBhdHRyaWIgbG9jYXRpb24gZm9yIHZlcnRleCBj
b2xvcnMuIElmCisgKiAgICAgIHVuZGVmaW5lZCBubyB2ZXJ0ZXggY29sb3JzIHdpbGwgYmUgY3Jl
YXRlZC4KKyAqLwordmFyIHNldHVwSW5kZXhlZFF1YWRXaXRoT3B0aW9ucyA9IGZ1bmN0aW9uIChn
bCwgb3B0aW9ucykgeworICB2YXIgcG9zaXRpb25Mb2NhdGlvbiA9IG9wdGlvbnMucG9zaXRpb25M
b2NhdGlvbiB8fCAwOworICB2YXIgb2JqZWN0cyA9IFtdOworCisgIHZhciBncmlkUmVzID0gb3B0
aW9ucy5ncmlkUmVzIHx8IDE7CisgIHZhciBwb3NpdGlvbk9mZnNldCA9IG9wdGlvbnMucG9zaXRp
b25PZmZzZXQgfHwgMDsKKyAgdmFyIHBvc2l0aW9uTXVsdCA9IG9wdGlvbnMucG9zaXRpb25NdWx0
IHx8IDE7CisgIHZhciB2ZXJ0c0Fjcm9zcyA9IGdyaWRSZXMgKyAxOworICB2YXIgbnVtVmVydHMg
PSB2ZXJ0c0Fjcm9zcyAqIHZlcnRzQWNyb3NzOworICB2YXIgcG9zaXRpb25zID0gbmV3IEZsb2F0
MzJBcnJheShudW1WZXJ0cyAqIDMpOworICB2YXIgaW5kaWNlcyA9IG5ldyBVaW50MTZBcnJheSg2
ICogZ3JpZFJlcyAqIGdyaWRSZXMpOworICB2YXIgcG9mZnNldCA9IDA7CisKKyAgZm9yICh2YXIg
eXkgPSAwOyB5eSA8PSBncmlkUmVzOyArK3l5KSB7CisgICAgZm9yICh2YXIgeHggPSAwOyB4eCA8
PSBncmlkUmVzOyArK3h4KSB7CisgICAgICBwb3NpdGlvbnNbcG9mZnNldCArIDBdID0gKC0xICsg
MiAqIHh4IC8gZ3JpZFJlcykgKiBwb3NpdGlvbk11bHQgKyBwb3NpdGlvbk9mZnNldDsKKyAgICAg
IHBvc2l0aW9uc1twb2Zmc2V0ICsgMV0gPSAoLTEgKyAyICogeXkgLyBncmlkUmVzKSAqIHBvc2l0
aW9uTXVsdCArIHBvc2l0aW9uT2Zmc2V0OworICAgICAgcG9zaXRpb25zW3BvZmZzZXQgKyAyXSA9
IDA7CisKKyAgICAgIHBvZmZzZXQgKz0gMzsKKyAgICB9CisgIH0KKworICB2YXIgYnVmID0gZ2wu
Y3JlYXRlQnVmZmVyKCk7CisgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBidWYpOwor
ICBnbC5idWZmZXJEYXRhKGdsLkFSUkFZX0JVRkZFUiwgcG9zaXRpb25zLCBnbC5TVEFUSUNfRFJB
Vyk7CisgIGdsLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KHBvc2l0aW9uTG9jYXRpb24pOworICBn
bC52ZXJ0ZXhBdHRyaWJQb2ludGVyKHBvc2l0aW9uTG9jYXRpb24sIDMsIGdsLkZMT0FULCBmYWxz
ZSwgMCwgMCk7CisgIG9iamVjdHMucHVzaChidWYpOworCisgIGlmIChvcHRpb25zLmNvbG9yTG9j
YXRpb24gIT09IHVuZGVmaW5lZCkgeworICAgIHZhciBjb2xvcnMgPSBuZXcgRmxvYXQzMkFycmF5
KG51bVZlcnRzICogNCk7CisgICAgcG9mZnNldCA9IDA7CisgICAgZm9yICh2YXIgeXkgPSAwOyB5
eSA8PSBncmlkUmVzOyArK3l5KSB7CisgICAgICBmb3IgKHZhciB4eCA9IDA7IHh4IDw9IGdyaWRS
ZXM7ICsreHgpIHsKKyAgICAgICAgaWYgKG9wdGlvbnMuY29sb3IgIT09IHVuZGVmaW5lZCkgewor
ICAgICAgICAgIGNvbG9yc1twb2Zmc2V0ICsgMF0gPSBvcHRpb25zLmNvbG9yWzBdOworICAgICAg
ICAgIGNvbG9yc1twb2Zmc2V0ICsgMV0gPSBvcHRpb25zLmNvbG9yWzFdOworICAgICAgICAgIGNv
bG9yc1twb2Zmc2V0ICsgMl0gPSBvcHRpb25zLmNvbG9yWzJdOworICAgICAgICAgIGNvbG9yc1tw
b2Zmc2V0ICsgM10gPSBvcHRpb25zLmNvbG9yWzNdOworICAgICAgICB9IGVsc2UgeworICAgICAg
ICAgIGNvbG9yc1twb2Zmc2V0ICsgMF0gPSB4eCAvIGdyaWRSZXM7CisgICAgICAgICAgY29sb3Jz
W3BvZmZzZXQgKyAxXSA9IHl5IC8gZ3JpZFJlczsKKyAgICAgICAgICBjb2xvcnNbcG9mZnNldCAr
IDJdID0gKHh4IC8gZ3JpZFJlcykgKiAoeXkgLyBncmlkUmVzKTsKKyAgICAgICAgICBjb2xvcnNb
cG9mZnNldCArIDNdID0gKHl5ICUgMikgKiAwLjUgKyAwLjU7CisgICAgICAgIH0KKyAgICAgICAg
cG9mZnNldCArPSA0OworICAgICAgfQorICAgIH0KKworICAgIGJ1ZiA9IGdsLmNyZWF0ZUJ1ZmZl
cigpOworICAgIGdsLmJpbmRCdWZmZXIoZ2wuQVJSQVlfQlVGRkVSLCBidWYpOworICAgIGdsLmJ1
ZmZlckRhdGEoZ2wuQVJSQVlfQlVGRkVSLCBjb2xvcnMsIGdsLlNUQVRJQ19EUkFXKTsKKyAgICBn
bC5lbmFibGVWZXJ0ZXhBdHRyaWJBcnJheShvcHRpb25zLmNvbG9yTG9jYXRpb24pOworICAgIGds
LnZlcnRleEF0dHJpYlBvaW50ZXIob3B0aW9ucy5jb2xvckxvY2F0aW9uLCA0LCBnbC5GTE9BVCwg
ZmFsc2UsIDAsIDApOworICAgIG9iamVjdHMucHVzaChidWYpOworICB9CisKKyAgdmFyIHRiYXNl
ID0gMDsKKyAgZm9yICh2YXIgeXkgPSAwOyB5eSA8IGdyaWRSZXM7ICsreXkpIHsKKyAgICB2YXIg
aW5kZXggPSB5eSAqIHZlcnRzQWNyb3NzOworICAgIGZvciAodmFyIHh4ID0gMDsgeHggPCBncmlk
UmVzOyArK3h4KSB7CisgICAgICBpbmRpY2VzW3RiYXNlICsgMF0gPSBpbmRleCArIDA7CisgICAg
ICBpbmRpY2VzW3RiYXNlICsgMV0gPSBpbmRleCArIDE7CisgICAgICBpbmRpY2VzW3RiYXNlICsg
Ml0gPSBpbmRleCArIHZlcnRzQWNyb3NzOworICAgICAgaW5kaWNlc1t0YmFzZSArIDNdID0gaW5k
ZXggKyB2ZXJ0c0Fjcm9zczsKKyAgICAgIGluZGljZXNbdGJhc2UgKyA0XSA9IGluZGV4ICsgMTsK
KyAgICAgIGluZGljZXNbdGJhc2UgKyA1XSA9IGluZGV4ICsgdmVydHNBY3Jvc3MgKyAxOworCisg
ICAgICBpZiAob3B0aW9ucy5mbGlwT2RkVHJpYW5nbGVzKSB7CisgICAgICAgIGluZGljZXNbdGJh
c2UgKyA0XSA9IGluZGV4ICsgdmVydHNBY3Jvc3MgKyAxOworICAgICAgICBpbmRpY2VzW3RiYXNl
ICsgNV0gPSBpbmRleCArIDE7CisgICAgICB9CisKKyAgICAgIGluZGV4ICs9IDE7CisgICAgICB0
YmFzZSArPSA2OworICAgIH0KKyAgfQorCisgIGJ1ZiA9IGdsLmNyZWF0ZUJ1ZmZlcigpOworICBn
bC5iaW5kQnVmZmVyKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBidWYpOworICBnbC5idWZmZXJE
YXRhKGdsLkVMRU1FTlRfQVJSQVlfQlVGRkVSLCBpbmRpY2VzLCBnbC5TVEFUSUNfRFJBVyk7Cisg
IG9iamVjdHMucHVzaChidWYpOworCisgIHJldHVybiBvYmplY3RzOworfTsKKworLyoqCisgKiBS
ZXR1cm5zIHRoZSBjb25zdHJ1Y3RvciBmb3IgYSB0eXBlZCBhcnJheSB0aGF0IGNvcnJlc3BvbmRz
IHRvIHRoZSBnaXZlbgorICogV2ViR0wgdHlwZS4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5n
Q29udGV4dH0gZ2wgQSBXZWJHTFJlbmRlcmluZ0NvbnRleHQuCisgKiBAcGFyYW0ge251bWJlcn0g
dHlwZSBUaGUgV2ViR0wgdHlwZSAoZWcsIGdsLlVOU0lHTkVEX0JZVEUpCisgKiBAcmV0dXJuIHsh
Q29uc3RydWN0b3J9IFRoZSB0eXBlZCBhcnJheSBjb25zdHJ1Y3RvciB0aGF0CisgKiAgICAgIGNv
cnJlc3BvbmRzIHRvIHRoZSBnaXZlbiB0eXBlLgorICovCit2YXIgZ2xUeXBlVG9UeXBlZEFycmF5
VHlwZSA9IGZ1bmN0aW9uKGdsLCB0eXBlKSB7CisgIHN3aXRjaCAodHlwZSkgeworICAgIGNhc2Ug
Z2wuQllURToKKyAgICAgIHJldHVybiB3aW5kb3cuSW50OEFycmF5OworICAgIGNhc2UgZ2wuVU5T
SUdORURfQllURToKKyAgICAgIHJldHVybiB3aW5kb3cuVWludDhBcnJheTsKKyAgICBjYXNlIGds
LlNIT1JUOgorICAgICAgcmV0dXJuIHdpbmRvdy5JbnQxNkFycmF5OworICAgIGNhc2UgZ2wuVU5T
SUdORURfU0hPUlQ6CisgICAgY2FzZSBnbC5VTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICBjYXNl
IGdsLlVOU0lHTkVEX1NIT1JUXzRfNF80XzQ6CisgICAgY2FzZSBnbC5VTlNJR05FRF9TSE9SVF81
XzVfNV8xOgorICAgICAgcmV0dXJuIHdpbmRvdy5VaW50MTZBcnJheTsKKyAgICBjYXNlIGdsLklO
VDoKKyAgICAgIHJldHVybiB3aW5kb3cuSW50MzJBcnJheTsKKyAgICBjYXNlIGdsLlVOU0lHTkVE
X0lOVDoKKyAgICBjYXNlIGdsLlVOU0lHTkVEX0lOVF81XzlfOV85X1JFVjoKKyAgICBjYXNlIGds
LlVOU0lHTkVEX0lOVF8xMEZfMTFGXzExRl9SRVY6CisgICAgY2FzZSBnbC5VTlNJR05FRF9JTlRf
Ml8xMF8xMF8xMF9SRVY6CisgICAgY2FzZSBnbC5VTlNJR05FRF9JTlRfMjRfODoKKyAgICAgIHJl
dHVybiB3aW5kb3cuVWludDMyQXJyYXk7CisgICAgY2FzZSBnbC5IQUxGX0ZMT0FUOgorICAgIGNh
c2UgMHg4RDYxOiAgLy8gSEFMRl9GTE9BVF9PRVMKKyAgICAgIHJldHVybiB3aW5kb3cuVWludDE2
QXJyYXk7CisgICAgY2FzZSBnbC5GTE9BVDoKKyAgICAgIHJldHVybiB3aW5kb3cuRmxvYXQzMkFy
cmF5OworICAgIGRlZmF1bHQ6CisgICAgICB0aHJvdyAndW5rbm93biBnbCB0eXBlICcgKyBnbEVu
dW1Ub1N0cmluZyhnbCwgdHlwZSk7CisgIH0KK307CisKKy8qKgorICogUmV0dXJucyB0aGUgbnVt
YmVyIG9mIGJ5dGVzIHBlciBjb21wb25lbnQgZm9yIGEgZ2l2ZW4gV2ViR0wgdHlwZS4KKyAqIEBw
YXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgQSBXZWJHTFJlbmRlcmluZ0NvbnRleHQu
CisgKiBAcGFyYW0ge0dMZW51bX0gdHlwZSBUaGUgV2ViR0wgdHlwZSAoZWcsIGdsLlVOU0lHTkVE
X0JZVEUpCisgKiBAcmV0dXJuIHtudW1iZXJ9IFRoZSBudW1iZXIgb2YgYnl0ZXMgcGVyIGNvbXBv
bmVudC4KKyAqLwordmFyIGdldEJ5dGVzUGVyQ29tcG9uZW50ID0gZnVuY3Rpb24oZ2wsIHR5cGUp
IHsKKyAgc3dpdGNoICh0eXBlKSB7CisgICAgY2FzZSBnbC5CWVRFOgorICAgIGNhc2UgZ2wuVU5T
SUdORURfQllURToKKyAgICAgIHJldHVybiAxOworICAgIGNhc2UgZ2wuU0hPUlQ6CisgICAgY2Fz
ZSBnbC5VTlNJR05FRF9TSE9SVDoKKyAgICBjYXNlIGdsLlVOU0lHTkVEX1NIT1JUXzVfNl81Ogor
ICAgIGNhc2UgZ2wuVU5TSUdORURfU0hPUlRfNF80XzRfNDoKKyAgICBjYXNlIGdsLlVOU0lHTkVE
X1NIT1JUXzVfNV81XzE6CisgICAgY2FzZSBnbC5IQUxGX0ZMT0FUOgorICAgIGNhc2UgMHg4RDYx
OiAgLy8gSEFMRl9GTE9BVF9PRVMKKyAgICAgIHJldHVybiAyOworICAgIGNhc2UgZ2wuSU5UOgor
ICAgIGNhc2UgZ2wuVU5TSUdORURfSU5UOgorICAgIGNhc2UgZ2wuVU5TSUdORURfSU5UXzVfOV85
XzlfUkVWOgorICAgIGNhc2UgZ2wuVU5TSUdORURfSU5UXzEwRl8xMUZfMTFGX1JFVjoKKyAgICBj
YXNlIGdsLlVOU0lHTkVEX0lOVF8yXzEwXzEwXzEwX1JFVjoKKyAgICBjYXNlIGdsLlVOU0lHTkVE
X0lOVF8yNF84OgorICAgIGNhc2UgZ2wuRkxPQVQ6CisgICAgICByZXR1cm4gNDsKKyAgICBkZWZh
dWx0OgorICAgICAgdGhyb3cgJ3Vua25vd24gZ2wgdHlwZSAnICsgZ2xFbnVtVG9TdHJpbmcoZ2ws
IHR5cGUpOworICB9Cit9OworCisvKioKKyAqIFJldHVybnMgdGhlIG51bWJlciBvZiB0eXBlZCBh
cnJheSBlbGVtZW50cyBwZXIgcGl4ZWwgZm9yIGEgZ2l2ZW4gV2ViR0wKKyAqIGZvcm1hdC90eXBl
IGNvbWJpbmF0aW9uLiBUaGUgY29ycmVzcG9uZGluZyB0eXBlZCBhcnJheSB0eXBlIGNhbiBiZSBk
ZXRlcm1pbmVkCisgKiBieSBjYWxsaW5nIGdsVHlwZVRvVHlwZWRBcnJheVR5cGUuCisgKiBAcGFy
YW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIEEgV2ViR0xSZW5kZXJpbmdDb250ZXh0Lgor
ICogQHBhcmFtIHtHTGVudW19IGZvcm1hdCBUaGUgV2ViR0wgZm9ybWF0IChlZywgZ2wuUkdCQSkK
KyAqIEBwYXJhbSB7R0xlbnVtfSB0eXBlIFRoZSBXZWJHTCB0eXBlIChlZywgZ2wuVU5TSUdORURf
QllURSkKKyAqIEByZXR1cm4ge251bWJlcn0gVGhlIG51bWJlciBvZiB0eXBlZCBhcnJheSBlbGVt
ZW50cyBwZXIgcGl4ZWwuCisgKi8KK3ZhciBnZXRUeXBlZEFycmF5RWxlbWVudHNQZXJQaXhlbCA9
IGZ1bmN0aW9uKGdsLCBmb3JtYXQsIHR5cGUpIHsKKyAgc3dpdGNoICh0eXBlKSB7CisgICAgY2Fz
ZSBnbC5VTlNJR05FRF9TSE9SVF81XzZfNToKKyAgICBjYXNlIGdsLlVOU0lHTkVEX1NIT1JUXzRf
NF80XzQ6CisgICAgY2FzZSBnbC5VTlNJR05FRF9TSE9SVF81XzVfNV8xOgorICAgICAgcmV0dXJu
IDE7CisgICAgY2FzZSBnbC5VTlNJR05FRF9CWVRFOgorICAgICAgYnJlYWs7CisgICAgZGVmYXVs
dDoKKyAgICAgIHRocm93ICdub3QgYSBnbCB0eXBlIGZvciBjb2xvciBpbmZvcm1hdGlvbiAnICsg
Z2xFbnVtVG9TdHJpbmcoZ2wsIHR5cGUpOworICB9CisKKyAgc3dpdGNoIChmb3JtYXQpIHsKKyAg
ICBjYXNlIGdsLlJHQkE6CisgICAgICByZXR1cm4gNDsKKyAgICBjYXNlIGdsLlJHQjoKKyAgICAg
IHJldHVybiAzOworICAgIGNhc2UgZ2wuTFVNSU5BTkNFX0FMUEhBOgorICAgICAgcmV0dXJuIDI7
CisgICAgY2FzZSBnbC5MVU1JTkFOQ0U6CisgICAgY2FzZSBnbC5BTFBIQToKKyAgICAgIHJldHVy
biAxOworICAgIGRlZmF1bHQ6CisgICAgICB0aHJvdyAndW5rbm93biBnbCBmb3JtYXQgJyArIGds
RW51bVRvU3RyaW5nKGdsLCBmb3JtYXQpOworICB9Cit9OworCisvKioKKyAqIEZpbGxzIHRoZSBn
aXZlbiB0ZXh0dXJlIHdpdGggYSBzb2xpZCBjb2xvci4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVy
aW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFy
YW0geyFXZWJHTFRleHR1cmV9IHRleCBUaGUgdGV4dHVyZSB0byBmaWxsLgorICogQHBhcmFtIHtu
dW1iZXJ9IHdpZHRoIFRoZSB3aWR0aCBvZiB0aGUgdGV4dHVyZSB0byBjcmVhdGUuCisgKiBAcGFy
YW0ge251bWJlcn0gaGVpZ2h0IFRoZSBoZWlnaHQgb2YgdGhlIHRleHR1cmUgdG8gY3JlYXRlLgor
ICogQHBhcmFtIHshQXJyYXkuPG51bWJlcj59IGNvbG9yIFRoZSBjb2xvciB0byBmaWxsIHdpdGgu
CisgKiAgICAgICAgd2hlcmUgZWFjaCBlbGVtZW50IGlzIGluIHRoZSByYW5nZSAwIHRvIDI1NS4K
KyAqIEBwYXJhbSB7bnVtYmVyfSBvcHRfbGV2ZWwgVGhlIGxldmVsIG9mIHRoZSB0ZXh0dXJlIHRv
IGZpbGwuIERlZmF1bHQgPSAwLgorICogQHBhcmFtIHtudW1iZXJ9IG9wdF9mb3JtYXQgVGhlIGZv
cm1hdCBmb3IgdGhlIHRleHR1cmUuCisgKiBAcGFyYW0ge251bWJlcn0gb3B0X2ludGVybmFsRm9y
bWF0IFRoZSBpbnRlcm5hbCBmb3JtYXQgZm9yIHRoZSB0ZXh0dXJlLgorICovCit2YXIgZmlsbFRl
eHR1cmUgPSBmdW5jdGlvbihnbCwgdGV4LCB3aWR0aCwgaGVpZ2h0LCBjb2xvciwgb3B0X2xldmVs
LCBvcHRfZm9ybWF0LCBvcHRfdHlwZSwgb3B0X2ludGVybmFsRm9ybWF0KSB7CisgIG9wdF9sZXZl
bCA9IG9wdF9sZXZlbCB8fCAwOworICBvcHRfZm9ybWF0ID0gb3B0X2Zvcm1hdCB8fCBnbC5SR0JB
OworICBvcHRfdHlwZSA9IG9wdF90eXBlIHx8IGdsLlVOU0lHTkVEX0JZVEU7CisgIG9wdF9pbnRl
cm5hbEZvcm1hdCA9IG9wdF9pbnRlcm5hbEZvcm1hdCB8fCBvcHRfZm9ybWF0OworICB2YXIgcGFj
ayA9IGdsLmdldFBhcmFtZXRlcihnbC5VTlBBQ0tfQUxJR05NRU5UKTsKKyAgdmFyIG51bUNvbXBv
bmVudHMgPSBjb2xvci5sZW5ndGg7CisgIHZhciBieXRlc1BlckNvbXBvbmVudCA9IGdldEJ5dGVz
UGVyQ29tcG9uZW50KGdsLCBvcHRfdHlwZSk7CisgIHZhciByb3dTaXplID0gbnVtQ29tcG9uZW50
cyAqIHdpZHRoICogYnl0ZXNQZXJDb21wb25lbnQ7CisgIC8vIFNlZSBlcXVhdGlvbiAzLjEwIGlu
IEVTIDIuMCBzcGVjIGFuZCBlcXVhdGlvbiAzLjEzIGluIEVTIDMuMCBzcGVjIGZvciBwYWRkZWRS
b3dMZW5ndGggY2FsY3VsYXRpb24uCisgIC8vIGsgaXMgcGFkZGVkUm93TGVuZ3RoLgorICAvLyBu
IGlzIG51bUNvbXBvbmVudHMuCisgIC8vIGwgaXMgd2lkdGguCisgIC8vIGEgaXMgcGFjay4KKyAg
Ly8gcyBpcyBieXRlc1BlckNvbXBvbmVudC4KKyAgdmFyIHBhZGRlZFJvd0xlbmd0aDsKKyAgaWYg
KGJ5dGVzUGVyQ29tcG9uZW50ID49IHBhY2spCisgICAgcGFkZGVkUm93TGVuZ3RoID0gbnVtQ29t
cG9uZW50cyAqIHdpZHRoOworICBlbHNlCisgICAgcGFkZGVkUm93TGVuZ3RoID0gTWF0aC5mbG9v
cigocm93U2l6ZSArIHBhY2sgLSAxKSAvIHBhY2spICogcGFjayAvIGJ5dGVzUGVyQ29tcG9uZW50
OworICB2YXIgc2l6ZSA9IHdpZHRoICogbnVtQ29tcG9uZW50cyArIChoZWlnaHQgLSAxKSAqIHBh
ZGRlZFJvd0xlbmd0aDsKKyAgdmFyIGJ1ZiA9IG5ldyAoZ2xUeXBlVG9UeXBlZEFycmF5VHlwZShn
bCwgb3B0X3R5cGUpKShzaXplKTsKKyAgZm9yICh2YXIgeXkgPSAwOyB5eSA8IGhlaWdodDsgKyt5
eSkgeworICAgIHZhciBvZmYgPSB5eSAqIHBhZGRlZFJvd0xlbmd0aDsKKyAgICBmb3IgKHZhciB4
eCA9IDA7IHh4IDwgd2lkdGg7ICsreHgpIHsKKyAgICAgIGZvciAodmFyIGpqID0gMDsgamogPCBu
dW1Db21wb25lbnRzOyArK2pqKSB7CisgICAgICAgIGJ1ZltvZmYrK10gPSBjb2xvcltqal07Cisg
ICAgICB9CisgICAgfQorICB9CisgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleCk7
CisgIGdsLnRleEltYWdlMkQoCisgICAgICBnbC5URVhUVVJFXzJELCBvcHRfbGV2ZWwsIG9wdF9p
bnRlcm5hbEZvcm1hdCwgd2lkdGgsIGhlaWdodCwgMCwKKyAgICAgIG9wdF9mb3JtYXQsIG9wdF90
eXBlLCBidWYpOworfTsKKworLyoqCisgKiBDcmVhdGVzIGEgdGV4dHVyZSBhbmQgZmlsbHMgaXQg
d2l0aCBhIHNvbGlkIGNvbG9yLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBn
bCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7bnVtYmVyfSB3
aWR0aCBUaGUgd2lkdGggb2YgdGhlIHRleHR1cmUgdG8gY3JlYXRlLgorICogQHBhcmFtIHtudW1i
ZXJ9IGhlaWdodCBUaGUgaGVpZ2h0IG9mIHRoZSB0ZXh0dXJlIHRvIGNyZWF0ZS4KKyAqIEBwYXJh
bSB7IUFycmF5LjxudW1iZXI+fSBjb2xvciBUaGUgY29sb3IgdG8gZmlsbCB3aXRoLiBBIDQgZWxl
bWVudCBhcnJheQorICogICAgICAgIHdoZXJlIGVhY2ggZWxlbWVudCBpcyBpbiB0aGUgcmFuZ2Ug
MCB0byAyNTUuCisgKiBAcmV0dXJuIHshV2ViR0xUZXh0dXJlfQorICovCit2YXIgY3JlYXRlQ29s
b3JlZFRleHR1cmUgPSBmdW5jdGlvbihnbCwgd2lkdGgsIGhlaWdodCwgY29sb3IpIHsKKyAgdmFy
IHRleCA9IGdsLmNyZWF0ZVRleHR1cmUoKTsKKyAgZmlsbFRleHR1cmUoZ2wsIHRleCwgd2lkdGgs
IGhlaWdodCwgY29sb3IpOworICByZXR1cm4gdGV4OworfTsKKwordmFyIHVieXRlVG9GbG9hdCA9
IGZ1bmN0aW9uKGMpIHsKKyAgcmV0dXJuIGMgLyAyNTU7Cit9OworCit2YXIgdWJ5dGVDb2xvclRv
RmxvYXRDb2xvciA9IGZ1bmN0aW9uKGNvbG9yKSB7CisgIHZhciBmbG9hdENvbG9yID0gW107Cisg
IGZvciAodmFyIGlpID0gMDsgaWkgPCBjb2xvci5sZW5ndGg7ICsraWkpIHsKKyAgICBmbG9hdENv
bG9yW2lpXSA9IHVieXRlVG9GbG9hdChjb2xvcltpaV0pOworICB9CisgIHJldHVybiBmbG9hdENv
bG9yOworfTsKKworLyoqCisgKiBTZXRzIHRoZSAidV9jb2xvciIgdW5pZm9ybSBvZiB0aGUgY3Vy
cmVudCBwcm9ncmFtIHRvIGNvbG9yLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0
fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7IUFycmF5
LjxudW1iZXI+fSBjb2xvciA0IGVsZW1lbnQgYXJyYXkgb2YgMC0xIGNvbG9yCisgKiAgICAgIGNv
bXBvbmVudHMuCisgKi8KK3ZhciBzZXRGbG9hdERyYXdDb2xvciA9IGZ1bmN0aW9uKGdsLCBjb2xv
cikgeworICB2YXIgcHJvZ3JhbSA9IGdsLmdldFBhcmFtZXRlcihnbC5DVVJSRU5UX1BST0dSQU0p
OworICB2YXIgY29sb3JMb2NhdGlvbiA9IGdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAi
dV9jb2xvciIpOworICBnbC51bmlmb3JtNGZ2KGNvbG9yTG9jYXRpb24sIGNvbG9yKTsKK307CisK
Ky8qKgorICogU2V0cyB0aGUgInVfY29sb3IiIHVuaWZvcm0gb2YgdGhlIGN1cnJlbnQgcHJvZ3Jh
bSB0byBjb2xvci4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdl
YkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0g
Y29sb3IgNCBlbGVtZW50IGFycmF5IG9mIDAtMjU1IGNvbG9yCisgKiAgICAgIGNvbXBvbmVudHMu
CisgKi8KK3ZhciBzZXRVQnl0ZURyYXdDb2xvciA9IGZ1bmN0aW9uKGdsLCBjb2xvcikgeworICBz
ZXRGbG9hdERyYXdDb2xvcihnbCwgdWJ5dGVDb2xvclRvRmxvYXRDb2xvcihjb2xvcikpOworfTsK
KworLyoqCisgKiBEcmF3cyBhIHByZXZpb3VzbHkgc2V0dXAgcXVhZCBpbiB0aGUgZ2l2ZW4gY29s
b3IuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRl
cmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHshQXJyYXkuPG51bWJlcj59IGNvbG9yIFRo
ZSBjb2xvciB0byBkcmF3IHdpdGguIEEgNAorICogICAgICAgIGVsZW1lbnQgYXJyYXkgd2hlcmUg
ZWFjaCBlbGVtZW50IGlzIGluIHRoZSByYW5nZSAwIHRvCisgKiAgICAgICAgMS4KKyAqLwordmFy
IGRyYXdGbG9hdENvbG9yUXVhZCA9IGZ1bmN0aW9uKGdsLCBjb2xvcikgeworICB2YXIgcHJvZ3Jh
bSA9IGdsLmdldFBhcmFtZXRlcihnbC5DVVJSRU5UX1BST0dSQU0pOworICB2YXIgY29sb3JMb2Nh
dGlvbiA9IGdsLmdldFVuaWZvcm1Mb2NhdGlvbihwcm9ncmFtLCAidV9jb2xvciIpOworICBnbC51
bmlmb3JtNGZ2KGNvbG9yTG9jYXRpb24sIGNvbG9yKTsKKyAgZ2wuZHJhd0FycmF5cyhnbC5UUklB
TkdMRVMsIDAsIDYpOworfTsKKworCisvKioKKyAqIERyYXdzIGEgcHJldmlvdXNseSBzZXR1cCBx
dWFkIGluIHRoZSBnaXZlbiBjb2xvci4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4
dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0geyFBcnJh
eS48bnVtYmVyPn0gY29sb3IgVGhlIGNvbG9yIHRvIGRyYXcgd2l0aC4gQSA0CisgKiAgICAgICAg
ZWxlbWVudCBhcnJheSB3aGVyZSBlYWNoIGVsZW1lbnQgaXMgaW4gdGhlIHJhbmdlIDAgdG8KKyAq
ICAgICAgICAyNTUuCisgKi8KK3ZhciBkcmF3VUJ5dGVDb2xvclF1YWQgPSBmdW5jdGlvbihnbCwg
Y29sb3IpIHsKKyAgZHJhd0Zsb2F0Q29sb3JRdWFkKGdsLCB1Ynl0ZUNvbG9yVG9GbG9hdENvbG9y
KGNvbG9yKSk7Cit9OworCisvKioKKyAqIERyYXdzIGEgcHJldmlvdXNseSBzZXR1cFVuaXRRdWFk
LgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJp
bmdDb250ZXh0IHRvIHVzZS4KKyAqLwordmFyIGRyYXdVbml0UXVhZCA9IGZ1bmN0aW9uKGdsKSB7
CisgIGdsLmRyYXdBcnJheXMoZ2wuVFJJQU5HTEVTLCAwLCA2KTsKK307CisKK3ZhciBkdW1teVNl
dFByb2dyYW1BbmREcmF3Tm90aGluZyA9IGZ1bmN0aW9uKGdsKSB7CisgIGlmICghZ2wuX3d0dUR1
bW15UHJvZ3JhbSkgeworICAgIGdsLl93dHVEdW1teVByb2dyYW0gPSBzZXR1cFByb2dyYW0oZ2ws
IFsKKyAgICAgICJ2b2lkIG1haW4oKSB7IGdsX1Bvc2l0aW9uID0gdmVjNCgwLjApOyB9IiwKKyAg
ICAgICJ2b2lkIG1haW4oKSB7IGdsX0ZyYWdDb2xvciA9IHZlYzQoMC4wKTsgfSIKKyAgICBdLCBb
XSwgW10pOworICB9CisgIGdsLnVzZVByb2dyYW0oZ2wuX3d0dUR1bW15UHJvZ3JhbSk7CisgIGds
LmRyYXdBcnJheXMoZ2wuVFJJQU5HTEVTLCAwLCAzKTsKK307CisKKy8qKgorICogQ2xlYXJzIHRo
ZW4gRHJhd3MgYSBwcmV2aW91c2x5IHNldHVwVW5pdFF1YWQuCisgKiBAcGFyYW0geyFXZWJHTFJl
bmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICog
QHBhcmFtIHshQXJyYXkuPG51bWJlcj59IG9wdF9jb2xvciBUaGUgY29sb3IgdG8gZmlsbCBjbGVh
ciB3aXRoIGJlZm9yZQorICogICAgICAgIGRyYXdpbmcuIEEgNCBlbGVtZW50IGFycmF5IHdoZXJl
IGVhY2ggZWxlbWVudCBpcyBpbiB0aGUgcmFuZ2UgMCB0bworICogICAgICAgIDI1NS4gRGVmYXVs
dCBbMjU1LCAyNTUsIDI1NSwgMjU1XQorICovCit2YXIgY2xlYXJBbmREcmF3VW5pdFF1YWQgPSBm
dW5jdGlvbihnbCwgb3B0X2NvbG9yKSB7CisgIG9wdF9jb2xvciA9IG9wdF9jb2xvciB8fCBbMjU1
LCAyNTUsIDI1NSwgMjU1XTsKKyAgZ2wuY2xlYXJDb2xvcigKKyAgICAgIG9wdF9jb2xvclswXSAv
IDI1NSwKKyAgICAgIG9wdF9jb2xvclsxXSAvIDI1NSwKKyAgICAgIG9wdF9jb2xvclsyXSAvIDI1
NSwKKyAgICAgIG9wdF9jb2xvclszXSAvIDI1NSk7CisgIGdsLmNsZWFyKGdsLkNPTE9SX0JVRkZF
Ul9CSVQgfCBnbC5ERVBUSF9CVUZGRVJfQklUKTsKKyAgZHJhd1VuaXRRdWFkKGdsKTsKK307CisK
Ky8qKgorICogRHJhd3MgYSBxdWFkIHByZXZpb3VzbHkgc2V0dXAgd2l0aCBzZXR1cEluZGV4ZWRR
dWFkLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5k
ZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7bnVtYmVyfSBncmlkUmVzIFJlc29sdXRp
b24gb2YgZ3JpZC4KKyAqLwordmFyIGRyYXdJbmRleGVkUXVhZCA9IGZ1bmN0aW9uKGdsLCBncmlk
UmVzKSB7CisgIGdsLmRyYXdFbGVtZW50cyhnbC5UUklBTkdMRVMsIGdyaWRSZXMgKiBncmlkUmVz
ICogNiwgZ2wuVU5TSUdORURfU0hPUlQsIDApOworfTsKKworLyoqCisgKiBEcmF3cyBhIHByZXZp
b3VzbHkgc2V0dXBJbmRleGVkUXVhZAorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0
fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7bnVtYmVy
fSBncmlkUmVzIFJlc29sdXRpb24gb2YgZ3JpZC4KKyAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+
fSBvcHRfY29sb3IgVGhlIGNvbG9yIHRvIGZpbGwgY2xlYXIgd2l0aCBiZWZvcmUKKyAqICAgICAg
ICBkcmF3aW5nLiBBIDQgZWxlbWVudCBhcnJheSB3aGVyZSBlYWNoIGVsZW1lbnQgaXMgaW4gdGhl
IHJhbmdlIDAgdG8KKyAqICAgICAgICAyNTUuIERlZmF1bHQgWzI1NSwgMjU1LCAyNTUsIDI1NV0K
KyAqLwordmFyIGNsZWFyQW5kRHJhd0luZGV4ZWRRdWFkID0gZnVuY3Rpb24oZ2wsIGdyaWRSZXMs
IG9wdF9jb2xvcikgeworICBvcHRfY29sb3IgPSBvcHRfY29sb3IgfHwgWzI1NSwgMjU1LCAyNTUs
IDI1NV07CisgIGdsLmNsZWFyQ29sb3IoCisgICAgICBvcHRfY29sb3JbMF0gLyAyNTUsCisgICAg
ICBvcHRfY29sb3JbMV0gLyAyNTUsCisgICAgICBvcHRfY29sb3JbMl0gLyAyNTUsCisgICAgICBv
cHRfY29sb3JbM10gLyAyNTUpOworICBnbC5jbGVhcihnbC5DT0xPUl9CVUZGRVJfQklUIHwgZ2wu
REVQVEhfQlVGRkVSX0JJVCk7CisgIGRyYXdJbmRleGVkUXVhZChnbCwgZ3JpZFJlcyk7Cit9Owor
CisvKioKKyAqIENsaXBzIGEgcmFuZ2UgdG8gbWluLCBtYXgKKyAqIChFZy4gY2xpcFRvUmFuZ2Uo
LTUsNywwLDIwKSB3b3VsZCByZXR1cm4ge3ZhbHVlOjAsZXh0ZW50OjJ9CisgKiBAcGFyYW0ge251
bWJlcn0gdmFsdWUgc3RhcnQgb2YgcmFuZ2UKKyAqIEBwYXJhbSB7bnVtYmVyfSBleHRlbnQgZXh0
ZW50IG9mIHJhbmdlCisgKiBAcGFyYW0ge251bWJlcn0gbWluIG1pbi4KKyAqIEBwYXJhbSB7bnVt
YmVyfSBtYXggbWF4LgorICogQHJldHVybiB7IXt2YWx1ZTpudW1iZXIsZXh0ZW50Om51bWJlcn19
IFRoZSBjbGlwcGVkIHZhbHVlLgorICovCit2YXIgY2xpcFRvUmFuZ2UgPSBmdW5jdGlvbih2YWx1
ZSwgZXh0ZW50LCBtaW4sIG1heCkgeworICBpZiAodmFsdWUgPCBtaW4pIHsKKyAgICBleHRlbnQg
LT0gbWluIC0gdmFsdWU7CisgICAgdmFsdWUgPSBtaW47CisgIH0KKyAgdmFyIGVuZCA9IHZhbHVl
ICsgZXh0ZW50OworICBpZiAoZW5kID4gbWF4KSB7CisgICAgZXh0ZW50IC09IGVuZCAtIG1heDsK
KyAgfQorICBpZiAoZXh0ZW50IDwgMCkgeworICAgIHZhbHVlID0gbWF4OworICAgIGV4dGVudCA9
IDA7CisgIH0KKyAgcmV0dXJuIHt2YWx1ZTp2YWx1ZSwgZXh0ZW50OiBleHRlbnR9OworfTsKKwor
LyoqCisgKiBEZXRlcm1pbmVzIGlmIHRoZSBwYXNzZWQgY29udGV4dCBpcyBhbiBpbnN0YW5jZSBv
ZiBhIFdlYkdMUmVuZGVyaW5nQ29udGV4dAorICogb3IgbGF0ZXIgdmFyaWFudCAobGlrZSBXZWJH
TDJSZW5kZXJpbmdDb250ZXh0KQorICogQHBhcmFtIHtDYW52YXNSZW5kZXJpbmdDb250ZXh0fSBj
dHggVGhlIGNvbnRleHQgdG8gY2hlY2suCisgKi8KK3ZhciBpc1dlYkdMQ29udGV4dCA9IGZ1bmN0
aW9uKGN0eCkgeworICBpZiAoY3R4IGluc3RhbmNlb2YgV2ViR0xSZW5kZXJpbmdDb250ZXh0KQor
ICAgIHJldHVybiB0cnVlOworCisgIGlmICgnV2ViR0wyUmVuZGVyaW5nQ29udGV4dCcgaW4gd2lu
ZG93ICYmIGN0eCBpbnN0YW5jZW9mIFdlYkdMMlJlbmRlcmluZ0NvbnRleHQpCisgICAgcmV0dXJu
IHRydWU7CisKKyAgcmV0dXJuIGZhbHNlOworfTsKKworLyoqCisgKiBDcmVhdGVzIGEgY2hlY2sg
cmVjdCBpcyB1c2VkIGJ5IGNoZWNrQ2FudmFzUmVjdHMuCisgKiBAcGFyYW0ge251bWJlcn0geCBs
ZWZ0IGNvcm5lciBvZiByZWdpb24gdG8gY2hlY2suCisgKiBAcGFyYW0ge251bWJlcn0geSBib3R0
b20gY29ybmVyIG9mIHJlZ2lvbiB0byBjaGVjayBpbiBjYXNlIG9mIGNoZWNraW5nIGZyb20KKyAq
ICAgICAgICBhIEdMIGNvbnRleHQgb3IgdG9wIGNvcm5lciBpbiBjYXNlIG9mIGNoZWNraW5nIGZy
b20gYSAyRCBjb250ZXh0LgorICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIHdpZHRoIG9mIHJlZ2lv
biB0byBjaGVjay4KKyAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgd2lkdGggb2YgcmVnaW9uIHRv
IGNoZWNrLgorICogQHBhcmFtIHshQXJyYXkuPG51bWJlcj59IGNvbG9yIFRoZSBjb2xvciBleHBl
Y3RlZC4gQSA0IGVsZW1lbnQgYXJyYXkgd2hlcmUKKyAqICAgICAgICBlYWNoIGVsZW1lbnQgaXMg
aW4gdGhlIHJhbmdlIDAgdG8gMjU1LgorICogQHBhcmFtIHtzdHJpbmd9IG9wdF9tc2cgTWVzc2Fn
ZSB0byBhc3NvY2lhdGUgd2l0aCBzdWNjZXNzLiBFZworICogICAgICAgICgic2hvdWxkIGJlIHJl
ZCIpLgorICogQHBhcmFtIHtudW1iZXJ9IG9wdF9lcnJvclJhbmdlIE9wdGlvbmFsLiBBY2NlcHRh
YmxlIGVycm9yIGluCisgKiAgICAgICAgY29sb3IgY2hlY2tpbmcuIDAgYnkgZGVmYXVsdC4KKyAq
LwordmFyIG1ha2VDaGVja1JlY3QgPSBmdW5jdGlvbih4LCB5LCB3aWR0aCwgaGVpZ2h0LCBjb2xv
ciwgbXNnLCBlcnJvclJhbmdlKSB7CisgIHZhciByZWN0ID0geworICAgICd4JzogeCwgJ3knOiB5
LAorICAgICd3aWR0aCc6IHdpZHRoLCAnaGVpZ2h0JzogaGVpZ2h0LAorICAgICdjb2xvcic6IGNv
bG9yLCAnbXNnJzogbXNnLAorICAgICdlcnJvclJhbmdlJzogZXJyb3JSYW5nZSwKKworICAgICdj
aGVja1JlY3QnOiBmdW5jdGlvbiAoYnVmLCBsLCBiLCB3KSB7CisgICAgICBmb3IgKHZhciBweCA9
ICh4IC0gbCkgOyBweCA8ICh4ICsgd2lkdGggLSBsKSA7ICsrcHgpIHsKKyAgICAgICAgZm9yICh2
YXIgcHkgPSAoeSAtIGIpIDsgcHkgPCAoeSArIGhlaWdodCAtIGIpIDsgKytweSkgeworICAgICAg
ICAgIHZhciBvZmZzZXQgPSAocHkgKiB3ICsgcHgpICogNDsKKyAgICAgICAgICBmb3IgKHZhciBq
ID0gMDsgaiA8IGNvbG9yLmxlbmd0aDsgKytqKSB7CisgICAgICAgICAgICBpZiAoTWF0aC5hYnMo
YnVmW29mZnNldCArIGpdIC0gY29sb3Jbal0pID4gZXJyb3JSYW5nZSkgeworICAgICAgICAgICAg
ICB0ZXN0RmFpbGVkKG1zZyk7CisgICAgICAgICAgICAgIHZhciB3YXMgPSBidWZbb2Zmc2V0ICsg
MF0udG9TdHJpbmcoKTsKKyAgICAgICAgICAgICAgZm9yIChqID0gMTsgaiA8IGNvbG9yLmxlbmd0
aDsgKytqKSB7CisgICAgICAgICAgICAgICAgd2FzICs9ICIsIiArIGJ1ZltvZmZzZXQgKyBqXTsK
KyAgICAgICAgICAgICAgfQorICAgICAgICAgICAgICBkZWJ1ZygnYXQgKCcgKyBweCArICcsICcg
KyBweSArCisgICAgICAgICAgICAgICAgICAgICcpIGV4cGVjdGVkOiAnICsgY29sb3IgKyAnIHdh
cyAnICsgd2FzKTsKKyAgICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgfQorICAgICAg
ICAgIH0KKyAgICAgICAgfQorICAgICAgfQorICAgICAgdGVzdFBhc3NlZChtc2cpOworICAgIH0K
KyAgfQorICByZXR1cm4gcmVjdDsKK307CisKKy8qKgorICogQ2hlY2tzIHRoYXQgYSBwb3J0aW9u
cyBvZiBhIGNhbnZhcyBvciB0aGUgY3VycmVudGx5IGF0dGFjaGVkIGZyYW1lYnVmZmVyIGlzIDEg
Y29sb3IuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR8Q2FudmFzUmVuZGVyaW5n
Q29udGV4dDJEfSBnbCBUaGUKKyAqICAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250ZXh0IG9yIDJE
IGNvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHshQXJyYXkuPGNoZWNrUmVjdD59IGFycmF5IG9m
IHJlY3RzIHRvIGNoZWNrIGZvciBtYXRjaGluZyBjb2xvci4KKyAqLwordmFyIGNoZWNrQ2FudmFz
UmVjdHMgPSBmdW5jdGlvbihnbCwgcmVjdHMpIHsKKyAgaWYgKHJlY3RzLmxlbmd0aCA+IDApIHsK
KyAgICB2YXIgbGVmdCA9IHJlY3RzWzBdLng7CisgICAgdmFyIHJpZ2h0ID0gcmVjdHNbMF0ueCAr
IHJlY3RzWzFdLndpZHRoOworICAgIHZhciBib3R0b20gPSByZWN0c1swXS55OworICAgIHZhciB0
b3AgPSByZWN0c1swXS55ICsgcmVjdHNbMF0uaGVpZ2h0OworICAgIGZvciAodmFyIGkgPSAxOyBp
IDwgcmVjdHMubGVuZ3RoOyArK2kpIHsKKyAgICAgIGxlZnQgPSBNYXRoLm1pbihsZWZ0LCByZWN0
c1tpXS54KTsKKyAgICAgIHJpZ2h0ID0gTWF0aC5tYXgocmlnaHQsIHJlY3RzW2ldLnggKyByZWN0
c1tpXS53aWR0aCk7CisgICAgICBib3R0b20gPSBNYXRoLm1pbihib3R0b20sIHJlY3RzW2ldLnkp
OworICAgICAgdG9wID0gTWF0aC5tYXgodG9wLCByZWN0c1tpXS55ICsgcmVjdHNbaV0uaGVpZ2h0
KTsKKyAgICB9CisgICAgdmFyIHdpZHRoID0gcmlnaHQgLSBsZWZ0OworICAgIHZhciBoZWlnaHQg
PSB0b3AgLSBib3R0b207CisgICAgdmFyIGJ1ZiA9IG5ldyBVaW50OEFycmF5KHdpZHRoICogaGVp
Z2h0ICogNCk7CisgICAgZ2wucmVhZFBpeGVscyhsZWZ0LCBib3R0b20sIHdpZHRoLCBoZWlnaHQs
IGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIGJ1Zik7CisgICAgZm9yICh2YXIgaSA9IDA7IGkg
PCByZWN0cy5sZW5ndGg7ICsraSkgeworICAgICAgcmVjdHNbaV0uY2hlY2tSZWN0KGJ1ZiwgbGVm
dCwgYm90dG9tLCB3aWR0aCk7CisgICAgfQorICB9Cit9OworCisvKioKKyAqIENoZWNrcyB0aGF0
IGEgcG9ydGlvbiBvZiBhIGNhbnZhcyBvciB0aGUgY3VycmVudGx5IGF0dGFjaGVkIGZyYW1lYnVm
ZmVyIGlzIDEgY29sb3IuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR8Q2FudmFz
UmVuZGVyaW5nQ29udGV4dDJEfSBnbCBUaGUKKyAqICAgICAgICAgV2ViR0xSZW5kZXJpbmdDb250
ZXh0IG9yIDJEIGNvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtudW1iZXJ9IHggbGVmdCBjb3Ju
ZXIgb2YgcmVnaW9uIHRvIGNoZWNrLgorICogQHBhcmFtIHtudW1iZXJ9IHkgYm90dG9tIGNvcm5l
ciBvZiByZWdpb24gdG8gY2hlY2sgaW4gY2FzZSBvZiBjaGVja2luZyBmcm9tCisgKiAgICAgICAg
YSBHTCBjb250ZXh0IG9yIHRvcCBjb3JuZXIgaW4gY2FzZSBvZiBjaGVja2luZyBmcm9tIGEgMkQg
Y29udGV4dC4KKyAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCB3aWR0aCBvZiByZWdpb24gdG8gY2hl
Y2suCisgKiBAcGFyYW0ge251bWJlcn0gaGVpZ2h0IHdpZHRoIG9mIHJlZ2lvbiB0byBjaGVjay4K
KyAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBjb2xvciBUaGUgY29sb3IgZXhwZWN0ZWQuIEEg
NCBlbGVtZW50IGFycmF5IHdoZXJlCisgKiAgICAgICAgZWFjaCBlbGVtZW50IGlzIGluIHRoZSBy
YW5nZSAwIHRvIDI1NS4KKyAqIEBwYXJhbSB7bnVtYmVyfSBvcHRfZXJyb3JSYW5nZSBPcHRpb25h
bC4gQWNjZXB0YWJsZSBlcnJvciBpbgorICogICAgICAgIGNvbG9yIGNoZWNraW5nLiAwIGJ5IGRl
ZmF1bHQuCisgKiBAcGFyYW0geyFmdW5jdGlvbigpfSBzYW1lRm4gRnVuY3Rpb24gdG8gY2FsbCBp
ZiBhbGwgcGl4ZWxzCisgKiAgICAgICAgYXJlIHRoZSBzYW1lIGFzIGNvbG9yLgorICogQHBhcmFt
IHshZnVuY3Rpb24oKX0gZGlmZmVyZW50Rm4gRnVuY3Rpb24gdG8gY2FsbCBpZiBhIHBpeGVsCisg
KiAgICAgICAgaXMgZGlmZmVyZW50IHRoYW4gY29sb3IKKyAqIEBwYXJhbSB7IWZ1bmN0aW9uKCl9
IGxvZ0ZuIEZ1bmN0aW9uIHRvIGNhbGwgZm9yIGxvZ2dpbmcuCisgKiBAcGFyYW0ge1R5cGVkQXJy
YXl9IG9wdF9yZWFkQmFja0J1ZiBvcHRpb25hbCBidWZmZXIgdG8gcmVhZCBiYWNrIGludG8uCisg
KiAgICAgICAgVHlwaWNhbGx5IHBhc3NlZCB0byBlaXRoZXIgcmV1c2UgYnVmZmVyLCBvciBzdXBw
b3J0IHJlYWRiYWNrcyBmcm9tCisgKiAgICAgICAgZmxvYXRpbmctcG9pbnQvbm9ybTE2IGZyYW1l
YnVmZmVycy4KKyAqIEBwYXJhbSB7R0xlbnVtfSBvcHRfcmVhZEJhY2tUeXBlIG9wdGlvbmFsIHJl
YWQgYmFjayB0eXBlLCBkZWZhdWx0aW5nIHRvCisgKiAgICAgICAgZ2wuVU5TSUdORURfQllURS4g
Q2FuIGJlIHVzZWQgdG8gc3VwcG9ydCByZWFkYmFjayBmcm9tIGZsb2F0aW5nLXBvaW50CisgKiAg
ICAgICAgL25vcm0xNiBmcmFtZWJ1ZmZlcnMuCisgKiBAcGFyYW0ge0dMZW51bX0gb3B0X3JlYWRC
YWNrRm9ybWF0IG9wdGlvbmFsIHJlYWQgYmFjayBmb3JtYXQsIGRlZmF1bHRpbmcgdG8KKyAqICAg
ICAgICBnbC5SR0JBLiBDYW4gYmUgdXNlZCB0byBzdXBwb3J0IHJlYWRiYWNrIGZyb20gbm9ybTE2
CisgKiAgICAgICAgZnJhbWVidWZmZXJzLgorICovCit2YXIgY2hlY2tDYW52YXNSZWN0Q29sb3Ig
PSBmdW5jdGlvbihnbCwgeCwgeSwgd2lkdGgsIGhlaWdodCwgY29sb3IsIG9wdF9lcnJvclJhbmdl
LCBzYW1lRm4sIGRpZmZlcmVudEZuLCBsb2dGbiwgb3B0X3JlYWRCYWNrQnVmLCBvcHRfcmVhZEJh
Y2tUeXBlLCBvcHRfcmVhZEJhY2tGb3JtYXQpIHsKKyAgaWYgKGlzV2ViR0xDb250ZXh0KGdsKSAm
JiAhZ2wuZ2V0UGFyYW1ldGVyKGdsLkZSQU1FQlVGRkVSX0JJTkRJTkcpKSB7CisgICAgLy8gV2Un
cmUgcmVhZGluZyB0aGUgYmFja2J1ZmZlciBzbyBjbGlwLgorICAgIHZhciB4ciA9IGNsaXBUb1Jh
bmdlKHgsIHdpZHRoLCAwLCBnbC5jYW52YXMud2lkdGgpOworICAgIHZhciB5ciA9IGNsaXBUb1Jh
bmdlKHksIGhlaWdodCwgMCwgZ2wuY2FudmFzLmhlaWdodCk7CisgICAgaWYgKCF4ci5leHRlbnQg
fHwgIXlyLmV4dGVudCkgeworICAgICAgbG9nRm4oImNoZWNraW5nIHJlY3Q6IGVmZmVjdGl2ZSB3
aWR0aCBvciBoZWlnaHQgaXMgemVybyIpOworICAgICAgc2FtZUZuKCk7CisgICAgICByZXR1cm47
CisgICAgfQorICAgIHggPSB4ci52YWx1ZTsKKyAgICB5ID0geXIudmFsdWU7CisgICAgd2lkdGgg
PSB4ci5leHRlbnQ7CisgICAgaGVpZ2h0ID0geXIuZXh0ZW50OworICB9CisgIHZhciBlcnJvclJh
bmdlID0gb3B0X2Vycm9yUmFuZ2UgfHwgMDsKKyAgaWYgKCFlcnJvclJhbmdlLmxlbmd0aCkgewor
ICAgIGVycm9yUmFuZ2UgPSBbZXJyb3JSYW5nZSwgZXJyb3JSYW5nZSwgZXJyb3JSYW5nZSwgZXJy
b3JSYW5nZV0KKyAgfQorICB2YXIgYnVmOworICBpZiAoaXNXZWJHTENvbnRleHQoZ2wpKSB7Cisg
ICAgYnVmID0gb3B0X3JlYWRCYWNrQnVmID8gb3B0X3JlYWRCYWNrQnVmIDogbmV3IFVpbnQ4QXJy
YXkod2lkdGggKiBoZWlnaHQgKiA0KTsKKyAgICB2YXIgcmVhZEJhY2tUeXBlID0gb3B0X3JlYWRC
YWNrVHlwZSA/IG9wdF9yZWFkQmFja1R5cGUgOiBnbC5VTlNJR05FRF9CWVRFOworICAgIHZhciBy
ZWFkQmFja0Zvcm1hdCA9IG9wdF9yZWFkQmFja0Zvcm1hdCA/IG9wdF9yZWFkQmFja0Zvcm1hdCA6
IGdsLlJHQkE7CisgICAgZ2wucmVhZFBpeGVscyh4LCB5LCB3aWR0aCwgaGVpZ2h0LCByZWFkQmFj
a0Zvcm1hdCwgcmVhZEJhY2tUeXBlLCBidWYpOworICB9IGVsc2UgeworICAgIGJ1ZiA9IGdsLmdl
dEltYWdlRGF0YSh4LCB5LCB3aWR0aCwgaGVpZ2h0KS5kYXRhOworICB9CisgIGZvciAodmFyIGkg
PSAwOyBpIDwgd2lkdGggKiBoZWlnaHQ7ICsraSkgeworICAgIHZhciBvZmZzZXQgPSBpICogNDsK
KyAgICBmb3IgKHZhciBqID0gMDsgaiA8IGNvbG9yLmxlbmd0aDsgKytqKSB7CisgICAgICBpZiAo
TWF0aC5hYnMoYnVmW29mZnNldCArIGpdIC0gY29sb3Jbal0pID4gZXJyb3JSYW5nZVtqXSkgewor
ICAgICAgICB2YXIgd2FzID0gYnVmW29mZnNldCArIDBdLnRvU3RyaW5nKCk7CisgICAgICAgIGZv
ciAoaiA9IDE7IGogPCBjb2xvci5sZW5ndGg7ICsraikgeworICAgICAgICAgIHdhcyArPSAiLCIg
KyBidWZbb2Zmc2V0ICsgal07CisgICAgICAgIH0KKyAgICAgICAgZGlmZmVyZW50Rm4oJ2F0ICgn
ICsgKHggKyAoaSAlIHdpZHRoKSkgKyAnLCAnICsgKHkgKyBNYXRoLmZsb29yKGkgLyB3aWR0aCkp
ICsKKyAgICAgICAgICAgICAgICAgICAgJykgZXhwZWN0ZWQ6ICcgKyBjb2xvciArICcgd2FzICcg
KyB3YXMpOworICAgICAgICByZXR1cm47CisgICAgICB9CisgICAgfQorICB9CisgIHNhbWVGbigp
OworfTsKKworLyoqCisgKiBDaGVja3MgdGhhdCBhIHBvcnRpb24gb2YgYSBjYW52YXMgb3IgdGhl
IGN1cnJlbnRseSBhdHRhY2hlZCBmcmFtZWJ1ZmZlciBpcyAxIGNvbG9yLgorICogQHBhcmFtIHsh
V2ViR0xSZW5kZXJpbmdDb250ZXh0fENhbnZhc1JlbmRlcmluZ0NvbnRleHQyRH0gZ2wgVGhlCisg
KiAgICAgICAgIFdlYkdMUmVuZGVyaW5nQ29udGV4dCBvciAyRCBjb250ZXh0IHRvIHVzZS4KKyAq
IEBwYXJhbSB7bnVtYmVyfSB4IGxlZnQgY29ybmVyIG9mIHJlZ2lvbiB0byBjaGVjay4KKyAqIEBw
YXJhbSB7bnVtYmVyfSB5IGJvdHRvbSBjb3JuZXIgb2YgcmVnaW9uIHRvIGNoZWNrIGluIGNhc2Ug
b2YgY2hlY2tpbmcgZnJvbQorICogICAgICAgIGEgR0wgY29udGV4dCBvciB0b3AgY29ybmVyIGlu
IGNhc2Ugb2YgY2hlY2tpbmcgZnJvbSBhIDJEIGNvbnRleHQuCisgKiBAcGFyYW0ge251bWJlcn0g
d2lkdGggd2lkdGggb2YgcmVnaW9uIHRvIGNoZWNrLgorICogQHBhcmFtIHtudW1iZXJ9IGhlaWdo
dCB3aWR0aCBvZiByZWdpb24gdG8gY2hlY2suCisgKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0g
Y29sb3IgVGhlIGNvbG9yIGV4cGVjdGVkLiBBIDQgZWxlbWVudCBhcnJheSB3aGVyZQorICogICAg
ICAgIGVhY2ggZWxlbWVudCBpcyBpbiB0aGUgcmFuZ2UgMCB0byAyNTUuCisgKiBAcGFyYW0ge3N0
cmluZ30gb3B0X21zZyBNZXNzYWdlIHRvIGFzc29jaWF0ZSB3aXRoIHN1Y2Nlc3Mgb3IgZmFpbHVy
ZS4gRWcKKyAqICAgICAgICAoInNob3VsZCBiZSByZWQiKS4KKyAqIEBwYXJhbSB7bnVtYmVyfSBv
cHRfZXJyb3JSYW5nZSBPcHRpb25hbC4gQWNjZXB0YWJsZSBlcnJvciBpbgorICogICAgICAgIGNv
bG9yIGNoZWNraW5nLiAwIGJ5IGRlZmF1bHQuCisgKiBAcGFyYW0ge1R5cGVkQXJyYXl9IG9wdF9y
ZWFkQmFja0J1ZiBvcHRpb25hbCBidWZmZXIgdG8gcmVhZCBiYWNrIGludG8uCisgKiAgICAgICAg
VHlwaWNhbGx5IHBhc3NlZCB0byBlaXRoZXIgcmV1c2UgYnVmZmVyLCBvciBzdXBwb3J0IHJlYWRi
YWNrcyBmcm9tCisgKiAgICAgICAgZmxvYXRpbmctcG9pbnQvbm9ybTE2IGZyYW1lYnVmZmVycy4K
KyAqIEBwYXJhbSB7R0xlbnVtfSBvcHRfcmVhZEJhY2tUeXBlIG9wdGlvbmFsIHJlYWQgYmFjayB0
eXBlLCBkZWZhdWx0aW5nIHRvCisgKiAgICAgICAgZ2wuVU5TSUdORURfQllURS4gQ2FuIGJlIHVz
ZWQgdG8gc3VwcG9ydCByZWFkYmFjayBmcm9tIGZsb2F0aW5nLXBvaW50CisgKiAgICAgICAgL25v
cm0xNiBmcmFtZWJ1ZmZlcnMuCisgKiBAcGFyYW0ge0dMZW51bX0gb3B0X3JlYWRCYWNrRm9ybWF0
IG9wdGlvbmFsIHJlYWQgYmFjayBmb3JtYXQsIGRlZmF1bHRpbmcgdG8KKyAqICAgICAgICBnbC5S
R0JBLiBDYW4gYmUgdXNlZCB0byBzdXBwb3J0IHJlYWRiYWNrIGZyb20gZmxvYXRpbmctcG9pbnQK
KyAqICAgICAgICAvbm9ybTE2IGZyYW1lYnVmZmVycy4KKyAqLwordmFyIGNoZWNrQ2FudmFzUmVj
dCA9IGZ1bmN0aW9uKGdsLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBjb2xvciwgb3B0X21zZywgb3B0
X2Vycm9yUmFuZ2UsIG9wdF9yZWFkQmFja0J1Ziwgb3B0X3JlYWRCYWNrVHlwZSwgb3B0X3JlYWRC
YWNrRm9ybWF0KSB7CisgIGNoZWNrQ2FudmFzUmVjdENvbG9yKAorICAgICAgZ2wsIHgsIHksIHdp
ZHRoLCBoZWlnaHQsIGNvbG9yLCBvcHRfZXJyb3JSYW5nZSwKKyAgICAgIGZ1bmN0aW9uKCkgewor
ICAgICAgICB2YXIgbXNnID0gb3B0X21zZzsKKyAgICAgICAgaWYgKG1zZyA9PT0gdW5kZWZpbmVk
KQorICAgICAgICAgIG1zZyA9ICJzaG91bGQgYmUgIiArIGNvbG9yLnRvU3RyaW5nKCk7CisgICAg
ICAgIHRlc3RQYXNzZWQobXNnKTsKKyAgICAgIH0sCisgICAgICBmdW5jdGlvbihkaWZmZXJlbnRN
c2cpIHsKKyAgICAgICAgdmFyIG1zZyA9IG9wdF9tc2c7CisgICAgICAgIGlmIChtc2cgPT09IHVu
ZGVmaW5lZCkKKyAgICAgICAgICBtc2cgPSAic2hvdWxkIGJlICIgKyBjb2xvci50b1N0cmluZygp
OworICAgICAgICB0ZXN0RmFpbGVkKG1zZyArICJcbiIgKyBkaWZmZXJlbnRNc2cpOworICAgICAg
fSwKKyAgICAgIGRlYnVnLAorICAgICAgb3B0X3JlYWRCYWNrQnVmLAorICAgICAgb3B0X3JlYWRC
YWNrVHlwZSwKKyAgICAgIG9wdF9yZWFkQmFja0Zvcm1hdCk7Cit9OworCisvKioKKyAqIENoZWNr
cyB0aGF0IGFuIGVudGlyZSBjYW52YXMgb3IgdGhlIGN1cnJlbnRseSBhdHRhY2hlZCBmcmFtZWJ1
ZmZlciBpcyAxIGNvbG9yLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fENhbnZh
c1JlbmRlcmluZ0NvbnRleHQyRH0gZ2wgVGhlCisgKiAgICAgICAgIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCBvciAyRCBjb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+fSBj
b2xvciBUaGUgY29sb3IgZXhwZWN0ZWQuIEEgNCBlbGVtZW50IGFycmF5IHdoZXJlCisgKiAgICAg
ICAgZWFjaCBlbGVtZW50IGlzIGluIHRoZSByYW5nZSAwIHRvIDI1NS4KKyAqIEBwYXJhbSB7c3Ry
aW5nfSBtc2cgTWVzc2FnZSB0byBhc3NvY2lhdGUgd2l0aCBzdWNjZXNzLiBFZyAoInNob3VsZCBi
ZSByZWQiKS4KKyAqIEBwYXJhbSB7bnVtYmVyfSBlcnJvclJhbmdlIE9wdGlvbmFsLiBBY2NlcHRh
YmxlIGVycm9yIGluCisgKiAgICAgICAgY29sb3IgY2hlY2tpbmcuIDAgYnkgZGVmYXVsdC4KKyAq
LwordmFyIGNoZWNrQ2FudmFzID0gZnVuY3Rpb24oZ2wsIGNvbG9yLCBtc2csIGVycm9yUmFuZ2Up
IHsKKyAgY2hlY2tDYW52YXNSZWN0KGdsLCAwLCAwLCBnbC5jYW52YXMud2lkdGgsIGdsLmNhbnZh
cy5oZWlnaHQsIGNvbG9yLCBtc2csIGVycm9yUmFuZ2UpOworfTsKKworLyoqCisgKiBDaGVja3Mg
YSByZWN0YW5ndWxhciBhcmVhIGJvdGggaW5zaWRlIHRoZSBhcmVhIGFuZCBvdXRzaWRlCisgKiB0
aGUgYXJlYS4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dHxDYW52YXNSZW5kZXJp
bmdDb250ZXh0MkR9IGdsIFRoZQorICogICAgICAgICBXZWJHTFJlbmRlcmluZ0NvbnRleHQgb3Ig
MkQgY29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge251bWJlcn0geCBsZWZ0IGNvcm5lciBvZiBy
ZWdpb24gdG8gY2hlY2suCisgKiBAcGFyYW0ge251bWJlcn0geSBib3R0b20gY29ybmVyIG9mIHJl
Z2lvbiB0byBjaGVjayBpbiBjYXNlIG9mIGNoZWNraW5nIGZyb20KKyAqICAgICAgICBhIEdMIGNv
bnRleHQgb3IgdG9wIGNvcm5lciBpbiBjYXNlIG9mIGNoZWNraW5nIGZyb20gYSAyRCBjb250ZXh0
LgorICogQHBhcmFtIHtudW1iZXJ9IHdpZHRoIHdpZHRoIG9mIHJlZ2lvbiB0byBjaGVjay4KKyAq
IEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgd2lkdGggb2YgcmVnaW9uIHRvIGNoZWNrLgorICogQHBh
cmFtIHshQXJyYXkuPG51bWJlcj59IGlubmVyQ29sb3IgVGhlIGNvbG9yIGV4cGVjdGVkIGluc2lk
ZQorICogICAgIHRoZSBhcmVhLiBBIDQgZWxlbWVudCBhcnJheSB3aGVyZSBlYWNoIGVsZW1lbnQg
aXMgaW4gdGhlCisgKiAgICAgcmFuZ2UgMCB0byAyNTUuCisgKiBAcGFyYW0geyFBcnJheS48bnVt
YmVyPn0gb3V0ZXJDb2xvciBUaGUgY29sb3IgZXhwZWN0ZWQKKyAqICAgICBvdXRzaWRlLiBBIDQg
ZWxlbWVudCBhcnJheSB3aGVyZSBlYWNoIGVsZW1lbnQgaXMgaW4gdGhlCisgKiAgICAgcmFuZ2Ug
MCB0byAyNTUuCisgKiBAcGFyYW0geyFudW1iZXJ9IG9wdF9lZGdlU2l6ZTogVGhlIG51bWJlciBv
ZiBwaXhlbHMgdG8gc2tpcAorICogICAgIGFyb3VuZCB0aGUgZWRnZXMgb2YgdGhlIGFyZWEuIERl
ZmF1dCAwLgorICogQHBhcmFtIHshe3dpZHRoOm51bWJlciwgaGVpZ2h0Om51bWJlcn19IG9wdF9v
dXRlckRpbWVuc2lvbnMKKyAqICAgICBUaGUgb3V0ZXIgZGltZW5zaW9ucy4gRGVmYXVsdCB0aGUg
c2l6ZSBvZiBnbC5jYW52YXMuCisgKi8KK3ZhciBjaGVja0FyZWFJbkFuZE91dCA9IGZ1bmN0aW9u
KGdsLCB4LCB5LCB3aWR0aCwgaGVpZ2h0LCBpbm5lckNvbG9yLCBvdXRlckNvbG9yLCBvcHRfZWRn
ZVNpemUsIG9wdF9vdXRlckRpbWVuc2lvbnMpIHsKKyAgdmFyIG91dGVyRGltZW5zaW9ucyA9IG9w
dF9vdXRlckRpbWVuc2lvbnMgfHwgeyB3aWR0aDogZ2wuY2FudmFzLndpZHRoLCBoZWlnaHQ6IGds
LmNhbnZhcy5oZWlnaHQgfTsKKyAgdmFyIGVkZ2VTaXplID0gb3B0X2VkZ2VTaXplIHx8IDA7Cisg
IGNoZWNrQ2FudmFzUmVjdChnbCwgeCArIGVkZ2VTaXplLCB5ICsgZWRnZVNpemUsIHdpZHRoIC0g
ZWRnZVNpemUgKiAyLCBoZWlnaHQgLSBlZGdlU2l6ZSAqIDIsIGlubmVyQ29sb3IpOworICBjaGVj
a0NhbnZhc1JlY3QoZ2wsIDAsIDAsIHggLSBlZGdlU2l6ZSwgb3V0ZXJEaW1lbnNpb25zLmhlaWdo
dCwgb3V0ZXJDb2xvcik7CisgIGNoZWNrQ2FudmFzUmVjdChnbCwgeCArIHdpZHRoICsgZWRnZVNp
emUsIDAsIG91dGVyRGltZW5zaW9ucy53aWR0aCAtIHggLSB3aWR0aCAtIGVkZ2VTaXplLCBvdXRl
ckRpbWVuc2lvbnMuaGVpZ2h0LCBvdXRlckNvbG9yKTsKKyAgY2hlY2tDYW52YXNSZWN0KGdsLCAw
LCAwLCBvdXRlckRpbWVuc2lvbnMud2lkdGgsIHkgLSBlZGdlU2l6ZSwgb3V0ZXJDb2xvcik7Cisg
IGNoZWNrQ2FudmFzUmVjdChnbCwgMCwgeSArIGhlaWdodCArIGVkZ2VTaXplLCBvdXRlckRpbWVu
c2lvbnMud2lkdGgsIG91dGVyRGltZW5zaW9ucy5oZWlnaHQgLSB5IC0gaGVpZ2h0IC0gZWRnZVNp
emUsIG91dGVyQ29sb3IpOworfTsKKworLyoqCisgKiBDaGVja3MgdGhhdCBhbiBlbnRpcmUgYnVm
ZmVyIG1hdGNoZXMgdGhlIGZsb2F0aW5nIHBvaW50IHZhbHVlcyBwcm92aWRlZC4KKyAqIChXZWJH
TCAyLjAgb25seSkKKyAqIEBwYXJhbSB7IVdlYkdMMlJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBX
ZWJHTDJSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7bnVtYmVyfSB0YXJnZXQg
VGhlIGJ1ZmZlciB0YXJnZXQgdG8gYmluZCB0by4KKyAqIEBwYXJhbSB7IUFycmF5LjxudW1iZXI+
fSBleHBlY3RlZCBUaGUgdmFsdWVzIGV4cGVjdGVkLgorICogQHBhcmFtIHtzdHJpbmd9IG9wdF9t
c2cgT3B0aW9uYWwuIE1lc3NhZ2UgdG8gYXNzb2NpYXRlIHdpdGggc3VjY2Vzcy4gRWcgKCJzaG91
bGQgYmUgcmVkIikuCisgKiBAcGFyYW0ge251bWJlcn0gb3B0X2Vycm9yUmFuZ2UgT3B0aW9uYWwu
IEFjY2VwdGFibGUgZXJyb3IgaW4gdmFsdWUgY2hlY2tpbmcuIDAuMDAxIGJ5IGRlZmF1bHQuCisg
Ki8KK3ZhciBjaGVja0Zsb2F0QnVmZmVyID0gZnVuY3Rpb24oZ2wsIHRhcmdldCwgZXhwZWN0ZWQs
IG9wdF9tc2csIG9wdF9lcnJvclJhbmdlKSB7CisgIGlmIChvcHRfbXNnID09PSB1bmRlZmluZWQp
CisgICAgb3B0X21zZyA9ICJidWZmZXIgc2hvdWxkIG1hdGNoIGV4cGVjdGVkIHZhbHVlcyI7CisK
KyAgaWYgKG9wdF9lcnJvclJhbmdlID09PSB1bmRlZmluZWQpCisgICAgb3B0X2Vycm9yUmFuZ2Ug
PSAwLjAwMTsKKworICB2YXIgZmxvYXRBcnJheSA9IG5ldyBGbG9hdDMyQXJyYXkoZXhwZWN0ZWQu
bGVuZ3RoKTsKKyAgZ2wuZ2V0QnVmZmVyU3ViRGF0YSh0YXJnZXQsIDAsIGZsb2F0QXJyYXkpOwor
CisgIGZvciAodmFyIGkgPSAwOyBpIDwgZXhwZWN0ZWQubGVuZ3RoOyBpKyspIHsKKyAgICBpZiAo
TWF0aC5hYnMoZmxvYXRBcnJheVtpXSAtIGV4cGVjdGVkW2ldKSA+IG9wdF9lcnJvclJhbmdlKSB7
CisgICAgICB0ZXN0RmFpbGVkKG9wdF9tc2cpOworICAgICAgZGVidWcoJ2F0IFsnICsgaSArICdd
IGV4cGVjdGVkOiAnICsgZXhwZWN0ZWRbaV0gKyAnIHdhcyAnICsgZmxvYXRBcnJheVtpXSk7Cisg
ICAgICByZXR1cm47CisgICAgfQorICB9CisgIHRlc3RQYXNzZWQob3B0X21zZyk7Cit9OworCisv
KioKKyAqIExvYWRzIGEgdGV4dHVyZSwgY2FsbHMgY2FsbGJhY2sgd2hlbiBmaW5pc2hlZC4KKyAq
IEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFVSTCBvZiBpbWFnZSB0byBsb2Fk
CisgKiBAcGFyYW0ge2Z1bmN0aW9uKCFJbWFnZSk6IHZvaWR9IGNhbGxiYWNrIEZ1bmN0aW9uIHRo
YXQgZ2V0cyBjYWxsZWQgYWZ0ZXIKKyAqICAgICAgICBpbWFnZSBoYXMgbG9hZGVkCisgKiBAcmV0
dXJuIHshV2ViR0xUZXh0dXJlfSBUaGUgY3JlYXRlZCB0ZXh0dXJlLgorICovCit2YXIgbG9hZFRl
eHR1cmUgPSBmdW5jdGlvbihnbCwgdXJsLCBjYWxsYmFjaykgeworICAgIHZhciB0ZXh0dXJlID0g
Z2wuY3JlYXRlVGV4dHVyZSgpOworICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRl
eHR1cmUpOworICAgIGdsLnRleFBhcmFtZXRlcmkoZ2wuVEVYVFVSRV8yRCwgZ2wuVEVYVFVSRV9N
SU5fRklMVEVSLCBnbC5ORUFSRVNUKTsKKyAgICBnbC50ZXhQYXJhbWV0ZXJpKGdsLlRFWFRVUkVf
MkQsIGdsLlRFWFRVUkVfTUFHX0ZJTFRFUiwgZ2wuTkVBUkVTVCk7CisgICAgdmFyIGltYWdlID0g
bmV3IEltYWdlKCk7CisgICAgaW1hZ2Uub25sb2FkID0gZnVuY3Rpb24oKSB7CisgICAgICAgIGds
LmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVfMkQsIHRleHR1cmUpOworICAgICAgICBnbC5waXhlbFN0
b3JlaShnbC5VTlBBQ0tfRkxJUF9ZX1dFQkdMLCB0cnVlKTsKKyAgICAgICAgZ2wudGV4SW1hZ2Uy
RChnbC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBp
bWFnZSk7CisgICAgICAgIGNhbGxiYWNrKGltYWdlKTsKKyAgICB9OworICAgIGltYWdlLnNyYyA9
IHVybDsKKyAgICByZXR1cm4gdGV4dHVyZTsKK307CisKKy8qKgorICogQ2hlY2tzIHdoZXRoZXIg
dGhlIGJvdW5kIHRleHR1cmUgaGFzIGV4cGVjdGVkIGRpbWVuc2lvbnMuIE9uZSBjb3JuZXIgcGl4
ZWwKKyAqIG9mIHRoZSB0ZXh0dXJlIHdpbGwgYmUgY2hhbmdlZCBhcyBhIHNpZGUgZWZmZWN0Lgor
ICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdD
b250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7IVdlYkdMVGV4dHVyZX0gdGV4dHVyZSBUaGUgdGV4
dHVyZSB0byBjaGVjay4KKyAqIEBwYXJhbSB7bnVtYmVyfSB3aWR0aCBFeHBlY3RlZCB3aWR0aC4K
KyAqIEBwYXJhbSB7bnVtYmVyfSBoZWlnaHQgRXhwZWN0ZWQgaGVpZ2h0LgorICogQHBhcmFtIHtH
TGVudW19IG9wdF9mb3JtYXQgVGhlIHRleHR1cmUncyBmb3JtYXQuIERlZmF1bHRzIHRvIFJHQkEu
CisgKiBAcGFyYW0ge0dMZW51bX0gb3B0X3R5cGUgVGhlIHRleHR1cmUncyB0eXBlLiBEZWZhdWx0
cyB0byBVTlNJR05FRF9CWVRFLgorICovCit2YXIgY2hlY2tUZXh0dXJlU2l6ZSA9IGZ1bmN0aW9u
KGdsLCB3aWR0aCwgaGVpZ2h0LCBvcHRfZm9ybWF0LCBvcHRfdHlwZSkgeworICBvcHRfZm9ybWF0
ID0gb3B0X2Zvcm1hdCB8fCBnbC5SR0JBOworICBvcHRfdHlwZSA9IG9wdF90eXBlIHx8IGdsLlVO
U0lHTkVEX0JZVEU7CisKKyAgdmFyIG51bUVsZW1lbnRzID0gZ2V0VHlwZWRBcnJheUVsZW1lbnRz
UGVyUGl4ZWwoZ2wsIG9wdF9mb3JtYXQsIG9wdF90eXBlKTsKKyAgdmFyIGJ1ZiA9IG5ldyAoZ2xU
eXBlVG9UeXBlZEFycmF5VHlwZShnbCwgb3B0X3R5cGUpKShudW1FbGVtZW50cyk7CisKKyAgdmFy
IGVycm9ycyA9IDA7CisgIGdsLnRleFN1YkltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgd2lkdGgg
LSAxLCBoZWlnaHQgLSAxLCAxLCAxLCBvcHRfZm9ybWF0LCBvcHRfdHlwZSwgYnVmKTsKKyAgaWYg
KGdsLmdldEVycm9yKCkgIT0gZ2wuTk9fRVJST1IpIHsKKyAgICB0ZXN0RmFpbGVkKCJUZXh0dXJl
IHdhcyBzbWFsbGVyIHRoYW4gdGhlIGV4cGVjdGVkIHNpemUgIiArIHdpZHRoICsgIngiICsgaGVp
Z2h0KTsKKyAgICArK2Vycm9yczsKKyAgfQorICBnbC50ZXhTdWJJbWFnZTJEKGdsLlRFWFRVUkVf
MkQsIDAsIHdpZHRoIC0gMSwgaGVpZ2h0LCAxLCAxLCBvcHRfZm9ybWF0LCBvcHRfdHlwZSwgYnVm
KTsKKyAgaWYgKGdsLmdldEVycm9yKCkgPT0gZ2wuTk9fRVJST1IpIHsKKyAgICB0ZXN0RmFpbGVk
KCJUZXh0dXJlIHdhcyB0YWxsZXIgdGhhbiAiICsgaGVpZ2h0KTsKKyAgICArK2Vycm9yczsKKyAg
fQorICBnbC50ZXhTdWJJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIHdpZHRoLCBoZWlnaHQgLSAx
LCAxLCAxLCBvcHRfZm9ybWF0LCBvcHRfdHlwZSwgYnVmKTsKKyAgaWYgKGdsLmdldEVycm9yKCkg
PT0gZ2wuTk9fRVJST1IpIHsKKyAgICB0ZXN0RmFpbGVkKCJUZXh0dXJlIHdhcyB3aWRlciB0aGFu
ICIgKyB3aWR0aCk7CisgICAgKytlcnJvcnM7CisgIH0KKyAgaWYgKGVycm9ycyA9PSAwKSB7Cisg
ICAgdGVzdFBhc3NlZCgiVGV4dHVyZSBoYWQgdGhlIGV4cGVjdGVkIHNpemUgIiArIHdpZHRoICsg
IngiICsgaGVpZ2h0KTsKKyAgfQorfTsKKworLyoqCisgKiBNYWtlcyBhIHNoYWxsb3cgY29weSBv
ZiBhbiBvYmplY3QuCisgKiBAcGFyYW0geyFPYmplY3R9IHNyYyBPYmplY3QgdG8gY29weQorICog
QHJldHVybiB7IU9iamVjdH0gVGhlIGNvcHkgb2Ygc3JjLgorICovCit2YXIgc2hhbGxvd0NvcHlP
YmplY3QgPSBmdW5jdGlvbihzcmMpIHsKKyAgdmFyIGRzdCA9IHt9OworICBmb3IgKHZhciBhdHRy
IGluIHNyYykgeworICAgIGlmIChzcmMuaGFzT3duUHJvcGVydHkoYXR0cikpIHsKKyAgICAgIGRz
dFthdHRyXSA9IHNyY1thdHRyXTsKKyAgICB9CisgIH0KKyAgcmV0dXJuIGRzdDsKK307CisKKy8q
KgorICogQ2hlY2tzIGlmIGFuIGF0dHJpYnV0ZSBleGlzdHMgb24gYW4gb2JqZWN0IGNhc2UgaW5z
ZW5zaXRpdmUuCisgKiBAcGFyYW0geyFPYmplY3R9IG9iaiBPYmplY3QgdG8gY2hlY2sKKyAqIEBw
YXJhbSB7c3RyaW5nfSBhdHRyIE5hbWUgb2YgYXR0cmlidXRlIHRvIGxvb2sgZm9yLgorICogQHJl
dHVybiB7c3RyaW5nP30gVGhlIG5hbWUgb2YgdGhlIGF0dHJpYnV0ZSBpZiBpdCBleGlzdHMsCisg
KiAgICAgICAgIHVuZGVmaW5lZCBpZiBub3QuCisgKi8KK3ZhciBoYXNBdHRyaWJ1dGVDYXNlSW5z
ZW5zaXRpdmUgPSBmdW5jdGlvbihvYmosIGF0dHIpIHsKKyAgdmFyIGxvd2VyID0gYXR0ci50b0xv
d2VyQ2FzZSgpOworICBmb3IgKHZhciBrZXkgaW4gb2JqKSB7CisgICAgaWYgKG9iai5oYXNPd25Q
cm9wZXJ0eShrZXkpICYmIGtleS50b0xvd2VyQ2FzZSgpID09IGxvd2VyKSB7CisgICAgICByZXR1
cm4ga2V5OworICAgIH0KKyAgfQorfTsKKworLyoqCisgKiBSZXR1cm5zIGEgbWFwIG9mIFVSTCBx
dWVyeXN0cmluZyBvcHRpb25zCisgKiBAcmV0dXJuIHtPYmplY3Q/fSBPYmplY3QgY29udGFpbmlu
ZyBhbGwgdGhlIHZhbHVlcyBpbiB0aGUgVVJMIHF1ZXJ5c3RyaW5nCisgKi8KK3ZhciBnZXRVcmxP
cHRpb25zID0gKGZ1bmN0aW9uKCkgeworICB2YXIgX3VybE9wdGlvbnNQYXJzZWQgPSBmYWxzZTsK
KyAgdmFyIF91cmxPcHRpb25zID0ge307CisgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICBpZiAo
IV91cmxPcHRpb25zUGFyc2VkKSB7CisgICAgICB2YXIgcyA9IHdpbmRvdy5sb2NhdGlvbi5ocmVm
OworICAgICAgdmFyIHEgPSBzLmluZGV4T2YoIj8iKTsKKyAgICAgIHZhciBlID0gcy5pbmRleE9m
KCIjIik7CisgICAgICBpZiAoZSA8IDApIHsKKyAgICAgICAgZSA9IHMubGVuZ3RoOworICAgICAg
fQorICAgICAgdmFyIHF1ZXJ5ID0gcy5zdWJzdHJpbmcocSArIDEsIGUpOworICAgICAgdmFyIHBh
aXJzID0gcXVlcnkuc3BsaXQoIiYiKTsKKyAgICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCBwYWly
cy5sZW5ndGg7ICsraWkpIHsKKyAgICAgICAgdmFyIGtleVZhbHVlID0gcGFpcnNbaWldLnNwbGl0
KCI9Iik7CisgICAgICAgIHZhciBrZXkgPSBrZXlWYWx1ZVswXTsKKyAgICAgICAgdmFyIHZhbHVl
ID0gZGVjb2RlVVJJQ29tcG9uZW50KGtleVZhbHVlWzFdKTsKKyAgICAgICAgX3VybE9wdGlvbnNb
a2V5XSA9IHZhbHVlOworICAgICAgfQorICAgICAgX3VybE9wdGlvbnNQYXJzZWQgPSB0cnVlOwor
ICAgIH0KKworICAgIHJldHVybiBfdXJsT3B0aW9uczsKKyAgfQorfSkoKTsKKwordmFyIGRlZmF1
bHQzRENvbnRleHRWZXJzaW9uID0gMTsKKworLyoqCisgKiBTZXQgdGhlIGRlZmF1bHQgY29udGV4
dCB2ZXJzaW9uIGZvciBjcmVhdGUzRENvbnRleHQuCisgKiBJbml0aWFsbHkgdGhlIGRlZmF1bHQg
dmVyc2lvbiBpcyAxLgorICogQHBhcmFtIHtudW1iZXJ9IERlZmF1bHQgdmVyc2lvbiBvZiBXZWJH
TCBjb250ZXh0cy4KKyAqLwordmFyIHNldERlZmF1bHQzRENvbnRleHRWZXJzaW9uID0gZnVuY3Rp
b24odmVyc2lvbikgeworICAgIGRlZmF1bHQzRENvbnRleHRWZXJzaW9uID0gdmVyc2lvbjsKK307
CisKKy8qKgorICogR2V0IHRoZSBkZWZhdWx0IGNvbnRleCB2ZXJzaW9uIGZvciBjcmVhdGUzRENv
bnRleHQuCisgKiBGaXJzdCBpdCBsb29rcyBhdCB0aGUgVVJJIG9wdGlvbiB8d2ViZ2xWZXJzaW9u
fC4gSWYgaXQgZG9lcyBub3QgZXhpc3QsCisgKiB0aGVuIGxvb2sgYXQgdGhlIGdsb2JhbCBkZWZh
dWx0M0RDb250ZXh0VmVyc2lvbiB2YXJpYWJsZS4KKyAqLwordmFyIGdldERlZmF1bHQzRENvbnRl
eHRWZXJzaW9uID0gZnVuY3Rpb24oKSB7CisgICAgcmV0dXJuIHBhcnNlSW50KGdldFVybE9wdGlv
bnMoKS53ZWJnbFZlcnNpb24sIDEwKSB8fCBkZWZhdWx0M0RDb250ZXh0VmVyc2lvbjsKK307CisK
Ky8qKgorICogQ3JlYXRlcyBhIHdlYmdsIGNvbnRleHQuCisgKiBAcGFyYW0geyFDYW52YXN8c3Ry
aW5nfSBvcHRfY2FudmFzIFRoZSBjYW52YXMgdGFnIHRvIGdldAorICogICAgIGNvbnRleHQgZnJv
bS4gSWYgb25lIGlzIG5vdCBwYXNzZWQgaW4gb25lIHdpbGwgYmUKKyAqICAgICBjcmVhdGVkLiBJ
ZiBpdCdzIGEgc3RyaW5nIGl0J3MgYXNzdW1lZCB0byBiZSB0aGUgaWQgb2YgYQorICogICAgIGNh
bnZhcy4KKyAqIEBwYXJhbSB7T2JqZWN0fSBvcHRfYXR0cmlidXRlcyBDb250ZXh0IGF0dHJpYnV0
ZXMuCisgKiBAcGFyYW0geyFudW1iZXJ9IG9wdF92ZXJzaW9uIFZlcnNpb24gb2YgV2ViR0wgY29u
dGV4dCB0byBjcmVhdGUuCisgKiAgICAgVGhlIGRlZmF1bHQgdmVyc2lvbiBjYW4gYmUgc2V0IGJ5
IGNhbGxpbmcgc2V0RGVmYXVsdDNEQ29udGV4dFZlcnNpb24uCisgKiBAcmV0dXJuIHshV2ViR0xS
ZW5kZXJpbmdDb250ZXh0fSBUaGUgY3JlYXRlZCBjb250ZXh0LgorICovCit2YXIgY3JlYXRlM0RD
b250ZXh0ID0gZnVuY3Rpb24ob3B0X2NhbnZhcywgb3B0X2F0dHJpYnV0ZXMsIG9wdF92ZXJzaW9u
KSB7CisgIGlmICh3aW5kb3cuaW5pdFRlc3RpbmdIYXJuZXNzKSB7CisgICAgd2luZG93LmluaXRU
ZXN0aW5nSGFybmVzcygpOworICB9CisgIHZhciBhdHRyaWJ1dGVzID0gc2hhbGxvd0NvcHlPYmpl
Y3Qob3B0X2F0dHJpYnV0ZXMgfHwge30pOworICBpZiAoIWhhc0F0dHJpYnV0ZUNhc2VJbnNlbnNp
dGl2ZShhdHRyaWJ1dGVzLCAiYW50aWFsaWFzIikpIHsKKyAgICBhdHRyaWJ1dGVzLmFudGlhbGlh
cyA9IGZhbHNlOworICB9CisgIGlmICghb3B0X3ZlcnNpb24pIHsKKyAgICBvcHRfdmVyc2lvbiA9
IGdldERlZmF1bHQzRENvbnRleHRWZXJzaW9uKCk7CisgIH0KKyAgb3B0X2NhbnZhcyA9IG9wdF9j
YW52YXMgfHwgZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CisgIGlmICh0eXBlb2Yg
b3B0X2NhbnZhcyA9PSAnc3RyaW5nJykgeworICAgIG9wdF9jYW52YXMgPSBkb2N1bWVudC5nZXRF
bGVtZW50QnlJZChvcHRfY2FudmFzKTsKKyAgfQorICB2YXIgY29udGV4dCA9IG51bGw7CisKKyAg
dmFyIG5hbWVzOworICBzd2l0Y2ggKG9wdF92ZXJzaW9uKSB7CisgICAgY2FzZSAyOgorICAgICAg
bmFtZXMgPSBbIndlYmdsMiJdOyBicmVhazsKKyAgICBkZWZhdWx0OgorICAgICAgbmFtZXMgPSBb
IndlYmdsIiwgImV4cGVyaW1lbnRhbC13ZWJnbCJdOyBicmVhazsKKyAgfQorCisgIGZvciAodmFy
IGkgPSAwOyBpIDwgbmFtZXMubGVuZ3RoOyArK2kpIHsKKyAgICB0cnkgeworICAgICAgY29udGV4
dCA9IG9wdF9jYW52YXMuZ2V0Q29udGV4dChuYW1lc1tpXSwgYXR0cmlidXRlcyk7CisgICAgfSBj
YXRjaCAoZSkgeworICAgIH0KKyAgICBpZiAoY29udGV4dCkgeworICAgICAgYnJlYWs7CisgICAg
fQorICB9CisgIGlmICghY29udGV4dCkgeworICAgIHRlc3RGYWlsZWQoIlVuYWJsZSB0byBmZXRj
aCBXZWJHTCByZW5kZXJpbmcgY29udGV4dCBmb3IgQ2FudmFzIik7CisgIH0gZWxzZSB7CisgICAg
aWYgKCF3aW5kb3cuX3d0dV9jb250ZXh0cykgeworICAgICAgd2luZG93Ll93dHVfY29udGV4dHMg
PSBbXQorICAgIH0KKyAgICB3aW5kb3cuX3d0dV9jb250ZXh0cy5wdXNoKGNvbnRleHQpOworICB9
CisgIHJldHVybiBjb250ZXh0OworfTsKKworLyoqCisgKiBJbmRpY2F0ZXMgd2hldGhlciB0aGUg
Z2l2ZW4gY29udGV4dCBpcyBXZWJHTCAyLjAgb3IgZ3JlYXRlci4KKyAqIEBwYXJhbSB7IVdlYkdM
UmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisg
KiBAcmV0dXJuIHtib29sZWFufSBUcnVlIGlmIHRoZSBnaXZlbiBjb250ZXh0IGlzIFdlYkdMIDIu
MCBvciBncmVhdGVyLgorICovCit2YXIgaXNXZWJHTDIgPSBmdW5jdGlvbihnbCkgeworICAvLyBE
dWNrIHR5cGluZyBpcyB1c2VkIHNvIHRoYXQgdGhlIGNvbmZvcm1hbmNlIHN1aXRlIGNhbiBiZSBy
dW4KKyAgLy8gYWdhaW5zdCBsaWJyYXJpZXMgZW11bGF0aW5nIFdlYkdMIDEuMCBvbiB0b3Agb2Yg
V2ViR0wgMi4wLgorICByZXR1cm4gISFnbC5kcmF3QXJyYXlzSW5zdGFuY2VkOworfTsKKworLyoq
CisgKiBEZWZpbmVzIHRoZSBleGNlcHRpb24gdHlwZSBmb3IgYSBHTCBlcnJvci4KKyAqIEBjb25z
dHJ1Y3RvcgorICogQHBhcmFtIHtzdHJpbmd9IG1lc3NhZ2UgVGhlIGVycm9yIG1lc3NhZ2UuCisg
KiBAcGFyYW0ge251bWJlcn0gZXJyb3IgR0wgZXJyb3IgY29kZQorICovCitmdW5jdGlvbiBHTEVy
cm9yRXhjZXB0aW9uIChtZXNzYWdlLCBlcnJvcikgeworICAgdGhpcy5tZXNzYWdlID0gbWVzc2Fn
ZTsKKyAgIHRoaXMubmFtZSA9ICJHTEVycm9yRXhjZXB0aW9uIjsKKyAgIHRoaXMuZXJyb3IgPSBl
cnJvcjsKK307CisKKy8qKgorICogV3JhcHMgYSBXZWJHTCBmdW5jdGlvbiB3aXRoIGEgZnVuY3Rp
b24gdGhhdCB0aHJvd3MgYW4gZXhjZXB0aW9uIGlmIHRoZXJlIGlzCisgKiBhbiBlcnJvci4KKyAq
IEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29u
dGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge3N0cmluZ30gZm5hbWUgTmFtZSBvZiBmdW5jdGlvbiB0
byB3cmFwLgorICogQHJldHVybiB7ZnVuY3Rpb24oKX0gVGhlIHdyYXBwZWQgZnVuY3Rpb24uCisg
Ki8KK3ZhciBjcmVhdGVHTEVycm9yV3JhcHBlciA9IGZ1bmN0aW9uKGNvbnRleHQsIGZuYW1lKSB7
CisgIHJldHVybiBmdW5jdGlvbigpIHsKKyAgICB2YXIgcnYgPSBjb250ZXh0W2ZuYW1lXS5hcHBs
eShjb250ZXh0LCBhcmd1bWVudHMpOworICAgIHZhciBlcnIgPSBjb250ZXh0LmdldEVycm9yKCk7
CisgICAgaWYgKGVyciAhPSBjb250ZXh0Lk5PX0VSUk9SKSB7CisgICAgICB2YXIgbXNnID0gIkdM
IGVycm9yICIgKyBnbEVudW1Ub1N0cmluZyhjb250ZXh0LCBlcnIpICsgIiBpbiAiICsgZm5hbWU7
CisgICAgICB0aHJvdyBuZXcgR0xFcnJvckV4Y2VwdGlvbihtc2csIGVycik7CisgICAgfQorICAg
IHJldHVybiBydjsKKyAgfTsKK307CisKKy8qKgorICogQ3JlYXRlcyBhIFdlYkdMIGNvbnRleHQg
d2hlcmUgYWxsIGZ1bmN0aW9ucyBhcmUgd3JhcHBlZCB0byB0aHJvdyBhbiBleGNlcHRpb24KKyAq
IGlmIHRoZXJlIGlzIGFuIGVycm9yLgorICogQHBhcmFtIHshQ2FudmFzfSBjYW52YXMgVGhlIEhU
TUwgY2FudmFzIHRvIGdldCBhIGNvbnRleHQgZnJvbS4KKyAqIEBwYXJhbSB7T2JqZWN0fSBvcHRf
YXR0cmlidXRlcyBDb250ZXh0IGF0dHJpYnV0ZXMuCisgKiBAcGFyYW0geyFudW1iZXJ9IG9wdF92
ZXJzaW9uIFZlcnNpb24gb2YgV2ViR0wgY29udGV4dCB0byBjcmVhdGUKKyAqIEByZXR1cm4geyFP
YmplY3R9IFRoZSB3cmFwcGVkIGNvbnRleHQuCisgKi8KK2Z1bmN0aW9uIGNyZWF0ZTNEQ29udGV4
dFdpdGhXcmFwcGVyVGhhdFRocm93c09uR0xFcnJvcihjYW52YXMsIG9wdF9hdHRyaWJ1dGVzLCBv
cHRfdmVyc2lvbikgeworICB2YXIgY29udGV4dCA9IGNyZWF0ZTNEQ29udGV4dChjYW52YXMsIG9w
dF9hdHRyaWJ1dGVzLCBvcHRfdmVyc2lvbik7CisgIHZhciB3cmFwID0ge307CisgIGZvciAodmFy
IGkgaW4gY29udGV4dCkgeworICAgIHRyeSB7CisgICAgICBpZiAodHlwZW9mIGNvbnRleHRbaV0g
PT0gJ2Z1bmN0aW9uJykgeworICAgICAgICB3cmFwW2ldID0gY3JlYXRlR0xFcnJvcldyYXBwZXIo
Y29udGV4dCwgaSk7CisgICAgICB9IGVsc2UgeworICAgICAgICB3cmFwW2ldID0gY29udGV4dFtp
XTsKKyAgICAgIH0KKyAgICB9IGNhdGNoIChlKSB7CisgICAgICBlcnJvcigiY3JlYXRlQ29udGV4
dFdyYXBwZXJUaGF0VGhyb3dzT25HTEVycm9yOiBFcnJvciBhY2Nlc3NpbmcgIiArIGkpOworICAg
IH0KKyAgfQorICB3cmFwLmdldEVycm9yID0gZnVuY3Rpb24oKSB7CisgICAgICByZXR1cm4gY29u
dGV4dC5nZXRFcnJvcigpOworICB9OworICByZXR1cm4gd3JhcDsKK307CisKKy8qKgorICogVGVz
dHMgdGhhdCBhbiBldmFsdWF0ZWQgZXhwcmVzc2lvbiBnZW5lcmF0ZXMgYSBzcGVjaWZpYyBHTCBl
cnJvci4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVu
ZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge251bWJlcnxBcnJheS48bnVtYmVyPn0g
Z2xFcnJvcnMgVGhlIGV4cGVjdGVkIGdsIGVycm9yIG9yIGFuIGFycmF5IG9mIGV4cGVjdGVkIGVy
cm9ycy4KKyAqIEBwYXJhbSB7c3RyaW5nfSBldmFsU3RyIFRoZSBzdHJpbmcgdG8gZXZhbHVhdGUu
CisgKi8KK3ZhciBzaG91bGRHZW5lcmF0ZUdMRXJyb3IgPSBmdW5jdGlvbihnbCwgZ2xFcnJvcnMs
IGV2YWxTdHIsIG9wdF9tc2cpIHsKKyAgdmFyIGV4Y2VwdGlvbjsKKyAgdHJ5IHsKKyAgICBldmFs
KGV2YWxTdHIpOworICB9IGNhdGNoIChlKSB7CisgICAgZXhjZXB0aW9uID0gZTsKKyAgfQorICBp
ZiAoZXhjZXB0aW9uKSB7CisgICAgdGVzdEZhaWxlZChldmFsU3RyICsgIiB0aHJldyBleGNlcHRp
b24gIiArIGV4Y2VwdGlvbik7CisgICAgcmV0dXJuIC0xOworICB9IGVsc2UgeworICAgIGlmICgh
b3B0X21zZykgeworICAgICAgb3B0X21zZyA9ICJhZnRlciBldmFsdWF0aW5nOiAiICsgZXZhbFN0
cjsKKyAgICB9CisgICAgcmV0dXJuIGdsRXJyb3JTaG91bGRCZShnbCwgZ2xFcnJvcnMsIG9wdF9t
c2cpOworICB9Cit9OworCisvKioKKyAqIFRlc3RzIHRoYXQgYW4gZXZhbHVhdGVkIGV4cHJlc3Np
b24gZG9lcyBub3QgZ2VuZXJhdGUgYSBHTCBlcnJvci4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVy
aW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFy
YW0ge3N0cmluZ30gZXZhbFN0ciBUaGUgc3RyaW5nIHRvIGV2YWx1YXRlLgorICovCit2YXIgZmFp
bElmR0xFcnJvciA9IGZ1bmN0aW9uKGdsLCBldmFsU3RyKSB7CisgIHZhciBleGNlcHRpb247Cisg
IHRyeSB7CisgICAgZXZhbChldmFsU3RyKTsKKyAgfSBjYXRjaCAoZSkgeworICAgIGV4Y2VwdGlv
biA9IGU7CisgIH0KKyAgaWYgKGV4Y2VwdGlvbikgeworICAgIHRlc3RGYWlsZWQoZXZhbFN0ciAr
ICIgdGhyZXcgZXhjZXB0aW9uICIgKyBleGNlcHRpb24pOworICB9IGVsc2UgeworICAgIGdsRXJy
b3JTaG91bGRCZUltcGwoZ2wsIGdsLk5PX0VSUk9SLCBmYWxzZSwgImFmdGVyIGV2YWx1YXRpbmc6
ICIgKyBldmFsU3RyKTsKKyAgfQorfTsKKworLyoqCisgKiBUZXN0cyB0aGF0IHRoZSBmaXJzdCBl
cnJvciBHTCByZXR1cm5zIGlzIHRoZSBzcGVjaWZpZWQgZXJyb3IuCisgKiBAcGFyYW0geyFXZWJH
TFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgor
ICogQHBhcmFtIHtudW1iZXJ8QXJyYXkuPG51bWJlcj59IGdsRXJyb3JzIFRoZSBleHBlY3RlZCBn
bCBlcnJvciBvciBhbiBhcnJheSBvZiBleHBlY3RlZCBlcnJvcnMuCisgKiBAcGFyYW0ge3N0cmlu
Z30gb3B0X21zZyBPcHRpb25hbCBhZGRpdGlvbmFsIG1lc3NhZ2UuCisgKi8KK3ZhciBnbEVycm9y
U2hvdWxkQmUgPSBmdW5jdGlvbihnbCwgZ2xFcnJvcnMsIG9wdF9tc2cpIHsKKyAgcmV0dXJuIGds
RXJyb3JTaG91bGRCZUltcGwoZ2wsIGdsRXJyb3JzLCB0cnVlLCBvcHRfbXNnKTsKK307CisKKy8q
KgorICogVGVzdHMgdGhhdCB0aGUgZ2l2ZW4gZnJhbWVidWZmZXIgaGFzIGEgc3BlY2lmaWMgc3Rh
dHVzCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRl
cmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtudW1iZXJ8QXJyYXkuPG51bWJlcj59IGds
U3RhdHVzZXMgVGhlIGV4cGVjdGVkIGdsCisgKiAgICAgICAgc3RhdHVzIG9yIGFuIGFycmF5IG9m
IGV4cGVjdGVkIHN0YXR1c2VzLgorICogQHBhcmFtIHtzdHJpbmd9IG9wdF9tc2cgT3B0aW9uYWwg
YWRkaXRpb25hbCBtZXNzYWdlLgorICovCit2YXIgZnJhbWVidWZmZXJTdGF0dXNTaG91bGRCZSA9
IGZ1bmN0aW9uKGdsLCB0YXJnZXQsIGdsU3RhdHVzZXMsIG9wdF9tc2cpIHsKKyAgaWYgKCFnbFN0
YXR1c2VzLmxlbmd0aCkgeworICAgIGdsU3RhdHVzZXMgPSBbZ2xTdGF0dXNlc107CisgIH0KKyAg
b3B0X21zZyA9IG9wdF9tc2cgfHwgIiI7CisgIGNvbnN0IHN0YXR1cyA9IGdsLmNoZWNrRnJhbWVi
dWZmZXJTdGF0dXModGFyZ2V0KTsKKyAgY29uc3QgbmR4ID0gZ2xTdGF0dXNlcy5pbmRleE9mKHN0
YXR1cyk7CisgIGNvbnN0IGV4cGVjdGVkID0gZ2xTdGF0dXNlcy5tYXAoKHN0YXR1cykgPT4gewor
ICAgIHJldHVybiBnbEVudW1Ub1N0cmluZyhnbCwgc3RhdHVzKTsKKyAgfSkuam9pbignIG9yICcp
OworICBpZiAobmR4IDwgMCkgeworICAgIHZhciBtc2cgPSAiY2hlY2tGcmFtZWJ1ZmZlclN0YXR1
cyBleHBlY3RlZCIgKyAoKGdsU3RhdHVzZXMubGVuZ3RoID4gMSkgPyAiIG9uZSBvZjogIiA6ICI6
ICIpOworICAgIHRlc3RGYWlsZWQobXNnICsgZXhwZWN0ZWQgKyAgIi4gV2FzICIgKyBnbEVudW1U
b1N0cmluZyhnbCwgc3RhdHVzKSArICIgOiAiICsgb3B0X21zZyk7CisgIH0gZWxzZSB7CisgICAg
dmFyIG1zZyA9ICJjaGVja0ZyYW1lYnVmZmVyU3RhdHVzIHdhcyAiICsgKChnbFN0YXR1c2VzLmxl
bmd0aCA+IDEpID8gIm9uZSBvZjogIiA6ICJleHBlY3RlZCB2YWx1ZTogIik7CisgICAgdGVzdFBh
c3NlZChtc2cgKyBleHBlY3RlZCArICIgOiAiICsgb3B0X21zZyk7CisgIH0KKyAgcmV0dXJuIHN0
YXR1czsKK30KKworLyoqCisgKiBUZXN0cyB0aGF0IHRoZSBmaXJzdCBlcnJvciBHTCByZXR1cm5z
IGlzIHRoZSBzcGVjaWZpZWQgZXJyb3IuIEFsbG93cyBzdXBwcmVzc2lvbiBvZiBzdWNjZXNzZXMu
CisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmlu
Z0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtudW1iZXJ8QXJyYXkuPG51bWJlcj59IGdsRXJy
b3JzIFRoZSBleHBlY3RlZCBnbCBlcnJvciBvciBhbiBhcnJheSBvZiBleHBlY3RlZCBlcnJvcnMu
CisgKiBAcGFyYW0ge2Jvb2xlYW59IHJlcG9ydFN1Y2Nlc3NlcyBXaGV0aGVyIHRvIHJlcG9ydCBz
dWNjZXNzZXMgYXMgcGFzc2VzLCBvciB0byBzaWxlbnRseSBwYXNzLgorICogQHBhcmFtIHtzdHJp
bmd9IG9wdF9tc2cgT3B0aW9uYWwgYWRkaXRpb25hbCBtZXNzYWdlLgorICovCit2YXIgZ2xFcnJv
clNob3VsZEJlSW1wbCA9IGZ1bmN0aW9uKGdsLCBnbEVycm9ycywgcmVwb3J0U3VjY2Vzc2VzLCBv
cHRfbXNnKSB7CisgIGlmICghZ2xFcnJvcnMubGVuZ3RoKSB7CisgICAgZ2xFcnJvcnMgPSBbZ2xF
cnJvcnNdOworICB9CisgIG9wdF9tc2cgPSBvcHRfbXNnIHx8ICIiOworCisgIGNvbnN0IGZuRXJy
U3RyID0gZnVuY3Rpb24oZXJyVmFsKSB7CisgICAgaWYgKGVyclZhbCA9PSAwKSByZXR1cm4gIk5P
X0VSUk9SIjsKKyAgICByZXR1cm4gZ2xFbnVtVG9TdHJpbmcoZ2wsIGVyclZhbCk7CisgIH07CisK
KyAgdmFyIGVyciA9IGdsLmdldEVycm9yKCk7CisgIHZhciBuZHggPSBnbEVycm9ycy5pbmRleE9m
KGVycik7CisgIHZhciBlcnJTdHJzID0gW107CisgIGZvciAodmFyIGlpID0gMDsgaWkgPCBnbEVy
cm9ycy5sZW5ndGg7ICsraWkpIHsKKyAgICBlcnJTdHJzLnB1c2goZm5FcnJTdHIoZ2xFcnJvcnNb
aWldKSk7CisgIH0KKyAgdmFyIGV4cGVjdGVkID0gZXJyU3Rycy5qb2luKCIgb3IgIik7CisgIGlm
IChuZHggPCAwKSB7CisgICAgdmFyIG1zZyA9ICJnZXRFcnJvciBleHBlY3RlZCIgKyAoKGdsRXJy
b3JzLmxlbmd0aCA+IDEpID8gIiBvbmUgb2Y6ICIgOiAiOiAiKTsKKyAgICB0ZXN0RmFpbGVkKG1z
ZyArIGV4cGVjdGVkICsgICIuIFdhcyAiICsgZm5FcnJTdHIoZXJyKSArICIgOiAiICsgb3B0X21z
Zyk7CisgIH0gZWxzZSBpZiAocmVwb3J0U3VjY2Vzc2VzKSB7CisgICAgdmFyIG1zZyA9ICJnZXRF
cnJvciB3YXMgIiArICgoZ2xFcnJvcnMubGVuZ3RoID4gMSkgPyAib25lIG9mOiAiIDogImV4cGVj
dGVkIHZhbHVlOiAiKTsKKyAgICB0ZXN0UGFzc2VkKG1zZyArIGV4cGVjdGVkICsgIiA6ICIgKyBv
cHRfbXNnKTsKKyAgfQorICByZXR1cm4gZXJyOworfTsKKworLyoqCisgKiBUZXN0cyB0aGF0IGEg
ZnVuY3Rpb24gdGhyb3dzIG9yIG5vdC4KKyAqIEBwYXJhbSB7IVdlYkdMQ29udGV4dH0gZ2wgVGhl
IFdlYkdMQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0gdGhyb3dUeXBlIFR5cGUgb2YgdGhyb3du
IGVycm9yIChlLmcuIFR5cGVFcnJvciksIG9yIGZhbHNlLgorICogQHBhcmFtIHtzdHJpbmd9IGlu
Zm8gSW5mbyBvbiB3aGF0J3MgYmVpbmcgdGVzdGVkCisgKiBAcGFyYW0ge2Z1bmN0aW9ufSBmdW5j
IFRoZSBmdW5jIHRvIHRlc3QuCisgKi8KK3ZhciBzaG91bGRUaHJvdyA9IGZ1bmN0aW9uKGdsLCB0
aHJvd1R5cGUsIGluZm8sIGZ1bmMpIHsKKyAgd2hpbGUgKGdsLmdldEVycm9yKCkpIHt9CisKKyAg
dmFyIHNob3VsZFRocm93ID0gKHRocm93VHlwZSAhPSBmYWxzZSk7CisKKyAgdHJ5IHsKKyAgICBm
dW5jKCk7CisKKyAgICBpZiAoc2hvdWxkVGhyb3cpIHsKKyAgICAgIHRlc3RGYWlsZWQoIlNob3Vs
ZCB0aHJvdyBhICIgKyB0aHJvd1R5cGUubmFtZSArICI6ICIgKyBpbmZvKTsKKyAgICB9IGVsc2Ug
eworICAgICAgdGVzdFBhc3NlZCgiU2hvdWxkIG5vdCBoYXZlIHRocm93bjogIiArIGluZm8pOwor
ICAgIH0KKyAgfSBjYXRjaCAoZSkgeworICAgIGlmIChzaG91bGRUaHJvdykgeworICAgICAgaWYg
KGUgaW5zdGFuY2VvZiB0aHJvd1R5cGUpIHsKKyAgICAgICAgdGVzdFBhc3NlZCgiU2hvdWxkIHRo
cm93IGEgIiArIHRocm93VHlwZS5uYW1lICsgIjogIiArIGluZm8pOworICAgICAgfSBlbHNlIHsK
KyAgICAgICAgdGVzdEZhaWxlZCgiU2hvdWxkIHRocm93IGEgIiArIHRocm93VHlwZS5uYW1lICsg
IiwgdGhyZXcgIiArIGUubmFtZSArICI6ICIgKyBpbmZvKTsKKyAgICAgIH0KKyAgICB9IGVsc2Ug
eworICAgICAgdGVzdEZhaWxlZCgiU2hvdWxkIG5vdCBoYXZlIHRocm93bjogIiArIGluZm8pOwor
ICAgIH0KKworICAgIGlmIChnbC5nZXRFcnJvcigpKSB7CisgICAgICB0ZXN0RmFpbGVkKCJTaG91
bGQgbm90IGdlbmVyYXRlIGFuIGVycm9yIHdoZW4gdGhyb3dpbmc6ICIgKyBpbmZvKTsKKyAgICB9
CisgIH0KKworICB3aGlsZSAoZ2wuZ2V0RXJyb3IoKSkge30KK307CisKKy8qKgorICogTGlua3Mg
YSBXZWJHTCBwcm9ncmFtLCB0aHJvd3MgaWYgdGhlcmUgYXJlIGVycm9ycy4KKyAqIEBwYXJhbSB7
IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1
c2UuCisgKiBAcGFyYW0geyFXZWJHTFByb2dyYW19IHByb2dyYW0gVGhlIFdlYkdMUHJvZ3JhbSB0
byBsaW5rLgorICogQHBhcmFtIHtmdW5jdGlvbihzdHJpbmcpOiB2b2lkfSBvcHRfZXJyb3JDYWxs
YmFjayBjYWxsYmFjayBmb3IgZXJyb3JzLgorICovCit2YXIgbGlua1Byb2dyYW0gPSBmdW5jdGlv
bihnbCwgcHJvZ3JhbSwgb3B0X2Vycm9yQ2FsbGJhY2spIHsKKyAgdmFyIGVyckZuID0gb3B0X2Vy
cm9yQ2FsbGJhY2sgfHwgdGVzdEZhaWxlZDsKKyAgLy8gTGluayB0aGUgcHJvZ3JhbQorICBnbC5s
aW5rUHJvZ3JhbShwcm9ncmFtKTsKKworICAvLyBDaGVjayB0aGUgbGluayBzdGF0dXMKKyAgdmFy
IGxpbmtlZCA9IGdsLmdldFByb2dyYW1QYXJhbWV0ZXIocHJvZ3JhbSwgZ2wuTElOS19TVEFUVVMp
OworICBpZiAoIWxpbmtlZCkgeworICAgIC8vIHNvbWV0aGluZyB3ZW50IHdyb25nIHdpdGggdGhl
IGxpbmsKKyAgICB2YXIgZXJyb3IgPSBnbC5nZXRQcm9ncmFtSW5mb0xvZyAocHJvZ3JhbSk7CisK
KyAgICBlcnJGbigiRXJyb3IgaW4gcHJvZ3JhbSBsaW5raW5nOiIgKyBlcnJvcik7CisKKyAgICBn
bC5kZWxldGVQcm9ncmFtKHByb2dyYW0pOworICB9Cit9OworCisvKioKKyAqIExvYWRzIHRleHQg
ZnJvbSBhbiBleHRlcm5hbCBmaWxlLiBUaGlzIGZ1bmN0aW9uIGlzIGFzeW5jaHJvbm91cy4KKyAq
IEBwYXJhbSB7c3RyaW5nfSB1cmwgVGhlIHVybCBvZiB0aGUgZXh0ZXJuYWwgZmlsZS4KKyAqIEBw
YXJhbSB7IWZ1bmN0aW9uKGJvb2wsIHN0cmluZyk6IHZvaWR9IGNhbGxiYWNrIHRoYXQgaXMgc2Vu
dCBhIGJvb2wgZm9yCisgKiAgICAgc3VjY2VzcyBhbmQgdGhlIHN0cmluZy4KKyAqLwordmFyIGxv
YWRUZXh0RmlsZUFzeW5jID0gZnVuY3Rpb24odXJsLCBjYWxsYmFjaykgeworICBsb2cgKCJsb2Fk
aW5nOiAiICsgdXJsKTsKKyAgdmFyIGVycm9yID0gJ2xvYWRUZXh0RmlsZUFzeW5jIGZhaWxlZCB0
byBsb2FkIHVybCAiJyArIHVybCArICciJzsKKyAgdmFyIHJlcXVlc3Q7CisgIGlmICh3aW5kb3cu
WE1MSHR0cFJlcXVlc3QpIHsKKyAgICByZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7Cisg
ICAgaWYgKHJlcXVlc3Qub3ZlcnJpZGVNaW1lVHlwZSkgeworICAgICAgcmVxdWVzdC5vdmVycmlk
ZU1pbWVUeXBlKCd0ZXh0L3BsYWluJyk7CisgICAgfQorICB9IGVsc2UgeworICAgIHRocm93ICdY
TUxIdHRwUmVxdWVzdCBpcyBkaXNhYmxlZCc7CisgIH0KKyAgdHJ5IHsKKyAgICByZXF1ZXN0Lm9w
ZW4oJ0dFVCcsIHVybCwgdHJ1ZSk7CisgICAgcmVxdWVzdC5vbnJlYWR5c3RhdGVjaGFuZ2UgPSBm
dW5jdGlvbigpIHsKKyAgICAgIGlmIChyZXF1ZXN0LnJlYWR5U3RhdGUgPT0gNCkgeworICAgICAg
ICB2YXIgdGV4dCA9ICcnOworICAgICAgICAvLyBIVFRQIHJlcG9ydHMgc3VjY2VzcyB3aXRoIGEg
MjAwIHN0YXR1cy4gVGhlIGZpbGUgcHJvdG9jb2wgcmVwb3J0cworICAgICAgICAvLyBzdWNjZXNz
IHdpdGggemVyby4gSFRUUCBkb2VzIG5vdCB1c2UgemVybyBhcyBhIHN0YXR1cyBjb2RlICh0aGV5
CisgICAgICAgIC8vIHN0YXJ0IGF0IDEwMCkuCisgICAgICAgIC8vIGh0dHBzOi8vZGV2ZWxvcGVy
Lm1vemlsbGEub3JnL0VuL1VzaW5nX1hNTEh0dHBSZXF1ZXN0CisgICAgICAgIHZhciBzdWNjZXNz
ID0gcmVxdWVzdC5zdGF0dXMgPT0gMjAwIHx8IHJlcXVlc3Quc3RhdHVzID09IDA7CisgICAgICAg
IGlmIChzdWNjZXNzKSB7CisgICAgICAgICAgdGV4dCA9IHJlcXVlc3QucmVzcG9uc2VUZXh0Owor
ICAgICAgICAgIGxvZygiY29tcGxldGVkIGxvYWQgcmVxdWVzdDogIiArIHVybCk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgbG9nKCJsb2FkaW5nICIgKyB1cmwgKyAiIHJlc3VsdGVkIGlu
IHVuZXhwZWN0ZWQgc3RhdHVzOiAiICsgcmVxdWVzdC5zdGF0dXMgKyAiICIgKyByZXF1ZXN0LnN0
YXR1c1RleHQpOworICAgICAgICB9CisgICAgICAgIGNhbGxiYWNrKHN1Y2Nlc3MsIHRleHQpOwor
ICAgICAgfQorICAgIH07CisgICAgcmVxdWVzdC5vbmVycm9yID0gZnVuY3Rpb24oZXJyb3JFdmVu
dCkgeworICAgICAgbG9nKCJlcnJvciBvY2N1cnJlZCBsb2FkaW5nICIgKyB1cmwpOworICAgICAg
Y2FsbGJhY2soZmFsc2UsICcnKTsKKyAgICB9OworICAgIHJlcXVlc3Quc2VuZChudWxsKTsKKyAg
fSBjYXRjaCAoZXJyKSB7CisgICAgbG9nKCJmYWlsZWQgdG8gbG9hZDogIiArIHVybCArICIgd2l0
aCBleGNlcHRpb24gIiArIGVyci5tZXNzYWdlKTsKKyAgICBjYWxsYmFjayhmYWxzZSwgJycpOwor
ICB9Cit9OworCisvKioKKyAqIFJlY3Vyc2l2ZWx5IGxvYWRzIGEgZmlsZSBhcyBhIGxpc3QuIEVh
Y2ggbGluZSBpcyBwYXJzZWQgZm9yIGEgcmVsYXRpdmUKKyAqIHBhdGguIElmIHRoZSBmaWxlIGVu
ZHMgaW4gLnR4dCB0aGUgY29udGVudHMgb2YgdGhhdCBmaWxlIGlzIGluc2VydGVkIGluCisgKiB0
aGUgbGlzdC4KKyAqCisgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFRoZSB1cmwgb2YgdGhlIGV4dGVy
bmFsIGZpbGUuCisgKiBAcGFyYW0geyFmdW5jdGlvbihib29sLCBBcnJheTxzdHJpbmc+KTogdm9p
ZH0gY2FsbGJhY2sgdGhhdCBpcyBzZW50IGEgYm9vbAorICogICAgIGZvciBzdWNjZXNzIGFuZCB0
aGUgYXJyYXkgb2Ygc3RyaW5ncy4KKyAqLwordmFyIGdldEZpbGVMaXN0QXN5bmMgPSBmdW5jdGlv
bih1cmwsIGNhbGxiYWNrKSB7CisgIHZhciBmaWxlcyA9IFtdOworCisgIHZhciBnZXRGaWxlTGlz
dEltcGwgPSBmdW5jdGlvbih1cmwsIGNhbGxiYWNrKSB7CisgICAgdmFyIGZpbGVzID0gW107Cisg
ICAgaWYgKHVybC5zdWJzdHIodXJsLmxlbmd0aCAtIDQpID09ICcudHh0JykgeworICAgICAgbG9h
ZFRleHRGaWxlQXN5bmModXJsLCBmdW5jdGlvbigpIHsKKyAgICAgICAgcmV0dXJuIGZ1bmN0aW9u
KHN1Y2Nlc3MsIHRleHQpIHsKKyAgICAgICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAg
IGNhbGxiYWNrKGZhbHNlLCAnJyk7CisgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgfQor
ICAgICAgICAgIHZhciBsaW5lcyA9IHRleHQuc3BsaXQoJ1xuJyk7CisgICAgICAgICAgdmFyIHBy
ZWZpeCA9ICcnOworICAgICAgICAgIHZhciBsYXN0U2xhc2ggPSB1cmwubGFzdEluZGV4T2YoJy8n
KTsKKyAgICAgICAgICBpZiAobGFzdFNsYXNoID49IDApIHsKKyAgICAgICAgICAgIHByZWZpeCA9
IHVybC5zdWJzdHIoMCwgbGFzdFNsYXNoICsgMSk7CisgICAgICAgICAgfQorICAgICAgICAgIHZh
ciBmYWlsID0gZmFsc2U7CisgICAgICAgICAgdmFyIGNvdW50ID0gMTsKKyAgICAgICAgICB2YXIg
aW5kZXggPSAwOworICAgICAgICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCBsaW5lcy5sZW5ndGg7
ICsraWkpIHsKKyAgICAgICAgICAgIHZhciBzdHIgPSBsaW5lc1tpaV0ucmVwbGFjZSgvXlxzXHMq
LywgJycpLnJlcGxhY2UoL1xzXHMqJC8sICcnKTsKKyAgICAgICAgICAgIGlmIChzdHIubGVuZ3Ro
ID4gNCAmJgorICAgICAgICAgICAgICAgIHN0clswXSAhPSAnIycgJiYKKyAgICAgICAgICAgICAg
ICBzdHJbMF0gIT0gIjsiICYmCisgICAgICAgICAgICAgICAgc3RyLnN1YnN0cigwLCAyKSAhPSAi
Ly8iKSB7CisgICAgICAgICAgICAgIHZhciBuYW1lcyA9IHN0ci5zcGxpdCgvICsvKTsKKyAgICAg
ICAgICAgICAgdmFyIG5ld191cmwgPSBwcmVmaXggKyBzdHI7CisgICAgICAgICAgICAgIGlmIChu
YW1lcy5sZW5ndGggPT0gMSkgeworICAgICAgICAgICAgICAgIG5ld191cmwgPSBwcmVmaXggKyBz
dHI7CisgICAgICAgICAgICAgICAgKytjb3VudDsKKyAgICAgICAgICAgICAgICBnZXRGaWxlTGlz
dEltcGwobmV3X3VybCwgZnVuY3Rpb24oaW5kZXgpIHsKKyAgICAgICAgICAgICAgICAgIHJldHVy
biBmdW5jdGlvbihzdWNjZXNzLCBuZXdfZmlsZXMpIHsKKyAgICAgICAgICAgICAgICAgICAgbG9n
KCJnb3QgZmlsZXM6ICIgKyBuZXdfZmlsZXMubGVuZ3RoKTsKKyAgICAgICAgICAgICAgICAgICAg
aWYgKHN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgICAgICAgICBmaWxlc1tpbmRleF0gPSBuZXdf
ZmlsZXM7CisgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICAgICAgZmluaXNo
KHN1Y2Nlc3MpOworICAgICAgICAgICAgICAgICAgfTsKKyAgICAgICAgICAgICAgICB9KGluZGV4
KyspKTsKKyAgICAgICAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgICAgICB2YXIgcyA9ICIi
OworICAgICAgICAgICAgICAgIHZhciBwID0gIiI7CisgICAgICAgICAgICAgICAgZm9yICh2YXIg
amogPSAwOyBqaiA8IG5hbWVzLmxlbmd0aDsgKytqaikgeworICAgICAgICAgICAgICAgICAgcyAr
PSBwICsgcHJlZml4ICsgbmFtZXNbampdOworICAgICAgICAgICAgICAgICAgcCA9ICIgIjsKKyAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgZmlsZXNbaW5kZXgrK10gPSBzOworICAg
ICAgICAgICAgICB9CisgICAgICAgICAgICB9CisgICAgICAgICAgfQorICAgICAgICAgIGZpbmlz
aCh0cnVlKTsKKworICAgICAgICAgIGZ1bmN0aW9uIGZpbmlzaChzdWNjZXNzKSB7CisgICAgICAg
ICAgICBpZiAoIXN1Y2Nlc3MpIHsKKyAgICAgICAgICAgICAgZmFpbCA9IHRydWU7CisgICAgICAg
ICAgICB9CisgICAgICAgICAgICAtLWNvdW50OworICAgICAgICAgICAgbG9nKCJjb3VudDogIiAr
IGNvdW50KTsKKyAgICAgICAgICAgIGlmICghY291bnQpIHsKKyAgICAgICAgICAgICAgY2FsbGJh
Y2soIWZhaWwsIGZpbGVzKTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICB9CisgICAgICAgIH0K
KyAgICAgIH0oKSk7CisKKyAgICB9IGVsc2UgeworICAgICAgZmlsZXMucHVzaCh1cmwpOworICAg
ICAgY2FsbGJhY2sodHJ1ZSwgZmlsZXMpOworICAgIH0KKyAgfTsKKworICBnZXRGaWxlTGlzdElt
cGwodXJsLCBmdW5jdGlvbihzdWNjZXNzLCBmaWxlcykgeworICAgIC8vIGZsYXR0ZW4KKyAgICB2
YXIgZmxhdCA9IFtdOworICAgIGZsYXR0ZW4oZmlsZXMpOworICAgIGZ1bmN0aW9uIGZsYXR0ZW4o
ZmlsZXMpIHsKKyAgICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCBmaWxlcy5sZW5ndGg7ICsraWkp
IHsKKyAgICAgICAgdmFyIHZhbHVlID0gZmlsZXNbaWldOworICAgICAgICBpZiAodHlwZW9mKHZh
bHVlKSA9PSAic3RyaW5nIikgeworICAgICAgICAgIGZsYXQucHVzaCh2YWx1ZSk7CisgICAgICAg
IH0gZWxzZSB7CisgICAgICAgICAgZmxhdHRlbih2YWx1ZSk7CisgICAgICAgIH0KKyAgICAgIH0K
KyAgICB9CisgICAgY2FsbGJhY2soc3VjY2VzcywgZmxhdCk7CisgIH0pOworfTsKKworLyoqCisg
KiBHZXRzIGEgZmlsZSBmcm9tIGEgZmlsZS9VUkwuCisgKiBAcGFyYW0ge3N0cmluZ30gZmlsZSB0
aGUgVVJMIG9mIHRoZSBmaWxlIHRvIGdldC4KKyAqIEByZXR1cm4ge3N0cmluZ30gVGhlIGNvbnRl
bnRzIG9mIHRoZSBmaWxlLgorICovCit2YXIgcmVhZEZpbGUgPSBmdW5jdGlvbihmaWxlKSB7Cisg
IHZhciB4aHIgPSBuZXcgWE1MSHR0cFJlcXVlc3QoKTsKKyAgeGhyLm9wZW4oIkdFVCIsIGZpbGUs
IGZhbHNlKTsKKyAgeGhyLm92ZXJyaWRlTWltZVR5cGUoInRleHQvcGxhaW4iKTsKKyAgeGhyLnNl
bmQoKTsKKyAgcmV0dXJuIHhoci5yZXNwb25zZVRleHQucmVwbGFjZSgvXHIvZywgIiIpOworfTsK
KwordmFyIHJlYWRGaWxlTGlzdCA9IGZ1bmN0aW9uKHVybCkgeworICB2YXIgZmlsZXMgPSBbXTsK
KyAgaWYgKHVybC5zdWJzdHIodXJsLmxlbmd0aCAtIDQpID09ICcudHh0JykgeworICAgIHZhciBs
aW5lcyA9IHJlYWRGaWxlKHVybCkuc3BsaXQoJ1xuJyk7CisgICAgdmFyIHByZWZpeCA9ICcnOwor
ICAgIHZhciBsYXN0U2xhc2ggPSB1cmwubGFzdEluZGV4T2YoJy8nKTsKKyAgICBpZiAobGFzdFNs
YXNoID49IDApIHsKKyAgICAgIHByZWZpeCA9IHVybC5zdWJzdHIoMCwgbGFzdFNsYXNoICsgMSk7
CisgICAgfQorICAgIGZvciAodmFyIGlpID0gMDsgaWkgPCBsaW5lcy5sZW5ndGg7ICsraWkpIHsK
KyAgICAgIHZhciBzdHIgPSBsaW5lc1tpaV0ucmVwbGFjZSgvXlxzXHMqLywgJycpLnJlcGxhY2Uo
L1xzXHMqJC8sICcnKTsKKyAgICAgIGlmIChzdHIubGVuZ3RoID4gNCAmJgorICAgICAgICAgIHN0
clswXSAhPSAnIycgJiYKKyAgICAgICAgICBzdHJbMF0gIT0gIjsiICYmCisgICAgICAgICAgc3Ry
LnN1YnN0cigwLCAyKSAhPSAiLy8iKSB7CisgICAgICAgIHZhciBuYW1lcyA9IHN0ci5zcGxpdCgv
ICsvKTsKKyAgICAgICAgaWYgKG5hbWVzLmxlbmd0aCA9PSAxKSB7CisgICAgICAgICAgdmFyIG5l
d191cmwgPSBwcmVmaXggKyBzdHI7CisgICAgICAgICAgZmlsZXMgPSBmaWxlcy5jb25jYXQocmVh
ZEZpbGVMaXN0KG5ld191cmwpKTsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICB2YXIgcyA9
ICIiOworICAgICAgICAgIHZhciBwID0gIiI7CisgICAgICAgICAgZm9yICh2YXIgamogPSAwOyBq
aiA8IG5hbWVzLmxlbmd0aDsgKytqaikgeworICAgICAgICAgICAgcyArPSBwICsgcHJlZml4ICsg
bmFtZXNbampdOworICAgICAgICAgICAgcCA9ICIgIjsKKyAgICAgICAgICB9CisgICAgICAgICAg
ZmlsZXMucHVzaChzKTsKKyAgICAgICAgfQorICAgICAgfQorICAgIH0KKyAgfSBlbHNlIHsKKyAg
ICBmaWxlcy5wdXNoKHVybCk7CisgIH0KKyAgcmV0dXJuIGZpbGVzOworfTsKKworLyoqCisgKiBM
b2FkcyBhIHNoYWRlci4KKyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhl
IFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge3N0cmluZ30gc2hhZGVy
U291cmNlIFRoZSBzaGFkZXIgc291cmNlLgorICogQHBhcmFtIHtudW1iZXJ9IHNoYWRlclR5cGUg
VGhlIHR5cGUgb2Ygc2hhZGVyLgorICogQHBhcmFtIHtmdW5jdGlvbihzdHJpbmcpOiB2b2lkfSBv
cHRfZXJyb3JDYWxsYmFjayBjYWxsYmFjayBmb3IgZXJyb3JzLgorICogQHBhcmFtIHtib29sZWFu
fSBvcHRfbG9nU2hhZGVycyBXaGV0aGVyIHRvIGxvZyBzaGFkZXIgc291cmNlLgorICogQHBhcmFt
IHtzdHJpbmd9IG9wdF9zaGFkZXJMYWJlbCBMYWJlbCB0aGF0IGlkZW50aWZpZXMgdGhlIHNoYWRl
ciBzb3VyY2UgaW4KKyAqICAgICB0aGUgbG9nLgorICogQHBhcmFtIHtzdHJpbmd9IG9wdF91cmwg
VVJMIGZyb20gd2hlcmUgdGhlIHNoYWRlciBzb3VyY2Ugd2FzIGxvYWRlZCBmcm9tLgorICogICAg
IElmIG9wdF9sb2dTaGFkZXJzIGlzIHNldCwgdGhlbiBhIGxpbmsgdG8gdGhlIHNvdXJjZSBmaWxl
IHdpbGwgYWxzbyBiZQorICogICAgIGFkZGVkLgorICogQHBhcmFtIHtib29sZWFufSBTa2lwIGNv
bXBpbGF0aW9uIHN0YXR1cyBjaGVjay4gRGVmYXVsdCA9IGZhbHNlLgorICogQHJldHVybiB7IVdl
YkdMU2hhZGVyfSBUaGUgY3JlYXRlZCBzaGFkZXIuCisgKi8KK3ZhciBsb2FkU2hhZGVyID0gZnVu
Y3Rpb24oCisgICAgZ2wsIHNoYWRlclNvdXJjZSwgc2hhZGVyVHlwZSwgb3B0X2Vycm9yQ2FsbGJh
Y2ssIG9wdF9sb2dTaGFkZXJzLAorICAgIG9wdF9zaGFkZXJMYWJlbCwgb3B0X3VybCwgb3B0X3Nr
aXBDb21waWxlU3RhdHVzKSB7CisgIHZhciBlcnJGbiA9IG9wdF9lcnJvckNhbGxiYWNrIHx8IGVy
cm9yOworICAvLyBDcmVhdGUgdGhlIHNoYWRlciBvYmplY3QKKyAgdmFyIHNoYWRlciA9IGdsLmNy
ZWF0ZVNoYWRlcihzaGFkZXJUeXBlKTsKKyAgaWYgKHNoYWRlciA9PSBudWxsKSB7CisgICAgZXJy
Rm4oIioqKiBFcnJvcjogdW5hYmxlIHRvIGNyZWF0ZSBzaGFkZXIgJyIrc2hhZGVyU291cmNlKyIn
Iik7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKworICAvLyBMb2FkIHRoZSBzaGFkZXIgc291cmNl
CisgIGdsLnNoYWRlclNvdXJjZShzaGFkZXIsIHNoYWRlclNvdXJjZSk7CisKKyAgLy8gQ29tcGls
ZSB0aGUgc2hhZGVyCisgIGdsLmNvbXBpbGVTaGFkZXIoc2hhZGVyKTsKKworICBpZiAob3B0X2xv
Z1NoYWRlcnMpIHsKKyAgICB2YXIgbGFiZWwgPSBzaGFkZXJUeXBlID09IGdsLlZFUlRFWF9TSEFE
RVIgPyAndmVydGV4IHNoYWRlcicgOiAnZnJhZ21lbnRfc2hhZGVyJzsKKyAgICBpZiAob3B0X3No
YWRlckxhYmVsKSB7CisgICAgICBsYWJlbCA9IG9wdF9zaGFkZXJMYWJlbCArICcgJyArIGxhYmVs
OworICAgIH0KKyAgICBhZGRTaGFkZXJTb3VyY2VzKAorICAgICAgICBnbCwgZG9jdW1lbnQuZ2V0
RWxlbWVudEJ5SWQoJ2NvbnNvbGUnKSwgbGFiZWwsIHNoYWRlciwgc2hhZGVyU291cmNlLCBvcHRf
dXJsKTsKKyAgfQorCisgIC8vIENoZWNrIHRoZSBjb21waWxlIHN0YXR1cworICBpZiAoIW9wdF9z
a2lwQ29tcGlsZVN0YXR1cykgeworICAgIHZhciBjb21waWxlZCA9IGdsLmdldFNoYWRlclBhcmFt
ZXRlcihzaGFkZXIsIGdsLkNPTVBJTEVfU1RBVFVTKTsKKyAgICBpZiAoIWNvbXBpbGVkKSB7Cisg
ICAgICAvLyBTb21ldGhpbmcgd2VudCB3cm9uZyBkdXJpbmcgY29tcGlsYXRpb247IGdldCB0aGUg
ZXJyb3IKKyAgICAgIGxhc3RFcnJvciA9IGdsLmdldFNoYWRlckluZm9Mb2coc2hhZGVyKTsKKyAg
ICAgIGVyckZuKCIqKiogRXJyb3IgY29tcGlsaW5nICIgKyBnbEVudW1Ub1N0cmluZyhnbCwgc2hh
ZGVyVHlwZSkgKyAiICciICsgc2hhZGVyICsgIic6IiArIGxhc3RFcnJvcik7CisgICAgICBnbC5k
ZWxldGVTaGFkZXIoc2hhZGVyKTsKKyAgICAgIHJldHVybiBudWxsOworICAgIH0KKyAgfQorCisg
IHJldHVybiBzaGFkZXI7Cit9CisKKy8qKgorICogTG9hZHMgYSBzaGFkZXIgZnJvbSBhIFVSTC4K
KyAqIEBwYXJhbSB7IVdlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5n
Q29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge2ZpbGV9IGZpbGUgVGhlIFVSTCBvZiB0aGUgc2hh
ZGVyIHNvdXJjZS4KKyAqIEBwYXJhbSB7bnVtYmVyfSB0eXBlIFRoZSB0eXBlIG9mIHNoYWRlci4K
KyAqIEBwYXJhbSB7ZnVuY3Rpb24oc3RyaW5nKTogdm9pZH0gb3B0X2Vycm9yQ2FsbGJhY2sgY2Fs
bGJhY2sgZm9yIGVycm9ycy4KKyAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0X2xvZ1NoYWRlcnMgV2hl
dGhlciB0byBsb2cgc2hhZGVyIHNvdXJjZS4KKyAqIEBwYXJhbSB7Ym9vbGVhbn0gU2tpcCBjb21w
aWxhdGlvbiBzdGF0dXMgY2hlY2suIERlZmF1bHQgPSBmYWxzZS4KKyAqIEByZXR1cm4geyFXZWJH
TFNoYWRlcn0gVGhlIGNyZWF0ZWQgc2hhZGVyLgorICovCit2YXIgbG9hZFNoYWRlckZyb21GaWxl
ID0gZnVuY3Rpb24oCisgICAgZ2wsIGZpbGUsIHR5cGUsIG9wdF9lcnJvckNhbGxiYWNrLCBvcHRf
bG9nU2hhZGVycywgb3B0X3NraXBDb21waWxlU3RhdHVzKSB7CisgIHZhciBzaGFkZXJTb3VyY2Ug
PSByZWFkRmlsZShmaWxlKTsKKyAgcmV0dXJuIGxvYWRTaGFkZXIoZ2wsIHNoYWRlclNvdXJjZSwg
dHlwZSwgb3B0X2Vycm9yQ2FsbGJhY2ssCisgICAgICBvcHRfbG9nU2hhZGVycywgdW5kZWZpbmVk
LCBmaWxlLCBvcHRfc2tpcENvbXBpbGVTdGF0dXMpOworfTsKKwordmFyIGxvYWRTaGFkZXJGcm9t
RmlsZUFzeW5jID0gZnVuY3Rpb24oCisgICAgZ2wsIGZpbGUsIHR5cGUsIG9wdF9lcnJvckNhbGxi
YWNrLCBvcHRfbG9nU2hhZGVycywgb3B0X3NraXBDb21waWxlU3RhdHVzLCBjYWxsYmFjaykgewor
ICBsb2FkVGV4dEZpbGVBc3luYyhmaWxlLCBmdW5jdGlvbihnbCwgdHlwZSwgb3B0X2Vycm9yQ2Fs
bGJhY2ssIG9wdF9sb2dTaGFkZXJzLCBmaWxlLCBvcHRfc2tpcENvbXBpbGVTdGF0dXMpeworICAg
ICAgcmV0dXJuIGZ1bmN0aW9uKHN1Y2Nlc3MsIHNoYWRlclNvdXJjZSkgeworICAgICAgICBpZiAo
c3VjY2VzcykgeworICAgICAgICAgIHZhciBzaGFkZXIgPSBsb2FkU2hhZGVyKGdsLCBzaGFkZXJT
b3VyY2UsIHR5cGUsIG9wdF9lcnJvckNhbGxiYWNrLAorICAgICAgICAgICAgICBvcHRfbG9nU2hh
ZGVycywgdW5kZWZpbmVkLCBmaWxlLCBvcHRfc2tpcENvbXBpbGVTdGF0dXMpOworICAgICAgICAg
IGNhbGxiYWNrKHRydWUsIHNoYWRlcik7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgY2Fs
bGJhY2soZmFsc2UsIG51bGwpOworICAgICAgICB9CisgICAgICB9CisgIH0oZ2wsIHR5cGUsIG9w
dF9lcnJvckNhbGxiYWNrLCBvcHRfbG9nU2hhZGVycywgZmlsZSwgb3B0X3NraXBDb21waWxlU3Rh
dHVzKSk7Cit9OworCisvKioKKyAqIEdldHMgdGhlIGNvbnRlbnQgb2Ygc2NyaXB0LgorICogQHBh
cmFtIHtzdHJpbmd9IHNjcmlwdElkIFRoZSBpZCBvZiB0aGUgc2NyaXB0IHRhZy4KKyAqIEByZXR1
cm4ge3N0cmluZ30gVGhlIGNvbnRlbnQgb2YgdGhlIHNjcmlwdC4KKyAqLwordmFyIGdldFNjcmlw
dCA9IGZ1bmN0aW9uKHNjcmlwdElkKSB7CisgIHZhciBzaGFkZXJTY3JpcHQgPSBkb2N1bWVudC5n
ZXRFbGVtZW50QnlJZChzY3JpcHRJZCk7CisgIGlmICghc2hhZGVyU2NyaXB0KSB7CisgICAgdGhy
b3coIioqKiBFcnJvcjogdW5rbm93biBzY3JpcHQgZWxlbWVudCAiICsgc2NyaXB0SWQpOworICB9
CisgIHJldHVybiBzaGFkZXJTY3JpcHQudGV4dDsKK307CisKKy8qKgorICogTG9hZHMgYSBzaGFk
ZXIgZnJvbSBhIHNjcmlwdCB0YWcuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRleHR9
IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtzdHJpbmd9
IHNjcmlwdElkIFRoZSBpZCBvZiB0aGUgc2NyaXB0IHRhZy4KKyAqIEBwYXJhbSB7bnVtYmVyfSBv
cHRfc2hhZGVyVHlwZSBUaGUgdHlwZSBvZiBzaGFkZXIuIElmIG5vdCBwYXNzZWQgaW4gaXQgd2ls
bAorICogICAgIGJlIGRlcml2ZWQgZnJvbSB0aGUgdHlwZSBvZiB0aGUgc2NyaXB0IHRhZy4KKyAq
IEBwYXJhbSB7ZnVuY3Rpb24oc3RyaW5nKTogdm9pZH0gb3B0X2Vycm9yQ2FsbGJhY2sgY2FsbGJh
Y2sgZm9yIGVycm9ycy4KKyAqIEBwYXJhbSB7Ym9vbGVhbn0gb3B0X2xvZ1NoYWRlcnMgV2hldGhl
ciB0byBsb2cgc2hhZGVyIHNvdXJjZS4KKyAqIEBwYXJhbSB7Ym9vbGVhbn0gU2tpcCBjb21waWxh
dGlvbiBzdGF0dXMgY2hlY2suIERlZmF1bHQgPSBmYWxzZS4KKyAqIEByZXR1cm4geyFXZWJHTFNo
YWRlcn0gVGhlIGNyZWF0ZWQgc2hhZGVyLgorICovCit2YXIgbG9hZFNoYWRlckZyb21TY3JpcHQg
PSBmdW5jdGlvbigKKyAgICBnbCwgc2NyaXB0SWQsIG9wdF9zaGFkZXJUeXBlLCBvcHRfZXJyb3JD
YWxsYmFjaywgb3B0X2xvZ1NoYWRlcnMsIG9wdF9za2lwQ29tcGlsZVN0YXR1cykgeworICB2YXIg
c2hhZGVyU291cmNlID0gIiI7CisgIHZhciBzaGFkZXJTY3JpcHQgPSBkb2N1bWVudC5nZXRFbGVt
ZW50QnlJZChzY3JpcHRJZCk7CisgIGlmICghc2hhZGVyU2NyaXB0KSB7CisgICAgdGhyb3coIioq
KiBFcnJvcjogdW5rbm93biBzY3JpcHQgZWxlbWVudCAiICsgc2NyaXB0SWQpOworICB9CisgIHNo
YWRlclNvdXJjZSA9IHNoYWRlclNjcmlwdC50ZXh0LnRyaW0oKTsKKworICBpZiAoIW9wdF9zaGFk
ZXJUeXBlKSB7CisgICAgaWYgKHNoYWRlclNjcmlwdC50eXBlID09ICJ4LXNoYWRlci94LXZlcnRl
eCIpIHsKKyAgICAgIG9wdF9zaGFkZXJUeXBlID0gZ2wuVkVSVEVYX1NIQURFUjsKKyAgICB9IGVs
c2UgaWYgKHNoYWRlclNjcmlwdC50eXBlID09ICJ4LXNoYWRlci94LWZyYWdtZW50IikgeworICAg
ICAgb3B0X3NoYWRlclR5cGUgPSBnbC5GUkFHTUVOVF9TSEFERVI7CisgICAgfSBlbHNlIHsKKyAg
ICAgIHRocm93KCIqKiogRXJyb3I6IHVua25vd24gc2hhZGVyIHR5cGUiKTsKKyAgICAgIHJldHVy
biBudWxsOworICAgIH0KKyAgfQorCisgIHJldHVybiBsb2FkU2hhZGVyKGdsLCBzaGFkZXJTb3Vy
Y2UsIG9wdF9zaGFkZXJUeXBlLCBvcHRfZXJyb3JDYWxsYmFjaywKKyAgICAgIG9wdF9sb2dTaGFk
ZXJzLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgb3B0X3NraXBDb21waWxlU3RhdHVzKTsKK307CisK
K3ZhciBsb2FkU3RhbmRhcmRQcm9ncmFtID0gZnVuY3Rpb24oZ2wpIHsKKyAgdmFyIHByb2dyYW0g
PSBnbC5jcmVhdGVQcm9ncmFtKCk7CisgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBsb2FkU3Rh
bmRhcmRWZXJ0ZXhTaGFkZXIoZ2wpKTsKKyAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGxvYWRT
dGFuZGFyZEZyYWdtZW50U2hhZGVyKGdsKSk7CisgIGdsLmJpbmRBdHRyaWJMb2NhdGlvbihwcm9n
cmFtLCAwLCAiYV92ZXJ0ZXgiKTsKKyAgZ2wuYmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIDEs
ICJhX25vcm1hbCIpOworICBsaW5rUHJvZ3JhbShnbCwgcHJvZ3JhbSk7CisgIHJldHVybiBwcm9n
cmFtOworfTsKKwordmFyIGxvYWRTdGFuZGFyZFByb2dyYW1Bc3luYyA9IGZ1bmN0aW9uKGdsLCBj
YWxsYmFjaykgeworICBsb2FkU3RhbmRhcmRWZXJ0ZXhTaGFkZXJBc3luYyhnbCwgZnVuY3Rpb24o
Z2wpIHsKKyAgICByZXR1cm4gZnVuY3Rpb24oc3VjY2VzcywgdnMpIHsKKyAgICAgIGlmIChzdWNj
ZXNzKSB7CisgICAgICAgIGxvYWRTdGFuZGFyZEZyYWdtZW50U2hhZGVyQXN5bmMoZ2wsIGZ1bmN0
aW9uKHZzKSB7CisgICAgICAgICAgcmV0dXJuIGZ1bmN0aW9uKHN1Y2Nlc3MsIGZzKSB7CisgICAg
ICAgICAgICBpZiAoc3VjY2VzcykgeworICAgICAgICAgICAgICB2YXIgcHJvZ3JhbSA9IGdsLmNy
ZWF0ZVByb2dyYW0oKTsKKyAgICAgICAgICAgICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIHZz
KTsKKyAgICAgICAgICAgICAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0sIGZzKTsKKyAgICAgICAg
ICAgICAgZ2wuYmluZEF0dHJpYkxvY2F0aW9uKHByb2dyYW0sIDAsICJhX3ZlcnRleCIpOworICAg
ICAgICAgICAgICBnbC5iaW5kQXR0cmliTG9jYXRpb24ocHJvZ3JhbSwgMSwgImFfbm9ybWFsIik7
CisgICAgICAgICAgICAgIGxpbmtQcm9ncmFtKGdsLCBwcm9ncmFtKTsKKyAgICAgICAgICAgICAg
Y2FsbGJhY2sodHJ1ZSwgcHJvZ3JhbSk7CisgICAgICAgICAgICB9IGVsc2UgeworICAgICAgICAg
ICAgICBjYWxsYmFjayhmYWxzZSwgbnVsbCk7CisgICAgICAgICAgICB9CisgICAgICAgICAgfTsK
KyAgICAgICAgfSh2cykpOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgY2FsbGJhY2soZmFsc2Us
IG51bGwpOworICAgICAgfQorICAgIH07CisgIH0oZ2wpKTsKK307CisKKy8qKgorICogTG9hZHMg
c2hhZGVycyBmcm9tIGZpbGVzLCBjcmVhdGVzIGEgcHJvZ3JhbSwgYXR0YWNoZXMgdGhlIHNoYWRl
cnMgYW5kIGxpbmtzLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUg
V2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7c3RyaW5nfSB2ZXJ0ZXhT
aGFkZXJQYXRoIFRoZSBVUkwgb2YgdGhlIHZlcnRleCBzaGFkZXIuCisgKiBAcGFyYW0ge3N0cmlu
Z30gZnJhZ21lbnRTaGFkZXJQYXRoIFRoZSBVUkwgb2YgdGhlIGZyYWdtZW50IHNoYWRlci4KKyAq
IEBwYXJhbSB7ZnVuY3Rpb24oc3RyaW5nKTogdm9pZH0gb3B0X2Vycm9yQ2FsbGJhY2sgY2FsbGJh
Y2sgZm9yIGVycm9ycy4KKyAqIEByZXR1cm4geyFXZWJHTFByb2dyYW19IFRoZSBjcmVhdGVkIHBy
b2dyYW0uCisgKi8KK3ZhciBsb2FkUHJvZ3JhbUZyb21GaWxlID0gZnVuY3Rpb24oCisgICAgZ2ws
IHZlcnRleFNoYWRlclBhdGgsIGZyYWdtZW50U2hhZGVyUGF0aCwgb3B0X2Vycm9yQ2FsbGJhY2sp
IHsKKyAgdmFyIHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7CisgIHZhciB2cyA9IGxvYWRT
aGFkZXJGcm9tRmlsZSgKKyAgICAgIGdsLCB2ZXJ0ZXhTaGFkZXJQYXRoLCBnbC5WRVJURVhfU0hB
REVSLCBvcHRfZXJyb3JDYWxsYmFjayk7CisgIHZhciBmcyA9IGxvYWRTaGFkZXJGcm9tRmlsZSgK
KyAgICAgIGdsLCBmcmFnbWVudFNoYWRlclBhdGgsIGdsLkZSQUdNRU5UX1NIQURFUiwgb3B0X2Vy
cm9yQ2FsbGJhY2spOworICBpZiAodnMgJiYgZnMpIHsKKyAgICBnbC5hdHRhY2hTaGFkZXIocHJv
Z3JhbSwgdnMpOworICAgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCBmcyk7CisgICAgbGlua1By
b2dyYW0oZ2wsIHByb2dyYW0sIG9wdF9lcnJvckNhbGxiYWNrKTsKKyAgfQorICBpZiAodnMpIHsK
KyAgICBnbC5kZWxldGVTaGFkZXIodnMpOworICB9CisgIGlmIChmcykgeworICAgIGdsLmRlbGV0
ZVNoYWRlcihmcyk7CisgIH0KKyAgcmV0dXJuIHByb2dyYW07Cit9OworCisvKioKKyAqIExvYWRz
IHNoYWRlcnMgZnJvbSBzY3JpcHQgdGFncywgY3JlYXRlcyBhIHByb2dyYW0sIGF0dGFjaGVzIHRo
ZSBzaGFkZXJzIGFuZAorICogbGlua3MuCisgKiBAcGFyYW0geyFXZWJHTFJlbmRlcmluZ0NvbnRl
eHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICogQHBhcmFtIHtzdHJp
bmd9IHZlcnRleFNjcmlwdElkIFRoZSBpZCBvZiB0aGUgc2NyaXB0IHRhZyB0aGF0IGNvbnRhaW5z
IHRoZQorICogICAgICAgIHZlcnRleCBzaGFkZXIuCisgKiBAcGFyYW0ge3N0cmluZ30gZnJhZ21l
bnRTY3JpcHRJZCBUaGUgaWQgb2YgdGhlIHNjcmlwdCB0YWcgdGhhdCBjb250YWlucyB0aGUKKyAq
ICAgICAgICBmcmFnbWVudCBzaGFkZXIuCisgKiBAcGFyYW0ge2Z1bmN0aW9uKHN0cmluZyk6IHZv
aWR9IG9wdF9lcnJvckNhbGxiYWNrIGNhbGxiYWNrIGZvciBlcnJvcnMuCisgKiBAcmV0dXJuIHsh
V2ViR0xQcm9ncmFtfSBUaGUgY3JlYXRlZCBwcm9ncmFtLgorICovCit2YXIgbG9hZFByb2dyYW1G
cm9tU2NyaXB0ID0gZnVuY3Rpb24gbG9hZFByb2dyYW1Gcm9tU2NyaXB0KAorICAgIGdsLCB2ZXJ0
ZXhTY3JpcHRJZCwgZnJhZ21lbnRTY3JpcHRJZCwgb3B0X2Vycm9yQ2FsbGJhY2spIHsKKyAgdmFy
IHByb2dyYW0gPSBnbC5jcmVhdGVQcm9ncmFtKCk7CisgIGdsLmF0dGFjaFNoYWRlcigKKyAgICAg
IHByb2dyYW0sCisgICAgICBsb2FkU2hhZGVyRnJvbVNjcmlwdCgKKyAgICAgICAgICBnbCwgdmVy
dGV4U2NyaXB0SWQsIGdsLlZFUlRFWF9TSEFERVIsIG9wdF9lcnJvckNhbGxiYWNrKSk7CisgIGds
LmF0dGFjaFNoYWRlcigKKyAgICAgIHByb2dyYW0sCisgICAgICBsb2FkU2hhZGVyRnJvbVNjcmlw
dCgKKyAgICAgICAgICBnbCwgZnJhZ21lbnRTY3JpcHRJZCwgIGdsLkZSQUdNRU5UX1NIQURFUiwg
b3B0X2Vycm9yQ2FsbGJhY2spKTsKKyAgbGlua1Byb2dyYW0oZ2wsIHByb2dyYW0sIG9wdF9lcnJv
ckNhbGxiYWNrKTsKKyAgcmV0dXJuIHByb2dyYW07Cit9OworCisvKioKKyAqIExvYWRzIHNoYWRl
cnMgZnJvbSBzb3VyY2UsIGNyZWF0ZXMgYSBwcm9ncmFtLCBhdHRhY2hlcyB0aGUgc2hhZGVycyBh
bmQKKyAqIGxpbmtzLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUg
V2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7IVdlYkdMU2hhZGVyfSB2
ZXJ0ZXhTaGFkZXIgVGhlIHZlcnRleCBzaGFkZXIuCisgKiBAcGFyYW0geyFXZWJHTFNoYWRlcn0g
ZnJhZ21lbnRTaGFkZXIgVGhlIGZyYWdtZW50IHNoYWRlci4KKyAqIEBwYXJhbSB7ZnVuY3Rpb24o
c3RyaW5nKTogdm9pZH0gb3B0X2Vycm9yQ2FsbGJhY2sgY2FsbGJhY2sgZm9yIGVycm9ycy4KKyAq
IEByZXR1cm4geyFXZWJHTFByb2dyYW19IFRoZSBjcmVhdGVkIHByb2dyYW0uCisgKi8KK3ZhciBj
cmVhdGVQcm9ncmFtID0gZnVuY3Rpb24oZ2wsIHZlcnRleFNoYWRlciwgZnJhZ21lbnRTaGFkZXIs
IG9wdF9lcnJvckNhbGxiYWNrKSB7CisgIHZhciBwcm9ncmFtID0gZ2wuY3JlYXRlUHJvZ3JhbSgp
OworICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgdmVydGV4U2hhZGVyKTsKKyAgZ2wuYXR0YWNo
U2hhZGVyKHByb2dyYW0sIGZyYWdtZW50U2hhZGVyKTsKKyAgbGlua1Byb2dyYW0oZ2wsIHByb2dy
YW0sIG9wdF9lcnJvckNhbGxiYWNrKTsKKyAgcmV0dXJuIHByb2dyYW07Cit9OworCisvKioKKyAq
IExvYWRzIHNoYWRlcnMgZnJvbSBzb3VyY2UsIGNyZWF0ZXMgYSBwcm9ncmFtLCBhdHRhY2hlcyB0
aGUgc2hhZGVycyBhbmQKKyAqIGxpbmtzLgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250
ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7c3Ry
aW5nfSB2ZXJ0ZXhTaGFkZXIgVGhlIHZlcnRleCBzaGFkZXIgc291cmNlLgorICogQHBhcmFtIHtz
dHJpbmd9IGZyYWdtZW50U2hhZGVyIFRoZSBmcmFnbWVudCBzaGFkZXIgc291cmNlLgorICogQHBh
cmFtIHtmdW5jdGlvbihzdHJpbmcpOiB2b2lkfSBvcHRfZXJyb3JDYWxsYmFjayBjYWxsYmFjayBm
b3IgZXJyb3JzLgorICogQHBhcmFtIHtib29sZWFufSBvcHRfbG9nU2hhZGVycyBXaGV0aGVyIHRv
IGxvZyBzaGFkZXIgc291cmNlLgorICogQHJldHVybiB7IVdlYkdMUHJvZ3JhbX0gVGhlIGNyZWF0
ZWQgcHJvZ3JhbS4KKyAqLwordmFyIGxvYWRQcm9ncmFtID0gZnVuY3Rpb24oCisgICAgZ2wsIHZl
cnRleFNoYWRlciwgZnJhZ21lbnRTaGFkZXIsIG9wdF9lcnJvckNhbGxiYWNrLCBvcHRfbG9nU2hh
ZGVycykgeworICB2YXIgcHJvZ3JhbTsKKyAgdmFyIHZzID0gbG9hZFNoYWRlcigKKyAgICAgIGds
LCB2ZXJ0ZXhTaGFkZXIsIGdsLlZFUlRFWF9TSEFERVIsIG9wdF9lcnJvckNhbGxiYWNrLCBvcHRf
bG9nU2hhZGVycyk7CisgIHZhciBmcyA9IGxvYWRTaGFkZXIoCisgICAgICBnbCwgZnJhZ21lbnRT
aGFkZXIsIGdsLkZSQUdNRU5UX1NIQURFUiwgb3B0X2Vycm9yQ2FsbGJhY2ssIG9wdF9sb2dTaGFk
ZXJzKTsKKyAgaWYgKHZzICYmIGZzKSB7CisgICAgcHJvZ3JhbSA9IGNyZWF0ZVByb2dyYW0oZ2ws
IHZzLCBmcywgb3B0X2Vycm9yQ2FsbGJhY2spCisgIH0KKyAgaWYgKHZzKSB7CisgICAgZ2wuZGVs
ZXRlU2hhZGVyKHZzKTsKKyAgfQorICBpZiAoZnMpIHsKKyAgICBnbC5kZWxldGVTaGFkZXIoZnMp
OworICB9CisgIHJldHVybiBwcm9ncmFtOworfTsKKworLyoqCisgKiBMb2FkcyBzaGFkZXJzIGZy
b20gc291cmNlLCBjcmVhdGVzIGEgcHJvZ3JhbSwgYXR0YWNoZXMgdGhlIHNoYWRlcnMgYW5kCisg
KiBsaW5rcyBidXQgZXhwZWN0cyBlcnJvci4KKyAqCisgKiBHTFNMIDEuMC4xNyAxMC4yNyBlZmZl
Y3RpdmVseSBzYXlzIHRoYXQgY29tcGlsZVNoYWRlciBjYW4KKyAqIGFsd2F5cyBzdWNjZWVkIGFz
IGxvbmcgYXMgbGlua1Byb2dyYW0gZmFpbHMgc28gd2UgY2FuJ3QKKyAqIHJlbHkgb24gY29tcGls
ZVNoYWRlciBmYWlsaW5nLiBUaGlzIGZ1bmN0aW9uIGV4cGVjdHMKKyAqIG9uZSBvZiB0aGUgc2hh
ZGVyIHRvIGZhaWwgT1IgbGlua2luZyB0byBmYWlsLgorICoKKyAqIEBwYXJhbSB7IVdlYkdMUmVu
ZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdlYkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBA
cGFyYW0ge3N0cmluZ30gdmVydGV4U2hhZGVyU2NyaXB0SWQgVGhlIHZlcnRleCBzaGFkZXIuCisg
KiBAcGFyYW0ge3N0cmluZ30gZnJhZ21lbnRTaGFkZXJTY3JpcHRJZCBUaGUgZnJhZ21lbnQgc2hh
ZGVyLgorICogQHJldHVybiB7V2ViR0xQcm9ncmFtfSBUaGUgY3JlYXRlZCBwcm9ncmFtLgorICov
Cit2YXIgbG9hZFByb2dyYW1Gcm9tU2NyaXB0RXhwZWN0RXJyb3IgPSBmdW5jdGlvbigKKyAgICBn
bCwgdmVydGV4U2hhZGVyU2NyaXB0SWQsIGZyYWdtZW50U2hhZGVyU2NyaXB0SWQpIHsKKyAgdmFy
IHZlcnRleFNoYWRlciA9IGxvYWRTaGFkZXJGcm9tU2NyaXB0KGdsLCB2ZXJ0ZXhTaGFkZXJTY3Jp
cHRJZCk7CisgIGlmICghdmVydGV4U2hhZGVyKSB7CisgICAgcmV0dXJuIG51bGw7CisgIH0KKyAg
dmFyIGZyYWdtZW50U2hhZGVyID0gbG9hZFNoYWRlckZyb21TY3JpcHQoZ2wsIGZyYWdtZW50U2hh
ZGVyU2NyaXB0SWQpOworICBpZiAoIWZyYWdtZW50U2hhZGVyKSB7CisgICAgcmV0dXJuIG51bGw7
CisgIH0KKyAgdmFyIGxpbmtTdWNjZXNzID0gdHJ1ZTsKKyAgdmFyIHByb2dyYW0gPSBnbC5jcmVh
dGVQcm9ncmFtKCk7CisgIGdsLmF0dGFjaFNoYWRlcihwcm9ncmFtLCB2ZXJ0ZXhTaGFkZXIpOwor
ICBnbC5hdHRhY2hTaGFkZXIocHJvZ3JhbSwgZnJhZ21lbnRTaGFkZXIpOworICBsaW5rU3VjY2Vz
cyA9IHRydWU7CisgIGxpbmtQcm9ncmFtKGdsLCBwcm9ncmFtLCBmdW5jdGlvbigpIHsKKyAgICAg
IGxpbmtTdWNjZXNzID0gZmFsc2U7CisgICAgfSk7CisgIHJldHVybiBsaW5rU3VjY2VzcyA/IHBy
b2dyYW0gOiBudWxsOworfTsKKworCit2YXIgZ2V0QWN0aXZlTWFwID0gZnVuY3Rpb24oZ2wsIHBy
b2dyYW0sIHR5cGVJbmZvKSB7CisgIHZhciBudW1WYXJpYWJsZXMgPSBnbC5nZXRQcm9ncmFtUGFy
YW1ldGVyKHByb2dyYW0sIGdsW3R5cGVJbmZvLnBhcmFtXSk7CisgIHZhciB2YXJpYWJsZXMgPSB7
fTsKKyAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IG51bVZhcmlhYmxlczsgKytpaSkgeworICAgIHZh
ciBpbmZvID0gZ2xbdHlwZUluZm8uYWN0aXZlRm5dKHByb2dyYW0sIGlpKTsKKyAgICB2YXJpYWJs
ZXNbaW5mby5uYW1lXSA9IHsKKyAgICAgIG5hbWU6IGluZm8ubmFtZSwKKyAgICAgIHNpemU6IGlu
Zm8uc2l6ZSwKKyAgICAgIHR5cGU6IGluZm8udHlwZSwKKyAgICAgIGxvY2F0aW9uOiBnbFt0eXBl
SW5mby5sb2NGbl0ocHJvZ3JhbSwgaW5mby5uYW1lKQorICAgIH07CisgIH0KKyAgcmV0dXJuIHZh
cmlhYmxlczsKK307CisKKy8qKgorICogUmV0dXJucyBhIG1hcCBvZiBhdHRyaWIgbmFtZXMgdG8g
aW5mbyBhYm91dCB0aG9zZQorICogYXR0cmlicy4KKyAqCisgKiBlZzoKKyAqICAgIHsgImF0dHJp
YjFOYW1lIjoKKyAqICAgICAgeworICogICAgICAgIG5hbWU6ICJhdHRyaWIxTmFtZSIsCisgKiAg
ICAgICAgc2l6ZTogMSwKKyAqICAgICAgICB0eXBlOiBnbC5GTE9BVF9NQVQyLAorICogICAgICAg
IGxvY2F0aW9uOiAwCisgKiAgICAgIH0sCisgKiAgICAgICJhdHRyaWIyTmFtZVswXSI6CisgKiAg
ICAgIHsKKyAqICAgICAgICAgbmFtZTogImF0dHJpYjJOYW1lWzBdIiwKKyAqICAgICAgICAgc2l6
ZTogNCwKKyAqICAgICAgICAgdHlwZTogZ2wuRkxPQVQsCisgKiAgICAgICAgIGxvY2F0aW9uOiAx
CisgKiAgICAgIH0sCisgKiAgICB9CisgKgorICogQHBhcmFtIHshV2ViR0xSZW5kZXJpbmdDb250
ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7V2Vi
R0xQcm9ncmFtfSBUaGUgcHJvZ3JhbSB0byBxdWVyeSBmb3IgYXR0cmlicy4KKyAqIEByZXR1cm4g
dGhlIG1hcC4KKyAqLwordmFyIGdldEF0dHJpYk1hcCA9IGZ1bmN0aW9uKGdsLCBwcm9ncmFtKSB7
CisgIHJldHVybiBnZXRBY3RpdmVNYXAoZ2wsIHByb2dyYW0sIHsKKyAgICAgIHBhcmFtOiAiQUNU
SVZFX0FUVFJJQlVURVMiLAorICAgICAgYWN0aXZlRm46ICJnZXRBY3RpdmVBdHRyaWIiLAorICAg
ICAgbG9jRm46ICJnZXRBdHRyaWJMb2NhdGlvbiIKKyAgfSk7Cit9OworCisvKioKKyAqIFJldHVy
bnMgYSBtYXAgb2YgdW5pZm9ybSBuYW1lcyB0byBpbmZvIGFib3V0IHRob3NlIHVuaWZvcm1zLgor
ICoKKyAqIGVnOgorICogICAgeyAidW5pZm9ybTFOYW1lIjoKKyAqICAgICAgeworICogICAgICAg
IG5hbWU6ICJ1bmlmb3JtMU5hbWUiLAorICogICAgICAgIHNpemU6IDEsCisgKiAgICAgICAgdHlw
ZTogZ2wuRkxPQVRfTUFUMiwKKyAqICAgICAgICBsb2NhdGlvbjogV2ViR0xVbmlmb3JtTG9jYXRp
b24KKyAqICAgICAgfSwKKyAqICAgICAgInVuaWZvcm0yTmFtZVswXSI6CisgKiAgICAgIHsKKyAq
ICAgICAgICAgbmFtZTogInVuaWZvcm0yTmFtZVswXSIsCisgKiAgICAgICAgIHNpemU6IDQsCisg
KiAgICAgICAgIHR5cGU6IGdsLkZMT0FULAorICogICAgICAgICBsb2NhdGlvbjogV2ViR0xVbmlm
b3JtTG9jYXRpb24KKyAqICAgICAgfSwKKyAqICAgIH0KKyAqCisgKiBAcGFyYW0geyFXZWJHTFJl
bmRlcmluZ0NvbnRleHR9IGdsIFRoZSBXZWJHTFJlbmRlcmluZ0NvbnRleHQgdG8gdXNlLgorICog
QHBhcmFtIHtXZWJHTFByb2dyYW19IFRoZSBwcm9ncmFtIHRvIHF1ZXJ5IGZvciB1bmlmb3Jtcy4K
KyAqIEByZXR1cm4gdGhlIG1hcC4KKyAqLwordmFyIGdldFVuaWZvcm1NYXAgPSBmdW5jdGlvbihn
bCwgcHJvZ3JhbSkgeworICByZXR1cm4gZ2V0QWN0aXZlTWFwKGdsLCBwcm9ncmFtLCB7CisgICAg
ICBwYXJhbTogIkFDVElWRV9VTklGT1JNUyIsCisgICAgICBhY3RpdmVGbjogImdldEFjdGl2ZVVu
aWZvcm0iLAorICAgICAgbG9jRm46ICJnZXRVbmlmb3JtTG9jYXRpb24iCisgIH0pOworfTsKKwor
dmFyIGJhc2VQYXRoOwordmFyIGdldFJlc291cmNlUGF0aCA9IGZ1bmN0aW9uKCkgeworICBpZiAo
IWJhc2VQYXRoKSB7CisgICAgdmFyIGV4cGVjdGVkQmFzZSA9ICJqcy93ZWJnbC10ZXN0LXV0aWxz
LmpzIjsKKyAgICB2YXIgc2NyaXB0cyA9IGRvY3VtZW50LmdldEVsZW1lbnRzQnlUYWdOYW1lKCdz
Y3JpcHQnKTsKKyAgICBmb3IgKHZhciBzY3JpcHQsIGkgPSAwOyBzY3JpcHQgPSBzY3JpcHRzW2ld
OyBpKyspIHsKKyAgICAgIHZhciBzcmMgPSBzY3JpcHQuc3JjOworICAgICAgdmFyIGwgPSBzcmMu
bGVuZ3RoOworICAgICAgaWYgKHNyYy5zdWJzdHIobCAtIGV4cGVjdGVkQmFzZS5sZW5ndGgpID09
IGV4cGVjdGVkQmFzZSkgeworICAgICAgICBiYXNlUGF0aCA9IHNyYy5zdWJzdHIoMCwgbCAtIGV4
cGVjdGVkQmFzZS5sZW5ndGgpOworICAgICAgfQorICAgIH0KKyAgfQorICByZXR1cm4gYmFzZVBh
dGggKyAicmVzb3VyY2VzLyI7Cit9OworCit2YXIgbG9hZFN0YW5kYXJkVmVydGV4U2hhZGVyID0g
ZnVuY3Rpb24oZ2wpIHsKKyAgcmV0dXJuIGxvYWRTaGFkZXJGcm9tRmlsZSgKKyAgICAgIGdsLCBn
ZXRSZXNvdXJjZVBhdGgoKSArICJ2ZXJ0ZXhTaGFkZXIudmVydCIsIGdsLlZFUlRFWF9TSEFERVIp
OworfTsKK3ZhciBsb2FkU3RhbmRhcmRWZXJ0ZXhTaGFkZXJBc3luYyA9IGZ1bmN0aW9uKGdsLCBj
YWxsYmFjaykgeworICBsb2FkU2hhZGVyRnJvbUZpbGVBc3luYyhnbCwgZ2V0UmVzb3VyY2VQYXRo
KCkgKyAidmVydGV4U2hhZGVyLnZlcnQiLCBnbC5WRVJURVhfU0hBREVSLCB1bmRlZmluZWQsIHVu
ZGVmaW5lZCwgdW5kZWZpbmVkLCBjYWxsYmFjayk7Cit9OworCit2YXIgbG9hZFN0YW5kYXJkRnJh
Z21lbnRTaGFkZXIgPSBmdW5jdGlvbihnbCkgeworICByZXR1cm4gbG9hZFNoYWRlckZyb21GaWxl
KAorICAgICAgZ2wsIGdldFJlc291cmNlUGF0aCgpICsgImZyYWdtZW50U2hhZGVyLmZyYWciLCBn
bC5GUkFHTUVOVF9TSEFERVIpOworfTsKK3ZhciBsb2FkU3RhbmRhcmRGcmFnbWVudFNoYWRlckFz
eW5jID0gZnVuY3Rpb24oZ2wsIGNhbGxiYWNrKSB7CisgIGxvYWRTaGFkZXJGcm9tRmlsZUFzeW5j
KGdsLCBnZXRSZXNvdXJjZVBhdGgoKSArICJmcmFnbWVudFNoYWRlci5mcmFnIiwgZ2wuRlJBR01F
TlRfU0hBREVSLCB1bmRlZmluZWQsIHVuZGVmaW5lZCwgdW5kZWZpbmVkLCBjYWxsYmFjayk7Cit9
OworCit2YXIgbG9hZFVuaWZvcm1CbG9ja1Byb2dyYW0gPSBmdW5jdGlvbihnbCkgeworICB2YXIg
cHJvZ3JhbSA9IGdsLmNyZWF0ZVByb2dyYW0oKTsKKyAgZ2wuYXR0YWNoU2hhZGVyKHByb2dyYW0s
IGxvYWRVbmlmb3JtQmxvY2tWZXJ0ZXhTaGFkZXIoZ2wpKTsKKyAgZ2wuYXR0YWNoU2hhZGVyKHBy
b2dyYW0sIGxvYWRVbmlmb3JtQmxvY2tGcmFnbWVudFNoYWRlcihnbCkpOworICBnbC5iaW5kQXR0
cmliTG9jYXRpb24ocHJvZ3JhbSwgMCwgImFfdmVydGV4Iik7CisgIGdsLmJpbmRBdHRyaWJMb2Nh
dGlvbihwcm9ncmFtLCAxLCAiYV9ub3JtYWwiKTsKKyAgbGlua1Byb2dyYW0oZ2wsIHByb2dyYW0p
OworICByZXR1cm4gcHJvZ3JhbTsKK307CisKK3ZhciBsb2FkVW5pZm9ybUJsb2NrVmVydGV4U2hh
ZGVyID0gZnVuY3Rpb24oZ2wpIHsKKyAgcmV0dXJuIGxvYWRTaGFkZXJGcm9tRmlsZSgKKyAgICAg
IGdsLCBnZXRSZXNvdXJjZVBhdGgoKSArICJ1bmlmb3JtQmxvY2tTaGFkZXIudmVydCIsIGdsLlZF
UlRFWF9TSEFERVIpOworfTsKKwordmFyIGxvYWRVbmlmb3JtQmxvY2tGcmFnbWVudFNoYWRlciA9
IGZ1bmN0aW9uKGdsKSB7CisgIHJldHVybiBsb2FkU2hhZGVyRnJvbUZpbGUoCisgICAgICBnbCwg
Z2V0UmVzb3VyY2VQYXRoKCkgKyAidW5pZm9ybUJsb2NrU2hhZGVyLmZyYWciLCBnbC5GUkFHTUVO
VF9TSEFERVIpOworfTsKKworLyoqCisgKiBMb2FkcyBhbiBpbWFnZSBhc3luY2hyb25vdXNseS4K
KyAqIEBwYXJhbSB7c3RyaW5nfSB1cmwgVVJMIG9mIGltYWdlIHRvIGxvYWQuCisgKiBAcGFyYW0g
eyFmdW5jdGlvbighRWxlbWVudCk6IHZvaWR9IGNhbGxiYWNrIEZ1bmN0aW9uIHRvIGNhbGwKKyAq
ICAgICB3aXRoIGxvYWRlZCBpbWFnZS4KKyAqLwordmFyIGxvYWRJbWFnZUFzeW5jID0gZnVuY3Rp
b24odXJsLCBjYWxsYmFjaykgeworICB2YXIgaW1nID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgn
aW1nJyk7CisgIGltZy5vbmxvYWQgPSBmdW5jdGlvbigpIHsKKyAgICBjYWxsYmFjayhpbWcpOwor
ICB9OworICBpbWcuc3JjID0gdXJsOworfTsKKworLyoqCisgKiBMb2FkcyBhbiBhcnJheSBvZiBp
bWFnZXMuCisgKiBAcGFyYW0geyFBcnJheS48c3RyaW5nPn0gdXJscyBVUkxzIG9mIGltYWdlcyB0
byBsb2FkLgorICogQHBhcmFtIHshZnVuY3Rpb24oIXtzdHJpbmcsIGltZ30pOiB2b2lkfSBjYWxs
YmFjayBDYWxsYmFjaworICogICAgIHRoYXQgZ2V0cyBwYXNzZWQgbWFwIG9mIHVybHMgdG8gaW1n
IHRhZ3MuCisgKi8KK3ZhciBsb2FkSW1hZ2VzQXN5bmMgPSBmdW5jdGlvbih1cmxzLCBjYWxsYmFj
aykgeworICB2YXIgY291bnQgPSAxOworICB2YXIgaW1hZ2VzID0geyB9OworICBmdW5jdGlvbiBj
b3VudERvd24oKSB7CisgICAgLS1jb3VudDsKKyAgICBpZiAoY291bnQgPT0gMCkgeworICAgICAg
bG9nKCJsb2FkSW1hZ2VzQXN5bmM6IGFsbCBpbWFnZXMgbG9hZGVkIik7CisgICAgICBjYWxsYmFj
ayhpbWFnZXMpOworICAgIH0KKyAgfQorICBmdW5jdGlvbiBpbWFnZUxvYWRlZCh1cmwpIHsKKyAg
ICByZXR1cm4gZnVuY3Rpb24oaW1nKSB7CisgICAgICBpbWFnZXNbdXJsXSA9IGltZzsKKyAgICAg
IGxvZygibG9hZEltYWdlc0FzeW5jOiBsb2FkZWQgIiArIHVybCk7CisgICAgICBjb3VudERvd24o
KTsKKyAgICB9CisgIH0KKyAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IHVybHMubGVuZ3RoOyArK2lp
KSB7CisgICAgKytjb3VudDsKKyAgICBsb2FkSW1hZ2VBc3luYyh1cmxzW2lpXSwgaW1hZ2VMb2Fk
ZWQodXJsc1tpaV0pKTsKKyAgfQorICBjb3VudERvd24oKTsKK307CisKKy8qKgorICogUmV0dXJu
cyBhIG1hcCBvZiBrZXk9dmFsdWUgdmFsdWVzIGZyb20gdXJsLgorICogQHJldHVybiB7IU9iamVj
dC48c3RyaW5nLCBudW1iZXI+fSBtYXAgb2Yga2V5cyB0byB2YWx1ZXMuCisgKi8KK3ZhciBnZXRV
cmxBcmd1bWVudHMgPSBmdW5jdGlvbigpIHsKKyAgdmFyIGFyZ3MgPSB7fTsKKyAgdHJ5IHsKKyAg
ICB2YXIgcyA9IHdpbmRvdy5sb2NhdGlvbi5ocmVmOworICAgIHZhciBxID0gcy5pbmRleE9mKCI/
Iik7CisgICAgdmFyIGUgPSBzLmluZGV4T2YoIiMiKTsKKyAgICBpZiAoZSA8IDApIHsKKyAgICAg
IGUgPSBzLmxlbmd0aDsKKyAgICB9CisgICAgdmFyIHF1ZXJ5ID0gcy5zdWJzdHJpbmcocSArIDEs
IGUpOworICAgIHZhciBwYWlycyA9IHF1ZXJ5LnNwbGl0KCImIik7CisgICAgZm9yICh2YXIgaWkg
PSAwOyBpaSA8IHBhaXJzLmxlbmd0aDsgKytpaSkgeworICAgICAgdmFyIGtleVZhbHVlID0gcGFp
cnNbaWldLnNwbGl0KCI9Iik7CisgICAgICB2YXIga2V5ID0ga2V5VmFsdWVbMF07CisgICAgICB2
YXIgdmFsdWUgPSBkZWNvZGVVUklDb21wb25lbnQoa2V5VmFsdWVbMV0pOworICAgICAgYXJnc1tr
ZXldID0gdmFsdWU7CisgICAgfQorICB9IGNhdGNoIChlKSB7CisgICAgdGhyb3cgImNvdWxkIG5v
dCBwYXJzZSB1cmwiOworICB9CisgIHJldHVybiBhcmdzOworfTsKKworLyoqCisgKiBNYWtlcyBh
biBpbWFnZSBmcm9tIGEgc3JjLgorICogQHBhcmFtIHtzdHJpbmd9IHNyYyBJbWFnZSBzb3VyY2Ug
VVJMLgorICogQHBhcmFtIHtmdW5jdGlvbigpfSBvbmxvYWQgQ2FsbGJhY2sgdG8gY2FsbCB3aGVu
IHRoZSBpbWFnZSBoYXMgZmluaXNlZCBsb2FkaW5nLgorICogQHBhcmFtIHtmdW5jdGlvbigpfSBv
bmVycm9yIENhbGxiYWNrIHRvIGNhbGwgd2hlbiBhbiBlcnJvciBvY2N1cnMuCisgKiBAcmV0dXJu
IHshSW1hZ2V9IFRoZSBjcmVhdGVkIGltYWdlLgorICovCit2YXIgbWFrZUltYWdlID0gZnVuY3Rp
b24oc3JjLCBvbmxvYWQsIG9uZXJyb3IpIHsKKyAgdmFyIGltZyA9IGRvY3VtZW50LmNyZWF0ZUVs
ZW1lbnQoJ2ltZycpOworICBpZiAob25sb2FkKSB7CisgICAgaW1nLm9ubG9hZCA9IG9ubG9hZDsK
KyAgfQorICBpZiAob25lcnJvcikgeworICAgIGltZy5vbmVycm9yID0gb25lcnJvcjsKKyAgfSBl
bHNlIHsKKyAgICBpbWcub25lcnJvciA9IGZ1bmN0aW9uKCkgeworICAgICAgbG9nKCJXQVJOSU5H
OiBjcmVhdGluZyBpbWFnZSBmYWlsZWQ7IHNyYzogIiArIHRoaXMuc3JjKTsKKyAgICB9OworICB9
CisgIGlmIChzcmMpIHsKKyAgICBpbWcuc3JjID0gc3JjOworICB9CisgIHJldHVybiBpbWc7Cit9
CisKKy8qKgorICogTWFrZXMgYW4gaW1hZ2UgZWxlbWVudCBmcm9tIGEgY2FudmFzLgorICogQHBh
cmFtIHshSFRNTENhbnZhc30gY2FudmFzIENhbnZhcyB0byBtYWtlIGltYWdlIGZyb20uCisgKiBA
cGFyYW0ge2Z1bmN0aW9uKCl9IG9ubG9hZCBDYWxsYmFjayB0byBjYWxsIHdoZW4gdGhlIGltYWdl
IGhhcyBmaW5pc2VkIGxvYWRpbmcuCisgKiBAcGFyYW0ge3N0cmluZ30gaW1hZ2VGb3JtYXQgSW1h
Z2UgZm9ybWF0IHRvIGJlIHBhc3NlZCB0byB0b0RhdGFVcmwoKS4KKyAqIEByZXR1cm4geyFJbWFn
ZX0gVGhlIGNyZWF0ZWQgaW1hZ2UuCisgKi8KK3ZhciBtYWtlSW1hZ2VGcm9tQ2FudmFzID0gZnVu
Y3Rpb24oY2FudmFzLCBvbmxvYWQsIGltYWdlRm9ybWF0KSB7CisgIHJldHVybiBtYWtlSW1hZ2Uo
Y2FudmFzLnRvRGF0YVVSTChpbWFnZUZvcm1hdCksIG9ubG9hZCk7Cit9OworCisvKioKKyAqIE1h
a2VzIGEgdmlkZW8gZWxlbWVudCBmcm9tIGEgc3JjLgorICogQHBhcmFtIHtzdHJpbmd9IHNyYyBW
aWRlbyBzb3VyY2UgVVJMLgorICogQHBhcmFtIHtmdW5jdGlvbigpfSBvbmVycm9yIENhbGxiYWNr
IHRvIGNhbGwgd2hlbiBhbiBlcnJvciBvY2N1cnMuCisgKiBAcmV0dXJuIHshVmlkZW99IFRoZSBj
cmVhdGVkIHZpZGVvLgorICovCit2YXIgbWFrZVZpZGVvID0gZnVuY3Rpb24oc3JjLCBvbmVycm9y
KSB7CisgIHZhciB2aWQgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCd2aWRlbycpOworICB2aWQu
bXV0ZWQgPSB0cnVlOworICBpZiAob25lcnJvcikgeworICAgIHZpZC5vbmVycm9yID0gb25lcnJv
cjsKKyAgfSBlbHNlIHsKKyAgICB2aWQub25lcnJvciA9IGZ1bmN0aW9uKCkgeworICAgICAgbG9n
KCJXQVJOSU5HOiBjcmVhdGluZyB2aWRlbyBmYWlsZWQ7IHNyYzogIiArIHRoaXMuc3JjKTsKKyAg
ICB9OworICB9CisgIGlmIChzcmMpIHsKKyAgICB2aWQuc3JjID0gc3JjOworICB9CisgIHJldHVy
biB2aWQ7Cit9CisKKy8qKgorICogSW5zZXJ0cyBhbiBpbWFnZSB3aXRoIGEgY2FwdGlvbiBpbnRv
ICdlbGVtZW50Jy4KKyAqIEBwYXJhbSB7IUhUTUxFbGVtZW50fSBlbGVtZW50IEVsZW1lbnQgdG8g
YXBwZW5kIGltYWdlIHRvLgorICogQHBhcmFtIHtzdHJpbmd9IGNhcHRpb24gY2FwdGlvbiB0byBh
c3NvY2lhdGUgd2l0aCBpbWFnZS4KKyAqIEBwYXJhbSB7IUltYWdlfSBpbWcgaW1hZ2UgdG8gaW5z
ZXJ0LgorICovCit2YXIgaW5zZXJ0SW1hZ2UgPSBmdW5jdGlvbihlbGVtZW50LCBjYXB0aW9uLCBp
bWcpIHsKKyAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICB2YXIg
bGFiZWwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTsKKyAgbGFiZWwuYXBwZW5kQ2hp
bGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoY2FwdGlvbikpOworICBkaXYuYXBwZW5kQ2hpbGQo
bGFiZWwpOworICBkaXYuYXBwZW5kQ2hpbGQoaW1nKTsKKyAgZWxlbWVudC5hcHBlbmRDaGlsZChk
aXYpOworfTsKKworLyoqCisgKiBJbnNlcnRzIGEgJ2xhYmVsJyB0aGF0IHdoZW4gY2xpY2tlZCBl
eHBhbmRzIHRvIHRoZSBwcmUgZm9ybWF0dGVkIHRleHQKKyAqIHN1cHBsaWVkIGJ5ICdzb3VyY2Un
LgorICogQHBhcmFtIHshSFRNTEVsZW1lbnR9IGVsZW1lbnQgZWxlbWVudCB0byBhcHBlbmQgbGFi
ZWwgdG8uCisgKiBAcGFyYW0ge3N0cmluZ30gbGFiZWwgbGFiZWwgZm9yIGFuY2hvci4KKyAqIEBw
YXJhbSB7c3RyaW5nfSBzb3VyY2UgcHJlZm9ybWF0dGVkIHRleHQgdG8gZXhwYW5kIHRvLgorICog
QHBhcmFtIHtzdHJpbmd9IG9wdF91cmwgVVJMIG9mIHNvdXJjZS4gSWYgcHJvdmlkZWQgYSBsaW5r
IHRvIHRoZSBzb3VyY2UgZmlsZQorICogICAgIHdpbGwgYWxzbyBiZSBhZGRlZC4KKyAqLwordmFy
IGFkZFNoYWRlclNvdXJjZSA9IGZ1bmN0aW9uKGVsZW1lbnQsIGxhYmVsLCBzb3VyY2UsIG9wdF91
cmwpIHsKKyAgdmFyIGRpdiA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpOworICB2YXIg
cyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInByZSIpOworICBzLmNsYXNzTmFtZSA9ICJzaGFk
ZXItc291cmNlIjsKKyAgcy5zdHlsZS5kaXNwbGF5ID0gIm5vbmUiOworICB2YXIgb2wgPSBkb2N1
bWVudC5jcmVhdGVFbGVtZW50KCJvbCIpOworICAvL3MuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3Jl
YXRlVGV4dE5vZGUoc291cmNlKSk7CisgIHZhciBsaW5lcyA9IHNvdXJjZS5zcGxpdCgiXG4iKTsK
KyAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGxpbmVzLmxlbmd0aDsgKytpaSkgeworICAgIHZhciBs
aW5lID0gbGluZXNbaWldOworICAgIHZhciBsaSA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImxp
Iik7CisgICAgbGkuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUobGluZSkpOwor
ICAgIG9sLmFwcGVuZENoaWxkKGxpKTsKKyAgfQorICBzLmFwcGVuZENoaWxkKG9sKTsKKyAgdmFy
IGwgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7CisgIGwuaHJlZiA9ICJzaG93LXNoYWRl
ci1zb3VyY2UiOworICBsLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGxhYmVs
KSk7CisgIGwuYWRkRXZlbnRMaXN0ZW5lcignY2xpY2snLCBmdW5jdGlvbihldmVudCkgeworICAg
ICAgaWYgKGV2ZW50LnByZXZlbnREZWZhdWx0KSB7CisgICAgICAgIGV2ZW50LnByZXZlbnREZWZh
dWx0KCk7CisgICAgICB9CisgICAgICBzLnN0eWxlLmRpc3BsYXkgPSAocy5zdHlsZS5kaXNwbGF5
ID09ICdub25lJykgPyAnYmxvY2snIDogJ25vbmUnOworICAgICAgcmV0dXJuIGZhbHNlOworICAg
IH0sIGZhbHNlKTsKKyAgZGl2LmFwcGVuZENoaWxkKGwpOworICBpZiAob3B0X3VybCkgeworICAg
IHZhciB1ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiYSIpOworICAgIHUuaHJlZiA9IG9wdF91
cmw7CisgICAgZGl2LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIgIikpOwor
ICAgIHUuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoIigiICsgb3B0X3VybCAr
ICIpIikpOworICAgIGRpdi5hcHBlbmRDaGlsZCh1KTsKKyAgfQorICBkaXYuYXBwZW5kQ2hpbGQo
cyk7CisgIGVsZW1lbnQuYXBwZW5kQ2hpbGQoZGl2KTsKK307CisKKy8qKgorICogSW5zZXJ0cyBs
YWJlbHMgdGhhdCB3aGVuIGNsaWNrZWQgZXhwYW5kIHRvIHNob3cgdGhlIG9yaWdpbmFsIHNvdXJj
ZSBvZiB0aGUKKyAqIHNoYWRlciBhbmQgYWxzbyB0cmFuc2xhdGVkIHNvdXJjZSBvZiB0aGUgc2hh
ZGVyLCBpZiB0aGF0IGlzIGF2YWlsYWJsZS4KKyAqIEBwYXJhbSB7V2ViR0xSZW5kZXJpbmdDb250
ZXh0fSBnbCBUaGUgV2ViR0xSZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7IUhU
TUxFbGVtZW50fSBlbGVtZW50IGVsZW1lbnQgdG8gYXBwZW5kIGxhYmVsIHRvLgorICogQHBhcmFt
IHtzdHJpbmd9IGxhYmVsIGxhYmVsIGZvciBhbmNob3IuCisgKiBAcGFyYW0ge1dlYkdMU2hhZGVy
fSBzaGFkZXIgU2hhZGVyIHRvIHNob3cgdGhlIHNvdXJjZXMgZm9yLgorICogQHBhcmFtIHtzdHJp
bmd9IHNoYWRlclNvdXJjZSBPcmlnaW5hbCBzaGFkZXIgc291cmNlLgorICogQHBhcmFtIHtzdHJp
bmd9IG9wdF91cmwgVVJMIG9mIHNvdXJjZS4gSWYgcHJvdmlkZWQgYSBsaW5rIHRvIHRoZSBzb3Vy
Y2UgZmlsZQorICogICAgIHdpbGwgYWxzbyBiZSBhZGRlZC4KKyAqLwordmFyIGFkZFNoYWRlclNv
dXJjZXMgPSBmdW5jdGlvbigKKyAgICBnbCwgZWxlbWVudCwgbGFiZWwsIHNoYWRlciwgc2hhZGVy
U291cmNlLCBvcHRfdXJsKSB7CisgIGFkZFNoYWRlclNvdXJjZShlbGVtZW50LCBsYWJlbCwgc2hh
ZGVyU291cmNlLCBvcHRfdXJsKTsKKworICB2YXIgZGVidWdTaGFkZXJzID0gZ2wuZ2V0RXh0ZW5z
aW9uKCdXRUJHTF9kZWJ1Z19zaGFkZXJzJyk7CisgIGlmIChkZWJ1Z1NoYWRlcnMgJiYgc2hhZGVy
KSB7CisgICAgdmFyIHRyYW5zbGF0ZWRTb3VyY2UgPSBkZWJ1Z1NoYWRlcnMuZ2V0VHJhbnNsYXRl
ZFNoYWRlclNvdXJjZShzaGFkZXIpOworICAgIGlmICh0cmFuc2xhdGVkU291cmNlICE9ICcnKSB7
CisgICAgICBhZGRTaGFkZXJTb3VyY2UoZWxlbWVudCwgbGFiZWwgKyAnIHRyYW5zbGF0ZWQgZm9y
IGRyaXZlcicsIHRyYW5zbGF0ZWRTb3VyY2UpOworICAgIH0KKyAgfQorfTsKKworLyoqCisgKiBT
ZW5kcyBzaGFkZXIgaW5mb3JtYXRpb24gdG8gdGhlIHNlcnZlciB0byBiZSBkdW1wZWQgaW50byB0
ZXh0IGZpbGVzCisgKiB3aGVuIHRlc3RzIGFyZSBydW4gZnJvbSB3aXRoaW4gdGhlIHRlc3QtcnVu
bmVyIGhhcm5lc3MuCisgKiBAcGFyYW0ge1dlYkdMUmVuZGVyaW5nQ29udGV4dH0gZ2wgVGhlIFdl
YkdMUmVuZGVyaW5nQ29udGV4dCB0byB1c2UuCisgKiBAcGFyYW0ge3N0cmluZ30gdXJsIFVSTCBv
ZiBjdXJyZW50LgorICogQHBhcmFtIHtzdHJpbmd9IHBhc3NNc2cgVGVzdCBkZXNjcmlwdGlvbi4K
KyAqIEBwYXJhbSB7b2JqZWN0fSB2SW5mbyBPYmplY3QgY29udGFpbmluZyB2ZXJ0ZXggc2hhZGVy
IGluZm9ybWF0aW9uLgorICogQHBhcmFtIHtvYmplY3R9IGZJbmZvIE9iamVjdCBjb250YWluaW5n
IGZyYWdtZW50IHNoYWRlciBpbmZvcm1hdGlvbi4KKyAqLwordmFyIGR1bXBTaGFkZXJzSW5mbyA9
IGZ1bmN0aW9uKGdsLCB1cmwsIHBhc3NNc2csIHZJbmZvLCBmSW5mbykgeworICB2YXIgc2hhZGVy
SW5mbyA9IHt9OworICBzaGFkZXJJbmZvLnVybCA9IHVybDsKKyAgc2hhZGVySW5mby50ZXN0RGVz
Y3JpcHRpb24gPSBwYXNzTXNnOworICBzaGFkZXJJbmZvLnZMYWJlbCA9IHZJbmZvLmxhYmVsOwor
ICBzaGFkZXJJbmZvLnZTaG91bGRDb21waWxlID0gdkluZm8uc2hhZGVyU3VjY2VzczsKKyAgc2hh
ZGVySW5mby52U291cmNlID0gdkluZm8uc291cmNlOworICBzaGFkZXJJbmZvLmZMYWJlbCA9IGZJ
bmZvLmxhYmVsOworICBzaGFkZXJJbmZvLmZTaG91bGRDb21waWxlID0gZkluZm8uc2hhZGVyU3Vj
Y2VzczsKKyAgc2hhZGVySW5mby5mU291cmNlID0gZkluZm8uc291cmNlOworICBzaGFkZXJJbmZv
LnZUcmFuc2xhdGVkU291cmNlID0gbnVsbDsKKyAgc2hhZGVySW5mby5mVHJhbnNsYXRlZFNvdXJj
ZSA9IG51bGw7CisgIHZhciBkZWJ1Z1NoYWRlcnMgPSBnbC5nZXRFeHRlbnNpb24oJ1dFQkdMX2Rl
YnVnX3NoYWRlcnMnKTsKKyAgaWYgKGRlYnVnU2hhZGVycykgeworICAgIGlmICh2SW5mby5zaGFk
ZXIpCisgICAgICBzaGFkZXJJbmZvLnZUcmFuc2xhdGVkU291cmNlID0gZGVidWdTaGFkZXJzLmdl
dFRyYW5zbGF0ZWRTaGFkZXJTb3VyY2UodkluZm8uc2hhZGVyKTsKKyAgICBpZiAoZkluZm8uc2hh
ZGVyKQorICAgICAgc2hhZGVySW5mby5mVHJhbnNsYXRlZFNvdXJjZSA9IGRlYnVnU2hhZGVycy5n
ZXRUcmFuc2xhdGVkU2hhZGVyU291cmNlKGZJbmZvLnNoYWRlcik7CisgIH0KKworICB2YXIgZHVt
cFNoYWRlckluZm9SZXF1ZXN0ID0gbmV3IFhNTEh0dHBSZXF1ZXN0KCk7CisgIGR1bXBTaGFkZXJJ
bmZvUmVxdWVzdC5vcGVuKCdQT1NUJywgIi9kdW1wU2hhZGVySW5mbyIsIHRydWUpOworICBkdW1w
U2hhZGVySW5mb1JlcXVlc3Quc2V0UmVxdWVzdEhlYWRlcigiQ29udGVudC1UeXBlIiwgInRleHQv
cGxhaW4iKTsKKyAgZHVtcFNoYWRlckluZm9SZXF1ZXN0LnNlbmQoSlNPTi5zdHJpbmdpZnkoc2hh
ZGVySW5mbykpOworfTsKKworLy8gQWRkIHlvdXIgcHJlZml4IGhlcmUuCit2YXIgYnJvd3NlclBy
ZWZpeGVzID0gWworICAiIiwKKyAgIk1PWl8iLAorICAiT1BfIiwKKyAgIldFQktJVF8iCitdOwor
CisvKioKKyAqIEdpdmVuIGFuIGV4dGVuc2lvbiBuYW1lIGxpa2UgV0VCR0xfY29tcHJlc3NlZF90
ZXh0dXJlX3MzdGMKKyAqIHJldHVybnMgdGhlIG5hbWUgb2YgdGhlIHN1cHBvcnRlZCB2ZXJzaW9u
IGV4dGVuc2lvbiwgbGlrZQorICogV0VCS0lUX1dFQkdMX2NvbXByZXNzZWRfdGV0dXJlX3MzdGMK
KyAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWUgb2YgZXh0ZW5zaW9uIHRvIGxvb2sgZm9yLgor
ICogQHJldHVybiB7c3RyaW5nfSBuYW1lIG9mIGV4dGVuc2lvbiBmb3VuZCBvciB1bmRlZmluZWQg
aWYgbm90CisgKiAgICAgZm91bmQuCisgKi8KK3ZhciBnZXRTdXBwb3J0ZWRFeHRlbnNpb25XaXRo
S25vd25QcmVmaXhlcyA9IGZ1bmN0aW9uKGdsLCBuYW1lKSB7CisgIHZhciBzdXBwb3J0ZWQgPSBn
bC5nZXRTdXBwb3J0ZWRFeHRlbnNpb25zKCk7CisgIGZvciAodmFyIGlpID0gMDsgaWkgPCBicm93
c2VyUHJlZml4ZXMubGVuZ3RoOyArK2lpKSB7CisgICAgdmFyIHByZWZpeGVkTmFtZSA9IGJyb3dz
ZXJQcmVmaXhlc1tpaV0gKyBuYW1lOworICAgIGlmIChzdXBwb3J0ZWQuaW5kZXhPZihwcmVmaXhl
ZE5hbWUpID49IDApIHsKKyAgICAgIHJldHVybiBwcmVmaXhlZE5hbWU7CisgICAgfQorICB9Cit9
OworCisvKioKKyAqIEBwYXJhbSB7V2ViR0xSZW5kZXJpbmdDb250ZXh0fSBnbCBUaGUgV2ViR0xS
ZW5kZXJpbmdDb250ZXh0IHRvIHVzZS4KKyAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWUgb2Yg
ZXh0ZW5zaW9uIHRvIGxvb2sgZm9yLgorICogQHBhcmFtIHtib29sZWFufSBleHRlbnNpb25FbmFi
bGVkIFRydWUgaWYgdGhlIGV4dGVuc2lvbiB3YXMgZW5hYmxlZCBzdWNjZXNzZnVsbHkgdmlhIGds
LmdldEV4dGVuc2lvbigpLgorICovCit2YXIgcnVuRXh0ZW5zaW9uU3VwcG9ydGVkVGVzdCA9IGZ1
bmN0aW9uKGdsLCBuYW1lLCBleHRlbnNpb25FbmFibGVkKSB7CisgIHZhciBwcmVmaXhlZE5hbWUg
PSBnZXRTdXBwb3J0ZWRFeHRlbnNpb25XaXRoS25vd25QcmVmaXhlcyhnbCwgbmFtZSk7CisgIGlm
IChwcmVmaXhlZE5hbWUgIT09IHVuZGVmaW5lZCkgeworICAgICAgaWYgKGV4dGVuc2lvbkVuYWJs
ZWQpIHsKKyAgICAgICAgICB0ZXN0UGFzc2VkKG5hbWUgKyAiIGxpc3RlZCBhcyBzdXBwb3J0ZWQg
YW5kIGdldEV4dGVuc2lvbiBzdWNjZWVkZWQiKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAgICAg
dGVzdEZhaWxlZChuYW1lICsgIiBsaXN0ZWQgYXMgc3VwcG9ydGVkIGJ1dCBnZXRFeHRlbnNpb24g
ZmFpbGVkIik7CisgICAgICB9CisgIH0gZWxzZSB7CisgICAgICBpZiAoZXh0ZW5zaW9uRW5hYmxl
ZCkgeworICAgICAgICAgIHRlc3RGYWlsZWQobmFtZSArICIgbm90IGxpc3RlZCBhcyBzdXBwb3J0
ZWQgYnV0IGdldEV4dGVuc2lvbiBzdWNjZWVkZWQiKTsKKyAgICAgIH0gZWxzZSB7CisgICAgICAg
ICAgdGVzdFBhc3NlZChuYW1lICsgIiBub3QgbGlzdGVkIGFzIHN1cHBvcnRlZCBhbmQgZ2V0RXh0
ZW5zaW9uIGZhaWxlZCAtLSB0aGlzIGlzIGxlZ2FsIik7CisgICAgICB9CisgIH0KK30KKworLyoq
CisgKiBHaXZlbiBhbiBleHRlbnNpb24gbmFtZSBsaWtlIFdFQkdMX2NvbXByZXNzZWRfdGV4dHVy
ZV9zM3RjCisgKiByZXR1cm5zIHRoZSBzdXBwb3J0ZWQgdmVyc2lvbiBleHRlbnNpb24sIGxpa2UK
KyAqIFdFQktJVF9XRUJHTF9jb21wcmVzc2VkX3RldHVyZV9zM3RjCisgKiBAcGFyYW0ge3N0cmlu
Z30gbmFtZSBOYW1lIG9mIGV4dGVuc2lvbiB0byBsb29rIGZvci4KKyAqIEByZXR1cm4ge1dlYkdM
RXh0ZW5zaW9ufSBUaGUgZXh0ZW5zaW9uIG9yIHVuZGVmaW5lZCBpZiBub3QKKyAqICAgICBmb3Vu
ZC4KKyAqLwordmFyIGdldEV4dGVuc2lvbldpdGhLbm93blByZWZpeGVzID0gZnVuY3Rpb24oZ2ws
IG5hbWUpIHsKKyAgZm9yICh2YXIgaWkgPSAwOyBpaSA8IGJyb3dzZXJQcmVmaXhlcy5sZW5ndGg7
ICsraWkpIHsKKyAgICB2YXIgcHJlZml4ZWROYW1lID0gYnJvd3NlclByZWZpeGVzW2lpXSArIG5h
bWU7CisgICAgdmFyIGV4dCA9IGdsLmdldEV4dGVuc2lvbihwcmVmaXhlZE5hbWUpOworICAgIGlm
IChleHQpIHsKKyAgICAgIHJldHVybiBleHQ7CisgICAgfQorICB9Cit9OworCisvKioKKyAqIFJl
dHVybnMgcG9zc2libGUgcHJlZml4ZWQgdmVyc2lvbnMgb2YgYW4gZXh0ZW5zaW9uJ3MgbmFtZS4K
KyAqIEBwYXJhbSB7c3RyaW5nfSBuYW1lIE5hbWUgb2YgZXh0ZW5zaW9uLiBNYXkgYWxyZWFkeSBp
bmNsdWRlIGEgcHJlZml4LgorICogQHJldHVybiB7QXJyYXkuPHN0cmluZz59IFZhcmlhdGlvbnMg
b2YgdGhlIGV4dGVuc2lvbiBuYW1lIHdpdGgga25vd24KKyAqICAgICBicm93c2VyIHByZWZpeGVz
LgorICovCit2YXIgZ2V0RXh0ZW5zaW9uUHJlZml4ZWROYW1lcyA9IGZ1bmN0aW9uKG5hbWUpIHsK
KyAgdmFyIHVucHJlZml4ID0gZnVuY3Rpb24obmFtZSkgeworICAgIGZvciAodmFyIGlpID0gMDsg
aWkgPCBicm93c2VyUHJlZml4ZXMubGVuZ3RoOyArK2lpKSB7CisgICAgICBpZiAoYnJvd3NlclBy
ZWZpeGVzW2lpXS5sZW5ndGggPiAwICYmCisgICAgICAgICAgbmFtZS5zdWJzdHJpbmcoMCwgYnJv
d3NlclByZWZpeGVzW2lpXS5sZW5ndGgpLnRvTG93ZXJDYXNlKCkgPT09CisgICAgICAgICAgYnJv
d3NlclByZWZpeGVzW2lpXS50b0xvd2VyQ2FzZSgpKSB7CisgICAgICAgIHJldHVybiBuYW1lLnN1
YnN0cmluZyhicm93c2VyUHJlZml4ZXNbaWldLmxlbmd0aCk7CisgICAgICB9CisgICAgfQorICAg
IHJldHVybiBuYW1lOworICB9CisKKyAgdmFyIHVucHJlZml4ZWQgPSB1bnByZWZpeChuYW1lKTsK
KworICB2YXIgdmFyaWF0aW9ucyA9IFtdOworICBmb3IgKHZhciBpaSA9IDA7IGlpIDwgYnJvd3Nl
clByZWZpeGVzLmxlbmd0aDsgKytpaSkgeworICAgIHZhcmlhdGlvbnMucHVzaChicm93c2VyUHJl
Zml4ZXNbaWldICsgdW5wcmVmaXhlZCk7CisgIH0KKworICByZXR1cm4gdmFyaWF0aW9uczsKK307
CisKK3ZhciByZXBsYWNlUkUgPSAvXCRcKChcdyspXCkvZzsKKworLyoqCisgKiBSZXBsYWNlcyBz
dHJpbmdzIHdpdGggcHJvcGVydHkgdmFsdWVzLgorICogR2l2ZW4gYSBzdHJpbmcgbGlrZSAiaGVs
bG8gJChmaXJzdCkgJChsYXN0KSIgYW5kIGFuIG9iamVjdAorICogbGlrZSB7Zmlyc3Q6IkpvaG4i
LCBsYXN0OiJTbWl0aCJ9IHdpbGwgcmV0dXJuCisgKiAiaGVsbG8gSm9obiBTbWl0aCIuCisgKiBA
cGFyYW0ge3N0cmluZ30gc3RyIFN0cmluZyB0byBkbyByZXBsYWNlbWVudHMgaW4uCisgKiBAcGFy
YW0gey4uLn0gMSBvciBtb3JlIG9iamVjdHMgY29udGFpbmluZyBwcm9wZXJ0aWVzLgorICovCit2
YXIgcmVwbGFjZVBhcmFtcyA9IGZ1bmN0aW9uKHN0cikgeworICB2YXIgYXJncyA9IGFyZ3VtZW50
czsKKyAgcmV0dXJuIHN0ci5yZXBsYWNlKHJlcGxhY2VSRSwgZnVuY3Rpb24oc3RyLCBwMSwgb2Zm
c2V0LCBzKSB7CisgICAgZm9yICh2YXIgaWkgPSAxOyBpaSA8IGFyZ3MubGVuZ3RoOyArK2lpKSB7
CisgICAgICBpZiAoYXJnc1tpaV1bcDFdICE9PSB1bmRlZmluZWQpIHsKKyAgICAgICAgcmV0dXJu
IGFyZ3NbaWldW3AxXTsKKyAgICAgIH0KKyAgICB9CisgICAgdGhyb3cgInVua25vd24gc3RyaW5n
IHBhcmFtICciICsgcDEgKyAiJyI7CisgIH0pOworfTsKKwordmFyIHVwcGVyQ2FzZUZpcnN0TGV0
dGVyID0gZnVuY3Rpb24oc3RyKSB7CisgIHJldHVybiBzdHIuc3Vic3RyaW5nKDAsIDEpLnRvVXBw
ZXJDYXNlKCkgKyBzdHIuc3Vic3RyaW5nKDEpOworfTsKKworLyoqCisgKiBHZXRzIGEgcHJlZml4
ZWQgcHJvcGVydHkuIEZvciBleGFtcGxlLAorICoKKyAqICAgICB2YXIgZm4gPSBnZXRQcmVmaXhl
ZFByb3BlcnR5KAorICogICAgICAgIHdpbmRvdywKKyAqICAgICAgICAicmVxdWVzdEFuaW1hdGlv
bkZyYW1lIik7CisgKgorICogV2lsbCByZXR1cm4gZWl0aGVyOgorICogICAgIndpbmRvdy5yZXF1
ZXN0QW5pbWF0aW9uRnJhbWUiLAorICogICAgIndpbmRvdy5vUmVxdWVzdEFuaW1hdGlvbkZyYW1l
IiwKKyAqICAgICJ3aW5kb3cubXNSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLAorICogICAgIndpbmRv
dy5tb3pSZXF1ZXN0QW5pbWF0aW9uRnJhbWUiLAorICogICAgIndpbmRvdy53ZWJLaXRSZXF1ZXN0
QW5pbWF0aW9uRnJhbWUiLAorICogICAgdW5kZWZpbmVkCisgKgorICogdGhlIG5vbi1wcmVmaXhl
ZCBmdW5jdGlvbiBpcyB0cmllZCBmaXJzdC4KKyAqLwordmFyIHByb3BlcnR5UHJlZml4ZXMgPSBb
IiIsICJtb3oiLCAibXMiLCAibyIsICJ3ZWJraXQiXTsKK3ZhciBnZXRQcmVmaXhlZFByb3BlcnR5
ID0gZnVuY3Rpb24ob2JqLCBwcm9wZXJ0eU5hbWUpIHsKKyAgZm9yICh2YXIgaWkgPSAwOyBpaSA8
IHByb3BlcnR5UHJlZml4ZXMubGVuZ3RoOyArK2lpKSB7CisgICAgdmFyIHByZWZpeCA9IHByb3Bl
cnR5UHJlZml4ZXNbaWldOworICAgIHZhciBuYW1lID0gcHJlZml4ICsgcHJvcGVydHlOYW1lOwor
ICAgIGxvZyhuYW1lKTsKKyAgICB2YXIgcHJvcGVydHkgPSBvYmpbbmFtZV07CisgICAgaWYgKHBy
b3BlcnR5KSB7CisgICAgICByZXR1cm4gcHJvcGVydHk7CisgICAgfQorICAgIGlmIChpaSA9PSAw
KSB7CisgICAgICBwcm9wZXJ0eU5hbWUgPSB1cHBlckNhc2VGaXJzdExldHRlcihwcm9wZXJ0eU5h
bWUpOworICAgIH0KKyAgfQorICByZXR1cm4gdW5kZWZpbmVkOworfTsKKwordmFyIF9yZXF1ZXN0
QW5pbUZyYW1lOworCisvKioKKyAqIFByb3ZpZGVzIHJlcXVlc3RBbmltYXRpb25GcmFtZSBpbiBh
IGNyb3NzIGJyb3dzZXIgd2F5LgorICovCit2YXIgcmVxdWVzdEFuaW1GcmFtZSA9IGZ1bmN0aW9u
KGNhbGxiYWNrKSB7CisgIGlmICghX3JlcXVlc3RBbmltRnJhbWUpIHsKKyAgICBfcmVxdWVzdEFu
aW1GcmFtZSA9IGdldFByZWZpeGVkUHJvcGVydHkod2luZG93LCAicmVxdWVzdEFuaW1hdGlvbkZy
YW1lIikgfHwKKyAgICAgIGZ1bmN0aW9uKGNhbGxiYWNrLCBlbGVtZW50KSB7CisgICAgICAgIHJl
dHVybiB3aW5kb3cuc2V0VGltZW91dChjYWxsYmFjaywgMTAwMCAvIDcwKTsKKyAgICAgIH07Cisg
IH0KKyAgX3JlcXVlc3RBbmltRnJhbWUuY2FsbCh3aW5kb3csIGNhbGxiYWNrKTsKK307CisKKy8q
KgorICogUHJvdmlkZXMgdmlkZW8ucmVxdWVzdFZpZGVvRnJhbWVDYWxsYmFjayBpbiBhIGNyb3Nz
IGJyb3dzZXIgd2F5LgorICogUmV0dXJucyBhIHByb3BlcnR5LCBvciB1bmRlZmluZWQgaWYgdW5z
dXBvcnRlZC4KKyAqLwordmFyIGdldFJlcXVlc3RWaWRGcmFtZUNhbGxiYWNrID0gZnVuY3Rpb24o
KSB7CisgIHJldHVybiBIVE1MVmlkZW9FbGVtZW50LnByb3RvdHlwZVsicmVxdWVzdFZpZGVvRnJh
bWVDYWxsYmFjayJdOworfTsKKwordmFyIF9jYW5jZWxBbmltRnJhbWU7CisKKy8qKgorICogUHJv
dmlkZXMgY2FuY2VsQW5pbWF0aW9uRnJhbWUgaW4gYSBjcm9zcyBicm93c2VyIHdheS4KKyAqLwor
dmFyIGNhbmNlbEFuaW1GcmFtZSA9IGZ1bmN0aW9uKHJlcXVlc3QpIHsKKyAgaWYgKCFfY2FuY2Vs
QW5pbUZyYW1lKSB7CisgICAgX2NhbmNlbEFuaW1GcmFtZSA9IGdldFByZWZpeGVkUHJvcGVydHko
d2luZG93LCAiY2FuY2VsQW5pbWF0aW9uRnJhbWUiKSB8fAorICAgICAgd2luZG93LmNsZWFyVGlt
ZW91dDsKKyAgfQorICBfY2FuY2VsQW5pbUZyYW1lLmNhbGwod2luZG93LCByZXF1ZXN0KTsKK307
CisKKy8qKgorICogUHJvdmlkZXMgcmVxdWVzdEZ1bGxTY3JlZW4gaW4gYSBjcm9zcyBicm93c2Vy
IHdheS4KKyAqLwordmFyIHJlcXVlc3RGdWxsU2NyZWVuID0gZnVuY3Rpb24oZWxlbWVudCkgewor
ICB2YXIgZm4gPSBnZXRQcmVmaXhlZFByb3BlcnR5KGVsZW1lbnQsICJyZXF1ZXN0RnVsbFNjcmVl
biIpOworICBpZiAoZm4pIHsKKyAgICBmbi5jYWxsKGVsZW1lbnQpOworICB9Cit9OworCisvKioK
KyAqIFByb3ZpZGVzIGNhbmNlbEZ1bGxTY3JlZW4gaW4gYSBjcm9zcyBicm93c2VyIHdheS4KKyAq
LwordmFyIGNhbmNlbEZ1bGxTY3JlZW4gPSBmdW5jdGlvbigpIHsKKyAgdmFyIGZuID0gZ2V0UHJl
Zml4ZWRQcm9wZXJ0eShkb2N1bWVudCwgImNhbmNlbEZ1bGxTY3JlZW4iKTsKKyAgaWYgKGZuKSB7
CisgICAgZm4uY2FsbChkb2N1bWVudCk7CisgIH0KK307CisKK3ZhciBmdWxsU2NyZWVuU3RhdGVO
YW1lOworKGZ1bmN0aW9uKCkgeworICB2YXIgZnVsbFNjcmVlblN0YXRlTmFtZXMgPSBbCisgICAg
ImlzRnVsbFNjcmVlbiIsCisgICAgImZ1bGxTY3JlZW4iCisgIF07CisgIGZvciAodmFyIGlpID0g
MDsgaWkgPCBmdWxsU2NyZWVuU3RhdGVOYW1lcy5sZW5ndGg7ICsraWkpIHsKKyAgICB2YXIgcHJv
cGVydHlOYW1lID0gZnVsbFNjcmVlblN0YXRlTmFtZXNbaWldOworICAgIGZvciAodmFyIGpqID0g
MDsgamogPCBwcm9wZXJ0eVByZWZpeGVzLmxlbmd0aDsgKytqaikgeworICAgICAgdmFyIHByZWZp
eCA9IHByb3BlcnR5UHJlZml4ZXNbampdOworICAgICAgaWYgKHByZWZpeC5sZW5ndGgpIHsKKyAg
ICAgICAgcHJvcGVydHlOYW1lID0gdXBwZXJDYXNlRmlyc3RMZXR0ZXIocHJvcGVydHlOYW1lKTsK
KyAgICAgICAgZnVsbFNjcmVlblN0YXRlTmFtZSA9IHByZWZpeCArIHByb3BlcnR5TmFtZTsKKyAg
ICAgICAgaWYgKGRvY3VtZW50W2Z1bGxTY3JlZW5TdGF0ZU5hbWVdICE9PSB1bmRlZmluZWQpIHsK
KyAgICAgICAgICByZXR1cm47CisgICAgICAgIH0KKyAgICAgIH0KKyAgICB9CisgICAgZnVsbFNj
cmVlblN0YXRlTmFtZSA9IHVuZGVmaW5lZDsKKyAgfQorfSgpKTsKKworLyoqCisgKiBAcmV0dXJu
IHtib29sZWFufSBUcnVlIGlmIGZ1bGxzY3JlZW4gbW9kZSBpcyBhY3RpdmUuCisgKi8KK3ZhciBn
ZXRGdWxsU2NyZWVuU3RhdGUgPSBmdW5jdGlvbigpIHsKKyAgbG9nKCJmdWxsc2NyZWVuc3RhdGVu
YW1lOiIgKyBmdWxsU2NyZWVuU3RhdGVOYW1lKTsKKyAgbG9nKGRvY3VtZW50W2Z1bGxTY3JlZW5T
dGF0ZU5hbWVdKTsKKyAgcmV0dXJuIGRvY3VtZW50W2Z1bGxTY3JlZW5TdGF0ZU5hbWVdOworfTsK
KworLyoqCisgKiBAcGFyYW0geyFIVE1MRWxlbWVudH0gZWxlbWVudCBUaGUgZWxlbWVudCB0byBn
byBmdWxsc2NyZWVuLgorICogQHBhcmFtIHshZnVuY3Rpb24oYm9vbGVhbil9IGNhbGxiYWNrIEEg
ZnVuY3Rpb24gdGhhdCB3aWxsIGJlIGNhbGxlZAorICogICAgICAgIHdoZW4gZW50ZXJpbmcvZXhp
dGluZyBmdWxsc2NyZWVuLiBJdCBpcyBwYXNzZWQgdHJ1ZSBpZgorICogICAgICAgIGVudGVyaW5n
IGZ1bGxzY3JlZW4sIGZhbHNlIGlmIGV4aXRpbmcuCisgKi8KK3ZhciBvbkZ1bGxTY3JlZW5DaGFu
Z2UgPSBmdW5jdGlvbihlbGVtZW50LCBjYWxsYmFjaykgeworICBwcm9wZXJ0eVByZWZpeGVzLmZv
ckVhY2goZnVuY3Rpb24ocHJlZml4KSB7CisgICAgdmFyIGV2ZW50TmFtZSA9IHByZWZpeCArICJm
dWxsc2NyZWVuY2hhbmdlIjsKKyAgICBsb2coImFkZGV2ZW50OiAiICsgZXZlbnROYW1lKTsKKyAg
ICBkb2N1bWVudC5hZGRFdmVudExpc3RlbmVyKGV2ZW50TmFtZSwgZnVuY3Rpb24oZXZlbnQpIHsK
KyAgICAgIGxvZygiZXZlbnQ6ICIgKyBldmVudE5hbWUpOworICAgICAgY2FsbGJhY2soZ2V0RnVs
bFNjcmVlblN0YXRlKCkpOworICAgIH0pOworICB9KTsKK307CisKKy8qKgorICogQHBhcmFtIHsh
c3RyaW5nfSBidXR0b25JZCBUaGUgaWQgb2YgdGhlIGJ1dHRvbiB0aGF0IHdpbGwgdG9nZ2xlIGZ1
bGxzY3JlZW4KKyAqICAgICAgICBtb2RlLgorICogQHBhcmFtIHshc3RyaW5nfSBmdWxsc2NyZWVu
SWQgVGhlIGlkIG9mIHRoZSBlbGVtZW50IHRvIGdvIGZ1bGxzY3JlZW4uCisgKiBAcGFyYW0geyFm
dW5jdGlvbihib29sZWFuKX0gY2FsbGJhY2sgQSBmdW5jdGlvbiB0aGF0IHdpbGwgYmUgY2FsbGVk
CisgKiAgICAgICAgd2hlbiBlbnRlcmluZy9leGl0aW5nIGZ1bGxzY3JlZW4uIEl0IGlzIHBhc3Nl
ZCB0cnVlIGlmCisgKiAgICAgICAgZW50ZXJpbmcgZnVsbHNjcmVlbiwgZmFsc2UgaWYgZXhpdGlu
Zy4KKyAqIEByZXR1cm4ge2Jvb2xlYW59IFRydWUgaWYgZnVsbHNjcmVlbiBtb2RlIGlzIHN1cHBv
cnRlZC4KKyAqLwordmFyIHNldHVwRnVsbHNjcmVlbiA9IGZ1bmN0aW9uKGJ1dHRvbklkLCBmdWxs
c2NyZWVuSWQsIGNhbGxiYWNrKSB7CisgIGlmICghZnVsbFNjcmVlblN0YXRlTmFtZSkgeworICAg
IHJldHVybiBmYWxzZTsKKyAgfQorCisgIHZhciBmdWxsc2NyZWVuRWxlbWVudCA9IGRvY3VtZW50
LmdldEVsZW1lbnRCeUlkKGZ1bGxzY3JlZW5JZCk7CisgIG9uRnVsbFNjcmVlbkNoYW5nZShmdWxs
c2NyZWVuRWxlbWVudCwgY2FsbGJhY2spOworCisgIHZhciB0b2dnbGVGdWxsU2NyZWVuID0gZnVu
Y3Rpb24oZXZlbnQpIHsKKyAgICBpZiAoZ2V0RnVsbFNjcmVlblN0YXRlKCkpIHsKKyAgICAgIGNh
bmNlbEZ1bGxTY3JlZW4oZnVsbHNjcmVlbkVsZW1lbnQpOworICAgIH0gZWxzZSB7CisgICAgICBy
ZXF1ZXN0RnVsbFNjcmVlbihmdWxsc2NyZWVuRWxlbWVudCk7CisgICAgfQorICAgIGV2ZW50LnBy
ZXZlbnREZWZhdWx0KCk7CisgICAgcmV0dXJuIGZhbHNlOworICB9OworCisgIHZhciBidXR0b25F
bGVtZW50ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoYnV0dG9uSWQpOworICBidXR0b25FbGVt
ZW50LmFkZEV2ZW50TGlzdGVuZXIoJ2NsaWNrJywgdG9nZ2xlRnVsbFNjcmVlbik7CisKKyAgcmV0
dXJuIHRydWU7Cit9OworCisvKioKKyAqIFdhaXRzIGZvciB0aGUgYnJvd3NlciB0byBjb21wb3Np
dGUgdGhlIHdlYiBwYWdlLgorICogQHBhcmFtIHtmdW5jdGlvbigpfSBjYWxsYmFjayBBIGZ1bmN0
aW9uIHRvIGNhbGwgYWZ0ZXIgY29tcG9zaXRpbmcgaGFzIHRha2VuCisgKiAgICAgICAgcGxhY2Uu
CisgKi8KK3ZhciB3YWl0Rm9yQ29tcG9zaXRlID0gZnVuY3Rpb24oY2FsbGJhY2spIHsKKyAgdmFy
IGZyYW1lcyA9IDU7CisgIHZhciBjb3VudERvd24gPSBmdW5jdGlvbigpIHsKKyAgICBpZiAoZnJh
bWVzID09IDApIHsKKyAgICAgIC8vIFRPRE8oa2JyKTogdW5pZnkgd2l0aCBqcy10ZXN0LXByZS5q
cyBhbmQgZW5hYmxlIHRoZXNlIHdpdGgKKyAgICAgIC8vIHZlcmJvc2UgbG9nZ2luZy4KKyAgICAg
IC8vIGxvZygid2FpdEZvckNvbXBvc2l0ZTogY2FsbGJhY2siKTsKKyAgICAgIGNhbGxiYWNrKCk7
CisgICAgfSBlbHNlIHsKKyAgICAgIC8vIGxvZygid2FpdEZvckNvbXBvc2l0ZTogY291bnRkb3du
KCIgKyBmcmFtZXMgKyAiKSIpOworICAgICAgLS1mcmFtZXM7CisgICAgICByZXF1ZXN0QW5pbUZy
YW1lLmNhbGwod2luZG93LCBjb3VudERvd24pOworICAgIH0KKyAgfTsKKyAgY291bnREb3duKCk7
Cit9OworCit2YXIgc2V0WmVyb1RpbWVvdXQgPSAoZnVuY3Rpb24oKSB7CisgIC8vIFNlZSBodHRw
czovL2RiYXJvbi5vcmcvbG9nLzIwMTAwMzA5LWZhc3Rlci10aW1lb3V0cworCisgIHZhciB0aW1l
b3V0cyA9IFtdOworICB2YXIgbWVzc2FnZU5hbWUgPSAiemVyby10aW1lb3V0LW1lc3NhZ2UiOwor
CisgIC8vIExpa2Ugc2V0VGltZW91dCwgYnV0IG9ubHkgdGFrZXMgYSBmdW5jdGlvbiBhcmd1bWVu
dC4gIFRoZXJlJ3MKKyAgLy8gbm8gdGltZSBhcmd1bWVudCAoYWx3YXlzIHplcm8pIGFuZCBubyBh
cmd1bWVudHMgKHlvdSBoYXZlIHRvCisgIC8vIHVzZSBhIGNsb3N1cmUpLgorICBmdW5jdGlvbiBz
ZXRaZXJvVGltZW91dChmbikgeworICAgICAgdGltZW91dHMucHVzaChmbik7CisgICAgICB3aW5k
b3cucG9zdE1lc3NhZ2UobWVzc2FnZU5hbWUsICIqIik7CisgIH0KKworICBmdW5jdGlvbiBoYW5k
bGVNZXNzYWdlKGV2ZW50KSB7CisgICAgICBpZiAoZXZlbnQuc291cmNlID09IHdpbmRvdyAmJiBl
dmVudC5kYXRhID09IG1lc3NhZ2VOYW1lKSB7CisgICAgICAgICAgZXZlbnQuc3RvcFByb3BhZ2F0
aW9uKCk7CisgICAgICAgICAgaWYgKHRpbWVvdXRzLmxlbmd0aCA+IDApIHsKKyAgICAgICAgICAg
ICAgdmFyIGZuID0gdGltZW91dHMuc2hpZnQoKTsKKyAgICAgICAgICAgICAgZm4oKTsKKyAgICAg
ICAgICB9CisgICAgICB9CisgIH0KKworICB3aW5kb3cuYWRkRXZlbnRMaXN0ZW5lcigibWVzc2Fn
ZSIsIGhhbmRsZU1lc3NhZ2UsIHRydWUpOworCisgIHJldHVybiBzZXRaZXJvVGltZW91dDsKK30p
KCk7CisKK2Z1bmN0aW9uIGRpc3BhdGNoUHJvbWlzZShmbikgeworICByZXR1cm4gbmV3IFByb21p
c2UoKGZuX3Jlc29sdmUsIGZuX3JlamVjdCkgPT4geworICAgIHNldFplcm9UaW1lb3V0KCgpID0+
IHsKKyAgICAgIGZuX3Jlc29sdmUoZm4oKSk7CisgICAgfSk7CisgIH0pOworfQorCisvKioKKyAq
IFJ1bnMgYW4gYXJyYXkgb2YgZnVuY3Rpb25zLCB5aWVsZGluZyB0byB0aGUgYnJvd3NlciBiZXR3
ZWVuIGVhY2ggc3RlcC4KKyAqIElmIHlvdSB3YW50IHRvIGtub3cgd2hlbiBhbGwgdGhlIHN0ZXBz
IGFyZSBmaW5pc2hlZCBhZGQgYSBsYXN0IHN0ZXAuCisgKiBAcGFyYW0geyFBcnJheS48ZnVuY3Rp
b24oKTogdm9pZD59IHN0ZXBzIEFycmF5IG9mIGZ1bmN0aW9ucy4KKyAqLwordmFyIHJ1blN0ZXBz
ID0gZnVuY3Rpb24oc3RlcHMpIHsKKyAgaWYgKCFzdGVwcy5sZW5ndGgpIHsKKyAgICByZXR1cm47
CisgIH0KKworICAvLyBjb3B5IHN0ZXBzIHNvIHRoZXkgY2FuJ3QgYmUgbW9kaWZlZC4KKyAgdmFy
IHN0ZXBzVG9SdW4gPSBzdGVwcy5zbGljZSgpOworICB2YXIgY3VycmVudFN0ZXAgPSAwOworICB2
YXIgcnVuTmV4dFN0ZXAgPSBmdW5jdGlvbigpIHsKKyAgICBzdGVwc1RvUnVuW2N1cnJlbnRTdGVw
KytdKCk7CisgICAgaWYgKGN1cnJlbnRTdGVwIDwgc3RlcHNUb1J1bi5sZW5ndGgpIHsKKyAgICAg
IHNldFRpbWVvdXQocnVuTmV4dFN0ZXAsIDEpOworICAgIH0KKyAgfTsKKyAgcnVuTmV4dFN0ZXAo
KTsKK307CisKKy8qKgorICogU3RhcnRzIHBsYXlpbmcgYSB2aWRlbyBhbmQgd2FpdHMgZm9yIGl0
IHRvIGJlIGNvbnN1bWFibGUuCisgKiBAcGFyYW0geyFIVE1MVmlkZW9FbGVtZW50fSB2aWRlbyBB
biBIVE1MNSBWaWRlbyBlbGVtZW50LgorICogQHBhcmFtIHshZnVuY3Rpb24oIUhUTUxWaWRlb0Vs
ZW1lbnQpOiB2b2lkfSBjYWxsYmFjayBGdW5jdGlvbiB0byBjYWxsIHdoZW4KKyAqICAgICAgICB2
aWRlbyBpcyByZWFkeS4KKyAqLwordmFyIHN0YXJ0UGxheWluZ0FuZFdhaXRGb3JWaWRlbyA9IGZ1
bmN0aW9uKHZpZGVvLCBjYWxsYmFjaykgeworICB2YXIgcnZmYyA9IGdldFJlcXVlc3RWaWRGcmFt
ZUNhbGxiYWNrKCk7CisgIGlmIChydmZjID09PSB1bmRlZmluZWQpIHsKKyAgICB2YXIgdGltZVdh
dGNoZXIgPSBmdW5jdGlvbigpIHsKKyAgICAgIGlmICh2aWRlby5jdXJyZW50VGltZSA+IDApIHsK
KyAgICAgICAgY2FsbGJhY2sodmlkZW8pOworICAgICAgfSBlbHNlIHsKKyAgICAgICAgcmVxdWVz
dEFuaW1GcmFtZS5jYWxsKHdpbmRvdywgdGltZVdhdGNoZXIpOworICAgICAgfQorICAgIH07CisK
KyAgICB0aW1lV2F0Y2hlcigpOworICB9IGVsc2UgeworICAgIC8vIENhbGxzIHZpZGVvLnJlcXVl
c3RWaWRlb0ZyYW1lQ2FsbGJhY2soXyA9PiB7IGNhbGxiYWNrKHZpZGVvKSB9KQorICAgIHJ2ZmMu
Y2FsbCh2aWRlbywgXyA9PiB7IGNhbGxiYWNrKHZpZGVvKSB9KTsKKyAgfQorCisgIHZpZGVvLmxv
b3AgPSB0cnVlOworICB2aWRlby5tdXRlZCA9IHRydWU7CisgIC8vIFNlZSB3aGV0aGVyIHNldHRp
bmcgdGhlIHByZWxvYWQgZmxhZyBkZS1mbGFrZXMgdmlkZW8tcmVsYXRlZCB0ZXN0cy4KKyAgdmlk
ZW8ucHJlbG9hZCA9ICdhdXRvJzsKKyAgdmlkZW8ucGxheSgpOworfTsKKwordmFyIGdldEhvc3Qg
PSBmdW5jdGlvbih1cmwpIHsKKyAgdXJsID0gdXJsLnJlcGxhY2UoIlxcIiwgIi8iKTsKKyAgdmFy
IHBvcyA9IHVybC5pbmRleE9mKCI6Ly8iKTsKKyAgaWYgKHBvcyA+PSAwKSB7CisgICAgdXJsID0g
dXJsLnN1YnN0cihwb3MgKyAzKTsKKyAgfQorICB2YXIgcGFydHMgPSB1cmwuc3BsaXQoJy8nKTsK
KyAgcmV0dXJuIHBhcnRzWzBdOworfQorCisvLyBUaGlzIGZ1bmN0aW9uIHJldHVybnMgdGhlIGxh
c3QgMiB3b3JkcyBvZiB0aGUgZG9tYWluIG9mIGEgVVJMCisvLyBUaGlzIGlzIHByb2JhYmx5IG5v
dCB0aGUgY29ycmVjdCBjaGVjayBidXQgaXQgd2lsbCBkbyBmb3Igbm93LgordmFyIGdldEJhc2VE
b21haW4gPSBmdW5jdGlvbihob3N0KSB7CisgIHZhciBwYXJ0cyA9IGhvc3Quc3BsaXQoIjoiKTsK
KyAgdmFyIGhvc3RuYW1lID0gcGFydHNbMF07CisgIHZhciBwb3J0ID0gcGFydHNbMV0gfHwgIjgw
IjsKKyAgcGFydHMgPSBob3N0bmFtZS5zcGxpdCgiLiIpOworICBpZihwYXJ0cy5sZW5ndGggPCAy
KQorICAgIHJldHVybiBob3N0bmFtZSArICI6IiArIHBvcnQ7CisgIHZhciB0bGQgPSBwYXJ0c1tw
YXJ0cy5sZW5ndGgtMV07CisgIHZhciBkb21haW4gPSBwYXJ0c1twYXJ0cy5sZW5ndGgtMl07Cisg
IHJldHVybiBkb21haW4gKyAiLiIgKyB0bGQgKyAiOiIgKyBwb3J0OworfQorCit2YXIgcnVubmlu
Z09uTG9jYWxob3N0ID0gZnVuY3Rpb24oKSB7CisgIGxldCBob3N0bmFtZSA9IHdpbmRvdy5sb2Nh
dGlvbi5ob3N0bmFtZTsKKyAgcmV0dXJuIGhvc3RuYW1lID09ICJsb2NhbGhvc3QiIHx8CisgICAg
aG9zdG5hbWUgPT0gIjEyNy4wLjAuMSIgfHwKKyAgICBob3N0bmFtZSA9PSAiOjoxIjsKK30KKwor
dmFyIGdldExvY2FsQ3Jvc3NPcmlnaW4gPSBmdW5jdGlvbigpIHsKKyAgdmFyIGRvbWFpbjsKKyAg
aWYgKHdpbmRvdy5sb2NhdGlvbi5ob3N0LmluZGV4T2YoImxvY2FsaG9zdCIpICE9IC0xKSB7Cisg
ICAgLy8gVE9ETyhrYnIpOiBmaWd1cmUgb3V0IHdoZXRoZXIgdG8gdXNlIGFuIElQdjYgbG9vcGJh
Y2sgYWRkcmVzcy4KKyAgICBkb21haW4gPSAiMTI3LjAuMC4xIjsKKyAgfSBlbHNlIHsKKyAgICBk
b21haW4gPSAibG9jYWxob3N0IjsKKyAgfQorCisgIHZhciBwb3J0ID0gd2luZG93LmxvY2F0aW9u
LnBvcnQgfHwgIjgwIjsKKyAgcmV0dXJuIHdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbCArICIvLyIg
KyBkb21haW4gKyAiOiIgKyBwb3J0Cit9CisKK3ZhciBnZXRSZWxhdGl2ZVBhdGggPSBmdW5jdGlv
bihwYXRoKSB7CisgIHZhciByZWxwYXJ0cyA9IHdpbmRvdy5sb2NhdGlvbi5wYXRobmFtZS5zcGxp
dCgiLyIpOworICByZWxwYXJ0cy5wb3AoKTsgLy8gUG9wIG9mZiBmaWxlbmFtZQorICB2YXIgcGF0
aHBhcnRzID0gcGF0aC5zcGxpdCgiLyIpOworCisgIHZhciBpOworICBmb3IgKGkgPSAwOyBpIDwg
cGF0aHBhcnRzLmxlbmd0aDsgKytpKSB7CisgICAgc3dpdGNoIChwYXRocGFydHNbaV0pIHsKKyAg
ICAgIGNhc2UgIiI6IGJyZWFrOworICAgICAgY2FzZSAiLiI6IGJyZWFrOworICAgICAgY2FzZSAi
Li4iOgorICAgICAgICByZWxwYXJ0cy5wb3AoKTsKKyAgICAgICAgYnJlYWs7CisgICAgICBkZWZh
dWx0OgorICAgICAgICByZWxwYXJ0cy5wdXNoKHBhdGhwYXJ0c1tpXSk7CisgICAgICAgIGJyZWFr
OworICAgIH0KKyAgfQorCisgIHJldHVybiByZWxwYXJ0cy5qb2luKCIvIik7Cit9CisKK2FzeW5j
IGZ1bmN0aW9uIGxvYWRDcm9zc09yaWdpbkltYWdlKGltZywgd2ViVXJsLCBsb2NhbFVybCkgewor
ICBpZiAocnVubmluZ09uTG9jYWxob3N0KCkpIHsKKyAgICBpbWcuc3JjID0gZ2V0TG9jYWxDcm9z
c09yaWdpbigpICsgZ2V0UmVsYXRpdmVQYXRoKGxvY2FsVXJsKTsKKyAgICBjb25zb2xlLmxvZygn
W2xvYWRDcm9zc09yaWdpbkltYWdlXScsICcgIHRyeWluZycsIGltZy5zcmMpOworICAgIGF3YWl0
IGltZy5kZWNvZGUoKTsKKyAgICByZXR1cm47CisgIH0KKworICB0cnkgeworICAgIGltZy5zcmMg
PSBnZXRVcmxPcHRpb25zKCkuaW1nVXJsIHx8IHdlYlVybDsKKyAgICBjb25zb2xlLmxvZygnW2xv
YWRDcm9zc09yaWdpbkltYWdlXScsICd0cnlpbmcnLCBpbWcuc3JjKTsKKyAgICBhd2FpdCBpbWcu
ZGVjb2RlKCk7CisgICAgcmV0dXJuOworICB9IGNhdGNoIHt9CisKKyAgdGhyb3cgJ2NyZWF0ZUNy
b3NzT3JpZ2luSW1hZ2UgZmFpbGVkJzsKK30KKworLyoqCisgKiBDb252ZXJ0IHNSR0IgY29sb3Ig
dG8gbGluZWFyIGNvbG9yLgorICogQHBhcmFtIHshQXJyYXkuPG51bWJlcj59IGNvbG9yIFRoZSBj
b2xvciB0byBiZSBjb252ZXJ0ZWQuCisgKiAgICAgICAgVGhlIGFycmF5IGhhcyA0IGVsZW1lbnRz
LCBmb3IgZXhhbXBsZSBbUiwgRywgQiwgQV0uCisgKiAgICAgICAgd2hlcmUgZWFjaCBlbGVtZW50
IGlzIGluIHRoZSByYW5nZSAwIHRvIDI1NS4KKyAqIEByZXR1cm4geyFBcnJheS48bnVtYmVyPn0g
Y29sb3IgVGhlIGNvbG9yIHRvIGJlIGNvbnZlcnRlZC4KKyAqICAgICAgICBUaGUgYXJyYXkgaGFz
IDQgZWxlbWVudHMsIGZvciBleGFtcGxlIFtSLCBHLCBCLCBBXS4KKyAqICAgICAgICB3aGVyZSBl
YWNoIGVsZW1lbnQgaXMgaW4gdGhlIHJhbmdlIDAgdG8gMjU1LgorICovCit2YXIgc1JHQlRvTGlu
ZWFyID0gZnVuY3Rpb24oY29sb3IpIHsKKyAgICByZXR1cm4gW3NSR0JDaGFubmVsVG9MaW5lYXIo
Y29sb3JbMF0pLAorICAgICAgICAgICAgc1JHQkNoYW5uZWxUb0xpbmVhcihjb2xvclsxXSksCisg
ICAgICAgICAgICBzUkdCQ2hhbm5lbFRvTGluZWFyKGNvbG9yWzJdKSwKKyAgICAgICAgICAgIGNv
bG9yWzNdXQorfQorCisvKioKKyAqIENvbnZlcnQgbGluZWFyIGNvbG9yIHRvIHNSR0IgY29sb3Iu
CisgKiBAcGFyYW0geyFBcnJheS48bnVtYmVyPn0gY29sb3IgVGhlIGNvbG9yIHRvIGJlIGNvbnZl
cnRlZC4KKyAqICAgICAgICBUaGUgYXJyYXkgaGFzIDQgZWxlbWVudHMsIGZvciBleGFtcGxlIFtS
LCBHLCBCLCBBXS4KKyAqICAgICAgICB3aGVyZSBlYWNoIGVsZW1lbnQgaXMgaW4gdGhlIHJhbmdl
IDAgdG8gMjU1LgorICogQHJldHVybiB7IUFycmF5LjxudW1iZXI+fSBjb2xvciBUaGUgY29sb3Ig
dG8gYmUgY29udmVydGVkLgorICogICAgICAgIFRoZSBhcnJheSBoYXMgNCBlbGVtZW50cywgZm9y
IGV4YW1wbGUgW1IsIEcsIEIsIEFdLgorICogICAgICAgIHdoZXJlIGVhY2ggZWxlbWVudCBpcyBp
biB0aGUgcmFuZ2UgMCB0byAyNTUuCisgKi8KK3ZhciBsaW5lYXJUb1NSR0IgPSBmdW5jdGlvbihj
b2xvcikgeworICAgIHJldHVybiBbbGluZWFyQ2hhbm5lbFRvU1JHQihjb2xvclswXSksCisgICAg
ICAgICAgICBsaW5lYXJDaGFubmVsVG9TUkdCKGNvbG9yWzFdKSwKKyAgICAgICAgICAgIGxpbmVh
ckNoYW5uZWxUb1NSR0IoY29sb3JbMl0pLAorICAgICAgICAgICAgY29sb3JbM11dCit9CisKK2Z1
bmN0aW9uIHNSR0JDaGFubmVsVG9MaW5lYXIodmFsdWUpIHsKKyAgICB2YWx1ZSA9IHZhbHVlIC8g
MjU1OworICAgIGlmICh2YWx1ZSA8PSAwLjA0MDQ1KQorICAgICAgICB2YWx1ZSA9IHZhbHVlIC8g
MTIuOTI7CisgICAgZWxzZQorICAgICAgICB2YWx1ZSA9IE1hdGgucG93KCh2YWx1ZSArIDAuMDU1
KSAvIDEuMDU1LCAyLjQpOworICAgIHJldHVybiBNYXRoLnRydW5jKHZhbHVlICogMjU1ICsgMC41
KTsKK30KKworZnVuY3Rpb24gbGluZWFyQ2hhbm5lbFRvU1JHQih2YWx1ZSkgeworICAgIHZhbHVl
ID0gdmFsdWUgLyAyNTU7CisgICAgaWYgKHZhbHVlIDw9IDAuMCkgeworICAgICAgICB2YWx1ZSA9
IDAuMDsKKyAgICB9IGVsc2UgaWYgKHZhbHVlIDwgMC4wMDMxMzA4KSB7CisgICAgICAgIHZhbHVl
ID0gdmFsdWUgKiAxMi45MjsKKyAgICB9IGVsc2UgaWYgKHZhbHVlIDwgMSkgeworICAgICAgICB2
YWx1ZSA9IE1hdGgucG93KHZhbHVlLCAwLjQxNjY2KSAqIDEuMDU1IC0gMC4wNTU7CisgICAgfSBl
bHNlIHsKKyAgICAgICAgdmFsdWUgPSAxLjA7CisgICAgfQorICAgIHJldHVybiBNYXRoLnRydW5j
KHZhbHVlICogMjU1ICsgMC41KTsKK30KKworZnVuY3Rpb24gY29tcGFyZVBpeGVscyhjbXAsIHJl
ZiwgdG9sZXJhbmNlLCBkaWZmKSB7CisgICAgaWYgKGNtcC5sZW5ndGggIT0gcmVmLmxlbmd0aCkg
eworICAgICAgICB0ZXN0RmFpbGVkKCJpbnZhbGlkIHBpeGVsIHNpemUuIik7CisgICAgfQorCisg
ICAgdmFyIGNvdW50ID0gMDsKKyAgICBmb3IgKHZhciBpID0gMDsgaSA8IGNtcC5sZW5ndGg7IGkr
KykgeworICAgICAgICBpZiAoZGlmZikgeworICAgICAgICAgICAgZGlmZltpICogNF0gPSAwOwor
ICAgICAgICAgICAgZGlmZltpICogNCArIDFdID0gMjU1OworICAgICAgICAgICAgZGlmZltpICog
NCArIDJdID0gMDsKKyAgICAgICAgICAgIGRpZmZbaSAqIDQgKyAzXSA9IDI1NTsKKyAgICAgICAg
fQorICAgICAgICBpZiAoTWF0aC5hYnMoY21wW2kgKiA0XSAtIHJlZltpICogNF0pID4gdG9sZXJh
bmNlIHx8CisgICAgICAgICAgICBNYXRoLmFicyhjbXBbaSAqIDQgKyAxXSAtIHJlZltpICogNCAr
IDFdKSA+IHRvbGVyYW5jZSB8fAorICAgICAgICAgICAgTWF0aC5hYnMoY21wW2kgKiA0ICsgMl0g
LSByZWZbaSAqIDQgKyAyXSkgPiB0b2xlcmFuY2UgfHwKKyAgICAgICAgICAgIE1hdGguYWJzKGNt
cFtpICogNCArIDNdIC0gcmVmW2kgKiA0ICsgM10pID4gdG9sZXJhbmNlKSB7CisgICAgICAgICAg
ICBpZiAoY291bnQgPCAxMCkgeworICAgICAgICAgICAgICAgIHRlc3RGYWlsZWQoIlBpeGVsICIg
KyBpICsgIjogZXhwZWN0ZWQgKCIgKworICAgICAgICAgICAgICAgIFtyZWZbaSAqIDRdLCByZWZb
aSAqIDQgKyAxXSwgcmVmW2kgKiA0ICsgMl0sIHJlZltpICogNCArIDNdXSArICIpLCBnb3QgKCIg
KworICAgICAgICAgICAgICAgIFtjbXBbaSAqIDRdLCBjbXBbaSAqIDQgKyAxXSwgY21wW2kgKiA0
ICsgMl0sIGNtcFtpICogNCArIDNdXSArICIpIik7CisgICAgICAgICAgICB9CisgICAgICAgICAg
ICBjb3VudCsrOworICAgICAgICAgICAgaWYgKGRpZmYpIHsKKyAgICAgICAgICAgICAgICBkaWZm
W2kgKiA0XSA9IDI1NTsKKyAgICAgICAgICAgICAgICBkaWZmW2kgKiA0ICsgMV0gPSAwOworICAg
ICAgICAgICAgfQorICAgICAgICB9CisgICAgfQorCisgICAgcmV0dXJuIGNvdW50OworfQorCitm
dW5jdGlvbiBkZXN0cm95Q29udGV4dChnbCkgeworICBnbC5jYW52YXMud2lkdGggPSAxOworICBn
bC5jYW52YXMuaGVpZ2h0ID0gMTsKKyAgY29uc3QgZXh0ID0gZ2wuZ2V0RXh0ZW5zaW9uKCdXRUJH
TF9sb3NlX2NvbnRleHQnKTsKKyAgaWYgKGV4dCkgeworICAgIGV4dC5sb3NlQ29udGV4dCgpOwor
ICB9Cit9CisKK2Z1bmN0aW9uIGRlc3Ryb3lBbGxDb250ZXh0cygpIHsKKyAgaWYgKCF3aW5kb3cu
X3d0dV9jb250ZXh0cykKKyAgICByZXR1cm47CisgIGZvciAoY29uc3QgeCBvZiB3aW5kb3cuX3d0
dV9jb250ZXh0cykgeworICAgIGRlc3Ryb3lDb250ZXh0KHgpOworICB9CisgIHdpbmRvdy5fd3R1
X2NvbnRleHRzID0gW107Cit9CisKK2Z1bmN0aW9uIGRpc3BsYXlJbWFnZURpZmYoY21wLCByZWYs
IGRpZmYsIHdpZHRoLCBoZWlnaHQpIHsKKyAgICB2YXIgZGl2ID0gZG9jdW1lbnQuY3JlYXRlRWxl
bWVudCgiZGl2Iik7CisKKyAgICB2YXIgY21wSW1nID0gY3JlYXRlSW1hZ2VGcm9tUGl4ZWwoY21w
LCB3aWR0aCwgaGVpZ2h0KTsKKyAgICB2YXIgcmVmSW1nID0gY3JlYXRlSW1hZ2VGcm9tUGl4ZWwo
cmVmLCB3aWR0aCwgaGVpZ2h0KTsKKyAgICB2YXIgZGlmZkltZyA9IGNyZWF0ZUltYWdlRnJvbVBp
eGVsKGRpZmYsIHdpZHRoLCBoZWlnaHQpOworICAgIHd0dS5pbnNlcnRJbWFnZShkaXYsICJSZWZl
cmVuY2UiLCByZWZJbWcpOworICAgIHd0dS5pbnNlcnRJbWFnZShkaXYsICJSZXN1bHQiLCBjbXBJ
bWcpOworICAgIHd0dS5pbnNlcnRJbWFnZShkaXYsICJEaWZmZXJlbmNlIiwgZGlmZkltZyk7CisK
KyAgICB2YXIgY29uc29sZSA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjb25zb2xlIik7Cisg
ICAgY29uc29sZS5hcHBlbmRDaGlsZChkaXYpOworfQorCitmdW5jdGlvbiBjcmVhdGVJbWFnZUZy
b21QaXhlbChidWYsIHdpZHRoLCBoZWlnaHQpIHsKKyAgICB2YXIgY2FudmFzID0gZG9jdW1lbnQu
Y3JlYXRlRWxlbWVudCgiY2FudmFzIik7CisgICAgY2FudmFzLndpZHRoID0gd2lkdGg7CisgICAg
Y2FudmFzLmhlaWdodCA9IGhlaWdodDsKKyAgICB2YXIgY3R4ID0gY2FudmFzLmdldENvbnRleHQo
IjJkIik7CisgICAgdmFyIGltZ0RhdGEgPSBjdHguZ2V0SW1hZ2VEYXRhKDAsIDAsIHdpZHRoLCBo
ZWlnaHQpOworCisgICAgZm9yICh2YXIgaSA9IDA7IGkgPCBidWYubGVuZ3RoOyBpKyspCisgICAg
ICAgIGltZ0RhdGEuZGF0YVtpXSA9IGJ1ZltpXTsKKyAgICBjdHgucHV0SW1hZ2VEYXRhKGltZ0Rh
dGEsIDAsIDApOworICAgIHZhciBpbWcgPSB3dHUubWFrZUltYWdlRnJvbUNhbnZhcyhjYW52YXMp
OworICAgIHJldHVybiBpbWc7Cit9CisKK2FzeW5jIGZ1bmN0aW9uIGF3YWl0VGltZW91dChtcykg
eworICBhd2FpdCBuZXcgUHJvbWlzZShyZXMgPT4geworICAgIHNldFRpbWVvdXQoKCkgPT4gewor
ICAgICAgcmVzKCk7CisgICAgfSwgbXMpOworICB9KTsKK30KKworYXN5bmMgZnVuY3Rpb24gYXdh
aXRPclRpbWVvdXQocHJvbWlzZSwgb3B0X3RpbWVvdXRfbXMpIHsKKyAgYXN5bmMgZnVuY3Rpb24g
dGhyb3dPblRpbWVvdXQobXMpIHsKKyAgICBhd2FpdCBhd2FpdFRpbWVvdXQobXMpOworICAgIHRo
cm93ICd0aW1lb3V0JzsKKyAgfQorCisgIGxldCB0aW1lb3V0X21zID0gb3B0X3RpbWVvdXRfbXM7
CisgIGlmICh0aW1lb3V0X21zID09PSB1bmRlZmluZWQpCisgICAgdGltZW91dF9tcyA9IDUwMDA7
CisKKyAgYXdhaXQgUHJvbWlzZS5yYWNlKFtwcm9taXNlLCB0aHJvd09uVGltZW91dCh0aW1lb3V0
X21zKV0pOworfQorCit2YXIgQVBJID0geworICBhZGRTaGFkZXJTb3VyY2U6IGFkZFNoYWRlclNv
dXJjZSwKKyAgYWRkU2hhZGVyU291cmNlczogYWRkU2hhZGVyU291cmNlcywKKyAgY2FuY2VsQW5p
bUZyYW1lOiBjYW5jZWxBbmltRnJhbWUsCisgIGNyZWF0ZTNEQ29udGV4dDogY3JlYXRlM0RDb250
ZXh0LAorICBHTEVycm9yRXhjZXB0aW9uOiBHTEVycm9yRXhjZXB0aW9uLAorICBjcmVhdGUzRENv
bnRleHRXaXRoV3JhcHBlclRoYXRUaHJvd3NPbkdMRXJyb3I6IGNyZWF0ZTNEQ29udGV4dFdpdGhX
cmFwcGVyVGhhdFRocm93c09uR0xFcnJvciwKKyAgY2hlY2tBcmVhSW5BbmRPdXQ6IGNoZWNrQXJl
YUluQW5kT3V0LAorICBjaGVja0NhbnZhczogY2hlY2tDYW52YXMsCisgIGNoZWNrQ2FudmFzUmVj
dDogY2hlY2tDYW52YXNSZWN0LAorICBjaGVja0NhbnZhc1JlY3RDb2xvcjogY2hlY2tDYW52YXNS
ZWN0Q29sb3IsCisgIGNoZWNrQ2FudmFzUmVjdHM6IGNoZWNrQ2FudmFzUmVjdHMsCisgIGNoZWNr
RmxvYXRCdWZmZXI6IGNoZWNrRmxvYXRCdWZmZXIsCisgIGNoZWNrVGV4dHVyZVNpemU6IGNoZWNr
VGV4dHVyZVNpemUsCisgIGNsaXBUb1JhbmdlOiBjbGlwVG9SYW5nZSwKKyAgY3JlYXRlQ29sb3Jl
ZFRleHR1cmU6IGNyZWF0ZUNvbG9yZWRUZXh0dXJlLAorICBjcmVhdGVQcm9ncmFtOiBjcmVhdGVQ
cm9ncmFtLAorICBjbGVhckFuZERyYXdVbml0UXVhZDogY2xlYXJBbmREcmF3VW5pdFF1YWQsCisg
IGNsZWFyQW5kRHJhd0luZGV4ZWRRdWFkOiBjbGVhckFuZERyYXdJbmRleGVkUXVhZCwKKyAgY29t
cGFyZVBpeGVsczogY29tcGFyZVBpeGVscywKKyAgZGVzdHJveUFsbENvbnRleHRzOiBkZXN0cm95
QWxsQ29udGV4dHMsCisgIGRlc3Ryb3lDb250ZXh0OiBkZXN0cm95Q29udGV4dCwKKyAgZGlzcGF0
Y2hQcm9taXNlOiBkaXNwYXRjaFByb21pc2UsCisgIGRpc3BsYXlJbWFnZURpZmY6IGRpc3BsYXlJ
bWFnZURpZmYsCisgIGRyYXdVbml0UXVhZDogZHJhd1VuaXRRdWFkLAorICBkcmF3SW5kZXhlZFF1
YWQ6IGRyYXdJbmRleGVkUXVhZCwKKyAgZHJhd1VCeXRlQ29sb3JRdWFkOiBkcmF3VUJ5dGVDb2xv
clF1YWQsCisgIGRyYXdGbG9hdENvbG9yUXVhZDogZHJhd0Zsb2F0Q29sb3JRdWFkLAorICBkdW1t
eVNldFByb2dyYW1BbmREcmF3Tm90aGluZzogZHVtbXlTZXRQcm9ncmFtQW5kRHJhd05vdGhpbmcs
CisgIGR1bXBTaGFkZXJzSW5mbzogZHVtcFNoYWRlcnNJbmZvLAorICBlbmRzV2l0aDogZW5kc1dp
dGgsCisgIGZhaWxJZkdMRXJyb3I6IGZhaWxJZkdMRXJyb3IsCisgIGZpbGxUZXh0dXJlOiBmaWxs
VGV4dHVyZSwKKyAgZnJhbWVidWZmZXJTdGF0dXNTaG91bGRCZTogZnJhbWVidWZmZXJTdGF0dXNT
aG91bGRCZSwKKyAgZ2V0Qnl0ZXNQZXJDb21wb25lbnQ6IGdldEJ5dGVzUGVyQ29tcG9uZW50LAor
ICBnZXREZWZhdWx0M0RDb250ZXh0VmVyc2lvbjogZ2V0RGVmYXVsdDNEQ29udGV4dFZlcnNpb24s
CisgIGdldEV4dGVuc2lvblByZWZpeGVkTmFtZXM6IGdldEV4dGVuc2lvblByZWZpeGVkTmFtZXMs
CisgIGdldEV4dGVuc2lvbldpdGhLbm93blByZWZpeGVzOiBnZXRFeHRlbnNpb25XaXRoS25vd25Q
cmVmaXhlcywKKyAgZ2V0RmlsZUxpc3RBc3luYzogZ2V0RmlsZUxpc3RBc3luYywKKyAgZ2V0TGFz
dEVycm9yOiBnZXRMYXN0RXJyb3IsCisgIGdldFByZWZpeGVkUHJvcGVydHk6IGdldFByZWZpeGVk
UHJvcGVydHksCisgIGdldFNjcmlwdDogZ2V0U2NyaXB0LAorICBnZXRTdXBwb3J0ZWRFeHRlbnNp
b25XaXRoS25vd25QcmVmaXhlczogZ2V0U3VwcG9ydGVkRXh0ZW5zaW9uV2l0aEtub3duUHJlZml4
ZXMsCisgIGdldFR5cGVkQXJyYXlFbGVtZW50c1BlclBpeGVsOiBnZXRUeXBlZEFycmF5RWxlbWVu
dHNQZXJQaXhlbCwKKyAgZ2V0VXJsQXJndW1lbnRzOiBnZXRVcmxBcmd1bWVudHMsCisgIGdldFVy
bE9wdGlvbnM6IGdldFVybE9wdGlvbnMsCisgIGdldEF0dHJpYk1hcDogZ2V0QXR0cmliTWFwLAor
ICBnZXRVbmlmb3JtTWFwOiBnZXRVbmlmb3JtTWFwLAorICBnbEVudW1Ub1N0cmluZzogZ2xFbnVt
VG9TdHJpbmcsCisgIGdsRXJyb3JTaG91bGRCZTogZ2xFcnJvclNob3VsZEJlLAorICBnbFR5cGVU
b1R5cGVkQXJyYXlUeXBlOiBnbFR5cGVUb1R5cGVkQXJyYXlUeXBlLAorICBoYXNBdHRyaWJ1dGVD
YXNlSW5zZW5zaXRpdmU6IGhhc0F0dHJpYnV0ZUNhc2VJbnNlbnNpdGl2ZSwKKyAgaW5zZXJ0SW1h
Z2U6IGluc2VydEltYWdlLAorICBpc1dlYkdMMjogaXNXZWJHTDIsCisgIGxpbmtQcm9ncmFtOiBs
aW5rUHJvZ3JhbSwKKyAgbG9hZENyb3NzT3JpZ2luSW1hZ2U6IGxvYWRDcm9zc09yaWdpbkltYWdl
LAorICBsb2FkSW1hZ2VBc3luYzogbG9hZEltYWdlQXN5bmMsCisgIGxvYWRJbWFnZXNBc3luYzog
bG9hZEltYWdlc0FzeW5jLAorICBsb2FkUHJvZ3JhbTogbG9hZFByb2dyYW0sCisgIGxvYWRQcm9n
cmFtRnJvbUZpbGU6IGxvYWRQcm9ncmFtRnJvbUZpbGUsCisgIGxvYWRQcm9ncmFtRnJvbVNjcmlw
dDogbG9hZFByb2dyYW1Gcm9tU2NyaXB0LAorICBsb2FkUHJvZ3JhbUZyb21TY3JpcHRFeHBlY3RF
cnJvcjogbG9hZFByb2dyYW1Gcm9tU2NyaXB0RXhwZWN0RXJyb3IsCisgIGxvYWRTaGFkZXI6IGxv
YWRTaGFkZXIsCisgIGxvYWRTaGFkZXJGcm9tRmlsZTogbG9hZFNoYWRlckZyb21GaWxlLAorICBs
b2FkU2hhZGVyRnJvbVNjcmlwdDogbG9hZFNoYWRlckZyb21TY3JpcHQsCisgIGxvYWRTdGFuZGFy
ZFByb2dyYW06IGxvYWRTdGFuZGFyZFByb2dyYW0sCisgIGxvYWRTdGFuZGFyZFByb2dyYW1Bc3lu
YzogbG9hZFN0YW5kYXJkUHJvZ3JhbUFzeW5jLAorICBsb2FkU3RhbmRhcmRWZXJ0ZXhTaGFkZXI6
IGxvYWRTdGFuZGFyZFZlcnRleFNoYWRlciwKKyAgbG9hZFN0YW5kYXJkVmVydGV4U2hhZGVyQXN5
bmM6IGxvYWRTdGFuZGFyZFZlcnRleFNoYWRlckFzeW5jLAorICBsb2FkU3RhbmRhcmRGcmFnbWVu
dFNoYWRlcjogbG9hZFN0YW5kYXJkRnJhZ21lbnRTaGFkZXIsCisgIGxvYWRTdGFuZGFyZEZyYWdt
ZW50U2hhZGVyQXN5bmM6IGxvYWRTdGFuZGFyZEZyYWdtZW50U2hhZGVyQXN5bmMsCisgIGxvYWRV
bmlmb3JtQmxvY2tQcm9ncmFtOiBsb2FkVW5pZm9ybUJsb2NrUHJvZ3JhbSwKKyAgbG9hZFVuaWZv
cm1CbG9ja1ZlcnRleFNoYWRlcjogbG9hZFVuaWZvcm1CbG9ja1ZlcnRleFNoYWRlciwKKyAgbG9h
ZFVuaWZvcm1CbG9ja0ZyYWdtZW50U2hhZGVyOiBsb2FkVW5pZm9ybUJsb2NrRnJhZ21lbnRTaGFk
ZXIsCisgIGxvYWRUZXh0RmlsZUFzeW5jOiBsb2FkVGV4dEZpbGVBc3luYywKKyAgbG9hZFRleHR1
cmU6IGxvYWRUZXh0dXJlLAorICBsb2c6IGxvZywKKyAgbG9nZ2luZ09mZjogbG9nZ2luZ09mZiwK
KyAgbWFrZUNoZWNrUmVjdDogbWFrZUNoZWNrUmVjdCwKKyAgbWFrZUltYWdlOiBtYWtlSW1hZ2Us
CisgIG1ha2VJbWFnZUZyb21DYW52YXM6IG1ha2VJbWFnZUZyb21DYW52YXMsCisgIG1ha2VWaWRl
bzogbWFrZVZpZGVvLAorICBlcnJvcjogZXJyb3IsCisgIHJ1bkV4dGVuc2lvblN1cHBvcnRlZFRl
c3Q6IHJ1bkV4dGVuc2lvblN1cHBvcnRlZFRlc3QsCisgIHNoYWxsb3dDb3B5T2JqZWN0OiBzaGFs
bG93Q29weU9iamVjdCwKKyAgc2V0RGVmYXVsdDNEQ29udGV4dFZlcnNpb246IHNldERlZmF1bHQz
RENvbnRleHRWZXJzaW9uLAorICBzZXR1cENvbG9yUXVhZDogc2V0dXBDb2xvclF1YWQsCisgIHNl
dHVwUHJvZ3JhbTogc2V0dXBQcm9ncmFtLAorICBzZXR1cFRyYW5zZm9ybUZlZWRiYWNrUHJvZ3Jh
bTogc2V0dXBUcmFuc2Zvcm1GZWVkYmFja1Byb2dyYW0sCisgIHNldHVwUXVhZDogc2V0dXBRdWFk
LAorICBzZXR1cFF1YWRXaXRoVGV4Q29vcmRzOiBzZXR1cFF1YWRXaXRoVGV4Q29vcmRzLAorICBz
ZXR1cEluZGV4ZWRRdWFkOiBzZXR1cEluZGV4ZWRRdWFkLAorICBzZXR1cEluZGV4ZWRRdWFkV2l0
aE9wdGlvbnM6IHNldHVwSW5kZXhlZFF1YWRXaXRoT3B0aW9ucywKKyAgc2V0dXBTaW1wbGVDb2xv
clByb2dyYW06IHNldHVwU2ltcGxlQ29sb3JQcm9ncmFtLAorICBzZXR1cFNpbXBsZVRleHR1cmVQ
cm9ncmFtOiBzZXR1cFNpbXBsZVRleHR1cmVQcm9ncmFtLAorICBzZXR1cFNpbXBsZVRleHR1cmVQ
cm9ncmFtRVNTTDMwMDogc2V0dXBTaW1wbGVUZXh0dXJlUHJvZ3JhbUVTU0wzMDAsCisgIHNldHVw
U2ltcGxlQ3ViZU1hcFRleHR1cmVQcm9ncmFtOiBzZXR1cFNpbXBsZUN1YmVNYXBUZXh0dXJlUHJv
Z3JhbSwKKyAgc2V0dXBTaW1wbGVWZXJ0ZXhDb2xvclByb2dyYW06IHNldHVwU2ltcGxlVmVydGV4
Q29sb3JQcm9ncmFtLAorICBzZXR1cE5vVGV4Q29vcmRUZXh0dXJlUHJvZ3JhbTogc2V0dXBOb1Rl
eENvb3JkVGV4dHVyZVByb2dyYW0sCisgIHNldHVwVGV4dHVyZWRRdWFkOiBzZXR1cFRleHR1cmVk
UXVhZCwKKyAgc2V0dXBUZXh0dXJlZFF1YWRXaXRoVGV4Q29vcmRzOiBzZXR1cFRleHR1cmVkUXVh
ZFdpdGhUZXhDb29yZHMsCisgIHNldHVwVGV4dHVyZWRRdWFkV2l0aEN1YmVNYXA6IHNldHVwVGV4
dHVyZWRRdWFkV2l0aEN1YmVNYXAsCisgIHNldHVwVW5pdFF1YWQ6IHNldHVwVW5pdFF1YWQsCisg
IHNldEZsb2F0RHJhd0NvbG9yOiBzZXRGbG9hdERyYXdDb2xvciwKKyAgc2V0VUJ5dGVEcmF3Q29s
b3I6IHNldFVCeXRlRHJhd0NvbG9yLAorICBzdGFydFBsYXlpbmdBbmRXYWl0Rm9yVmlkZW86IHN0
YXJ0UGxheWluZ0FuZFdhaXRGb3JWaWRlbywKKyAgc3RhcnRzV2l0aDogc3RhcnRzV2l0aCwKKyAg
c2hvdWxkR2VuZXJhdGVHTEVycm9yOiBzaG91bGRHZW5lcmF0ZUdMRXJyb3IsCisgIHNob3VsZFRo
cm93OiBzaG91bGRUaHJvdywKKyAgcmVhZEZpbGU6IHJlYWRGaWxlLAorICByZWFkRmlsZUxpc3Q6
IHJlYWRGaWxlTGlzdCwKKyAgcmVwbGFjZVBhcmFtczogcmVwbGFjZVBhcmFtcywKKyAgcmVxdWVz
dEFuaW1GcmFtZTogcmVxdWVzdEFuaW1GcmFtZSwKKyAgcnVuU3RlcHM6IHJ1blN0ZXBzLAorICB3
YWl0Rm9yQ29tcG9zaXRlOiB3YWl0Rm9yQ29tcG9zaXRlLAorCisgIC8vIGZ1bGxzY3JlZW4gYXBp
CisgIHNldHVwRnVsbHNjcmVlbjogc2V0dXBGdWxsc2NyZWVuLAorCisgIC8vIHNSR0IgY29udmVy
dGVyIGFwaQorICBzUkdCVG9MaW5lYXI6IHNSR0JUb0xpbmVhciwKKyAgbGluZWFyVG9TUkdCOiBs
aW5lYXJUb1NSR0IsCisKKyAgZ2V0SG9zdDogZ2V0SG9zdCwKKyAgZ2V0QmFzZURvbWFpbjogZ2V0
QmFzZURvbWFpbiwKKyAgcnVubmluZ09uTG9jYWxob3N0OiBydW5uaW5nT25Mb2NhbGhvc3QsCisg
IGdldExvY2FsQ3Jvc3NPcmlnaW46IGdldExvY2FsQ3Jvc3NPcmlnaW4sCisgIGdldFJlbGF0aXZl
UGF0aDogZ2V0UmVsYXRpdmVQYXRoLAorICBhd2FpdE9yVGltZW91dDogYXdhaXRPclRpbWVvdXQs
CisgIGF3YWl0VGltZW91dDogYXdhaXRUaW1lb3V0LAorCisgIG5vbmU6IGZhbHNlCit9OworCitP
YmplY3QuZGVmaW5lUHJvcGVydGllcyhBUEksIHsKKyAgbm9UZXhDb29yZFRleHR1cmVWZXJ0ZXhT
aGFkZXI6IHsgdmFsdWU6IG5vVGV4Q29vcmRUZXh0dXJlVmVydGV4U2hhZGVyLCB3cml0YWJsZTog
ZmFsc2UgfSwKKyAgc2ltcGxlVGV4dHVyZVZlcnRleFNoYWRlcjogeyB2YWx1ZTogc2ltcGxlVGV4
dHVyZVZlcnRleFNoYWRlciwgd3JpdGFibGU6IGZhbHNlIH0sCisgIHNpbXBsZVRleHR1cmVWZXJ0
ZXhTaGFkZXJFU1NMMzAwOiB7IHZhbHVlOiBzaW1wbGVUZXh0dXJlVmVydGV4U2hhZGVyRVNTTDMw
MCwgd3JpdGFibGU6IGZhbHNlIH0sCisgIHNpbXBsZUNvbG9yRnJhZ21lbnRTaGFkZXI6IHsgdmFs
dWU6IHNpbXBsZUNvbG9yRnJhZ21lbnRTaGFkZXIsIHdyaXRhYmxlOiBmYWxzZSB9LAorICBzaW1w
bGVDb2xvckZyYWdtZW50U2hhZGVyRVNTTDMwMDogeyB2YWx1ZTogc2ltcGxlQ29sb3JGcmFnbWVu
dFNoYWRlckVTU0wzMDAsIHdyaXRhYmxlOiBmYWxzZSB9LAorICBzaW1wbGVWZXJ0ZXhTaGFkZXI6
IHsgdmFsdWU6IHNpbXBsZVZlcnRleFNoYWRlciwgd3JpdGFibGU6IGZhbHNlIH0sCisgIHNpbXBs
ZVZlcnRleFNoYWRlckVTU0wzMDA6IHsgdmFsdWU6IHNpbXBsZVZlcnRleFNoYWRlckVTU0wzMDAs
IHdyaXRhYmxlOiBmYWxzZSB9LAorICBzaW1wbGVUZXh0dXJlRnJhZ21lbnRTaGFkZXI6IHsgdmFs
dWU6IHNpbXBsZVRleHR1cmVGcmFnbWVudFNoYWRlciwgd3JpdGFibGU6IGZhbHNlIH0sCisgIHNp
bXBsZVRleHR1cmVGcmFnbWVudFNoYWRlckVTU0wzMDA6IHsgdmFsdWU6IHNpbXBsZVRleHR1cmVG
cmFnbWVudFNoYWRlckVTU0wzMDAsIHdyaXRhYmxlOiBmYWxzZSB9LAorICBzaW1wbGVIaWdoUHJl
Y2lzaW9uVGV4dHVyZUZyYWdtZW50U2hhZGVyOiB7IHZhbHVlOiBzaW1wbGVIaWdoUHJlY2lzaW9u
VGV4dHVyZUZyYWdtZW50U2hhZGVyLCB3cml0YWJsZTogZmFsc2UgfSwKKyAgc2ltcGxlQ3ViZU1h
cFRleHR1cmVGcmFnbWVudFNoYWRlcjogeyB2YWx1ZTogc2ltcGxlQ3ViZU1hcFRleHR1cmVGcmFn
bWVudFNoYWRlciwgd3JpdGFibGU6IGZhbHNlIH0sCisgIHNpbXBsZVZlcnRleENvbG9yRnJhZ21l
bnRTaGFkZXI6IHsgdmFsdWU6IHNpbXBsZVZlcnRleENvbG9yRnJhZ21lbnRTaGFkZXIsIHdyaXRh
YmxlOiBmYWxzZSB9LAorICBzaW1wbGVWZXJ0ZXhDb2xvclZlcnRleFNoYWRlcjogeyB2YWx1ZTog
c2ltcGxlVmVydGV4Q29sb3JWZXJ0ZXhTaGFkZXIsIHdyaXRhYmxlOiBmYWxzZSB9Cit9KTsKKwor
cmV0dXJuIEFQSTsKKworfSgpKTsKZGlmZiAtLWdpdCBhL0xheW91dFRlc3RzL3dlYmdsL3Jlc291
cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL3Jlc291cmNlcy9qcy10ZXN0LXN0eWxlLmNzcyBiL0xheW91
dFRlc3RzL3dlYmdsL3Jlc291cmNlcy93ZWJnbF90ZXN0X2ZpbGVzL3Jlc291cmNlcy9qcy10ZXN0
LXN0eWxlLmNzcwpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwMDAwMDAwMDAwMDAw
MDAwMDAwMDAwMDAwMDAwMDAwMDAwLi41ZjY4MzliNjIxNDc3M2IwYTAwYmM4YTJiM2I2MmFjZjY0
ZGMxZGVlCi0tLSAvZGV2L251bGwKKysrIGIvTGF5b3V0VGVzdHMvd2ViZ2wvcmVzb3VyY2VzL3dl
YmdsX3Rlc3RfZmlsZXMvcmVzb3VyY2VzL2pzLXRlc3Qtc3R5bGUuY3NzCkBAIC0wLDAgKzEsMjAg
QEAKKy5wYXNzIHsKKyAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICBjb2xvcjogZ3JlZW47Cit9
CisuZmFpbCB7CisgICAgZm9udC13ZWlnaHQ6IGJvbGQ7CisgICAgY29sb3I6IHJlZDsKK30KKy53
YXJuIHsKKyAgICBmb250LXdlaWdodDogYm9sZDsKKyAgICBjb2xvcjogeWVsbG93OworICAgIHRl
eHQtc2hhZG93OiAxcHggMXB4ICNmZjAwMDAKK30KKyNjb25zb2xlIHsKKyAgICB3aGl0ZS1zcGFj
ZTogcHJlLXdyYXA7CisgICAgZm9udC1mYW1pbHk6IG1vbm9zcGFjZTsKK30KK2JvZHkgeworICAg
IGJhY2tncm91bmQtY29sb3I6ICNmZmZmZmY7Cit9Cg==
</data>
<flag name="commit-queue"
          id="425574"
          type_id="3"
          status="-"
          setter="ews-feeder"
    />
          </attachment>
      

    </bug>

</bugzilla>