<?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>22149</bug_id>
          
          <creation_ts>2008-11-09 09:36:13 -0800</creation_ts>
          <short_desc>JavaScript parser has some unused code</short_desc>
          <delta_ts>2008-11-09 17:29:06 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>Mac</rep_platform>
          <op_sys>OS X 10.5</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>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Darin Adler">darin</reporter>
          <assigned_to name="Darin Adler">darin</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>98076</commentid>
    <comment_count>0</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-11-09 09:36:13 -0800</bug_when>
    <thetext>I plan to remove some unused code from the JavaScript parser.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98077</commentid>
    <comment_count>1</comment_count>
      <attachid>25000</attachid>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-11-09 09:43:55 -0800</bug_when>
    <thetext>Created attachment 25000
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98107</commentid>
    <comment_count>2</comment_count>
      <attachid>25000</attachid>
    <who name="Timothy Hatcher">timothy</who>
    <bug_when>2008-11-09 14:46:21 -0800</bug_when>
    <thetext>Comment on attachment 25000
patch

I think a few people on the team use the pretty print option. So they might be sad to see it go.

r=me though.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>98121</commentid>
    <comment_count>3</comment_count>
    <who name="Darin Adler">darin</who>
    <bug_when>2008-11-09 17:29:06 -0800</bug_when>
    <thetext>http://trac.webkit.org/changeset/38249</thetext>
  </long_desc>
      
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>25000</attachid>
            <date>2008-11-09 09:43:55 -0800</date>
            <delta_ts>2008-11-09 14:46:33 -0800</delta_ts>
            <desc>patch</desc>
            <filename>RemoveToStringPatch.txt</filename>
            <type>text/plain</type>
            <size>115363</size>
            <attacher name="Darin Adler">darin</attacher>
            
              <data encoding="base64">SW5kZXg6IEphdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9DaGFuZ2VMb2cJKHJldmlzaW9uIDM4MjQxKQorKysgSmF2YVNjcmlwdENvcmUvQ2hhbmdl
TG9nCSh3b3JraW5nIGNvcHkpCkBAIC0xLDMgKzEsODQgQEAKKzIwMDgtMTEtMDkgIERhcmluIEFk
bGVyICA8ZGFyaW5AYXBwbGUuY29tPgorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09Q
UyEpLgorCisgICAgICAgIC0gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lk
PTIyMTQ5CisgICAgICAgICAgcmVtb3ZlIHVudXNlZCBjb2RlIGZyb20gdGhlIHBhcnNlcgorCisg
ICAgICAgICogQWxsSW5PbmVGaWxlLmNwcDogUmVtb3ZlZCBub2RlczJzdHJpbmcuY3BwLgorICAg
ICAgICAqIEdOVW1ha2VmaWxlLmFtOiBEaXR0by4KKyAgICAgICAgKiBKYXZhU2NyaXB0Q29yZS5l
eHA6IERpdHRvLgorICAgICAgICAqIEphdmFTY3JpcHRDb3JlLnByaTogRGl0dG8uCisgICAgICAg
ICogSmF2YVNjcmlwdENvcmUudmNwcm9qL0phdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZj
cHJvajogRGl0dG8uCisgICAgICAgICogSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3Qu
cGJ4cHJvajogRGl0dG8uCisgICAgICAgICogSmF2YVNjcmlwdENvcmVTb3VyY2VzLmJrbDogRGl0
dG8uCisKKyAgICAgICAgKiBWTS9Db2RlQmxvY2suaDogQWRkZWQgaW5jbHVkZS4KKworICAgICAg
ICAqIFZNL01hY2hpbmUuY3BwOiAoSlNDOjpNYWNoaW5lOjpleGVjdXRlKTogVXNlIHRoZSB0eXBl
cyBmcm9tCisgICAgICAgIERlY2xhcmF0aW9uU3RhY2tzIGFzIERlY2xhcmF0aW9uU3RhY2tzOjog
cmF0aGVyIHRoYW4gTm9kZTo6IHNpbmNlCisgICAgICAgICJOb2RlIiByZWFsbHkgaGFzIGxpdHRs
ZSB0byBkbyB3aXRoIGl0LgorICAgICAgICAqIGJ5dGVjb21waWxlci9Db2RlR2VuZXJhdG9yLmNw
cDoKKyAgICAgICAgKEpTQzo6Q29kZUdlbmVyYXRvcjo6Q29kZUdlbmVyYXRvcik6IERpdHRvLgor
CisgICAgICAgICoganNjLmNwcDoKKyAgICAgICAgKE9wdGlvbnM6Ok9wdGlvbnMpOiBSZW1vdmVk
IHByZXR0eVByaW50IG9wdGlvbi4KKyAgICAgICAgKHJ1bldpdGhTY3JpcHRzKTogRGl0dG8uCisg
ICAgICAgIChwcmludFVzYWdlU3RhdGVtZW50KTogRGl0dG8uCisgICAgICAgIChwYXJzZUFyZ3Vt
ZW50cyk6IERpdHRvLgorICAgICAgICAoanNjbWFpbik6IERpdHRvLgorCisgICAgICAgICogcGFy
c2VyL0dyYW1tYXIueTogUmVtb3ZlZCB1c2Ugb2Ygb2Jzb2xldGUgSW1tZWRpYXRlTnVtYmVyTm9k
ZS4KKworICAgICAgICAqIHBhcnNlci9Ob2Rlcy5jcHA6CisgICAgICAgIChKU0M6OlRocm93YWJs
ZUV4cHJlc3Npb25EYXRhOjplbWl0VGhyb3dFcnJvcik6IFVzZSBpbmxpbmUgZnVuY3Rpb25zCisg
ICAgICAgIGluc3RlYWQgb2YgZGlyZWN0IG1lbWJlciBhY2Nlc3MgZm9yIFRocm93YWJsZUV4cHJl
c3Npb25EYXRhIHZhbHVlcy4KKyAgICAgICAgKEpTQzo6QnJhY2tldEFjY2Vzc29yTm9kZTo6ZW1p
dENvZGUpOiBEaXR0by4KKyAgICAgICAgKEpTQzo6RG90QWNjZXNzb3JOb2RlOjplbWl0Q29kZSk6
IERpdHRvLgorICAgICAgICAoSlNDOjpOZXdFeHByTm9kZTo6ZW1pdENvZGUpOiBEaXR0by4KKyAg
ICAgICAgKEpTQzo6RXZhbEZ1bmN0aW9uQ2FsbE5vZGU6OmVtaXRDb2RlKTogRGl0dG8uCisgICAg
ICAgIChKU0M6OkZ1bmN0aW9uQ2FsbFZhbHVlTm9kZTo6ZW1pdENvZGUpOiBEaXR0by4KKyAgICAg
ICAgKEpTQzo6RnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6OmVtaXRDb2RlKTogRGl0dG8uCisgICAg
ICAgIChKU0M6OkZ1bmN0aW9uQ2FsbEJyYWNrZXROb2RlOjplbWl0Q29kZSk6IERpdHRvLgorICAg
ICAgICAoSlNDOjpGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Q29kZSk6IERpdHRvLgorICAgICAg
ICAoSlNDOjpQb3N0Zml4UmVzb2x2ZU5vZGU6OmVtaXRDb2RlKTogRGl0dG8uCisgICAgICAgIChK
U0M6OlBvc3RmaXhCcmFja2V0Tm9kZTo6ZW1pdENvZGUpOiBEaXR0by4KKyAgICAgICAgKEpTQzo6
UG9zdGZpeERvdE5vZGU6OmVtaXRDb2RlKTogRGl0dG8uCisgICAgICAgIChKU0M6OkRlbGV0ZVJl
c29sdmVOb2RlOjplbWl0Q29kZSk6IERpdHRvLgorICAgICAgICAoSlNDOjpEZWxldGVCcmFja2V0
Tm9kZTo6ZW1pdENvZGUpOiBEaXR0by4KKyAgICAgICAgKEpTQzo6RGVsZXRlRG90Tm9kZTo6ZW1p
dENvZGUpOiBEaXR0by4KKyAgICAgICAgKEpTQzo6UHJlZml4UmVzb2x2ZU5vZGU6OmVtaXRDb2Rl
KTogRGl0dG8uCisgICAgICAgIChKU0M6OlByZWZpeEJyYWNrZXROb2RlOjplbWl0Q29kZSk6IERp
dHRvLgorICAgICAgICAoSlNDOjpQcmVmaXhEb3ROb2RlOjplbWl0Q29kZSk6IERpdHRvLgorICAg
ICAgICAoSlNDOjpUaHJvd2FibGVCaW5hcnlPcE5vZGU6OmVtaXRDb2RlKTogRGl0dG8uCisgICAg
ICAgIChKU0M6Okluc3RhbmNlT2ZOb2RlOjplbWl0Q29kZSk6IERpdHRvLgorICAgICAgICAoSlND
OjpSZWFkTW9kaWZ5UmVzb2x2ZU5vZGU6OmVtaXRDb2RlKTogRGl0dG8uCisgICAgICAgIChKU0M6
OkFzc2lnblJlc29sdmVOb2RlOjplbWl0Q29kZSk6IERpdHRvLgorICAgICAgICAoSlNDOjpBc3Np
Z25Eb3ROb2RlOjplbWl0Q29kZSk6IERpdHRvLgorICAgICAgICAoSlNDOjpSZWFkTW9kaWZ5RG90
Tm9kZTo6ZW1pdENvZGUpOiBEaXR0by4KKyAgICAgICAgKEpTQzo6QXNzaWduQnJhY2tldE5vZGU6
OmVtaXRDb2RlKTogRGl0dG8uCisgICAgICAgIChKU0M6OlJlYWRNb2RpZnlCcmFja2V0Tm9kZTo6
ZW1pdENvZGUpOiBEaXR0by4KKyAgICAgICAgKEpTQzo6c3RhdGVtZW50TGlzdEVtaXRDb2RlKTog
VGFrZSBhIGNvbnN0IFN0YXRlbWVudFZlY3RvciBpbnN0ZWFkCisgICAgICAgIG9mIGEgbm9uLWNv
bnN0IG9uZS4gQWxzbyByZW1vdmVkIHVudXNlZCBzdGF0ZW1lbnRMaXN0UHVzaEZJRk8uCisgICAg
ICAgIChKU0M6OkZvckluTm9kZTo6ZW1pdENvZGUpOiBJbmxpbmUgZnVuY3Rpb25zIGluc3RlYWQg
b2YgbWVtYmVyIGFjY2Vzcy4KKyAgICAgICAgKEpTQzo6VGhyb3dOb2RlOjplbWl0Q29kZSk6IERp
dHRvLgorICAgICAgICAoSlNDOjpFdmFsTm9kZTo6ZW1pdENvZGUpOiBEaXR0by4KKyAgICAgICAg
KEpTQzo6RnVuY3Rpb25Cb2R5Tm9kZTo6ZW1pdENvZGUpOiBEaXR0by4KKyAgICAgICAgKEpTQzo6
UHJvZ3JhbU5vZGU6OmVtaXRDb2RlKTogRGl0dG8uCisKKyAgICAgICAgKiBwYXJzZXIvTm9kZXMu
aDogUmVtb3ZlZCB1bnVzZWQgaW5jbHVkZXMgYW5kIGZvcndhcmQgZGVjbGFyYXRpb25zLgorICAg
ICAgICBSZW1vdmVkIFByZWNlZGVuY2UgZW51bS4gTWFkZSBtYW55IG1vcmUgbWVtYmVycyBwcml2
YXRlIGluc3RlYWQgb2YKKyAgICAgICAgcHJvdGVjdGVkIG9yIHB1YmxpYy4gUmVtb3ZlZCB1bnVz
ZWQgTm9kZVN0YWNrIHR5cGVkZWYuIE1vdmVkIHRoZQorICAgICAgICBWYXJTdGFjayBhbmQgRnVu
Y3Rpb25TdGFjayB0eXBlZGVmcyBmcm9tIE5vZGUgdG8gU2NvcGVOb2RlLiBNYWRlCisgICAgICAg
IE5vZGU6OmVtaXRDb2RlIHB1cmUgdmlydHVhbCBhbmQgY2hhbmdlZCBjbGFzc2VzIHRoYXQgZG9u
J3QgZW1pdAorICAgICAgICBhbnkgY29kZSB0byBpbmhlcml0IGZyb20gUGFyc2VyUmVmQ291bnRl
ZCByYXRoZXIgdGhhbiBOb2RlLgorICAgICAgICBNb3ZlZCBpc1JldHVybk5vZGUgZnJvbSBOb2Rl
IHRvIFN0YXRlbWVudE5vZGUuIFJlbW92ZWQgdGhlCisgICAgICAgIHN0cmVhbVRvLCBwcmVjZWRl
bmNlLCBhbmQgbmVlZHNQYXJlbnNJZkxlZnRtb3N0IGZ1bmN0aW9ucyBmcm9tCisgICAgICAgIGFs
bCBjbGFzc2VzLiBSZW1vdmVkIHRoZSBJbW1lZGlhdGVOdW1iZXJOb2RlIGNsYXNzIGFuZCBtYWtl
CisgICAgICAgIE51bWJlck5vZGU6OnNldFZhbHVlIG5vbnZpcnR1YWwuCisKKyAgICAgICAgKiBw
YXJzZXIvbm9kZXMyc3RyaW5nLmNwcDogUmVtb3ZlZC4KKwogMjAwOC0xMS0wOCAgS2V2aW4gT2xs
aXZpZXIgIDxrZXZpbm9AdGhlb2xsaXZpZXJzLmNvbT4KICAgICAgICAgCiAgICAgICAgIHd4IGJ1
aWxkIGZpeGVzIGFmdGVyIGFkZGl0aW9uIG9mIEpTQ29yZSBwYXJzZXIgYW5kIGJ5Y29tcGlsZXIg
ZGlycy4gQWxzbyBjbGVhbnVwCkluZGV4OiBKYXZhU2NyaXB0Q29yZS9BbGxJbk9uZUZpbGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0FsbEluT25lRmlsZS5jcHAJKHJldmlzaW9u
IDM4MjQxKQorKysgSmF2YVNjcmlwdENvcmUvQWxsSW5PbmVGaWxlLmNwcAkod29ya2luZyBjb3B5
KQpAQCAtNzYsNyArNzYsNiBAQAogI2luY2x1ZGUgInJ1bnRpbWUvTnVtYmVyT2JqZWN0LmNwcCIK
ICNpbmNsdWRlICJydW50aW1lL051bWJlclByb3RvdHlwZS5jcHAiCiAjaW5jbHVkZSAicGFyc2Vy
L05vZGVzLmNwcCIKLSNpbmNsdWRlICJwYXJzZXIvbm9kZXMyc3RyaW5nLmNwcCIKICNpbmNsdWRl
ICJydW50aW1lL0pTT2JqZWN0LmNwcCIKICNpbmNsdWRlICJydW50aW1lL0Vycm9yLmNwcCIKICNp
bmNsdWRlICJydW50aW1lL0pTR2xvYmFsT2JqZWN0LmNwcCIKSW5kZXg6IEphdmFTY3JpcHRDb3Jl
L0dOVW1ha2VmaWxlLmFtCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxl
LmFtCShyZXZpc2lvbiAzODI0MSkKKysrIEphdmFTY3JpcHRDb3JlL0dOVW1ha2VmaWxlLmFtCSh3
b3JraW5nIGNvcHkpCkBAIC0zMzMsNyArMzMzLDYgQEAgamF2YXNjcmlwdGNvcmVfc291cmNlcyAr
PSBcCiAJSmF2YVNjcmlwdENvcmUvcGFyc2VyL0xleGVyLmNwcCBcCiAJSmF2YVNjcmlwdENvcmUv
cnVudGltZS9Mb29rdXAuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwIFwK
LQlKYXZhU2NyaXB0Q29yZS9wYXJzZXIvbm9kZXMyc3RyaW5nLmNwcCBcCiAJSmF2YVNjcmlwdENv
cmUvcnVudGltZS9PcGVyYXRpb25zLmNwcCBcCiAJSmF2YVNjcmlwdENvcmUvcnVudGltZS9SZWdF
eHAuY3BwIFwKIAlKYXZhU2NyaXB0Q29yZS9ydW50aW1lL1VTdHJpbmcuY3BwIFwKSW5kZXg6IEph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLmV4cAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0
Q29yZS9KYXZhU2NyaXB0Q29yZS5leHAJKHJldmlzaW9uIDM4MjQxKQorKysgSmF2YVNjcmlwdENv
cmUvSmF2YVNjcmlwdENvcmUuZXhwCSh3b3JraW5nIGNvcHkpCkBAIC0zMTQsNyArMzE0LDYgQEAg
X19aTkszSlNDMTdEZWJ1Z2dlckNhbGxGcmFtZTEwdGhpc09iamVjdAogX19aTkszSlNDMTdEZWJ1
Z2dlckNhbGxGcmFtZTEyZnVuY3Rpb25OYW1lRXYKIF9fWk5LM0pTQzE3RGVidWdnZXJDYWxsRnJh
bWU0dHlwZUV2CiBfX1pOSzNKU0MxN0RlYnVnZ2VyQ2FsbEZyYW1lOGV2YWx1YXRlRVJLTlNfN1VT
dHJpbmdFUlBOU183SlNWYWx1ZUUKLV9fWk5LM0pTQzROb2RlOHRvU3RyaW5nRXYKIF9fWk5LM0pT
QzZKU0NlbGwxMnRvVGhpc09iamVjdEVQTlNfOUV4ZWNTdGF0ZUUKIF9fWk5LM0pTQzZKU0NlbGwx
MnRvVGhpc1N0cmluZ0VQTlNfOUV4ZWNTdGF0ZUUKIF9fWk5LM0pTQzZKU0NlbGwxNGlzR2V0dGVy
U2V0dGVyRXYKSW5kZXg6IEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnByaQo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS5wcmkJKHJldmlzaW9uIDM4MjQx
KQorKysgSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUucHJpCSh3b3JraW5nIGNvcHkpCkBA
IC0xMTMsNyArMTEzLDYgQEAgU09VUkNFUyArPSBcCiAgICAgcnVudGltZS9OYXRpdmVFcnJvckNv
bnN0cnVjdG9yLmNwcCBcCiAgICAgcnVudGltZS9OYXRpdmVFcnJvclByb3RvdHlwZS5jcHAgXAog
ICAgIHBhcnNlci9Ob2Rlcy5jcHAgXAotICAgIHBhcnNlci9ub2RlczJzdHJpbmcuY3BwIFwKICAg
ICBydW50aW1lL051bWJlckNvbnN0cnVjdG9yLmNwcCBcCiAgICAgcnVudGltZS9OdW1iZXJPYmpl
Y3QuY3BwIFwKICAgICBydW50aW1lL051bWJlclByb3RvdHlwZS5jcHAgXApJbmRleDogSmF2YVNj
cmlwdENvcmUvSmF2YVNjcmlwdENvcmVTb3VyY2VzLmJrbAo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZVNvdXJjZXMuYmtsCShyZXZpc2lvbiAzODI0MSkKKysrIEph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlU291cmNlcy5ia2wJKHdvcmtpbmcgY29weSkKQEAg
LTYyLDcgKzYyLDYgQEAgU291cmNlIGZpbGVzIGZvciBKU0NvcmUuCiAgICAgPHNldCBhcHBlbmQ9
IjEiIHZhcj0iSlNDT1JFX1BBUlNFUl9TT1VSQ0VTIj4KICAgICAgICAgcGFyc2VyL0xleGVyLmNw
cAogICAgICAgICBwYXJzZXIvTm9kZXMuY3BwCi0gICAgICAgIHBhcnNlci9ub2RlczJzdHJpbmcu
Y3BwCiAgICAgICAgIHBhcnNlci9QYXJzZXIuY3BwCiAgICAgPC9zZXQ+CiAgICAgPHNldCBhcHBl
bmQ9IjEiIHZhcj0iSlNDT1JFX1BST0ZJTEVSX1NPVVJDRVMiPgpJbmRleDogSmF2YVNjcmlwdENv
cmUvanNjLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9qc2MuY3BwCShyZXZpc2lv
biAzODI0MSkKKysrIEphdmFTY3JpcHRDb3JlL2pzYy5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTc4
LDEzICs3OCwxMSBAQCBzdGF0aWMgSlNWYWx1ZSogZnVuY3Rpb25RdWl0KEV4ZWNTdGF0ZSosCiBz
dHJ1Y3QgT3B0aW9ucyB7CiAgICAgT3B0aW9ucygpCiAgICAgICAgIDogaW50ZXJhY3RpdmUoZmFs
c2UpCi0gICAgICAgICwgcHJldHR5UHJpbnQoZmFsc2UpCiAgICAgICAgICwgZHVtcChmYWxzZSkK
ICAgICB7CiAgICAgfQogCiAgICAgYm9vbCBpbnRlcmFjdGl2ZTsKLSAgICBib29sIHByZXR0eVBy
aW50OwogICAgIGJvb2wgZHVtcDsKICAgICBWZWN0b3I8VVN0cmluZz4gZmlsZU5hbWVzOwogICAg
IFZlY3RvcjxVU3RyaW5nPiBhcmd1bWVudHM7CkBAIC0yOTksMjEgKzI5Nyw3IEBAIGludCBtYWlu
KGludCBhcmdjLCBjaGFyKiogYXJndikKICAgICByZXR1cm4gcmVzOwogfQogCi1zdGF0aWMgYm9v
bCBwcmV0dHlQcmludFNjcmlwdChFeGVjU3RhdGUqIGV4ZWMsIGNvbnN0IFVTdHJpbmcmIGZpbGVO
YW1lLCBjb25zdCBWZWN0b3I8Y2hhcj4mIHNjcmlwdCkKLXsKLSAgICBpbnQgZXJyTGluZSA9IDA7
Ci0gICAgVVN0cmluZyBlcnJNc2c7Ci0gICAgUmVmUHRyPFByb2dyYW1Ob2RlPiBwcm9ncmFtTm9k
ZSA9IGV4ZWMtPmdsb2JhbERhdGEoKS5wYXJzZXItPnBhcnNlPFByb2dyYW1Ob2RlPihleGVjLCBl
eGVjLT5keW5hbWljR2xvYmFsT2JqZWN0KCktPmRlYnVnZ2VyKCksIG1ha2VTb3VyY2Uoc2NyaXB0
LmRhdGEoKSwgZmlsZU5hbWUpLCAmZXJyTGluZSwgJmVyck1zZyk7Ci0gICAgaWYgKCFwcm9ncmFt
Tm9kZSkgewotICAgICAgICBmcHJpbnRmKHN0ZGVyciwgIiVzOiVkOiAlcy5cbiIsIGZpbGVOYW1l
LlVURjhTdHJpbmcoKS5jX3N0cigpLCBlcnJMaW5lLCBlcnJNc2cuVVRGOFN0cmluZygpLmNfc3Ry
KCkpOwotICAgICAgICByZXR1cm4gZmFsc2U7Ci0gICAgfQotCi0gICAgcHJpbnRmKCIlc1xuIiwg
cHJvZ3JhbU5vZGUtPnRvU3RyaW5nKCkuVVRGOFN0cmluZygpLmNfc3RyKCkpOwotICAgIHJldHVy
biB0cnVlOwotfQotCi1zdGF0aWMgYm9vbCBydW5XaXRoU2NyaXB0cyhHbG9iYWxPYmplY3QqIGds
b2JhbE9iamVjdCwgY29uc3QgVmVjdG9yPFVTdHJpbmc+JiBmaWxlTmFtZXMsIGJvb2wgcHJldHR5
UHJpbnQsIGJvb2wgZHVtcCkKK3N0YXRpYyBib29sIHJ1bldpdGhTY3JpcHRzKEdsb2JhbE9iamVj
dCogZ2xvYmFsT2JqZWN0LCBjb25zdCBWZWN0b3I8VVN0cmluZz4mIGZpbGVOYW1lcywgYm9vbCBk
dW1wKQogewogICAgIFZlY3RvcjxjaGFyPiBzY3JpcHQ7CiAKQEAgLTMzMiwyNyArMzE2LDIzIEBA
IHN0YXRpYyBib29sIHJ1bldpdGhTY3JpcHRzKEdsb2JhbE9iamVjdCoKICAgICAgICAgaWYgKCFm
aWxsQnVmZmVyV2l0aENvbnRlbnRzT2ZGaWxlKGZpbGVOYW1lLCBzY3JpcHQpKQogICAgICAgICAg
ICAgcmV0dXJuIGZhbHNlOyAvLyBmYWlsIGVhcmx5IHNvIHdlIGNhbiBjYXRjaCBtaXNzaW5nIGZp
bGVzCiAKLSAgICAgICAgaWYgKHByZXR0eVByaW50KQotICAgICAgICAgICAgcHJldHR5UHJpbnRT
Y3JpcHQoZ2xvYmFsT2JqZWN0LT5nbG9iYWxFeGVjKCksIGZpbGVOYW1lLCBzY3JpcHQpOwotICAg
ICAgICBlbHNlIHsKICNpZiBFTkFCTEUoT1BDT0RFX1NBTVBMSU5HKQotICAgICAgICAgICAgbWFj
aGluZS0+c2FtcGxlcigpLT5zdGFydCgpOworICAgICAgICBtYWNoaW5lLT5zYW1wbGVyKCktPnN0
YXJ0KCk7CiAjZW5kaWYKLSAgICAgICAgICAgIENvbXBsZXRpb24gY29tcGxldGlvbiA9IEludGVy
cHJldGVyOjpldmFsdWF0ZShnbG9iYWxPYmplY3QtPmdsb2JhbEV4ZWMoKSwgZ2xvYmFsT2JqZWN0
LT5nbG9iYWxTY29wZUNoYWluKCksIG1ha2VTb3VyY2Uoc2NyaXB0LmRhdGEoKSwgZmlsZU5hbWUp
KTsKLSAgICAgICAgICAgIHN1Y2Nlc3MgPSBzdWNjZXNzICYmIGNvbXBsZXRpb24uY29tcGxUeXBl
KCkgIT0gVGhyb3c7Ci0gICAgICAgICAgICBpZiAoZHVtcCkgewotICAgICAgICAgICAgICAgIGlm
IChjb21wbGV0aW9uLmNvbXBsVHlwZSgpID09IFRocm93KQotICAgICAgICAgICAgICAgICAgICBw
cmludGYoIkV4Y2VwdGlvbjogJXNcbiIsIGNvbXBsZXRpb24udmFsdWUoKS0+dG9TdHJpbmcoZ2xv
YmFsT2JqZWN0LT5nbG9iYWxFeGVjKCkpLmFzY2lpKCkpOwotICAgICAgICAgICAgICAgIGVsc2UK
LSAgICAgICAgICAgICAgICAgICAgcHJpbnRmKCJFbmQ6ICVzXG4iLCBjb21wbGV0aW9uLnZhbHVl
KCktPnRvU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS5hc2NpaSgpKTsKLSAgICAg
ICAgICAgIH0KKyAgICAgICAgQ29tcGxldGlvbiBjb21wbGV0aW9uID0gSW50ZXJwcmV0ZXI6OmV2
YWx1YXRlKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpLCBnbG9iYWxPYmplY3QtPmdsb2JhbFNj
b3BlQ2hhaW4oKSwgbWFrZVNvdXJjZShzY3JpcHQuZGF0YSgpLCBmaWxlTmFtZSkpOworICAgICAg
ICBzdWNjZXNzID0gc3VjY2VzcyAmJiBjb21wbGV0aW9uLmNvbXBsVHlwZSgpICE9IFRocm93Owor
ICAgICAgICBpZiAoZHVtcCkgeworICAgICAgICAgICAgaWYgKGNvbXBsZXRpb24uY29tcGxUeXBl
KCkgPT0gVGhyb3cpCisgICAgICAgICAgICAgICAgcHJpbnRmKCJFeGNlcHRpb246ICVzXG4iLCBj
b21wbGV0aW9uLnZhbHVlKCktPnRvU3RyaW5nKGdsb2JhbE9iamVjdC0+Z2xvYmFsRXhlYygpKS5h
c2NpaSgpKTsKKyAgICAgICAgICAgIGVsc2UKKyAgICAgICAgICAgICAgICBwcmludGYoIkVuZDog
JXNcbiIsIGNvbXBsZXRpb24udmFsdWUoKS0+dG9TdHJpbmcoZ2xvYmFsT2JqZWN0LT5nbG9iYWxF
eGVjKCkpLmFzY2lpKCkpOworICAgICAgICB9CiAKLSAgICAgICAgICAgIGdsb2JhbE9iamVjdC0+
Z2xvYmFsRXhlYygpLT5jbGVhckV4Y2VwdGlvbigpOworICAgICAgICBnbG9iYWxPYmplY3QtPmds
b2JhbEV4ZWMoKS0+Y2xlYXJFeGNlcHRpb24oKTsKIAogI2lmIEVOQUJMRShPUENPREVfU0FNUExJ
TkcpCi0gICAgICAgICAgICBtYWNoaW5lLT5zYW1wbGVyKCktPnN0b3AoKTsKKyAgICAgICAgbWFj
aGluZS0+c2FtcGxlcigpLT5zdG9wKCk7CiAjZW5kaWYKLSAgICAgICAgfQogICAgIH0KIAogI2lm
IEVOQUJMRShPUENPREVfU0FNUExJTkcpCkBAIC00MDMsNyArMzgzLDYgQEAgc3RhdGljIHZvaWQg
cHJpbnRVc2FnZVN0YXRlbWVudCgpCiAgICAgZnByaW50ZihzdGRlcnIsICIgIC1mICAgICAgICAg
U3BlY2lmaWVzIGEgc291cmNlIGZpbGUgKGRlcHJlY2F0ZWQpXG4iKTsKICAgICBmcHJpbnRmKHN0
ZGVyciwgIiAgLWh8LS1oZWxwICBQcmludHMgdGhpcyBoZWxwIG1lc3NhZ2VcbiIpOwogICAgIGZw
cmludGYoc3RkZXJyLCAiICAtaSAgICAgICAgIEVuYWJsZXMgaW50ZXJhY3RpdmUgbW9kZSAoZGVm
YXVsdCBpZiBubyBmaWxlcyBhcmUgc3BlY2lmaWVkKVxuIik7Ci0gICAgZnByaW50ZihzdGRlcnIs
ICIgIC1wICAgICAgICAgUHJpbnRzIGZvcm1hdHRlZCBzb3VyY2UgY29kZVxuIik7CiAgICAgZnBy
aW50ZihzdGRlcnIsICIgIC1zICAgICAgICAgSW5zdGFsbHMgc2lnbmFsIGhhbmRsZXJzIHRoYXQg
ZXhpdCBvbiBhIGNyYXNoIChVbml4IHBsYXRmb3JtcyBvbmx5KVxuIik7CiAgICAgZXhpdCgtMSk7
CiB9CkBAIC00MjYsMTAgKzQwNSw2IEBAIHN0YXRpYyB2b2lkIHBhcnNlQXJndW1lbnRzKGludCBh
cmdjLCBjaGEKICAgICAgICAgICAgIG9wdGlvbnMuaW50ZXJhY3RpdmUgPSB0cnVlOwogICAgICAg
ICAgICAgY29udGludWU7CiAgICAgICAgIH0KLSAgICAgICAgaWYgKHN0cmNtcChhcmcsICItcCIp
ID09IDApIHsKLSAgICAgICAgICAgIG9wdGlvbnMucHJldHR5UHJpbnQgPSB0cnVlOwotICAgICAg
ICAgICAgY29udGludWU7Ci0gICAgICAgIH0KICAgICAgICAgaWYgKHN0cmNtcChhcmcsICItZCIp
ID09IDApIHsKICAgICAgICAgICAgIG9wdGlvbnMuZHVtcCA9IHRydWU7CiAgICAgICAgICAgICBj
b250aW51ZTsKQEAgLTQ2Nyw3ICs0NDIsNyBAQCBpbnQganNjbWFpbihpbnQgYXJnYywgY2hhcioq
IGFyZ3YsIEpTR2xvCiAgICAgcGFyc2VBcmd1bWVudHMoYXJnYywgYXJndiwgb3B0aW9ucyk7CiAK
ICAgICBHbG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCA9IG5ldyAoZ2xvYmFsRGF0YSkgR2xvYmFs
T2JqZWN0KG9wdGlvbnMuYXJndW1lbnRzKTsKLSAgICBib29sIHN1Y2Nlc3MgPSBydW5XaXRoU2Ny
aXB0cyhnbG9iYWxPYmplY3QsIG9wdGlvbnMuZmlsZU5hbWVzLCBvcHRpb25zLnByZXR0eVByaW50
LCBvcHRpb25zLmR1bXApOworICAgIGJvb2wgc3VjY2VzcyA9IHJ1bldpdGhTY3JpcHRzKGdsb2Jh
bE9iamVjdCwgb3B0aW9ucy5maWxlTmFtZXMsIG9wdGlvbnMuZHVtcCk7CiAgICAgaWYgKG9wdGlv
bnMuaW50ZXJhY3RpdmUgJiYgc3VjY2VzcykKICAgICAgICAgcnVuSW50ZXJhY3RpdmUoZ2xvYmFs
T2JqZWN0KTsKIApJbmRleDogSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUudmNwcm9qL0ph
dmFTY3JpcHRDb3JlL0phdmFTY3JpcHRDb3JlLnZjcHJvago9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2Ny
aXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2ovSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENv
cmUudmNwcm9qCShyZXZpc2lvbiAzODI0MSkKKysrIEphdmFTY3JpcHRDb3JlL0phdmFTY3JpcHRD
b3JlLnZjcHJvai9KYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS52Y3Byb2oJKHdvcmtpbmcg
Y29weSkKQEAgLTEyMTQsMTAgKzEyMTQsNiBAQAogCQkJCT4NCiAJCQk8L0ZpbGU+DQogCQkJPEZp
bGUNCi0JCQkJUmVsYXRpdmVQYXRoPSIuLlwuLlxwYXJzZXJcbm9kZXMyc3RyaW5nLmNwcCINCi0J
CQkJPg0KLQkJCTwvRmlsZT4NCi0JCQk8RmlsZQ0KIAkJCQlSZWxhdGl2ZVBhdGg9Ii4uXC4uXHBh
cnNlclxQYXJzZXIuY3BwIg0KIAkJCQk+DQogCQkJPC9GaWxlPg0KSW5kZXg6IEphdmFTY3JpcHRD
b3JlL0phdmFTY3JpcHRDb3JlLnhjb2RlcHJvai9wcm9qZWN0LnBieHByb2oKPT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQot
LS0gSmF2YVNjcmlwdENvcmUvSmF2YVNjcmlwdENvcmUueGNvZGVwcm9qL3Byb2plY3QucGJ4cHJv
agkocmV2aXNpb24gMzgyNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9KYXZhU2NyaXB0Q29yZS54Y29k
ZXByb2ovcHJvamVjdC5wYnhwcm9qCSh3b3JraW5nIGNvcHkpCkBAIC03MDksNyArNzA5LDYgQEAK
IAkJRTFFRjc5QTkwQ0U5N0JBNjAwODhENTAwIC8qIFVURjguaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNv
ZGUuYy5oOyBwYXRoID0gVVRGOC5oOyBzb3VyY2VUcmVlID0gIjxncm91cD4iOyB9OwogCQlGNUJC
MkJDNTAzMEY3NzIxMDFGQ0ZFMUQgLyogQ29tcGxldGlvbi5oICovID0ge2lzYSA9IFBCWEZpbGVS
ZWZlcmVuY2U7IGZpbGVFbmNvZGluZyA9IDMwOyBpbmRlbnRXaWR0aCA9IDQ7IGxhc3RLbm93bkZp
bGVUeXBlID0gc291cmNlY29kZS5jLmg7IHBhdGggPSBDb21wbGV0aW9uLmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgfTsKIAkJRjVDMjkwRTYwMjg0Rjk4RTAxODYzNUNB
IC8qIEphdmFTY3JpcHRDb3JlUHJlZml4LmggKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsg
ZmlsZUVuY29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBz
b3VyY2Vjb2RlLmMuaDsgcGF0aCA9IEphdmFTY3JpcHRDb3JlUHJlZml4Lmg7IHNvdXJjZVRyZWUg
PSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgfTsKLQkJRjVGRkU2NTYwMjZCNDdBNjAxODYzNUNB
IC8qIG5vZGVzMnN0cmluZy5jcHAgKi8gPSB7aXNhID0gUEJYRmlsZVJlZmVyZW5jZTsgZmlsZUVu
Y29kaW5nID0gMzA7IGluZGVudFdpZHRoID0gNDsgbGFzdEtub3duRmlsZVR5cGUgPSBzb3VyY2Vj
b2RlLmNwcC5jcHA7IHBhdGggPSBub2RlczJzdHJpbmcuY3BwOyBzb3VyY2VUcmVlID0gIjxncm91
cD4iOyB0YWJXaWR0aCA9IDg7IH07CiAJCUY2OEVCQjhDMDI1NUQ0QzYwMUZGNjBGNyAvKiBjb25m
aWcuaCAqLyA9IHtpc2EgPSBQQlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5k
ZW50V2lkdGggPSA0OyBsYXN0S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0g
Y29uZmlnLmg7IHNvdXJjZVRyZWUgPSAiPGdyb3VwPiI7IHRhYldpZHRoID0gODsgfTsKIAkJRjY5
MkE4NEQwMjU1NTk3RDAxRkY2MEY3IC8qIEFycmF5UHJvdG90eXBlLmNwcCAqLyA9IHtpc2EgPSBQ
QlhGaWxlUmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0
S25vd25GaWxlVHlwZSA9IHNvdXJjZWNvZGUuY3BwLmNwcDsgcGF0aCA9IEFycmF5UHJvdG90eXBl
LmNwcDsgc291cmNlVHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwogCQlGNjkyQTg0
RTAyNTU1OTdEMDFGRjYwRjcgLyogQXJyYXlQcm90b3R5cGUuaCAqLyA9IHtpc2EgPSBQQlhGaWxl
UmVmZXJlbmNlOyBmaWxlRW5jb2RpbmcgPSAzMDsgaW5kZW50V2lkdGggPSA0OyBsYXN0S25vd25G
aWxlVHlwZSA9IHNvdXJjZWNvZGUuYy5oOyBwYXRoID0gQXJyYXlQcm90b3R5cGUuaDsgc291cmNl
VHJlZSA9ICI8Z3JvdXA+IjsgdGFiV2lkdGggPSA4OyB9OwpAQCAtMTEwOCw3ICsxMTA3LDYgQEAK
IAkJCQk3RUZGMDA2MzBFQzA1QTlBMDBBQTdDOTMgLyogTm9kZUluZm8uaCAqLywKIAkJCQlGNjky
QTg2RDAyNTU1OTdEMDFGRjYwRjcgLyogTm9kZXMuY3BwICovLAogCQkJCUY2OTJBODZFMDI1NTU5
N0QwMUZGNjBGNyAvKiBOb2Rlcy5oICovLAotCQkJCUY1RkZFNjU2MDI2QjQ3QTYwMTg2MzVDQSAv
KiBub2RlczJzdHJpbmcuY3BwICovLAogCQkJCTkzRjBCM0E5MDlCQjREQzAwMDY4RkNFMyAvKiBQ
YXJzZXIuY3BwICovLAogCQkJCTkzRjBCM0FBMDlCQjREQzAwMDY4RkNFMyAvKiBQYXJzZXIuaCAq
LywKIAkJCQk4NjlFQkNCNjBFOEM2RDRBMDA4NzIyQ0MgLyogUmVzdWx0VHlwZS5oICovLApJbmRl
eDogSmF2YVNjcmlwdENvcmUvVk0vQ29kZUJsb2NrLmgKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlw
dENvcmUvVk0vQ29kZUJsb2NrLmgJKHJldmlzaW9uIDM4MjQxKQorKysgSmF2YVNjcmlwdENvcmUv
Vk0vQ29kZUJsb2NrLmgJKHdvcmtpbmcgY29weSkKQEAgLTM0LDYgKzM0LDcgQEAKICNpbmNsdWRl
ICJKU0dsb2JhbE9iamVjdC5oIgogI2luY2x1ZGUgIk5vZGVzLmgiCiAjaW5jbHVkZSAiUGFyc2Vy
LmgiCisjaW5jbHVkZSAiUmVnRXhwLmgiCiAjaW5jbHVkZSAiU291cmNlQ29kZS5oIgogI2luY2x1
ZGUgIlVTdHJpbmcuaCIKICNpbmNsdWRlIDx3dGYvUmVmUHRyLmg+CkluZGV4OiBKYXZhU2NyaXB0
Q29yZS9WTS9NYWNoaW5lLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9WTS9NYWNo
aW5lLmNwcAkocmV2aXNpb24gMzgyNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9WTS9NYWNoaW5lLmNw
cAkod29ya2luZyBjb3B5KQpAQCAtMTA0Miw5ICsxMDQyLDkgQEAgSlNWYWx1ZSogTWFjaGluZTo6
ZXhlY3V0ZShFdmFsTm9kZSogZXZhbAogCiAgICAgICAgIEJhdGNoZWRUcmFuc2l0aW9uT3B0aW1p
emVyIG9wdGltaXplcih2YXJpYWJsZU9iamVjdCk7CiAKLSAgICAgICAgY29uc3QgTm9kZTo6VmFy
U3RhY2smIHZhclN0YWNrID0gY29kZUJsb2NrLT5vd25lck5vZGUtPnZhclN0YWNrKCk7Ci0gICAg
ICAgIE5vZGU6OlZhclN0YWNrOjpjb25zdF9pdGVyYXRvciB2YXJTdGFja0VuZCA9IHZhclN0YWNr
LmVuZCgpOwotICAgICAgICBmb3IgKE5vZGU6OlZhclN0YWNrOjpjb25zdF9pdGVyYXRvciBpdCA9
IHZhclN0YWNrLmJlZ2luKCk7IGl0ICE9IHZhclN0YWNrRW5kOyArK2l0KSB7CisgICAgICAgIGNv
bnN0IERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFjayYgdmFyU3RhY2sgPSBjb2RlQmxvY2stPm93
bmVyTm9kZS0+dmFyU3RhY2soKTsKKyAgICAgICAgRGVjbGFyYXRpb25TdGFja3M6OlZhclN0YWNr
Ojpjb25zdF9pdGVyYXRvciB2YXJTdGFja0VuZCA9IHZhclN0YWNrLmVuZCgpOworICAgICAgICBm
b3IgKERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFjazo6Y29uc3RfaXRlcmF0b3IgaXQgPSB2YXJT
dGFjay5iZWdpbigpOyBpdCAhPSB2YXJTdGFja0VuZDsgKytpdCkgewogICAgICAgICAgICAgY29u
c3QgSWRlbnRpZmllciYgaWRlbnQgPSAoKml0KS5maXJzdDsKICAgICAgICAgICAgIGlmICghdmFy
aWFibGVPYmplY3QtPmhhc1Byb3BlcnR5KGNhbGxGcmFtZSwgaWRlbnQpKSB7CiAgICAgICAgICAg
ICAgICAgUHV0UHJvcGVydHlTbG90IHNsb3Q7CkBAIC0xMDUyLDkgKzEwNTIsOSBAQCBKU1ZhbHVl
KiBNYWNoaW5lOjpleGVjdXRlKEV2YWxOb2RlKiBldmFsCiAgICAgICAgICAgICB9CiAgICAgICAg
IH0KIAotICAgICAgICBjb25zdCBOb2RlOjpGdW5jdGlvblN0YWNrJiBmdW5jdGlvblN0YWNrID0g
Y29kZUJsb2NrLT5vd25lck5vZGUtPmZ1bmN0aW9uU3RhY2soKTsKLSAgICAgICAgTm9kZTo6RnVu
Y3Rpb25TdGFjazo6Y29uc3RfaXRlcmF0b3IgZnVuY3Rpb25TdGFja0VuZCA9IGZ1bmN0aW9uU3Rh
Y2suZW5kKCk7Ci0gICAgICAgIGZvciAoTm9kZTo6RnVuY3Rpb25TdGFjazo6Y29uc3RfaXRlcmF0
b3IgaXQgPSBmdW5jdGlvblN0YWNrLmJlZ2luKCk7IGl0ICE9IGZ1bmN0aW9uU3RhY2tFbmQ7ICsr
aXQpIHsKKyAgICAgICAgY29uc3QgRGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2smIGZ1
bmN0aW9uU3RhY2sgPSBjb2RlQmxvY2stPm93bmVyTm9kZS0+ZnVuY3Rpb25TdGFjaygpOworICAg
ICAgICBEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25TdGFjazo6Y29uc3RfaXRlcmF0b3IgZnVu
Y3Rpb25TdGFja0VuZCA9IGZ1bmN0aW9uU3RhY2suZW5kKCk7CisgICAgICAgIGZvciAoRGVjbGFy
YXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2s6OmNvbnN0X2l0ZXJhdG9yIGl0ID0gZnVuY3Rpb25T
dGFjay5iZWdpbigpOyBpdCAhPSBmdW5jdGlvblN0YWNrRW5kOyArK2l0KSB7CiAgICAgICAgICAg
ICBQdXRQcm9wZXJ0eVNsb3Qgc2xvdDsKICAgICAgICAgICAgIHZhcmlhYmxlT2JqZWN0LT5wdXQo
Y2FsbEZyYW1lLCAoKml0KS0+bV9pZGVudCwgKCppdCktPm1ha2VGdW5jdGlvbihjYWxsRnJhbWUs
IHNjb3BlQ2hhaW4pLCBzbG90KTsKICAgICAgICAgfQpJbmRleDogSmF2YVNjcmlwdENvcmUvYnl0
ZWNvbXBpbGVyL0NvZGVHZW5lcmF0b3IuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3Jl
L2J5dGVjb21waWxlci9Db2RlR2VuZXJhdG9yLmNwcAkocmV2aXNpb24gMzgyNDEpCisrKyBKYXZh
U2NyaXB0Q29yZS9ieXRlY29tcGlsZXIvQ29kZUdlbmVyYXRvci5jcHAJKHdvcmtpbmcgY29weSkK
QEAgLTMwNyw3ICszMDcsNyBAQCBDb2RlR2VuZXJhdG9yOjpDb2RlR2VuZXJhdG9yKEZ1bmN0aW9u
Qm9kCiAgICAgaWYgKHVzZXNBcmd1bWVudHMpCiAgICAgICAgIGVtaXRPcGNvZGUob3BfY3JlYXRl
X2FyZ3VtZW50cyk7CiAKLSAgICBjb25zdCBOb2RlOjpGdW5jdGlvblN0YWNrJiBmdW5jdGlvblN0
YWNrID0gZnVuY3Rpb25Cb2R5LT5mdW5jdGlvblN0YWNrKCk7CisgICAgY29uc3QgRGVjbGFyYXRp
b25TdGFja3M6OkZ1bmN0aW9uU3RhY2smIGZ1bmN0aW9uU3RhY2sgPSBmdW5jdGlvbkJvZHktPmZ1
bmN0aW9uU3RhY2soKTsKICAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IGZ1bmN0aW9uU3RhY2su
c2l6ZSgpOyArK2kpIHsKICAgICAgICAgRnVuY0RlY2xOb2RlKiBmdW5jRGVjbCA9IGZ1bmN0aW9u
U3RhY2tbaV0uZ2V0KCk7CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIGlkZW50ID0gZnVuY0Rl
Y2wtPm1faWRlbnQ7CkBAIC0zMTUsNyArMzE1LDcgQEAgQ29kZUdlbmVyYXRvcjo6Q29kZUdlbmVy
YXRvcihGdW5jdGlvbkJvZAogICAgICAgICBlbWl0TmV3RnVuY3Rpb24oYWRkVmFyKGlkZW50LCBm
YWxzZSksIGZ1bmNEZWNsKTsKICAgICB9CiAKLSAgICBjb25zdCBOb2RlOjpWYXJTdGFjayYgdmFy
U3RhY2sgPSBmdW5jdGlvbkJvZHktPnZhclN0YWNrKCk7CisgICAgY29uc3QgRGVjbGFyYXRpb25T
dGFja3M6OlZhclN0YWNrJiB2YXJTdGFjayA9IGZ1bmN0aW9uQm9keS0+dmFyU3RhY2soKTsKICAg
ICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IHZhclN0YWNrLnNpemUoKTsgKytpKQogICAgICAgICBh
ZGRWYXIodmFyU3RhY2tbaV0uZmlyc3QsIHZhclN0YWNrW2ldLnNlY29uZCAmIERlY2xhcmF0aW9u
U3RhY2tzOjpJc0NvbnN0YW50KTsKIApJbmRleDogSmF2YVNjcmlwdENvcmUvcGFyc2VyL0dyYW1t
YXIueQo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09Ci0tLSBKYXZhU2NyaXB0Q29yZS9wYXJzZXIvR3JhbW1hci55CShyZXZp
c2lvbiAzODI0MSkKKysrIEphdmFTY3JpcHRDb3JlL3BhcnNlci9HcmFtbWFyLnkJKHdvcmtpbmcg
Y29weSkKQEAgLTE0MDgsOSArMTQwOCw2IEBAIHN0YXRpYyBFeHByZXNzaW9uTm9kZSogbWFrZU5l
Z2F0ZU5vZGUodm8KIAogc3RhdGljIE51bWJlck5vZGUqIG1ha2VOdW1iZXJOb2RlKHZvaWQqIGds
b2JhbFB0ciwgZG91YmxlIGQpCiB7Ci0gICAgSlNWYWx1ZSogdmFsdWUgPSBKU0ltbWVkaWF0ZTo6
ZnJvbShkKTsKLSAgICBpZiAodmFsdWUpCi0gICAgICAgIHJldHVybiBuZXcgSW1tZWRpYXRlTnVt
YmVyTm9kZShHTE9CQUxfREFUQSwgdmFsdWUsIGQpOwogICAgIHJldHVybiBuZXcgTnVtYmVyTm9k
ZShHTE9CQUxfREFUQSwgZCk7CiB9CiAKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3BhcnNlci9Ob2Rl
cy5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmNwcAkocmV2
aXNpb24gMzgyNDEpCisrKyBKYXZhU2NyaXB0Q29yZS9wYXJzZXIvTm9kZXMuY3BwCSh3b3JraW5n
IGNvcHkpCkBAIC0xNTksNyArMTU5LDcgQEAgc3RhdGljIHZvaWQgc3Vic3RpdHV0ZShVU3RyaW5n
JiBzdHJpbmcsIAogCiBSZWdpc3RlcklEKiBUaHJvd2FibGVFeHByZXNzaW9uRGF0YTo6ZW1pdFRo
cm93RXJyb3IoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBFcnJvclR5cGUgZSwgY29uc3QgY2hh
ciogbXNnKQogewotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obV9kaXZvdCwgbV9z
dGFydE9mZnNldCwgbV9lbmRPZmZzZXQpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbklu
Zm8oZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogICAgIFJlZ2lzdGVySUQq
IGV4Y2VwdGlvbiA9IGdlbmVyYXRvci5lbWl0TmV3RXJyb3IoZ2VuZXJhdG9yLm5ld1RlbXBvcmFy
eSgpLCBlLCBqc1N0cmluZyhnZW5lcmF0b3IuZ2xvYmFsRGF0YSgpLCBtc2cpKTsKICAgICBnZW5l
cmF0b3IuZW1pdFRocm93KGV4Y2VwdGlvbik7CiAgICAgcmV0dXJuIGV4Y2VwdGlvbjsKQEAgLTE2
OSw3ICsxNjksNyBAQCBSZWdpc3RlcklEKiBUaHJvd2FibGVFeHByZXNzaW9uRGF0YTo6ZW1pCiB7
CiAgICAgVVN0cmluZyBtZXNzYWdlID0gbXNnOwogICAgIHN1YnN0aXR1dGUobWVzc2FnZSwgbGFi
ZWwudXN0cmluZygpKTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKG1fZGl2b3Qs
IG1fc3RhcnRPZmZzZXQsIG1fZW5kT2Zmc2V0KTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Np
b25JbmZvKGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKICAgICBSZWdpc3Rl
cklEKiBleGNlcHRpb24gPSBnZW5lcmF0b3IuZW1pdE5ld0Vycm9yKGdlbmVyYXRvci5uZXdUZW1w
b3JhcnkoKSwgZSwganNTdHJpbmcoZ2VuZXJhdG9yLmdsb2JhbERhdGEoKSwgbWVzc2FnZSkpOwog
ICAgIGdlbmVyYXRvci5lbWl0VGhyb3coZXhjZXB0aW9uKTsKICAgICByZXR1cm4gZXhjZXB0aW9u
OwpAQCAtMzU4LDcgKzM1OCw3IEBAIFJlZ2lzdGVySUQqIEJyYWNrZXRBY2Nlc3Nvck5vZGU6OmVt
aXRDb2QKIHsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9k
ZUZvckxlZnRIYW5kU2lkZShtX2Jhc2UuZ2V0KCksIG1fc3Vic2NyaXB0SGFzQXNzaWdubWVudHMs
IG1fc3Vic2NyaXB0LT5pc1B1cmUoZ2VuZXJhdG9yKSk7CiAgICAgUmVnaXN0ZXJJRCogcHJvcGVy
dHkgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9zdWJzY3JpcHQuZ2V0KCkpOwotICAgIGdlbmVyYXRv
ci5lbWl0RXhwcmVzc2lvbkluZm8obV9kaXZvdCwgbV9zdGFydE9mZnNldCwgbV9lbmRPZmZzZXQp
OworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgc3RhcnRPZmZzZXQo
KSwgZW5kT2Zmc2V0KCkpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGdlbmVy
YXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGJhc2UuZ2V0KCksIHByb3BlcnR5KTsKIH0KIApA
QCAtMzY3LDcgKzM2Nyw3IEBAIFJlZ2lzdGVySUQqIEJyYWNrZXRBY2Nlc3Nvck5vZGU6OmVtaXRD
b2QKIFJlZ2lzdGVySUQqIERvdEFjY2Vzc29yTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYg
Z2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCiB7CiAgICAgUmVnaXN0ZXJJRCogYmFzZSA9IGdl
bmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UuZ2V0KCkpOwotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVz
c2lvbkluZm8obV9kaXZvdCwgbV9zdGFydE9mZnNldCwgbV9lbmRPZmZzZXQpOworICAgIGdlbmVy
YXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0
KCkpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLmZpbmFsRGVz
dGluYXRpb24oZHN0KSwgYmFzZSwgbV9pZGVudCk7CiB9CiAKQEAgLTM4NCw3ICszODQsNyBAQCBS
ZWdpc3RlcklEKiBBcmd1bWVudExpc3ROb2RlOjplbWl0Q29kZShDCiBSZWdpc3RlcklEKiBOZXdF
eHByTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBk
c3QpCiB7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0b3IuZW1pdE5vZGUo
bV9leHByLmdldCgpKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDb25zdHJ1Y3QoZ2VuZXJh
dG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgZnVuYy5nZXQoKSwgbV9hcmdzLmdldCgpLCBtX2Rp
dm90LCBtX3N0YXJ0T2Zmc2V0LCBtX2VuZE9mZnNldCk7CisgICAgcmV0dXJuIGdlbmVyYXRvci5l
bWl0Q29uc3RydWN0KGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGZ1bmMuZ2V0KCks
IG1fYXJncy5nZXQoKSwgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogfQog
CiBSZWdpc3RlcklEKiBFdmFsRnVuY3Rpb25DYWxsTm9kZTo6ZW1pdENvZGUoQ29kZUdlbmVyYXRv
ciYgZ2VuZXJhdG9yLCBSZWdpc3RlcklEKiBkc3QpCkBAIC0zOTIsNTEgKzM5Miw1MSBAQCBSZWdp
c3RlcklEKiBFdmFsRnVuY3Rpb25DYWxsTm9kZTo6ZW1pdENvCiAgICAgUmVmUHRyPFJlZ2lzdGVy
SUQ+IGJhc2UgPSBnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCk7CiAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IGZ1bmMgPSBnZW5lcmF0b3IubmV3VGVtcG9yYXJ5KCk7CiAgICAgZ2VuZXJhdG9y
LmVtaXRSZXNvbHZlV2l0aEJhc2UoYmFzZS5nZXQoKSwgZnVuYy5nZXQoKSwgZ2VuZXJhdG9yLnBy
b3BlcnR5TmFtZXMoKS5ldmFsKTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsRXZhbChn
ZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGJhc2UuZ2V0KCkpLCBmdW5jLmdldCgpLCBi
YXNlLmdldCgpLCBtX2FyZ3MuZ2V0KCksIG1fZGl2b3QsIG1fc3RhcnRPZmZzZXQsIG1fZW5kT2Zm
c2V0KTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsRXZhbChnZW5lcmF0b3IuZmluYWxE
ZXN0aW5hdGlvbihkc3QsIGJhc2UuZ2V0KCkpLCBmdW5jLmdldCgpLCBiYXNlLmdldCgpLCBtX2Fy
Z3MuZ2V0KCksIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKIH0KIAogUmVn
aXN0ZXJJRCogRnVuY3Rpb25DYWxsVmFsdWVOb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBn
ZW5lcmF0b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVu
YyA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4cHIuZ2V0KCkpOwotICAgIHJldHVybiBnZW5lcmF0
b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgZnVuYy5nZXQoKSwg
MCwgbV9hcmdzLmdldCgpLCBtX2Rpdm90LCBtX3N0YXJ0T2Zmc2V0LCBtX2VuZE9mZnNldCk7Cisg
ICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihk
c3QpLCBmdW5jLmdldCgpLCAwLCBtX2FyZ3MuZ2V0KCksIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCks
IGVuZE9mZnNldCgpKTsKIH0KIAogUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsUmVzb2x2ZU5vZGU6
OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewog
ICAgIGlmIChSZWZQdHI8UmVnaXN0ZXJJRD4gbG9jYWwgPSBnZW5lcmF0b3IucmVnaXN0ZXJGb3Io
bV9pZGVudCkpCi0gICAgICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZp
bmFsRGVzdGluYXRpb24oZHN0KSwgbG9jYWwuZ2V0KCksIDAsIG1fYXJncy5nZXQoKSwgbV9kaXZv
dCwgbV9zdGFydE9mZnNldCwgbV9lbmRPZmZzZXQpOworICAgICAgICByZXR1cm4gZ2VuZXJhdG9y
LmVtaXRDYWxsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGxvY2FsLmdldCgpLCAw
LCBtX2FyZ3MuZ2V0KCksIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKIAog
ICAgIGludCBpbmRleCA9IDA7CiAgICAgc2l6ZV90IGRlcHRoID0gMDsKICAgICBKU09iamVjdCog
Z2xvYmFsT2JqZWN0ID0gMDsKICAgICBpZiAoZ2VuZXJhdG9yLmZpbmRTY29wZWRQcm9wZXJ0eSht
X2lkZW50LCBpbmRleCwgZGVwdGgsIGZhbHNlLCBnbG9iYWxPYmplY3QpICYmIGluZGV4ICE9IG1p
c3NpbmdTeW1ib2xNYXJrZXIoKSkgewogICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuYyA9
IGdlbmVyYXRvci5lbWl0R2V0U2NvcGVkVmFyKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgZGVw
dGgsIGluZGV4LCBnbG9iYWxPYmplY3QpOwotICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRD
YWxsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIGZ1bmMuZ2V0KCksIDAsIG1fYXJn
cy5nZXQoKSwgbV9kaXZvdCwgbV9zdGFydE9mZnNldCwgbV9lbmRPZmZzZXQpOworICAgICAgICBy
ZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCks
IGZ1bmMuZ2V0KCksIDAsIG1fYXJncy5nZXQoKSwgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5k
T2Zmc2V0KCkpOwogICAgIH0KIAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJh
dG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBmdW5jID0g
Z2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwotICAgIGludCBpZGVudGlmaWVyU3RhcnQgPSBtX2Rp
dm90IC0gbV9zdGFydE9mZnNldDsKKyAgICBpbnQgaWRlbnRpZmllclN0YXJ0ID0gZGl2b3QoKSAt
IHN0YXJ0T2Zmc2V0KCk7CiAgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhpZGVudGlm
aWVyU3RhcnQgKyBtX2lkZW50LnNpemUoKSwgbV9pZGVudC5zaXplKCksIDApOwogICAgIGdlbmVy
YXRvci5lbWl0UmVzb2x2ZUZ1bmN0aW9uKGJhc2UuZ2V0KCksIGZ1bmMuZ2V0KCksIG1faWRlbnQp
OwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRp
b24oZHN0LCBiYXNlLmdldCgpKSwgZnVuYy5nZXQoKSwgYmFzZS5nZXQoKSwgbV9hcmdzLmdldCgp
LCBtX2Rpdm90LCBtX3N0YXJ0T2Zmc2V0LCBtX2VuZE9mZnNldCk7CisgICAgcmV0dXJuIGdlbmVy
YXRvci5lbWl0Q2FsbChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIGJhc2UuZ2V0KCkp
LCBmdW5jLmdldCgpLCBiYXNlLmdldCgpLCBtX2FyZ3MuZ2V0KCksIGRpdm90KCksIHN0YXJ0T2Zm
c2V0KCksIGVuZE9mZnNldCgpKTsKIH0KIAogUmVnaXN0ZXJJRCogRnVuY3Rpb25DYWxsQnJhY2tl
dE5vZGU6OmVtaXRDb2RlKENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCogZHN0
KQogewogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1f
YmFzZS5nZXQoKSk7CiAgICAgUmVnaXN0ZXJJRCogcHJvcGVydHkgPSBnZW5lcmF0b3IuZW1pdE5v
ZGUobV9zdWJzY3JpcHQuZ2V0KCkpOwotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8o
bV9kaXZvdCAtIG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0LCBtX3N0YXJ0T2Zmc2V0IC0gbV9z
dWJleHByZXNzaW9uRGl2b3RPZmZzZXQsIG1fc3ViZXhwcmVzc2lvbkVuZE9mZnNldCk7CisgICAg
Z2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpIC0gbV9zdWJleHByZXNzaW9uRGl2
b3RPZmZzZXQsIHN0YXJ0T2Zmc2V0KCkgLSBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNldCwgbV9z
dWJleHByZXNzaW9uRW5kT2Zmc2V0KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gZnVuY3Rpb24g
PSBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgYmFzZS5n
ZXQoKSwgcHJvcGVydHkpOwotICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9y
LmZpbmFsRGVzdGluYXRpb24oZHN0LCBiYXNlLmdldCgpKSwgZnVuY3Rpb24uZ2V0KCksIGJhc2Uu
Z2V0KCksIG1fYXJncy5nZXQoKSwgbV9kaXZvdCwgbV9zdGFydE9mZnNldCwgbV9lbmRPZmZzZXQp
OworICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdENhbGwoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRp
b24oZHN0LCBiYXNlLmdldCgpKSwgZnVuY3Rpb24uZ2V0KCksIGJhc2UuZ2V0KCksIG1fYXJncy5n
ZXQoKSwgZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogfQogCiBSZWdpc3Rl
cklEKiBGdW5jdGlvbkNhbGxEb3ROb2RlOjplbWl0Q29kZShDb2RlR2VuZXJhdG9yJiBnZW5lcmF0
b3IsIFJlZ2lzdGVySUQqIGRzdCkKIHsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdl
bmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UuZ2V0KCkpOwotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVz
c2lvbkluZm8obV9kaXZvdCAtIG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0LCBtX3N0YXJ0T2Zm
c2V0IC0gbV9zdWJleHByZXNzaW9uRGl2b3RPZmZzZXQsIG1fc3ViZXhwcmVzc2lvbkVuZE9mZnNl
dCk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpIC0gbV9zdWJleHBy
ZXNzaW9uRGl2b3RPZmZzZXQsIHN0YXJ0T2Zmc2V0KCkgLSBtX3N1YmV4cHJlc3Npb25EaXZvdE9m
ZnNldCwgbV9zdWJleHByZXNzaW9uRW5kT2Zmc2V0KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4g
ZnVuY3Rpb24gPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgp
LCBiYXNlLmdldCgpLCBtX2lkZW50KTsKLSAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKGdl
bmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCwgYmFzZS5nZXQoKSksIGZ1bmN0aW9uLmdldCgp
LCBiYXNlLmdldCgpLCBtX2FyZ3MuZ2V0KCksIG1fZGl2b3QsIG1fc3RhcnRPZmZzZXQsIG1fZW5k
T2Zmc2V0KTsKKyAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRDYWxsKGdlbmVyYXRvci5maW5hbERl
c3RpbmF0aW9uKGRzdCwgYmFzZS5nZXQoKSksIGZ1bmN0aW9uLmdldCgpLCBiYXNlLmdldCgpLCBt
X2FyZ3MuZ2V0KCksIGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKIH0KIAog
Ly8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIFBvc3RmaXhSZXNvbHZlTm9kZSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkBAIC00ODEsNyArNDgxLDcgQEAgUmVnaXN0
ZXJJRCogUG9zdGZpeFJlc29sdmVOb2RlOjplbWl0Q29kZQogICAgICAgICByZXR1cm4gb2xkVmFs
dWU7CiAgICAgfQogCi0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhtX2Rpdm90LCBt
X3N0YXJ0T2Zmc2V0LCBtX2VuZE9mZnNldCk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9u
SW5mbyhkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CiAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpOwogICAgIFJlZlB0cjxS
ZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXRSZXNvbHZlV2l0aEJhc2UoZ2VuZXJhdG9y
Lm5ld1RlbXBvcmFyeSgpLCB2YWx1ZS5nZXQoKSwgbV9pZGVudCk7CiAgICAgUmVnaXN0ZXJJRCog
b2xkVmFsdWU7CkBAIC01MDIsNyArNTAyLDcgQEAgUmVnaXN0ZXJJRCogUG9zdGZpeEJyYWNrZXRO
b2RlOjplbWl0Q29kZQogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVt
aXROb2RlKG1fYmFzZS5nZXQoKSk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHByb3BlcnR5ID0g
Z2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0LmdldCgpKTsKIAotICAgIGdlbmVyYXRvci5l
bWl0RXhwcmVzc2lvbkluZm8obV9kaXZvdCAtIG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0LCBt
X3N0YXJ0T2Zmc2V0IC0gbV9zdWJleHByZXNzaW9uRGl2b3RPZmZzZXQsIG1fc3ViZXhwcmVzc2lv
bkVuZE9mZnNldCk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpIC0g
bV9zdWJleHByZXNzaW9uRGl2b3RPZmZzZXQsIHN0YXJ0T2Zmc2V0KCkgLSBtX3N1YmV4cHJlc3Np
b25EaXZvdE9mZnNldCwgbV9zdWJleHByZXNzaW9uRW5kT2Zmc2V0KTsKICAgICBSZWZQdHI8UmVn
aXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEJ5VmFsKGdlbmVyYXRvci5uZXdUZW1w
b3JhcnkoKSwgYmFzZS5nZXQoKSwgcHJvcGVydHkuZ2V0KCkpOwogICAgIFJlZ2lzdGVySUQqIG9s
ZFZhbHVlOwogICAgIGlmIChkc3QgPT0gaWdub3JlZFJlc3VsdCgpKSB7CkBAIC01MTQsNyArNTE0
LDcgQEAgUmVnaXN0ZXJJRCogUG9zdGZpeEJyYWNrZXROb2RlOjplbWl0Q29kZQogICAgIH0gZWxz
ZSB7CiAgICAgICAgIG9sZFZhbHVlID0gKG1fb3BlcmF0b3IgPT0gT3BQbHVzUGx1cykgPyBnZW5l
cmF0b3IuZW1pdFBvc3RJbmMoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24oZHN0KSwgdmFsdWUu
Z2V0KCkpIDogZ2VuZXJhdG9yLmVtaXRQb3N0RGVjKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9u
KGRzdCksIHZhbHVlLmdldCgpKTsKICAgICB9Ci0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9u
SW5mbyhtX2Rpdm90LCBtX3N0YXJ0T2Zmc2V0LCBtX2VuZE9mZnNldCk7CisgICAgZ2VuZXJhdG9y
LmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7
CiAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSwg
dmFsdWUuZ2V0KCkpOwogICAgIHJldHVybiBvbGRWYWx1ZTsKIH0KQEAgLTUyNSw3ICs1MjUsNyBA
QCBSZWdpc3RlcklEKiBQb3N0Zml4RG90Tm9kZTo6ZW1pdENvZGUoQ29kCiB7CiAgICAgUmVmUHRy
PFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNlLmdldCgpKTsKIAot
ICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obV9kaXZvdCAtIG1fc3ViZXhwcmVzc2lv
bkRpdm90T2Zmc2V0LCBtX3N0YXJ0T2Zmc2V0IC0gbV9zdWJleHByZXNzaW9uRGl2b3RPZmZzZXQs
IG1fc3ViZXhwcmVzc2lvbkVuZE9mZnNldCk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9u
SW5mbyhkaXZvdCgpIC0gbV9zdWJleHByZXNzaW9uRGl2b3RPZmZzZXQsIHN0YXJ0T2Zmc2V0KCkg
LSBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNldCwgbV9zdWJleHByZXNzaW9uRW5kT2Zmc2V0KTsK
ICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gdmFsdWUgPSBnZW5lcmF0b3IuZW1pdEdldEJ5SWQoZ2Vu
ZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBiYXNlLmdldCgpLCBtX2lkZW50KTsKICAgICBSZWdpc3Rl
cklEKiBvbGRWYWx1ZTsKICAgICBpZiAoZHN0ID09IGlnbm9yZWRSZXN1bHQoKSkgewpAQCAtNTM3
LDcgKzUzNyw3IEBAIFJlZ2lzdGVySUQqIFBvc3RmaXhEb3ROb2RlOjplbWl0Q29kZShDb2QKICAg
ICB9IGVsc2UgewogICAgICAgICBvbGRWYWx1ZSA9IChtX29wZXJhdG9yID09IE9wUGx1c1BsdXMp
ID8gZ2VuZXJhdG9yLmVtaXRQb3N0SW5jKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCks
IHZhbHVlLmdldCgpKSA6IGdlbmVyYXRvci5lbWl0UG9zdERlYyhnZW5lcmF0b3IuZmluYWxEZXN0
aW5hdGlvbihkc3QpLCB2YWx1ZS5nZXQoKSk7CiAgICAgfQotICAgIGdlbmVyYXRvci5lbWl0RXhw
cmVzc2lvbkluZm8obV9kaXZvdCwgbV9zdGFydE9mZnNldCwgbV9lbmRPZmZzZXQpOworICAgIGdl
bmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zm
c2V0KCkpOwogICAgIGdlbmVyYXRvci5lbWl0UHV0QnlJZChiYXNlLmdldCgpLCBtX2lkZW50LCB2
YWx1ZS5nZXQoKSk7CiAgICAgcmV0dXJuIG9sZFZhbHVlOwogfQpAQCAtNTU2LDcgKzU1Niw3IEBA
IFJlZ2lzdGVySUQqIERlbGV0ZVJlc29sdmVOb2RlOjplbWl0Q29kZSgKICAgICBpZiAoZ2VuZXJh
dG9yLnJlZ2lzdGVyRm9yKG1faWRlbnQpKQogICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRV
bmV4cGVjdGVkTG9hZChnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlvbihkc3QpLCBmYWxzZSk7CiAK
LSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKG1fZGl2b3QsIG1fc3RhcnRPZmZzZXQs
IG1fZW5kT2Zmc2V0KTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCks
IHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKICAgICBSZWdpc3RlcklEKiBiYXNlID0gZ2Vu
ZXJhdG9yLmVtaXRSZXNvbHZlQmFzZShnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIG1f
aWRlbnQpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdERlbGV0ZUJ5SWQoZ2VuZXJhdG9yLmZp
bmFsRGVzdGluYXRpb24oZHN0LCBiYXNlKSwgYmFzZSwgbV9pZGVudCk7CiB9CkBAIC01NjgsNyAr
NTY4LDcgQEAgUmVnaXN0ZXJJRCogRGVsZXRlQnJhY2tldE5vZGU6OmVtaXRDb2RlKAogICAgIFJl
ZlB0cjxSZWdpc3RlcklEPiByMCA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2Jhc2UuZ2V0KCkpOwog
ICAgIFJlZ2lzdGVySUQqIHIxID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0LmdldCgp
KTsKIAotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obV9kaXZvdCwgbV9zdGFydE9m
ZnNldCwgbV9lbmRPZmZzZXQpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2
b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogICAgIHJldHVybiBnZW5lcmF0b3Iu
ZW1pdERlbGV0ZUJ5VmFsKGdlbmVyYXRvci5maW5hbERlc3RpbmF0aW9uKGRzdCksIHIwLmdldCgp
LCByMSk7CiB9CiAKQEAgLTU3OCw3ICs1NzgsNyBAQCBSZWdpc3RlcklEKiBEZWxldGVEb3ROb2Rl
OjplbWl0Q29kZShDb2RlCiB7CiAgICAgUmVnaXN0ZXJJRCogcjAgPSBnZW5lcmF0b3IuZW1pdE5v
ZGUobV9iYXNlLmdldCgpKTsKIAotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obV9k
aXZvdCwgbV9zdGFydE9mZnNldCwgbV9lbmRPZmZzZXQpOworICAgIGdlbmVyYXRvci5lbWl0RXhw
cmVzc2lvbkluZm8oZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogICAgIHJl
dHVybiBnZW5lcmF0b3IuZW1pdERlbGV0ZUJ5SWQoZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24o
ZHN0KSwgcjAsIG1faWRlbnQpOwogfQogCkBAIC02NTksNyArNjU5LDcgQEAgUmVnaXN0ZXJJRCog
UHJlZml4UmVzb2x2ZU5vZGU6OmVtaXRDb2RlKAogICAgICAgICByZXR1cm4gZ2VuZXJhdG9yLm1v
dmVUb0Rlc3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBwcm9wRHN0LmdldCgpKTsKICAgICB9CiAKLSAg
ICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKG1fZGl2b3QsIG1fc3RhcnRPZmZzZXQsIG1f
ZW5kT2Zmc2V0KTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIHN0
YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcERz
dCA9IGdlbmVyYXRvci50ZW1wRGVzdGluYXRpb24oZHN0KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0UmVzb2x2ZVdpdGhCYXNlKGdlbmVyYXRvci5uZXdUZW1w
b3JhcnkoKSwgcHJvcERzdC5nZXQoKSwgbV9pZGVudCk7CiAgICAgZW1pdFByZUluY09yRGVjKGdl
bmVyYXRvciwgcHJvcERzdC5nZXQoKSwgbV9vcGVyYXRvcik7CkBAIC02NzUsMTMgKzY3NSwxMyBA
QCBSZWdpc3RlcklEKiBQcmVmaXhCcmFja2V0Tm9kZTo6ZW1pdENvZGUoCiAgICAgUmVmUHRyPFJl
Z2lzdGVySUQ+IHByb3BlcnR5ID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fc3Vic2NyaXB0LmdldCgp
KTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcERzdCA9IGdlbmVyYXRvci50ZW1wRGVzdGlu
YXRpb24oZHN0KTsKIAotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obV9kaXZvdCAr
IG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0LCBtX3N1YmV4cHJlc3Npb25TdGFydE9mZnNldCwg
bV9lbmRPZmZzZXQgLSBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNldCk7CisgICAgZ2VuZXJhdG9y
LmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpICsgbV9zdWJleHByZXNzaW9uRGl2b3RPZmZzZXQs
IG1fc3ViZXhwcmVzc2lvblN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQoKSAtIG1fc3ViZXhwcmVzc2lv
bkRpdm90T2Zmc2V0KTsKICAgICBSZWdpc3RlcklEKiB2YWx1ZSA9IGdlbmVyYXRvci5lbWl0R2V0
QnlWYWwocHJvcERzdC5nZXQoKSwgYmFzZS5nZXQoKSwgcHJvcGVydHkuZ2V0KCkpOwogICAgIGlm
IChtX29wZXJhdG9yID09IE9wUGx1c1BsdXMpCiAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJlSW5j
KHZhbHVlKTsKICAgICBlbHNlCiAgICAgICAgIGdlbmVyYXRvci5lbWl0UHJlRGVjKHZhbHVlKTsK
LSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKG1fZGl2b3QsIG1fc3RhcnRPZmZzZXQs
IG1fZW5kT2Zmc2V0KTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCks
IHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKICAgICBnZW5lcmF0b3IuZW1pdFB1dEJ5VmFs
KGJhc2UuZ2V0KCksIHByb3BlcnR5LmdldCgpLCB2YWx1ZSk7CiAgICAgcmV0dXJuIGdlbmVyYXRv
ci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgcHJvcERzdC5nZXQoKSk7CiB9CkBAIC02
OTMsMTMgKzY5MywxMyBAQCBSZWdpc3RlcklEKiBQcmVmaXhEb3ROb2RlOjplbWl0Q29kZShDb2Rl
CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGJhc2UgPSBnZW5lcmF0b3IuZW1pdE5vZGUobV9iYXNl
LmdldCgpKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvcERzdCA9IGdlbmVyYXRvci50ZW1w
RGVzdGluYXRpb24oZHN0KTsKIAotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obV9k
aXZvdCArIG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0LCBtX3N1YmV4cHJlc3Npb25TdGFydE9m
ZnNldCwgbV9lbmRPZmZzZXQgLSBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNldCk7CisgICAgZ2Vu
ZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpICsgbV9zdWJleHByZXNzaW9uRGl2b3RP
ZmZzZXQsIG1fc3ViZXhwcmVzc2lvblN0YXJ0T2Zmc2V0LCBlbmRPZmZzZXQoKSAtIG1fc3ViZXhw
cmVzc2lvbkRpdm90T2Zmc2V0KTsKICAgICBSZWdpc3RlcklEKiB2YWx1ZSA9IGdlbmVyYXRvci5l
bWl0R2V0QnlJZChwcm9wRHN0LmdldCgpLCBiYXNlLmdldCgpLCBtX2lkZW50KTsKICAgICBpZiAo
bV9vcGVyYXRvciA9PSBPcFBsdXNQbHVzKQogICAgICAgICBnZW5lcmF0b3IuZW1pdFByZUluYyh2
YWx1ZSk7CiAgICAgZWxzZQogICAgICAgICBnZW5lcmF0b3IuZW1pdFByZURlYyh2YWx1ZSk7Ci0g
ICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhtX2Rpdm90LCBtX3N0YXJ0T2Zmc2V0LCBt
X2VuZE9mZnNldCk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBz
dGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGJh
c2UuZ2V0KCksIG1faWRlbnQsIHZhbHVlKTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLm1vdmVUb0Rl
c3RpbmF0aW9uSWZOZWVkZWQoZHN0LCBwcm9wRHN0LmdldCgpKTsKIH0KQEAgLTc2Niw3ICs3NjYs
NyBAQCBSZWdpc3RlcklEKiBUaHJvd2FibGVCaW5hcnlPcE5vZGU6OmVtaXRDCiB7CiAgICAgUmVm
UHRyPFJlZ2lzdGVySUQ+IHNyYzEgPSBnZW5lcmF0b3IuZW1pdE5vZGVGb3JMZWZ0SGFuZFNpZGUo
bV9leHByMS5nZXQoKSwgbV9yaWdodEhhc0Fzc2lnbm1lbnRzLCBtX2V4cHIyLT5pc1B1cmUoZ2Vu
ZXJhdG9yKSk7CiAgICAgUmVnaXN0ZXJJRCogc3JjMiA9IGdlbmVyYXRvci5lbWl0Tm9kZShtX2V4
cHIyLmdldCgpKTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKG1fZGl2b3QsIG1f
c3RhcnRPZmZzZXQsIG1fZW5kT2Zmc2V0KTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25J
bmZvKGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKICAgICByZXR1cm4gZ2Vu
ZXJhdG9yLmVtaXRCaW5hcnlPcChvcGNvZGUoKSwgZ2VuZXJhdG9yLmZpbmFsRGVzdGluYXRpb24o
ZHN0LCBzcmMxLmdldCgpKSwgc3JjMS5nZXQoKSwgc3JjMiwgT3BlcmFuZFR5cGVzKG1fZXhwcjEt
PnJlc3VsdERlc2NyaXB0b3IoKSwgbV9leHByMi0+cmVzdWx0RGVzY3JpcHRvcigpKSk7CiB9CiAK
QEAgLTc3NSwxMCArNzc1LDEwIEBAIFJlZ2lzdGVySUQqIEluc3RhbmNlT2ZOb2RlOjplbWl0Q29k
ZShDb2QKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3JjMSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZv
ckxlZnRIYW5kU2lkZShtX2V4cHIxLmdldCgpLCBtX3JpZ2h0SGFzQXNzaWdubWVudHMsIG1fZXhw
cjItPmlzUHVyZShnZW5lcmF0b3IpKTsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gc3JjMiA9IGdl
bmVyYXRvci5lbWl0Tm9kZShtX2V4cHIyLmdldCgpKTsKIAotICAgIGdlbmVyYXRvci5lbWl0RXhw
cmVzc2lvbkluZm8obV9kaXZvdCwgbV9zdGFydE9mZnNldCwgbV9lbmRPZmZzZXQpOworICAgIGdl
bmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zm
c2V0KCkpOwogICAgIFJlZ2lzdGVySUQqIHNyYzJQcm90b3R5cGUgPSBnZW5lcmF0b3IuZW1pdEdl
dEJ5SWQoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBzcmMyLmdldCgpLCBnZW5lcmF0b3IuZ2xv
YmFsRGF0YSgpLT5wcm9wZXJ0eU5hbWVzLT5wcm90b3R5cGUpOwogCi0gICAgZ2VuZXJhdG9yLmVt
aXRFeHByZXNzaW9uSW5mbyhtX2Rpdm90LCBtX3N0YXJ0T2Zmc2V0LCBtX2VuZE9mZnNldCk7Cisg
ICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBl
bmRPZmZzZXQoKSk7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5lbWl0SW5zdGFuY2VPZihnZW5lcmF0
b3IuZmluYWxEZXN0aW5hdGlvbihkc3QsIHNyYzEuZ2V0KCkpLCBzcmMxLmdldCgpLCBzcmMyLmdl
dCgpLCBzcmMyUHJvdG90eXBlKTsKIH0KIApAQCAtOTA0LDEwICs5MDQsMTAgQEAgUmVnaXN0ZXJJ
RCogUmVhZE1vZGlmeVJlc29sdmVOb2RlOjplbWl0QwogICAgIH0KIAogICAgIFJlZlB0cjxSZWdp
c3RlcklEPiBzcmMxID0gZ2VuZXJhdG9yLnRlbXBEZXN0aW5hdGlvbihkc3QpOwotICAgIGdlbmVy
YXRvci5lbWl0RXhwcmVzc2lvbkluZm8obV9kaXZvdCAtIG1fc3RhcnRPZmZzZXQgKyBtX2lkZW50
LnNpemUoKSwgbV9pZGVudC5zaXplKCksIDApOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lv
bkluZm8oZGl2b3QoKSAtIHN0YXJ0T2Zmc2V0KCkgKyBtX2lkZW50LnNpemUoKSwgbV9pZGVudC5z
aXplKCksIDApOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBiYXNlID0gZ2VuZXJhdG9yLmVtaXRS
ZXNvbHZlV2l0aEJhc2UoZ2VuZXJhdG9yLm5ld1RlbXBvcmFyeSgpLCBzcmMxLmdldCgpLCBtX2lk
ZW50KTsKICAgICBSZWdpc3RlcklEKiBzcmMyID0gZ2VuZXJhdG9yLmVtaXROb2RlKG1fcmlnaHQu
Z2V0KCkpOwotICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8obV9kaXZvdCwgbV9zdGFy
dE9mZnNldCwgbV9lbmRPZmZzZXQpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8o
ZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogICAgIFJlZ2lzdGVySUQqIHJl
c3VsdCA9IGVtaXRSZWFkTW9kaWZ5QXNzaWdubWVudChnZW5lcmF0b3IsIGdlbmVyYXRvci5maW5h
bERlc3RpbmF0aW9uKGRzdCwgc3JjMS5nZXQoKSksIHNyYzEuZ2V0KCksIHNyYzIsIG1fb3BlcmF0
b3IsIE9wZXJhbmRUeXBlcyhSZXN1bHRUeXBlOjp1bmtub3duKCksIG1fcmlnaHQtPnJlc3VsdERl
c2NyaXB0b3IoKSkpOwogICAgIHJldHVybiBnZW5lcmF0b3IuZW1pdFB1dEJ5SWQoYmFzZS5nZXQo
KSwgbV9pZGVudCwgcmVzdWx0KTsKIH0KQEAgLTkzOSw3ICs5MzksNyBAQCBSZWdpc3RlcklEKiBB
c3NpZ25SZXNvbHZlTm9kZTo6ZW1pdENvZGUoCiAgICAgaWYgKGRzdCA9PSBpZ25vcmVkUmVzdWx0
KCkpCiAgICAgICAgIGRzdCA9IDA7CiAgICAgUmVnaXN0ZXJJRCogdmFsdWUgPSBnZW5lcmF0b3Iu
ZW1pdE5vZGUoZHN0LCBtX3JpZ2h0LmdldCgpKTsKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Np
b25JbmZvKG1fZGl2b3QsIG1fc3RhcnRPZmZzZXQsIG1fZW5kT2Zmc2V0KTsKKyAgICBnZW5lcmF0
b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgp
KTsKICAgICByZXR1cm4gZ2VuZXJhdG9yLmVtaXRQdXRCeUlkKGJhc2UuZ2V0KCksIG1faWRlbnQs
IHZhbHVlKTsKIH0KIApAQCAtOTUwLDcgKzk1MCw3IEBAIFJlZ2lzdGVySUQqIEFzc2lnbkRvdE5v
ZGU6OmVtaXRDb2RlKENvZGUKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRv
ci5lbWl0Tm9kZUZvckxlZnRIYW5kU2lkZShtX2Jhc2UuZ2V0KCksIG1fcmlnaHRIYXNBc3NpZ25t
ZW50cywgbV9yaWdodC0+aXNQdXJlKGdlbmVyYXRvcikpOwogICAgIFJlZlB0cjxSZWdpc3RlcklE
PiB2YWx1ZSA9IGdlbmVyYXRvci5kZXN0aW5hdGlvbkZvckFzc2lnblJlc3VsdChkc3QpOwogICAg
IFJlZ2lzdGVySUQqIHJlc3VsdCA9IGdlbmVyYXRvci5lbWl0Tm9kZSh2YWx1ZS5nZXQoKSwgbV9y
aWdodC5nZXQoKSk7Ci0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyhtX2Rpdm90LCBt
X3N0YXJ0T2Zmc2V0LCBtX2VuZE9mZnNldCk7CisgICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9u
SW5mbyhkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CiAgICAgZ2VuZXJhdG9y
LmVtaXRQdXRCeUlkKGJhc2UuZ2V0KCksIG1faWRlbnQsIHJlc3VsdCk7CiAgICAgcmV0dXJuIGdl
bmVyYXRvci5tb3ZlVG9EZXN0aW5hdGlvbklmTmVlZGVkKGRzdCwgcmVzdWx0KTsKIH0KQEAgLTk2
MSwxMiArOTYxLDEyIEBAIFJlZ2lzdGVySUQqIFJlYWRNb2RpZnlEb3ROb2RlOjplbWl0Q29kZSgK
IHsKICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvckxl
ZnRIYW5kU2lkZShtX2Jhc2UuZ2V0KCksIG1fcmlnaHRIYXNBc3NpZ25tZW50cywgbV9yaWdodC0+
aXNQdXJlKGdlbmVyYXRvcikpOwogCi0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5mbyht
X2Rpdm90IC0gbV9zdWJleHByZXNzaW9uRGl2b3RPZmZzZXQsIG1fc3RhcnRPZmZzZXQgLSBtX3N1
YmV4cHJlc3Npb25EaXZvdE9mZnNldCwgbV9zdWJleHByZXNzaW9uRW5kT2Zmc2V0KTsKKyAgICBn
ZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKGRpdm90KCkgLSBtX3N1YmV4cHJlc3Npb25EaXZv
dE9mZnNldCwgc3RhcnRPZmZzZXQoKSAtIG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0LCBtX3N1
YmV4cHJlc3Npb25FbmRPZmZzZXQpOwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiB2YWx1ZSA9IGdl
bmVyYXRvci5lbWl0R2V0QnlJZChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRzdCksIGJhc2Uu
Z2V0KCksIG1faWRlbnQpOwogICAgIFJlZ2lzdGVySUQqIGNoYW5nZSA9IGdlbmVyYXRvci5lbWl0
Tm9kZShtX3JpZ2h0LmdldCgpKTsKICAgICBSZWdpc3RlcklEKiB1cGRhdGVkVmFsdWUgPSBlbWl0
UmVhZE1vZGlmeUFzc2lnbm1lbnQoZ2VuZXJhdG9yLCBnZW5lcmF0b3IuZmluYWxEZXN0aW5hdGlv
bihkc3QsIHZhbHVlLmdldCgpKSwgdmFsdWUuZ2V0KCksIGNoYW5nZSwgbV9vcGVyYXRvciwgT3Bl
cmFuZFR5cGVzKFJlc3VsdFR5cGU6OnVua25vd24oKSwgbV9yaWdodC0+cmVzdWx0RGVzY3JpcHRv
cigpKSk7CiAKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZvKG1fZGl2b3QsIG1fc3Rh
cnRPZmZzZXQsIG1fZW5kT2Zmc2V0KTsKKyAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Npb25JbmZv
KGRpdm90KCksIHN0YXJ0T2Zmc2V0KCksIGVuZE9mZnNldCgpKTsKICAgICByZXR1cm4gZ2VuZXJh
dG9yLmVtaXRQdXRCeUlkKGJhc2UuZ2V0KCksIG1faWRlbnQsIHVwZGF0ZWRWYWx1ZSk7CiB9CiAK
QEAgLTk4Niw3ICs5ODYsNyBAQCBSZWdpc3RlcklEKiBBc3NpZ25CcmFja2V0Tm9kZTo6ZW1pdENv
ZGUoCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZhbHVlID0gZ2VuZXJhdG9yLmRlc3RpbmF0aW9u
Rm9yQXNzaWduUmVzdWx0KGRzdCk7CiAgICAgUmVnaXN0ZXJJRCogcmVzdWx0ID0gZ2VuZXJhdG9y
LmVtaXROb2RlKHZhbHVlLmdldCgpLCBtX3JpZ2h0LmdldCgpKTsKIAotICAgIGdlbmVyYXRvci5l
bWl0RXhwcmVzc2lvbkluZm8obV9kaXZvdCwgbV9zdGFydE9mZnNldCwgbV9lbmRPZmZzZXQpOwor
ICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgc3RhcnRPZmZzZXQoKSwg
ZW5kT2Zmc2V0KCkpOwogICAgIGdlbmVyYXRvci5lbWl0UHV0QnlWYWwoYmFzZS5nZXQoKSwgcHJv
cGVydHkuZ2V0KCksIHJlc3VsdCk7CiAgICAgcmV0dXJuIGdlbmVyYXRvci5tb3ZlVG9EZXN0aW5h
dGlvbklmTmVlZGVkKGRzdCwgcmVzdWx0KTsKIH0KQEAgLTk5NiwxMiArOTk2LDEyIEBAIFJlZ2lz
dGVySUQqIFJlYWRNb2RpZnlCcmFja2V0Tm9kZTo6ZW1pdEMKICAgICBSZWZQdHI8UmVnaXN0ZXJJ
RD4gYmFzZSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZvckxlZnRIYW5kU2lkZShtX2Jhc2UuZ2V0KCks
IG1fc3Vic2NyaXB0SGFzQXNzaWdubWVudHMgfHwgbV9yaWdodEhhc0Fzc2lnbm1lbnRzLCBtX3N1
YnNjcmlwdC0+aXNQdXJlKGdlbmVyYXRvcikgJiYgbV9yaWdodC0+aXNQdXJlKGdlbmVyYXRvcikp
OwogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBwcm9wZXJ0eSA9IGdlbmVyYXRvci5lbWl0Tm9kZUZv
ckxlZnRIYW5kU2lkZShtX3N1YnNjcmlwdC5nZXQoKSwgbV9yaWdodEhhc0Fzc2lnbm1lbnRzLCBt
X3JpZ2h0LT5pc1B1cmUoZ2VuZXJhdG9yKSk7CiAKLSAgICBnZW5lcmF0b3IuZW1pdEV4cHJlc3Np
b25JbmZvKG1fZGl2b3QgLSBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNldCwgbV9zdGFydE9mZnNl
dCAtIG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0LCBtX3N1YmV4cHJlc3Npb25FbmRPZmZzZXQp
OworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSAtIG1fc3ViZXhwcmVz
c2lvbkRpdm90T2Zmc2V0LCBzdGFydE9mZnNldCgpIC0gbV9zdWJleHByZXNzaW9uRGl2b3RPZmZz
ZXQsIG1fc3ViZXhwcmVzc2lvbkVuZE9mZnNldCk7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IHZh
bHVlID0gZ2VuZXJhdG9yLmVtaXRHZXRCeVZhbChnZW5lcmF0b3IudGVtcERlc3RpbmF0aW9uKGRz
dCksIGJhc2UuZ2V0KCksIHByb3BlcnR5LmdldCgpKTsKICAgICBSZWdpc3RlcklEKiBjaGFuZ2Ug
PSBnZW5lcmF0b3IuZW1pdE5vZGUobV9yaWdodC5nZXQoKSk7CiAgICAgUmVnaXN0ZXJJRCogdXBk
YXRlZFZhbHVlID0gZW1pdFJlYWRNb2RpZnlBc3NpZ25tZW50KGdlbmVyYXRvciwgZ2VuZXJhdG9y
LmZpbmFsRGVzdGluYXRpb24oZHN0LCB2YWx1ZS5nZXQoKSksIHZhbHVlLmdldCgpLCBjaGFuZ2Us
IG1fb3BlcmF0b3IsIE9wZXJhbmRUeXBlcyhSZXN1bHRUeXBlOjp1bmtub3duKCksIG1fcmlnaHQt
PnJlc3VsdERlc2NyaXB0b3IoKSkpOwogCi0gICAgZ2VuZXJhdG9yLmVtaXRFeHByZXNzaW9uSW5m
byhtX2Rpdm90LCBtX3N0YXJ0T2Zmc2V0LCBtX2VuZE9mZnNldCk7CisgICAgZ2VuZXJhdG9yLmVt
aXRFeHByZXNzaW9uSW5mbyhkaXZvdCgpLCBzdGFydE9mZnNldCgpLCBlbmRPZmZzZXQoKSk7CiAg
ICAgZ2VuZXJhdG9yLmVtaXRQdXRCeVZhbChiYXNlLmdldCgpLCBwcm9wZXJ0eS5nZXQoKSwgdXBk
YXRlZFZhbHVlKTsKIAogICAgIHJldHVybiB1cGRhdGVkVmFsdWU7CkBAIC0xMDU4LDEwICsxMDU4
LDEwIEBAIFJlZ2lzdGVySUQqIENvbnN0U3RhdGVtZW50Tm9kZTo6ZW1pdENvZGUKIAogLy8gLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEhlbHBlciBmdW5jdGlvbnMgZm9yIGhhbmRsaW5n
IFZlY3RvcnMgb2YgU3RhdGVtZW50Tm9kZSAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t
CiAKLXN0YXRpYyBpbmxpbmUgUmVnaXN0ZXJJRCogc3RhdGVtZW50TGlzdEVtaXRDb2RlKFN0YXRl
bWVudFZlY3RvciYgc3RhdGVtZW50cywgQ29kZUdlbmVyYXRvciYgZ2VuZXJhdG9yLCBSZWdpc3Rl
cklEKiBkc3QpCitzdGF0aWMgaW5saW5lIFJlZ2lzdGVySUQqIHN0YXRlbWVudExpc3RFbWl0Q29k
ZShjb25zdCBTdGF0ZW1lbnRWZWN0b3ImIHN0YXRlbWVudHMsIENvZGVHZW5lcmF0b3ImIGdlbmVy
YXRvciwgUmVnaXN0ZXJJRCogZHN0KQogewotICAgIFN0YXRlbWVudFZlY3Rvcjo6aXRlcmF0b3Ig
ZW5kID0gc3RhdGVtZW50cy5lbmQoKTsKLSAgICBmb3IgKFN0YXRlbWVudFZlY3Rvcjo6aXRlcmF0
b3IgaXQgPSBzdGF0ZW1lbnRzLmJlZ2luKCk7IGl0ICE9IGVuZDsgKytpdCkgeworICAgIFN0YXRl
bWVudFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgZW5kID0gc3RhdGVtZW50cy5lbmQoKTsKKyAgICBm
b3IgKFN0YXRlbWVudFZlY3Rvcjo6Y29uc3RfaXRlcmF0b3IgaXQgPSBzdGF0ZW1lbnRzLmJlZ2lu
KCk7IGl0ICE9IGVuZDsgKytpdCkgewogICAgICAgICBTdGF0ZW1lbnROb2RlKiBuID0gaXQtPmdl
dCgpOwogICAgICAgICBpZiAoIW4tPmlzTG9vcCgpKQogICAgICAgICAgICAgZ2VuZXJhdG9yLmVt
aXREZWJ1Z0hvb2soV2lsbEV4ZWN1dGVTdGF0ZW1lbnQsIG4tPmZpcnN0TGluZSgpLCBuLT5sYXN0
TGluZSgpKTsKQEAgLTEwNzAsMTYgKzEwNzAsNiBAQCBzdGF0aWMgaW5saW5lIFJlZ2lzdGVySUQq
IHN0YXRlbWVudExpc3RFCiAgICAgcmV0dXJuIDA7CiB9CiAKLXN0YXRpYyBpbmxpbmUgdm9pZCBz
dGF0ZW1lbnRMaXN0UHVzaEZJRk8oU3RhdGVtZW50VmVjdG9yJiBzdGF0ZW1lbnRzLCBEZWNsYXJh
dGlvblN0YWNrczo6Tm9kZVN0YWNrJiBzdGFjaykKLXsKLSAgICBTdGF0ZW1lbnRWZWN0b3I6Oml0
ZXJhdG9yIGl0ID0gc3RhdGVtZW50cy5lbmQoKTsKLSAgICBTdGF0ZW1lbnRWZWN0b3I6Oml0ZXJh
dG9yIGJlZ2luID0gc3RhdGVtZW50cy5iZWdpbigpOwotICAgIHdoaWxlIChpdCAhPSBiZWdpbikg
ewotICAgICAgICAtLWl0OwotICAgICAgICBzdGFjay5hcHBlbmQoKCppdCkuZ2V0KCkpOwotICAg
IH0KLX0KLQogLy8gLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tIEJsb2NrTm9kZSAtLS0t
LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KIAogQmxvY2tOb2RlOjpCbG9ja05vZGUo
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBTb3VyY2VFbGVtZW50cyogY2hpbGRyZW4pCkBAIC0x
MzE5LDcgKzEzMDksNyBAQCBSZWdpc3RlcklEKiBGb3JJbk5vZGU6OmVtaXRDb2RlKENvZGVHZW5l
CiAgICAgICAgICAgICBSZWZQdHI8UmVnaXN0ZXJJRD4gcHJvdGVjdCA9IHByb3BlcnR5TmFtZTsK
ICAgICAgICAgICAgIFJlZ2lzdGVySUQqIGJhc2UgPSBnZW5lcmF0b3IuZW1pdFJlc29sdmVCYXNl
KGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKSwgaWRlbnQpOwogCi0gICAgICAgICAgICBnZW5lcmF0
b3IuZW1pdEV4cHJlc3Npb25JbmZvKG1fZGl2b3QsIG1fc3RhcnRPZmZzZXQsIG1fZW5kT2Zmc2V0
KTsKKyAgICAgICAgICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgc3Rh
cnRPZmZzZXQoKSwgZW5kT2Zmc2V0KCkpOwogICAgICAgICAgICAgZ2VuZXJhdG9yLmVtaXRQdXRC
eUlkKGJhc2UsIGlkZW50LCBwcm9wZXJ0eU5hbWUpOwogICAgICAgICB9CiAgICAgfSBlbHNlIGlm
IChtX2xleHByLT5pc0RvdEFjY2Vzc29yTm9kZSgpKSB7CkBAIC0xNTkyLDcgKzE1ODIsNyBAQCBS
ZWdpc3RlcklEKiBUaHJvd05vZGU6OmVtaXRDb2RlKENvZGVHZW5lCiAgICAgaWYgKGRzdCA9PSBp
Z25vcmVkUmVzdWx0KCkpCiAgICAgICAgIGRzdCA9IDA7CiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+
IGV4cHIgPSBnZW5lcmF0b3IuZW1pdE5vZGUoZHN0LCBtX2V4cHIuZ2V0KCkpOwotICAgIGdlbmVy
YXRvci5lbWl0RXhwcmVzc2lvbkluZm8obV9kaXZvdCwgbV9zdGFydE9mZnNldCwgbV9lbmRPZmZz
ZXQpOworICAgIGdlbmVyYXRvci5lbWl0RXhwcmVzc2lvbkluZm8oZGl2b3QoKSwgc3RhcnRPZmZz
ZXQoKSwgZW5kT2Zmc2V0KCkpOwogICAgIGdlbmVyYXRvci5lbWl0VGhyb3coZXhwci5nZXQoKSk7
CiAgICAgcmV0dXJuIGRzdDsKIH0KQEAgLTE3MDAsNyArMTY5MCw3IEBAIFJlZ2lzdGVySUQqIEV2
YWxOb2RlOjplbWl0Q29kZShDb2RlR2VuZXIKIAogICAgIFJlZlB0cjxSZWdpc3RlcklEPiBkc3RS
ZWdpc3RlciA9IGdlbmVyYXRvci5uZXdUZW1wb3JhcnkoKTsKICAgICBnZW5lcmF0b3IuZW1pdExv
YWQoZHN0UmVnaXN0ZXIuZ2V0KCksIGpzVW5kZWZpbmVkKCkpOwotICAgIHN0YXRlbWVudExpc3RF
bWl0Q29kZShtX2NoaWxkcmVuLCBnZW5lcmF0b3IsIGRzdFJlZ2lzdGVyLmdldCgpKTsKKyAgICBz
dGF0ZW1lbnRMaXN0RW1pdENvZGUoY2hpbGRyZW4oKSwgZ2VuZXJhdG9yLCBkc3RSZWdpc3Rlci5n
ZXQoKSk7CiAKICAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhEaWRFeGVjdXRlUHJvZ3JhbSwg
Zmlyc3RMaW5lKCksIGxhc3RMaW5lKCkpOwogICAgIGdlbmVyYXRvci5lbWl0RW5kKGRzdFJlZ2lz
dGVyLmdldCgpKTsKQEAgLTE3ODgsOCArMTc3OCw4IEBAIHZvaWQgRnVuY3Rpb25Cb2R5Tm9kZTo6
Z2VuZXJhdGVDb2RlKFNjb3AKIFJlZ2lzdGVySUQqIEZ1bmN0aW9uQm9keU5vZGU6OmVtaXRDb2Rl
KENvZGVHZW5lcmF0b3ImIGdlbmVyYXRvciwgUmVnaXN0ZXJJRCopCiB7CiAgICAgZ2VuZXJhdG9y
LmVtaXREZWJ1Z0hvb2soRGlkRW50ZXJDYWxsRnJhbWUsIGZpcnN0TGluZSgpLCBsYXN0TGluZSgp
KTsKLSAgICBzdGF0ZW1lbnRMaXN0RW1pdENvZGUobV9jaGlsZHJlbiwgZ2VuZXJhdG9yLCBpZ25v
cmVkUmVzdWx0KCkpOwotICAgIGlmICghbV9jaGlsZHJlbi5zaXplKCkgfHwgIW1fY2hpbGRyZW4u
bGFzdCgpLT5pc1JldHVybk5vZGUoKSkgeworICAgIHN0YXRlbWVudExpc3RFbWl0Q29kZShjaGls
ZHJlbigpLCBnZW5lcmF0b3IsIGlnbm9yZWRSZXN1bHQoKSk7CisgICAgaWYgKCFjaGlsZHJlbigp
LnNpemUoKSB8fCAhY2hpbGRyZW4oKS5sYXN0KCktPmlzUmV0dXJuTm9kZSgpKSB7CiAgICAgICAg
IFJlZ2lzdGVySUQqIHIwID0gZ2VuZXJhdG9yLmVtaXRMb2FkKDAsIGpzVW5kZWZpbmVkKCkpOwog
ICAgICAgICBnZW5lcmF0b3IuZW1pdERlYnVnSG9vayhXaWxsTGVhdmVDYWxsRnJhbWUsIGZpcnN0
TGluZSgpLCBsYXN0TGluZSgpKTsKICAgICAgICAgZ2VuZXJhdG9yLmVtaXRSZXR1cm4ocjApOwpA
QCAtMTgwMyw3ICsxNzkzLDcgQEAgUmVnaXN0ZXJJRCogUHJvZ3JhbU5vZGU6OmVtaXRDb2RlKENv
ZGVHZQogCiAgICAgUmVmUHRyPFJlZ2lzdGVySUQ+IGRzdFJlZ2lzdGVyID0gZ2VuZXJhdG9yLm5l
d1RlbXBvcmFyeSgpOwogICAgIGdlbmVyYXRvci5lbWl0TG9hZChkc3RSZWdpc3Rlci5nZXQoKSwg
anNVbmRlZmluZWQoKSk7Ci0gICAgc3RhdGVtZW50TGlzdEVtaXRDb2RlKG1fY2hpbGRyZW4sIGdl
bmVyYXRvciwgZHN0UmVnaXN0ZXIuZ2V0KCkpOworICAgIHN0YXRlbWVudExpc3RFbWl0Q29kZShj
aGlsZHJlbigpLCBnZW5lcmF0b3IsIGRzdFJlZ2lzdGVyLmdldCgpKTsKIAogICAgIGdlbmVyYXRv
ci5lbWl0RGVidWdIb29rKERpZEV4ZWN1dGVQcm9ncmFtLCBmaXJzdExpbmUoKSwgbGFzdExpbmUo
KSk7CiAgICAgZ2VuZXJhdG9yLmVtaXRFbmQoZHN0UmVnaXN0ZXIuZ2V0KCkpOwpJbmRleDogSmF2
YVNjcmlwdENvcmUvcGFyc2VyL05vZGVzLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSmF2YVNjcmlwdENvcmUv
cGFyc2VyL05vZGVzLmgJKHJldmlzaW9uIDM4MjQxKQorKysgSmF2YVNjcmlwdENvcmUvcGFyc2Vy
L05vZGVzLmgJKHdvcmtpbmcgY29weSkKQEAgLTI3LDE4ICsyNywxMyBAQAogI2RlZmluZSBOT0RF
U19IXwogCiAjaW5jbHVkZSAiRXJyb3IuaCIKLSNpbmNsdWRlICJKU1N0cmluZy5oIgotI2luY2x1
ZGUgIkpTVHlwZS5oIgogI2luY2x1ZGUgIk9wY29kZS5oIgotI2luY2x1ZGUgIlJlZ2lzdGVySUQu
aCIKICNpbmNsdWRlICJSZXN1bHRUeXBlLmgiCiAjaW5jbHVkZSAiU291cmNlQ29kZS5oIgogI2lu
Y2x1ZGUgIlN5bWJvbFRhYmxlLmgiCi0jaW5jbHVkZSAiUmVnRXhwLmgiCiAjaW5jbHVkZSA8d3Rm
L0xpc3RSZWZQdHIuaD4KICNpbmNsdWRlIDx3dGYvTWF0aEV4dHJhcy5oPgogI2luY2x1ZGUgPHd0
Zi9Pd25QdHIuaD4KLSNpbmNsdWRlIDx3dGYvVW51c2VkUGFyYW0uaD4KICNpbmNsdWRlIDx3dGYv
VmVjdG9yLmg+CiAKICNpZiBQTEFURk9STShYODYpICYmIENPTVBJTEVSKEdDQykKQEAgLTUyLDE0
ICs0NywxNCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICBjbGFzcyBDb2RlQmxvY2s7CiAgICAgY2xh
c3MgQ29kZUdlbmVyYXRvcjsKICAgICBjbGFzcyBGdW5jRGVjbE5vZGU7Ci0gICAgY2xhc3MgTm9k
ZTsKICAgICBjbGFzcyBFdmFsQ29kZUJsb2NrOwogICAgIGNsYXNzIEpTRnVuY3Rpb247CiAgICAg
Y2xhc3MgUHJvZ3JhbUNvZGVCbG9jazsKICAgICBjbGFzcyBQcm9wZXJ0eUxpc3ROb2RlOwotICAg
IGNsYXNzIFNvdXJjZVN0cmVhbTsKKyAgICBjbGFzcyBSZWdpc3RlcklEOworICAgIGNsYXNzIFNj
b3BlQ2hhaW5Ob2RlOwogCi0gICAgdHlwZWRlZiB1bnNpZ25lZCBpbnQgQ29kZUZlYXR1cmVzOwor
ICAgIHR5cGVkZWYgdW5zaWduZWQgQ29kZUZlYXR1cmVzOwogCiAgICAgY29uc3QgQ29kZUZlYXR1
cmVzIE5vRmVhdHVyZXMgPSAwOwogICAgIGNvbnN0IENvZGVGZWF0dXJlcyBFdmFsRmVhdHVyZSA9
IDEgPDwgMDsKQEAgLTkzLDMwICs4OCw3IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBPcExv
Z2ljYWxPcgogICAgIH07CiAKLSAgICBlbnVtIFByZWNlZGVuY2UgewotICAgICAgICBQcmVjUHJp
bWFyeSwKLSAgICAgICAgUHJlY01lbWJlciwKLSAgICAgICAgUHJlY0NhbGwsCi0gICAgICAgIFBy
ZWNMZWZ0SGFuZFNpZGUsCi0gICAgICAgIFByZWNQb3N0Zml4LAotICAgICAgICBQcmVjVW5hcnks
Ci0gICAgICAgIFByZWNNdWx0aXBsaWNhdGl2ZSwKLSAgICAgICAgUHJlY0FkZGl0aXZlLAotICAg
ICAgICBQcmVjU2hpZnQsCi0gICAgICAgIFByZWNSZWxhdGlvbmFsLAotICAgICAgICBQcmVjRXF1
YWxpdHksCi0gICAgICAgIFByZWNCaXR3aXNlQW5kLAotICAgICAgICBQcmVjQml0d2lzZVhvciwK
LSAgICAgICAgUHJlY0JpdHdpc2VPciwKLSAgICAgICAgUHJlY0xvZ2ljYWxBbmQsCi0gICAgICAg
IFByZWNMb2dpY2FsT3IsCi0gICAgICAgIFByZWNDb25kaXRpb25hbCwKLSAgICAgICAgUHJlY0Fz
c2lnbm1lbnQsCi0gICAgICAgIFByZWNFeHByZXNzaW9uCi0gICAgfTsKLQogICAgIG5hbWVzcGFj
ZSBEZWNsYXJhdGlvblN0YWNrcyB7Ci0gICAgICAgIHR5cGVkZWYgVmVjdG9yPE5vZGUqLCAxNj4g
Tm9kZVN0YWNrOwogICAgICAgICBlbnVtIFZhckF0dHJzIHsgSXNDb25zdGFudCA9IDEsIEhhc0lu
aXRpYWxpemVyID0gMiB9OwogICAgICAgICB0eXBlZGVmIFZlY3RvcjxzdGQ6OnBhaXI8SWRlbnRp
ZmllciwgdW5zaWduZWQ+LCAxNj4gVmFyU3RhY2s7CiAgICAgICAgIHR5cGVkZWYgVmVjdG9yPFJl
ZlB0cjxGdW5jRGVjbE5vZGU+LCAxNj4gRnVuY3Rpb25TdGFjazsKQEAgLTEzMiwyNCArMTA0LDIx
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgIHByb3RlY3RlZDoKICAgICAgICAgUGFyc2VyUmVmQ291
bnRlZChKU0dsb2JhbERhdGEqKSBKU0NfRkFTVF9DQUxMOwogCi0gICAgICAgIEpTR2xvYmFsRGF0
YSogbV9nbG9iYWxEYXRhOwotCiAgICAgcHVibGljOgorICAgICAgICB2aXJ0dWFsIH5QYXJzZXJS
ZWZDb3VudGVkKCk7CisKICAgICAgICAgdm9pZCByZWYoKSBKU0NfRkFTVF9DQUxMOwogICAgICAg
ICB2b2lkIGRlcmVmKCkgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgYm9vbCBoYXNPbmVSZWYoKSBK
U0NfRkFTVF9DQUxMOwogCiAgICAgICAgIHN0YXRpYyB2b2lkIGRlbGV0ZU5ld09iamVjdHMoSlNH
bG9iYWxEYXRhKikgSlNDX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0dWFsIH5QYXJzZXJSZWZD
b3VudGVkKCk7CisgICAgcHJpdmF0ZToKKyAgICAgICAgSlNHbG9iYWxEYXRhKiBtX2dsb2JhbERh
dGE7CiAgICAgfTsKIAogICAgIGNsYXNzIE5vZGUgOiBwdWJsaWMgUGFyc2VyUmVmQ291bnRlZCB7
CiAgICAgcHVibGljOgotICAgICAgICB0eXBlZGVmIERlY2xhcmF0aW9uU3RhY2tzOjpOb2RlU3Rh
Y2sgTm9kZVN0YWNrOwotICAgICAgICB0eXBlZGVmIERlY2xhcmF0aW9uU3RhY2tzOjpWYXJTdGFj
ayBWYXJTdGFjazsKLSAgICAgICAgdHlwZWRlZiBEZWNsYXJhdGlvblN0YWNrczo6RnVuY3Rpb25T
dGFjayBGdW5jdGlvblN0YWNrOwotCiAgICAgICAgIE5vZGUoSlNHbG9iYWxEYXRhKikgSlNDX0ZB
U1RfQ0FMTDsKIAogICAgICAgICAvKgpAQCAtMTc0LDIzICsxNDMsMTAgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICBiZWNhdXNlIHRoZSBhc3NpZ25tZW50IG5vZGUsICJ4ID0iLCBwYXNz
ZXMgclt4XSBhcyBkc3QgdG8gdGhlIG51bWJlcgogICAgICAgICAgICAgbm9kZSwgIjEiLgogICAg
ICAgICAqLwotICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0
b3ImLCBSZWdpc3RlcklEKiBkc3QgPSAwKSBKU0NfRkFTVF9DQUxMIAotICAgICAgICB7Ci0gICAg
ICAgICAgICBBU1NFUlRfV0lUSF9NRVNTQUdFKDAsICJEb24ndCBrbm93IGhvdyB0byBnZW5lcmF0
ZSBjb2RlIGZvcjpcbiVzXG4iLCB0b1N0cmluZygpLmFzY2lpKCkpOwotICAgICAgICAgICAgVU5V
U0VEX1BBUkFNKGRzdCk7IAotICAgICAgICAgICAgcmV0dXJuIDA7IAotICAgICAgICB9IC8vIEZJ
WE1FOiBNYWtlIHRoaXMgcHVyZSB2aXJ0dWFsLgorICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQq
IGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiBkc3QgPSAwKSBKU0NfRkFTVF9D
QUxMID0gMDsKIAotICAgICAgICBVU3RyaW5nIHRvU3RyaW5nKCkgY29uc3QgSlNDX0ZBU1RfQ0FM
TDsKICAgICAgICAgaW50IGxpbmVObygpIGNvbnN0IHsgcmV0dXJuIG1fbGluZTsgfQogCi0gICAg
ICAgIHZpcnR1YWwgYm9vbCBpc1JldHVybk5vZGUoKSBjb25zdCBKU0NfRkFTVF9DQUxMIHsgcmV0
dXJuIGZhbHNlOyB9Ci0KLSAgICAgICAgLy8gU2VyaWFsaXphdGlvbi4KLSAgICAgICAgdmlydHVh
bCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEwgPSAwOwot
ICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0ID0gMDsKLSAgICAg
ICAgdmlydHVhbCBib29sIG5lZWRzUGFyZW5zSWZMZWZ0bW9zdCgpIGNvbnN0IHsgcmV0dXJuIGZh
bHNlOyB9Ci0gICAgICAgIAogICAgIHByb3RlY3RlZDoKICAgICAgICAgaW50IG1fbGluZTsKICAg
ICB9OwpAQCAtMjMwLDggKzE4Niw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICBpbnQgZmly
c3RMaW5lKCkgY29uc3QgSlNDX0ZBU1RfQ0FMTCB7IHJldHVybiBsaW5lTm8oKTsgfQogICAgICAg
ICBpbnQgbGFzdExpbmUoKSBjb25zdCBKU0NfRkFTVF9DQUxMIHsgcmV0dXJuIG1fbGFzdExpbmU7
IH0KIAotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgQVNT
RVJUX05PVF9SRUFDSEVEKCk7IHJldHVybiBQcmVjRXhwcmVzc2lvbjsgfQogICAgICAgICB2aXJ0
dWFsIGJvb2wgaXNFbXB0eVN0YXRlbWVudCgpIGNvbnN0IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4g
ZmFsc2U7IH0KKyAgICAgICAgdmlydHVhbCBib29sIGlzUmV0dXJuTm9kZSgpIGNvbnN0IEpTQ19G
QVNUX0NBTEwgeyByZXR1cm4gZmFsc2U7IH0KIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNCbG9j
aygpIGNvbnN0IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gZmFsc2U7IH0KICAgICAgICAgdmlydHVh
bCBib29sIGlzTG9vcCgpIGNvbnN0IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gZmFsc2U7IH0KQEAg
LTI1MCw5ICsyMDYsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBib29sIGlz
TnVsbCgpIGNvbnN0IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gdHJ1ZTsgfQogCiAgICAgICAgIHZp
cnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0g
MCkgSlNDX0ZBU1RfQ0FMTDsKLQotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNl
U3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNl
IHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjUHJpbWFyeTsgfQogICAgIH07CiAKICAg
ICBjbGFzcyBCb29sZWFuTm9kZSA6IHB1YmxpYyBFeHByZXNzaW9uTm9kZSB7CkBAIC0yNjYsMTAg
KzIxOSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVt
aXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7CiAK
ICAgICAgICAgdmlydHVhbCBib29sIGlzUHVyZShDb2RlR2VuZXJhdG9yJikgY29uc3QgSlNDX0ZB
U1RfQ0FMTCB7IHJldHVybiB0cnVlOyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhT
b3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIFByZWNl
ZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNQcmltYXJ5OyB9CiAKLSAgICBw
cm90ZWN0ZWQ6CisgICAgcHJpdmF0ZToKICAgICAgICAgYm9vbCBtX3ZhbHVlOwogICAgIH07CiAK
QEAgLTI4MywzMSArMjM0LDEzIEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZpcnR1YWwg
UmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlND
X0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFt
JikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNl
ZGVuY2UoKSBjb25zdCB7IHJldHVybiBzaWduYml0KG1fZG91YmxlKSA/IFByZWNVbmFyeSA6IFBy
ZWNQcmltYXJ5OyB9Ci0KICAgICAgICAgdmlydHVhbCBib29sIGlzTnVtYmVyKCkgY29uc3QgSlND
X0ZBU1RfQ0FMTCB7IHJldHVybiB0cnVlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1B1cmUo
Q29kZUdlbmVyYXRvciYpIGNvbnN0IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gdHJ1ZTsgfQogICAg
ICAgICBkb3VibGUgdmFsdWUoKSBjb25zdCBKU0NfRkFTVF9DQUxMIHsgcmV0dXJuIG1fZG91Ymxl
OyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1ZShkb3VibGUgZCkgSlNDX0ZBU1RfQ0FM
TCB7IG1fZG91YmxlID0gZDsgfQotCi0gICAgcHJvdGVjdGVkOgotICAgICAgICBkb3VibGUgbV9k
b3VibGU7Ci0gICAgfTsKLQotICAgIGNsYXNzIEltbWVkaWF0ZU51bWJlck5vZGUgOiBwdWJsaWMg
TnVtYmVyTm9kZSB7Ci0gICAgcHVibGljOgotICAgICAgICBJbW1lZGlhdGVOdW1iZXJOb2RlKEpT
R2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgSlNWYWx1ZSogdiwgZG91YmxlIGQpIEpTQ19GQVNUX0NB
TEwKLSAgICAgICAgICAgIDogTnVtYmVyTm9kZShnbG9iYWxEYXRhLCBkKQotICAgICAgICAgICAg
LCBtX3ZhbHVlKHYpCi0gICAgICAgIHsKLSAgICAgICAgICAgIEFTU0VSVCh2ID09IEpTSW1tZWRp
YXRlOjpmcm9tKGQpKTsKLSAgICAgICAgfQotCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzZXRWYWx1
ZShkb3VibGUgZCkgSlNDX0ZBU1RfQ0FMTCB7IG1fZG91YmxlID0gZDsgbV92YWx1ZSA9IEpTSW1t
ZWRpYXRlOjpmcm9tKGQpOyBBU1NFUlQobV92YWx1ZSk7IH0KKyAgICAgICAgdm9pZCBzZXRWYWx1
ZShkb3VibGUgZCkgSlNDX0ZBU1RfQ0FMTCB7IG1fZG91YmxlID0gZDsgfQogCiAgICAgcHJpdmF0
ZToKLSAgICAgICAgSlNWYWx1ZSogbV92YWx1ZTsgLy8gVGhpcyBpcyBuZXZlciBhIEpTQ2VsbCwg
b25seSBKU0ltbWVkaWF0ZSwgdGh1cyBubyBQcm90ZWN0ZWRQdHIKKyAgICAgICAgZG91YmxlIG1f
ZG91YmxlOwogICAgIH07CiAKICAgICBjbGFzcyBTdHJpbmdOb2RlIDogcHVibGljIEV4cHJlc3Np
b25Ob2RlIHsKQEAgLTMyMyw4ICsyNTYsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmly
dHVhbCBib29sIGlzU3RyaW5nKCkgY29uc3QgSlNDX0ZBU1RfQ0FMTCB7IHJldHVybiB0cnVlOyB9
CiAgICAgICAgIGNvbnN0IElkZW50aWZpZXImIHZhbHVlKCkgeyByZXR1cm4gbV92YWx1ZTsgfQog
ICAgICAgICB2aXJ0dWFsIGJvb2wgaXNQdXJlKENvZGVHZW5lcmF0b3ImKSBjb25zdCBKU0NfRkFT
VF9DQUxMIHsgcmV0dXJuIHRydWU7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNv
dXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgUHJlY2Vk
ZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1ByaW1hcnk7IH0KIAogICAgIHBy
aXZhdGU6CiAgICAgICAgIElkZW50aWZpZXIgbV92YWx1ZTsKQEAgLTM2MCw2ICsyOTEsOCBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFJlZ2lzdGVySUQqIGVtaXRU
aHJvd0Vycm9yKENvZGVHZW5lcmF0b3ImLCBFcnJvclR5cGUsIGNvbnN0IGNoYXIqIG1zZyk7CiAg
ICAgICAgIFJlZ2lzdGVySUQqIGVtaXRUaHJvd0Vycm9yKENvZGVHZW5lcmF0b3ImLCBFcnJvclR5
cGUsIGNvbnN0IGNoYXIqIG1zZywgY29uc3QgSWRlbnRpZmllciYpOworCisgICAgcHJpdmF0ZToK
ICAgICAgICAgdWludDMyX3QgbV9kaXZvdDsKICAgICAgICAgdWludDE2X3QgbV9zdGFydE9mZnNl
dDsKICAgICAgICAgdWludDE2X3QgbV9lbmRPZmZzZXQ7CkBAIC0zODEsMTEgKzMxNCwxMiBAQCBu
YW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgdm9pZCBzZXRT
dWJleHByZXNzaW9uSW5mbyh1aW50MzJfdCBzdWJleHByZXNzaW9uRGl2b3QsIHVpbnQxNl90IHN1
YmV4cHJlc3Npb25PZmZzZXQpIHsKLSAgICAgICAgICAgIEFTU0VSVChzdWJleHByZXNzaW9uRGl2
b3QgPD0gbV9kaXZvdCk7Ci0gICAgICAgICAgICBpZiAoKG1fZGl2b3QgLSBzdWJleHByZXNzaW9u
RGl2b3QpICYgfjB4RkZGRikgLy8gT3ZlcmZsb3cgbWVhbnMgd2UgY2FuJ3QgZG8gdGhpcyBzYWZl
bHksIHNvIGp1c3QgcG9pbnQgYXQgdGhlIHByaW1hcnkgZGl2b3QKKyAgICAgICAgdm9pZCBzZXRT
dWJleHByZXNzaW9uSW5mbyh1aW50MzJfdCBzdWJleHByZXNzaW9uRGl2b3QsIHVpbnQxNl90IHN1
YmV4cHJlc3Npb25PZmZzZXQpCisgICAgICAgIHsKKyAgICAgICAgICAgIEFTU0VSVChzdWJleHBy
ZXNzaW9uRGl2b3QgPD0gZGl2b3QoKSk7CisgICAgICAgICAgICBpZiAoKGRpdm90KCkgLSBzdWJl
eHByZXNzaW9uRGl2b3QpICYgfjB4RkZGRikgLy8gT3ZlcmZsb3cgbWVhbnMgd2UgY2FuJ3QgZG8g
dGhpcyBzYWZlbHksIHNvIGp1c3QgcG9pbnQgYXQgdGhlIHByaW1hcnkgZGl2b3QKICAgICAgICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICBtX3N1YmV4cHJlc3Npb25EaXZvdE9mZnNldCA9
IG1fZGl2b3QgLSBzdWJleHByZXNzaW9uRGl2b3Q7CisgICAgICAgICAgICBtX3N1YmV4cHJlc3Np
b25EaXZvdE9mZnNldCA9IGRpdm90KCkgLSBzdWJleHByZXNzaW9uRGl2b3Q7CiAgICAgICAgICAg
ICBtX3N1YmV4cHJlc3Npb25FbmRPZmZzZXQgPSBzdWJleHByZXNzaW9uT2Zmc2V0OwogICAgICAg
ICB9CiAKQEAgLTQxMCwxMSArMzQ0LDEyIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB7CiAg
ICAgICAgIH0KIAotICAgICAgICB2b2lkIHNldFN1YmV4cHJlc3Npb25JbmZvKHVpbnQzMl90IHN1
YmV4cHJlc3Npb25EaXZvdCwgdWludDE2X3Qgc3ViZXhwcmVzc2lvbk9mZnNldCkgewotICAgICAg
ICAgICAgQVNTRVJUKHN1YmV4cHJlc3Npb25EaXZvdCA+PSBtX2Rpdm90KTsKLSAgICAgICAgICAg
IGlmICgoc3ViZXhwcmVzc2lvbkRpdm90IC0gbV9kaXZvdCkgJiB+MHhGRkZGKSAvLyBPdmVyZmxv
dyBtZWFucyB3ZSBjYW4ndCBkbyB0aGlzIHNhZmVseSwgc28ganVzdCBwb2ludCBhdCB0aGUgcHJp
bWFyeSBkaXZvdAorICAgICAgICB2b2lkIHNldFN1YmV4cHJlc3Npb25JbmZvKHVpbnQzMl90IHN1
YmV4cHJlc3Npb25EaXZvdCwgdWludDE2X3Qgc3ViZXhwcmVzc2lvbk9mZnNldCkKKyAgICAgICAg
eworICAgICAgICAgICAgQVNTRVJUKHN1YmV4cHJlc3Npb25EaXZvdCA+PSBkaXZvdCgpKTsKKyAg
ICAgICAgICAgIGlmICgoc3ViZXhwcmVzc2lvbkRpdm90IC0gZGl2b3QoKSkgJiB+MHhGRkZGKSAv
LyBPdmVyZmxvdyBtZWFucyB3ZSBjYW4ndCBkbyB0aGlzIHNhZmVseSwgc28ganVzdCBwb2ludCBh
dCB0aGUgcHJpbWFyeSBkaXZvdAogICAgICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAg
IG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0ID0gc3ViZXhwcmVzc2lvbkRpdm90IC0gbV9kaXZv
dDsKKyAgICAgICAgICAgIG1fc3ViZXhwcmVzc2lvbkRpdm90T2Zmc2V0ID0gc3ViZXhwcmVzc2lv
bkRpdm90IC0gZGl2b3QoKTsKICAgICAgICAgICAgIG1fc3ViZXhwcmVzc2lvblN0YXJ0T2Zmc2V0
ID0gc3ViZXhwcmVzc2lvbk9mZnNldDsKICAgICAgICAgfQogCkBAIC00MzQsOSArMzY5LDYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShD
b2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwogCi0gICAgICAg
IHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxM
OwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJu
IFByZWNQcmltYXJ5OyB9Ci0KICAgICBwcml2YXRlOgogICAgICAgICBVU3RyaW5nIG1fcGF0dGVy
bjsKICAgICAgICAgVVN0cmluZyBtX2ZsYWdzOwpAQCAtNDUwLDkgKzM4Miw2IEBAIG5hbWVzcGFj
ZSBKU0MgewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29k
ZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwotCi0gICAg
ICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9D
QUxMOwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0
dXJuIFByZWNQcmltYXJ5OyB9CiAgICAgfTsKIAogICAgIGNsYXNzIFJlc29sdmVOb2RlIDogcHVi
bGljIEV4cHJlc3Npb25Ob2RlIHsKQEAgLTQ2Niw0MCArMzk1LDMzIEBAIG5hbWVzcGFjZSBKU0Mg
ewogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYs
IFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQg
c3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmly
dHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjUHJpbWFyeTsg
fQotCiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1B1cmUoQ29kZUdlbmVyYXRvciYpIGNvbnN0IEpT
Q19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0xvY2F0aW9uKCkgY29uc3QgSlND
X0ZBU1RfQ0FMTCB7IHJldHVybiB0cnVlOyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc1Jlc29s
dmVOb2RlKCkgY29uc3QgSlNDX0ZBU1RfQ0FMTCB7IHJldHVybiB0cnVlOyB9CiAgICAgICAgIGNv
bnN0IElkZW50aWZpZXImIGlkZW50aWZpZXIoKSBjb25zdCBKU0NfRkFTVF9DQUxMIHsgcmV0dXJu
IG1faWRlbnQ7IH0KIAotICAgIHByb3RlY3RlZDoKKyAgICBwcml2YXRlOgogICAgICAgICBJZGVu
dGlmaWVyIG1faWRlbnQ7CiAgICAgICAgIGludDMyX3QgbV9zdGFydE9mZnNldDsKLSAgICAgICAg
CiAgICAgfTsKIAotICAgIGNsYXNzIEVsZW1lbnROb2RlIDogcHVibGljIE5vZGUgeworICAgIGNs
YXNzIEVsZW1lbnROb2RlIDogcHVibGljIFBhcnNlclJlZkNvdW50ZWQgewogICAgIHB1YmxpYzoK
ICAgICAgICAgRWxlbWVudE5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBpbnQgZWxpc2lv
biwgRXhwcmVzc2lvbk5vZGUqIG5vZGUpIEpTQ19GQVNUX0NBTEwKLSAgICAgICAgICAgIDogTm9k
ZShnbG9iYWxEYXRhKQorICAgICAgICAgICAgOiBQYXJzZXJSZWZDb3VudGVkKGdsb2JhbERhdGEp
CiAgICAgICAgICAgICAsIG1fZWxpc2lvbihlbGlzaW9uKQogICAgICAgICAgICAgLCBtX25vZGUo
bm9kZSkKICAgICAgICAgewogICAgICAgICB9CiAKICAgICAgICAgRWxlbWVudE5vZGUoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBFbGVtZW50Tm9kZSogbCwgaW50IGVsaXNpb24sIEV4cHJlc3Np
b25Ob2RlKiBub2RlKSBKU0NfRkFTVF9DQUxMCi0gICAgICAgICAgICA6IE5vZGUoZ2xvYmFsRGF0
YSkKKyAgICAgICAgICAgIDogUGFyc2VyUmVmQ291bnRlZChnbG9iYWxEYXRhKQogICAgICAgICAg
ICAgLCBtX2VsaXNpb24oZWxpc2lvbikKICAgICAgICAgICAgICwgbV9ub2RlKG5vZGUpCiAgICAg
ICAgIHsKICAgICAgICAgICAgIGwtPm1fbmV4dCA9IHRoaXM7CiAgICAgICAgIH0KIAotICAgICAg
ICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgQVNTRVJUX05PVF9SRUFD
SEVEKCk7IHJldHVybiBQcmVjRXhwcmVzc2lvbjsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgc3Ry
ZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKLQogICAgICAgICBpbnQg
ZWxpc2lvbigpIGNvbnN0IHsgcmV0dXJuIG1fZWxpc2lvbjsgfQogICAgICAgICBFeHByZXNzaW9u
Tm9kZSogdmFsdWUoKSB7IHJldHVybiBtX25vZGUuZ2V0KCk7IH0KIApAQCAtNTM5LDMwICs0NjEs
MjQgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0
Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwogCi0g
ICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFT
VF9DQUxMOwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsg
cmV0dXJuIFByZWNQcmltYXJ5OyB9Ci0KICAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8RWxl
bWVudE5vZGU+IG1fZWxlbWVudDsKICAgICAgICAgaW50IG1fZWxpc2lvbjsKICAgICAgICAgYm9v
bCBtX29wdGlvbmFsOwogICAgIH07CiAKLSAgICBjbGFzcyBQcm9wZXJ0eU5vZGUgOiBwdWJsaWMg
Tm9kZSB7CisgICAgY2xhc3MgUHJvcGVydHlOb2RlIDogcHVibGljIFBhcnNlclJlZkNvdW50ZWQg
ewogICAgIHB1YmxpYzoKICAgICAgICAgZW51bSBUeXBlIHsgQ29uc3RhbnQsIEdldHRlciwgU2V0
dGVyIH07CiAKICAgICAgICAgUHJvcGVydHlOb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwg
Y29uc3QgSWRlbnRpZmllciYgbmFtZSwgRXhwcmVzc2lvbk5vZGUqIGFzc2lnbiwgVHlwZSB0eXBl
KSBKU0NfRkFTVF9DQUxMCi0gICAgICAgICAgICA6IE5vZGUoZ2xvYmFsRGF0YSkKKyAgICAgICAg
ICAgIDogUGFyc2VyUmVmQ291bnRlZChnbG9iYWxEYXRhKQogICAgICAgICAgICAgLCBtX25hbWUo
bmFtZSkKICAgICAgICAgICAgICwgbV9hc3NpZ24oYXNzaWduKQogICAgICAgICAgICAgLCBtX3R5
cGUodHlwZSkKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0
cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1
YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNIRUQoKTsg
cmV0dXJuIFByZWNFeHByZXNzaW9uOyB9Ci0KICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgbmFt
ZSgpIGNvbnN0IHsgcmV0dXJuIG1fbmFtZTsgfQogCiAgICAgcHJpdmF0ZToKQEAgLTU4OCwxMyAr
NTA0LDEwIEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBS
ZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0Nf
RkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikg
Y29uc3QgSlNDX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVu
Y2UoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gUHJlY0V4cHJlc3Npb247
IH0KIAogICAgICAgICBQYXNzUmVmUHRyPFByb3BlcnR5TGlzdE5vZGU+IHJlbGVhc2VOZXh0KCkg
SlNDX0ZBU1RfQ0FMTCB7IHJldHVybiBtX25leHQucmVsZWFzZSgpOyB9CiAKICAgICBwcml2YXRl
OgotICAgICAgICBmcmllbmQgY2xhc3MgT2JqZWN0TGl0ZXJhbE5vZGU7CiAgICAgICAgIFJlZlB0
cjxQcm9wZXJ0eU5vZGU+IG1fbm9kZTsKICAgICAgICAgTGlzdFJlZlB0cjxQcm9wZXJ0eUxpc3RO
b2RlPiBtX25leHQ7CiAgICAgfTsKQEAgLTYxMyw5ICs1MjYsNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdl
bmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVh
bCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7Ci0gICAg
ICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1By
aW1hcnk7IH0KLSAgICAgICAgdmlydHVhbCBib29sIG5lZWRzUGFyZW5zSWZMZWZ0bW9zdCgpIGNv
bnN0IHsgcmV0dXJuIHRydWU7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZlB0cjxQcm9w
ZXJ0eUxpc3ROb2RlPiBtX2xpc3Q7CkBAIC02MzMsOSArNTQzLDYgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwg
UmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBz
dHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0
dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNNZW1iZXI7IH0K
LQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNMb2NhdGlvbigpIGNvbnN0IEpTQ19GQVNUX0NBTEwg
eyByZXR1cm4gdHJ1ZTsgfQogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNCcmFja2V0QWNjZXNzb3JO
b2RlKCkgY29uc3QgSlNDX0ZBU1RfQ0FMTCB7IHJldHVybiB0cnVlOyB9CiAgICAgICAgIEV4cHJl
c3Npb25Ob2RlKiBiYXNlKCkgSlNDX0ZBU1RfQ0FMTCB7IHJldHVybiBtX2Jhc2UuZ2V0KCk7IH0K
QEAgLTY1Nyw4ICs1NjQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAg
IHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQq
ID0gMCkgSlNDX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgUHJlY2VkZW5j
ZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY01lbWJlcjsgfQogCiAgICAgICAgIHZp
cnR1YWwgYm9vbCBpc0xvY2F0aW9uKCkgY29uc3QgSlNDX0ZBU1RfQ0FMTCB7IHJldHVybiB0cnVl
OyB9CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0RvdEFjY2Vzc29yTm9kZSgpIGNvbnN0IEpTQ19G
QVNUX0NBTEwgeyByZXR1cm4gdHJ1ZTsgfQpAQCAtNjg2LDggKzU5MSw2IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShD
b2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwotICAgICAgICB2
aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsK
LSAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IEFTU0VSVF9O
T1RfUkVBQ0hFRCgpOyByZXR1cm4gUHJlY0V4cHJlc3Npb247IH0KIAogICAgICAgICBQYXNzUmVm
UHRyPEFyZ3VtZW50TGlzdE5vZGU+IHJlbGVhc2VOZXh0KCkgSlNDX0ZBU1RfQ0FMTCB7IHJldHVy
biBtX25leHQucmVsZWFzZSgpOyB9CiAKQEAgLTY5NSwyMiArNTk4LDE5IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjsKICAgICB9OwogCi0g
ICAgY2xhc3MgQXJndW1lbnRzTm9kZSA6IHB1YmxpYyBOb2RlIHsKKyAgICBjbGFzcyBBcmd1bWVu
dHNOb2RlIDogcHVibGljIFBhcnNlclJlZkNvdW50ZWQgewogICAgIHB1YmxpYzoKICAgICAgICAg
QXJndW1lbnRzTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEpIEpTQ19GQVNUX0NBTEwKLSAg
ICAgICAgICAgIDogTm9kZShnbG9iYWxEYXRhKQorICAgICAgICAgICAgOiBQYXJzZXJSZWZDb3Vu
dGVkKGdsb2JhbERhdGEpCiAgICAgICAgIHsKICAgICAgICAgfQogCiAgICAgICAgIEFyZ3VtZW50
c05vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBBcmd1bWVudExpc3ROb2RlKiBsaXN0Tm9k
ZSkgSlNDX0ZBU1RfQ0FMTAotICAgICAgICAgICAgOiBOb2RlKGdsb2JhbERhdGEpCisgICAgICAg
ICAgICA6IFBhcnNlclJlZkNvdW50ZWQoZ2xvYmFsRGF0YSkKICAgICAgICAgICAgICwgbV9saXN0
Tm9kZShsaXN0Tm9kZSkKICAgICAgICAgewogICAgICAgICB9CiAKLSAgICAgICAgdmlydHVhbCB2
b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7Ci0gICAgICAg
IHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBBU1NFUlRfTk9UX1JFQUNI
RUQoKTsgcmV0dXJuIFByZWNFeHByZXNzaW9uOyB9Ci0KICAgICAgICAgUmVmUHRyPEFyZ3VtZW50
TGlzdE5vZGU+IG1fbGlzdE5vZGU7CiAgICAgfTsKIApAQCAtNzMxLDkgKzYzMSw2IEBAIG5hbWVz
cGFjZSBKU0MgewogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdl
bmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0
dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKLSAg
ICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVj
TGVmdEhhbmRTaWRlOyB9Ci0KICAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8RXhwcmVzc2lv
bk5vZGU+IG1fZXhwcjsKICAgICAgICAgUmVmUHRyPEFyZ3VtZW50c05vZGU+IG1fYXJnczsKQEAg
LTc0OSw4ICs2NDYsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAgIHZp
cnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0g
MCkgSlNDX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0
cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBw
cmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0NhbGw7IH0KIAogICAgIHByaXZhdGU6CiAg
ICAgICAgIFJlZlB0cjxBcmd1bWVudHNOb2RlPiBtX2FyZ3M7CkBAIC03NjcsOCArNjYyLDYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQq
IGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0Nf
RkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0
IHsgcmV0dXJuIFByZWNDYWxsOyB9CiAKICAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8RXhw
cmVzc2lvbk5vZGU+IG1fZXhwcjsKQEAgLTc4NywxMCArNjgwLDcgQEAgbmFtZXNwYWNlIEpTQyB7
CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwg
UmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBz
dHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0
dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNDYWxsOyB9Ci0K
LSAgICBwcm90ZWN0ZWQ6CisgICAgcHJpdmF0ZToKICAgICAgICAgSWRlbnRpZmllciBtX2lkZW50
OwogICAgICAgICBSZWZQdHI8QXJndW1lbnRzTm9kZT4gbV9hcmdzOwogICAgICAgICBzaXplX3Qg
bV9pbmRleDsgLy8gVXNlZCBieSBMb2NhbFZhckZ1bmN0aW9uQ2FsbE5vZGUuCkBAIC04MDksMTAg
KzY5OSw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBS
ZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0Nf
RkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikg
Y29uc3QgSlNDX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVu
Y2UoKSBjb25zdCB7IHJldHVybiBQcmVjQ2FsbDsgfQogCi0gICAgcHJvdGVjdGVkOgorICAgIHBy
aXZhdGU6CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9iYXNlOwogICAgICAgICBS
ZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fc3Vic2NyaXB0OwogICAgICAgICBSZWZQdHI8QXJndW1l
bnRzTm9kZT4gbV9hcmdzOwpAQCAtODMwLDggKzcxOCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJh
dG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZv
aWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKLSAgICAgICAg
dmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQ2FsbDsg
fQogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2Jhc2U7
CkBAIC04NjEsMTAgKzc0Nyw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAg
ICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJ
RCogPSAwKSBKU0NfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291
cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBQcmVjZWRl
bmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjUG9zdGZpeDsgfQogCi0gICAgcHJv
dGVjdGVkOgorICAgIHByaXZhdGU6CiAgICAgICAgIE9wZXJhdG9yIG1fb3BlcmF0b3I7CiAgICAg
fTsKIApAQCAtODgwLDEwICs3NjQsOCBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAg
ICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lz
dGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRv
KFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgUHJl
Y2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1Bvc3RmaXg7IH0KIAotICAg
IHByb3RlY3RlZDoKKyAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+
IG1fYmFzZTsKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX3N1YnNjcmlwdDsKICAg
ICAgICAgT3BlcmF0b3IgbV9vcGVyYXRvcjsKQEAgLTkwMSwxMCArNzgzLDggQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2Rl
KENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxM
OwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJu
IFByZWNQb3N0Zml4OyB9CiAKLSAgICBwcm90ZWN0ZWQ6CisgICAgcHJpdmF0ZToKICAgICAgICAg
UmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2Jhc2U7CiAgICAgICAgIElkZW50aWZpZXIgbV9pZGVu
dDsKICAgICAgICAgT3BlcmF0b3IgbV9vcGVyYXRvcjsKQEAgLTkyMSw4ICs4MDEsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1p
dENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKLSAg
ICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNU
X0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBy
ZXR1cm4gUHJlY1Bvc3RmaXg7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZlB0cjxFeHBy
ZXNzaW9uTm9kZT4gbV9leHByOwpAQCAtOTQwLDkgKzgxOCw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJl
Z2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgc3Ry
ZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVh
bCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjVW5hcnk7IH0KLQog
ICAgIHByaXZhdGU6CiAgICAgICAgIElkZW50aWZpZXIgbV9pZGVudDsKICAgICB9OwpAQCAtOTU5
LDkgKzgzNCw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJ
RCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FM
TDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3Qg
SlNDX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBj
b25zdCB7IHJldHVybiBQcmVjVW5hcnk7IH0KLQogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZlB0
cjxFeHByZXNzaW9uTm9kZT4gbV9iYXNlOwogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+
IG1fc3Vic2NyaXB0OwpAQCAtOTc5LDkgKzg1MSw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAg
ICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVy
SUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8o
U291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBQcmVj
ZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjVW5hcnk7IH0KLQogICAgIHBy
aXZhdGU6CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9iYXNlOwogICAgICAgICBJ
ZGVudGlmaWVyIG1faWRlbnQ7CkBAIC05OTcsOSArODY2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAK
ICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVn
aXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJl
YW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFs
IFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNVbmFyeTsgfQotCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHI7CiAgICAg
fTsKQEAgLTEwMTQsOSArODgwLDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdmlydHVh
bCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBK
U0NfRkFTVF9DQUxMOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJl
YW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJl
Y2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNVbmFyeTsgfQotCiAgICAgcHJpdmF0ZToKICAg
ICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHI7CiAgICAgfTsKQEAgLTEwMzEsMTQg
Kzg5NCwxMCBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQq
IGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7
CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpT
Q19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29u
c3QgeyByZXR1cm4gUHJlY1VuYXJ5OyB9Ci0KICAgICAgICAgY29uc3QgSWRlbnRpZmllciYgaWRl
bnRpZmllcigpIGNvbnN0IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gbV9pZGVudDsgfQogCi0gICAg
cHJvdGVjdGVkOgorICAgIHByaXZhdGU6CiAgICAgICAgIElkZW50aWZpZXIgbV9pZGVudDsKLSAg
ICAgICAgc2l6ZV90IG1faW5kZXg7IC8vIFVzZWQgYnkgTG9jYWxUeXBlT2ZOb2RlLgogICAgIH07
CiAKICAgICBjbGFzcyBUeXBlT2ZWYWx1ZU5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewpA
QCAtMTA1MSw5ICs5MTAsNiBAQCBuYW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2aXJ0dWFsIFJl
Z2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19G
QVNUX0NBTEw7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYp
IGNvbnN0IEpTQ19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRl
bmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1VuYXJ5OyB9Ci0KICAgICBwcml2YXRlOgogICAgICAg
ICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjsKICAgICB9OwpAQCAtMTA2OCwxMCArOTI0
LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0
Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwogCi0g
ICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFT
VF9DQUxMOwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsg
cmV0dXJuIFByZWNVbmFyeTsgfQotCi0gICAgcHJvdGVjdGVkOgorICAgIHByaXZhdGU6CiAgICAg
ICAgIE9wZXJhdG9yIG1fb3BlcmF0b3I7CiAgICAgfTsKIApAQCAtMTA4NywxMCArOTQwLDggQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQq
IGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0Nf
RkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0
IHsgcmV0dXJuIFByZWNVbmFyeTsgfQogCi0gICAgcHJvdGVjdGVkOgorICAgIHByaXZhdGU6CiAg
ICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9iYXNlOwogICAgICAgICBSZWZQdHI8RXhw
cmVzc2lvbk5vZGU+IG1fc3Vic2NyaXB0OwogICAgICAgICBPcGVyYXRvciBtX29wZXJhdG9yOwpA
QCAtMTEwOCwxMCArOTU5LDggQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAg
ICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklE
KiA9IDApIEpTQ19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3Vy
Y2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVu
Y2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNQb3N0Zml4OyB9CiAKLSAgICBwcm90
ZWN0ZWQ6CisgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2Jh
c2U7CiAgICAgICAgIElkZW50aWZpZXIgbV9pZGVudDsKICAgICAgICAgT3BlcmF0b3IgbV9vcGVy
YXRvcjsKQEAgLTExMjgsOCArOTc3LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAog
ICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdp
c3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1U
byhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIFBy
ZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNVbmFyeTsgfQogCiAgICAg
cHJpdmF0ZToKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHI7CkBAIC0xMTY3
LDggKzEwMTQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgdmlydHVhbCBFeHByZXNzaW9u
Tm9kZSogc3RyaXBVbmFyeVBsdXMoKSB7IHJldHVybiBtX2V4cHIuZ2V0KCk7IH0KIAogICAgICAg
ICB2aXJ0dWFsIE9wY29kZUlEIG9wY29kZSgpIGNvbnN0IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4g
b3BfdG9fanNudW1iZXI7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0
cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBw
cmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1VuYXJ5OyB9CiAgICAgfTsKIAogICAgIGNs
YXNzIE5lZ2F0ZU5vZGUgOiBwdWJsaWMgVW5hcnlPcE5vZGUgewpAQCAtMTE3OSw4ICsxMDI0LDYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIE9wY29kZUlE
IG9wY29kZSgpIGNvbnN0IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gb3BfbmVnYXRlOyB9Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9D
QUxMOwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0
dXJuIFByZWNVbmFyeTsgfQogICAgIH07CiAKICAgICBjbGFzcyBCaXR3aXNlTm90Tm9kZSA6IHB1
YmxpYyBVbmFyeU9wTm9kZSB7CkBAIC0xMTkxLDggKzEwMzQsNiBAQCBuYW1lc3BhY2UgSlNDIHsK
ICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgT3Bjb2RlSUQgb3Bjb2RlKCkgY29uc3QgSlND
X0ZBU1RfQ0FMTCB7IHJldHVybiBvcF9iaXRub3Q7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIHN0
cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1
YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY1VuYXJ5OyB9CiAg
ICAgfTsKIAogICAgIGNsYXNzIExvZ2ljYWxOb3ROb2RlIDogcHVibGljIFVuYXJ5T3BOb2RlIHsK
QEAgLTEyMDMsOCArMTA0NCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAg
ICAgdmlydHVhbCBPcGNvZGVJRCBvcGNvZGUoKSBjb25zdCBKU0NfRkFTVF9DQUxMIHsgcmV0dXJu
IG9wX25vdDsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikg
Y29uc3QgSlNDX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVu
Y2UoKSBjb25zdCB7IHJldHVybiBQcmVjVW5hcnk7IH0KICAgICB9OwogCiAgICAgY2xhc3MgQmlu
YXJ5T3BOb2RlIDogcHVibGljIEV4cHJlc3Npb25Ob2RlIHsKQEAgLTEyNTUsNyArMTA5NCw3IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENv
ZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIHZp
cnR1YWwgT3Bjb2RlSUQgb3Bjb2RlKCkgY29uc3QgSlNDX0ZBU1RfQ0FMTCA9IDA7CiAKLSAgICBw
cm90ZWN0ZWQ6CisgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBt
X2V4cHIxOwogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjI7CiAgICAgICAg
IGJvb2wgbV9yaWdodEhhc0Fzc2lnbm1lbnRzOwpAQCAtMTI2OSw4ICsxMTA4LDYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIE9wY29kZUlEIG9wY29kZSgp
IGNvbnN0IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gb3BfbXVsOyB9Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwotICAgICAg
ICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNNdWx0
aXBsaWNhdGl2ZTsgfQogICAgIH07CiAKICAgICBjbGFzcyBEaXZOb2RlIDogcHVibGljIEJpbmFy
eU9wTm9kZSB7CkBAIC0xMjgxLDggKzExMTgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
fQogCiAgICAgICAgIHZpcnR1YWwgT3Bjb2RlSUQgb3Bjb2RlKCkgY29uc3QgSlNDX0ZBU1RfQ0FM
TCB7IHJldHVybiBvcF9kaXY7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgUHJlY2VkZW5j
ZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY011bHRpcGxpY2F0aXZlOyB9CiAgICAg
fTsKIAogICAgIGNsYXNzIE1vZE5vZGUgOiBwdWJsaWMgQmluYXJ5T3BOb2RlIHsKQEAgLTEyOTMs
OCArMTEyOCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVh
bCBPcGNvZGVJRCBvcGNvZGUoKSBjb25zdCBKU0NfRkFTVF9DQUxMIHsgcmV0dXJuIG9wX21vZDsg
fQotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlND
X0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25z
dCB7IHJldHVybiBQcmVjTXVsdGlwbGljYXRpdmU7IH0KICAgICB9OwogCiAgICAgY2xhc3MgQWRk
Tm9kZSA6IHB1YmxpYyBCaW5hcnlPcE5vZGUgewpAQCAtMTMwNSw4ICsxMTM4LDYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIE9wY29kZUlEIG9wY29kZSgp
IGNvbnN0IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gb3BfYWRkOyB9Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwotICAgICAg
ICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNBZGRp
dGl2ZTsgfQogICAgIH07CiAKICAgICBjbGFzcyBTdWJOb2RlIDogcHVibGljIEJpbmFyeU9wTm9k
ZSB7CkBAIC0xMzE3LDggKzExNDgsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAg
ICAgICAgIHZpcnR1YWwgT3Bjb2RlSUQgb3Bjb2RlKCkgY29uc3QgSlNDX0ZBU1RfQ0FMTCB7IHJl
dHVybiBvcF9zdWI7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVh
bSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVj
ZWRlbmNlKCkgY29uc3QgeyByZXR1cm4gUHJlY0FkZGl0aXZlOyB9CiAgICAgfTsKIAogICAgIGNs
YXNzIExlZnRTaGlmdE5vZGUgOiBwdWJsaWMgQmluYXJ5T3BOb2RlIHsKQEAgLTEzMjksOCArMTE1
OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBPcGNv
ZGVJRCBvcGNvZGUoKSBjb25zdCBKU0NfRkFTVF9DQUxMIHsgcmV0dXJuIG9wX2xzaGlmdDsgfQot
ICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZB
U1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7
IHJldHVybiBQcmVjU2hpZnQ7IH0KICAgICB9OwogCiAgICAgY2xhc3MgUmlnaHRTaGlmdE5vZGUg
OiBwdWJsaWMgQmluYXJ5T3BOb2RlIHsKQEAgLTEzNDEsOCArMTE2OCw2IEBAIG5hbWVzcGFjZSBK
U0MgewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBPcGNvZGVJRCBvcGNvZGUoKSBjb25z
dCBKU0NfRkFTVF9DQUxMIHsgcmV0dXJuIG9wX3JzaGlmdDsgfQotICAgICAgICB2aXJ0dWFsIHZv
aWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKLSAgICAgICAg
dmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjU2hpZnQ7
IH0KICAgICB9OwogCiAgICAgY2xhc3MgVW5zaWduZWRSaWdodFNoaWZ0Tm9kZSA6IHB1YmxpYyBC
aW5hcnlPcE5vZGUgewpAQCAtMTM1Myw4ICsxMTc4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAg
ICAgIH0KIAogICAgICAgICB2aXJ0dWFsIE9wY29kZUlEIG9wY29kZSgpIGNvbnN0IEpTQ19GQVNU
X0NBTEwgeyByZXR1cm4gb3BfdXJzaGlmdDsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFt
VG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBQ
cmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjU2hpZnQ7IH0KICAgICB9
OwogCiAgICAgY2xhc3MgTGVzc05vZGUgOiBwdWJsaWMgQmluYXJ5T3BOb2RlIHsKQEAgLTEzNjUs
OCArMTE4OCw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVh
bCBPcGNvZGVJRCBvcGNvZGUoKSBjb25zdCBKU0NfRkFTVF9DQUxMIHsgcmV0dXJuIG9wX2xlc3M7
IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpT
Q19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29u
c3QgeyByZXR1cm4gUHJlY1JlbGF0aW9uYWw7IH0KICAgICB9OwogCiAgICAgY2xhc3MgR3JlYXRl
ck5vZGUgOiBwdWJsaWMgUmV2ZXJzZUJpbmFyeU9wTm9kZSB7CkBAIC0xMzc3LDggKzExOTgsNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgT3Bjb2RlSUQg
b3Bjb2RlKCkgY29uc3QgSlNDX0ZBU1RfQ0FMTCB7IHJldHVybiBvcF9sZXNzOyB9Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxM
OwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJu
IFByZWNSZWxhdGlvbmFsOyB9CiAgICAgfTsKIAogICAgIGNsYXNzIExlc3NFcU5vZGUgOiBwdWJs
aWMgQmluYXJ5T3BOb2RlIHsKQEAgLTEzODksOCArMTIwOCw2IEBAIG5hbWVzcGFjZSBKU0Mgewog
ICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBPcGNvZGVJRCBvcGNvZGUoKSBjb25zdCBKU0Nf
RkFTVF9DQUxMIHsgcmV0dXJuIG9wX2xlc3NlcTsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgc3Ry
ZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVh
bCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjUmVsYXRpb25hbDsg
fQogICAgIH07CiAKICAgICBjbGFzcyBHcmVhdGVyRXFOb2RlIDogcHVibGljIFJldmVyc2VCaW5h
cnlPcE5vZGUgewpAQCAtMTQwMSw4ICsxMjE4LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAg
IH0KIAogICAgICAgICB2aXJ0dWFsIE9wY29kZUlEIG9wY29kZSgpIGNvbnN0IEpTQ19GQVNUX0NB
TEwgeyByZXR1cm4gb3BfbGVzc2VxOyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhT
b3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIFByZWNl
ZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNSZWxhdGlvbmFsOyB9CiAgICAg
fTsKIAogICAgIGNsYXNzIFRocm93YWJsZUJpbmFyeU9wTm9kZSA6IHB1YmxpYyBCaW5hcnlPcE5v
ZGUsIHB1YmxpYyBUaHJvd2FibGVFeHByZXNzaW9uRGF0YSB7CkBAIC0xNDI2LDggKzEyNDEsNiBA
QCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgT3Bjb2RlSUQg
b3Bjb2RlKCkgY29uc3QgSlNDX0ZBU1RfQ0FMTCB7IHJldHVybiBvcF9pbnN0YW5jZW9mOyB9Ci0g
ICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFT
VF9DQUxMOwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsg
cmV0dXJuIFByZWNSZWxhdGlvbmFsOyB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBl
bWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwog
ICAgIH07CkBAIC0xNDQwLDggKzEyNTMsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQog
CiAgICAgICAgIHZpcnR1YWwgT3Bjb2RlSUQgb3Bjb2RlKCkgY29uc3QgSlNDX0ZBU1RfQ0FMTCB7
IHJldHVybiBvcF9pbjsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3Ry
ZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHBy
ZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjUmVsYXRpb25hbDsgfQogICAgIH07CiAKICAg
ICBjbGFzcyBFcXVhbE5vZGUgOiBwdWJsaWMgQmluYXJ5T3BOb2RlIHsKQEAgLTE0NTMsOCArMTI2
NCw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1p
dENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKICAg
ICAgICAgdmlydHVhbCBPcGNvZGVJRCBvcGNvZGUoKSBjb25zdCBKU0NfRkFTVF9DQUxMIHsgcmV0
dXJuIG9wX2VxOyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0m
KSBjb25zdCBKU0NfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2Vk
ZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNFcXVhbGl0eTsgfQogICAgIH07CiAKICAgICBjbGFz
cyBOb3RFcXVhbE5vZGUgOiBwdWJsaWMgQmluYXJ5T3BOb2RlIHsKQEAgLTE0NjUsOCArMTI3NCw2
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBPcGNvZGVJ
RCBvcGNvZGUoKSBjb25zdCBKU0NfRkFTVF9DQUxMIHsgcmV0dXJuIG9wX25lcTsgfQotICAgICAg
ICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FM
TDsKLSAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVy
biBQcmVjRXF1YWxpdHk7IH0KICAgICB9OwogCiAgICAgY2xhc3MgU3RyaWN0RXF1YWxOb2RlIDog
cHVibGljIEJpbmFyeU9wTm9kZSB7CkBAIC0xNDc4LDggKzEyODUsNiBAQCBuYW1lc3BhY2UgSlND
IHsKIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3Im
LCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIHZpcnR1YWwgT3Bjb2Rl
SUQgb3Bjb2RlKCkgY29uc3QgSlNDX0ZBU1RfQ0FMTCB7IHJldHVybiBvcF9zdHJpY3RlcTsgfQot
ICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZB
U1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7
IHJldHVybiBQcmVjRXF1YWxpdHk7IH0KICAgICB9OwogCiAgICAgY2xhc3MgTm90U3RyaWN0RXF1
YWxOb2RlIDogcHVibGljIEJpbmFyeU9wTm9kZSB7CkBAIC0xNDkwLDggKzEyOTUsNiBAQCBuYW1l
c3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgT3Bjb2RlSUQgb3Bjb2Rl
KCkgY29uc3QgSlNDX0ZBU1RfQ0FMTCB7IHJldHVybiBvcF9uc3RyaWN0ZXE7IH0KLSAgICAgICAg
dmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7
Ci0gICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1cm4g
UHJlY0VxdWFsaXR5OyB9CiAgICAgfTsKIAogICAgIGNsYXNzIEJpdEFuZE5vZGUgOiBwdWJsaWMg
QmluYXJ5T3BOb2RlIHsKQEAgLTE1MDIsOCArMTMwNSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAg
ICAgICB9CiAKICAgICAgICAgdmlydHVhbCBPcGNvZGVJRCBvcGNvZGUoKSBjb25zdCBKU0NfRkFT
VF9DQUxMIHsgcmV0dXJuIG9wX2JpdGFuZDsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFt
VG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBQ
cmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQml0d2lzZUFuZDsgfQog
ICAgIH07CiAKICAgICBjbGFzcyBCaXRPck5vZGUgOiBwdWJsaWMgQmluYXJ5T3BOb2RlIHsKQEAg
LTE1MTQsOCArMTMxNSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAgICAg
dmlydHVhbCBPcGNvZGVJRCBvcGNvZGUoKSBjb25zdCBKU0NfRkFTVF9DQUxMIHsgcmV0dXJuIG9w
X2JpdG9yOyB9Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBj
b25zdCBKU0NfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5j
ZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNCaXR3aXNlT3I7IH0KICAgICB9OwogCiAgICAgY2xhc3Mg
Qml0WE9yTm9kZSA6IHB1YmxpYyBCaW5hcnlPcE5vZGUgewpAQCAtMTUyNiw4ICsxMzI1LDYgQEAg
bmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIE9wY29kZUlEIG9w
Y29kZSgpIGNvbnN0IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gb3BfYml0eG9yOyB9Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxM
OwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNvbnN0IHsgcmV0dXJu
IFByZWNCaXR3aXNlWG9yOyB9CiAgICAgfTsKIAogICAgIC8qKgpAQCAtMTU0NCw4ICsxMzQxLDYg
QEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVy
SUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NB
TEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBK
U0NfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgpIGNv
bnN0IHsgcmV0dXJuIChtX29wZXJhdG9yID09IE9wTG9naWNhbEFuZCkgPyBQcmVjTG9naWNhbEFu
ZCA6IFByZWNMb2dpY2FsT3I7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZlB0cjxFeHBy
ZXNzaW9uTm9kZT4gbV9leHByMTsKQEAgLTE1NjcsOCArMTM2Miw2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2Rl
R2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0
dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKLSAg
ICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVj
Q29uZGl0aW9uYWw7IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9u
Tm9kZT4gbV9sb2dpY2FsOwpAQCAtMTU5MCwxMCArMTM4Myw3IEBAIG5hbWVzcGFjZSBKU0Mgewog
CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJl
Z2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgc3Ry
ZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVh
bCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQXNzaWdubWVudDsg
fQotCi0gICAgcHJvdGVjdGVkOgorICAgIHByaXZhdGU6CiAgICAgICAgIElkZW50aWZpZXIgbV9p
ZGVudDsKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX3JpZ2h0OwogICAgICAgICBz
aXplX3QgbV9pbmRleDsgLy8gVXNlZCBieSBSZWFkTW9kaWZ5TG9jYWxWYXJOb2RlLgpAQCAtMTYx
MywxMCArMTQwMyw3IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0
ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1Rf
Q0FMTDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29u
c3QgSlNDX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2Uo
KSBjb25zdCB7IHJldHVybiBQcmVjQXNzaWdubWVudDsgfQotCi0gICAgcHJvdGVjdGVkOgorICAg
IHByaXZhdGU6CiAgICAgICAgIElkZW50aWZpZXIgbV9pZGVudDsKICAgICAgICAgUmVmUHRyPEV4
cHJlc3Npb25Ob2RlPiBtX3JpZ2h0OwogICAgICAgICBzaXplX3QgbV9pbmRleDsgLy8gVXNlZCBi
eSBSZWFkTW9kaWZ5TG9jYWxWYXJOb2RlLgpAQCAtMTYzOSwxMCArMTQyNiw3IEBAIG5hbWVzcGFj
ZSBKU0MgewogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVy
YXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0dWFs
IHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKLSAgICAg
ICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQXNz
aWdubWVudDsgfQotCi0gICAgcHJvdGVjdGVkOgorICAgIHByaXZhdGU6CiAgICAgICAgIFJlZlB0
cjxFeHByZXNzaW9uTm9kZT4gbV9iYXNlOwogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+
IG1fc3Vic2NyaXB0OwogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fcmlnaHQ7CkBA
IC0xNjY2LDEwICsxNDUwLDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdmlydHVhbCBS
ZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0Nf
RkFTVF9DQUxMOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0m
KSBjb25zdCBKU0NfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2Vk
ZW5jZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNBc3NpZ25tZW50OyB9Ci0KLSAgICBwcm90ZWN0ZWQ6
CisgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2Jhc2U7CiAg
ICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9zdWJzY3JpcHQ7CiAgICAgICAgIFJlZlB0
cjxFeHByZXNzaW9uTm9kZT4gbV9yaWdodDsKQEAgLTE2OTAsMTAgKzE0NzEsOCBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENv
ZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKLSAgICAg
ICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NB
TEw7Ci0gICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1
cm4gUHJlY0Fzc2lnbm1lbnQ7IH0KIAotICAgIHByb3RlY3RlZDoKKyAgICBwcml2YXRlOgogICAg
ICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fYmFzZTsKICAgICAgICAgSWRlbnRpZmllciBt
X2lkZW50OwogICAgICAgICBSZWZQdHI8RXhwcmVzc2lvbk5vZGU+IG1fcmlnaHQ7CkBAIC0xNzE1
LDEwICsxNDk0LDcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3Rl
cklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9D
QUxMOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25z
dCBKU0NfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5jZSgp
IGNvbnN0IHsgcmV0dXJuIFByZWNBc3NpZ25tZW50OyB9Ci0KLSAgICBwcm90ZWN0ZWQ6CisgICAg
cHJpdmF0ZToKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2Jhc2U7CiAgICAgICAg
IElkZW50aWZpZXIgbV9pZGVudDsKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX3Jp
Z2h0OwpAQCAtMTczOCwxMCArMTUxNCw4IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAK
ICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVn
aXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFt
VG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBQ
cmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IHJldHVybiBQcmVjQXNzaWdubWVudDsgfQog
Ci0gICAgcHJvdGVjdGVkOgorICAgIHByaXZhdGU6CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9u
Tm9kZT4gbV9sZWZ0OwogICAgICAgICBPcGVyYXRvciBtX29wZXJhdG9yOwogICAgICAgICBSZWZQ
dHI8RXhwcmVzc2lvbk5vZGU+IG1fcmlnaHQ7CkBAIC0xNzU3LDggKzE1MzEsNiBAQCBuYW1lc3Bh
Y2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENv
ZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKLSAgICAg
ICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NB
TEw7Ci0gICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyByZXR1
cm4gUHJlY0V4cHJlc3Npb247IH0KIAogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZlB0cjxFeHBy
ZXNzaW9uTm9kZT4gbV9leHByMTsKQEAgLTE3NzEsMTUgKzE1NDMsMTIgQEAgbmFtZXNwYWNlIEpT
QyB7CiAgICAgICAgICAgICA6IENvbW1hTm9kZShnbG9iYWxEYXRhLCBleHByMSwgZXhwcjIpCiAg
ICAgICAgIHsKICAgICAgICAgfQotICAgICAgICB2aXJ0dWFsIFByZWNlZGVuY2UgcHJlY2VkZW5j
ZSgpIGNvbnN0IHsgcmV0dXJuIFByZWNBc3NpZ25tZW50OyB9CiAgICAgfTsKIAogICAgIGNsYXNz
IENvbnN0RGVjbE5vZGUgOiBwdWJsaWMgRXhwcmVzc2lvbk5vZGUgewogICAgIHB1YmxpYzoKICAg
ICAgICAgQ29uc3REZWNsTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERhdGEsIGNvbnN0IElkZW50
aWZpZXImIGlkZW50LCBFeHByZXNzaW9uTm9kZSogaW4pIEpTQ19GQVNUX0NBTEw7CiAKLSAgICAg
ICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NB
TEw7Ci0gICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFByZWNFeHByZXNzaW9uOyB9CiAgICAgICAgIFBhc3NS
ZWZQdHI8Q29uc3REZWNsTm9kZT4gcmVsZWFzZU5leHQoKSBKU0NfRkFTVF9DQUxMIHsgcmV0dXJu
IG1fbmV4dC5yZWxlYXNlKCk7IH0KIAogICAgICAgICBJZGVudGlmaWVyIG1faWRlbnQ7CkBAIC0x
Nzk4LDggKzE1NjcsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgewogICAgICAgICB9CiAK
LSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19G
QVNUX0NBTEw7Ci0gICAgICAgIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2Rl
KENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7CiAKICAgICBw
cml2YXRlOgpAQCAtMTgyOCwxMiArMTU5NSwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAg
QmxvY2tOb2RlKEpTR2xvYmFsRGF0YSosIFNvdXJjZUVsZW1lbnRzKiBjaGlsZHJlbikgSlNDX0ZB
U1RfQ0FMTDsKIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5l
cmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwogCiAgICAg
ICAgIFN0YXRlbWVudFZlY3RvciYgY2hpbGRyZW4oKSB7IHJldHVybiBtX2NoaWxkcmVuOyB9CiAK
ICAgICAgICAgdmlydHVhbCBib29sIGlzQmxvY2soKSBjb25zdCBKU0NfRkFTVF9DQUxMIHsgcmV0
dXJuIHRydWU7IH0KLSAgICBwcm90ZWN0ZWQ6CisKKyAgICBwcml2YXRlOgogICAgICAgICBTdGF0
ZW1lbnRWZWN0b3IgbV9jaGlsZHJlbjsKICAgICB9OwogCkBAIC0xODQ2LDcgKzE2MTMsNiBAQCBu
YW1lc3BhY2UgSlNDIHsKIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENv
ZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7CiAKLSAgICAgICAg
dmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7
CiAgICAgICAgIHZpcnR1YWwgYm9vbCBpc0VtcHR5U3RhdGVtZW50KCkgY29uc3QgSlNDX0ZBU1Rf
Q0FMTCB7IHJldHVybiB0cnVlOyB9CiAgICAgfTsKICAgICAKQEAgLTE4NTgsOCArMTYyNCw2IEBA
IG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB2aXJ0dWFsIFJl
Z2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19G
QVNUX0NBTEw7Ci0KLSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYp
IGNvbnN0IEpTQ19GQVNUX0NBTEw7CiAgICAgfTsKIAogICAgIGNsYXNzIEV4cHJTdGF0ZW1lbnRO
b2RlIDogcHVibGljIFN0YXRlbWVudE5vZGUgewpAQCAtMTg3MSw3ICsxNjM1LDYgQEAgbmFtZXNw
YWNlIEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRD
b2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7Ci0gICAg
ICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9D
QUxMOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4
cHI7CkBAIC0xODg3LDggKzE2NTAsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgCiAgICAg
ICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVy
SUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8o
U291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKLQogICAgIHByaXZhdGU6CiAgICAg
ICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByOwogICAgIH07CkBAIC0xOTAzLDcgKzE2
NjQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgUmVn
aXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZB
U1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNv
bnN0IEpTQ19GQVNUX0NBTEw7CiAKICAgICBwcm90ZWN0ZWQ6CiAgICAgICAgIFJlZlB0cjxFeHBy
ZXNzaW9uTm9kZT4gbV9jb25kaXRpb247CkBAIC0xOTE5LDcgKzE2NzksNiBAQCBuYW1lc3BhY2Ug
SlNDIHsKICAgICAgICAgfQogCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUo
Q29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKLSAgICAgICAg
dmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7
CiAKICAgICBwcml2YXRlOgogICAgICAgICBSZWZQdHI8U3RhdGVtZW50Tm9kZT4gbV9lbHNlQmxv
Y2s7CkBAIC0xOTM1LDcgKzE2OTQsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAg
ICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lz
dGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRv
KFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CiAKICAgICAgICAgdmlydHVhbCBi
b29sIGlzTG9vcCgpIGNvbnN0IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gdHJ1ZTsgfQogICAgIHBy
aXZhdGU6CkBAIC0xOTUzLDkgKzE3MTEsOSBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQog
CiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJl
Z2lzdGVySUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVh
bVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CiAKICAgICAgICAgdmlydHVh
bCBib29sIGlzTG9vcCgpIGNvbnN0IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gdHJ1ZTsgfQorCiAg
ICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHI7CiAgICAg
ICAgIFJlZlB0cjxTdGF0ZW1lbnROb2RlPiBtX3N0YXRlbWVudDsKQEAgLTE5NzUsOSArMTczMyw5
IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3Rl
cklEKiBlbWl0Q29kZShDb2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9D
QUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3Qg
SlNDX0ZBU1RfQ0FMTDsKIAogICAgICAgICB2aXJ0dWFsIGJvb2wgaXNMb29wKCkgY29uc3QgSlND
X0ZBU1RfQ0FMTCB7IHJldHVybiB0cnVlOyB9CisKICAgICBwcml2YXRlOgogICAgICAgICBSZWZQ
dHI8RXhwcmVzc2lvbk5vZGU+IG1fZXhwcjE7CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9k
ZT4gbV9leHByMjsKQEAgLTE5OTIsOSArMTc1MCw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAg
ICBGb3JJbk5vZGUoSlNHbG9iYWxEYXRhKiwgY29uc3QgSWRlbnRpZmllciYsIEV4cHJlc3Npb25O
b2RlKiwgRXhwcmVzc2lvbk5vZGUqLCBTdGF0ZW1lbnROb2RlKiwgaW50IGRpdm90LCBpbnQgc3Rh
cnRPZmZzZXQsIGludCBlbmRPZmZzZXQpIEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIAogICAgICAg
ICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklE
KiA9IDApIEpTQ19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3Vy
Y2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwogCiAgICAgICAgIHZpcnR1YWwgYm9vbCBp
c0xvb3AoKSBjb25zdCBKU0NfRkFTVF9DQUxMIHsgcmV0dXJuIHRydWU7IH0KKwogICAgIHByaXZh
dGU6CiAgICAgICAgIElkZW50aWZpZXIgbV9pZGVudDsKICAgICAgICAgUmVmUHRyPEV4cHJlc3Np
b25Ob2RlPiBtX2luaXQ7CkBAIC0yMDE4LDcgKzE3NzYsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAg
ICAgICAgfQogICAgICAgICAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShD
b2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwotICAgICAgICB2
aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsK
IAogICAgIHByaXZhdGU6CiAgICAgICAgIElkZW50aWZpZXIgbV9pZGVudDsKQEAgLTIwMzgsNyAr
MTc5NSw2IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICB9CiAgICAgICAgIAogICAgICAgICB2
aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9
IDApIEpTQ19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VT
dHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgSWRl
bnRpZmllciBtX2lkZW50OwpAQCAtMjA1Myw3ICsxODA5LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAg
ICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5l
cmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7Ci0gICAgICAgIHZpcnR1YWwg
dm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwogICAgICAg
ICB2aXJ0dWFsIGJvb2wgaXNSZXR1cm5Ob2RlKCkgY29uc3QgSlNDX0ZBU1RfQ0FMTCB7IHJldHVy
biB0cnVlOyB9CiAKICAgICBwcml2YXRlOgpAQCAtMjA3Miw3ICsxODI3LDYgQEAgbmFtZXNwYWNl
IEpTQyB7CiAgICAgICAgIH0KIAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2Rl
KENvZGVHZW5lcmF0b3ImLCBSZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7Ci0gICAgICAg
IHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxM
OwogCiAgICAgcHJpdmF0ZToKICAgICAgICAgUmVmUHRyPEV4cHJlc3Npb25Ob2RlPiBtX2V4cHI7
CkBAIC0yMDkxLDcgKzE4NDUsNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgfQogCiAgICAg
ICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVy
SUQqID0gMCkgSlNDX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNv
dXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CiAKICAgICBwcml2YXRlOgogICAgICAg
ICBJZGVudGlmaWVyIG1fbmFtZTsKQEAgLTIxMDcsNyArMTg2MCw2IEBAIG5hbWVzcGFjZSBKU0Mg
ewogICAgICAgICB9CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShDb2Rl
R2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwotICAgICAgICB2aXJ0
dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKIAog
ICAgIHByaXZhdGU6CiAgICAgICAgIFJlZlB0cjxFeHByZXNzaW9uTm9kZT4gbV9leHByOwpAQCAt
MjEyNCw4ICsxODc2LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAgICAgICAgIHsKICAgICAgICAgfQog
Ci0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhTb3VyY2VTdHJlYW0mKSBjb25zdCBKU0Nf
RkFTVF9DQUxMOwotCiAgICAgICAgIHZpcnR1YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdl
bmVyYXRvciYsIFJlZ2lzdGVySUQqIGRzdCA9IDApIEpTQ19GQVNUX0NBTEw7CiAKICAgICBwcml2
YXRlOgpAQCAtMjEzNSw0MCArMTg4NSwzNyBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVm
UHRyPFN0YXRlbWVudE5vZGU+IG1fZmluYWxseUJsb2NrOwogICAgIH07CiAKLSAgICBjbGFzcyBQ
YXJhbWV0ZXJOb2RlIDogcHVibGljIE5vZGUgeworICAgIGNsYXNzIFBhcmFtZXRlck5vZGUgOiBw
dWJsaWMgUGFyc2VyUmVmQ291bnRlZCB7CiAgICAgcHVibGljOgogICAgICAgICBQYXJhbWV0ZXJO
b2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0YSwgY29uc3QgSWRlbnRpZmllciYgaWRlbnQpIEpT
Q19GQVNUX0NBTEwKLSAgICAgICAgICAgIDogTm9kZShnbG9iYWxEYXRhKQorICAgICAgICAgICAg
OiBQYXJzZXJSZWZDb3VudGVkKGdsb2JhbERhdGEpCiAgICAgICAgICAgICAsIG1faWRlbnQoaWRl
bnQpCiAgICAgICAgIHsKICAgICAgICAgfQogCiAgICAgICAgIFBhcmFtZXRlck5vZGUoSlNHbG9i
YWxEYXRhKiBnbG9iYWxEYXRhLCBQYXJhbWV0ZXJOb2RlKiBsLCBjb25zdCBJZGVudGlmaWVyJiBp
ZGVudCkgSlNDX0ZBU1RfQ0FMTAotICAgICAgICAgICAgOiBOb2RlKGdsb2JhbERhdGEpCisgICAg
ICAgICAgICA6IFBhcnNlclJlZkNvdW50ZWQoZ2xvYmFsRGF0YSkKICAgICAgICAgICAgICwgbV9p
ZGVudChpZGVudCkKICAgICAgICAgewogICAgICAgICAgICAgbC0+bV9uZXh0ID0gdGhpczsKICAg
ICAgICAgfQogCi0gICAgICAgIElkZW50aWZpZXIgaWRlbnQoKSBKU0NfRkFTVF9DQUxMIHsgcmV0
dXJuIG1faWRlbnQ7IH0KLSAgICAgICAgUGFyYW1ldGVyTm9kZSAqbmV4dFBhcmFtKCkgSlNDX0ZB
U1RfQ0FMTCB7IHJldHVybiBtX25leHQuZ2V0KCk7IH0KLSAgICAgICAgdmlydHVhbCB2b2lkIHN0
cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CisgICAgICAgIGNvbnN0
IElkZW50aWZpZXImIGlkZW50KCkgY29uc3QgSlNDX0ZBU1RfQ0FMTCB7IHJldHVybiBtX2lkZW50
OyB9CisgICAgICAgIFBhcmFtZXRlck5vZGUqIG5leHRQYXJhbSgpIGNvbnN0IEpTQ19GQVNUX0NB
TEwgeyByZXR1cm4gbV9uZXh0LmdldCgpOyB9CiAgICAgICAgIFBhc3NSZWZQdHI8UGFyYW1ldGVy
Tm9kZT4gcmVsZWFzZU5leHQoKSBKU0NfRkFTVF9DQUxMIHsgcmV0dXJuIG1fbmV4dC5yZWxlYXNl
KCk7IH0KLSAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVuY2UoKSBjb25zdCB7IEFT
U0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gUHJlY0V4cHJlc3Npb247IH0KIAogICAgIHByaXZh
dGU6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBGdW5jRGVjbE5vZGU7Ci0gICAgICAgIGZyaWVuZCBj
bGFzcyBGdW5jRXhwck5vZGU7CiAgICAgICAgIElkZW50aWZpZXIgbV9pZGVudDsKICAgICAgICAg
TGlzdFJlZlB0cjxQYXJhbWV0ZXJOb2RlPiBtX25leHQ7CiAgICAgfTsKIAogICAgIGNsYXNzIFNj
b3BlTm9kZSA6IHB1YmxpYyBCbG9ja05vZGUgewogICAgIHB1YmxpYzoKKyAgICAgICAgdHlwZWRl
ZiBEZWNsYXJhdGlvblN0YWNrczo6VmFyU3RhY2sgVmFyU3RhY2s7CisgICAgICAgIHR5cGVkZWYg
RGVjbGFyYXRpb25TdGFja3M6OkZ1bmN0aW9uU3RhY2sgRnVuY3Rpb25TdGFjazsKKwogICAgICAg
ICBTY29wZU5vZGUoSlNHbG9iYWxEYXRhKiwgY29uc3QgU291cmNlQ29kZSYsIFNvdXJjZUVsZW1l
bnRzKiwgVmFyU3RhY2sqLCBGdW5jdGlvblN0YWNrKiwgQ29kZUZlYXR1cmVzLCBpbnQgbnVtQ29u
c3RhbnRzKSBKU0NfRkFTVF9DQUxMOwogCi0gICAgICAgIHZpcnR1YWwgdm9pZCBzdHJlYW1UbyhT
b3VyY2VTdHJlYW0mKSBjb25zdCBKU0NfRkFTVF9DQUxMOwotICAgICAgICAKICAgICAgICAgY29u
c3QgU291cmNlQ29kZSYgc291cmNlKCkgY29uc3QgeyByZXR1cm4gbV9zb3VyY2U7IH0KICAgICAg
ICAgY29uc3QgVVN0cmluZyYgc291cmNlVVJMKCkgY29uc3QgSlNDX0ZBU1RfQ0FMTCB7IHJldHVy
biBtX3NvdXJjZS5wcm92aWRlcigpLT51cmwoKTsgfQogICAgICAgICBpbnRwdHJfdCBzb3VyY2VJ
RCgpIGNvbnN0IHsgcmV0dXJuIG1fc291cmNlLnByb3ZpZGVyKCktPmFzSUQoKTsgfQpAQCAtMjMw
MCwxMCArMjA0Nyw5IEBAIG5hbWVzcGFjZSBKU0MgewogICAgICAgICAgICAgICAgIFNjb3BlTm9k
ZTo6ZGVyZWYoKTsKICAgICAgICAgfQogCi0gICAgcHJvdGVjdGVkOgorICAgIHByaXZhdGU6CiAg
ICAgICAgIEZ1bmN0aW9uQm9keU5vZGUoSlNHbG9iYWxEYXRhKiwgU291cmNlRWxlbWVudHMqLCBW
YXJTdGFjayosIEZ1bmN0aW9uU3RhY2sqLCBjb25zdCBTb3VyY2VDb2RlJiwgQ29kZUZlYXR1cmVz
LCBpbnQgbnVtQ29uc3RhbnRzKSBKU0NfRkFTVF9DQUxMOwogCi0gICAgcHJpdmF0ZToKICAgICAg
ICAgdm9pZCBnZW5lcmF0ZUNvZGUoU2NvcGVDaGFpbk5vZGUqKSBKU0NfRkFTVF9DQUxMOwogCiAg
ICAgICAgIElkZW50aWZpZXIqIG1fcGFyYW1ldGVyczsKQEAgLTIzMjYsMTUgKzIwNzIsMTAgQEAg
bmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgdmlydHVhbCBSZWdpc3RlcklEKiBlbWl0Q29kZShD
b2RlR2VuZXJhdG9yJiwgUmVnaXN0ZXJJRCogPSAwKSBKU0NfRkFTVF9DQUxMOwogICAgICAgICBK
U0Z1bmN0aW9uKiBtYWtlRnVuY3Rpb24oRXhlY1N0YXRlKiwgU2NvcGVDaGFpbk5vZGUqKSBKU0Nf
RkFTVF9DQUxMOwotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3RyZWFtJikg
Y29uc3QgSlNDX0ZBU1RfQ0FMTDsKLSAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNlZGVu
Y2UoKSBjb25zdCB7IHJldHVybiBQcmVjTWVtYmVyOyB9Ci0gICAgICAgIHZpcnR1YWwgYm9vbCBu
ZWVkc1BhcmVuc0lmTGVmdG1vc3QoKSBjb25zdCB7IHJldHVybiB0cnVlOyB9CiAKICAgICAgICAg
RnVuY3Rpb25Cb2R5Tm9kZSogYm9keSgpIHsgcmV0dXJuIG1fYm9keS5nZXQoKTsgfQogCiAgICAg
cHJpdmF0ZToKLSAgICAgICAgLy8gVXNlZCBmb3Igc3RyZWFtVG8KLSAgICAgICAgZnJpZW5kIGNs
YXNzIFByb3BlcnR5Tm9kZTsKICAgICAgICAgSWRlbnRpZmllciBtX2lkZW50OwogICAgICAgICBS
ZWZQdHI8UGFyYW1ldGVyTm9kZT4gbV9wYXJhbWV0ZXI7CiAgICAgICAgIFJlZlB0cjxGdW5jdGlv
bkJvZHlOb2RlPiBtX2JvZHk7CkBAIC0yMzUzLDcgKzIwOTQsNiBAQCBuYW1lc3BhY2UgSlNDIHsK
IAogICAgICAgICB2aXJ0dWFsIFJlZ2lzdGVySUQqIGVtaXRDb2RlKENvZGVHZW5lcmF0b3ImLCBS
ZWdpc3RlcklEKiA9IDApIEpTQ19GQVNUX0NBTEw7CiAKLSAgICAgICAgdmlydHVhbCB2b2lkIHN0
cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7CiAgICAgICAgIEpTRnVu
Y3Rpb24qIG1ha2VGdW5jdGlvbihFeGVjU3RhdGUqLCBTY29wZUNoYWluTm9kZSopIEpTQ19GQVNU
X0NBTEw7CiAKICAgICAgICAgSWRlbnRpZmllciBtX2lkZW50OwpAQCAtMjM2NSwyNSArMjEwNSwy
MiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgUmVmUHRyPEZ1bmN0aW9uQm9keU5vZGU+IG1f
Ym9keTsKICAgICB9OwogCi0gICAgY2xhc3MgQ2FzZUNsYXVzZU5vZGUgOiBwdWJsaWMgTm9kZSB7
CisgICAgY2xhc3MgQ2FzZUNsYXVzZU5vZGUgOiBwdWJsaWMgUGFyc2VyUmVmQ291bnRlZCB7CiAg
ICAgcHVibGljOgogICAgICAgICBDYXNlQ2xhdXNlTm9kZShKU0dsb2JhbERhdGEqIGdsb2JhbERh
dGEsIEV4cHJlc3Npb25Ob2RlKiBleHByKSBKU0NfRkFTVF9DQUxMCi0gICAgICAgICAgICA6IE5v
ZGUoZ2xvYmFsRGF0YSkKKyAgICAgICAgICAgIDogUGFyc2VyUmVmQ291bnRlZChnbG9iYWxEYXRh
KQogICAgICAgICAgICAgLCBtX2V4cHIoZXhwcikKICAgICAgICAgewogICAgICAgICB9CiAKICAg
ICAgICAgQ2FzZUNsYXVzZU5vZGUoSlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBFeHByZXNzaW9u
Tm9kZSogZXhwciwgU291cmNlRWxlbWVudHMqIGNoaWxkcmVuKSBKU0NfRkFTVF9DQUxMCi0gICAg
ICAgICAgICA6IE5vZGUoZ2xvYmFsRGF0YSkKKyAgICAgICAgICAgIDogUGFyc2VyUmVmQ291bnRl
ZChnbG9iYWxEYXRhKQogICAgICAgICAgICAgLCBtX2V4cHIoZXhwcikKICAgICAgICAgewogICAg
ICAgICAgICAgaWYgKGNoaWxkcmVuKQogICAgICAgICAgICAgICAgIGNoaWxkcmVuLT5yZWxlYXNl
Q29udGVudHNJbnRvVmVjdG9yKG1fY2hpbGRyZW4pOwogICAgICAgICB9CiAKLSAgICAgICAgdmly
dHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NBTEw7Ci0g
ICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBBU1NFUlRfTk9U
X1JFQUNIRUQoKTsgcmV0dXJuIFByZWNFeHByZXNzaW9uOyB9Ci0KICAgICAgICAgRXhwcmVzc2lv
bk5vZGUqIGV4cHIoKSBjb25zdCB7IHJldHVybiBtX2V4cHIuZ2V0KCk7IH0KICAgICAgICAgU3Rh
dGVtZW50VmVjdG9yJiBjaGlsZHJlbigpIHsgcmV0dXJuIG1fY2hpbGRyZW47IH0KIApAQCAtMjM5
MiwxNiArMjEyOSwxNiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgU3RhdGVtZW50VmVjdG9y
IG1fY2hpbGRyZW47CiAgICAgfTsKIAotICAgIGNsYXNzIENsYXVzZUxpc3ROb2RlIDogcHVibGlj
IE5vZGUgeworICAgIGNsYXNzIENsYXVzZUxpc3ROb2RlIDogcHVibGljIFBhcnNlclJlZkNvdW50
ZWQgewogICAgIHB1YmxpYzoKICAgICAgICAgQ2xhdXNlTGlzdE5vZGUoSlNHbG9iYWxEYXRhKiBn
bG9iYWxEYXRhLCBDYXNlQ2xhdXNlTm9kZSogY2xhdXNlKSBKU0NfRkFTVF9DQUxMCi0gICAgICAg
ICAgICA6IE5vZGUoZ2xvYmFsRGF0YSkKKyAgICAgICAgICAgIDogUGFyc2VyUmVmQ291bnRlZChn
bG9iYWxEYXRhKQogICAgICAgICAgICAgLCBtX2NsYXVzZShjbGF1c2UpCiAgICAgICAgIHsKICAg
ICAgICAgfQogCiAgICAgICAgIENsYXVzZUxpc3ROb2RlKEpTR2xvYmFsRGF0YSogZ2xvYmFsRGF0
YSwgQ2xhdXNlTGlzdE5vZGUqIGNsYXVzZUxpc3QsIENhc2VDbGF1c2VOb2RlKiBjbGF1c2UpIEpT
Q19GQVNUX0NBTEwKLSAgICAgICAgICAgIDogTm9kZShnbG9iYWxEYXRhKQorICAgICAgICAgICAg
OiBQYXJzZXJSZWZDb3VudGVkKGdsb2JhbERhdGEpCiAgICAgICAgICAgICAsIG1fY2xhdXNlKGNs
YXVzZSkKICAgICAgICAgewogICAgICAgICAgICAgY2xhdXNlTGlzdC0+bV9uZXh0ID0gdGhpczsK
QEAgLTI0MDksMjAgKzIxNDYsMTcgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAgICAgICAgQ2FzZUNs
YXVzZU5vZGUqIGdldENsYXVzZSgpIGNvbnN0IEpTQ19GQVNUX0NBTEwgeyByZXR1cm4gbV9jbGF1
c2UuZ2V0KCk7IH0KICAgICAgICAgQ2xhdXNlTGlzdE5vZGUqIGdldE5leHQoKSBjb25zdCBKU0Nf
RkFTVF9DQUxMIHsgcmV0dXJuIG1fbmV4dC5nZXQoKTsgfQotICAgICAgICB2aXJ0dWFsIHZvaWQg
c3RyZWFtVG8oU291cmNlU3RyZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKICAgICAgICAgUGFz
c1JlZlB0cjxDbGF1c2VMaXN0Tm9kZT4gcmVsZWFzZU5leHQoKSBKU0NfRkFTVF9DQUxMIHsgcmV0
dXJuIG1fbmV4dC5yZWxlYXNlKCk7IH0KLSAgICAgICAgdmlydHVhbCBQcmVjZWRlbmNlIHByZWNl
ZGVuY2UoKSBjb25zdCB7IEFTU0VSVF9OT1RfUkVBQ0hFRCgpOyByZXR1cm4gUHJlY0V4cHJlc3Np
b247IH0KIAogICAgIHByaXZhdGU6Ci0gICAgICAgIGZyaWVuZCBjbGFzcyBDYXNlQmxvY2tOb2Rl
OwogICAgICAgICBSZWZQdHI8Q2FzZUNsYXVzZU5vZGU+IG1fY2xhdXNlOwogICAgICAgICBMaXN0
UmVmUHRyPENsYXVzZUxpc3ROb2RlPiBtX25leHQ7CiAgICAgfTsKIAotICAgIGNsYXNzIENhc2VC
bG9ja05vZGUgOiBwdWJsaWMgTm9kZSB7CisgICAgY2xhc3MgQ2FzZUJsb2NrTm9kZSA6IHB1Ymxp
YyBQYXJzZXJSZWZDb3VudGVkIHsKICAgICBwdWJsaWM6CiAgICAgICAgIENhc2VCbG9ja05vZGUo
SlNHbG9iYWxEYXRhKiBnbG9iYWxEYXRhLCBDbGF1c2VMaXN0Tm9kZSogbGlzdDEsIENhc2VDbGF1
c2VOb2RlKiBkZWZhdWx0Q2xhdXNlLCBDbGF1c2VMaXN0Tm9kZSogbGlzdDIpIEpTQ19GQVNUX0NB
TEwKLSAgICAgICAgICAgIDogTm9kZShnbG9iYWxEYXRhKQorICAgICAgICAgICAgOiBQYXJzZXJS
ZWZDb3VudGVkKGdsb2JhbERhdGEpCiAgICAgICAgICAgICAsIG1fbGlzdDEobGlzdDEpCiAgICAg
ICAgICAgICAsIG1fZGVmYXVsdENsYXVzZShkZWZhdWx0Q2xhdXNlKQogICAgICAgICAgICAgLCBt
X2xpc3QyKGxpc3QyKQpAQCAtMjQzMSw5ICsyMTY1LDYgQEAgbmFtZXNwYWNlIEpTQyB7CiAKICAg
ICAgICAgUmVnaXN0ZXJJRCogZW1pdENvZGVGb3JCbG9jayhDb2RlR2VuZXJhdG9yJiwgUmVnaXN0
ZXJJRCogaW5wdXQsIFJlZ2lzdGVySUQqIGRzdCA9IDApIEpTQ19GQVNUX0NBTEw7CiAKLSAgICAg
ICAgdmlydHVhbCB2b2lkIHN0cmVhbVRvKFNvdXJjZVN0cmVhbSYpIGNvbnN0IEpTQ19GQVNUX0NB
TEw7Ci0gICAgICAgIHZpcnR1YWwgUHJlY2VkZW5jZSBwcmVjZWRlbmNlKCkgY29uc3QgeyBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsgcmV0dXJuIFByZWNFeHByZXNzaW9uOyB9Ci0KICAgICBwcml2YXRl
OgogICAgICAgICBTd2l0Y2hJbmZvOjpTd2l0Y2hUeXBlIHRyeU9wdGltaXplZFN3aXRjaChWZWN0
b3I8RXhwcmVzc2lvbk5vZGUqLCA4PiYgbGl0ZXJhbFZlY3RvciwgaW50MzJfdCYgbWluX251bSwg
aW50MzJfdCYgbWF4X251bSk7CiAgICAgICAgIFJlZlB0cjxDbGF1c2VMaXN0Tm9kZT4gbV9saXN0
MTsKQEAgLTI0NTIsOCArMjE4Myw2IEBAIG5hbWVzcGFjZSBKU0MgewogCiAgICAgICAgIHZpcnR1
YWwgUmVnaXN0ZXJJRCogZW1pdENvZGUoQ29kZUdlbmVyYXRvciYsIFJlZ2lzdGVySUQqID0gMCkg
SlNDX0ZBU1RfQ0FMTDsKIAotICAgICAgICB2aXJ0dWFsIHZvaWQgc3RyZWFtVG8oU291cmNlU3Ry
ZWFtJikgY29uc3QgSlNDX0ZBU1RfQ0FMTDsKLQogICAgIHByaXZhdGU6CiAgICAgICAgIFJlZlB0
cjxFeHByZXNzaW9uTm9kZT4gbV9leHByOwogICAgICAgICBSZWZQdHI8Q2FzZUJsb2NrTm9kZT4g
bV9ibG9jazsKSW5kZXg6IEphdmFTY3JpcHRDb3JlL3BhcnNlci9ub2RlczJzdHJpbmcuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIEphdmFTY3JpcHRDb3JlL3BhcnNlci9ub2RlczJzdHJpbmcuY3BwCShyZXZp
c2lvbiAzODI0MSkKKysrIEphdmFTY3JpcHRDb3JlL3BhcnNlci9ub2RlczJzdHJpbmcuY3BwCSh3
b3JraW5nIGNvcHkpCkBAIC0xLDkzNiArMCwwIEBACi0vKgotICogIENvcHlyaWdodCAoQykgMjAw
MiBIYXJyaSBQb3J0ZW4gKHBvcnRlbkBrZGUub3JnKQotICogIENvcHlyaWdodCAoQykgMjAwMywg
MjAwNCwgMjAwNSwgMjAwNiwgMjAwNywgMjAwOCBBcHBsZSBJbmMuIEFsbCByaWdodHMgcmVzZXJ2
ZWQuCi0gKiAgQ29weXJpZ2h0IChDKSAyMDA3IEVyaWMgU2VpZGVsIDxlcmljQHdlYmtpdC5vcmc+
Ci0gKgotICogIFRoaXMgbGlicmFyeSBpcyBmcmVlIHNvZnR3YXJlOyB5b3UgY2FuIHJlZGlzdHJp
YnV0ZSBpdCBhbmQvb3IKLSAqICBtb2RpZnkgaXQgdW5kZXIgdGhlIHRlcm1zIG9mIHRoZSBHTlUg
TGlicmFyeSBHZW5lcmFsIFB1YmxpYwotICogIExpY2Vuc2UgYXMgcHVibGlzaGVkIGJ5IHRoZSBG
cmVlIFNvZnR3YXJlIEZvdW5kYXRpb247IGVpdGhlcgotICogIHZlcnNpb24gMiBvZiB0aGUgTGlj
ZW5zZSwgb3IgKGF0IHlvdXIgb3B0aW9uKSBhbnkgbGF0ZXIgdmVyc2lvbi4KLSAqCi0gKiAgVGhp
cyBsaWJyYXJ5IGlzIGRpc3RyaWJ1dGVkIGluIHRoZSBob3BlIHRoYXQgaXQgd2lsbCBiZSB1c2Vm
dWwsCi0gKiAgYnV0IFdJVEhPVVQgQU5ZIFdBUlJBTlRZOyB3aXRob3V0IGV2ZW4gdGhlIGltcGxp
ZWQgd2FycmFudHkgb2YKLSAqICBNRVJDSEFOVEFCSUxJVFkgb3IgRklUTkVTUyBGT1IgQSBQQVJU
SUNVTEFSIFBVUlBPU0UuICBTZWUgdGhlIEdOVQotICogIExpYnJhcnkgR2VuZXJhbCBQdWJsaWMg
TGljZW5zZSBmb3IgbW9yZSBkZXRhaWxzLgotICoKLSAqICBZb3Ugc2hvdWxkIGhhdmUgcmVjZWl2
ZWQgYSBjb3B5IG9mIHRoZSBHTlUgTGlicmFyeSBHZW5lcmFsIFB1YmxpYyBMaWNlbnNlCi0gKiAg
YWxvbmcgd2l0aCB0aGlzIGxpYnJhcnk7IHNlZSB0aGUgZmlsZSBDT1BZSU5HLkxJQi4gIElmIG5v
dCwgd3JpdGUgdG8KLSAqICB0aGUgRnJlZSBTb2Z0d2FyZSBGb3VuZGF0aW9uLCBJbmMuLCA1MSBG
cmFua2xpbiBTdHJlZXQsIEZpZnRoIEZsb29yLAotICogIEJvc3RvbiwgTUEgMDIxMTAtMTMwMSwg
VVNBLgotICoKLSAqLwotCi0jaW5jbHVkZSAiY29uZmlnLmgiCi0jaW5jbHVkZSAiTm9kZXMuaCIK
LQotI2luY2x1ZGUgPHd0Zi9NYXRoRXh0cmFzLmg+Ci0jaW5jbHVkZSA8d3RmL1N0cmluZ0V4dHJh
cy5oPgotI2luY2x1ZGUgPHd0Zi91bmljb2RlL1VuaWNvZGUuaD4KLQotdXNpbmcgbmFtZXNwYWNl
IFdURjsKLXVzaW5nIG5hbWVzcGFjZSBVbmljb2RlOwotCi1uYW1lc3BhY2UgSlNDIHsKLQotLy8g
QSBzaW1wbGUgdGV4dCBzdHJlYW1pbmcgY2xhc3MgdGhhdCBoZWxwcyB3aXRoIGNvZGUgaW5kZW50
YXRpb24uCi0KLWVudW0gRW5kbFR5cGUgeyBFbmRsIH07Ci1lbnVtIEluZGVudFR5cGUgeyBJbmRl
bnQgfTsKLWVudW0gVW5pbmRlbnRUeXBlIHsgVW5pbmRlbnQgfTsKLWVudW0gRG90RXhwclR5cGUg
eyBEb3RFeHByIH07Ci0KLWNsYXNzIFNvdXJjZVN0cmVhbSB7Ci1wdWJsaWM6Ci0gICAgU291cmNl
U3RyZWFtKCkKLSAgICAgICAgOiBtX251bWJlck5lZWRzUGFyZW5zKGZhbHNlKQotICAgICAgICAs
IG1fYXRTdGFydE9mU3RhdGVtZW50KHRydWUpCi0gICAgICAgICwgbV9wcmVjZWRlbmNlKFByZWNF
eHByZXNzaW9uKQotICAgIHsKLSAgICB9Ci0KLSAgICBVU3RyaW5nIHRvU3RyaW5nKCkgY29uc3Qg
eyByZXR1cm4gbV9zdHJpbmc7IH0KLQotICAgIFNvdXJjZVN0cmVhbSYgb3BlcmF0b3I8PChjb25z
dCBJZGVudGlmaWVyJik7Ci0gICAgU291cmNlU3RyZWFtJiBvcGVyYXRvcjw8KGNvbnN0IFVTdHJp
bmcmKTsKLSAgICBTb3VyY2VTdHJlYW0mIG9wZXJhdG9yPDwoY29uc3QgY2hhciopOwotICAgIFNv
dXJjZVN0cmVhbSYgb3BlcmF0b3I8PChkb3VibGUpOwotICAgIFNvdXJjZVN0cmVhbSYgb3BlcmF0
b3I8PChjaGFyKTsKLSAgICBTb3VyY2VTdHJlYW0mIG9wZXJhdG9yPDwoRW5kbFR5cGUpOwotICAg
IFNvdXJjZVN0cmVhbSYgb3BlcmF0b3I8PChJbmRlbnRUeXBlKTsKLSAgICBTb3VyY2VTdHJlYW0m
IG9wZXJhdG9yPDwoVW5pbmRlbnRUeXBlKTsKLSAgICBTb3VyY2VTdHJlYW0mIG9wZXJhdG9yPDwo
RG90RXhwclR5cGUpOwotICAgIFNvdXJjZVN0cmVhbSYgb3BlcmF0b3I8PChQcmVjZWRlbmNlKTsK
LSAgICBTb3VyY2VTdHJlYW0mIG9wZXJhdG9yPDwoY29uc3QgTm9kZSopOwotICAgIHRlbXBsYXRl
IDx0eXBlbmFtZSBUPiBTb3VyY2VTdHJlYW0mIG9wZXJhdG9yPDwoY29uc3QgUmVmUHRyPFQ+JiBu
KSB7IHJldHVybiAqdGhpcyA8PCBuLmdldCgpOyB9Ci0KLXByaXZhdGU6Ci0gICAgVVN0cmluZyBt
X3N0cmluZzsKLSAgICBVU3RyaW5nIG1fc3BhY2VzRm9ySW5kZW50YXRpb247Ci0gICAgYm9vbCBt
X251bWJlck5lZWRzUGFyZW5zOwotICAgIGJvb2wgbV9hdFN0YXJ0T2ZTdGF0ZW1lbnQ7Ci0gICAg
UHJlY2VkZW5jZSBtX3ByZWNlZGVuY2U7Ci19OwotCi0vLyAtLS0tLS0tLQotCi1zdGF0aWMgVVN0
cmluZyBlc2NhcGVTdHJpbmdGb3JQcmV0dHlQcmludGluZyhjb25zdCBVU3RyaW5nJiBzKQotewot
ICAgIFVTdHJpbmcgZXNjYXBlZFN0cmluZzsKLQotICAgIGZvciAoaW50IGkgPSAwOyBpIDwgcy5z
aXplKCk7IGkrKykgewotICAgICAgICBVQ2hhciBjID0gcy5kYXRhKClbaV07Ci0gICAgICAgIHN3
aXRjaCAoYykgewotICAgICAgICAgICAgY2FzZSAnXCInOgotICAgICAgICAgICAgICAgIGVzY2Fw
ZWRTdHJpbmcgKz0gIlxcXCIiOwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAg
Y2FzZSAnXG4nOgotICAgICAgICAgICAgICAgIGVzY2FwZWRTdHJpbmcgKz0gIlxcbiI7Ci0gICAg
ICAgICAgICAgICAgYnJlYWs7Ci0gICAgICAgICAgICBjYXNlICdccic6Ci0gICAgICAgICAgICAg
ICAgZXNjYXBlZFN0cmluZyArPSAiXFxyIjsKLSAgICAgICAgICAgICAgICBicmVhazsKLSAgICAg
ICAgICAgIGNhc2UgJ1x0JzoKLSAgICAgICAgICAgICAgICBlc2NhcGVkU3RyaW5nICs9ICJcXHQi
OwotICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgY2FzZSAnXFwnOgotICAgICAg
ICAgICAgICAgIGVzY2FwZWRTdHJpbmcgKz0gIlxcXFwiOwotICAgICAgICAgICAgICAgIGJyZWFr
OwotICAgICAgICAgICAgZGVmYXVsdDoKLSAgICAgICAgICAgICAgICBpZiAoYyA8IDEyOCAmJiBp
c1ByaW50YWJsZUNoYXIoYykpCi0gICAgICAgICAgICAgICAgICAgIGVzY2FwZWRTdHJpbmcuYXBw
ZW5kKGMpOwotICAgICAgICAgICAgICAgIGVsc2UgewotICAgICAgICAgICAgICAgICAgICBjaGFy
IGhleFZhbHVlWzddOwotICAgICAgICAgICAgICAgICAgICBzbnByaW50ZihoZXhWYWx1ZSwgNywg
IlxcdSUwNHgiLCBjKTsKLSAgICAgICAgICAgICAgICAgICAgZXNjYXBlZFN0cmluZyArPSBoZXhW
YWx1ZTsKLSAgICAgICAgICAgICAgICB9Ci0gICAgICAgIH0KLSAgICB9Ci0KLSAgICByZXR1cm4g
ZXNjYXBlZFN0cmluZzsKLX0KLQotc3RhdGljIGNvbnN0IGNoYXIqIG9wZXJhdG9yU3RyaW5nKE9w
ZXJhdG9yIG9wZXIpCi17Ci0gICAgc3dpdGNoIChvcGVyKSB7Ci0gICAgICAgIGNhc2UgT3BFcXVh
bDoKLSAgICAgICAgICAgIHJldHVybiAiPSI7Ci0gICAgICAgIGNhc2UgT3BNdWx0RXE6Ci0gICAg
ICAgICAgICByZXR1cm4gIio9IjsKLSAgICAgICAgY2FzZSBPcERpdkVxOgotICAgICAgICAgICAg
cmV0dXJuICIvPSI7Ci0gICAgICAgIGNhc2UgT3BQbHVzRXE6Ci0gICAgICAgICAgICByZXR1cm4g
Iis9IjsKLSAgICAgICAgY2FzZSBPcE1pbnVzRXE6Ci0gICAgICAgICAgICByZXR1cm4gIi09IjsK
LSAgICAgICAgY2FzZSBPcExTaGlmdDoKLSAgICAgICAgICAgIHJldHVybiAiPDw9IjsKLSAgICAg
ICAgY2FzZSBPcFJTaGlmdDoKLSAgICAgICAgICAgIHJldHVybiAiPj49IjsKLSAgICAgICAgY2Fz
ZSBPcFVSU2hpZnQ6Ci0gICAgICAgICAgICByZXR1cm4gIj4+Pj0iOwotICAgICAgICBjYXNlIE9w
QW5kRXE6Ci0gICAgICAgICAgICByZXR1cm4gIiY9IjsKLSAgICAgICAgY2FzZSBPcFhPckVxOgot
ICAgICAgICAgICAgcmV0dXJuICJePSI7Ci0gICAgICAgIGNhc2UgT3BPckVxOgotICAgICAgICAg
ICAgcmV0dXJuICJ8PSI7Ci0gICAgICAgIGNhc2UgT3BNb2RFcToKLSAgICAgICAgICAgIHJldHVy
biAiJT0iOwotICAgICAgICBjYXNlIE9wUGx1c1BsdXM6Ci0gICAgICAgICAgICByZXR1cm4gIisr
IjsKLSAgICAgICAgY2FzZSBPcE1pbnVzTWludXM6Ci0gICAgICAgICAgICByZXR1cm4gIi0tIjsK
LSAgICB9Ci0gICAgQVNTRVJUX05PVF9SRUFDSEVEKCk7Ci0gICAgcmV0dXJuICI/Pz8iOwotfQot
Ci1zdGF0aWMgYm9vbCBpc1BhcnNlclJvdW5kVHJpcE51bWJlcihjb25zdCBVU3RyaW5nJiBzdHJp
bmcpCi17Ci0gICAgZG91YmxlIG51bWJlciA9IHN0cmluZy50b0RvdWJsZShmYWxzZSwgZmFsc2Up
OwotICAgIGlmIChpc25hbihudW1iZXIpIHx8IGlzaW5mKG51bWJlcikpCi0gICAgICAgIHJldHVy
biBmYWxzZTsKLSAgICByZXR1cm4gc3RyaW5nID09IFVTdHJpbmc6OmZyb20obnVtYmVyKTsKLX0K
LQotLy8gLS0tLS0tLS0KLQotU291cmNlU3RyZWFtJiBTb3VyY2VTdHJlYW06Om9wZXJhdG9yPDwo
Y2hhciBjKQotewotICAgIG1fbnVtYmVyTmVlZHNQYXJlbnMgPSBmYWxzZTsKLSAgICBtX2F0U3Rh
cnRPZlN0YXRlbWVudCA9IGZhbHNlOwotICAgIC8vIHVzZSB1bnNpZ25lZCBjaGFyIHRvIHplcm8t
ZXh0ZW5kIGluc3RlYWQgb2Ygc2lnbi1leHRlbmQKLSAgICBVQ2hhciBjaChzdGF0aWNfY2FzdDx1
bnNpZ25lZCBjaGFyPihjKSk7Ci0gICAgbV9zdHJpbmcuYXBwZW5kKGNoKTsKLSAgICByZXR1cm4g
KnRoaXM7Ci19Ci0KLVNvdXJjZVN0cmVhbSYgU291cmNlU3RyZWFtOjpvcGVyYXRvcjw8KGNvbnN0
IGNoYXIqIHMpCi17Ci0gICAgbV9udW1iZXJOZWVkc1BhcmVucyA9IGZhbHNlOwotICAgIG1fYXRT
dGFydE9mU3RhdGVtZW50ID0gZmFsc2U7Ci0gICAgbV9zdHJpbmcgKz0gczsKLSAgICByZXR1cm4g
KnRoaXM7Ci19Ci0KLVNvdXJjZVN0cmVhbSYgU291cmNlU3RyZWFtOjpvcGVyYXRvcjw8KGRvdWJs
ZSB2YWx1ZSkKLXsKLSAgICBib29sIG5lZWRQYXJlbnMgPSBtX251bWJlck5lZWRzUGFyZW5zOwot
ICAgIG1fbnVtYmVyTmVlZHNQYXJlbnMgPSBmYWxzZTsKLSAgICBtX2F0U3RhcnRPZlN0YXRlbWVu
dCA9IGZhbHNlOwotCi0gICAgaWYgKG5lZWRQYXJlbnMpCi0gICAgICAgIG1fc3RyaW5nLmFwcGVu
ZCgnKCcpOwotICAgIG1fc3RyaW5nICs9IFVTdHJpbmc6OmZyb20odmFsdWUpOwotICAgIGlmIChu
ZWVkUGFyZW5zKQotICAgICAgICBtX3N0cmluZy5hcHBlbmQoJyknKTsKLQotICAgIHJldHVybiAq
dGhpczsKLX0KLQotU291cmNlU3RyZWFtJiBTb3VyY2VTdHJlYW06Om9wZXJhdG9yPDwoY29uc3Qg
VVN0cmluZyYgcykKLXsKLSAgICBtX251bWJlck5lZWRzUGFyZW5zID0gZmFsc2U7Ci0gICAgbV9h
dFN0YXJ0T2ZTdGF0ZW1lbnQgPSBmYWxzZTsKLSAgICBtX3N0cmluZyArPSBzOwotICAgIHJldHVy
biAqdGhpczsKLX0KLQotU291cmNlU3RyZWFtJiBTb3VyY2VTdHJlYW06Om9wZXJhdG9yPDwoY29u
c3QgSWRlbnRpZmllciYgcykKLXsKLSAgICBtX251bWJlck5lZWRzUGFyZW5zID0gZmFsc2U7Ci0g
ICAgbV9hdFN0YXJ0T2ZTdGF0ZW1lbnQgPSBmYWxzZTsKLSAgICBtX3N0cmluZyArPSBzLnVzdHJp
bmcoKTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVNvdXJjZVN0cmVhbSYgU291cmNlU3RyZWFt
OjpvcGVyYXRvcjw8KGNvbnN0IE5vZGUqIG4pCi17Ci0gICAgYm9vbCBuZWVkUGFyZW5zID0gKG1f
cHJlY2VkZW5jZSAhPSBQcmVjRXhwcmVzc2lvbiAmJiBuLT5wcmVjZWRlbmNlKCkgPiBtX3ByZWNl
ZGVuY2UpIHx8IChtX2F0U3RhcnRPZlN0YXRlbWVudCAmJiBuLT5uZWVkc1BhcmVuc0lmTGVmdG1v
c3QoKSk7Ci0gICAgbV9wcmVjZWRlbmNlID0gUHJlY0V4cHJlc3Npb247Ci0gICAgaWYgKCFuKQot
ICAgICAgICByZXR1cm4gKnRoaXM7Ci0gICAgaWYgKG5lZWRQYXJlbnMpIHsKLSAgICAgICAgbV9u
dW1iZXJOZWVkc1BhcmVucyA9IGZhbHNlOwotICAgICAgICBtX3N0cmluZy5hcHBlbmQoJygnKTsK
LSAgICB9Ci0gICAgbi0+c3RyZWFtVG8oKnRoaXMpOwotICAgIGlmIChuZWVkUGFyZW5zKQotICAg
ICAgICBtX3N0cmluZy5hcHBlbmQoJyknKTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVNvdXJj
ZVN0cmVhbSYgU291cmNlU3RyZWFtOjpvcGVyYXRvcjw8KEVuZGxUeXBlKQotewotICAgIG1fbnVt
YmVyTmVlZHNQYXJlbnMgPSBmYWxzZTsKLSAgICBtX2F0U3RhcnRPZlN0YXRlbWVudCA9IHRydWU7
Ci0gICAgbV9zdHJpbmcuYXBwZW5kKCdcbicpOwotICAgIG1fc3RyaW5nLmFwcGVuZChtX3NwYWNl
c0ZvckluZGVudGF0aW9uKTsKLSAgICByZXR1cm4gKnRoaXM7Ci19Ci0KLVNvdXJjZVN0cmVhbSYg
U291cmNlU3RyZWFtOjpvcGVyYXRvcjw8KEluZGVudFR5cGUpCi17Ci0gICAgbV9udW1iZXJOZWVk
c1BhcmVucyA9IGZhbHNlOwotICAgIG1fYXRTdGFydE9mU3RhdGVtZW50ID0gZmFsc2U7Ci0gICAg
bV9zcGFjZXNGb3JJbmRlbnRhdGlvbiArPSAiICAiOwotICAgIHJldHVybiAqdGhpczsKLX0KLQot
U291cmNlU3RyZWFtJiBTb3VyY2VTdHJlYW06Om9wZXJhdG9yPDwoVW5pbmRlbnRUeXBlKQotewot
ICAgIG1fbnVtYmVyTmVlZHNQYXJlbnMgPSBmYWxzZTsKLSAgICBtX2F0U3RhcnRPZlN0YXRlbWVu
dCA9IGZhbHNlOwotICAgIG1fc3BhY2VzRm9ySW5kZW50YXRpb24gPSBtX3NwYWNlc0ZvckluZGVu
dGF0aW9uLnN1YnN0cigwLCBtX3NwYWNlc0ZvckluZGVudGF0aW9uLnNpemUoKSAtIDIpOwotICAg
IHJldHVybiAqdGhpczsKLX0KLQotaW5saW5lIFNvdXJjZVN0cmVhbSYgU291cmNlU3RyZWFtOjpv
cGVyYXRvcjw8KERvdEV4cHJUeXBlKQotewotICAgIG1fbnVtYmVyTmVlZHNQYXJlbnMgPSB0cnVl
OwotICAgIHJldHVybiAqdGhpczsKLX0KLQotaW5saW5lIFNvdXJjZVN0cmVhbSYgU291cmNlU3Ry
ZWFtOjpvcGVyYXRvcjw8KFByZWNlZGVuY2UgcHJlY2VkZW5jZSkKLXsKLSAgICBtX3ByZWNlZGVu
Y2UgPSBwcmVjZWRlbmNlOwotICAgIHJldHVybiAqdGhpczsKLX0KLQotc3RhdGljIHZvaWQgc3Ry
ZWFtTGVmdEFzc29jaWF0aXZlQmluYXJ5T3BlcmF0b3IoU291cmNlU3RyZWFtJiBzLCBQcmVjZWRl
bmNlIHByZWNlZGVuY2UsCi0gICAgY29uc3QgY2hhciogb3BlcmF0b3JTdHJpbmcsIGNvbnN0IE5v
ZGUqIGxlZnQsIGNvbnN0IE5vZGUqIHJpZ2h0KQotewotICAgIHMgPDwgcHJlY2VkZW5jZSA8PCBs
ZWZ0Ci0gICAgICAgIDw8ICcgJyA8PCBvcGVyYXRvclN0cmluZyA8PCAnICcKLSAgICAgICAgPDwg
c3RhdGljX2Nhc3Q8UHJlY2VkZW5jZT4ocHJlY2VkZW5jZSAtIDEpIDw8IHJpZ2h0OwotfQotCi10
ZW1wbGF0ZSA8dHlwZW5hbWUgVD4gc3RhdGljIGlubGluZSB2b2lkIHN0cmVhbUxlZnRBc3NvY2lh
dGl2ZUJpbmFyeU9wZXJhdG9yKFNvdXJjZVN0cmVhbSYgcywKLSAgICBQcmVjZWRlbmNlIHAsIGNv
bnN0IGNoYXIqIG8sIGNvbnN0IFJlZlB0cjxUPiYgbCwgY29uc3QgUmVmUHRyPFQ+JiByKQotewot
ICAgIHN0cmVhbUxlZnRBc3NvY2lhdGl2ZUJpbmFyeU9wZXJhdG9yKHMsIHAsIG8sIGwuZ2V0KCks
IHIuZ2V0KCkpOwotfQotCi1zdGF0aWMgaW5saW5lIHZvaWQgYnJhY2tldE5vZGVTdHJlYW1UbyhT
b3VyY2VTdHJlYW0mIHMsIGNvbnN0IFJlZlB0cjxFeHByZXNzaW9uTm9kZT4mIGJhc2UsIGNvbnN0
IFJlZlB0cjxFeHByZXNzaW9uTm9kZT4mIHN1YnNjcmlwdCkKLXsKLSAgICBzIDw8IFByZWNDYWxs
IDw8IGJhc2UuZ2V0KCkgPDwgIlsiIDw8IHN1YnNjcmlwdC5nZXQoKSA8PCAiXSI7Ci19Ci0KLXN0
YXRpYyBpbmxpbmUgdm9pZCBkb3ROb2RlU3RyZWFtVG8oU291cmNlU3RyZWFtJiBzLCBjb25zdCBS
ZWZQdHI8RXhwcmVzc2lvbk5vZGU+JiBiYXNlLCBjb25zdCBJZGVudGlmaWVyJiBpZGVudCkKLXsK
LSAgICBzIDw8IERvdEV4cHIgPDwgUHJlY0NhbGwgPDwgYmFzZS5nZXQoKSA8PCAiLiIgPDwgaWRl
bnQ7Ci19Ci0KLS8vIC0tLS0tLS0tCi0KLVVTdHJpbmcgTm9kZTo6dG9TdHJpbmcoKSBjb25zdAot
ewotICAgIFNvdXJjZVN0cmVhbSBzdHJlYW07Ci0gICAgc3RyZWFtVG8oc3RyZWFtKTsKLSAgICBy
ZXR1cm4gc3RyZWFtLnRvU3RyaW5nKCk7Ci19Ci0KLS8vIC0tLS0tLS0tCi0KLXZvaWQgTnVsbE5v
ZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzIDw8ICJudWxsIjsK
LX0KLQotdm9pZCBCb29sZWFuTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAot
ewotICAgIHMgPDwgKG1fdmFsdWUgPyAidHJ1ZSIgOiAiZmFsc2UiKTsKLX0KLQotdm9pZCBOdW1i
ZXJOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgcyA8PCB2YWx1
ZSgpOwotfQotCi12b2lkIFN0cmluZ05vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29u
c3QKLXsKLSAgICBzIDw8ICciJyA8PCBlc2NhcGVTdHJpbmdGb3JQcmV0dHlQcmludGluZyhtX3Zh
bHVlLnVzdHJpbmcoKSkgPDwgJyInOwotfQotCi12b2lkIFJlZ0V4cE5vZGU6OnN0cmVhbVRvKFNv
dXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzIDw8ICcvJyA8PCAgbV9wYXR0ZXJuIDw8ICcv
JyA8PCBtX2ZsYWdzOwotfQotCi12b2lkIFRoaXNOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0m
IHMpIGNvbnN0Ci17Ci0gICAgcyA8PCAidGhpcyI7Ci19Ci0KLXZvaWQgUmVzb2x2ZU5vZGU6OnN0
cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzIDw8IG1faWRlbnQ7Ci19Ci0K
LXZvaWQgRWxlbWVudE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAg
ICBmb3IgKGNvbnN0IEVsZW1lbnROb2RlKiBuID0gdGhpczsgbjsgbiA9IG4tPm1fbmV4dC5nZXQo
KSkgewotICAgICAgICBmb3IgKGludCBpID0gMDsgaSA8IG4tPm1fZWxpc2lvbjsgaSsrKQotICAg
ICAgICAgICAgcyA8PCAnLCc7Ci0gICAgICAgIHMgPDwgUHJlY0Fzc2lnbm1lbnQgPDwgbi0+bV9u
b2RlOwotICAgICAgICBpZiAobi0+bV9uZXh0KQotICAgICAgICAgICAgcyA8PCAnLCc7Ci0gICAg
fQotfQotCi12b2lkIEFycmF5Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAot
ewotICAgIHMgPDwgJ1snIDw8IG1fZWxlbWVudDsKLSAgICBmb3IgKGludCBpID0gMDsgaSA8IG1f
ZWxpc2lvbjsgaSsrKQotICAgICAgICBzIDw8ICcsJzsKLSAgICAvLyBQYXJzZXIgY29uc3VtZXMg
b25lIGVsaXNpb24gY29tbWEgaWYgdGhlcmUncyBhcnJheSBlbGVtZW50cwotICAgIC8vIHByZXNl
bnQgaW4gdGhlIGV4cHJlc3Npb24uCi0gICAgaWYgKG1fb3B0aW9uYWwgJiYgbV9lbGVtZW50KQot
ICAgICAgICBzIDw8ICcsJzsKLSAgICBzIDw8ICddJzsKLX0KLQotdm9pZCBPYmplY3RMaXRlcmFs
Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIGlmIChtX2xpc3Qp
Ci0gICAgICAgIHMgPDwgInsgIiA8PCBtX2xpc3QgPDwgIiB9IjsKLSAgICBlbHNlCi0gICAgICAg
IHMgPDwgInsgfSI7Ci19Ci0KLXZvaWQgUHJvcGVydHlMaXN0Tm9kZTo6c3RyZWFtVG8oU291cmNl
U3RyZWFtJiBzKSBjb25zdAotewotICAgIHMgPDwgbV9ub2RlOwotICAgIGZvciAoY29uc3QgUHJv
cGVydHlMaXN0Tm9kZSogbiA9IG1fbmV4dC5nZXQoKTsgbjsgbiA9IG4tPm1fbmV4dC5nZXQoKSkK
LSAgICAgICAgcyA8PCAiLCAiIDw8IG4tPm1fbm9kZTsKLX0KLQotdm9pZCBQcm9wZXJ0eU5vZGU6
OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzd2l0Y2ggKG1fdHlwZSkg
ewotICAgICAgICBjYXNlIENvbnN0YW50OiB7Ci0gICAgICAgICAgICBVU3RyaW5nIHByb3BlcnR5
TmFtZSA9IG5hbWUoKS51c3RyaW5nKCk7Ci0gICAgICAgICAgICBpZiAoaXNQYXJzZXJSb3VuZFRy
aXBOdW1iZXIocHJvcGVydHlOYW1lKSkKLSAgICAgICAgICAgICAgICBzIDw8IHByb3BlcnR5TmFt
ZTsKLSAgICAgICAgICAgIGVsc2UKLSAgICAgICAgICAgICAgICBzIDw8ICciJyA8PCBlc2NhcGVT
dHJpbmdGb3JQcmV0dHlQcmludGluZyhwcm9wZXJ0eU5hbWUpIDw8ICciJzsKLSAgICAgICAgICAg
IHMgPDwgIjogIiA8PCBQcmVjQXNzaWdubWVudCA8PCBtX2Fzc2lnbjsKLSAgICAgICAgICAgIGJy
ZWFrOwotICAgICAgICB9Ci0gICAgICAgIGNhc2UgR2V0dGVyOgotICAgICAgICBjYXNlIFNldHRl
cjogewotICAgICAgICAgICAgY29uc3QgRnVuY0V4cHJOb2RlKiBmdW5jID0gc3RhdGljX2Nhc3Q8
Y29uc3QgRnVuY0V4cHJOb2RlKj4obV9hc3NpZ24uZ2V0KCkpOwotICAgICAgICAgICAgaWYgKG1f
dHlwZSA9PSBHZXR0ZXIpCi0gICAgICAgICAgICAgICAgcyA8PCAiZ2V0ICI7Ci0gICAgICAgICAg
ICBlbHNlCi0gICAgICAgICAgICAgICAgcyA8PCAic2V0ICI7Ci0gICAgICAgICAgICBzIDw8IGVz
Y2FwZVN0cmluZ0ZvclByZXR0eVByaW50aW5nKG5hbWUoKS51c3RyaW5nKCkpCi0gICAgICAgICAg
ICAgICAgPDwgIigiIDw8IGZ1bmMtPm1fcGFyYW1ldGVyIDw8ICcpJyA8PCBmdW5jLT5tX2JvZHk7
Ci0gICAgICAgICAgICBicmVhazsKLSAgICAgICAgfQotICAgIH0KLX0KLQotdm9pZCBCcmFja2V0
QWNjZXNzb3JOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgYnJh
Y2tldE5vZGVTdHJlYW1UbyhzLCBtX2Jhc2UsIG1fc3Vic2NyaXB0KTsKLX0KLQotdm9pZCBEb3RB
Y2Nlc3Nvck5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBkb3RO
b2RlU3RyZWFtVG8ocywgbV9iYXNlLCBtX2lkZW50KTsKLX0KLQotdm9pZCBBcmd1bWVudExpc3RO
b2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgcyA8PCBQcmVjQXNz
aWdubWVudCA8PCBtX2V4cHI7Ci0gICAgZm9yIChBcmd1bWVudExpc3ROb2RlKiBuID0gbV9uZXh0
LmdldCgpOyBuOyBuID0gbi0+bV9uZXh0LmdldCgpKQotICAgICAgICBzIDw8ICIsICIgPDwgUHJl
Y0Fzc2lnbm1lbnQgPDwgbi0+bV9leHByOwotfQotCi12b2lkIEFyZ3VtZW50c05vZGU6OnN0cmVh
bVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzIDw8ICcoJyA8PCBtX2xpc3ROb2Rl
IDw8ICcpJzsKLX0KLQotdm9pZCBOZXdFeHByTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBz
KSBjb25zdAotewotICAgIHMgPDwgIm5ldyAiIDw8IFByZWNNZW1iZXIgPDwgbV9leHByIDw8IG1f
YXJnczsKLX0KLQotdm9pZCBFdmFsRnVuY3Rpb25DYWxsTm9kZTo6c3RyZWFtVG8oU291cmNlU3Ry
ZWFtJiBzKSBjb25zdAotewotICAgIHMgPDwgImV2YWwiIDw8IG1fYXJnczsKLX0KLQotdm9pZCBG
dW5jdGlvbkNhbGxWYWx1ZU5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsK
LSAgICBzIDw8IFByZWNDYWxsIDw8IG1fZXhwciA8PCBtX2FyZ3M7Ci19Ci0KLXZvaWQgRnVuY3Rp
b25DYWxsUmVzb2x2ZU5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAg
ICBzIDw8IG1faWRlbnQgPDwgbV9hcmdzOwotfQotCi12b2lkIEZ1bmN0aW9uQ2FsbEJyYWNrZXRO
b2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgYnJhY2tldE5vZGVT
dHJlYW1UbyhzLCBtX2Jhc2UsIG1fc3Vic2NyaXB0KTsKLSAgICBzIDw8IG1fYXJnczsKLX0KLQot
dm9pZCBGdW5jdGlvbkNhbGxEb3ROb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0
Ci17Ci0gICAgZG90Tm9kZVN0cmVhbVRvKHMsIG1fYmFzZSwgbV9pZGVudCk7Ci0gICAgcyA8PCBt
X2FyZ3M7Ci19Ci0KLXZvaWQgUG9zdGZpeFJlc29sdmVOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJl
YW0mIHMpIGNvbnN0Ci17Ci0gICAgcyA8PCBtX2lkZW50IDw8IG9wZXJhdG9yU3RyaW5nKG1fb3Bl
cmF0b3IpOwotfQotCi12b2lkIFBvc3RmaXhCcmFja2V0Tm9kZTo6c3RyZWFtVG8oU291cmNlU3Ry
ZWFtJiBzKSBjb25zdAotewotICAgIGJyYWNrZXROb2RlU3RyZWFtVG8ocywgbV9iYXNlLCBtX3N1
YnNjcmlwdCk7Ci0gICAgcyA8PCBvcGVyYXRvclN0cmluZyhtX29wZXJhdG9yKTsKLX0KLQotdm9p
ZCBQb3N0Zml4RG90Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAg
IGRvdE5vZGVTdHJlYW1UbyhzLCBtX2Jhc2UsIG1faWRlbnQpOwotICAgIHMgPDwgb3BlcmF0b3JT
dHJpbmcobV9vcGVyYXRvcik7Ci19Ci0KLXZvaWQgUG9zdGZpeEVycm9yTm9kZTo6c3RyZWFtVG8o
U291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHMgPDwgUHJlY0xlZnRIYW5kU2lkZSA8PCBt
X2V4cHI7Ci0gICAgaWYgKG1fb3BlcmF0b3IgPT0gT3BQbHVzUGx1cykKLSAgICAgICAgcyA8PCAi
KysiOwotICAgIGVsc2UKLSAgICAgICAgcyA8PCAiLS0iOwotfQotCi12b2lkIERlbGV0ZVJlc29s
dmVOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgcyA8PCAiZGVs
ZXRlICIgPDwgbV9pZGVudDsKLX0KLQotdm9pZCBEZWxldGVCcmFja2V0Tm9kZTo6c3RyZWFtVG8o
U291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHMgPDwgImRlbGV0ZSAiOwotICAgIGJyYWNr
ZXROb2RlU3RyZWFtVG8ocywgbV9iYXNlLCBtX3N1YnNjcmlwdCk7Ci19Ci0KLXZvaWQgRGVsZXRl
RG90Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHMgPDwgImRl
bGV0ZSAiOwotICAgIGRvdE5vZGVTdHJlYW1UbyhzLCBtX2Jhc2UsIG1faWRlbnQpOwotfQotCi12
b2lkIERlbGV0ZVZhbHVlTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewot
ICAgIHMgPDwgImRlbGV0ZSAiIDw8IFByZWNVbmFyeSA8PCBtX2V4cHI7Ci19Ci0KLXZvaWQgVm9p
ZE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzIDw8ICJ2b2lk
ICIgPDwgUHJlY1VuYXJ5IDw8IG1fZXhwcjsKLX0KLQotdm9pZCBUeXBlT2ZWYWx1ZU5vZGU6OnN0
cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzIDw8ICJ0eXBlb2YgIiA8PCBQ
cmVjVW5hcnkgPDwgbV9leHByOwotfQotCi12b2lkIFR5cGVPZlJlc29sdmVOb2RlOjpzdHJlYW1U
byhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgcyA8PCAidHlwZW9mICIgPDwgbV9pZGVu
dDsKLX0KLQotdm9pZCBQcmVmaXhSZXNvbHZlTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBz
KSBjb25zdAotewotICAgIHMgPDwgb3BlcmF0b3JTdHJpbmcobV9vcGVyYXRvcikgPDwgbV9pZGVu
dDsKLX0KLQotdm9pZCBQcmVmaXhCcmFja2V0Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBz
KSBjb25zdAotewotICAgIHMgPDwgb3BlcmF0b3JTdHJpbmcobV9vcGVyYXRvcik7Ci0gICAgYnJh
Y2tldE5vZGVTdHJlYW1UbyhzLCBtX2Jhc2UsIG1fc3Vic2NyaXB0KTsKLX0KLQotdm9pZCBQcmVm
aXhEb3ROb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgcyA8PCBv
cGVyYXRvclN0cmluZyhtX29wZXJhdG9yKTsKLSAgICBkb3ROb2RlU3RyZWFtVG8ocywgbV9iYXNl
LCBtX2lkZW50KTsKLX0KLQotdm9pZCBQcmVmaXhFcnJvck5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0
cmVhbSYgcykgY29uc3QKLXsKLSAgICBpZiAobV9vcGVyYXRvciA9PSBPcFBsdXNQbHVzKQotICAg
ICAgICBzIDw8ICIrKyIgPDwgUHJlY1VuYXJ5IDw8IG1fZXhwcjsKLSAgICBlbHNlCi0gICAgICAg
IHMgPDwgIi0tIiA8PCBQcmVjVW5hcnkgPDwgbV9leHByOwotfQotCi12b2lkIFVuYXJ5UGx1c05v
ZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzIDw8ICIrICIgPDwg
UHJlY1VuYXJ5IDw8IG1fZXhwcjsKLX0KLQotdm9pZCBOZWdhdGVOb2RlOjpzdHJlYW1UbyhTb3Vy
Y2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgcyA8PCAiLSAiIDw8IFByZWNVbmFyeSA8PCBtX2V4
cHI7Ci19Ci0KLXZvaWQgQml0d2lzZU5vdE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykg
Y29uc3QKLXsKLSAgICBzIDw8ICJ+IiA8PCBQcmVjVW5hcnkgPDwgbV9leHByOwotfQotCi12b2lk
IExvZ2ljYWxOb3ROb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAg
cyA8PCAiISIgPDwgUHJlY1VuYXJ5IDw8IG1fZXhwcjsKLX0KLQotdm9pZCBNdWx0Tm9kZTo6c3Ry
ZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHN0cmVhbUxlZnRBc3NvY2lhdGl2
ZUJpbmFyeU9wZXJhdG9yKHMsIHByZWNlZGVuY2UoKSwgIioiLCBtX2V4cHIxLCBtX2V4cHIyKTsK
LX0KLQotdm9pZCBEaXZOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0g
ICAgc3RyZWFtTGVmdEFzc29jaWF0aXZlQmluYXJ5T3BlcmF0b3IocywgcHJlY2VkZW5jZSgpLCAi
LyIsIG1fZXhwcjEsIG1fZXhwcjIpOwotfQotCi12b2lkIE1vZE5vZGU6OnN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzdHJlYW1MZWZ0QXNzb2NpYXRpdmVCaW5hcnlPcGVy
YXRvcihzLCBwcmVjZWRlbmNlKCksICIlIiwgbV9leHByMSwgbV9leHByMik7Ci19Ci0KLXZvaWQg
QWRkTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHN0cmVhbUxl
ZnRBc3NvY2lhdGl2ZUJpbmFyeU9wZXJhdG9yKHMsIHByZWNlZGVuY2UoKSwgIisiLCBtX2V4cHIx
LCBtX2V4cHIyKTsKLX0KLQotdm9pZCBTdWJOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMp
IGNvbnN0Ci17Ci0gICAgc3RyZWFtTGVmdEFzc29jaWF0aXZlQmluYXJ5T3BlcmF0b3IocywgcHJl
Y2VkZW5jZSgpLCAiLSIsIG1fZXhwcjEsIG1fZXhwcjIpOwotfQotCi12b2lkIExlZnRTaGlmdE5v
ZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzdHJlYW1MZWZ0QXNz
b2NpYXRpdmVCaW5hcnlPcGVyYXRvcihzLCBwcmVjZWRlbmNlKCksICI8PCIsIG1fZXhwcjEsIG1f
ZXhwcjIpOwotfQotCi12b2lkIFJpZ2h0U2hpZnROb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0m
IHMpIGNvbnN0Ci17Ci0gICAgc3RyZWFtTGVmdEFzc29jaWF0aXZlQmluYXJ5T3BlcmF0b3Iocywg
cHJlY2VkZW5jZSgpLCAiPj4iLCBtX2V4cHIxLCBtX2V4cHIyKTsKLX0KLQotdm9pZCBVbnNpZ25l
ZFJpZ2h0U2hpZnROb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAg
c3RyZWFtTGVmdEFzc29jaWF0aXZlQmluYXJ5T3BlcmF0b3IocywgcHJlY2VkZW5jZSgpLCAiPj4+
IiwgbV9leHByMSwgbV9leHByMik7Ci19Ci0KLXZvaWQgTGVzc05vZGU6OnN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzdHJlYW1MZWZ0QXNzb2NpYXRpdmVCaW5hcnlPcGVy
YXRvcihzLCBwcmVjZWRlbmNlKCksICI8IiwgbV9leHByMSwgbV9leHByMik7Ci19Ci0KLXZvaWQg
R3JlYXRlck5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzdHJl
YW1MZWZ0QXNzb2NpYXRpdmVCaW5hcnlPcGVyYXRvcihzLCBwcmVjZWRlbmNlKCksICI+IiwgbV9l
eHByMSwgbV9leHByMik7Ci19Ci0KLXZvaWQgTGVzc0VxTm9kZTo6c3RyZWFtVG8oU291cmNlU3Ry
ZWFtJiBzKSBjb25zdAotewotICAgIHN0cmVhbUxlZnRBc3NvY2lhdGl2ZUJpbmFyeU9wZXJhdG9y
KHMsIHByZWNlZGVuY2UoKSwgIjw9IiwgbV9leHByMSwgbV9leHByMik7Ci19Ci0KLXZvaWQgR3Jl
YXRlckVxTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHN0cmVh
bUxlZnRBc3NvY2lhdGl2ZUJpbmFyeU9wZXJhdG9yKHMsIHByZWNlZGVuY2UoKSwgIj49IiwgbV9l
eHByMSwgbV9leHByMik7Ci19Ci0KLXZvaWQgSW5zdGFuY2VPZk5vZGU6OnN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzdHJlYW1MZWZ0QXNzb2NpYXRpdmVCaW5hcnlPcGVy
YXRvcihzLCBwcmVjZWRlbmNlKCksICJpbnN0YW5jZW9mIiwgbV9leHByMSwgbV9leHByMik7Ci19
Ci0KLXZvaWQgSW5Ob2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAg
c3RyZWFtTGVmdEFzc29jaWF0aXZlQmluYXJ5T3BlcmF0b3IocywgcHJlY2VkZW5jZSgpLCAiaW4i
LCBtX2V4cHIxLCBtX2V4cHIyKTsKLX0KLQotdm9pZCBFcXVhbE5vZGU6OnN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzdHJlYW1MZWZ0QXNzb2NpYXRpdmVCaW5hcnlPcGVy
YXRvcihzLCBwcmVjZWRlbmNlKCksICI9PSIsIG1fZXhwcjEsIG1fZXhwcjIpOwotfQotCi12b2lk
IE5vdEVxdWFsTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHN0
cmVhbUxlZnRBc3NvY2lhdGl2ZUJpbmFyeU9wZXJhdG9yKHMsIHByZWNlZGVuY2UoKSwgIiE9Iiwg
bV9leHByMSwgbV9leHByMik7Ci19Ci0KLXZvaWQgU3RyaWN0RXF1YWxOb2RlOjpzdHJlYW1UbyhT
b3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgc3RyZWFtTGVmdEFzc29jaWF0aXZlQmluYXJ5
T3BlcmF0b3IocywgcHJlY2VkZW5jZSgpLCAiPT09IiwgbV9leHByMSwgbV9leHByMik7Ci19Ci0K
LXZvaWQgTm90U3RyaWN0RXF1YWxOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0
Ci17Ci0gICAgc3RyZWFtTGVmdEFzc29jaWF0aXZlQmluYXJ5T3BlcmF0b3IocywgcHJlY2VkZW5j
ZSgpLCAiIT09IiwgbV9leHByMSwgbV9leHByMik7Ci19Ci0KLXZvaWQgQml0QW5kTm9kZTo6c3Ry
ZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHN0cmVhbUxlZnRBc3NvY2lhdGl2
ZUJpbmFyeU9wZXJhdG9yKHMsIHByZWNlZGVuY2UoKSwgIiYiLCBtX2V4cHIxLCBtX2V4cHIyKTsK
LX0KLQotdm9pZCBCaXRYT3JOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17
Ci0gICAgc3RyZWFtTGVmdEFzc29jaWF0aXZlQmluYXJ5T3BlcmF0b3IocywgcHJlY2VkZW5jZSgp
LCAiXiIsIG1fZXhwcjEsIG1fZXhwcjIpOwotfQotCi12b2lkIEJpdE9yTm9kZTo6c3RyZWFtVG8o
U291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHN0cmVhbUxlZnRBc3NvY2lhdGl2ZUJpbmFy
eU9wZXJhdG9yKHMsIHByZWNlZGVuY2UoKSwgInwiLCBtX2V4cHIxLCBtX2V4cHIyKTsKLX0KLQot
dm9pZCBMb2dpY2FsT3BOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0g
ICAgc3RyZWFtTGVmdEFzc29jaWF0aXZlQmluYXJ5T3BlcmF0b3IocywgcHJlY2VkZW5jZSgpLCAo
bV9vcGVyYXRvciA9PSBPcExvZ2ljYWxBbmQpID8gIiYmIiA6ICJ8fCIsIG1fZXhwcjEsIG1fZXhw
cjIpOwotfQotCi12b2lkIENvbmRpdGlvbmFsTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBz
KSBjb25zdAotewotICAgIHMgPDwgUHJlY0xvZ2ljYWxPciA8PCBtX2xvZ2ljYWwKLSAgICAgICAg
PDwgIiA/ICIgPDwgUHJlY0Fzc2lnbm1lbnQgPDwgbV9leHByMQotICAgICAgICA8PCAiIDogIiA8
PCBQcmVjQXNzaWdubWVudCA8PCBtX2V4cHIyOwotfQotCi12b2lkIFJlYWRNb2RpZnlSZXNvbHZl
Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHMgPDwgbV9pZGVu
dCA8PCAnICcgPDwgb3BlcmF0b3JTdHJpbmcobV9vcGVyYXRvcikgPDwgJyAnIDw8IFByZWNBc3Np
Z25tZW50IDw8IG1fcmlnaHQ7Ci19Ci0KLXZvaWQgQXNzaWduUmVzb2x2ZU5vZGU6OnN0cmVhbVRv
KFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzIDw8IG1faWRlbnQgPDwgIiA9ICIgPDwg
UHJlY0Fzc2lnbm1lbnQgPDwgbV9yaWdodDsKLX0KLQotdm9pZCBSZWFkTW9kaWZ5QnJhY2tldE5v
ZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBicmFja2V0Tm9kZVN0
cmVhbVRvKHMsIG1fYmFzZSwgbV9zdWJzY3JpcHQpOwotICAgIHMgPDwgJyAnIDw8IG9wZXJhdG9y
U3RyaW5nKG1fb3BlcmF0b3IpIDw8ICcgJyA8PCBQcmVjQXNzaWdubWVudCA8PCBtX3JpZ2h0Owot
fQotCi12b2lkIEFzc2lnbkJyYWNrZXROb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNv
bnN0Ci17Ci0gICAgYnJhY2tldE5vZGVTdHJlYW1UbyhzLCBtX2Jhc2UsIG1fc3Vic2NyaXB0KTsK
LSAgICBzIDw8ICIgPSAiIDw8IFByZWNBc3NpZ25tZW50IDw8IG1fcmlnaHQ7Ci19Ci0KLXZvaWQg
UmVhZE1vZGlmeURvdE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAg
ICBkb3ROb2RlU3RyZWFtVG8ocywgbV9iYXNlLCBtX2lkZW50KTsKLSAgICBzIDw8ICcgJyA8PCBv
cGVyYXRvclN0cmluZyhtX29wZXJhdG9yKSA8PCAnICcgPDwgUHJlY0Fzc2lnbm1lbnQgPDwgbV9y
aWdodDsKLX0KLQotdm9pZCBBc3NpZ25Eb3ROb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMp
IGNvbnN0Ci17Ci0gICAgZG90Tm9kZVN0cmVhbVRvKHMsIG1fYmFzZSwgbV9pZGVudCk7Ci0gICAg
cyA8PCAiID0gIiA8PCBQcmVjQXNzaWdubWVudCA8PCBtX3JpZ2h0OwotfQotCi12b2lkIEFzc2ln
bkVycm9yTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHMgPDwg
UHJlY0xlZnRIYW5kU2lkZSA8PCBtX2xlZnQgPDwgJyAnCi0gICAgICAgIDw8IG9wZXJhdG9yU3Ry
aW5nKG1fb3BlcmF0b3IpIDw8ICcgJyA8PCBQcmVjQXNzaWdubWVudCA8PCBtX3JpZ2h0OwotfQot
Ci12b2lkIENvbW1hTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAg
IHMgPDwgUHJlY0Fzc2lnbm1lbnQgPDwgbV9leHByMSA8PCAiLCAiIDw8IFByZWNBc3NpZ25tZW50
IDw8IG1fZXhwcjI7Ci19Ci0KLXZvaWQgQ29uc3REZWNsTm9kZTo6c3RyZWFtVG8oU291cmNlU3Ry
ZWFtJiBzKSBjb25zdAotewotICAgIHMgPDwgbV9pZGVudDsKLSAgICBpZiAobV9pbml0KQotICAg
ICAgICBzIDw8ICIgPSAiIDw8IFByZWNBc3NpZ25tZW50IDw8IG1faW5pdDsKLSAgICBmb3IgKENv
bnN0RGVjbE5vZGUqIG4gPSBtX25leHQuZ2V0KCk7IG47IG4gPSBuLT5tX25leHQuZ2V0KCkpIHsK
LSAgICAgICAgcyA8PCAiLCAiIDw8IG4tPm1faWRlbnQ7Ci0gICAgICAgIGlmIChuLT5tX2luaXQp
Ci0gICAgICAgICAgICBzIDw8ICIgPSAiIDw8IFByZWNBc3NpZ25tZW50IDw8IG4tPm1faW5pdDsK
LSAgICB9Ci19Ci0KLXZvaWQgQ29uc3RTdGF0ZW1lbnROb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJl
YW0mIHMpIGNvbnN0Ci17Ci0gICAgcyA8PCBFbmRsIDw8ICJjb25zdCAiIDw8IG1fbmV4dCA8PCAn
Oyc7Ci19Ci0KLXN0YXRpYyBpbmxpbmUgdm9pZCBzdGF0ZW1lbnRMaXN0U3RyZWFtVG8oY29uc3Qg
VmVjdG9yPFJlZlB0cjxTdGF0ZW1lbnROb2RlPiA+JiBub2RlcywgU291cmNlU3RyZWFtJiBzKQot
ewotICAgIGZvciAoVmVjdG9yPFJlZlB0cjxTdGF0ZW1lbnROb2RlPiA+Ojpjb25zdF9pdGVyYXRv
ciBwdHIgPSBub2Rlcy5iZWdpbigpOyBwdHIgIT0gbm9kZXMuZW5kKCk7IHB0cisrKQotICAgICAg
ICBzIDw8ICpwdHI7Ci19Ci0KLXZvaWQgQmxvY2tOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0m
IHMpIGNvbnN0Ci17Ci0gICAgcyA8PCBFbmRsIDw8ICJ7IiA8PCBJbmRlbnQ7Ci0gICAgc3RhdGVt
ZW50TGlzdFN0cmVhbVRvKG1fY2hpbGRyZW4sIHMpOwotICAgIHMgPDwgVW5pbmRlbnQgPDwgRW5k
bCA8PCAifSI7Ci19Ci0KLXZvaWQgU2NvcGVOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMp
IGNvbnN0Ci17Ci0gICAgcyA8PCBFbmRsIDw8ICJ7IiA8PCBJbmRlbnQ7Ci0KLSAgICBib29sIHBy
aW50ZWRWYXIgPSBmYWxzZTsKLSAgICBmb3IgKHNpemVfdCBpID0gMDsgaSA8IG1fdmFyU3RhY2su
c2l6ZSgpOyArK2kpIHsKLSAgICAgICAgaWYgKG1fdmFyU3RhY2tbaV0uc2Vjb25kID09IDApIHsK
LSAgICAgICAgICAgIGlmICghcHJpbnRlZFZhcikgewotICAgICAgICAgICAgICAgIHMgPDwgRW5k
bCA8PCAidmFyICI7Ci0gICAgICAgICAgICAgICAgcHJpbnRlZFZhciA9IHRydWU7Ci0gICAgICAg
ICAgICB9IGVsc2UKLSAgICAgICAgICAgICAgICBzIDw8ICIsICI7Ci0gICAgICAgICAgICBzIDw8
IG1fdmFyU3RhY2tbaV0uZmlyc3Q7Ci0gICAgICAgIH0KLSAgICB9Ci0gICAgaWYgKHByaW50ZWRW
YXIpCi0gICAgICAgIHMgPDwgJzsnOwotCi0gICAgc3RhdGVtZW50TGlzdFN0cmVhbVRvKG1fY2hp
bGRyZW4sIHMpOwotICAgIHMgPDwgVW5pbmRlbnQgPDwgRW5kbCA8PCAifSI7Ci19Ci0KLXZvaWQg
RW1wdHlTdGF0ZW1lbnROb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0g
ICAgcyA8PCBFbmRsIDw8ICc7JzsKLX0KLQotdm9pZCBEZWJ1Z2dlclN0YXRlbWVudE5vZGU6OnN0
cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzIDw8IEVuZGwgPDwgImRlYnVn
Z2VyOyI7Ci19Ci0KLXZvaWQgRXhwclN0YXRlbWVudE5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVh
bSYgcykgY29uc3QKLXsKLSAgICBzIDw8IEVuZGwgPDwgbV9leHByIDw8ICc7JzsKLX0KLQotdm9p
ZCBWYXJTdGF0ZW1lbnROb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0g
ICAgcyA8PCBFbmRsIDw8ICJ2YXIgIiA8PCBtX2V4cHIgPDwgJzsnOwotfQotCi12b2lkIElmTm9k
ZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHMgPDwgRW5kbCA8PCAi
aWYgKCIgPDwgbV9jb25kaXRpb24gPDwgJyknIDw8IEluZGVudCA8PCBtX2lmQmxvY2sgPDwgVW5p
bmRlbnQ7Ci19Ci0KLXZvaWQgSWZFbHNlTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBj
b25zdAotewotICAgIElmTm9kZTo6c3RyZWFtVG8ocyk7Ci0gICAgcyA8PCBFbmRsIDw8ICJlbHNl
IiA8PCBJbmRlbnQgPDwgbV9lbHNlQmxvY2sgPDwgVW5pbmRlbnQ7Ci19Ci0KLXZvaWQgRG9XaGls
ZU5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzIDw8IEVuZGwg
PDwgImRvICIgPDwgSW5kZW50IDw8IG1fc3RhdGVtZW50IDw8IFVuaW5kZW50IDw8IEVuZGwKLSAg
ICAgICAgPDwgIndoaWxlICgiIDw8IG1fZXhwciA8PCAiKTsiOwotfQotCi12b2lkIFdoaWxlTm9k
ZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHMgPDwgRW5kbCA8PCAi
d2hpbGUgKCIgPDwgbV9leHByIDw8ICcpJyA8PCBJbmRlbnQgPDwgbV9zdGF0ZW1lbnQgPDwgVW5p
bmRlbnQ7Ci19Ci0KLXZvaWQgRm9yTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25z
dAotewotICAgIHMgPDwgRW5kbCA8PCAiZm9yICgiCi0gICAgICAgIDw8IChtX2V4cHIxV2FzVmFy
RGVjbCA/ICJ2YXIgIiA6ICIiKQotICAgICAgICA8PCBtX2V4cHIxCi0gICAgICAgIDw8ICI7ICIg
PDwgbV9leHByMgotICAgICAgICA8PCAiOyAiIDw8IG1fZXhwcjMKLSAgICAgICAgPDwgJyknIDw8
IEluZGVudCA8PCBtX3N0YXRlbWVudCA8PCBVbmluZGVudDsKLX0KLQotdm9pZCBGb3JJbk5vZGU6
OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzIDw8IEVuZGwgPDwgImZv
ciAoIjsKLSAgICBpZiAobV9pZGVudElzVmFyRGVjbCkgewotICAgICAgICBzIDw8ICJ2YXIgIjsK
LSAgICAgICAgaWYgKG1faW5pdCkKLSAgICAgICAgICAgIHMgPDwgbV9pbml0OwotICAgICAgICBl
bHNlCi0gICAgICAgICAgICBzIDw8IFByZWNMZWZ0SGFuZFNpZGUgPDwgbV9sZXhwcjsKLSAgICB9
IGVsc2UKLSAgICAgICAgcyA8PCBQcmVjTGVmdEhhbmRTaWRlIDw8IG1fbGV4cHI7Ci0KLSAgICBz
IDw8ICIgaW4gIiA8PCBtX2V4cHIgPDwgJyknIDw8IEluZGVudCA8PCBtX3N0YXRlbWVudCA8PCBV
bmluZGVudDsKLX0KLQotdm9pZCBDb250aW51ZU5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYg
cykgY29uc3QKLXsKLSAgICBzIDw8IEVuZGwgPDwgImNvbnRpbnVlIjsKLSAgICBpZiAoIW1faWRl
bnQuaXNOdWxsKCkpCi0gICAgICAgIHMgPDwgJyAnIDw8IG1faWRlbnQ7Ci0gICAgcyA8PCAnOyc7
Ci19Ci0KLXZvaWQgQnJlYWtOb2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17
Ci0gICAgcyA8PCBFbmRsIDw8ICJicmVhayI7Ci0gICAgaWYgKCFtX2lkZW50LmlzTnVsbCgpKQot
ICAgICAgICBzIDw8ICcgJyA8PCBtX2lkZW50OwotICAgIHMgPDwgJzsnOwotfQotCi12b2lkIFJl
dHVybk5vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzIDw8IEVu
ZGwgPDwgInJldHVybiI7Ci0gICAgaWYgKG1fdmFsdWUpCi0gICAgICAgIHMgPDwgJyAnIDw8IG1f
dmFsdWU7Ci0gICAgcyA8PCAnOyc7Ci19Ci0KLXZvaWQgV2l0aE5vZGU6OnN0cmVhbVRvKFNvdXJj
ZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzIDw8IEVuZGwgPDwgIndpdGggKCIgPDwgbV9leHBy
IDw8ICIpICIgPDwgbV9zdGF0ZW1lbnQ7Ci19Ci0KLXZvaWQgQ2FzZUNsYXVzZU5vZGU6OnN0cmVh
bVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBzIDw8IEVuZGw7Ci0gICAgaWYgKG1f
ZXhwcikKLSAgICAgICAgcyA8PCAiY2FzZSAiIDw8IG1fZXhwcjsKLSAgICBlbHNlCi0gICAgICAg
IHMgPDwgImRlZmF1bHQiOwotICAgIHMgPDwgIjoiIDw8IEluZGVudDsKLSAgICBzdGF0ZW1lbnRM
aXN0U3RyZWFtVG8obV9jaGlsZHJlbiwgcyk7Ci0gICAgcyA8PCBVbmluZGVudDsKLX0KLQotdm9p
ZCBDbGF1c2VMaXN0Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAg
IGZvciAoY29uc3QgQ2xhdXNlTGlzdE5vZGUqIG4gPSB0aGlzOyBuOyBuID0gbi0+Z2V0TmV4dCgp
KQotICAgICAgICBzIDw8IG4tPmdldENsYXVzZSgpOwotfQotCi12b2lkIENhc2VCbG9ja05vZGU6
OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAgICBmb3IgKGNvbnN0IENsYXVz
ZUxpc3ROb2RlKiBuID0gbV9saXN0MS5nZXQoKTsgbjsgbiA9IG4tPmdldE5leHQoKSkKLSAgICAg
ICAgcyA8PCBuLT5nZXRDbGF1c2UoKTsKLSAgICBzIDw8IG1fZGVmYXVsdENsYXVzZTsKLSAgICBm
b3IgKGNvbnN0IENsYXVzZUxpc3ROb2RlKiBuID0gbV9saXN0Mi5nZXQoKTsgbjsgbiA9IG4tPmdl
dE5leHQoKSkKLSAgICAgICAgcyA8PCBuLT5nZXRDbGF1c2UoKTsKLX0KLQotdm9pZCBTd2l0Y2hO
b2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgcyA8PCBFbmRsIDw8
ICJzd2l0Y2ggKCIgPDwgbV9leHByIDw8ICIpIHsiCi0gICAgICAgIDw8IEluZGVudCA8PCBtX2Js
b2NrIDw8IFVuaW5kZW50Ci0gICAgICAgIDw8IEVuZGwgPDwgIn0iOwotfQotCi12b2lkIExhYmVs
Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHMgPDwgRW5kbCA8
PCBtX25hbWUgPDwgIjoiIDw8IEluZGVudCA8PCBtX3N0YXRlbWVudCA8PCBVbmluZGVudDsKLX0K
LQotdm9pZCBUaHJvd05vZGU6OnN0cmVhbVRvKFNvdXJjZVN0cmVhbSYgcykgY29uc3QKLXsKLSAg
ICBzIDw8IEVuZGwgPDwgInRocm93ICIgPDwgbV9leHByIDw8ICc7JzsKLX0KLQotdm9pZCBUcnlO
b2RlOjpzdHJlYW1UbyhTb3VyY2VTdHJlYW0mIHMpIGNvbnN0Ci17Ci0gICAgcyA8PCBFbmRsIDw8
ICJ0cnkgIiA8PCBtX3RyeUJsb2NrOwotICAgIGlmIChtX2NhdGNoQmxvY2spCi0gICAgICAgIHMg
PDwgRW5kbCA8PCAiY2F0Y2ggKCIgPDwgbV9leGNlcHRpb25JZGVudCA8PCAnKScgPDwgbV9jYXRj
aEJsb2NrOwotICAgIGlmIChtX2ZpbmFsbHlCbG9jaykKLSAgICAgICAgcyA8PCBFbmRsIDw8ICJm
aW5hbGx5ICIgPDwgbV9maW5hbGx5QmxvY2s7Ci19Ci0KLXZvaWQgUGFyYW1ldGVyTm9kZTo6c3Ry
ZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHMgPDwgbV9pZGVudDsKLSAgICBm
b3IgKFBhcmFtZXRlck5vZGUqIG4gPSBtX25leHQuZ2V0KCk7IG47IG4gPSBuLT5tX25leHQuZ2V0
KCkpCi0gICAgICAgIHMgPDwgIiwgIiA8PCBuLT5tX2lkZW50OwotfQotCi12b2lkIEZ1bmNEZWNs
Tm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBzKSBjb25zdAotewotICAgIHMgPDwgRW5kbCA8
PCAiZnVuY3Rpb24gIiA8PCBtX2lkZW50IDw8ICcoJyA8PCBtX3BhcmFtZXRlciA8PCAnKScgPDwg
bV9ib2R5OwotfQotCi12b2lkIEZ1bmNFeHByTm9kZTo6c3RyZWFtVG8oU291cmNlU3RyZWFtJiBz
KSBjb25zdAotewotICAgIHMgPDwgImZ1bmN0aW9uICIgPDwgbV9pZGVudCA8PCAnKCcgPDwgbV9w
YXJhbWV0ZXIgPDwgJyknIDw8IG1fYm9keTsKLX0KLQotfSAvLyBuYW1lc3BhY2UgSlNDCg==
</data>
<flag name="review"
          id="11477"
          type_id="1"
          status="+"
          setter="timothy"
    />
          </attachment>
      

    </bug>

</bugzilla>