<?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>87581</bug_id>
          
          <creation_ts>2012-05-26 14:57:20 -0700</creation_ts>
          <short_desc>WebKit should be lazy-finalization-safe (esp. the DOM) v2</short_desc>
          <delta_ts>2012-05-28 23:49:30 -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>New Bugs</component>
          <version>528+ (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></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          <dependson>87701</dependson>
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Geoffrey Garen">ggaren</reporter>
          <assigned_to name="Geoffrey Garen">ggaren</assigned_to>
          <cc>abarth</cc>
    
    <cc>eric.carlson</cc>
    
    <cc>feature-media-reviews</cc>
    
    <cc>haraken</cc>
    
    <cc>japhet</cc>
    
    <cc>webkit.review.bot</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>634667</commentid>
    <comment_count>0</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-05-26 14:57:20 -0700</bug_when>
    <thetext>WebKit should be lazy-finalization-safe (esp. the DOM) v2</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634668</commentid>
    <comment_count>1</comment_count>
      <attachid>144207</attachid>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-05-26 15:04:28 -0700</bug_when>
    <thetext>Created attachment 144207
Patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634673</commentid>
    <comment_count>2</comment_count>
      <attachid>144207</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-05-26 15:12:33 -0700</bug_when>
    <thetext>Comment on attachment 144207
Patch

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

r+ assuming you change the !ASSERTION bits to GC validation, and can reasonably answer the static cast questions :D

&gt; Source/JavaScriptCore/API/JSCallbackConstructor.cpp:64
&gt; -    jsCast&lt;JSCallbackConstructor*&gt;(cell)-&gt;JSCallbackConstructor::~JSCallbackConstructor();
&gt; +    static_cast&lt;JSCallbackConstructor*&gt;(cell)-&gt;JSCallbackConstructor::~JSCallbackConstructor();

Why are you making this change?

&gt; Source/JavaScriptCore/API/JSCallbackObject.cpp:57
&gt; -    jsCast&lt;JSCallbackObject*&gt;(cell)-&gt;JSCallbackObject::~JSCallbackObject();
&gt; +    static_cast&lt;JSCallbackObject*&gt;(cell)-&gt;JSCallbackObject::~JSCallbackObject();

ditto

&gt; Source/JavaScriptCore/API/JSCallbackObject.cpp:63
&gt; -    JSObjectRef thisRef = toRef(asObject(handle.get()));
&gt; +    JSObjectRef thisRef = toRef(static_cast&lt;JSObject*&gt;(handle.get().asCell()));

if a static cast is valid, a jsCast should be as well -- why isn&apos;t it?

&gt; Source/JavaScriptCore/heap/MarkedBlock.cpp:71
&gt; +#if !ASSERT_DISABLED

Make this conditional on GC validation, not assertions.  There are times where it&apos;s nice to be able to test stuff in release builds.

&gt; Source/JavaScriptCore/heap/WeakSetInlines.h:53
&gt; +#if !ASSERT_DISABLED
&gt; +    weakImpl-&gt;jsValue().asCell()-&gt;clearStructure();

GC validation rather than assertion based... can you have multiple weak handles to a single object?  might this break everything?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634675</commentid>
    <comment_count>3</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-05-26 15:36:17 -0700</bug_when>
    <thetext>&gt; &gt; Source/JavaScriptCore/API/JSCallbackConstructor.cpp:64
&gt; &gt; -    jsCast&lt;JSCallbackConstructor*&gt;(cell)-&gt;JSCallbackConstructor::~JSCallbackConstructor();
&gt; &gt; +    static_cast&lt;JSCallbackConstructor*&gt;(cell)-&gt;JSCallbackConstructor::~JSCallbackConstructor();
&gt; 
&gt; Why are you making this change?

jsCast does Structure-based validation, and our Structure is not guaranteed to be alive when we get finalized. In particular, if our Structure has been recycled, the jsCast will probably ASSERT, and if our Structure has been unmapped from memory, the jsCast will segfault.

static_cast allows us to access our object just enough to deref / free its C++ pointers.

Perhaps we can clarify this interface in the future. 

&gt; &gt; Source/JavaScriptCore/heap/MarkedBlock.cpp:71
&gt; &gt; +#if !ASSERT_DISABLED
&gt; 
&gt; Make this conditional on GC validation, not assertions.

Added || ENABLE(GC_VALIDATION)

&gt; can you have multiple weak handles to a single object?  might this break everything?

Yes, you can. No, it doesn&apos;t break anything. If one handle is dead, they&apos;re all dead, so scribbling this structure is correct for them all.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634676</commentid>
    <comment_count>4</comment_count>
    <who name="Geoffrey Garen">ggaren</who>
    <bug_when>2012-05-26 15:40:51 -0700</bug_when>
    <thetext>Committed r118616: &lt;http://trac.webkit.org/changeset/118616&gt;</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>144207</attachid>
            <date>2012-05-26 15:04:28 -0700</date>
            <delta_ts>2012-05-26 15:12:33 -0700</delta_ts>
            <desc>Patch</desc>
            <filename>bug-87581-20120526150428.patch</filename>
            <type>text/plain</type>
            <size>42954</size>
            <attacher name="Geoffrey Garen">ggaren</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE4NjE0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDYwIEBA
CisyMDEyLTA1LTI2ICBHZW9mZnJleSBHYXJlbiAgPGdnYXJlbkBhcHBsZS5jb20+CisKKyAgICAg
ICAgV2ViS2l0IHNob3VsZCBiZSBsYXp5LWZpbmFsaXphdGlvbi1zYWZlIChlc3AuIHRoZSBET00p
IHYyCisgICAgICAgIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzU4
MQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogaGVh
cC9NYXJrZWRCbG9jay5jcHA6CisgICAgICAgIChKU0M6Ok1hcmtlZEJsb2NrOjpjYWxsRGVzdHJ1
Y3Rvcik6CisgICAgICAgICogaGVhcC9XZWFrQmxvY2suaDoKKyAgICAgICAgKiBoZWFwL1dlYWtT
ZXRJbmxpbmVzLmg6CisgICAgICAgIChKU0M6OldlYWtCbG9jazo6ZmluYWxpemUpOiBTaW5jZSB3
ZSBkb24ndCBndWFyYW50ZWUgZGVzdHJ1Y3Rpb24gb3JkZXIsCisgICAgICAgIGl0J3Mgbm90IHZh
bGlkIHRvIGFjY2VzcyBHQyBwb2ludGVycyBsaWtlIHRoZSBTdHJ1Y3R1cmUgcG9pbnRlciBkdXJp
bmcKKyAgICAgICAgZmluYWxpemF0aW9uLiBXZSBOVUxMIG91dCB0aGUgc3RydWN0dXJlIHBvaW50
ZXIgaW4gZGVidWcgYnVpbGRzIHRvIHRyeQorICAgICAgICB0byBtYWtlIHRoaXMgcHJvZ3JhbW1p
bmcgbWlzdGFrZSBtb3JlIG9idmlvdXMuCisKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja0NvbnN0
cnVjdG9yLmNwcDoKKyAgICAgICAgKEpTQzo6SlNDYWxsYmFja0NvbnN0cnVjdG9yOjpkZXN0cm95
KToKKyAgICAgICAgKiBBUEkvSlNDYWxsYmFja09iamVjdC5jcHA6CisgICAgICAgIChKU0M6Ojo6
ZGVzdHJveSk6CisgICAgICAgIChKU0M6OkpTQ2FsbGJhY2tPYmplY3REYXRhOjpmaW5hbGl6ZSk6
CisgICAgICAgICogcnVudGltZS9Bcmd1bWVudHMuY3BwOgorICAgICAgICAoSlNDOjpBcmd1bWVu
dHM6OmRlc3Ryb3kpOgorICAgICAgICAqIHJ1bnRpbWUvRGF0ZUluc3RhbmNlLmNwcDoKKyAgICAg
ICAgKEpTQzo6RGF0ZUluc3RhbmNlOjpkZXN0cm95KToKKyAgICAgICAgKiBydW50aW1lL0Vycm9y
LmNwcDoKKyAgICAgICAgKEpTQzo6U3RyaWN0TW9kZVR5cGVFcnJvckZ1bmN0aW9uOjpkZXN0cm95
KToKKyAgICAgICAgKiBydW50aW1lL0V4ZWN1dGFibGUuY3BwOgorICAgICAgICAoSlNDOjpFeGVj
dXRhYmxlQmFzZTo6ZGVzdHJveSk6CisgICAgICAgIChKU0M6Ok5hdGl2ZUV4ZWN1dGFibGU6OmRl
c3Ryb3kpOgorICAgICAgICAoSlNDOjpTY3JpcHRFeGVjdXRhYmxlOjpkZXN0cm95KToKKyAgICAg
ICAgKEpTQzo6RXZhbEV4ZWN1dGFibGU6OmRlc3Ryb3kpOgorICAgICAgICAoSlNDOjpQcm9ncmFt
RXhlY3V0YWJsZTo6ZGVzdHJveSk6CisgICAgICAgIChKU0M6OkZ1bmN0aW9uRXhlY3V0YWJsZTo6
ZGVzdHJveSk6CisgICAgICAgICogcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHA6CisgICAgICAg
IChKU0M6OkpTR2xvYmFsT2JqZWN0OjpkZXN0cm95KToKKyAgICAgICAgKiBydW50aW1lL0pTUHJv
cGVydHlOYW1lSXRlcmF0b3IuY3BwOgorICAgICAgICAoSlNDOjpKU1Byb3BlcnR5TmFtZUl0ZXJh
dG9yOjpkZXN0cm95KToKKyAgICAgICAgKiBydW50aW1lL0pTU3RhdGljU2NvcGVPYmplY3QuY3Bw
OgorICAgICAgICAoSlNDOjpKU1N0YXRpY1Njb3BlT2JqZWN0OjpkZXN0cm95KToKKyAgICAgICAg
KiBydW50aW1lL0pTU3RyaW5nLmNwcDoKKyAgICAgICAgKEpTQzo6SlNTdHJpbmc6OmRlc3Ryb3kp
OgorICAgICAgICAqIHJ1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5jcHA6CisgICAgICAgIChKU0M6
OkpTVmFyaWFibGVPYmplY3Q6OmRlc3Ryb3kpOgorICAgICAgICAqIHJ1bnRpbWUvTmFtZUluc3Rh
bmNlLmNwcDoKKyAgICAgICAgKEpTQzo6TmFtZUluc3RhbmNlOjpkZXN0cm95KToKKyAgICAgICAg
KiBydW50aW1lL1JlZ0V4cC5jcHA6CisgICAgICAgIChKU0M6OlJlZ0V4cDo6ZGVzdHJveSk6Cisg
ICAgICAgICogcnVudGltZS9SZWdFeHBDb25zdHJ1Y3Rvci5jcHA6CisgICAgICAgIChKU0M6OlJl
Z0V4cENvbnN0cnVjdG9yOjpkZXN0cm95KToKKyAgICAgICAgKiBydW50aW1lL1N0cnVjdHVyZS5j
cHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZTo6ZGVzdHJveSk6CisgICAgICAgICogcnVudGlt
ZS9TdHJ1Y3R1cmVDaGFpbi5jcHA6CisgICAgICAgIChKU0M6OlN0cnVjdHVyZUNoYWluOjpkZXN0
cm95KTogVXNlIHN0YXRpY19jYXN0IGluc3RlYWQgb2YganNDYXN0IGJlY2F1c2UKKyAgICAgICAg
anNDYXN0IGRvZXMgU3RydWN0dXJlLWJhc2VkIHZhbGlkYXRpb24sIGFuZCBvdXIgU3RydWN0dXJl
IGlzIG5vdCBndWFyYW50ZWVkCisgICAgICAgIHRvIGJlIGFsaXZlIHdoZW4gd2UgZ2V0IGZpbmFs
aXplZC4KKwogMjAxMi0wNS0yMiAgRmlsaXAgUGl6bG8gIDxmcGl6bG9AYXBwbGUuY29tPgogCiAg
ICAgICAgIERGRyBDU0Ugc2hvdWxkIGVsaW1pbmF0ZSByZWR1bmRhbnQgV2Vha0pTQ29uc3RhbnRz
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0FQSS9KU0NhbGxiYWNrQ29u
c3RydWN0b3IuY3BwCShyZXZpc2lvbiAxMTg2MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
QVBJL0pTQ2FsbGJhY2tDb25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYxLDcgKzYx
LDcgQEAgSlNDYWxsYmFja0NvbnN0cnVjdG9yOjp+SlNDYWxsYmFja0NvbnN0cgogCiB2b2lkIEpT
Q2FsbGJhY2tDb25zdHJ1Y3Rvcjo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7Ci0gICAganNDYXN0
PEpTQ2FsbGJhY2tDb25zdHJ1Y3Rvcio+KGNlbGwpLT5KU0NhbGxiYWNrQ29uc3RydWN0b3I6On5K
U0NhbGxiYWNrQ29uc3RydWN0b3IoKTsKKyAgICBzdGF0aWNfY2FzdDxKU0NhbGxiYWNrQ29uc3Ry
dWN0b3IqPihjZWxsKS0+SlNDYWxsYmFja0NvbnN0cnVjdG9yOjp+SlNDYWxsYmFja0NvbnN0cnVj
dG9yKCk7CiB9CiAKIHN0YXRpYyBFbmNvZGVkSlNWYWx1ZSBKU0NfSE9TVF9DQUxMIGNvbnN0cnVj
dEpTQ2FsbGJhY2soRXhlY1N0YXRlKiBleGVjKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L0FQSS9KU0NhbGxiYWNrT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuY3BwCShyZXZpc2lvbiAxMTg2MTQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvQVBJL0pTQ2FsbGJhY2tPYmplY3QuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC01NCwxMyArNTQsMTMgQEAgU3RydWN0dXJlKiBKU0NhbGxiYWNrT2JqZWN0PEpTR2xvYmFs
T2JqZQogdGVtcGxhdGUgPGNsYXNzIFBhcmVudD4KIHZvaWQgSlNDYWxsYmFja09iamVjdDxQYXJl
bnQ+OjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKLSAgICBqc0Nhc3Q8SlNDYWxsYmFja09iamVj
dCo+KGNlbGwpLT5KU0NhbGxiYWNrT2JqZWN0Ojp+SlNDYWxsYmFja09iamVjdCgpOworICAgIHN0
YXRpY19jYXN0PEpTQ2FsbGJhY2tPYmplY3QqPihjZWxsKS0+SlNDYWxsYmFja09iamVjdDo6fkpT
Q2FsbGJhY2tPYmplY3QoKTsKIH0KIAogdm9pZCBKU0NhbGxiYWNrT2JqZWN0RGF0YTo6ZmluYWxp
emUoSGFuZGxlPFVua25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4dCkKIHsKICAgICBKU0NsYXNz
UmVmIGpzQ2xhc3MgPSBzdGF0aWNfY2FzdDxKU0NsYXNzUmVmPihjb250ZXh0KTsKLSAgICBKU09i
amVjdFJlZiB0aGlzUmVmID0gdG9SZWYoYXNPYmplY3QoaGFuZGxlLmdldCgpKSk7CisgICAgSlNP
YmplY3RSZWYgdGhpc1JlZiA9IHRvUmVmKHN0YXRpY19jYXN0PEpTT2JqZWN0Kj4oaGFuZGxlLmdl
dCgpLmFzQ2VsbCgpKSk7CiAgICAgCiAgICAgZm9yICg7IGpzQ2xhc3M7IGpzQ2xhc3MgPSBqc0Ns
YXNzLT5wYXJlbnRDbGFzcykKICAgICAgICAgaWYgKEpTT2JqZWN0RmluYWxpemVDYWxsYmFjayBm
aW5hbGl6ZSA9IGpzQ2xhc3MtPmZpbmFsaXplKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L2hlYXAvTWFya2VkQmxvY2suY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9oZWFwL01hcmtlZEJsb2NrLmNwcAkocmV2aXNpb24gMTE4NjE0KQorKysgU291cmNlL0phdmFT
Y3JpcHRDb3JlL2hlYXAvTWFya2VkQmxvY2suY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02Nyw4ICs2
NywxMiBAQCBpbmxpbmUgdm9pZCBNYXJrZWRCbG9jazo6Y2FsbERlc3RydWN0b3IoCiAjaWYgRU5B
QkxFKFNJTVBMRV9IRUFQX1BST0ZJTElORykKICAgICBtX2hlYXAtPm1fZGVzdHJveWVkVHlwZUNv
dW50cy5jb3VudFZQdHIodnB0cik7CiAjZW5kaWYKLSAgICBjZWxsLT5tZXRob2RUYWJsZSgpLT5k
ZXN0cm95KGNlbGwpOwogCisjaWYgIUFTU0VSVF9ESVNBQkxFRAorICAgIGNlbGwtPmNsZWFyU3Ry
dWN0dXJlKCk7CisjZW5kaWYKKworICAgIGNlbGwtPm1ldGhvZFRhYmxlKCktPmRlc3Ryb3koY2Vs
bCk7CiAgICAgY2VsbC0+emFwKCk7CiB9CiAKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9o
ZWFwL1dlYWtCbG9jay5oCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9oZWFw
L1dlYWtCbG9jay5oCShyZXZpc2lvbiAxMTg2MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9XZWFrQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAtMTE1LDE2ICsxMTUsNiBAQCBpbmxp
bmUgV2Vha0Jsb2NrOjpGcmVlQ2VsbCogV2Vha0Jsb2NrOjphCiAgICAgcmV0dXJuIHJlaW50ZXJw
cmV0X2Nhc3Q8RnJlZUNlbGwqPih3ZWFrSW1wbCk7CiB9CiAKLWlubGluZSB2b2lkIFdlYWtCbG9j
azo6ZmluYWxpemUoV2Vha0ltcGwqIHdlYWtJbXBsKQotewotICAgIEFTU0VSVCh3ZWFrSW1wbC0+
c3RhdGUoKSA9PSBXZWFrSW1wbDo6RGVhZCk7Ci0gICAgd2Vha0ltcGwtPnNldFN0YXRlKFdlYWtJ
bXBsOjpGaW5hbGl6ZWQpOwotICAgIFdlYWtIYW5kbGVPd25lciogd2Vha0hhbmRsZU93bmVyID0g
d2Vha0ltcGwtPndlYWtIYW5kbGVPd25lcigpOwotICAgIGlmICghd2Vha0hhbmRsZU93bmVyKQot
ICAgICAgICByZXR1cm47Ci0gICAgd2Vha0hhbmRsZU93bmVyLT5maW5hbGl6ZShIYW5kbGU8VW5r
bm93bj46OndyYXBTbG90KCZjb25zdF9jYXN0PEpTVmFsdWUmPih3ZWFrSW1wbC0+anNWYWx1ZSgp
KSksIHdlYWtJbXBsLT5jb250ZXh0KCkpOwotfQotCiBpbmxpbmUgV2Vha0ltcGwqIFdlYWtCbG9j
azo6d2Vha0ltcGxzKCkKIHsKICAgICByZXR1cm4gcmVpbnRlcnByZXRfY2FzdDxXZWFrSW1wbCo+
KHRoaXMpICsgKChzaXplb2YoV2Vha0Jsb2NrKSArIHNpemVvZihXZWFrSW1wbCkgLSAxKSAvIHNp
emVvZihXZWFrSW1wbCkpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2hlYXAvV2Vha1Nl
dElubGluZXMuaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvaGVhcC9XZWFr
U2V0SW5saW5lcy5oCShyZXZpc2lvbiAxMTg2MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
aGVhcC9XZWFrU2V0SW5saW5lcy5oCSh3b3JraW5nIGNvcHkpCkBAIC00Miw2ICs0MiwxOSBAQCBp
bmxpbmUgV2Vha0ltcGwqIFdlYWtTZXQ6OmFsbG9jYXRlKEpTVmFsCiAgICAgcmV0dXJuIG5ldyAo
Tm90TnVsbCwgd2Vha0ltcGwpIFdlYWtJbXBsKGpzVmFsdWUsIHdlYWtIYW5kbGVPd25lciwgY29u
dGV4dCk7CiB9CiAKK2lubGluZSB2b2lkIFdlYWtCbG9jazo6ZmluYWxpemUoV2Vha0ltcGwqIHdl
YWtJbXBsKQoreworICAgIEFTU0VSVCh3ZWFrSW1wbC0+c3RhdGUoKSA9PSBXZWFrSW1wbDo6RGVh
ZCk7CisgICAgd2Vha0ltcGwtPnNldFN0YXRlKFdlYWtJbXBsOjpGaW5hbGl6ZWQpOworICAgIFdl
YWtIYW5kbGVPd25lciogd2Vha0hhbmRsZU93bmVyID0gd2Vha0ltcGwtPndlYWtIYW5kbGVPd25l
cigpOworICAgIGlmICghd2Vha0hhbmRsZU93bmVyKQorICAgICAgICByZXR1cm47CisjaWYgIUFT
U0VSVF9ESVNBQkxFRAorICAgIHdlYWtJbXBsLT5qc1ZhbHVlKCkuYXNDZWxsKCktPmNsZWFyU3Ry
dWN0dXJlKCk7CisjZW5kaWYKKyAgICB3ZWFrSGFuZGxlT3duZXItPmZpbmFsaXplKEhhbmRsZTxV
bmtub3duPjo6d3JhcFNsb3QoJmNvbnN0X2Nhc3Q8SlNWYWx1ZSY+KHdlYWtJbXBsLT5qc1ZhbHVl
KCkpKSwgd2Vha0ltcGwtPmNvbnRleHQoKSk7Cit9CisKIH0gLy8gbmFtZXNwYWNlIEpTQwogCiAj
ZW5kaWYgLy8gV2Vha1NldElubGluZXNfaApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvQXJndW1lbnRzLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Bcmd1bWVudHMuY3BwCShyZXZpc2lvbiAxMTg2MTQpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvcnVudGltZS9Bcmd1bWVudHMuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC01NCw3ICs1
NCw3IEBAIHZvaWQgQXJndW1lbnRzOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2UKIAogdm9pZCBB
cmd1bWVudHM6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewotICAgIGpzQ2FzdDxBcmd1bWVudHMq
PihjZWxsKS0+QXJndW1lbnRzOjp+QXJndW1lbnRzKCk7CisgICAgc3RhdGljX2Nhc3Q8QXJndW1l
bnRzKj4oY2VsbCktPkFyZ3VtZW50czo6fkFyZ3VtZW50cygpOwogfQogCiB2b2lkIEFyZ3VtZW50
czo6Y29weVRvQXJndW1lbnRzKEV4ZWNTdGF0ZSogZXhlYywgQ2FsbEZyYW1lKiBjYWxsRnJhbWUs
IHVpbnQzMl90IGxlbmd0aCkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0Rh
dGVJbnN0YW5jZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRGF0ZUluc3RhbmNlLmNwcAkocmV2aXNpb24gMTE4NjE0KQorKysgU291cmNlL0phdmFTY3Jp
cHRDb3JlL3J1bnRpbWUvRGF0ZUluc3RhbmNlLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTUsNyAr
NTUsNyBAQCB2b2lkIERhdGVJbnN0YW5jZTo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iCiAKIHZvaWQg
RGF0ZUluc3RhbmNlOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKLSAgICBqc0Nhc3Q8RGF0ZUlu
c3RhbmNlKj4oY2VsbCktPkRhdGVJbnN0YW5jZTo6fkRhdGVJbnN0YW5jZSgpOworICAgIHN0YXRp
Y19jYXN0PERhdGVJbnN0YW5jZSo+KGNlbGwpLT5EYXRlSW5zdGFuY2U6On5EYXRlSW5zdGFuY2Uo
KTsKIH0KIAogY29uc3QgR3JlZ29yaWFuRGF0ZVRpbWUqIERhdGVJbnN0YW5jZTo6Y2FsY3VsYXRl
R3JlZ29yaWFuRGF0ZVRpbWUoRXhlY1N0YXRlKiBleGVjKSBjb25zdApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL0Vycm9yLmNwcAkocmV2aXNpb24gMTE4NjE0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvRXJyb3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xODMs
NyArMTgzLDcgQEAgY29uc3QgQ2xhc3NJbmZvIFN0cmljdE1vZGVUeXBlRXJyb3JGdW5jdAogCiB2
b2lkIFN0cmljdE1vZGVUeXBlRXJyb3JGdW5jdGlvbjo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7
Ci0gICAganNDYXN0PFN0cmljdE1vZGVUeXBlRXJyb3JGdW5jdGlvbio+KGNlbGwpLT5TdHJpY3RN
b2RlVHlwZUVycm9yRnVuY3Rpb246On5TdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb24oKTsKKyAg
ICBzdGF0aWNfY2FzdDxTdHJpY3RNb2RlVHlwZUVycm9yRnVuY3Rpb24qPihjZWxsKS0+U3RyaWN0
TW9kZVR5cGVFcnJvckZ1bmN0aW9uOjp+U3RyaWN0TW9kZVR5cGVFcnJvckZ1bmN0aW9uKCk7CiB9
CiAKIH0gLy8gbmFtZXNwYWNlIEpTQwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRp
bWUvRXhlY3V0YWJsZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3J1
bnRpbWUvRXhlY3V0YWJsZS5jcHAJKHJldmlzaW9uIDExODYxNCkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ydW50aW1lL0V4ZWN1dGFibGUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00Myw3ICs0
Myw3IEBAIGNvbnN0IENsYXNzSW5mbyBFeGVjdXRhYmxlQmFzZTo6c19pbmZvID0KICNpZiBFTkFC
TEUoSklUKQogdm9pZCBFeGVjdXRhYmxlQmFzZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7Ci0g
ICAganNDYXN0PEV4ZWN1dGFibGVCYXNlKj4oY2VsbCktPkV4ZWN1dGFibGVCYXNlOjp+RXhlY3V0
YWJsZUJhc2UoKTsKKyAgICBzdGF0aWNfY2FzdDxFeGVjdXRhYmxlQmFzZSo+KGNlbGwpLT5FeGVj
dXRhYmxlQmFzZTo6fkV4ZWN1dGFibGVCYXNlKCk7CiB9CiAjZW5kaWYKIApAQCAtNzMsNyArNzMs
NyBAQCBjb25zdCBDbGFzc0luZm8gTmF0aXZlRXhlY3V0YWJsZTo6c19pbmZvCiAjaWYgRU5BQkxF
KEpJVCkKIHZvaWQgTmF0aXZlRXhlY3V0YWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7Ci0g
ICAganNDYXN0PE5hdGl2ZUV4ZWN1dGFibGUqPihjZWxsKS0+TmF0aXZlRXhlY3V0YWJsZTo6fk5h
dGl2ZUV4ZWN1dGFibGUoKTsKKyAgICBzdGF0aWNfY2FzdDxOYXRpdmVFeGVjdXRhYmxlKj4oY2Vs
bCktPk5hdGl2ZUV4ZWN1dGFibGU6On5OYXRpdmVFeGVjdXRhYmxlKCk7CiB9CiAjZW5kaWYKIApA
QCAtMTA4LDcgKzEwOCw3IEBAIGNvbnN0IENsYXNzSW5mbyBTY3JpcHRFeGVjdXRhYmxlOjpzX2lu
Zm8KICNpZiBFTkFCTEUoSklUKQogdm9pZCBTY3JpcHRFeGVjdXRhYmxlOjpkZXN0cm95KEpTQ2Vs
bCogY2VsbCkKIHsKLSAgICBqc0Nhc3Q8U2NyaXB0RXhlY3V0YWJsZSo+KGNlbGwpLT5TY3JpcHRF
eGVjdXRhYmxlOjp+U2NyaXB0RXhlY3V0YWJsZSgpOworICAgIHN0YXRpY19jYXN0PFNjcmlwdEV4
ZWN1dGFibGUqPihjZWxsKS0+U2NyaXB0RXhlY3V0YWJsZTo6flNjcmlwdEV4ZWN1dGFibGUoKTsK
IH0KICNlbmRpZgogCkBAIC0xMjEsNyArMTIxLDcgQEAgRXZhbEV4ZWN1dGFibGU6OkV2YWxFeGVj
dXRhYmxlKEV4ZWNTdGF0ZQogCiB2b2lkIEV2YWxFeGVjdXRhYmxlOjpkZXN0cm95KEpTQ2VsbCog
Y2VsbCkKIHsKLSAgICBqc0Nhc3Q8RXZhbEV4ZWN1dGFibGUqPihjZWxsKS0+RXZhbEV4ZWN1dGFi
bGU6On5FdmFsRXhlY3V0YWJsZSgpOworICAgIHN0YXRpY19jYXN0PEV2YWxFeGVjdXRhYmxlKj4o
Y2VsbCktPkV2YWxFeGVjdXRhYmxlOjp+RXZhbEV4ZWN1dGFibGUoKTsKIH0KIAogY29uc3QgQ2xh
c3NJbmZvIFByb2dyYW1FeGVjdXRhYmxlOjpzX2luZm8gPSB7ICJQcm9ncmFtRXhlY3V0YWJsZSIs
ICZTY3JpcHRFeGVjdXRhYmxlOjpzX2luZm8sIDAsIDAsIENSRUFURV9NRVRIT0RfVEFCTEUoUHJv
Z3JhbUV4ZWN1dGFibGUpIH07CkBAIC0xMzMsNyArMTMzLDcgQEAgUHJvZ3JhbUV4ZWN1dGFibGU6
OlByb2dyYW1FeGVjdXRhYmxlKEV4ZQogCiB2b2lkIFByb2dyYW1FeGVjdXRhYmxlOjpkZXN0cm95
KEpTQ2VsbCogY2VsbCkKIHsKLSAgICBqc0Nhc3Q8UHJvZ3JhbUV4ZWN1dGFibGUqPihjZWxsKS0+
UHJvZ3JhbUV4ZWN1dGFibGU6On5Qcm9ncmFtRXhlY3V0YWJsZSgpOworICAgIHN0YXRpY19jYXN0
PFByb2dyYW1FeGVjdXRhYmxlKj4oY2VsbCktPlByb2dyYW1FeGVjdXRhYmxlOjp+UHJvZ3JhbUV4
ZWN1dGFibGUoKTsKIH0KIAogY29uc3QgQ2xhc3NJbmZvIEZ1bmN0aW9uRXhlY3V0YWJsZTo6c19p
bmZvID0geyAiRnVuY3Rpb25FeGVjdXRhYmxlIiwgJlNjcmlwdEV4ZWN1dGFibGU6OnNfaW5mbywg
MCwgMCwgQ1JFQVRFX01FVEhPRF9UQUJMRShGdW5jdGlvbkV4ZWN1dGFibGUpIH07CkBAIC0xNjYs
NyArMTY2LDcgQEAgRnVuY3Rpb25FeGVjdXRhYmxlOjpGdW5jdGlvbkV4ZWN1dGFibGUoRQogCiB2
b2lkIEZ1bmN0aW9uRXhlY3V0YWJsZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7Ci0gICAganND
YXN0PEZ1bmN0aW9uRXhlY3V0YWJsZSo+KGNlbGwpLT5GdW5jdGlvbkV4ZWN1dGFibGU6On5GdW5j
dGlvbkV4ZWN1dGFibGUoKTsKKyAgICBzdGF0aWNfY2FzdDxGdW5jdGlvbkV4ZWN1dGFibGUqPihj
ZWxsKS0+RnVuY3Rpb25FeGVjdXRhYmxlOjp+RnVuY3Rpb25FeGVjdXRhYmxlKCk7CiB9CiAKIEpT
T2JqZWN0KiBFdmFsRXhlY3V0YWJsZTo6Y29tcGlsZU9wdGltaXplZChFeGVjU3RhdGUqIGV4ZWMs
IFNjb3BlQ2hhaW5Ob2RlKiBzY29wZUNoYWluTm9kZSkKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU0dsb2JhbE9iamVjdC5jcHAJKHJldmlzaW9uIDExODYxNCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTI3LDcgKzEyNyw3IEBAIEpTR2xvYmFsT2JqZWN0Ojp+SlNHbG9iYWxP
YmplY3QoKQogCiB2b2lkIEpTR2xvYmFsT2JqZWN0OjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsK
LSAgICBqc0Nhc3Q8SlNHbG9iYWxPYmplY3QqPihjZWxsKS0+SlNHbG9iYWxPYmplY3Q6On5KU0ds
b2JhbE9iamVjdCgpOworICAgIHN0YXRpY19jYXN0PEpTR2xvYmFsT2JqZWN0Kj4oY2VsbCktPkpT
R2xvYmFsT2JqZWN0Ojp+SlNHbG9iYWxPYmplY3QoKTsKIH0KIAogdm9pZCBKU0dsb2JhbE9iamVj
dDo6aW5pdChKU09iamVjdCogdGhpc1ZhbHVlKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNQcm9wZXJ0eU5hbWVJdGVyYXRvci5jcHAJKHJldmlz
aW9uIDExODYxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTUHJvcGVydHlO
YW1lSXRlcmF0b3IuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC04Myw3ICs4Myw3IEBAIEpTUHJvcGVy
dHlOYW1lSXRlcmF0b3IqIEpTUHJvcGVydHlOYW1lSXQKIAogdm9pZCBKU1Byb3BlcnR5TmFtZUl0
ZXJhdG9yOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKLSAgICBqc0Nhc3Q8SlNQcm9wZXJ0eU5h
bWVJdGVyYXRvcio+KGNlbGwpLT5KU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjp+SlNQcm9wZXJ0eU5h
bWVJdGVyYXRvcigpOworICAgIHN0YXRpY19jYXN0PEpTUHJvcGVydHlOYW1lSXRlcmF0b3IqPihj
ZWxsKS0+SlNQcm9wZXJ0eU5hbWVJdGVyYXRvcjo6fkpTUHJvcGVydHlOYW1lSXRlcmF0b3IoKTsK
IH0KIAogSlNWYWx1ZSBKU1Byb3BlcnR5TmFtZUl0ZXJhdG9yOjpnZXQoRXhlY1N0YXRlKiBleGVj
LCBKU09iamVjdCogYmFzZSwgc2l6ZV90IGkpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvcnVudGltZS9KU1N0YXRpY1Njb3BlT2JqZWN0LmNwcAkocmV2aXNpb24gMTE4
NjE0KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNTdGF0aWNTY29wZU9iamVj
dC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTM2LDcgKzM2LDcgQEAgY29uc3QgQ2xhc3NJbmZvIEpT
U3RhdGljU2NvcGVPYmplY3Q6OnNfaQogCiB2b2lkIEpTU3RhdGljU2NvcGVPYmplY3Q6OmRlc3Ry
b3koSlNDZWxsKiBjZWxsKQogewotICAgIGpzQ2FzdDxKU1N0YXRpY1Njb3BlT2JqZWN0Kj4oY2Vs
bCktPkpTU3RhdGljU2NvcGVPYmplY3Q6On5KU1N0YXRpY1Njb3BlT2JqZWN0KCk7CisgICAgc3Rh
dGljX2Nhc3Q8SlNTdGF0aWNTY29wZU9iamVjdCo+KGNlbGwpLT5KU1N0YXRpY1Njb3BlT2JqZWN0
Ojp+SlNTdGF0aWNTY29wZU9iamVjdCgpOwogfQogCiB2b2lkIEpTU3RhdGljU2NvcGVPYmplY3Q6
OnZpc2l0Q2hpbGRyZW4oSlNDZWxsKiBjZWxsLCBTbG90VmlzaXRvciYgdmlzaXRvcikKSW5kZXg6
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9KU1N0cmluZy5jcHAJKHJldmlzaW9uIDEx
ODYxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTU3RyaW5nLmNwcAkod29y
a2luZyBjb3B5KQpAQCAtNDcsNyArNDcsNyBAQCB2b2lkIEpTUm9wZVN0cmluZzo6Um9wZUJ1aWxk
ZXI6OmV4cGFuZCgpCiAKIHZvaWQgSlNTdHJpbmc6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewot
ICAgIEpTU3RyaW5nKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTU3RyaW5nKj4oY2VsbCk7CisgICAg
SlNTdHJpbmcqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1N0cmluZyo+KGNlbGwpOwogICAg
IHRoaXNPYmplY3QtPkpTU3RyaW5nOjp+SlNTdHJpbmcoKTsKIH0KIApJbmRleDogU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvSlNWYXJpYWJsZU9iamVjdC5jcHAJKHJldmlz
aW9uIDExODYxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL0pTVmFyaWFibGVP
YmplY3QuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0zOSw3ICszOSw3IEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiB2b2lkIEpTVmFyaWFibGVPYmplY3Q6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewotICAg
IGpzQ2FzdDxKU1ZhcmlhYmxlT2JqZWN0Kj4oY2VsbCktPkpTVmFyaWFibGVPYmplY3Q6On5KU1Zh
cmlhYmxlT2JqZWN0KCk7CisgICAgc3RhdGljX2Nhc3Q8SlNWYXJpYWJsZU9iamVjdCo+KGNlbGwp
LT5KU1ZhcmlhYmxlT2JqZWN0Ojp+SlNWYXJpYWJsZU9iamVjdCgpOwogfQogCiBib29sIEpTVmFy
aWFibGVPYmplY3Q6OmRlbGV0ZVByb3BlcnR5KEpTQ2VsbCogY2VsbCwgRXhlY1N0YXRlKiBleGVj
LCBQcm9wZXJ0eU5hbWUgcHJvcGVydHlOYW1lKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3Jl
L3J1bnRpbWUvTmFtZUluc3RhbmNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvcnVudGltZS9OYW1lSW5zdGFuY2UuY3BwCShyZXZpc2lvbiAxMTg2MTQpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9OYW1lSW5zdGFuY2UuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0zOCw3ICszOCw3IEBAIE5hbWVJbnN0YW5jZTo6TmFtZUluc3RhbmNlKEpTR2xvYmFsRGF0
YSYKIAogdm9pZCBOYW1lSW5zdGFuY2U6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewotICAgIGpz
Q2FzdDxOYW1lSW5zdGFuY2UqPihjZWxsKS0+TmFtZUluc3RhbmNlOjp+TmFtZUluc3RhbmNlKCk7
CisgICAgc3RhdGljX2Nhc3Q8TmFtZUluc3RhbmNlKj4oY2VsbCktPk5hbWVJbnN0YW5jZTo6fk5h
bWVJbnN0YW5jZSgpOwogfQogCiB9IC8vIG5hbWVzcGFjZSBKU0MKSW5kZXg6IFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9ydW50aW1lL1JlZ0V4cC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFT
Y3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcAkocmV2aXNpb24gMTE4NjE0KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjQz
LDcgKzI0Myw3IEBAIHZvaWQgUmVnRXhwOjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbERhdGEKIAog
dm9pZCBSZWdFeHA6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewotICAgIFJlZ0V4cCogdGhpc09i
amVjdCA9IGpzQ2FzdDxSZWdFeHAqPihjZWxsKTsKKyAgICBSZWdFeHAqIHRoaXNPYmplY3QgPSBz
dGF0aWNfY2FzdDxSZWdFeHAqPihjZWxsKTsKICNpZiBSRUdFWFBfRlVOQ19URVNUX0RBVEFfR0VO
CiAgICAgUmVnRXhwRnVuY3Rpb25hbFRlc3RDb2xsZWN0b3I6OmdldCgpLT5jbGVhclJlZ0V4cCh0
aGlzKTsKICNlbmRpZgpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhw
Q29uc3RydWN0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50
aW1lL1JlZ0V4cENvbnN0cnVjdG9yLmNwcAkocmV2aXNpb24gMTE4NjE0KQorKysgU291cmNlL0ph
dmFTY3JpcHRDb3JlL3J1bnRpbWUvUmVnRXhwQ29uc3RydWN0b3IuY3BwCSh3b3JraW5nIGNvcHkp
CkBAIC0xMDQsNyArMTA0LDcgQEAgdm9pZCBSZWdFeHBDb25zdHJ1Y3Rvcjo6ZmluaXNoQ3JlYXRp
b24oRQogCiB2b2lkIFJlZ0V4cENvbnN0cnVjdG9yOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsK
LSAgICBqc0Nhc3Q8UmVnRXhwQ29uc3RydWN0b3IqPihjZWxsKS0+UmVnRXhwQ29uc3RydWN0b3I6
On5SZWdFeHBDb25zdHJ1Y3RvcigpOworICAgIHN0YXRpY19jYXN0PFJlZ0V4cENvbnN0cnVjdG9y
Kj4oY2VsbCktPlJlZ0V4cENvbnN0cnVjdG9yOjp+UmVnRXhwQ29uc3RydWN0b3IoKTsKIH0KIAog
dm9pZCBSZWdFeHBDb25zdHJ1Y3Rvcjo6dmlzaXRDaGlsZHJlbihKU0NlbGwqIGNlbGwsIFNsb3RW
aXNpdG9yJiB2aXNpdG9yKQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3J1bnRpbWUvU3Ry
dWN0dXJlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9T
dHJ1Y3R1cmUuY3BwCShyZXZpc2lvbiAxMTg2MTQpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
cnVudGltZS9TdHJ1Y3R1cmUuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0yMTYsNyArMjE2LDcgQEAg
U3RydWN0dXJlOjpTdHJ1Y3R1cmUoSlNHbG9iYWxEYXRhJiBnbG9iYQogCiB2b2lkIFN0cnVjdHVy
ZTo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7Ci0gICAganNDYXN0PFN0cnVjdHVyZSo+KGNlbGwp
LT5TdHJ1Y3R1cmU6On5TdHJ1Y3R1cmUoKTsKKyAgICBzdGF0aWNfY2FzdDxTdHJ1Y3R1cmUqPihj
ZWxsKS0+U3RydWN0dXJlOjp+U3RydWN0dXJlKCk7CiB9CiAKIHZvaWQgU3RydWN0dXJlOjptYXRl
cmlhbGl6ZVByb3BlcnR5TWFwKEpTR2xvYmFsRGF0YSYgZ2xvYmFsRGF0YSkKSW5kZXg6IFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNoYWluLmNwcAo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvcnVudGltZS9TdHJ1Y3R1cmVDaGFpbi5jcHAJKHJldmlz
aW9uIDExODYxNCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9ydW50aW1lL1N0cnVjdHVyZUNo
YWluLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDEsNyArNDEsNyBAQCBTdHJ1Y3R1cmVDaGFpbjo6
U3RydWN0dXJlQ2hhaW4oSlNHbG9iYWxECiAKIHZvaWQgU3RydWN0dXJlQ2hhaW46OmRlc3Ryb3ko
SlNDZWxsKiBjZWxsKQogewotICAgIGpzQ2FzdDxTdHJ1Y3R1cmVDaGFpbio+KGNlbGwpLT5TdHJ1
Y3R1cmVDaGFpbjo6flN0cnVjdHVyZUNoYWluKCk7CisgICAgc3RhdGljX2Nhc3Q8U3RydWN0dXJl
Q2hhaW4qPihjZWxsKS0+U3RydWN0dXJlQ2hhaW46On5TdHJ1Y3R1cmVDaGFpbigpOwogfQogCiB2
b2lkIFN0cnVjdHVyZUNoYWluOjp2aXNpdENoaWxkcmVuKEpTQ2VsbCogY2VsbCwgU2xvdFZpc2l0
b3ImIHZpc2l0b3IpCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvQ2hhbmdlTG9nCShyZXZpc2lvbiAxMTg2MTQpCisrKyBTb3VyY2Uv
V2ViQ29yZS9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkKQEAgLTEsMyArMSw2OSBAQAorMjAxMi0w
NS0yNiAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBwbGUuY29tPgorCisgICAgICAgIFdlYktp
dCBzaG91bGQgYmUgbGF6eS1maW5hbGl6YXRpb24tc2FmZSAoZXNwLiB0aGUgRE9NKSB2MgorICAg
ICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9ODc1ODEKKworICAg
ICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4KKworICAgICAgICAqIGJpbmRpbmdzL2pz
L0pTRE9NR2xvYmFsT2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTRE9NR2xvYmFsT2Jq
ZWN0OjpkZXN0cm95KToKKyAgICAgICAgKiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3Bw
OgorICAgICAgICAoV2ViQ29yZTo6SlNET01XaW5kb3dCYXNlOjpkZXN0cm95KToKKyAgICAgICAg
KiBiaW5kaW5ncy9qcy9KU0RPTVdpbmRvd1NoZWxsLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpT
RE9NV2luZG93U2hlbGw6OmRlc3Ryb3kpOgorICAgICAgICAqIGJpbmRpbmdzL2pzL0pTTm9kZUN1
c3RvbS5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU05vZGVPd25lcjo6ZmluYWxpemUpOgorICAg
ICAgICAqIGJpbmRpbmdzL2pzL0pTV29ya2VyQ29udGV4dEJhc2UuY3BwOgorICAgICAgICAoV2Vi
Q29yZTo6SlNXb3JrZXJDb250ZXh0QmFzZTo6ZGVzdHJveSk6CisgICAgICAgICogYmluZGluZ3Mv
c2NyaXB0cy9Db2RlR2VuZXJhdG9ySlMucG06CisgICAgICAgIChHZW5lcmF0ZUltcGxlbWVudGF0
aW9uKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9N
T2JqZWN0LmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEFjdGl2ZURPTU9iamVjdDo6ZGVz
dHJveSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RBY3RpdmVET01PYmplY3RPd25lcjo6Zmlu
YWxpemUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21O
YW1lZEdldHRlci5jcHA6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDdXN0b21OYW1lZEdldHRl
cjo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RDdXN0b21OYW1lZEdldHRlck93
bmVyOjpmaW5hbGl6ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVz
dEV2ZW50Q29uc3RydWN0b3IuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRDb25z
dHJ1Y3Rvcjo6ZGVzdHJveSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RFdmVudENvbnN0cnVj
dG9yT3duZXI6OmZpbmFsaXplKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0RXZlbnRUYXJnZXQuY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRUYXJn
ZXQ6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXZlbnRUYXJnZXRPd25lcjo6
ZmluYWxpemUpOgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RFeGNl
cHRpb24uY3BwOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0RXhjZXB0aW9uOjpkZXN0cm95KToK
KyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdEV4Y2VwdGlvbk93bmVyOjpmaW5hbGl6ZSk6CisgICAg
ICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFjZS5jcHA6CisgICAg
ICAgIChXZWJDb3JlOjpKU1Rlc3RJbnRlcmZhY2U6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0SW50ZXJmYWNlT3duZXI6OmZpbmFsaXplKToKKyAgICAgICAgKiBiaW5kaW5ncy9z
Y3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHA6CisgICAgICAg
IChXZWJDb3JlOjpKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyOjpkZXN0cm95KToKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJPd25lcjo6ZmluYWxpemUp
OgorICAgICAgICAqIGJpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3ROYW1lZENvbnN0cnVj
dG9yLmNwcDoKKyAgICAgICAgKFdlYkNvcmU6OkpTVGVzdE5hbWVkQ29uc3RydWN0b3I6OmRlc3Ry
b3kpOgorICAgICAgICAoV2ViQ29yZTo6SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck93bmVyOjpmaW5h
bGl6ZSk6CisgICAgICAgICogYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHA6
CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RPYmo6OmRlc3Ryb3kpOgorICAgICAgICAoV2ViQ29y
ZTo6SlNUZXN0T2JqT3duZXI6OmZpbmFsaXplKToKKyAgICAgICAgKiBiaW5kaW5ncy9zY3JpcHRz
L3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlLmNwcDoKKyAgICAg
ICAgKFdlYkNvcmU6OkpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZTo6ZGVzdHJv
eSk6CisgICAgICAgIChXZWJDb3JlOjpKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2VPd25lcjo6ZmluYWxpemUpOgorICAgICAgICAqIGJyaWRnZS9vYmpjL29iamNfcnVudGltZS5t
bToKKyAgICAgICAgKEpTQzo6QmluZGluZ3M6Ok9iamNGYWxsYmFja09iamVjdEltcDo6ZGVzdHJv
eSk6CisgICAgICAgICogYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3BwOgorICAgICAgICAoSlNDOjpC
aW5kaW5nczo6UXRSdW50aW1lTWV0aG9kOjpkZXN0cm95KToKKyAgICAgICAgKiBicmlkZ2UvcXQv
cXRfcnVudGltZV9xdDQuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6UXRSdW50aW1lTWV0
aG9kOjpkZXN0cm95KToKKyAgICAgICAgKiBicmlkZ2UvcnVudGltZV9hcnJheS5jcHA6CisgICAg
ICAgIChKU0M6OlJ1bnRpbWVBcnJheTo6ZGVzdHJveSk6CisgICAgICAgICogYnJpZGdlL3J1bnRp
bWVfbWV0aG9kLmNwcDoKKyAgICAgICAgKEpTQzo6UnVudGltZU1ldGhvZDo6ZGVzdHJveSk6Cisg
ICAgICAgICogYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcDoKKyAgICAgICAgKEpTQzo6QmluZGlu
Z3M6OlJ1bnRpbWVPYmplY3Q6OmRlc3Ryb3kpOgorICAgICAgICAqIGJyaWRnZS9ydW50aW1lX3Jv
b3QuY3BwOgorICAgICAgICAoSlNDOjpCaW5kaW5nczo6Um9vdE9iamVjdDo6ZmluYWxpemUpOiBV
c2Ugc3RhdGljX2Nhc3QgaW5zdGVhZCBvZiBqc0Nhc3QgYmVjYXVzZQorICAgICAgICBqc0Nhc3Qg
ZG9lcyBTdHJ1Y3R1cmUtYmFzZWQgdmFsaWRhdGlvbiwgYW5kIG91ciBTdHJ1Y3R1cmUgaXMgbm90
IGd1YXJhbnRlZWQKKyAgICAgICAgdG8gYmUgYWxpdmUgd2hlbiB3ZSBnZXQgZmluYWxpemVkLgor
CiAyMDEyLTA1LTI2ICBTaW1vbiBGcmFzZXIgIDxzaW1vbi5mcmFzZXJAYXBwbGUuY29tPgogCiAg
ICAgICAgIENsaXAgcmVjdHMgYXNzZXJ0aW9uIHdoZW4gaG92ZXJpbmcgZGl2IHdpdGggdHJhbnNm
b3JtCkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTUdsb2JhbE9iamVjdC5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01HbG9iYWxP
YmplY3QuY3BwCShyZXZpc2lvbiAxMTg2MTQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9q
cy9KU0RPTUdsb2JhbE9iamVjdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTUxLDcgKzUxLDcgQEAg
SlNET01HbG9iYWxPYmplY3Q6OkpTRE9NR2xvYmFsT2JqZWN0KEpTRwogCiB2b2lkIEpTRE9NR2xv
YmFsT2JqZWN0OjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKLSAgICBqc0Nhc3Q8SlNET01HbG9i
YWxPYmplY3QqPihjZWxsKS0+SlNET01HbG9iYWxPYmplY3Q6On5KU0RPTUdsb2JhbE9iamVjdCgp
OworICAgIHN0YXRpY19jYXN0PEpTRE9NR2xvYmFsT2JqZWN0Kj4oY2VsbCktPkpTRE9NR2xvYmFs
T2JqZWN0Ojp+SlNET01HbG9iYWxPYmplY3QoKTsKIH0KIAogdm9pZCBKU0RPTUdsb2JhbE9iamVj
dDo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxEYXRhJiBnbG9iYWxEYXRhKQpJbmRleDogU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dCYXNlLmNwcAo9PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3BwCShyZXZpc2lvbiAx
MTg2MTQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU0RPTVdpbmRvd0Jhc2UuY3Bw
CSh3b3JraW5nIGNvcHkpCkBAIC02Nyw3ICs2Nyw3IEBAIHZvaWQgSlNET01XaW5kb3dCYXNlOjpm
aW5pc2hDcmVhdGlvbihKU0cKIAogdm9pZCBKU0RPTVdpbmRvd0Jhc2U6OmRlc3Ryb3koSlNDZWxs
KiBjZWxsKQogewotICAgIGpzQ2FzdDxKU0RPTVdpbmRvd0Jhc2UqPihjZWxsKS0+SlNET01XaW5k
b3dCYXNlOjp+SlNET01XaW5kb3dCYXNlKCk7CisgICAgc3RhdGljX2Nhc3Q8SlNET01XaW5kb3dC
YXNlKj4oY2VsbCktPkpTRE9NV2luZG93QmFzZTo6fkpTRE9NV2luZG93QmFzZSgpOwogfQogCiB2
b2lkIEpTRE9NV2luZG93QmFzZTo6dXBkYXRlRG9jdW1lbnQoKQpJbmRleDogU291cmNlL1dlYkNv
cmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5jcHAKPT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNl
L1dlYkNvcmUvYmluZGluZ3MvanMvSlNET01XaW5kb3dTaGVsbC5jcHAJKHJldmlzaW9uIDExODYx
NCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTRE9NV2luZG93U2hlbGwuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC01OSw3ICs1OSw3IEBAIHZvaWQgSlNET01XaW5kb3dTaGVsbDo6Zmlu
aXNoQ3JlYXRpb24oSlMKIAogdm9pZCBKU0RPTVdpbmRvd1NoZWxsOjpkZXN0cm95KEpTQ2VsbCog
Y2VsbCkKIHsKLSAgICBqc0Nhc3Q8SlNET01XaW5kb3dTaGVsbCo+KGNlbGwpLT5KU0RPTVdpbmRv
d1NoZWxsOjp+SlNET01XaW5kb3dTaGVsbCgpOworICAgIHN0YXRpY19jYXN0PEpTRE9NV2luZG93
U2hlbGwqPihjZWxsKS0+SlNET01XaW5kb3dTaGVsbDo6fkpTRE9NV2luZG93U2hlbGwoKTsKIH0K
IAogdm9pZCBKU0RPTVdpbmRvd1NoZWxsOjpzZXRXaW5kb3coUGFzc1JlZlB0cjxET01XaW5kb3c+
IGRvbVdpbmRvdykKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL2pzL0pTTm9kZUN1c3Rv
bS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMvSlNOb2RlQ3Vz
dG9tLmNwcAkocmV2aXNpb24gMTE4NjE0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNOb2RlQ3VzdG9tLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTM4LDcgKzEzOCw3IEBAIGJvb2wg
SlNOb2RlT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXF1ZVIKIAogdm9pZCBKU05vZGVPd25lcjo6
ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqIGNvbnRleHQp
CiB7Ci0gICAgSlNOb2RlKiBqc05vZGUgPSBqc0Nhc3Q8SlNOb2RlKj4oaGFuZGxlLmdldCgpLmFz
Q2VsbCgpKTsKKyAgICBKU05vZGUqIGpzTm9kZSA9IHN0YXRpY19jYXN0PEpTTm9kZSo+KGhhbmRs
ZS5nZXQoKS5hc0NlbGwoKSk7CiAgICAgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCA9IHN0YXRpY19j
YXN0PERPTVdyYXBwZXJXb3JsZCo+KGNvbnRleHQpOwogICAgIHVuY2FjaGVXcmFwcGVyKHdvcmxk
LCBqc05vZGUtPmltcGwoKSwganNOb2RlKTsKICAgICBqc05vZGUtPnJlbGVhc2VJbXBsKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRCYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9qcy9KU1dvcmtlckNvbnRleHRC
YXNlLmNwcAkocmV2aXNpb24gMTE4NjE0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3MvanMv
SlNXb3JrZXJDb250ZXh0QmFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTYyLDcgKzYyLDcgQEAg
dm9pZCBKU1dvcmtlckNvbnRleHRCYXNlOjpmaW5pc2hDcmVhdGlvbgogCiB2b2lkIEpTV29ya2Vy
Q29udGV4dEJhc2U6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewotICAgIGpzQ2FzdDxKU1dvcmtl
ckNvbnRleHRCYXNlKj4oY2VsbCktPkpTV29ya2VyQ29udGV4dEJhc2U6On5KU1dvcmtlckNvbnRl
eHRCYXNlKCk7CisgICAgc3RhdGljX2Nhc3Q8SlNXb3JrZXJDb250ZXh0QmFzZSo+KGNlbGwpLT5K
U1dvcmtlckNvbnRleHRCYXNlOjp+SlNXb3JrZXJDb250ZXh0QmFzZSgpOwogfQogCiBTY3JpcHRF
eGVjdXRpb25Db250ZXh0KiBKU1dvcmtlckNvbnRleHRCYXNlOjpzY3JpcHRFeGVjdXRpb25Db250
ZXh0KCkgY29uc3QKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvQ29kZUdl
bmVyYXRvckpTLnBtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3Njcmlw
dHMvQ29kZUdlbmVyYXRvckpTLnBtCShyZXZpc2lvbiAxMTg2MTQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL0NvZGVHZW5lcmF0b3JKUy5wbQkod29ya2luZyBjb3B5KQpAQCAt
MTYyNiw3ICsxNjI2LDcgQEAgc3ViIEdlbmVyYXRlSW1wbGVtZW50YXRpb24KICAgICAgICAgIyB0
aGUgZmluYWxpemVyIGlzc3VlIGlzIGJlaW5nIHRyYWNrZWQgaW4gaHR0cDovL3dlYmtpdC5vcmcv
Yi83NTQ1MQogICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgInZvaWQgJHtjbGFzc05hbWV9Ojpk
ZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKVxuIik7CiAgICAgICAgIHB1c2goQGltcGxDb250ZW50
LCAie1xuIik7Ci0gICAgICAgIHB1c2goQGltcGxDb250ZW50LCAiICAgICR7Y2xhc3NOYW1lfSog
dGhpc09iamVjdCA9IGpzQ2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOworICAgICAgICBw
dXNoKEBpbXBsQ29udGVudCwgIiAgICAke2NsYXNzTmFtZX0qIHRoaXNPYmplY3QgPSBzdGF0aWNf
Y2FzdDwke2NsYXNzTmFtZX0qPihjZWxsKTtcbiIpOwogICAgICAgICBwdXNoKEBpbXBsQ29udGVu
dCwgIiAgICB0aGlzT2JqZWN0LT4ke2NsYXNzTmFtZX06On4ke2NsYXNzTmFtZX0oKTtcbiIpOwog
ICAgICAgICBwdXNoKEBpbXBsQ29udGVudCwgIn1cblxuIik7CiAKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RBY3RpdmVET01PYmplY3QuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RBY3RpdmVET01PYmplY3QuY3BwCShyZXZpc2lvbiAxMTg2MTQpCisrKyBTb3VyY2UvV2ViQ29y
ZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0QWN0aXZlRE9NT2JqZWN0LmNwcAkod29y
a2luZyBjb3B5KQpAQCAtMTI1LDcgKzEyNSw3IEBAIEpTT2JqZWN0KiBKU1Rlc3RBY3RpdmVET01P
YmplY3Q6OmNyZWF0ZVAKIAogdm9pZCBKU1Rlc3RBY3RpdmVET01PYmplY3Q6OmRlc3Ryb3koSlND
OjpKU0NlbGwqIGNlbGwpCiB7Ci0gICAgSlNUZXN0QWN0aXZlRE9NT2JqZWN0KiB0aGlzT2JqZWN0
ID0ganNDYXN0PEpTVGVzdEFjdGl2ZURPTU9iamVjdCo+KGNlbGwpOworICAgIEpTVGVzdEFjdGl2
ZURPTU9iamVjdCogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PEpTVGVzdEFjdGl2ZURPTU9iamVj
dCo+KGNlbGwpOwogICAgIHRoaXNPYmplY3QtPkpTVGVzdEFjdGl2ZURPTU9iamVjdDo6fkpTVGVz
dEFjdGl2ZURPTU9iamVjdCgpOwogfQogCkBAIC0yMjksNyArMjI5LDcgQEAgYm9vbCBKU1Rlc3RB
Y3RpdmVET01PYmplY3RPd25lcjo6aXNSZWFjaAogCiB2b2lkIEpTVGVzdEFjdGl2ZURPTU9iamVj
dE93bmVyOjpmaW5hbGl6ZShKU0M6OkhhbmRsZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCog
Y29udGV4dCkKIHsKLSAgICBKU1Rlc3RBY3RpdmVET01PYmplY3QqIGpzVGVzdEFjdGl2ZURPTU9i
amVjdCA9IGpzQ2FzdDxKU1Rlc3RBY3RpdmVET01PYmplY3QqPihoYW5kbGUuZ2V0KCkuYXNDZWxs
KCkpOworICAgIEpTVGVzdEFjdGl2ZURPTU9iamVjdCoganNUZXN0QWN0aXZlRE9NT2JqZWN0ID0g
c3RhdGljX2Nhc3Q8SlNUZXN0QWN0aXZlRE9NT2JqZWN0Kj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgp
KTsKICAgICBET01XcmFwcGVyV29ybGQqIHdvcmxkID0gc3RhdGljX2Nhc3Q8RE9NV3JhcHBlcldv
cmxkKj4oY29udGV4dCk7CiAgICAgdW5jYWNoZVdyYXBwZXIod29ybGQsIGpzVGVzdEFjdGl2ZURP
TU9iamVjdC0+aW1wbCgpLCBqc1Rlc3RBY3RpdmVET01PYmplY3QpOwogICAgIGpzVGVzdEFjdGl2
ZURPTU9iamVjdC0+cmVsZWFzZUltcGwoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdz
L3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RDdXN0b21OYW1lZEdldHRlci5jcHAKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5h
bWVkR2V0dGVyLmNwcAkocmV2aXNpb24gMTE4NjE0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGlu
Z3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEN1c3RvbU5hbWVkR2V0dGVyLmNwcAkod29ya2luZyBj
b3B5KQpAQCAtMTIzLDcgKzEyMyw3IEBAIEpTT2JqZWN0KiBKU1Rlc3RDdXN0b21OYW1lZEdldHRl
cjo6Y3JlYXQKIAogdm9pZCBKU1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6ZGVzdHJveShKU0M6OkpT
Q2VsbCogY2VsbCkKIHsKLSAgICBKU1Rlc3RDdXN0b21OYW1lZEdldHRlciogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU1Rlc3RDdXN0b21OYW1lZEdldHRlcio+KGNlbGwpOworICAgIEpTVGVzdEN1c3Rv
bU5hbWVkR2V0dGVyKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0Q3VzdG9tTmFtZWRH
ZXR0ZXIqPihjZWxsKTsKICAgICB0aGlzT2JqZWN0LT5KU1Rlc3RDdXN0b21OYW1lZEdldHRlcjo6
fkpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyKCk7CiB9CiAKQEAgLTIwMiw3ICsyMDIsNyBAQCBib29s
IEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyT3duZXI6OmlzUmVhCiAKIHZvaWQgSlNUZXN0Q3VzdG9t
TmFtZWRHZXR0ZXJPd25lcjo6ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5k
bGUsIHZvaWQqIGNvbnRleHQpCiB7Ci0gICAgSlNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXIqIGpzVGVz
dEN1c3RvbU5hbWVkR2V0dGVyID0ganNDYXN0PEpTVGVzdEN1c3RvbU5hbWVkR2V0dGVyKj4oaGFu
ZGxlLmdldCgpLmFzQ2VsbCgpKTsKKyAgICBKU1Rlc3RDdXN0b21OYW1lZEdldHRlcioganNUZXN0
Q3VzdG9tTmFtZWRHZXR0ZXIgPSBzdGF0aWNfY2FzdDxKU1Rlc3RDdXN0b21OYW1lZEdldHRlcio+
KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7CiAgICAgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCA9IHN0
YXRpY19jYXN0PERPTVdyYXBwZXJXb3JsZCo+KGNvbnRleHQpOwogICAgIHVuY2FjaGVXcmFwcGVy
KHdvcmxkLCBqc1Rlc3RDdXN0b21OYW1lZEdldHRlci0+aW1wbCgpLCBqc1Rlc3RDdXN0b21OYW1l
ZEdldHRlcik7CiAgICAganNUZXN0Q3VzdG9tTmFtZWRHZXR0ZXItPnJlbGVhc2VJbXBsKCk7Cklu
ZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRD
b25zdHJ1Y3Rvci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50Q29uc3RydWN0b3IuY3BwCShyZXZpc2lvbiAxMTg2MTQp
CisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXZlbnRD
b25zdHJ1Y3Rvci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE1Nyw3ICsxNTcsNyBAQCBKU09iamVj
dCogSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcjo6Y3JlYXRlCiAKIHZvaWQgSlNUZXN0RXZlbnRDb25z
dHJ1Y3Rvcjo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKIHsKLSAgICBKU1Rlc3RFdmVudENv
bnN0cnVjdG9yKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpTVGVzdEV2ZW50Q29uc3RydWN0b3IqPihj
ZWxsKTsKKyAgICBKU1Rlc3RFdmVudENvbnN0cnVjdG9yKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nh
c3Q8SlNUZXN0RXZlbnRDb25zdHJ1Y3Rvcio+KGNlbGwpOwogICAgIHRoaXNPYmplY3QtPkpTVGVz
dEV2ZW50Q29uc3RydWN0b3I6On5KU1Rlc3RFdmVudENvbnN0cnVjdG9yKCk7CiB9CiAKQEAgLTIy
OSw3ICsyMjksNyBAQCBib29sIEpTVGVzdEV2ZW50Q29uc3RydWN0b3JPd25lcjo6aXNSZWFjCiAK
IHZvaWQgSlNUZXN0RXZlbnRDb25zdHJ1Y3Rvck93bmVyOjpmaW5hbGl6ZShKU0M6OkhhbmRsZTxK
U0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4dCkKIHsKLSAgICBKU1Rlc3RFdmVudENv
bnN0cnVjdG9yKiBqc1Rlc3RFdmVudENvbnN0cnVjdG9yID0ganNDYXN0PEpTVGVzdEV2ZW50Q29u
c3RydWN0b3IqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkpOworICAgIEpTVGVzdEV2ZW50Q29uc3Ry
dWN0b3IqIGpzVGVzdEV2ZW50Q29uc3RydWN0b3IgPSBzdGF0aWNfY2FzdDxKU1Rlc3RFdmVudENv
bnN0cnVjdG9yKj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKICAgICBET01XcmFwcGVyV29ybGQq
IHdvcmxkID0gc3RhdGljX2Nhc3Q8RE9NV3JhcHBlcldvcmxkKj4oY29udGV4dCk7CiAgICAgdW5j
YWNoZVdyYXBwZXIod29ybGQsIGpzVGVzdEV2ZW50Q29uc3RydWN0b3ItPmltcGwoKSwganNUZXN0
RXZlbnRDb25zdHJ1Y3Rvcik7CiAgICAganNUZXN0RXZlbnRDb25zdHJ1Y3Rvci0+cmVsZWFzZUlt
cGwoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3RFdmVudFRhcmdldC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFyZ2V0LmNwcAkocmV2aXNpb24gMTE4NjE0KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEV2ZW50VGFy
Z2V0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTMyLDcgKzEzMiw3IEBAIEpTT2JqZWN0KiBKU1Rl
c3RFdmVudFRhcmdldDo6Y3JlYXRlUHJvdG8KIAogdm9pZCBKU1Rlc3RFdmVudFRhcmdldDo6ZGVz
dHJveShKU0M6OkpTQ2VsbCogY2VsbCkKIHsKLSAgICBKU1Rlc3RFdmVudFRhcmdldCogdGhpc09i
amVjdCA9IGpzQ2FzdDxKU1Rlc3RFdmVudFRhcmdldCo+KGNlbGwpOworICAgIEpTVGVzdEV2ZW50
VGFyZ2V0KiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0RXZlbnRUYXJnZXQqPihjZWxs
KTsKICAgICB0aGlzT2JqZWN0LT5KU1Rlc3RFdmVudFRhcmdldDo6fkpTVGVzdEV2ZW50VGFyZ2V0
KCk7CiB9CiAKQEAgLTMzMCw3ICszMzAsNyBAQCBib29sIEpTVGVzdEV2ZW50VGFyZ2V0T3duZXI6
OmlzUmVhY2hhYmxlCiAKIHZvaWQgSlNUZXN0RXZlbnRUYXJnZXRPd25lcjo6ZmluYWxpemUoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqIGNvbnRleHQpCiB7Ci0gICAgSlNU
ZXN0RXZlbnRUYXJnZXQqIGpzVGVzdEV2ZW50VGFyZ2V0ID0ganNDYXN0PEpTVGVzdEV2ZW50VGFy
Z2V0Kj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKKyAgICBKU1Rlc3RFdmVudFRhcmdldCoganNU
ZXN0RXZlbnRUYXJnZXQgPSBzdGF0aWNfY2FzdDxKU1Rlc3RFdmVudFRhcmdldCo+KGhhbmRsZS5n
ZXQoKS5hc0NlbGwoKSk7CiAgICAgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCA9IHN0YXRpY19jYXN0
PERPTVdyYXBwZXJXb3JsZCo+KGNvbnRleHQpOwogICAgIHVuY2FjaGVXcmFwcGVyKHdvcmxkLCBq
c1Rlc3RFdmVudFRhcmdldC0+aW1wbCgpLCBqc1Rlc3RFdmVudFRhcmdldCk7CiAgICAganNUZXN0
RXZlbnRUYXJnZXQtPnJlbGVhc2VJbXBsKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0RXhjZXB0aW9uLmNwcAko
cmV2aXNpb24gMTE4NjE0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdEV4Y2VwdGlvbi5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEwOSw3ICsxMDksNyBA
QCBKU09iamVjdCogSlNUZXN0RXhjZXB0aW9uOjpjcmVhdGVQcm90b3R5CiAKIHZvaWQgSlNUZXN0
RXhjZXB0aW9uOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogewotICAgIEpTVGVzdEV4Y2Vw
dGlvbiogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RFeGNlcHRpb24qPihjZWxsKTsKKyAgICBK
U1Rlc3RFeGNlcHRpb24qIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RFeGNlcHRpb24q
PihjZWxsKTsKICAgICB0aGlzT2JqZWN0LT5KU1Rlc3RFeGNlcHRpb246On5KU1Rlc3RFeGNlcHRp
b24oKTsKIH0KIApAQCAtMTcxLDcgKzE3MSw3IEBAIGJvb2wgSlNUZXN0RXhjZXB0aW9uT3duZXI6
OmlzUmVhY2hhYmxlRnIKIAogdm9pZCBKU1Rlc3RFeGNlcHRpb25Pd25lcjo6ZmluYWxpemUoSlND
OjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqIGNvbnRleHQpCiB7Ci0gICAgSlNU
ZXN0RXhjZXB0aW9uKiBqc1Rlc3RFeGNlcHRpb24gPSBqc0Nhc3Q8SlNUZXN0RXhjZXB0aW9uKj4o
aGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKKyAgICBKU1Rlc3RFeGNlcHRpb24qIGpzVGVzdEV4Y2Vw
dGlvbiA9IHN0YXRpY19jYXN0PEpTVGVzdEV4Y2VwdGlvbio+KGhhbmRsZS5nZXQoKS5hc0NlbGwo
KSk7CiAgICAgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCA9IHN0YXRpY19jYXN0PERPTVdyYXBwZXJX
b3JsZCo+KGNvbnRleHQpOwogICAgIHVuY2FjaGVXcmFwcGVyKHdvcmxkLCBqc1Rlc3RFeGNlcHRp
b24tPmltcGwoKSwganNUZXN0RXhjZXB0aW9uKTsKICAgICBqc1Rlc3RFeGNlcHRpb24tPnJlbGVh
c2VJbXBsKCk7CkluZGV4OiBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMv
SlNUZXN0SW50ZXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5kaW5n
cy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0SW50ZXJmYWNlLmNwcAkocmV2aXNpb24gMTE4NjE0KQor
KysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0L0pTL0pTVGVzdEludGVyZmFj
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIxMiw3ICsyMTIsNyBAQCBKU09iamVjdCogSlNUZXN0
SW50ZXJmYWNlOjpjcmVhdGVQcm90b3R5CiAKIHZvaWQgSlNUZXN0SW50ZXJmYWNlOjpkZXN0cm95
KEpTQzo6SlNDZWxsKiBjZWxsKQogewotICAgIEpTVGVzdEludGVyZmFjZSogdGhpc09iamVjdCA9
IGpzQ2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihjZWxsKTsKKyAgICBKU1Rlc3RJbnRlcmZhY2UqIHRo
aXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RJbnRlcmZhY2UqPihjZWxsKTsKICAgICB0aGlz
T2JqZWN0LT5KU1Rlc3RJbnRlcmZhY2U6On5KU1Rlc3RJbnRlcmZhY2UoKTsKIH0KIApAQCAtNDM1
LDcgKzQzNSw3IEBAIGJvb2wgSlNUZXN0SW50ZXJmYWNlT3duZXI6OmlzUmVhY2hhYmxlRnIKIAog
dm9pZCBKU1Rlc3RJbnRlcmZhY2VPd25lcjo6ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtu
b3duPiBoYW5kbGUsIHZvaWQqIGNvbnRleHQpCiB7Ci0gICAgSlNUZXN0SW50ZXJmYWNlKiBqc1Rl
c3RJbnRlcmZhY2UgPSBqc0Nhc3Q8SlNUZXN0SW50ZXJmYWNlKj4oaGFuZGxlLmdldCgpLmFzQ2Vs
bCgpKTsKKyAgICBKU1Rlc3RJbnRlcmZhY2UqIGpzVGVzdEludGVyZmFjZSA9IHN0YXRpY19jYXN0
PEpTVGVzdEludGVyZmFjZSo+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7CiAgICAgRE9NV3JhcHBl
cldvcmxkKiB3b3JsZCA9IHN0YXRpY19jYXN0PERPTVdyYXBwZXJXb3JsZCo+KGNvbnRleHQpOwog
ICAgIHVuY2FjaGVXcmFwcGVyKHdvcmxkLCBqc1Rlc3RJbnRlcmZhY2UtPmltcGwoKSwganNUZXN0
SW50ZXJmYWNlKTsKICAgICBqc1Rlc3RJbnRlcmZhY2UtPnJlbGVhc2VJbXBsKCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2Ny
aXB0cy90ZXN0L0pTL0pTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIuY3BwCShyZXZpc2lvbiAx
MTg2MTQpCisrKyBTb3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0
TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEyMyw3ICsxMjMs
NyBAQCBKU09iamVjdCogSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6CiAKIHZvaWQgSlNU
ZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lcjo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkKIHsK
LSAgICBKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKiB0aGlzT2JqZWN0ID0ganNDYXN0PEpT
VGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqPihjZWxsKTsKKyAgICBKU1Rlc3RNZWRpYVF1ZXJ5
TGlzdExpc3RlbmVyKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lcio+KGNlbGwpOwogICAgIHRoaXNPYmplY3QtPkpTVGVzdE1lZGlhUXVlcnlMaXN0
TGlzdGVuZXI6On5KU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKCk7CiB9CiAKQEAgLTE5Miw3
ICsxOTIsNyBAQCBib29sIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXJPd25lcjo6CiAKIHZv
aWQgSlNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lck93bmVyOjpmaW5hbGl6ZShKU0M6OkhhbmRs
ZTxKU0M6OlVua25vd24+IGhhbmRsZSwgdm9pZCogY29udGV4dCkKIHsKLSAgICBKU1Rlc3RNZWRp
YVF1ZXJ5TGlzdExpc3RlbmVyKiBqc1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyID0ganNDYXN0
PEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkpOwor
ICAgIEpTVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXIqIGpzVGVzdE1lZGlhUXVlcnlMaXN0TGlz
dGVuZXIgPSBzdGF0aWNfY2FzdDxKU1Rlc3RNZWRpYVF1ZXJ5TGlzdExpc3RlbmVyKj4oaGFuZGxl
LmdldCgpLmFzQ2VsbCgpKTsKICAgICBET01XcmFwcGVyV29ybGQqIHdvcmxkID0gc3RhdGljX2Nh
c3Q8RE9NV3JhcHBlcldvcmxkKj4oY29udGV4dCk7CiAgICAgdW5jYWNoZVdyYXBwZXIod29ybGQs
IGpzVGVzdE1lZGlhUXVlcnlMaXN0TGlzdGVuZXItPmltcGwoKSwganNUZXN0TWVkaWFRdWVyeUxp
c3RMaXN0ZW5lcik7CiAgICAganNUZXN0TWVkaWFRdWVyeUxpc3RMaXN0ZW5lci0+cmVsZWFzZUlt
cGwoKTsKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZENvbnN0cnVjdG9yLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvci5jcHAJKHJldmlzaW9u
IDExODYxNCkKKysrIFNvdXJjZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rl
c3ROYW1lZENvbnN0cnVjdG9yLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTUyLDcgKzE1Miw3IEBA
IEpTT2JqZWN0KiBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yOjpjcmVhdGUKIAogdm9pZCBKU1Rlc3RO
YW1lZENvbnN0cnVjdG9yOjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogewotICAgIEpTVGVz
dE5hbWVkQ29uc3RydWN0b3IqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0TmFtZWRDb25zdHJ1
Y3Rvcio+KGNlbGwpOworICAgIEpTVGVzdE5hbWVkQ29uc3RydWN0b3IqIHRoaXNPYmplY3QgPSBz
dGF0aWNfY2FzdDxKU1Rlc3ROYW1lZENvbnN0cnVjdG9yKj4oY2VsbCk7CiAgICAgdGhpc09iamVj
dC0+SlNUZXN0TmFtZWRDb25zdHJ1Y3Rvcjo6fkpTVGVzdE5hbWVkQ29uc3RydWN0b3IoKTsKIH0K
IApAQCAtMjA2LDcgKzIwNiw3IEBAIGJvb2wgSlNUZXN0TmFtZWRDb25zdHJ1Y3Rvck93bmVyOjpp
c1JlYWMKIAogdm9pZCBKU1Rlc3ROYW1lZENvbnN0cnVjdG9yT3duZXI6OmZpbmFsaXplKEpTQzo6
SGFuZGxlPEpTQzo6VW5rbm93bj4gaGFuZGxlLCB2b2lkKiBjb250ZXh0KQogewotICAgIEpTVGVz
dE5hbWVkQ29uc3RydWN0b3IqIGpzVGVzdE5hbWVkQ29uc3RydWN0b3IgPSBqc0Nhc3Q8SlNUZXN0
TmFtZWRDb25zdHJ1Y3Rvcio+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7CisgICAgSlNUZXN0TmFt
ZWRDb25zdHJ1Y3RvcioganNUZXN0TmFtZWRDb25zdHJ1Y3RvciA9IHN0YXRpY19jYXN0PEpTVGVz
dE5hbWVkQ29uc3RydWN0b3IqPihoYW5kbGUuZ2V0KCkuYXNDZWxsKCkpOwogICAgIERPTVdyYXBw
ZXJXb3JsZCogd29ybGQgPSBzdGF0aWNfY2FzdDxET01XcmFwcGVyV29ybGQqPihjb250ZXh0KTsK
ICAgICB1bmNhY2hlV3JhcHBlcih3b3JsZCwganNUZXN0TmFtZWRDb25zdHJ1Y3Rvci0+aW1wbCgp
LCBqc1Rlc3ROYW1lZENvbnN0cnVjdG9yKTsKICAgICBqc1Rlc3ROYW1lZENvbnN0cnVjdG9yLT5y
ZWxlYXNlSW1wbCgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0cy90ZXN0
L0pTL0pTVGVzdE9iai5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYmluZGluZ3Mv
c2NyaXB0cy90ZXN0L0pTL0pTVGVzdE9iai5jcHAJKHJldmlzaW9uIDExODYxNCkKKysrIFNvdXJj
ZS9XZWJDb3JlL2JpbmRpbmdzL3NjcmlwdHMvdGVzdC9KUy9KU1Rlc3RPYmouY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0zNzAsNyArMzcwLDcgQEAgSlNPYmplY3QqIEpTVGVzdE9iajo6Y3JlYXRlUHJv
dG90eXBlKEV4ZQogCiB2b2lkIEpTVGVzdE9iajo6ZGVzdHJveShKU0M6OkpTQ2VsbCogY2VsbCkK
IHsKLSAgICBKU1Rlc3RPYmoqIHRoaXNPYmplY3QgPSBqc0Nhc3Q8SlNUZXN0T2JqKj4oY2VsbCk7
CisgICAgSlNUZXN0T2JqKiB0aGlzT2JqZWN0ID0gc3RhdGljX2Nhc3Q8SlNUZXN0T2JqKj4oY2Vs
bCk7CiAgICAgdGhpc09iamVjdC0+SlNUZXN0T2JqOjp+SlNUZXN0T2JqKCk7CiB9CiAKQEAgLTI4
MTAsNyArMjgxMCw3IEBAIGJvb2wgSlNUZXN0T2JqT3duZXI6OmlzUmVhY2hhYmxlRnJvbU9wYXEK
IAogdm9pZCBKU1Rlc3RPYmpPd25lcjo6ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3du
PiBoYW5kbGUsIHZvaWQqIGNvbnRleHQpCiB7Ci0gICAgSlNUZXN0T2JqKiBqc1Rlc3RPYmogPSBq
c0Nhc3Q8SlNUZXN0T2JqKj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKKyAgICBKU1Rlc3RPYmoq
IGpzVGVzdE9iaiA9IHN0YXRpY19jYXN0PEpTVGVzdE9iaio+KGhhbmRsZS5nZXQoKS5hc0NlbGwo
KSk7CiAgICAgRE9NV3JhcHBlcldvcmxkKiB3b3JsZCA9IHN0YXRpY19jYXN0PERPTVdyYXBwZXJX
b3JsZCo+KGNvbnRleHQpOwogICAgIHVuY2FjaGVXcmFwcGVyKHdvcmxkLCBqc1Rlc3RPYmotPmlt
cGwoKSwganNUZXN0T2JqKTsKICAgICBqc1Rlc3RPYmotPnJlbGVhc2VJbXBsKCk7CkluZGV4OiBT
b3VyY2UvV2ViQ29yZS9iaW5kaW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9iaW5k
aW5ncy9zY3JpcHRzL3Rlc3QvSlMvSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
LmNwcAkocmV2aXNpb24gMTE4NjE0KQorKysgU291cmNlL1dlYkNvcmUvYmluZGluZ3Mvc2NyaXB0
cy90ZXN0L0pTL0pTVGVzdFNlcmlhbGl6ZWRTY3JpcHRWYWx1ZUludGVyZmFjZS5jcHAJKHdvcmtp
bmcgY29weSkKQEAgLTE2MSw3ICsxNjEsNyBAQCBKU09iamVjdCogSlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50CiAKIHZvaWQgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
OjpkZXN0cm95KEpTQzo6SlNDZWxsKiBjZWxsKQogewotICAgIEpTVGVzdFNlcmlhbGl6ZWRTY3Jp
cHRWYWx1ZUludGVyZmFjZSogdGhpc09iamVjdCA9IGpzQ2FzdDxKU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UqPihjZWxsKTsKKyAgICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFs
dWVJbnRlcmZhY2UqIHRoaXNPYmplY3QgPSBzdGF0aWNfY2FzdDxKU1Rlc3RTZXJpYWxpemVkU2Ny
aXB0VmFsdWVJbnRlcmZhY2UqPihjZWxsKTsKICAgICB0aGlzT2JqZWN0LT5KU1Rlc3RTZXJpYWxp
emVkU2NyaXB0VmFsdWVJbnRlcmZhY2U6On5KU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2UoKTsKIH0KIApAQCAtMzgwLDcgKzM4MCw3IEBAIGJvb2wgSlNUZXN0U2VyaWFsaXplZFNj
cmlwdFZhbHVlSW50ZXJmYWMKIAogdm9pZCBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRl
cmZhY2VPd25lcjo6ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZv
aWQqIGNvbnRleHQpCiB7Ci0gICAgSlNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNl
KiBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UgPSBqc0Nhc3Q8SlNUZXN0U2Vy
aWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKKyAg
ICBKU1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UqIGpzVGVzdFNlcmlhbGl6ZWRT
Y3JpcHRWYWx1ZUludGVyZmFjZSA9IHN0YXRpY19jYXN0PEpTVGVzdFNlcmlhbGl6ZWRTY3JpcHRW
YWx1ZUludGVyZmFjZSo+KGhhbmRsZS5nZXQoKS5hc0NlbGwoKSk7CiAgICAgRE9NV3JhcHBlcldv
cmxkKiB3b3JsZCA9IHN0YXRpY19jYXN0PERPTVdyYXBwZXJXb3JsZCo+KGNvbnRleHQpOwogICAg
IHVuY2FjaGVXcmFwcGVyKHdvcmxkLCBqc1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZh
Y2UtPmltcGwoKSwganNUZXN0U2VyaWFsaXplZFNjcmlwdFZhbHVlSW50ZXJmYWNlKTsKICAgICBq
c1Rlc3RTZXJpYWxpemVkU2NyaXB0VmFsdWVJbnRlcmZhY2UtPnJlbGVhc2VJbXBsKCk7CkluZGV4
OiBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5jcHAKPT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0g
U291cmNlL1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfYXJyYXkuY3BwCShyZXZpc2lvbiAxMTg2MTQp
CisrKyBTb3VyY2UvV2ViQ29yZS9icmlkZ2UvcnVudGltZV9hcnJheS5jcHAJKHdvcmtpbmcgY29w
eSkKQEAgLTU3LDcgKzU3LDcgQEAgUnVudGltZUFycmF5Ojp+UnVudGltZUFycmF5KCkKIAogdm9p
ZCBSdW50aW1lQXJyYXk6OmRlc3Ryb3koSlNDZWxsKiBjZWxsKQogewotICAgIGpzQ2FzdDxSdW50
aW1lQXJyYXkqPihjZWxsKS0+UnVudGltZUFycmF5Ojp+UnVudGltZUFycmF5KCk7CisgICAgc3Rh
dGljX2Nhc3Q8UnVudGltZUFycmF5Kj4oY2VsbCktPlJ1bnRpbWVBcnJheTo6flJ1bnRpbWVBcnJh
eSgpOwogfQogCiBKU1ZhbHVlIFJ1bnRpbWVBcnJheTo6bGVuZ3RoR2V0dGVyKEV4ZWNTdGF0ZSos
IEpTVmFsdWUgc2xvdEJhc2UsIFByb3BlcnR5TmFtZSkKSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2Jy
aWRnZS9ydW50aW1lX21ldGhvZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJp
ZGdlL3J1bnRpbWVfbWV0aG9kLmNwcAkocmV2aXNpb24gMTE4NjE0KQorKysgU291cmNlL1dlYkNv
cmUvYnJpZGdlL3J1bnRpbWVfbWV0aG9kLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTIsNyArNTIs
NyBAQCBSdW50aW1lTWV0aG9kOjpSdW50aW1lTWV0aG9kKEpTR2xvYmFsT2JqCiAKIHZvaWQgUnVu
dGltZU1ldGhvZDo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7Ci0gICAganNDYXN0PFJ1bnRpbWVN
ZXRob2QqPihjZWxsKS0+UnVudGltZU1ldGhvZDo6flJ1bnRpbWVNZXRob2QoKTsKKyAgICBzdGF0
aWNfY2FzdDxSdW50aW1lTWV0aG9kKj4oY2VsbCktPlJ1bnRpbWVNZXRob2Q6On5SdW50aW1lTWV0
aG9kKCk7CiB9CiAKIHZvaWQgUnVudGltZU1ldGhvZDo6ZmluaXNoQ3JlYXRpb24oSlNHbG9iYWxE
YXRhJiBnbG9iYWxEYXRhLCBjb25zdCBVU3RyaW5nJiBpZGVudCkKSW5kZXg6IFNvdXJjZS9XZWJD
b3JlL2JyaWRnZS9ydW50aW1lX29iamVjdC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNv
cmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcAkocmV2aXNpb24gMTE4NjE0KQorKysgU291cmNl
L1dlYkNvcmUvYnJpZGdlL3J1bnRpbWVfb2JqZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtNTEs
NyArNTEsNyBAQCB2b2lkIFJ1bnRpbWVPYmplY3Q6OmZpbmlzaENyZWF0aW9uKEpTR2xvCiAKIHZv
aWQgUnVudGltZU9iamVjdDo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7Ci0gICAgUnVudGltZU9i
amVjdCogdGhpc09iamVjdCA9IGpzQ2FzdDxSdW50aW1lT2JqZWN0Kj4oY2VsbCk7CisgICAgUnVu
dGltZU9iamVjdCogdGhpc09iamVjdCA9IHN0YXRpY19jYXN0PFJ1bnRpbWVPYmplY3QqPihjZWxs
KTsKICAgICBBU1NFUlQoIXRoaXNPYmplY3QtPm1faW5zdGFuY2UpOwogICAgIHRoaXNPYmplY3Qt
PlJ1bnRpbWVPYmplY3Q6On5SdW50aW1lT2JqZWN0KCk7CiB9CkluZGV4OiBTb3VyY2UvV2ViQ29y
ZS9icmlkZ2UvcnVudGltZV9yb290LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViQ29yZS9i
cmlkZ2UvcnVudGltZV9yb290LmNwcAkocmV2aXNpb24gMTE4NjE0KQorKysgU291cmNlL1dlYkNv
cmUvYnJpZGdlL3J1bnRpbWVfcm9vdC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5NCw3ICsxOTQs
NyBAQCB2b2lkIFJvb3RPYmplY3Q6OnJlbW92ZVJ1bnRpbWVPYmplY3QoUnVuCiAKIHZvaWQgUm9v
dE9iamVjdDo6ZmluYWxpemUoSlNDOjpIYW5kbGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQq
KQogewotICAgIFJ1bnRpbWVPYmplY3QqIG9iamVjdCA9IHN0YXRpY19jYXN0PFJ1bnRpbWVPYmpl
Y3QqPihhc09iamVjdChoYW5kbGUuZ2V0KCkpKTsKKyAgICBSdW50aW1lT2JqZWN0KiBvYmplY3Qg
PSBzdGF0aWNfY2FzdDxSdW50aW1lT2JqZWN0Kj4oaGFuZGxlLmdldCgpLmFzQ2VsbCgpKTsKIAog
ICAgIFJlZlB0cjxSb290T2JqZWN0PiBwcm90ZWN0KHRoaXMpOwogICAgIG9iamVjdC0+aW52YWxp
ZGF0ZSgpOwpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19ydW50aW1lLm1t
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9vYmpjL29iamNfcnVudGltZS5t
bQkocmV2aXNpb24gMTE4NjE0KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL29iamMvb2JqY19y
dW50aW1lLm1tCSh3b3JraW5nIGNvcHkpCkBAIC0yMDEsNyArMjAxLDcgQEAgT2JqY0ZhbGxiYWNr
T2JqZWN0SW1wOjpPYmpjRmFsbGJhY2tPYmplYwogCiB2b2lkIE9iamNGYWxsYmFja09iamVjdElt
cDo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7Ci0gICAganNDYXN0PE9iamNGYWxsYmFja09iamVj
dEltcCo+KGNlbGwpLT5PYmpjRmFsbGJhY2tPYmplY3RJbXA6On5PYmpjRmFsbGJhY2tPYmplY3RJ
bXAoKTsKKyAgICBzdGF0aWNfY2FzdDxPYmpjRmFsbGJhY2tPYmplY3RJbXAqPihjZWxsKS0+T2Jq
Y0ZhbGxiYWNrT2JqZWN0SW1wOjp+T2JqY0ZhbGxiYWNrT2JqZWN0SW1wKCk7CiB9CiAKIHZvaWQg
T2JqY0ZhbGxiYWNrT2JqZWN0SW1wOjpmaW5pc2hDcmVhdGlvbihKU0dsb2JhbE9iamVjdCogZ2xv
YmFsT2JqZWN0KQpJbmRleDogU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50aW1lLmNwcAko
cmV2aXNpb24gMTE4NjE0KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1bnRpbWUu
Y3BwCSh3b3JraW5nIGNvcHkpCkBAIC05ODksNyArOTg5LDcgQEAgUXRSdW50aW1lTWV0aG9kOjp+
UXRSdW50aW1lTWV0aG9kKCkKIAogdm9pZCBRdFJ1bnRpbWVNZXRob2Q6OmRlc3Ryb3koSlNDZWxs
KiBjZWxsKQogewotICAgIGpzQ2FzdDxRdFJ1bnRpbWVNZXRob2QqPihjZWxsKS0+UXRSdW50aW1l
TWV0aG9kOjp+UXRSdW50aW1lTWV0aG9kKCk7CisgICAgc3RhdGljX2Nhc3Q8UXRSdW50aW1lTWV0
aG9kKj4oY2VsbCktPlF0UnVudGltZU1ldGhvZDo6flF0UnVudGltZU1ldGhvZCgpOwogfQogCiAv
LyA9PT09PT09PT09PT09PT0KSW5kZXg6IFNvdXJjZS9XZWJDb3JlL2JyaWRnZS9xdC9xdF9ydW50
aW1lX3F0NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYkNvcmUvYnJpZGdlL3F0L3F0X3J1
bnRpbWVfcXQ0LmNwcAkocmV2aXNpb24gMTE4NjE0KQorKysgU291cmNlL1dlYkNvcmUvYnJpZGdl
L3F0L3F0X3J1bnRpbWVfcXQ0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtOTg5LDcgKzk4OSw3IEBA
IFF0UnVudGltZU1ldGhvZDo6flF0UnVudGltZU1ldGhvZCgpCiAKIHZvaWQgUXRSdW50aW1lTWV0
aG9kOjpkZXN0cm95KEpTQ2VsbCogY2VsbCkKIHsKLSAgICBqc0Nhc3Q8UXRSdW50aW1lTWV0aG9k
Kj4oY2VsbCktPlF0UnVudGltZU1ldGhvZDo6flF0UnVudGltZU1ldGhvZCgpOworICAgIHN0YXRp
Y19jYXN0PFF0UnVudGltZU1ldGhvZCo+KGNlbGwpLT5RdFJ1bnRpbWVNZXRob2Q6On5RdFJ1bnRp
bWVNZXRob2QoKTsKIH0KIAogLy8gPT09PT09PT09PT09PT09CkluZGV4OiBTb3VyY2UvV2ViS2l0
Mi9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL1dlYktpdDIvQ2hhbmdlTG9nCShyZXZp
c2lvbiAxMTg2MTQpCisrKyBTb3VyY2UvV2ViS2l0Mi9DaGFuZ2VMb2cJKHdvcmtpbmcgY29weSkK
QEAgLTEsMyArMSwxOCBAQAorMjAxMi0wNS0yNiAgR2VvZmZyZXkgR2FyZW4gIDxnZ2FyZW5AYXBw
bGUuY29tPgorCisgICAgICAgIFdlYktpdCBzaG91bGQgYmUgbGF6eS1maW5hbGl6YXRpb24tc2Fm
ZSAoZXNwLiB0aGUgRE9NKSB2MgorICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODc1ODEKKworICAgICAgICBSZXZpZXdlZCBieSBOT0JPRFkgKE9PUFMhKS4K
KworICAgICAgICAqIFdlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcDoK
KyAgICAgICAgKFdlYktpdDo6SlNOUE9iamVjdDo6ZGVzdHJveSk6CisgICAgICAgIChXZWJLaXQ6
OkpTTlBPYmplY3Q6OmxlYWtOUE9iamVjdCk6CisgICAgICAgICogV2ViUHJvY2Vzcy9QbHVnaW5z
L05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHA6CisgICAgICAgIChXZWJLaXQ6Ok5QUnVu
dGltZU9iamVjdE1hcDo6ZmluYWxpemUpOiBVc2Ugc3RhdGljX2Nhc3QgaW5zdGVhZCBvZiBqc0Nh
c3QgYmVjYXVzZQorICAgICAgICBqc0Nhc3QgZG9lcyBTdHJ1Y3R1cmUtYmFzZWQgdmFsaWRhdGlv
biwgYW5kIG91ciBTdHJ1Y3R1cmUgaXMgbm90IGd1YXJhbnRlZWQKKyAgICAgICAgdG8gYmUgYWxp
dmUgd2hlbiB3ZSBnZXQgZmluYWxpemVkLgorCiAyMDEyLTA1LTI1ICBCcmFkeSBFaWRzb24gIDxi
ZWlkc29uQGFwcGxlLmNvbT4KIAogICAgICAgICBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93
X2J1Zy5jZ2k/aWQ9ODc0MTgKSW5kZXg6IFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lu
cy9OZXRzY2FwZS9KU05QT2JqZWN0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvV2ViS2l0Mi9X
ZWJQcm9jZXNzL1BsdWdpbnMvTmV0c2NhcGUvSlNOUE9iamVjdC5jcHAJKHJldmlzaW9uIDExODYx
NCkKKysrIFNvdXJjZS9XZWJLaXQyL1dlYlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9KU05QT2Jq
ZWN0LmNwcAkod29ya2luZyBjb3B5KQpAQCAtODEsNyArODEsNyBAQCBKU05QT2JqZWN0Ojp+SlNO
UE9iamVjdCgpCiAKIHZvaWQgSlNOUE9iamVjdDo6ZGVzdHJveShKU0NlbGwqIGNlbGwpCiB7Ci0g
ICAganNDYXN0PEpTTlBPYmplY3QqPihjZWxsKS0+SlNOUE9iamVjdDo6fkpTTlBPYmplY3QoKTsK
KyAgICBzdGF0aWNfY2FzdDxKU05QT2JqZWN0Kj4oY2VsbCktPkpTTlBPYmplY3Q6On5KU05QT2Jq
ZWN0KCk7CiB9CiAKIHZvaWQgSlNOUE9iamVjdDo6aW52YWxpZGF0ZSgpCkBAIC05Niw3ICs5Niw2
IEBAIHZvaWQgSlNOUE9iamVjdDo6aW52YWxpZGF0ZSgpCiBOUE9iamVjdCogSlNOUE9iamVjdDo6
bGVha05QT2JqZWN0KCkKIHsKICAgICBBU1NFUlQobV9ucE9iamVjdCk7Ci0gICAgQVNTRVJUX0dD
X09CSkVDVF9JTkhFUklUUyh0aGlzLCAmc19pbmZvKTsKIAogICAgIE5QT2JqZWN0KiBvYmplY3Qg
PSBtX25wT2JqZWN0OwogICAgIG1fbnBPYmplY3QgPSAwOwpJbmRleDogU291cmNlL1dlYktpdDIv
V2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVudGltZU9iamVjdE1hcC5jcHAKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL1dlYktpdDIvV2ViUHJvY2Vzcy9QbHVnaW5zL05ldHNjYXBlL05QUnVu
dGltZU9iamVjdE1hcC5jcHAJKHJldmlzaW9uIDExODYxNCkKKysrIFNvdXJjZS9XZWJLaXQyL1dl
YlByb2Nlc3MvUGx1Z2lucy9OZXRzY2FwZS9OUFJ1bnRpbWVPYmplY3RNYXAuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0yOTUsNyArMjk1LDcgQEAgdm9pZCBOUFJ1bnRpbWVPYmplY3RNYXA6OmFkZFRv
SW52YWxpZGF0aQogCiB2b2lkIE5QUnVudGltZU9iamVjdE1hcDo6ZmluYWxpemUoSlNDOjpIYW5k
bGU8SlNDOjpVbmtub3duPiBoYW5kbGUsIHZvaWQqIGNvbnRleHQpCiB7Ci0gICAgSlNOUE9iamVj
dCogb2JqZWN0ID0ganNDYXN0PEpTTlBPYmplY3QqPihhc09iamVjdChoYW5kbGUuZ2V0KCkpKTsK
KyAgICBKU05QT2JqZWN0KiBvYmplY3QgPSBzdGF0aWNfY2FzdDxKU05QT2JqZWN0Kj4oaGFuZGxl
LmdldCgpLmFzQ2VsbCgpKTsKICAgICB3ZWFrUmVtb3ZlKG1fanNOUE9iamVjdHMsIHN0YXRpY19j
YXN0PE5QT2JqZWN0Kj4oY29udGV4dCksIG9iamVjdCk7CiAgICAgYWRkVG9JbnZhbGlkYXRpb25R
dWV1ZShvYmplY3QtPmxlYWtOUE9iamVjdCgpKTsKIH0K
</data>
<flag name="review"
          id="150977"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>