<?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>62257</bug_id>
          
          <creation_ts>2011-06-07 19:19:45 -0700</creation_ts>
          <short_desc>Disallow use of cross-domain media (images, video) in WebGL</short_desc>
          <delta_ts>2011-06-09 15:02:31 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>WebGL</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>61015</dependson>
    
    <dependson>62368</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Kenneth Russell">kbr</reporter>
          <assigned_to name="Kenneth Russell">kbr</assigned_to>
          <cc>abarth</cc>
    
    <cc>cmarrin</cc>
    
    <cc>zmo</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>417017</commentid>
    <comment_count>0</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-06-07 19:19:45 -0700</bug_when>
    <thetext>Due to the possibility of using WebGL to examine the contents of cross-origin images [1], it is necessary to disallow the use of cross-origin media in WebGL.

The WebGL specification and conformance suite have already been updated to mandate this new behavior, and the HTML specification and WebKit implementation have been updated to allow applications to use CORS to request permission to use cross-domain media.

[1] http://www.khronos.org/webgl/security/</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417030</commentid>
    <comment_count>1</comment_count>
      <attachid>96360</attachid>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-06-07 19:34:31 -0700</bug_when>
    <thetext>Created attachment 96360
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417045</commentid>
    <comment_count>2</comment_count>
      <attachid>96360</attachid>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-07 19:57:44 -0700</bug_when>
    <thetext>Comment on attachment 96360
Patch

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

Looks great.  Thanks.

&gt; Source/WebCore/html/canvas/CanvasRenderingContext.cpp:103
&gt; +    m_cleanOrigins.add(url.string());

m_cleanOrigins =&gt; m_cleanURLs since this hold URLs and not origins?

&gt; Source/WebCore/html/canvas/CanvasRenderingContext.cpp:130
&gt; +void CanvasRenderingContext::checkOrigin(const CanvasPattern* pattern)
&gt; +{
&gt; +    if (wouldTaintOrigin(pattern))
&gt; +        canvas()-&gt;setOriginTainted();
&gt; +}
&gt; +
&gt; +void CanvasRenderingContext::checkOrigin(const HTMLCanvasElement* sourceCanvas)
&gt; +{
&gt; +    if (wouldTaintOrigin(sourceCanvas))
&gt; +        canvas()-&gt;setOriginTainted();
&gt; +}
&gt; +
&gt; +void CanvasRenderingContext::checkOrigin(const HTMLImageElement* image)
&gt; +{
&gt; +    if (wouldTaintOrigin(image))
&gt; +        canvas()-&gt;setOriginTainted();
&gt; +}
&gt; +
&gt; +void CanvasRenderingContext::checkOrigin(const HTMLVideoElement* video)
&gt; +{
&gt; +    if (wouldTaintOrigin(video))
&gt; +        canvas()-&gt;setOriginTainted();
&gt; +}

This feel ripe for a template.

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:2812
&gt; +    UNUSED_PARAM(ec);

You can just remove the name of the ec parameter instead of using this macro.

&gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:2815
&gt; +    // It is no longer possible to taint the origin using the WebGL API.

I&apos;d remove this comment.  That&apos;s going to read strange in two years.  :)</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417508</commentid>
    <comment_count>3</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-06-08 14:13:38 -0700</bug_when>
    <thetext>(In reply to comment #2)
&gt; (From update of attachment 96360 [details])
&gt; View in context: https://bugs.webkit.org/attachment.cgi?id=96360&amp;action=review
&gt; 
&gt; Looks great.  Thanks.

Thanks hugely to you and Nate for doing the CORS support for images, so that this patch won&apos;t completely break certain WebGL apps. :)

&gt; &gt; Source/WebCore/html/canvas/CanvasRenderingContext.cpp:103
&gt; &gt; +    m_cleanOrigins.add(url.string());
&gt; 
&gt; m_cleanOrigins =&gt; m_cleanURLs since this hold URLs and not origins?

OK, I&apos;ll rename this member in the code I&apos;ll land.

&gt; &gt; Source/WebCore/html/canvas/CanvasRenderingContext.cpp:130
&gt; &gt; +void CanvasRenderingContext::checkOrigin(const CanvasPattern* pattern)
&gt; &gt; +{
&gt; &gt; +    if (wouldTaintOrigin(pattern))
&gt; &gt; +        canvas()-&gt;setOriginTainted();
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +void CanvasRenderingContext::checkOrigin(const HTMLCanvasElement* sourceCanvas)
&gt; &gt; +{
&gt; &gt; +    if (wouldTaintOrigin(sourceCanvas))
&gt; &gt; +        canvas()-&gt;setOriginTainted();
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +void CanvasRenderingContext::checkOrigin(const HTMLImageElement* image)
&gt; &gt; +{
&gt; &gt; +    if (wouldTaintOrigin(image))
&gt; &gt; +        canvas()-&gt;setOriginTainted();
&gt; &gt; +}
&gt; &gt; +
&gt; &gt; +void CanvasRenderingContext::checkOrigin(const HTMLVideoElement* video)
&gt; &gt; +{
&gt; &gt; +    if (wouldTaintOrigin(video))
&gt; &gt; +        canvas()-&gt;setOriginTainted();
&gt; &gt; +}
&gt; 
&gt; This feel ripe for a template.

Agreed; replaced with one.

&gt; &gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:2812
&gt; &gt; +    UNUSED_PARAM(ec);
&gt; 
&gt; You can just remove the name of the ec parameter instead of using this macro.

Done.

&gt; &gt; Source/WebCore/html/canvas/WebGLRenderingContext.cpp:2815
&gt; &gt; +    // It is no longer possible to taint the origin using the WebGL API.
&gt; 
&gt; I&apos;d remove this comment.  That&apos;s going to read strange in two years.  :)

Agreed it will read strangely. :) I&apos;ve rewritten rather than removed it, though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>417536</commentid>
    <comment_count>4</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-06-08 14:28:00 -0700</bug_when>
    <thetext>Committed r88387: &lt;http://trac.webkit.org/changeset/88387&gt;</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>418092</commentid>
    <comment_count>5</comment_count>
    <who name="Adam Barth">abarth</who>
    <bug_when>2011-06-09 10:37:27 -0700</bug_when>
    <thetext>Reopening because Ossy rolled out the patch.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>418331</commentid>
    <comment_count>6</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-06-09 15:01:51 -0700</bug_when>
    <thetext>I looked at the failures on the three affected platforms (Leopard, GTK and Qt) and the reason the new tests were failing there is that WebGL isn&apos;t supported on those ports. I&apos;m recommitting the original patch with new Skipped entries for those three ports.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>418333</commentid>
    <comment_count>7</comment_count>
    <who name="Kenneth Russell">kbr</who>
    <bug_when>2011-06-09 15:02:31 -0700</bug_when>
    <thetext>Committed r88489: &lt;http://trac.webkit.org/changeset/88489&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>96360</attachid>
            <date>2011-06-07 19:34:31 -0700</date>
            <delta_ts>2011-06-07 19:57:44 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-62257-20110607193429.patch</filename>
            <type>text/plain</type>
            <size>39960</size>
            <attacher name="Kenneth Russell">kbr</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9XZWJDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2Vi
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDg4MzE2KQorKysgU291cmNlL1dlYkNvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsMjcgQEAKKzIwMTEtMDYtMDcgIEtlbm5ldGgg
UnVzc2VsbCAgPGtickBnb29nbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAo
T09QUyEpLgorCisgICAgICAgIERpc2FsbG93IHVzZSBvZiBjcm9zcy1kb21haW4gbWVkaWEgKGlt
YWdlcywgdmlkZW8pIGluIFdlYkdMCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3No
b3dfYnVnLmNnaT9pZD02MjI1NworCisgICAgICAgIFVwZGF0ZWQgV2ViR0wgaW1wbGVtZW50YXRp
b24gdG8gdHJhY2sgcmVjZW50IHNwZWMgdXBkYXRlcyBpbiB0aGlzIGFyZWEuCisKKyAgICAgICAg
VGVzdHM6IGh0dHAvdGVzdHMvc2VjdXJpdHkvd2ViZ2wtcmVtb3RlLXJlYWQtcmVtb3RlLWltYWdl
LWFsbG93ZWQtd2l0aC1jcmVkZW50aWFscy5odG1sCisgICAgICAgICAgICAgICBodHRwL3Rlc3Rz
L3NlY3VyaXR5L3dlYmdsLXJlbW90ZS1yZWFkLXJlbW90ZS1pbWFnZS1hbGxvd2VkLmh0bWwKKyAg
ICAgICAgICAgICAgIGh0dHAvdGVzdHMvc2VjdXJpdHkvd2ViZ2wtcmVtb3RlLXJlYWQtcmVtb3Rl
LWltYWdlLWJsb2NrZWQtbm8tY3Jvc3NvcmlnaW4uaHRtbAorCisgICAgICAgICogaHRtbC9jYW52
YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4dC5jcHA6CisgICAgICAgIChXZWJDb3JlOjpDYW52YXNS
ZW5kZXJpbmdDb250ZXh0Ojp3b3VsZFRhaW50T3JpZ2luKToKKyAgICAgICAgKFdlYkNvcmU6OkNh
bnZhc1JlbmRlcmluZ0NvbnRleHQ6OmNoZWNrT3JpZ2luKToKKyAgICAgICAgKiBodG1sL2NhbnZh
cy9DYW52YXNSZW5kZXJpbmdDb250ZXh0Lmg6CisgICAgICAgICogaHRtbC9jYW52YXMvV2ViR0xS
ZW5kZXJpbmdDb250ZXh0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OldlYkdMUmVuZGVyaW5nQ29u
dGV4dDo6cmVhZFBpeGVscyk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0NvbnRl
eHQ6OnRleEltYWdlMkQpOgorICAgICAgICAoV2ViQ29yZTo6V2ViR0xSZW5kZXJpbmdDb250ZXh0
Ojp2aWRlb0ZyYW1lVG9JbWFnZSk6CisgICAgICAgIChXZWJDb3JlOjpXZWJHTFJlbmRlcmluZ0Nv
bnRleHQ6OnRleFN1YkltYWdlMkQpOgorICAgICAgICAqIGh0bWwvY2FudmFzL1dlYkdMUmVuZGVy
aW5nQ29udGV4dC5oOgorCiAyMDExLTA2LTA3ICBUaW0gSG9ydG9uICA8dGltb3RoeV9ob3J0b25A
YXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2VkIGJ5IEFsZXhleSBQcm9za3VyeWFrb3YuCklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmNw
cAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJp
bmdDb250ZXh0LmNwcAkocmV2aXNpb24gODgzMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2Nh
bnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNTMg
KzQxLDk4IEBAIENhbnZhc1JlbmRlcmluZ0NvbnRleHQ6OkNhbnZhc1JlbmRlcmluZ0MKIHsKIH0K
IAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0OjpjaGVja09yaWdpbihjb25zdCBDYW52YXNQ
YXR0ZXJuKiBwYXR0ZXJuKQorYm9vbCBDYW52YXNSZW5kZXJpbmdDb250ZXh0Ojp3b3VsZFRhaW50
T3JpZ2luKGNvbnN0IENhbnZhc1BhdHRlcm4qIHBhdHRlcm4pCiB7CiAgICAgaWYgKGNhbnZhcygp
LT5vcmlnaW5DbGVhbigpICYmIHBhdHRlcm4gJiYgIXBhdHRlcm4tPm9yaWdpbkNsZWFuKCkpCi0g
ICAgICAgIGNhbnZhcygpLT5zZXRPcmlnaW5UYWludGVkKCk7CisgICAgICAgIHJldHVybiB0cnVl
OworICAgIHJldHVybiBmYWxzZTsKIH0KIAotdm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0Ojpj
aGVja09yaWdpbihjb25zdCBIVE1MQ2FudmFzRWxlbWVudCogc291cmNlQ2FudmFzKQorYm9vbCBD
YW52YXNSZW5kZXJpbmdDb250ZXh0Ojp3b3VsZFRhaW50T3JpZ2luKGNvbnN0IEhUTUxDYW52YXNF
bGVtZW50KiBzb3VyY2VDYW52YXMpCiB7CiAgICAgaWYgKGNhbnZhcygpLT5vcmlnaW5DbGVhbigp
ICYmIHNvdXJjZUNhbnZhcyAmJiAhc291cmNlQ2FudmFzLT5vcmlnaW5DbGVhbigpKQotICAgICAg
ICBjYW52YXMoKS0+c2V0T3JpZ2luVGFpbnRlZCgpOworICAgICAgICByZXR1cm4gdHJ1ZTsKKyAg
ICByZXR1cm4gZmFsc2U7CiB9CiAKLXZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDo6Y2hlY2tP
cmlnaW4oY29uc3QgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UpCitib29sIENhbnZhc1JlbmRlcmlu
Z0NvbnRleHQ6OndvdWxkVGFpbnRPcmlnaW4oY29uc3QgSFRNTEltYWdlRWxlbWVudCogaW1hZ2Up
CiB7CiAgICAgaWYgKCFpbWFnZSB8fCAhY2FudmFzKCktPm9yaWdpbkNsZWFuKCkpCi0gICAgICAg
IHJldHVybjsKKyAgICAgICAgcmV0dXJuIGZhbHNlOwogCiAgICAgQ2FjaGVkSW1hZ2UqIGNhY2hl
ZEltYWdlID0gaW1hZ2UtPmNhY2hlZEltYWdlKCk7Ci0gICAgaWYgKCFjYWNoZWRJbWFnZS0+cGFz
c2VzQWNjZXNzQ29udHJvbENoZWNrKGNhbnZhcygpLT5zZWN1cml0eU9yaWdpbigpKSkKLSAgICAg
ICAgY2hlY2tPcmlnaW4oY2FjaGVkSW1hZ2UtPnJlc3BvbnNlKCkudXJsKCkpOworICAgIGlmICgh
Y2FjaGVkSW1hZ2UtPnBhc3Nlc0FjY2Vzc0NvbnRyb2xDaGVjayhjYW52YXMoKS0+c2VjdXJpdHlP
cmlnaW4oKSkpIHsKKyAgICAgICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4oY2FjaGVkSW1hZ2UtPnJl
c3BvbnNlKCkudXJsKCkpKQorICAgICAgICAgICAgcmV0dXJuIHRydWU7CisgICAgfQogCi0gICAg
aWYgKGNhbnZhcygpLT5vcmlnaW5DbGVhbigpICYmICFjYWNoZWRJbWFnZS0+aW1hZ2UoKS0+aGFz
U2luZ2xlU2VjdXJpdHlPcmlnaW4oKSkKLSAgICAgICAgY2FudmFzKCktPnNldE9yaWdpblRhaW50
ZWQoKTsKKyAgICBpZiAoIWNhY2hlZEltYWdlLT5pbWFnZSgpLT5oYXNTaW5nbGVTZWN1cml0eU9y
aWdpbigpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKKworICAgIHJldHVybiBmYWxzZTsKIH0KIAot
dm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0OjpjaGVja09yaWdpbihjb25zdCBIVE1MVmlkZW9F
bGVtZW50KiB2aWRlbykKK2Jvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDo6d291bGRUYWludE9y
aWdpbihjb25zdCBIVE1MVmlkZW9FbGVtZW50KiB2aWRlbykKIHsKICNpZiBFTkFCTEUoVklERU8p
CiAgICAgLy8gRklYTUU6IFRoaXMgY2hlY2sgaXMgbGlrZWx5IHdyb25nIHdoZW4gYSByZWRpcmVj
dCBpcyBpbnZvbHZlZC4gV2UgbmVlZAogICAgIC8vIHRvIHRlc3QgdGhlIGZpbmFsVVJMLiBQbGVh
c2UgYmUgY2FyZWZ1bCB3aGVuIGZpeGluZyB0aGlzIGlzc3VlIG5vdCB0bwogICAgIC8vIG1ha2Ug
Y3VycmVudFNyYyBiZSB0aGUgZmluYWwgVVJMIGJlY2F1c2UgdGhlbiB0aGUKICAgICAvLyBIVE1M
TWVkaWFFbGVtZW50LmN1cnJlbnRTcmMgRE9NIEFQSSB3b3VsZCBsZWFrIHJlZGlyZWN0IGRlc3Rp
bmF0aW9ucyEKLSAgICBjaGVja09yaWdpbih2aWRlby0+Y3VycmVudFNyYygpKTsKLSAgICBpZiAo
Y2FudmFzKCktPm9yaWdpbkNsZWFuKCkgJiYgdmlkZW8gJiYgIXZpZGVvLT5oYXNTaW5nbGVTZWN1
cml0eU9yaWdpbigpKQotICAgICAgICBjYW52YXMoKS0+c2V0T3JpZ2luVGFpbnRlZCgpOworICAg
IGlmICghdmlkZW8gfHwgIWNhbnZhcygpLT5vcmlnaW5DbGVhbigpKQorICAgICAgICByZXR1cm4g
ZmFsc2U7CisKKyAgICBpZiAod291bGRUYWludE9yaWdpbih2aWRlby0+Y3VycmVudFNyYygpKSkK
KyAgICAgICAgcmV0dXJuIHRydWU7CisKKyAgICBpZiAoIXZpZGVvLT5oYXNTaW5nbGVTZWN1cml0
eU9yaWdpbigpKQorICAgICAgICByZXR1cm4gdHJ1ZTsKICNlbmRpZgorCisgICAgcmV0dXJuIGZh
bHNlOwogfQogCi12b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQ6OmNoZWNrT3JpZ2luKGNvbnN0
IEtVUkwmIHVybCkKK2Jvb2wgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDo6d291bGRUYWludE9yaWdp
bihjb25zdCBLVVJMJiB1cmwpCiB7CiAgICAgaWYgKCFjYW52YXMoKS0+b3JpZ2luQ2xlYW4oKSB8
fCBtX2NsZWFuT3JpZ2lucy5jb250YWlucyh1cmwuc3RyaW5nKCkpKQotICAgICAgICByZXR1cm47
CisgICAgICAgIHJldHVybiBmYWxzZTsKIAogICAgIGlmIChjYW52YXMoKS0+c2VjdXJpdHlPcmln
aW4oKS0+dGFpbnRzQ2FudmFzKHVybCkpCisgICAgICAgIHJldHVybiB0cnVlOworCisgICAgbV9j
bGVhbk9yaWdpbnMuYWRkKHVybC5zdHJpbmcoKSk7CisgICAgcmV0dXJuIGZhbHNlOworfQorCisK
K3ZvaWQgQ2FudmFzUmVuZGVyaW5nQ29udGV4dDo6Y2hlY2tPcmlnaW4oY29uc3QgQ2FudmFzUGF0
dGVybiogcGF0dGVybikKK3sKKyAgICBpZiAod291bGRUYWludE9yaWdpbihwYXR0ZXJuKSkKKyAg
ICAgICAgY2FudmFzKCktPnNldE9yaWdpblRhaW50ZWQoKTsKK30KKwordm9pZCBDYW52YXNSZW5k
ZXJpbmdDb250ZXh0OjpjaGVja09yaWdpbihjb25zdCBIVE1MQ2FudmFzRWxlbWVudCogc291cmNl
Q2FudmFzKQoreworICAgIGlmICh3b3VsZFRhaW50T3JpZ2luKHNvdXJjZUNhbnZhcykpCisgICAg
ICAgIGNhbnZhcygpLT5zZXRPcmlnaW5UYWludGVkKCk7Cit9CisKK3ZvaWQgQ2FudmFzUmVuZGVy
aW5nQ29udGV4dDo6Y2hlY2tPcmlnaW4oY29uc3QgSFRNTEltYWdlRWxlbWVudCogaW1hZ2UpCit7
CisgICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4oaW1hZ2UpKQorICAgICAgICBjYW52YXMoKS0+c2V0
T3JpZ2luVGFpbnRlZCgpOworfQorCit2b2lkIENhbnZhc1JlbmRlcmluZ0NvbnRleHQ6OmNoZWNr
T3JpZ2luKGNvbnN0IEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvKQoreworICAgIGlmICh3b3VsZFRh
aW50T3JpZ2luKHZpZGVvKSkKKyAgICAgICAgY2FudmFzKCktPnNldE9yaWdpblRhaW50ZWQoKTsK
K30KKwordm9pZCBDYW52YXNSZW5kZXJpbmdDb250ZXh0OjpjaGVja09yaWdpbihjb25zdCBLVVJM
JiB1cmwpCit7CisgICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4odXJsKSkKICAgICAgICAgY2FudmFz
KCktPnNldE9yaWdpblRhaW50ZWQoKTsKLSAgICBlbHNlCi0gICAgICAgIG1fY2xlYW5PcmlnaW5z
LmFkZCh1cmwuc3RyaW5nKCkpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBXZWJDb3JlCkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9DYW52YXNSZW5kZXJpbmdDb250ZXh0LmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYkNvcmUvaHRtbC9jYW52YXMvQ2FudmFzUmVuZGVyaW5nQ29udGV4
dC5oCShyZXZpc2lvbiA4ODMxNikKKysrIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL0NhbnZh
c1JlbmRlcmluZ0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtNjMsNiArNjMsMTIgQEAgcHVi
bGljOgogCiBwcm90ZWN0ZWQ6CiAgICAgQ2FudmFzUmVuZGVyaW5nQ29udGV4dChIVE1MQ2FudmFz
RWxlbWVudCopOworICAgIGJvb2wgd291bGRUYWludE9yaWdpbihjb25zdCBDYW52YXNQYXR0ZXJu
Kik7CisgICAgYm9vbCB3b3VsZFRhaW50T3JpZ2luKGNvbnN0IEhUTUxDYW52YXNFbGVtZW50Kik7
CisgICAgYm9vbCB3b3VsZFRhaW50T3JpZ2luKGNvbnN0IEhUTUxJbWFnZUVsZW1lbnQqKTsKKyAg
ICBib29sIHdvdWxkVGFpbnRPcmlnaW4oY29uc3QgSFRNTFZpZGVvRWxlbWVudCopOworICAgIGJv
b2wgd291bGRUYWludE9yaWdpbihjb25zdCBLVVJMJik7CisKICAgICB2b2lkIGNoZWNrT3JpZ2lu
KGNvbnN0IENhbnZhc1BhdHRlcm4qKTsKICAgICB2b2lkIGNoZWNrT3JpZ2luKGNvbnN0IEhUTUxD
YW52YXNFbGVtZW50Kik7CiAgICAgdm9pZCBjaGVja09yaWdpbihjb25zdCBIVE1MSW1hZ2VFbGVt
ZW50Kik7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0Nv
bnRleHQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2h0bWwvY2FudmFzL1dlYkdM
UmVuZGVyaW5nQ29udGV4dC5jcHAJKHJldmlzaW9uIDg4MzE2KQorKysgU291cmNlL1dlYkNvcmUv
aHRtbC9jYW52YXMvV2ViR0xSZW5kZXJpbmdDb250ZXh0LmNwcAkod29ya2luZyBjb3B5KQpAQCAt
MjgwOSwxMiArMjgwOSwxMSBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6cG9seWdvbk9m
ZnNlCiAKIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0OjpyZWFkUGl4ZWxzKEdDM0RpbnQgeCwg
R0MzRGludCB5LCBHQzNEc2l6ZWkgd2lkdGgsIEdDM0RzaXplaSBoZWlnaHQsIEdDM0RlbnVtIGZv
cm1hdCwgR0MzRGVudW0gdHlwZSwgQXJyYXlCdWZmZXJWaWV3KiBwaXhlbHMsIEV4Y2VwdGlvbkNv
ZGUmIGVjKQogeworICAgIFVOVVNFRF9QQVJBTShlYyk7CiAgICAgaWYgKGlzQ29udGV4dExvc3Qo
KSkKICAgICAgICAgcmV0dXJuOwotICAgIGlmICghY2FudmFzKCktPm9yaWdpbkNsZWFuKCkpIHsK
LSAgICAgICAgZWMgPSBTRUNVUklUWV9FUlI7Ci0gICAgICAgIHJldHVybjsKLSAgICB9CisgICAg
Ly8gSXQgaXMgbm8gbG9uZ2VyIHBvc3NpYmxlIHRvIHRhaW50IHRoZSBvcmlnaW4gdXNpbmcgdGhl
IFdlYkdMIEFQSS4KKyAgICBBU1NFUlQoY2FudmFzKCktPm9yaWdpbkNsZWFuKCkpOwogICAgIC8v
IFZhbGlkYXRlIGlucHV0IHBhcmFtZXRlcnMuCiAgICAgaWYgKCFwaXhlbHMpIHsKICAgICAgICAg
bV9jb250ZXh0LT5zeW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9W
QUxVRSk7CkBAIC0zMTU3LDcgKzMxNTYsMTEgQEAgdm9pZCBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnRleEltYWdlMkQoRwogICAgICAgICByZXR1cm47CiAgICAgaWYgKCF2YWxpZGF0ZUhUTUxJbWFn
ZUVsZW1lbnQoaW1hZ2UpKQogICAgICAgICByZXR1cm47Ci0gICAgY2hlY2tPcmlnaW4oaW1hZ2Up
OworICAgIGlmICh3b3VsZFRhaW50T3JpZ2luKGltYWdlKSkgeworICAgICAgICBlYyA9IFNFQ1VS
SVRZX0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KKwogICAgIHRleEltYWdlMkRJbXBsKHRh
cmdldCwgbGV2ZWwsIGludGVybmFsZm9ybWF0LCBmb3JtYXQsIHR5cGUsIGltYWdlLT5jYWNoZWRJ
bWFnZSgpLT5pbWFnZSgpLAogICAgICAgICAgICAgICAgICAgIG1fdW5wYWNrRmxpcFksIG1fdW5w
YWNrUHJlbXVsdGlwbHlBbHBoYSwgZWMpOwogfQpAQCAtMzE3Miw3ICszMTc1LDEwIEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJbWFnZTJEKEcKICAgICAgICAgbV9jb250ZXh0LT5z
eW50aGVzaXplR0xFcnJvcihHcmFwaGljc0NvbnRleHQzRDo6SU5WQUxJRF9WQUxVRSk7CiAgICAg
ICAgIHJldHVybjsKICAgICB9Ci0gICAgY2hlY2tPcmlnaW4oY2FudmFzKTsKKyAgICBpZiAod291
bGRUYWludE9yaWdpbihjYW52YXMpKSB7CisgICAgICAgIGVjID0gU0VDVVJJVFlfRVJSOworICAg
ICAgICByZXR1cm47CisgICAgfQogICAgIFJlZlB0cjxJbWFnZURhdGE+IGltYWdlRGF0YSA9IGNh
bnZhcy0+Z2V0SW1hZ2VEYXRhKCk7CiAgICAgaWYgKGltYWdlRGF0YSkKICAgICAgICAgdGV4SW1h
Z2UyRCh0YXJnZXQsIGxldmVsLCBpbnRlcm5hbGZvcm1hdCwgZm9ybWF0LCB0eXBlLCBpbWFnZURh
dGEuZ2V0KCksIGVjKTsKQEAgLTMxODIsNyArMzE4OCw3IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdD
b250ZXh0Ojp0ZXhJbWFnZTJEKEcKIH0KIAogI2lmIEVOQUJMRShWSURFTykKLVBhc3NSZWZQdHI8
SW1hZ2U+IFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dmlkZW9GcmFtZVRvSW1hZ2UoSFRNTFZpZGVv
RWxlbWVudCogdmlkZW8pCitQYXNzUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6
OnZpZGVvRnJhbWVUb0ltYWdlKEhUTUxWaWRlb0VsZW1lbnQqIHZpZGVvLCBFeGNlcHRpb25Db2Rl
JiBlYykKIHsKICAgICBpZiAoIXZpZGVvIHx8ICF2aWRlby0+dmlkZW9XaWR0aCgpIHx8ICF2aWRl
by0+dmlkZW9IZWlnaHQoKSkgewogICAgICAgICBtX2NvbnRleHQtPnN5bnRoZXNpemVHTEVycm9y
KEdyYXBoaWNzQ29udGV4dDNEOjpJTlZBTElEX1ZBTFVFKTsKQEAgLTMxOTQsNyArMzIwMCwxMCBA
QCBQYXNzUmVmUHRyPEltYWdlPiBXZWJHTFJlbmRlcmluZ0NvbnRleHQ6CiAgICAgICAgIG1fY29u
dGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6Ok9VVF9PRl9NRU1PUlkp
OwogICAgICAgICByZXR1cm4gMDsKICAgICB9Ci0gICAgY2hlY2tPcmlnaW4odmlkZW8pOworICAg
IGlmICh3b3VsZFRhaW50T3JpZ2luKHZpZGVvKSkgeworICAgICAgICBlYyA9IFNFQ1VSSVRZX0VS
UjsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQogICAgIEludFJlY3QgZGVzdFJlY3QoMCwgMCwg
c2l6ZS53aWR0aCgpLCBzaXplLmhlaWdodCgpKTsKICAgICAvLyBGSVhNRTogVHVybiB0aGlzIGlu
dG8gYSBHUFUtR1BVIHRleHR1cmUgY29weSBpbnN0ZWFkIG9mIENQVSByZWFkYmFjay4KICAgICB2
aWRlby0+cGFpbnRDdXJyZW50RnJhbWVJbkNvbnRleHQoYnVmLT5jb250ZXh0KCksIGRlc3RSZWN0
KTsKQEAgLTMyMDcsOCArMzIxNiw4IEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhJ
bWFnZTJEKEcKICAgICBlYyA9IDA7CiAgICAgaWYgKGlzQ29udGV4dExvc3QoKSkKICAgICAgICAg
cmV0dXJuOwotICAgIFJlZlB0cjxJbWFnZT4gaW1hZ2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRl
byk7Ci0gICAgaWYgKCF2aWRlbykKKyAgICBSZWZQdHI8SW1hZ2U+IGltYWdlID0gdmlkZW9GcmFt
ZVRvSW1hZ2UodmlkZW8sIGVjKTsKKyAgICBpZiAoIWltYWdlKQogICAgICAgICByZXR1cm47CiAg
ICAgdGV4SW1hZ2UyREltcGwodGFyZ2V0LCBsZXZlbCwgaW50ZXJuYWxmb3JtYXQsIGZvcm1hdCwg
dHlwZSwgaW1hZ2UuZ2V0KCksIG1fdW5wYWNrRmxpcFksIG1fdW5wYWNrUHJlbXVsdGlwbHlBbHBo
YSwgZWMpOwogfQpAQCAtMzM0OSw3ICszMzU4LDEwIEBAIHZvaWQgV2ViR0xSZW5kZXJpbmdDb250
ZXh0Ojp0ZXhTdWJJbWFnZTIKICAgICAgICAgcmV0dXJuOwogICAgIGlmICghdmFsaWRhdGVIVE1M
SW1hZ2VFbGVtZW50KGltYWdlKSkKICAgICAgICAgcmV0dXJuOwotICAgIGNoZWNrT3JpZ2luKGlt
YWdlKTsKKyAgICBpZiAod291bGRUYWludE9yaWdpbihpbWFnZSkpIHsKKyAgICAgICAgZWMgPSBT
RUNVUklUWV9FUlI7CisgICAgICAgIHJldHVybjsKKyAgICB9CiAgICAgdGV4U3ViSW1hZ2UyRElt
cGwodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZS0+
Y2FjaGVkSW1hZ2UoKS0+aW1hZ2UoKSwKICAgICAgICAgICAgICAgICAgICAgICBtX3VucGFja0Zs
aXBZLCBtX3VucGFja1ByZW11bHRpcGx5QWxwaGEsIGVjKTsKIH0KQEAgLTMzNjQsNyArMzM3Niwx
MCBAQCB2b2lkIFdlYkdMUmVuZGVyaW5nQ29udGV4dDo6dGV4U3ViSW1hZ2UyCiAgICAgICAgIG1f
Y29udGV4dC0+c3ludGhlc2l6ZUdMRXJyb3IoR3JhcGhpY3NDb250ZXh0M0Q6OklOVkFMSURfVkFM
VUUpOwogICAgICAgICByZXR1cm47CiAgICAgfQotICAgIGNoZWNrT3JpZ2luKGNhbnZhcyk7Cisg
ICAgaWYgKHdvdWxkVGFpbnRPcmlnaW4oY2FudmFzKSkgeworICAgICAgICBlYyA9IFNFQ1VSSVRZ
X0VSUjsKKyAgICAgICAgcmV0dXJuOworICAgIH0KICAgICBSZWZQdHI8SW1hZ2VEYXRhPiBpbWFn
ZURhdGEgPSBjYW52YXMtPmdldEltYWdlRGF0YSgpOwogICAgIGlmIChpbWFnZURhdGEpCiAgICAg
ICAgIHRleFN1YkltYWdlMkQodGFyZ2V0LCBsZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0
LCB0eXBlLCBpbWFnZURhdGEuZ2V0KCksIGVjKTsKQEAgLTMzODAsOCArMzM5NSw4IEBAIHZvaWQg
V2ViR0xSZW5kZXJpbmdDb250ZXh0Ojp0ZXhTdWJJbWFnZTIKICAgICBlYyA9IDA7CiAgICAgaWYg
KGlzQ29udGV4dExvc3QoKSkKICAgICAgICAgcmV0dXJuOwotICAgIFJlZlB0cjxJbWFnZT4gaW1h
Z2UgPSB2aWRlb0ZyYW1lVG9JbWFnZSh2aWRlbyk7Ci0gICAgaWYgKCF2aWRlbykKKyAgICBSZWZQ
dHI8SW1hZ2U+IGltYWdlID0gdmlkZW9GcmFtZVRvSW1hZ2UodmlkZW8sIGVjKTsKKyAgICBpZiAo
IWltYWdlKQogICAgICAgICByZXR1cm47CiAgICAgdGV4U3ViSW1hZ2UyREltcGwodGFyZ2V0LCBs
ZXZlbCwgeG9mZnNldCwgeW9mZnNldCwgZm9ybWF0LCB0eXBlLCBpbWFnZS5nZXQoKSwgbV91bnBh
Y2tGbGlwWSwgbV91bnBhY2tQcmVtdWx0aXBseUFscGhhLCBlYyk7CiB9CkluZGV4OiBTb3VyY2Uv
V2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmluZ0NvbnRleHQuaAkocmV2
aXNpb24gODgzMTYpCisrKyBTb3VyY2UvV2ViQ29yZS9odG1sL2NhbnZhcy9XZWJHTFJlbmRlcmlu
Z0NvbnRleHQuaAkod29ya2luZyBjb3B5KQpAQCAtMzQ0LDcgKzM0NCw3IEBAIHB1YmxpYzoKICAg
ICBib29sIHZhbGlkYXRlV2ViR0xPYmplY3QoV2ViR0xPYmplY3QqKTsKIAogI2lmIEVOQUJMRShW
SURFTykKLSAgICBQYXNzUmVmUHRyPEltYWdlPiB2aWRlb0ZyYW1lVG9JbWFnZShIVE1MVmlkZW9F
bGVtZW50Kik7CisgICAgUGFzc1JlZlB0cjxJbWFnZT4gdmlkZW9GcmFtZVRvSW1hZ2UoSFRNTFZp
ZGVvRWxlbWVudCosIEV4Y2VwdGlvbkNvZGUmKTsKICNlbmRpZgogCiAgICAgUmVmUHRyPEdyYXBo
aWNzQ29udGV4dDNEPiBtX2NvbnRleHQ7CkluZGV4OiBMYXlvdXRUZXN0cy9DaGFuZ2VMb2cKPT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PQotLS0gTGF5b3V0VGVzdHMvQ2hhbmdlTG9nCShyZXZpc2lvbiA4ODMxNikKKysrIExh
eW91dFRlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDI3IEBACisyMDEx
LTA2LTA3ICBLZW5uZXRoIFJ1c3NlbGwgIDxrYnJAZ29vZ2xlLmNvbT4KKworICAgICAgICBSZXZp
ZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICBEaXNhbGxvdyB1c2Ugb2YgY3Jvc3Mt
ZG9tYWluIG1lZGlhIChpbWFnZXMsIHZpZGVvKSBpbiBXZWJHTAorICAgICAgICBodHRwczovL2J1
Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9NjIyNTcKKworICAgICAgICBVcGRhdGVkIG9y
aWdpbi1jbGVhbi1jb25mb3JtYW5jZS5odG1sIHRvIHRyYWNrIHVwc3RyZWFtIHZlcnNpb24gaW4K
KyAgICAgICAgS2hyb25vcyByZXBvc2l0b3J5LiBBZGRlZCBuZXcgbGF5b3V0IHRlc3RzIG1pcnJv
cmluZyB0aG9zZSBhZGRlZAorICAgICAgICBpbiBidWcgNjEwMTUgd2hpY2ggdmVyaWZ5IHRoYXQg
bmV3IENPUlMgc3VwcG9ydCBmb3IgaW1hZ2VzIGlzCisgICAgICAgIHdvcmtpbmcgaW4gdGhlIGNv
bnRleHQgb2YgV2ViR0wuCisKKyAgICAgICAgVmVyaWZpZWQgbmV3IHRlc3RzIGluIFdlYktpdCBh
bmQgQ2hyb21pdW0uCisKKyAgICAgICAgKiBodHRwL3Rlc3RzL2NhbnZhcy93ZWJnbC9vcmlnaW4t
Y2xlYW4tY29uZm9ybWFuY2UtZXhwZWN0ZWQudHh0OgorICAgICAgICAqIGh0dHAvdGVzdHMvY2Fu
dmFzL3dlYmdsL29yaWdpbi1jbGVhbi1jb25mb3JtYW5jZS5odG1sOgorICAgICAgICAqIGh0dHAv
dGVzdHMvc2VjdXJpdHkvd2ViZ2wtcmVtb3RlLXJlYWQtcmVtb3RlLWltYWdlLWFsbG93ZWQtZXhw
ZWN0ZWQudHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3dlYmdsLXJl
bW90ZS1yZWFkLXJlbW90ZS1pbWFnZS1hbGxvd2VkLXdpdGgtY3JlZGVudGlhbHMtZXhwZWN0ZWQu
dHh0OiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3dlYmdsLXJlbW90ZS1y
ZWFkLXJlbW90ZS1pbWFnZS1hbGxvd2VkLXdpdGgtY3JlZGVudGlhbHMuaHRtbDogQWRkZWQuCisg
ICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS93ZWJnbC1yZW1vdGUtcmVhZC1yZW1vdGUtaW1h
Z2UtYWxsb3dlZC5odG1sOiBBZGRlZC4KKyAgICAgICAgKiBodHRwL3Rlc3RzL3NlY3VyaXR5L3dl
YmdsLXJlbW90ZS1yZWFkLXJlbW90ZS1pbWFnZS1ibG9ja2VkLW5vLWNyb3Nzb3JpZ2luLWV4cGVj
dGVkLnR4dDogQWRkZWQuCisgICAgICAgICogaHR0cC90ZXN0cy9zZWN1cml0eS93ZWJnbC1yZW1v
dGUtcmVhZC1yZW1vdGUtaW1hZ2UtYmxvY2tlZC1uby1jcm9zc29yaWdpbi5odG1sOiBBZGRlZC4K
KyAgICAgICAgKiBwbGF0Zm9ybS9tYWMtd2syL1NraXBwZWQ6CisKIDIwMTEtMDYtMDcgIEdhdmlu
IEJhcnJhY2xvdWdoICA8YmFycmFjbG91Z2hAYXBwbGUuY29tPgogCiAgICAgICAgIFJldmlld2Vk
IGJ5IFNhbSBXZWluaWcuCkluZGV4OiBMYXlvdXRUZXN0cy9odHRwL3Rlc3RzL2NhbnZhcy93ZWJn
bC9vcmlnaW4tY2xlYW4tY29uZm9ybWFuY2UtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExh
eW91dFRlc3RzL2h0dHAvdGVzdHMvY2FudmFzL3dlYmdsL29yaWdpbi1jbGVhbi1jb25mb3JtYW5j
ZS1leHBlY3RlZC50eHQJKHJldmlzaW9uIDg4MzE2KQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0
cy9jYW52YXMvd2ViZ2wvb3JpZ2luLWNsZWFuLWNvbmZvcm1hbmNlLWV4cGVjdGVkLnR4dAkod29y
a2luZyBjb3B5KQpAQCAtMSwzMSArMSwyOSBAQAotVGhpcyB0ZXN0IGVuc3VyZXMgV2ViR0wgaW1w
bGVtZW50YXRpb25zIGZvbGxvdyBwcm9wZXIgb3JpZ2luIHJlc3RyaWN0aW9ucy4KK1RoaXMgdGVz
dCBlbnN1cmVzIFdlYkdMIGltcGxlbWVudGF0aW9ucyBmb2xsb3cgcHJvcGVyIHNhbWUtb3JpZ2lu
IHJlc3RyaWN0aW9ucy4KIAogT24gc3VjY2VzcywgeW91IHdpbGwgc2VlIGEgc2VyaWVzIG9mICJQ
QVNTIiBtZXNzYWdlcywgZm9sbG93ZWQgYnkgIlRFU1QgQ09NUExFVEUiLgogCiBQQVNTIFBsYXlh
YmxlIHZpZGVvIGZvcm1hdCBmb3VuZAogUEFTUyBpbWcgd2FzIGxvYWRlZAogCi1jaGVjayB0aGF0
IGNvcHlpbmcgYW4gaW1nIGZyb20gYW5vdGhlciBvcmlnaW4gY2xlYXJzIHRoZSBvcmlnaW4tY2xl
YW4gZmxhZy4KLVBBU1Mgc2hvdWxkIG5vdCB0aHJvdyBleGNlcHRpb24gYnkgcmVhZFBpeGVscyBm
b3Igb3JpZ2luIGNsZWFuIGNhbnZhcy4KLVBBU1Mgc2hvdWxkIG5vdCB0aHJvdyBleGNlcHRpb24g
YnkgdG9EYXRhVVJMIGZvciBvcmlnaW4gY2xlYW4gY2FudmFzLgotUEFTUyBzaG91bGQgdGhyb3cg
ZXhjZXB0aW9uIGJ5IHJlYWRQaXhlbHMgZm9yIE5PTiBvcmlnaW4gY2xlYW4gY2FudmFzLgotUEFT
UyBzaG91bGQgdGhyb3cgZXhjZXB0aW9uIGJ5IHRvRGF0YVVSTCBmb3IgTk9OIG9yaWdpbiBjbGVh
biBjYW52YXMuCi0KLWNoZWNrIHRoYXQgY29weWluZyBmcm9tIDEgdW5jbGVhbiAzZCBjYW52YXMg
dG8gYW5vdGhlciBjbGVhcnMgdGhlIG9yaWdpbi1jbGVhbiBmbGFnIG9uIHRoZSBzZWNvbmQgY2Fu
dmFzLgotUEFTUyBzaG91bGQgbm90IHRocm93IGV4Y2VwdGlvbiBieSByZWFkUGl4ZWxzIGZvciBv
cmlnaW4gY2xlYW4gY2FudmFzLgotUEFTUyBzaG91bGQgbm90IHRocm93IGV4Y2VwdGlvbiBieSB0
b0RhdGFVUkwgZm9yIG9yaWdpbiBjbGVhbiBjYW52YXMuCi1QQVNTIHNob3VsZCB0aHJvdyBleGNl
cHRpb24gYnkgcmVhZFBpeGVscyBmb3IgTk9OIG9yaWdpbiBjbGVhbiBjYW52YXMuCi1QQVNTIHNo
b3VsZCB0aHJvdyBleGNlcHRpb24gYnkgdG9EYXRhVVJMIGZvciBOT04gb3JpZ2luIGNsZWFuIGNh
bnZhcy4KLQotY2hlY2sgdGhhdCBjb3B5aW5nIGZyb20gMSB1bmNsZWFuIDNkIGNhbnZhcyB0byBh
IDJkIGNhbnZhcyBjbGVhcnMgdGhlIG9yaWdpbi1jbGVhbiBmbGFnIG9uIHRoZSAyZCBjYW52YXMu
Ci1QQVNTIHNob3VsZCBub3QgdGhyb3cgZXhjZXB0aW9uIGJ5IHRvRGF0YVVSTCBmb3Igb3JpZ2lu
IGNsZWFuIGNhbnZhcy4KLVBBU1Mgc2hvdWxkIHRocm93IGV4Y2VwdGlvbiBieSB0b0RhdGFVUkwg
Zm9yIE5PTiBvcmlnaW4gY2xlYW4gY2FudmFzLgotCi1jaGVjayB0aGF0IGNvcHlpbmcgYSB2aWRl
byBmcm9tIGFub3RoZXIgb3JpZ2luIGNsZWFycyB0aGUgb3JpZ2luLWNsZWFuIGZsYWcuCi1QQVNT
IHNob3VsZCBub3QgdGhyb3cgZXhjZXB0aW9uIGJ5IHJlYWRQaXhlbHMgZm9yIG9yaWdpbiBjbGVh
biBjYW52YXMuCi1QQVNTIHNob3VsZCBub3QgdGhyb3cgZXhjZXB0aW9uIGJ5IHRvRGF0YVVSTCBm
b3Igb3JpZ2luIGNsZWFuIGNhbnZhcy4KLVBBU1Mgc2hvdWxkIHRocm93IGV4Y2VwdGlvbiBieSBy
ZWFkUGl4ZWxzIGZvciBOT04gb3JpZ2luIGNsZWFuIGNhbnZhcy4KK2NoZWNrIHRoYXQgYW4gYXR0
ZW1wdCB0byB1cGxvYWQgYW4gaW1hZ2UgZnJvbSBhbm90aGVyIG9yaWdpbiB0aHJvd3MgYW4gZXhj
ZXB0aW9uLgorUEFTUyB0ZXhJbWFnZTJEIHdpdGggY3Jvc3Mtb3JpZ2luIGltYWdlIHNob3VsZCB0
aHJvdyBleGNlcHRpb24uCitQQVNTIHRleFN1YkltYWdlMkQgd2l0aCBjcm9zcy1vcmlnaW4gaW1h
Z2Ugc2hvdWxkIHRocm93IGV4Y2VwdGlvbi4KK2NoZWNrIHRoYXQgcmVhZFBpeGVscyBhbmQgdG9E
YXRhVVJMIGNvbnRpbnVlIHRvIHdvcmsgYWdhaW5zdCB0aGlzIGNhbnZhcy4KK1BBU1MgcmVhZFBp
eGVscyBzaG91bGQgbmV2ZXIgdGhyb3cgZXhjZXB0aW9uIC0tIG5vdCBwb3NzaWJsZSB0byBkaXJ0
eSBvcmlnaW4gb2YgV2ViR0wgY2FudmFzLgorUEFTUyBzaG91bGQgbm90IHRocm93IGV4Y2VwdGlv
biBieSB0b0RhdGFVUkwgZm9yIFdlYkdMIGNhbnZhcywgd2hpY2ggc2hvdWxkIHN0YXkgb3JpZ2lu
IGNsZWFuLgorY2hlY2sgdGhhdCBhbiBhdHRlbXB0IHRvIHVwbG9hZCBhIHRhaW50ZWQgY2FudmFz
IHRocm93cyBhbiBleGNlcHRpb24uCiBQQVNTIHNob3VsZCB0aHJvdyBleGNlcHRpb24gYnkgdG9E
YXRhVVJMIGZvciBOT04gb3JpZ2luIGNsZWFuIGNhbnZhcy4KK1BBU1MgdGV4SW1hZ2UyRCB3aXRo
IE5PTiBvcmlnaW4gY2xlYW4gY2FudmFzIHNob3VsZCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHRl
eFN1YkltYWdlMkQgd2l0aCBOT04gb3JpZ2luIGNsZWFuIGNhbnZhcyBzaG91bGQgdGhyb3cgZXhj
ZXB0aW9uLgorY2hlY2sgdGhhdCByZWFkUGl4ZWxzIGFuZCB0b0RhdGFVUkwgY29udGludWUgdG8g
d29yayBhZ2FpbnN0IHRoaXMgY2FudmFzLgorUEFTUyByZWFkUGl4ZWxzIHNob3VsZCBuZXZlciB0
aHJvdyBleGNlcHRpb24gLS0gbm90IHBvc3NpYmxlIHRvIGRpcnR5IG9yaWdpbiBvZiBXZWJHTCBj
YW52YXMuCitQQVNTIHNob3VsZCBub3QgdGhyb3cgZXhjZXB0aW9uIGJ5IHRvRGF0YVVSTCBmb3Ig
V2ViR0wgY2FudmFzLCB3aGljaCBzaG91bGQgc3RheSBvcmlnaW4gY2xlYW4uCitjaGVjayB0aGF0
IGFuIGF0dGVtcHQgdG8gdXBsb2FkIGEgdmlkZW8gZnJvbSBhbm90aGVyIG9yaWdpbiB0aHJvd3Mg
YW4gZXhjZXB0aW9uLgorUEFTUyB0ZXhJbWFnZTJEIHdpdGggY3Jvc3Mtb3JpZ2luIHZpZGVvIHNo
b3VsZCB0aHJvdyBleGNlcHRpb24uCitQQVNTIHRleFN1YkltYWdlMkQgd2l0aCBjcm9zcy1vcmln
aW4gdmlkZW8gc2hvdWxkIHRocm93IGV4Y2VwdGlvbi4KK2NoZWNrIHRoYXQgcmVhZFBpeGVscyBh
bmQgdG9EYXRhVVJMIGNvbnRpbnVlIHRvIHdvcmsgYWdhaW5zdCB0aGlzIGNhbnZhcy4KK1BBU1Mg
cmVhZFBpeGVscyBzaG91bGQgbmV2ZXIgdGhyb3cgZXhjZXB0aW9uIC0tIG5vdCBwb3NzaWJsZSB0
byBkaXJ0eSBvcmlnaW4gb2YgV2ViR0wgY2FudmFzLgorUEFTUyBzaG91bGQgbm90IHRocm93IGV4
Y2VwdGlvbiBieSB0b0RhdGFVUkwgZm9yIFdlYkdMIGNhbnZhcywgd2hpY2ggc2hvdWxkIHN0YXkg
b3JpZ2luIGNsZWFuLgogCiBURVNUIENPTVBMRVRFCi0gICAKKyAKSW5kZXg6IExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvY2FudmFzL3dlYmdsL29yaWdpbi1jbGVhbi1jb25mb3JtYW5jZS5odG1sCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvY2FudmFzL3dlYmdsL29yaWdpbi1j
bGVhbi1jb25mb3JtYW5jZS5odG1sCShyZXZpc2lvbiA4ODMxNikKKysrIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvY2FudmFzL3dlYmdsL29yaWdpbi1jbGVhbi1jb25mb3JtYW5jZS5odG1sCSh3b3Jr
aW5nIGNvcHkpCkBAIC04Miw2ICs4Miw4IEBAIGZ1bmN0aW9uIGNhdXNlZEV4Y2VwdGlvbihmdW5j
KSB7CiAgIHJldHVybiBoYWRFeGNlcHRpb247CiB9CiAKK3ZhciB0ZXN0VmlkZW8gPSBmYWxzZTsK
KwogZnVuY3Rpb24gaW5pdCgpIHsKICAgdmFyIHZpZGVvID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5
SWQoInZpZGVvIik7CiAKQEAgLTEwOCw2ICsxMTAsNyBAQCBmdW5jdGlvbiBpbml0KCkgewogICAg
IHZpZGVvLnNyYyA9IHZpZGVvRmlsZTsKICAgICB2aWRlby5hZGRFdmVudExpc3RlbmVyKCJwbGF5
aW5nIiwgcnVuVGVzdHMpOwogICAgIHZpZGVvLnBsYXkoKTsKKyAgICB0ZXN0VmlkZW8gPSB0cnVl
OwogICB9IGVsc2UgewogICAgIC8vIFN0aWxsIHJ1biB0aGUgb3RoZXIgdGVzdHMsIGV2ZW4gaWYg
dGhlIHZpZGVvIGZhaWxlZC4KICAgICBydW5UZXN0cygpOwpAQCAtMTE1LDEwICsxMTgsMjIgQEAg
ZnVuY3Rpb24gaW5pdCgpIHsKIH0KIAogZnVuY3Rpb24gcnVuVGVzdHMoKSB7Ci0gIGRlc2NyaXB0
aW9uKCJUaGlzIHRlc3QgZW5zdXJlcyBXZWJHTCBpbXBsZW1lbnRhdGlvbnMgZm9sbG93IHByb3Bl
ciBvcmlnaW4gcmVzdHJpY3Rpb25zLiIpOworICBkZXNjcmlwdGlvbigiVGhpcyB0ZXN0IGVuc3Vy
ZXMgV2ViR0wgaW1wbGVtZW50YXRpb25zIGZvbGxvdyBwcm9wZXIgc2FtZS1vcmlnaW4gcmVzdHJp
Y3Rpb25zLiIpOwogICB2YXIgaW1nID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImltZyIpOwog
ICBhc3NlcnRNc2coaW1nLndpZHRoID4gMCAmJiBpbWcuaGVpZ2h0ID4gMCwgImltZyB3YXMgbG9h
ZGVkIik7CiAKKyAgZnVuY3Rpb24gbWFrZVRleEltYWdlMkQoZ2wsIHNyYykgeworICAgIHJldHVy
biBmdW5jdGlvbigpIHsKKyAgICAgIGdsLnRleEltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgZ2wu
UkdCQSwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgc3JjKTsKKyAgICB9OworICB9CisKKyAg
ZnVuY3Rpb24gbWFrZVRleFN1YkltYWdlMkQoZ2wsIHNyYykgeworICAgIHJldHVybiBmdW5jdGlv
bigpIHsKKyAgICAgIGdsLnRleFN1YkltYWdlMkQoZ2wuVEVYVFVSRV8yRCwgMCwgMCwgMCwgZ2wu
UkdCQSwgZ2wuVU5TSUdORURfQllURSwgc3JjKTsKKyAgICB9OworICB9CisKICAgZnVuY3Rpb24g
bWFrZVJlYWRQaXhlbHMoZ2wpIHsKICAgICByZXR1cm4gZnVuY3Rpb24oKSB7CiAgICAgICB2YXIg
YnVmID0gbmV3IFVpbnQ4QXJyYXkoNCk7CkBAIC0xMzIsNzAgKzE0Nyw1NiBAQCBmdW5jdGlvbiBy
dW5UZXN0cygpIHsKICAgICB9CiAgIH0KIAotICBkZWJ1ZygiIik7Ci0gIGRlYnVnKCJjaGVjayB0
aGF0IGNvcHlpbmcgYW4gaW1nIGZyb20gYW5vdGhlciBvcmlnaW4gY2xlYXJzIHRoZSBvcmlnaW4t
Y2xlYW4gZmxhZy4iKTsKICAgdmFyIGNhbnZhczEgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgi
Y2FudmFzMSIpOwotICB2YXIgZ2wxID0gY3JlYXRlM0RDb250ZXh0KGNhbnZhczEpOwotICBhc3Nl
cnRNc2coIWNhdXNlZEV4Y2VwdGlvbihtYWtlUmVhZFBpeGVscyhnbDEpKSwKLSAgICAgICAgICAg
ICJzaG91bGQgbm90IHRocm93IGV4Y2VwdGlvbiBieSByZWFkUGl4ZWxzIGZvciBvcmlnaW4gY2xl
YW4gY2FudmFzLiIpOwotICBhc3NlcnRNc2coIWNhdXNlZEV4Y2VwdGlvbihtYWtlVG9EYXRhVVJM
KGNhbnZhczEpKSwKLSAgICAgICAgICAgICJzaG91bGQgbm90IHRocm93IGV4Y2VwdGlvbiBieSB0
b0RhdGFVUkwgZm9yIG9yaWdpbiBjbGVhbiBjYW52YXMuIik7Ci0KLSAgdmFyIHRleCA9IGdsMS5j
cmVhdGVUZXh0dXJlKCk7Ci0gIGdsMS5iaW5kVGV4dHVyZShnbDEuVEVYVFVSRV8yRCwgdGV4KTsK
LSAgZ2wxLnRleEltYWdlMkQoZ2wxLlRFWFRVUkVfMkQsIDAsIGdsMS5SR0JBLCBnbDEuUkdCQSwg
Z2wxLlVOU0lHTkVEX0JZVEUsIGltZyk7Ci0KLSAgYXNzZXJ0TXNnKGNhdXNlZEV4Y2VwdGlvbiht
YWtlUmVhZFBpeGVscyhnbDEpKSwKLSAgICAgICAgICAgICJzaG91bGQgdGhyb3cgZXhjZXB0aW9u
IGJ5IHJlYWRQaXhlbHMgZm9yIE5PTiBvcmlnaW4gY2xlYW4gY2FudmFzLiIpOwotICBhc3NlcnRN
c2coY2F1c2VkRXhjZXB0aW9uKG1ha2VUb0RhdGFVUkwoY2FudmFzMSkpLAotICAgICAgICAgICAg
InNob3VsZCB0aHJvdyBleGNlcHRpb24gYnkgdG9EYXRhVVJMIGZvciBOT04gb3JpZ2luIGNsZWFu
IGNhbnZhcy4iKTsKKyAgdmFyIGdsID0gY3JlYXRlM0RDb250ZXh0KGNhbnZhczEpOwogCiAgIGRl
YnVnKCIiKTsKLSAgZGVidWcoImNoZWNrIHRoYXQgY29weWluZyBmcm9tIDEgdW5jbGVhbiAzZCBj
YW52YXMgdG8gYW5vdGhlciBjbGVhcnMgdGhlIG9yaWdpbi1jbGVhbiBmbGFnIG9uIHRoZSBzZWNv
bmQgY2FudmFzLiIpOwotICB2YXIgY2FudmFzMiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJj
YW52YXMyIik7Ci0gIHZhciBnbDIgPSBjcmVhdGUzRENvbnRleHQoY2FudmFzMik7Ci0KLSAgYXNz
ZXJ0TXNnKCFjYXVzZWRFeGNlcHRpb24obWFrZVJlYWRQaXhlbHMoZ2wyKSksCi0gICAgICAgICAg
ICAic2hvdWxkIG5vdCB0aHJvdyBleGNlcHRpb24gYnkgcmVhZFBpeGVscyBmb3Igb3JpZ2luIGNs
ZWFuIGNhbnZhcy4iKTsKLSAgYXNzZXJ0TXNnKCFjYXVzZWRFeGNlcHRpb24obWFrZVRvRGF0YVVS
TChjYW52YXMyKSksCi0gICAgICAgICAgICAic2hvdWxkIG5vdCB0aHJvdyBleGNlcHRpb24gYnkg
dG9EYXRhVVJMIGZvciBvcmlnaW4gY2xlYW4gY2FudmFzLiIpOwotCi0gIHZhciB0ZXggPSBnbDIu
Y3JlYXRlVGV4dHVyZSgpOwotICBnbDIuYmluZFRleHR1cmUoZ2wyLlRFWFRVUkVfMkQsIHRleCk7
Ci0gIGdsMi50ZXhJbWFnZTJEKAotICAgICBnbDIuVEVYVFVSRV8yRCwgMCwgZ2wyLlJHQkEsIGds
Mi5SR0JBLCBnbDIuVU5TSUdORURfQllURSwgY2FudmFzMSk7CisgIGRlYnVnKCJjaGVjayB0aGF0
IGFuIGF0dGVtcHQgdG8gdXBsb2FkIGFuIGltYWdlIGZyb20gYW5vdGhlciBvcmlnaW4gdGhyb3dz
IGFuIGV4Y2VwdGlvbi4iKTsKKyAgdmFyIHRleCA9IGdsLmNyZWF0ZVRleHR1cmUoKTsKKyAgZ2wu
YmluZFRleHR1cmUoZ2wuVEVYVFVSRV8yRCwgdGV4KTsKKyAgZ2wudGV4SW1hZ2UyRChnbC5URVhU
VVJFXzJELCAwLCBnbC5SR0JBLCAyNTYsIDI1NiwgMCwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllU
RSwgbnVsbCk7CisgIGFzc2VydE1zZyhjYXVzZWRFeGNlcHRpb24obWFrZVRleEltYWdlMkQoZ2ws
IGltZykpLAorICAgICAgICAgICAgInRleEltYWdlMkQgd2l0aCBjcm9zcy1vcmlnaW4gaW1hZ2Ug
c2hvdWxkIHRocm93IGV4Y2VwdGlvbi4iKTsKKyAgYXNzZXJ0TXNnKGNhdXNlZEV4Y2VwdGlvbiht
YWtlVGV4U3ViSW1hZ2UyRChnbCwgaW1nKSksCisgICAgICAgICAgICAidGV4U3ViSW1hZ2UyRCB3
aXRoIGNyb3NzLW9yaWdpbiBpbWFnZSBzaG91bGQgdGhyb3cgZXhjZXB0aW9uLiIpOworCisgIGRl
YnVnKCJjaGVjayB0aGF0IHJlYWRQaXhlbHMgYW5kIHRvRGF0YVVSTCBjb250aW51ZSB0byB3b3Jr
IGFnYWluc3QgdGhpcyBjYW52YXMuIik7CisgIGFzc2VydE1zZyghY2F1c2VkRXhjZXB0aW9uKG1h
a2VSZWFkUGl4ZWxzKGdsKSksCisgICAgICAgICAgICAicmVhZFBpeGVscyBzaG91bGQgbmV2ZXIg
dGhyb3cgZXhjZXB0aW9uIC0tIG5vdCBwb3NzaWJsZSB0byBkaXJ0eSBvcmlnaW4gb2YgV2ViR0wg
Y2FudmFzLiIpOworICBhc3NlcnRNc2coIWNhdXNlZEV4Y2VwdGlvbihtYWtlVG9EYXRhVVJMKGNh
bnZhczEpKSwKKyAgICAgICAgICAgICJzaG91bGQgbm90IHRocm93IGV4Y2VwdGlvbiBieSB0b0Rh
dGFVUkwgZm9yIFdlYkdMIGNhbnZhcywgd2hpY2ggc2hvdWxkIHN0YXkgb3JpZ2luIGNsZWFuLiIp
OwogCi0gIGFzc2VydE1zZyhjYXVzZWRFeGNlcHRpb24obWFrZVJlYWRQaXhlbHMoZ2wyKSksCi0g
ICAgICAgICAgICAic2hvdWxkIHRocm93IGV4Y2VwdGlvbiBieSByZWFkUGl4ZWxzIGZvciBOT04g
b3JpZ2luIGNsZWFuIGNhbnZhcy4iKTsKKyAgZGVidWcoImNoZWNrIHRoYXQgYW4gYXR0ZW1wdCB0
byB1cGxvYWQgYSB0YWludGVkIGNhbnZhcyB0aHJvd3MgYW4gZXhjZXB0aW9uLiIpOworICB2YXIg
Y2FudmFzMiA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJjYW52YXMyIik7CisgIHZhciBjdHgy
ZCA9IGNhbnZhczIuZ2V0Q29udGV4dCgiMmQiKTsKKyAgY3R4MmQuZHJhd0ltYWdlKGltZywgMCwg
MCk7CiAgIGFzc2VydE1zZyhjYXVzZWRFeGNlcHRpb24obWFrZVRvRGF0YVVSTChjYW52YXMyKSks
CiAgICAgICAgICAgICAic2hvdWxkIHRocm93IGV4Y2VwdGlvbiBieSB0b0RhdGFVUkwgZm9yIE5P
TiBvcmlnaW4gY2xlYW4gY2FudmFzLiIpOworICBhc3NlcnRNc2coY2F1c2VkRXhjZXB0aW9uKG1h
a2VUZXhJbWFnZTJEKGdsLCBjYW52YXMyKSksCisgICAgICAgICAgICAidGV4SW1hZ2UyRCB3aXRo
IE5PTiBvcmlnaW4gY2xlYW4gY2FudmFzIHNob3VsZCB0aHJvdyBleGNlcHRpb24uIik7CisgIGFz
c2VydE1zZyhjYXVzZWRFeGNlcHRpb24obWFrZVRleFN1YkltYWdlMkQoZ2wsIGNhbnZhczIpKSwK
KyAgICAgICAgICAgICJ0ZXhTdWJJbWFnZTJEIHdpdGggTk9OIG9yaWdpbiBjbGVhbiBjYW52YXMg
c2hvdWxkIHRocm93IGV4Y2VwdGlvbi4iKTsKKworICBkZWJ1ZygiY2hlY2sgdGhhdCByZWFkUGl4
ZWxzIGFuZCB0b0RhdGFVUkwgY29udGludWUgdG8gd29yayBhZ2FpbnN0IHRoaXMgY2FudmFzLiIp
OworICBhc3NlcnRNc2coIWNhdXNlZEV4Y2VwdGlvbihtYWtlUmVhZFBpeGVscyhnbCkpLAorICAg
ICAgICAgICAgInJlYWRQaXhlbHMgc2hvdWxkIG5ldmVyIHRocm93IGV4Y2VwdGlvbiAtLSBub3Qg
cG9zc2libGUgdG8gZGlydHkgb3JpZ2luIG9mIFdlYkdMIGNhbnZhcy4iKTsKKyAgYXNzZXJ0TXNn
KCFjYXVzZWRFeGNlcHRpb24obWFrZVRvRGF0YVVSTChjYW52YXMxKSksCisgICAgICAgICAgICAi
c2hvdWxkIG5vdCB0aHJvdyBleGNlcHRpb24gYnkgdG9EYXRhVVJMIGZvciBXZWJHTCBjYW52YXMs
IHdoaWNoIHNob3VsZCBzdGF5IG9yaWdpbiBjbGVhbi4iKTsKIAotICBkZWJ1ZygiIik7Ci0gIGRl
YnVnKCJjaGVjayB0aGF0IGNvcHlpbmcgZnJvbSAxIHVuY2xlYW4gM2QgY2FudmFzIHRvIGEgMmQg
Y2FudmFzIGNsZWFycyB0aGUgb3JpZ2luLWNsZWFuIGZsYWcgb24gdGhlIDJkIGNhbnZhcy4iKTsK
LSAgdmFyIGNhbnZhczMgPSBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgiY2FudmFzMyIpOwotICB2
YXIgY3R4MmQgPSBjYW52YXMzLmdldENvbnRleHQoIjJkIik7Ci0gIGFzc2VydE1zZyghY2F1c2Vk
RXhjZXB0aW9uKG1ha2VUb0RhdGFVUkwoY2FudmFzMykpLAotICAgICAgICAgICAgInNob3VsZCBu
b3QgdGhyb3cgZXhjZXB0aW9uIGJ5IHRvRGF0YVVSTCBmb3Igb3JpZ2luIGNsZWFuIGNhbnZhcy4i
KTsKLSAgY3R4MmQuZHJhd0ltYWdlKGNhbnZhczIsIDAsIDApOwotICBhc3NlcnRNc2coY2F1c2Vk
RXhjZXB0aW9uKG1ha2VUb0RhdGFVUkwoY2FudmFzMykpLAotICAgICAgICAgICAgInNob3VsZCB0
aHJvdyBleGNlcHRpb24gYnkgdG9EYXRhVVJMIGZvciBOT04gb3JpZ2luIGNsZWFuIGNhbnZhcy4i
KTsKLQotICBkZWJ1ZygiIik7Ci0gIGRlYnVnKCJjaGVjayB0aGF0IGNvcHlpbmcgYSB2aWRlbyBm
cm9tIGFub3RoZXIgb3JpZ2luIGNsZWFycyB0aGUgb3JpZ2luLWNsZWFuIGZsYWcuIik7Ci0gIHZh
ciBjYW52YXM0ID0gZG9jdW1lbnQuZ2V0RWxlbWVudEJ5SWQoImNhbnZhczQiKTsKLSAgdmFyIGds
NCA9IGNyZWF0ZTNEQ29udGV4dChjYW52YXM0KTsKLSAgYXNzZXJ0TXNnKCFjYXVzZWRFeGNlcHRp
b24obWFrZVJlYWRQaXhlbHMoZ2w0KSksCi0gICAgICAgICAgICAic2hvdWxkIG5vdCB0aHJvdyBl
eGNlcHRpb24gYnkgcmVhZFBpeGVscyBmb3Igb3JpZ2luIGNsZWFuIGNhbnZhcy4iKTsKLSAgYXNz
ZXJ0TXNnKCFjYXVzZWRFeGNlcHRpb24obWFrZVRvRGF0YVVSTChjYW52YXM0KSksCi0gICAgICAg
ICAgICAic2hvdWxkIG5vdCB0aHJvdyBleGNlcHRpb24gYnkgdG9EYXRhVVJMIGZvciBvcmlnaW4g
Y2xlYW4gY2FudmFzLiIpOwotICB2YXIgdGV4NCA9IGdsNC5jcmVhdGVUZXh0dXJlKCk7Ci0gIGds
NC5iaW5kVGV4dHVyZShnbDQuVEVYVFVSRV8yRCwgdGV4NCk7Ci0gIGdsNC50ZXhJbWFnZTJEKAot
ICAgICAgZ2w0LlRFWFRVUkVfMkQsIDAsIGdsNC5SR0JBLCBnbDQuUkdCQSwgZ2w0LlVOU0lHTkVE
X0JZVEUsIHZpZGVvKTsKLSAgYXNzZXJ0TXNnKGNhdXNlZEV4Y2VwdGlvbihtYWtlUmVhZFBpeGVs
cyhnbDQpKSwKLSAgICAgICAgICAgICJzaG91bGQgdGhyb3cgZXhjZXB0aW9uIGJ5IHJlYWRQaXhl
bHMgZm9yIE5PTiBvcmlnaW4gY2xlYW4gY2FudmFzLiIpOwotICBhc3NlcnRNc2coY2F1c2VkRXhj
ZXB0aW9uKG1ha2VUb0RhdGFVUkwoY2FudmFzNCkpLAotICAgICAgICAgICAgInNob3VsZCB0aHJv
dyBleGNlcHRpb24gYnkgdG9EYXRhVVJMIGZvciBOT04gb3JpZ2luIGNsZWFuIGNhbnZhcy4iKTsK
KyAgaWYgKHRlc3RWaWRlbykgeworICAgIGRlYnVnKCJjaGVjayB0aGF0IGFuIGF0dGVtcHQgdG8g
dXBsb2FkIGEgdmlkZW8gZnJvbSBhbm90aGVyIG9yaWdpbiB0aHJvd3MgYW4gZXhjZXB0aW9uLiIp
OworICAgIHZhciB2aWRlbyA9IGRvY3VtZW50LmdldEVsZW1lbnRCeUlkKCJ2aWRlbyIpOworICAg
IGFzc2VydE1zZyhjYXVzZWRFeGNlcHRpb24obWFrZVRleEltYWdlMkQoZ2wsIHZpZGVvKSksCisg
ICAgICAgICAgICAgICJ0ZXhJbWFnZTJEIHdpdGggY3Jvc3Mtb3JpZ2luIHZpZGVvIHNob3VsZCB0
aHJvdyBleGNlcHRpb24uIik7CisgICAgYXNzZXJ0TXNnKGNhdXNlZEV4Y2VwdGlvbihtYWtlVGV4
U3ViSW1hZ2UyRChnbCwgdmlkZW8pKSwKKyAgICAgICAgICAgICAgInRleFN1YkltYWdlMkQgd2l0
aCBjcm9zcy1vcmlnaW4gdmlkZW8gc2hvdWxkIHRocm93IGV4Y2VwdGlvbi4iKTsKKworICAgIGRl
YnVnKCJjaGVjayB0aGF0IHJlYWRQaXhlbHMgYW5kIHRvRGF0YVVSTCBjb250aW51ZSB0byB3b3Jr
IGFnYWluc3QgdGhpcyBjYW52YXMuIik7CisgICAgYXNzZXJ0TXNnKCFjYXVzZWRFeGNlcHRpb24o
bWFrZVJlYWRQaXhlbHMoZ2wpKSwKKyAgICAgICAgICAgICAgInJlYWRQaXhlbHMgc2hvdWxkIG5l
dmVyIHRocm93IGV4Y2VwdGlvbiAtLSBub3QgcG9zc2libGUgdG8gZGlydHkgb3JpZ2luIG9mIFdl
YkdMIGNhbnZhcy4iKTsKKyAgICBhc3NlcnRNc2coIWNhdXNlZEV4Y2VwdGlvbihtYWtlVG9EYXRh
VVJMKGNhbnZhczEpKSwKKyAgICAgICAgICAgICAgInNob3VsZCBub3QgdGhyb3cgZXhjZXB0aW9u
IGJ5IHRvRGF0YVVSTCBmb3IgV2ViR0wgY2FudmFzLCB3aGljaCBzaG91bGQgc3RheSBvcmlnaW4g
Y2xlYW4uIik7CisgIH0KIAogICBkZWJ1ZygnPGJyIC8+PHNwYW4gY2xhc3M9InBhc3MiPlRFU1Qg
Q09NUExFVEU8L3NwYW4+Jyk7CiAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCkBA
IC0yMTEsOCArMjEyLDYgQEAgZnVuY3Rpb24gcnVuVGVzdHMoKSB7CiA8ZGl2IGlkPSJjb25zb2xl
Ij48L2Rpdj4KIDxjYW52YXMgaWQ9ImNhbnZhczEiPjwvY2FudmFzPgogPGNhbnZhcyBpZD0iY2Fu
dmFzMiI+PC9jYW52YXM+Ci08Y2FudmFzIGlkPSJjYW52YXMzIj48L2NhbnZhcz4KLTxjYW52YXMg
aWQ9ImNhbnZhczQiPjwvY2FudmFzPgogPGltZyBpZD0iaW1nIiBzcmM9Imh0dHA6Ly9sb2NhbGhv
c3Q6ODAwMC9sb2NhbC9yZXNvdXJjZXMvYWJlLnBuZyIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiPgog
PHZpZGVvIGlkPSJ2aWRlbyIgc3R5bGU9ImRpc3BsYXk6bm9uZTsiLz4KIDwvYm9keT4KSW5kZXg6
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvd2ViZ2wtcmVtb3RlLXJlYWQtcmVtb3Rl
LWltYWdlLWFsbG93ZWQtZXhwZWN0ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0
dHAvdGVzdHMvc2VjdXJpdHkvd2ViZ2wtcmVtb3RlLXJlYWQtcmVtb3RlLWltYWdlLWFsbG93ZWQt
ZXhwZWN0ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1
cml0eS93ZWJnbC1yZW1vdGUtcmVhZC1yZW1vdGUtaW1hZ2UtYWxsb3dlZC1leHBlY3RlZC50eHQJ
KHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKK1VudGFpbnRlZCBjYW52YXM6CitQQVNTOiBD
YWxsaW5nIHJlYWRQaXhlbHMoKSBmcm9tIGFuIHVudGFpbnRlZCBjYW52YXMgd2FzIGFsbG93ZWQu
CitQQVNTOiBDYWxsaW5nIHRvRGF0YVVSTCgpIG9uIGFuIHVudGFpbnRlZCBjYW52YXMgd2FzIGFs
bG93ZWQuCisKKworVGFpbnRlZCBjYW52YXM6CitQQVNTOiBDYWxsaW5nIHRleEltYWdlMkQoKSB3
aXRoIGFuIHVudGFpbnRlZCBpbWFnZSB3YXMgYWxsb3dlZAorUEFTUzogQ2FsbGluZyByZWFkUGl4
ZWxzKCkgZnJvbSBhIGNhbnZhcyB0YWludGVkIGJ5IGEgcmVtb3RlIGltYWdlIHdhcyBhbGxvd2Vk
LgorUEFTUzogQ2FsbGluZyB0b0RhdGFVUkwoKSBvbiBhIGNhbnZhcyBDT1JTLXVudGFpbnRlZCBi
eSBhIHJlbW90ZSBpbWFnZSB3YXMgYWxsb3dlZC4KK1BBU1M6IENhbGxpbmcgdGV4SW1hZ2UyRCgp
IHdpdGggYW4gdW50YWludGVkIGNhbnZhcyB3YXMgYWxsb3dlZAorUEFTUzogQ2FsbGluZyByZWFk
UGl4ZWxzKCkgZnJvbSBhIGNhbnZhcyB0YWludGVkIGJ5IGEgQ09SUy11bnRhaW5lZCBjYW52YXMg
d2FzIGFsbG93ZWQuCitQQVNTOiBDYWxsaW5nIHRvRGF0YVVSTCgpIG9uIGEgY2FudmFzIENPUlMt
dW50YWludGVkIGJ5IGEgQ09SUy11bnRhaW5lZCBjYW52YXMgd2FzIGFsbG93ZWQuCisKSW5kZXg6
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvd2ViZ2wtcmVtb3RlLXJlYWQtcmVtb3Rl
LWltYWdlLWFsbG93ZWQtd2l0aC1jcmVkZW50aWFscy1leHBlY3RlZC50eHQKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS93ZWJnbC1yZW1vdGUtcmVhZC1yZW1v
dGUtaW1hZ2UtYWxsb3dlZC13aXRoLWNyZWRlbnRpYWxzLWV4cGVjdGVkLnR4dAkocmV2aXNpb24g
MCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvd2ViZ2wtcmVtb3RlLXJlYWQt
cmVtb3RlLWltYWdlLWFsbG93ZWQtd2l0aC1jcmVkZW50aWFscy1leHBlY3RlZC50eHQJKHJldmlz
aW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKK1VudGFpbnRlZCBjYW52YXM6CitQQVNTOiBDYWxsaW5n
IHJlYWRQaXhlbHMoKSBmcm9tIGFuIHVudGFpbnRlZCBjYW52YXMgd2FzIGFsbG93ZWQuCitQQVNT
OiBDYWxsaW5nIHRvRGF0YVVSTCgpIG9uIGFuIHVudGFpbnRlZCBjYW52YXMgd2FzIGFsbG93ZWQu
CisKKworVGFpbnRlZCBjYW52YXM6CitQQVNTOiBDYWxsaW5nIHRleEltYWdlMkQoKSB3aXRoIGFu
IHVudGFpbnRlZCBpbWFnZSB3YXMgYWxsb3dlZAorUEFTUzogQ2FsbGluZyByZWFkUGl4ZWxzKCkg
ZnJvbSBhIGNhbnZhcyB0YWludGVkIGJ5IGEgcmVtb3RlIGltYWdlIHdhcyBhbGxvd2VkLgorUEFT
UzogQ2FsbGluZyB0b0RhdGFVUkwoKSBvbiBhIGNhbnZhcyBDT1JTLXVudGFpbnRlZCBieSBhIHJl
bW90ZSBpbWFnZSB3YXMgYWxsb3dlZC4KK1BBU1M6IENhbGxpbmcgdGV4SW1hZ2UyRCgpIHdpdGgg
YW4gdW50YWludGVkIGNhbnZhcyB3YXMgYWxsb3dlZAorUEFTUzogQ2FsbGluZyByZWFkUGl4ZWxz
KCkgZnJvbSBhIGNhbnZhcyB0YWludGVkIGJ5IGEgQ09SUy11bnRhaW5lZCBjYW52YXMgd2FzIGFs
bG93ZWQuCitQQVNTOiBDYWxsaW5nIHRvRGF0YVVSTCgpIG9uIGEgY2FudmFzIENPUlMtdW50YWlu
dGVkIGJ5IGEgQ09SUy11bnRhaW5lZCBjYW52YXMgd2FzIGFsbG93ZWQuCisKSW5kZXg6IExheW91
dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvd2ViZ2wtcmVtb3RlLXJlYWQtcmVtb3RlLWltYWdl
LWFsbG93ZWQtd2l0aC1jcmVkZW50aWFscy5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvc2VjdXJpdHkvd2ViZ2wtcmVtb3RlLXJlYWQtcmVtb3RlLWltYWdlLWFsbG93
ZWQtd2l0aC1jcmVkZW50aWFscy5odG1sCShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0
cC90ZXN0cy9zZWN1cml0eS93ZWJnbC1yZW1vdGUtcmVhZC1yZW1vdGUtaW1hZ2UtYWxsb3dlZC13
aXRoLWNyZWRlbnRpYWxzLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAxIEBACis8cHJl
IGlkPSJjb25zb2xlIj48L3ByZT4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCJX
ZWJLaXRXZWJHTEVuYWJsZWQiLCAiMSIpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBB
c1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisK
K2xvZyA9IGZ1bmN0aW9uKG1zZykKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29u
c29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1zZyArICJcbiIpKTsK
K30KKwordGVzdFRleEltYWdlMkQgPSBmdW5jdGlvbihnbCwgc291cmNlLCBkZXNjcmlwdGlvbikK
K3sKKyAgICBkZXNjcmlwdGlvbiA9ICJDYWxsaW5nIHRleEltYWdlMkQoKSB3aXRoIGFuIHVudGFp
bnRlZCAiICsgZGVzY3JpcHRpb247CisgICAgdHJ5IHsKKyAgICAgICAgZ2wudGV4SW1hZ2UyRChn
bC5URVhUVVJFXzJELCAwLCBnbC5SR0JBLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBzb3Vy
Y2UpOworICAgICAgICBsb2coIlBBU1M6ICIgKyBkZXNjcmlwdGlvbiArICIgd2FzIGFsbG93ZWQi
KTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGxvZygiRkFJTDogIiArIGRlc2NyaXB0aW9u
ICsgIiB3YXMgbm90IGFsbG93ZWQ6IFRocmV3IGVycm9yOiAiICsgZSArICIuIik7CisgICAgfQor
fQorCit0ZXN0UmVhZFBpeGVscyA9IGZ1bmN0aW9uKGdsLCBkZXNjcmlwdGlvbikKK3sKKyAgICBk
ZXNjcmlwdGlvbiA9ICJDYWxsaW5nIHJlYWRQaXhlbHMoKSBmcm9tIGEgY2FudmFzIHRhaW50ZWQg
YnkgYSAiICsgZGVzY3JpcHRpb247CisgICAgdHJ5IHsKKyAgICAgICAgdmFyIHBpeGVscyA9IG5l
dyBVaW50OEFycmF5KDQpOworICAgICAgICBnbC5yZWFkUGl4ZWxzKDAsIDAsIDEsIDEsIGdsLlJH
QkEsIGdsLlVOU0lHTkVEX0JZVEUsIHBpeGVscyk7CisgICAgICAgIGxvZygiUEFTUzogIiArIGRl
c2NyaXB0aW9uICsgIiB3YXMgYWxsb3dlZC4iKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAg
IGxvZygiRkFJTDogIiArIGRlc2NyaXB0aW9uICsgIiB3YXMgbm90IGFsbG93ZWQgLSBUaHJldyBl
cnJvcjogIiArIGUgKyAiLiIpOworICAgIH0KK30KKwordGVzdFRvRGF0YVVSTCA9IGZ1bmN0aW9u
KGNhbnZhcywgZGVzY3JpcHRpb24pCit7CisgICAgZGVzY3JpcHRpb24gPSAiQ2FsbGluZyB0b0Rh
dGFVUkwoKSBvbiBhIGNhbnZhcyBDT1JTLXVudGFpbnRlZCBieSBhICIgKyBkZXNjcmlwdGlvbjsK
KyAgICB0cnkgeworICAgICAgICB2YXIgZGF0YVVSTCA9IGNhbnZhcy50b0RhdGFVUkwoKTsKKyAg
ICAgICAgbG9nKCJQQVNTOiAiICsgZGVzY3JpcHRpb24gKyAiIHdhcyBhbGxvd2VkLiIpOworICAg
IH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgbG9nKCJGQUlMOiAiICsgZGVzY3JpcHRpb24gKyAiIHdh
cyBub3QgYWxsb3dlZCAtIFRocmV3IGVycm9yOiAiICsgZSArICIuIik7CisgICAgfQorfQorCit0
ZXN0ID0gZnVuY3Rpb24oY2FudmFzLCBkZXNjcmlwdGlvbikKK3sKKyAgICB0ZXN0UmVhZFBpeGVs
cyhjYW52YXMuZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIiksIGRlc2NyaXB0aW9uKTsK
KyAgICB0ZXN0VG9EYXRhVVJMKGNhbnZhcywgZGVzY3JpcHRpb24pOworfQorCit2YXIgaW1hZ2Ug
PSBuZXcgSW1hZ2UoKTsKK2ltYWdlLm9ubG9hZCA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBjYW52
YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTsKKyAgICBjYW52YXMud2lkdGgg
PSAxMDA7CisgICAgY2FudmFzLmhlaWdodCA9IDEwMDsKKyAgICB2YXIgZ2wgPSBjYW52YXMuZ2V0
Q29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmdsIik7CisKKyAgICAvLyBDb250cm9sIHRlc3RzCisg
ICAgbG9nKCJVbnRhaW50ZWQgY2FudmFzOiIpOworICAgIHRyeSB7CisgICAgICAgIHZhciBwaXhl
bHMgPSBuZXcgVWludDhBcnJheSg0KTsKKyAgICAgICAgZ2wucmVhZFBpeGVscygwLCAwLCAxLCAx
LCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBwaXhlbHMpOworICAgICAgICBsb2coIlBBU1M6
IENhbGxpbmcgcmVhZFBpeGVscygpIGZyb20gYW4gdW50YWludGVkIGNhbnZhcyB3YXMgYWxsb3dl
ZC4iKTsKKyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGxvZygiRkFJTDogQ2FsbGluZyByZWFk
UGl4ZWxzKCkgZnJvbSBhbiB1bnRhaW50ZWQgY2FudmFzIHdhcyBub3QgYWxsb3dlZDogVGhyZXcg
ZXJyb3I6ICIgKyBlICsgIi4iKTsKKyAgICB9CisgICAgdHJ5IHsKKyAgICAgICAgdmFyIGRhdGFV
UkwgPSBjYW52YXMudG9EYXRhVVJMKCk7CisgICAgICAgIGxvZygiUEFTUzogQ2FsbGluZyB0b0Rh
dGFVUkwoKSBvbiBhbiB1bnRhaW50ZWQgY2FudmFzIHdhcyBhbGxvd2VkLiIpOworICAgIH0gY2F0
Y2ggKGUpIHsKKyAgICAgICAgbG9nKCJGQUlMOiBDYWxsaW5nIHRvRGF0YVVSTCgpIG9uIGFuIHVu
dGFpbnRlZCBjYW52YXMgd2FzIG5vdCBhbGxvd2VkOiBUaHJldyBlcnJvcjogIiArIGUgKyAiLiIp
OworICAgIH0KKworICAgIGxvZygiXG4iKTsKKyAgICBsb2coIlRhaW50ZWQgY2FudmFzOiIpOwor
ICAgIC8vIFRlc3QgcmVhZGluZyBmcm9tIGEgY2FudmFzIGFmdGVyIHVwbG9hZGluZyBhIHJlbW90
ZSBpbWFnZSBhcyBhIHRleHR1cmUKKyAgICB2YXIgdGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUo
KTsKKyAgICBnbC5iaW5kVGV4dHVyZShnbC5URVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICB0ZXN0
VGV4SW1hZ2UyRChnbCwgaW1hZ2UsICJpbWFnZSIpOworCisgICAgdGVzdChjYW52YXMsICJyZW1v
dGUgaW1hZ2UiKTsKKworICAgIC8vIE5vdyB0ZXN0IHJlYWRpbmcgZnJvbSBhIGNhbnZhcyBhZnRl
ciB1cGxvYWRpbmcgYSB0YWludGVkIGNhbnZhcyBvbnRvIGl0CisgICAgdmFyIGRpcnR5Q2FudmFz
ID0gZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIik7CisgICAgZGlydHlDYW52YXMud2lk
dGggPSAxMDA7CisgICAgZGlydHlDYW52YXMuaGVpZ2h0ID0gMTAwOworICAgIHZhciBkaXJ0eUNv
bnRleHQgPSBkaXJ0eUNhbnZhcy5nZXRDb250ZXh0KCIyZCIpOworICAgIGRpcnR5Q29udGV4dC5k
cmF3SW1hZ2UoaW1hZ2UsIDAsIDAsIDEwMCwgMTAwKTsKKyAgICB0ZXN0VGV4SW1hZ2UyRChnbCwg
ZGlydHlDYW52YXMsICJjYW52YXMiKTsKKworICAgIHRlc3QoY2FudmFzLCAiQ09SUy11bnRhaW5l
ZCBjYW52YXMiKTsKKworICAgIGlmICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpCisgICAg
ICAgIGxheW91dFRlc3RDb250cm9sbGVyLm5vdGlmeURvbmUoKTsKK30KK2ltYWdlLmNyb3NzT3Jp
Z2luID0gInVzZS1jcmVkZW50aWFscyI7CitpbWFnZS5zcmMgPSAiaHR0cDovL2xvY2FsaG9zdDo4
MDAwL3NlY3VyaXR5L3Jlc291cmNlcy9hYmUtYWxsb3ctY3JlZGVudGlhbHMucGhwIjsKKzwvc2Ny
aXB0PgpJbmRleDogTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS93ZWJnbC1yZW1vdGUt
cmVhZC1yZW1vdGUtaW1hZ2UtYWxsb3dlZC5odG1sCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3Rz
L2h0dHAvdGVzdHMvc2VjdXJpdHkvd2ViZ2wtcmVtb3RlLXJlYWQtcmVtb3RlLWltYWdlLWFsbG93
ZWQuaHRtbAkocmV2aXNpb24gMCkKKysrIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkv
d2ViZ2wtcmVtb3RlLXJlYWQtcmVtb3RlLWltYWdlLWFsbG93ZWQuaHRtbAkocmV2aXNpb24gMCkK
QEAgLTAsMCArMSwxMDEgQEAKKzxwcmUgaWQ9ImNvbnNvbGUiPjwvcHJlPgorPHNjcmlwdD4KK2lm
ICh3aW5kb3cubGF5b3V0VGVzdENvbnRyb2xsZXIpIHsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxl
ci5vdmVycmlkZVByZWZlcmVuY2UoIldlYktpdFdlYkdMRW5hYmxlZCIsICIxIik7CisgICAgbGF5
b3V0VGVzdENvbnRyb2xsZXIuZHVtcEFzVGV4dCgpOworICAgIGxheW91dFRlc3RDb250cm9sbGVy
LndhaXRVbnRpbERvbmUoKTsKK30KKworbG9nID0gZnVuY3Rpb24obXNnKQoreworICAgIGRvY3Vt
ZW50LmdldEVsZW1lbnRCeUlkKCdjb25zb2xlJykuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRl
VGV4dE5vZGUobXNnICsgIlxuIikpOworfQorCit0ZXN0VGV4SW1hZ2UyRCA9IGZ1bmN0aW9uKGds
LCBzb3VyY2UsIGRlc2NyaXB0aW9uKQoreworICAgIGRlc2NyaXB0aW9uID0gIkNhbGxpbmcgdGV4
SW1hZ2UyRCgpIHdpdGggYW4gdW50YWludGVkICIgKyBkZXNjcmlwdGlvbjsKKyAgICB0cnkgewor
ICAgICAgICBnbC50ZXhJbWFnZTJEKGdsLlRFWFRVUkVfMkQsIDAsIGdsLlJHQkEsIGdsLlJHQkEs
IGdsLlVOU0lHTkVEX0JZVEUsIHNvdXJjZSk7CisgICAgICAgIGxvZygiUEFTUzogIiArIGRlc2Ny
aXB0aW9uICsgIiB3YXMgYWxsb3dlZCIpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgbG9n
KCJGQUlMOiAiICsgZGVzY3JpcHRpb24gKyAiIHdhcyBub3QgYWxsb3dlZDogVGhyZXcgZXJyb3I6
ICIgKyBlICsgIi4iKTsKKyAgICB9Cit9CisKK3Rlc3RSZWFkUGl4ZWxzID0gZnVuY3Rpb24oZ2ws
IGRlc2NyaXB0aW9uKQoreworICAgIGRlc2NyaXB0aW9uID0gIkNhbGxpbmcgcmVhZFBpeGVscygp
IGZyb20gYSBjYW52YXMgdGFpbnRlZCBieSBhICIgKyBkZXNjcmlwdGlvbjsKKyAgICB0cnkgewor
ICAgICAgICB2YXIgcGl4ZWxzID0gbmV3IFVpbnQ4QXJyYXkoNCk7CisgICAgICAgIGdsLnJlYWRQ
aXhlbHMoMCwgMCwgMSwgMSwgZ2wuUkdCQSwgZ2wuVU5TSUdORURfQllURSwgcGl4ZWxzKTsKKyAg
ICAgICAgbG9nKCJQQVNTOiAiICsgZGVzY3JpcHRpb24gKyAiIHdhcyBhbGxvd2VkLiIpOworICAg
IH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgbG9nKCJGQUlMOiAiICsgZGVzY3JpcHRpb24gKyAiIHdh
cyBub3QgYWxsb3dlZCAtIFRocmV3IGVycm9yOiAiICsgZSArICIuIik7CisgICAgfQorfQorCit0
ZXN0VG9EYXRhVVJMID0gZnVuY3Rpb24oY2FudmFzLCBkZXNjcmlwdGlvbikKK3sKKyAgICBkZXNj
cmlwdGlvbiA9ICJDYWxsaW5nIHRvRGF0YVVSTCgpIG9uIGEgY2FudmFzIENPUlMtdW50YWludGVk
IGJ5IGEgIiArIGRlc2NyaXB0aW9uOworICAgIHRyeSB7CisgICAgICAgIHZhciBkYXRhVVJMID0g
Y2FudmFzLnRvRGF0YVVSTCgpOworICAgICAgICBsb2coIlBBU1M6ICIgKyBkZXNjcmlwdGlvbiAr
ICIgd2FzIGFsbG93ZWQuIik7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBsb2coIkZBSUw6
ICIgKyBkZXNjcmlwdGlvbiArICIgd2FzIG5vdCBhbGxvd2VkIC0gVGhyZXcgZXJyb3I6ICIgKyBl
ICsgIi4iKTsKKyAgICB9Cit9CisKK3Rlc3QgPSBmdW5jdGlvbihjYW52YXMsIGRlc2NyaXB0aW9u
KQoreworICAgIHRlc3RSZWFkUGl4ZWxzKGNhbnZhcy5nZXRDb250ZXh0KCJleHBlcmltZW50YWwt
d2ViZ2wiKSwgZGVzY3JpcHRpb24pOworICAgIHRlc3RUb0RhdGFVUkwoY2FudmFzLCBkZXNjcmlw
dGlvbik7Cit9CisKK3ZhciBpbWFnZSA9IG5ldyBJbWFnZSgpOworaW1hZ2Uub25sb2FkID0gZnVu
Y3Rpb24oKSB7CisgICAgdmFyIGNhbnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZh
cyIpOworICAgIGNhbnZhcy53aWR0aCA9IDEwMDsKKyAgICBjYW52YXMuaGVpZ2h0ID0gMTAwOwor
ICAgIHZhciBnbCA9IGNhbnZhcy5nZXRDb250ZXh0KCJleHBlcmltZW50YWwtd2ViZ2wiKTsKKwor
ICAgIC8vIENvbnRyb2wgdGVzdHMKKyAgICBsb2coIlVudGFpbnRlZCBjYW52YXM6Iik7CisgICAg
dHJ5IHsKKyAgICAgICAgdmFyIHBpeGVscyA9IG5ldyBVaW50OEFycmF5KDQpOworICAgICAgICBn
bC5yZWFkUGl4ZWxzKDAsIDAsIDEsIDEsIGdsLlJHQkEsIGdsLlVOU0lHTkVEX0JZVEUsIHBpeGVs
cyk7CisgICAgICAgIGxvZygiUEFTUzogQ2FsbGluZyByZWFkUGl4ZWxzKCkgZnJvbSBhbiB1bnRh
aW50ZWQgY2FudmFzIHdhcyBhbGxvd2VkLiIpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAg
bG9nKCJGQUlMOiBDYWxsaW5nIHJlYWRQaXhlbHMoKSBmcm9tIGFuIHVudGFpbnRlZCBjYW52YXMg
d2FzIG5vdCBhbGxvd2VkOiBUaHJldyBlcnJvcjogIiArIGUgKyAiLiIpOworICAgIH0KKyAgICB0
cnkgeworICAgICAgICB2YXIgZGF0YVVSTCA9IGNhbnZhcy50b0RhdGFVUkwoKTsKKyAgICAgICAg
bG9nKCJQQVNTOiBDYWxsaW5nIHRvRGF0YVVSTCgpIG9uIGFuIHVudGFpbnRlZCBjYW52YXMgd2Fz
IGFsbG93ZWQuIik7CisgICAgfSBjYXRjaCAoZSkgeworICAgICAgICBsb2coIkZBSUw6IENhbGxp
bmcgdG9EYXRhVVJMKCkgb24gYW4gdW50YWludGVkIGNhbnZhcyB3YXMgbm90IGFsbG93ZWQ6IFRo
cmV3IGVycm9yOiAiICsgZSArICIuIik7CisgICAgfQorCisgICAgbG9nKCJcbiIpOworICAgIGxv
ZygiVGFpbnRlZCBjYW52YXM6Iik7CisgICAgLy8gVGVzdCByZWFkaW5nIGZyb20gYSBjYW52YXMg
YWZ0ZXIgdXBsb2FkaW5nIGEgcmVtb3RlIGltYWdlIGFzIGEgdGV4dHVyZQorICAgIHZhciB0ZXh0
dXJlID0gZ2wuY3JlYXRlVGV4dHVyZSgpOworICAgIGdsLmJpbmRUZXh0dXJlKGdsLlRFWFRVUkVf
MkQsIHRleHR1cmUpOworICAgIHRlc3RUZXhJbWFnZTJEKGdsLCBpbWFnZSwgImltYWdlIik7CisK
KyAgICB0ZXN0KGNhbnZhcywgInJlbW90ZSBpbWFnZSIpOworCisgICAgLy8gTm93IHRlc3QgcmVh
ZGluZyBmcm9tIGEgY2FudmFzIGFmdGVyIHVwbG9hZGluZyBhIHRhaW50ZWQgY2FudmFzIG9udG8g
aXQKKyAgICB2YXIgZGlydHlDYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMi
KTsKKyAgICBkaXJ0eUNhbnZhcy53aWR0aCA9IDEwMDsKKyAgICBkaXJ0eUNhbnZhcy5oZWlnaHQg
PSAxMDA7CisgICAgdmFyIGRpcnR5Q29udGV4dCA9IGRpcnR5Q2FudmFzLmdldENvbnRleHQoIjJk
Iik7CisgICAgZGlydHlDb250ZXh0LmRyYXdJbWFnZShpbWFnZSwgMCwgMCwgMTAwLCAxMDApOwor
ICAgIHRlc3RUZXhJbWFnZTJEKGdsLCBkaXJ0eUNhbnZhcywgImNhbnZhcyIpOworCisgICAgdGVz
dChjYW52YXMsICJDT1JTLXVudGFpbmVkIGNhbnZhcyIpOworCisgICAgaWYgKHdpbmRvdy5sYXlv
dXRUZXN0Q29udHJvbGxlcikKKyAgICAgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIubm90aWZ5RG9u
ZSgpOworfQoraW1hZ2UuY3Jvc3NPcmlnaW4gPSAiYW5vbnltb3VzIjsKK2ltYWdlLnNyYyA9ICJo
dHRwOi8vbG9jYWxob3N0OjgwMDAvc2VjdXJpdHkvcmVzb3VyY2VzL2FiZS1hbGxvdy1zdGFyLnBo
cCI7Cis8L3NjcmlwdD4KSW5kZXg6IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvd2Vi
Z2wtcmVtb3RlLXJlYWQtcmVtb3RlLWltYWdlLWJsb2NrZWQtbm8tY3Jvc3NvcmlnaW4tZXhwZWN0
ZWQudHh0Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvd2Vi
Z2wtcmVtb3RlLXJlYWQtcmVtb3RlLWltYWdlLWJsb2NrZWQtbm8tY3Jvc3NvcmlnaW4tZXhwZWN0
ZWQudHh0CShyZXZpc2lvbiAwKQorKysgTGF5b3V0VGVzdHMvaHR0cC90ZXN0cy9zZWN1cml0eS93
ZWJnbC1yZW1vdGUtcmVhZC1yZW1vdGUtaW1hZ2UtYmxvY2tlZC1uby1jcm9zc29yaWdpbi1leHBl
Y3RlZC50eHQJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTMgQEAKK1VudGFpbnRlZCBjYW52YXM6
CitQQVNTOiBDYWxsaW5nIHJlYWRQaXhlbHMoKSBmcm9tIGFuIHVudGFpbnRlZCBjYW52YXMgd2Fz
IGFsbG93ZWQuCitQQVNTOiBDYWxsaW5nIHRvRGF0YVVSTCgpIG9uIGFuIHVudGFpbnRlZCBjYW52
YXMgd2FzIGFsbG93ZWQuCisKKworVGFpbnRlZCBjYW52YXM6CitQQVNTOiBDYWxsaW5nIHRleElt
YWdlMkQoKSB3aXRoIGEgdGFpbnRlZCBpbWFnZSB3YXMgbm90IGFsbG93ZWQ6IFRocmV3IGVycm9y
OiBFcnJvcjogU0VDVVJJVFlfRVJSOiBET00gRXhjZXB0aW9uIDE4LgorUEFTUzogQ2FsbGluZyBy
ZWFkUGl4ZWxzKCkgb24gYSBjYW52YXMgd2hlcmUgdGFpbnRpbmcgd2FzIGF0dGVtcHRlZCBieSBh
IHJlbW90ZSBpbWFnZSB3YXMgYWxsb3dlZC4KK1BBU1M6IENhbGxpbmcgdG9EYXRhVVJMKCkgb24g
YSBjYW52YXMgd2hlcmUgdGFpbnRpbmcgd2FzIGF0dGVtcHRlZCBieSBhIHJlbW90ZSBpbWFnZSB3
YXMgYWxsb3dlZC4KK1BBU1M6IENhbGxpbmcgdGV4SW1hZ2UyRCgpIHdpdGggYSB0YWludGVkIGNh
bnZhcyB3YXMgbm90IGFsbG93ZWQ6IFRocmV3IGVycm9yOiBFcnJvcjogU0VDVVJJVFlfRVJSOiBE
T00gRXhjZXB0aW9uIDE4LgorUEFTUzogQ2FsbGluZyByZWFkUGl4ZWxzKCkgb24gYSBjYW52YXMg
d2hlcmUgdGFpbnRpbmcgd2FzIGF0dGVtcHRlZCBieSBhIHRhaW50ZWQgY2FudmFzIHdhcyBhbGxv
d2VkLgorUEFTUzogQ2FsbGluZyB0b0RhdGFVUkwoKSBvbiBhIGNhbnZhcyB3aGVyZSB0YWludGlu
ZyB3YXMgYXR0ZW1wdGVkIGJ5IGEgdGFpbnRlZCBjYW52YXMgd2FzIGFsbG93ZWQuCisKSW5kZXg6
IExheW91dFRlc3RzL2h0dHAvdGVzdHMvc2VjdXJpdHkvd2ViZ2wtcmVtb3RlLXJlYWQtcmVtb3Rl
LWltYWdlLWJsb2NrZWQtbm8tY3Jvc3NvcmlnaW4uaHRtbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRU
ZXN0cy9odHRwL3Rlc3RzL3NlY3VyaXR5L3dlYmdsLXJlbW90ZS1yZWFkLXJlbW90ZS1pbWFnZS1i
bG9ja2VkLW5vLWNyb3Nzb3JpZ2luLmh0bWwJKHJldmlzaW9uIDApCisrKyBMYXlvdXRUZXN0cy9o
dHRwL3Rlc3RzL3NlY3VyaXR5L3dlYmdsLXJlbW90ZS1yZWFkLXJlbW90ZS1pbWFnZS1ibG9ja2Vk
LW5vLWNyb3Nzb3JpZ2luLmh0bWwJKHJldmlzaW9uIDApCkBAIC0wLDAgKzEsMTAzIEBACis8cHJl
IGlkPSJjb25zb2xlIj48L3ByZT4KKzxzY3JpcHQ+CitpZiAod2luZG93LmxheW91dFRlc3RDb250
cm9sbGVyKSB7CisgICAgbGF5b3V0VGVzdENvbnRyb2xsZXIub3ZlcnJpZGVQcmVmZXJlbmNlKCJX
ZWJLaXRXZWJHTEVuYWJsZWQiLCAiMSIpOworICAgIGxheW91dFRlc3RDb250cm9sbGVyLmR1bXBB
c1RleHQoKTsKKyAgICBsYXlvdXRUZXN0Q29udHJvbGxlci53YWl0VW50aWxEb25lKCk7Cit9CisK
K2xvZyA9IGZ1bmN0aW9uKG1zZykKK3sKKyAgICBkb2N1bWVudC5nZXRFbGVtZW50QnlJZCgnY29u
c29sZScpLmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZVRleHROb2RlKG1zZyArICJcbiIpKTsK
K30KKwordGVzdFRleEltYWdlMkQgPSBmdW5jdGlvbihnbCwgc291cmNlLCBkZXNjcmlwdGlvbikK
K3sKKyAgICBkZXNjcmlwdGlvbiA9ICJDYWxsaW5nIHRleEltYWdlMkQoKSB3aXRoIGEgdGFpbnRl
ZCAiICsgZGVzY3JpcHRpb247CisgICAgdHJ5IHsKKyAgICAgICAgZ2wudGV4SW1hZ2UyRChnbC5U
RVhUVVJFXzJELCAwLCBnbC5SR0JBLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBzb3VyY2Up
OworICAgICAgICBsb2coIkZBSUw6ICIgKyBkZXNjcmlwdGlvbiArICIgd2FzIGFsbG93ZWQiKTsK
KyAgICB9IGNhdGNoIChlKSB7CisgICAgICAgIGxvZygiUEFTUzogIiArIGRlc2NyaXB0aW9uICsg
IiB3YXMgbm90IGFsbG93ZWQ6IFRocmV3IGVycm9yOiAiICsgZSArICIuIik7CisgICAgfQorfQor
Cit0ZXN0UmVhZFBpeGVscyA9IGZ1bmN0aW9uKGdsLCBkZXNjcmlwdGlvbikKK3sKKyAgICBkZXNj
cmlwdGlvbiA9ICJDYWxsaW5nIHJlYWRQaXhlbHMoKSBvbiBhIGNhbnZhcyB3aGVyZSB0YWludGlu
ZyB3YXMgYXR0ZW1wdGVkIGJ5IGEgIiArIGRlc2NyaXB0aW9uOworICAgIHRyeSB7CisgICAgICAg
IHZhciBwaXhlbHMgPSBuZXcgVWludDhBcnJheSg0KTsKKyAgICAgICAgZ2wucmVhZFBpeGVscygw
LCAwLCAxLCAxLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRFLCBwaXhlbHMpOworICAgICAgICBs
b2coIlBBU1M6ICIgKyBkZXNjcmlwdGlvbiArICIgd2FzIGFsbG93ZWQuIik7CisgICAgfSBjYXRj
aCAoZSkgeworICAgICAgICBsb2coIkZBSUw6ICIgKyBkZXNjcmlwdGlvbiArICIgd2FzIG5vdCBh
bGxvd2VkIC0gVGhyZXcgZXJyb3I6ICIgKyBlICsgIi4iKTsKKyAgICB9Cit9CisKK3Rlc3RUb0Rh
dGFVUkwgPSBmdW5jdGlvbihjYW52YXMsIGRlc2NyaXB0aW9uKQoreworICAgIGRlc2NyaXB0aW9u
ID0gIkNhbGxpbmcgdG9EYXRhVVJMKCkgb24gYSBjYW52YXMgd2hlcmUgdGFpbnRpbmcgd2FzIGF0
dGVtcHRlZCBieSBhICIgKyBkZXNjcmlwdGlvbjsKKyAgICB0cnkgeworICAgICAgICB2YXIgZGF0
YVVSTCA9IGNhbnZhcy50b0RhdGFVUkwoKTsKKyAgICAgICAgbG9nKCJQQVNTOiAiICsgZGVzY3Jp
cHRpb24gKyAiIHdhcyBhbGxvd2VkLiIpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgbG9n
KCJGQUlMOiAiICsgZGVzY3JpcHRpb24gKyAiIHdhcyBub3QgYWxsb3dlZCAtIFRocmV3IGVycm9y
OiAiICsgZSArICIuIik7CisgICAgfQorfQorCit0ZXN0ID0gZnVuY3Rpb24oY2FudmFzLCBkZXNj
cmlwdGlvbikKK3sKKyAgICB0ZXN0UmVhZFBpeGVscyhjYW52YXMuZ2V0Q29udGV4dCgiZXhwZXJp
bWVudGFsLXdlYmdsIiksIGRlc2NyaXB0aW9uKTsKKyAgICB0ZXN0VG9EYXRhVVJMKGNhbnZhcywg
ZGVzY3JpcHRpb24pOworfQorCit2YXIgaW1hZ2UgPSBuZXcgSW1hZ2UoKTsKK2ltYWdlLm9ubG9h
ZCA9IGZ1bmN0aW9uKCkgeworICAgIHZhciBjYW52YXMgPSBkb2N1bWVudC5jcmVhdGVFbGVtZW50
KCJjYW52YXMiKTsKKyAgICBjYW52YXMud2lkdGggPSAxMDA7CisgICAgY2FudmFzLmhlaWdodCA9
IDEwMDsKKyAgICB2YXIgZ2wgPSBjYW52YXMuZ2V0Q29udGV4dCgiZXhwZXJpbWVudGFsLXdlYmds
Iik7CisKKyAgICAvLyBDb250cm9sIHRlc3RzCisgICAgbG9nKCJVbnRhaW50ZWQgY2FudmFzOiIp
OworICAgIHRyeSB7CisgICAgICAgIHZhciBwaXhlbHMgPSBuZXcgVWludDhBcnJheSg0KTsKKyAg
ICAgICAgZ2wucmVhZFBpeGVscygwLCAwLCAxLCAxLCBnbC5SR0JBLCBnbC5VTlNJR05FRF9CWVRF
LCBwaXhlbHMpOworICAgICAgICBsb2coIlBBU1M6IENhbGxpbmcgcmVhZFBpeGVscygpIGZyb20g
YW4gdW50YWludGVkIGNhbnZhcyB3YXMgYWxsb3dlZC4iKTsKKyAgICB9IGNhdGNoIChlKSB7Cisg
ICAgICAgIGxvZygiRkFJTDogQ2FsbGluZyByZWFkUGl4ZWxzKCkgZnJvbSBhbiB1bnRhaW50ZWQg
Y2FudmFzIHdhcyBub3QgYWxsb3dlZDogVGhyZXcgZXJyb3I6ICIgKyBlICsgIi4iKTsKKyAgICB9
CisgICAgdHJ5IHsKKyAgICAgICAgdmFyIGRhdGFVUkwgPSBjYW52YXMudG9EYXRhVVJMKCk7Cisg
ICAgICAgIGxvZygiUEFTUzogQ2FsbGluZyB0b0RhdGFVUkwoKSBvbiBhbiB1bnRhaW50ZWQgY2Fu
dmFzIHdhcyBhbGxvd2VkLiIpOworICAgIH0gY2F0Y2ggKGUpIHsKKyAgICAgICAgbG9nKCJGQUlM
OiBDYWxsaW5nIHRvRGF0YVVSTCgpIG9uIGFuIHVudGFpbnRlZCBjYW52YXMgd2FzIG5vdCBhbGxv
d2VkOiBUaHJldyBlcnJvcjogIiArIGUgKyAiLiIpOworICAgIH0KKworICAgIGxvZygiXG4iKTsK
KyAgICBsb2coIlRhaW50ZWQgY2FudmFzOiIpOworICAgIC8vIFRlc3QgcmVhZGluZyBmcm9tIGEg
Y2FudmFzIGFmdGVyIHVwbG9hZGluZyBhIHJlbW90ZSBpbWFnZSBhcyBhIHRleHR1cmUKKyAgICB2
YXIgdGV4dHVyZSA9IGdsLmNyZWF0ZVRleHR1cmUoKTsKKyAgICBnbC5iaW5kVGV4dHVyZShnbC5U
RVhUVVJFXzJELCB0ZXh0dXJlKTsKKyAgICB0ZXN0VGV4SW1hZ2UyRChnbCwgaW1hZ2UsICJpbWFn
ZSIpOworCisgICAgdGVzdChjYW52YXMsICJyZW1vdGUgaW1hZ2UiKTsKKworICAgIHZhciBkaXJ0
eUNhbnZhcyA9IGNhbnZhczsKKworICAgIC8vIE5vdyB0ZXN0IHJlYWRpbmcgZnJvbSBhIGNhbnZh
cyBhZnRlciBkcmF3aW5nIGEgdGFpbnRlZCBjYW52YXMgb250byBpdAorICAgIHZhciBkaXJ0eUNh
bnZhcyA9IGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpOworICAgIGRpcnR5Q2FudmFz
LndpZHRoID0gMTAwOworICAgIGRpcnR5Q2FudmFzLmhlaWdodCA9IDEwMDsKKyAgICB2YXIgZGly
dHlDb250ZXh0ID0gZGlydHlDYW52YXMuZ2V0Q29udGV4dCgiMmQiKTsKKyAgICBkaXJ0eUNvbnRl
eHQuZHJhd0ltYWdlKGltYWdlLCAwLCAwLCAxMDAsIDEwMCk7CisgICAgdGVzdFRleEltYWdlMkQo
Z2wsIGRpcnR5Q2FudmFzLCAiY2FudmFzIik7CisKKyAgICB0ZXN0KGNhbnZhcywgInRhaW50ZWQg
Y2FudmFzIik7CisKKyAgICBpZiAod2luZG93LmxheW91dFRlc3RDb250cm9sbGVyKQorICAgICAg
ICBsYXlvdXRUZXN0Q29udHJvbGxlci5ub3RpZnlEb25lKCk7Cit9CisvLyBOb3RpY2UgdGhhdCB3
ZSBmb3JnZXQgdG8gc2V0IHRoZSBpbWFnZS5jcm9zc09yaWdpbiBwcm9wZXJ0eSEKK2ltYWdlLnNy
YyA9ICJodHRwOi8vbG9jYWxob3N0OjgwMDAvc2VjdXJpdHkvcmVzb3VyY2VzL2FiZS1hbGxvdy1z
dGFyLnBocCI7Cis8L3NjcmlwdD4KSW5kZXg6IExheW91dFRlc3RzL3BsYXRmb3JtL21hYy13azIv
U2tpcHBlZAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBMYXlvdXRUZXN0cy9wbGF0Zm9ybS9tYWMtd2syL1NraXBw
ZWQJKHJldmlzaW9uIDg4MzE2KQorKysgTGF5b3V0VGVzdHMvcGxhdGZvcm0vbWFjLXdrMi9Ta2lw
cGVkCSh3b3JraW5nIGNvcHkpCkBAIC05ODQsNiArOTg0LDkgQEAgaHR0cC90ZXN0cy9pbnNwZWN0
b3IvbmV0d29yay9waW5nLmh0bWwKIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9waW5nLWNyb3NzLW9y
aWdpbi1mcm9tLWh0dHBzLmh0bWwKIGh0dHAvdGVzdHMvbmF2aWdhdGlvbi9waW5nLWNyb3NzLW9y
aWdpbi5odG1sCiBodHRwL3Rlc3RzL25hdmlnYXRpb24vcGluZy1zYW1lLW9yaWdpbi5odG1sCito
dHRwL3Rlc3RzL3NlY3VyaXR5L3dlYmdsLXJlbW90ZS1yZWFkLXJlbW90ZS1pbWFnZS1hbGxvd2Vk
Lmh0bWwKK2h0dHAvdGVzdHMvc2VjdXJpdHkvd2ViZ2wtcmVtb3RlLXJlYWQtcmVtb3RlLWltYWdl
LWFsbG93ZWQtd2l0aC1jcmVkZW50aWFscy5odG1sCitodHRwL3Rlc3RzL3NlY3VyaXR5L3dlYmds
LXJlbW90ZS1yZWFkLXJlbW90ZS1pbWFnZS1ibG9ja2VkLW5vLWNyb3Nzb3JpZ2luLmh0bWwKIGxv
YWRlci9nby1iYWNrLXRvLWRpZmZlcmVudC13aW5kb3ctc2l6ZS5odG1sCiBtZWRpYS9yZXN0b3Jl
LWZyb20tcGFnZS1jYWNoZS5odG1sCiBqYXZhL2VtYmVkZGluZy1qYXZhLXdpdGgtb2JqZWN0Lmh0
bWwK
</data>
<flag name="review"
          id="90023"
          type_id="1"
          status="+"
          setter="abarth"
    />
          </attachment>
      

    </bug>

</bugzilla>