<?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>87161</bug_id>
          
          <creation_ts>2012-05-22 13:36:20 -0700</creation_ts>
          <short_desc>DFG CSE should do redundant store elimination</short_desc>
          <delta_ts>2012-05-25 15:47:08 -0700</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>528+ (Nightly build)</version>
          <rep_platform>All</rep_platform>
          <op_sys>All</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Filip Pizlo">fpizlo</reporter>
          <assigned_to name="Nobody">webkit-unassigned</assigned_to>
          
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>630706</commentid>
    <comment_count>0</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-22 13:36:20 -0700</bug_when>
    <thetext>Patch forthcoming.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630707</commentid>
    <comment_count>1</comment_count>
      <attachid>143353</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-22 13:38:19 -0700</bug_when>
    <thetext>Created attachment 143353
work in progress</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>630860</commentid>
    <comment_count>2</comment_count>
      <attachid>143387</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-22 15:56:21 -0700</bug_when>
    <thetext>Created attachment 143387
the patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631114</commentid>
    <comment_count>3</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-22 20:19:24 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/118108</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631244</commentid>
    <comment_count>4</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-22 22:58:50 -0700</bug_when>
    <thetext>Reopening because the first cut turns out to be wrong.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631254</commentid>
    <comment_count>5</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-22 23:07:17 -0700</bug_when>
    <thetext>Rolled out in http://trac.webkit.org/changeset/118126</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631258</commentid>
    <comment_count>6</comment_count>
      <attachid>143470</attachid>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-22 23:12:35 -0700</bug_when>
    <thetext>Created attachment 143470
the patch

Includes two fixes for handling implicit loads of local variables:

GetScopeChain reads the activation register. Hence, removing a SetLocal to the activation register that is live at the GetScopeChain is wrong.

There are other cases of implicit loads of locals, but they are already marked as either exiting or clobbering, so they are already handled correctly.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631282</commentid>
    <comment_count>7</comment_count>
      <attachid>143470</attachid>
    <who name="Oliver Hunt">oliver</who>
    <bug_when>2012-05-22 23:42:23 -0700</bug_when>
    <thetext>Comment on attachment 143470
the patch

rs=me on some tests for &quot;redundant&quot; store elim on captured variables</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>631325</commentid>
    <comment_count>8</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-23 00:30:50 -0700</bug_when>
    <thetext>Landed in http://trac.webkit.org/changeset/118138

Still trying to figure out reduced tests. Leaving open until I figure it out, or give up.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>634366</commentid>
    <comment_count>9</comment_count>
    <who name="Filip Pizlo">fpizlo</who>
    <bug_when>2012-05-25 15:47:08 -0700</bug_when>
    <thetext>Merged in http://trac.webkit.org/changeset/118579</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143353</attachid>
            <date>2012-05-22 13:38:19 -0700</date>
            <delta_ts>2012-05-22 15:56:21 -0700</delta_ts>
            <desc>work in progress</desc>
            <filename>redundantstore_patch_1.diff</filename>
            <type>text/plain</type>
            <size>18776</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE4MDQwKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDMzIEBA
CisyMDEyLTA1LTIyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIENTRSBzaG91bGQgZG8gcmVkdW5kYW50IHN0b3JlIGVsaW1pbmF0aW9uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzE2MQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgV29yayBpbiBwcm9n
cmVzcy4KKworICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpT
Qzo6REZHOjpBYnN0cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHQ1NFUGhh
c2UuY3BwOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpnbG9iYWxWYXJTdG9yZUVsaW1p
bmF0aW9uKToKKyAgICAgICAgKENTRVBoYXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFz
ZTo6cHV0U3RydWN0dXJlU3RvcmVFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6Q1NF
UGhhc2U6OnB1dEJ5T2Zmc2V0U3RvcmVFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
Q1NFUGhhc2U6OnNldExvY2FsU3RvcmVFbGltaW5hdGlvbik6CisgICAgICAgIChKU0M6OkRGRzo6
Q1NFUGhhc2U6OmVsaW1pbmF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZv
cm1Ob2RlQ1NFKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6
Ok5vZGU6Omhhc1N0cnVjdHVyZVRyYW5zaXRpb25EYXRhKToKKyAgICAgICAgKiBkZmcvREZHTm9k
ZVR5cGUuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZnL0RGR1ByZWRpY3Rpb25Qcm9w
YWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQcmVkaWN0aW9uUHJvcGFnYXRp
b25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82
NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorICAg
ICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpT
cGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisKIDIwMTItMDUtMjEgIEZpbGlwIFBpemxvICA8ZnBp
emxvQGFwcGxlLmNvbT4KIAogICAgICAgICBERkcgQ29udmVydFRoaXMgc2hvdWxkIGp1c3QgYmUg
YSBDaGVja1N0cnVjdHVyZSBpZiB0aGUgc3RydWN0dXJlIGlzIGtub3duCkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlzaW9uIDEx
NzkzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJ
KHdvcmtpbmcgY29weSkKQEAgLTE0MTEsNiArMTQxMSw3IEBAIGJvb2wgQWJzdHJhY3RTdGF0ZTo6
ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICB9CiAgICAgICAgICAgICAKICAgICBjYXNlIFB1dFN0
cnVjdHVyZToKKyAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6CiAgICAgICAgIG5vZGUuc2V0
Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1cmVzKGluZGV4SW5CbG9jayk7
CiAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuc2V0KG5vZGUuc3RydWN0dXJlVHJhbnNp
dGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDU0VQaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2Rm
Zy9ERkdDU0VQaGFzZS5jcHAJKHJldmlzaW9uIDExNzkyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksNiArMTk5LDMz
IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgfQogICAgIAorICAgIE5v
ZGVJbmRleCBnbG9iYWxWYXJTdG9yZUVsaW1pbmF0aW9uKHVuc2lnbmVkIHZhck51bWJlciwgSlNH
bG9iYWxPYmplY3QqIGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQg
aSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7CisgICAgICAgICAgICBOb2RlSW5kZXggaW5kZXgg
PSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFw
aFtpbmRleF07CisgICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAg
ICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7Cisg
ICAgICAgICAgICBjYXNlIFB1dEdsb2JhbFZhcjoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS52
YXJOdW1iZXIoKSA9PSB2YXJOdW1iZXIgJiYgY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihu
b2RlLmNvZGVPcmlnaW4pID09IGdsb2JhbE9iamVjdCkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgY2FzZSBHZXRHbG9iYWxWYXI6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUudmFy
TnVtYmVyKCkgPT0gdmFyTnVtYmVyICYmIGNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9k
ZS5jb2RlT3JpZ2luKSA9PSBnbG9iYWxPYmplY3QpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBOb05vZGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQor
ICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkgfHwgbm9kZS5jYW5F
eGl0KCkpCisgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgfQorICAgICAg
ICByZXR1cm4gTm9Ob2RlOworICAgIH0KKyAgICAKICAgICBOb2RlSW5kZXggZ2V0QnlWYWxMb2Fk
RWxpbWluYXRpb24oTm9kZUluZGV4IGNoaWxkMSwgTm9kZUluZGV4IGNoaWxkMikKICAgICB7CiAg
ICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7CkBAIC0zMDMs
NiArMzMwLDU2IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAg
CisgICAgTm9kZUluZGV4IHB1dFN0cnVjdHVyZVN0b3JlRWxpbWluYXRpb24oTm9kZUluZGV4IGNo
aWxkMSkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBp
LS07KSB7CisgICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQo
aSk7CisgICAgICAgICAgICBpZiAoaW5kZXggPT0gY2hpbGQxKQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOworICAgICAgICAg
ICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgY2FzZSBDaGVja1N0
cnVjdHVyZToKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJlOgorICAgICAgICAgICAgICAg
IGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMSkgLy8gTm8gbmVlZCB0byByZXRyYWNlIG91ciBz
dGVwcy4KKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJl
OgorICAgICAgICAgICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMSkKKyAgICAgICAg
ICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgICAgIAorICAgICAgICAgICAgLy8gUHV0U3RydWN0dXJlIG5lZWRzIHRvIGV4ZWN1dGUg
aWYgd2UgR0MuIEhlbmNlIHRoaXMgbmVlZHMgdG8KKyAgICAgICAgICAgIC8vIGJlIGNhcmVmdWwg
d2l0aCByZXNwZWN0IHRvIG5vZGVzIHRoYXQgR0MuCisgICAgICAgICAgICBjYXNlIENyZWF0ZUFy
Z3VtZW50czoKKyAgICAgICAgICAgIGNhc2UgVGVhck9mZkFyZ3VtZW50czoKKyAgICAgICAgICAg
IGNhc2UgTmV3RnVuY3Rpb25Ob0NoZWNrOgorICAgICAgICAgICAgY2FzZSBOZXdGdW5jdGlvbjoK
KyAgICAgICAgICAgIGNhc2UgTmV3RnVuY3Rpb25FeHByZXNzaW9uOgorICAgICAgICAgICAgY2Fz
ZSBDcmVhdGVBY3RpdmF0aW9uOgorICAgICAgICAgICAgY2FzZSBUZWFyT2ZmQWN0aXZhdGlvbjoK
KyAgICAgICAgICAgIGNhc2UgU3RyQ2F0OgorICAgICAgICAgICAgY2FzZSBUb1ByaW1pdGl2ZToK
KyAgICAgICAgICAgIGNhc2UgTmV3UmVnZXhwOgorICAgICAgICAgICAgY2FzZSBOZXdBcnJheUJ1
ZmZlcjoKKyAgICAgICAgICAgIGNhc2UgTmV3QXJyYXk6CisgICAgICAgICAgICBjYXNlIE5ld09i
amVjdDoKKyAgICAgICAgICAgIGNhc2UgQ3JlYXRlVGhpczoKKyAgICAgICAgICAgICAgICByZXR1
cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAg
ICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtX2dyYXBo
LmNsb2JiZXJzV29ybGQoaW5kZXgpIHx8IG5vZGUuY2FuRXhpdCgpKQorICAgICAgICAgICAgICAg
IHJldHVybiBOb05vZGU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICB9
CisgICAgCiAgICAgTm9kZUluZGV4IGdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKHVuc2lnbmVk
IGlkZW50aWZpZXJOdW1iZXIsIE5vZGVJbmRleCBjaGlsZDEpCiAgICAgewogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewpAQCAtMzQ5LDYgKzQyNiw1MiBA
QCBwcml2YXRlOgogICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgIH0KICAgICAKKyAgICBOb2Rl
SW5kZXggcHV0QnlPZmZzZXRTdG9yZUVsaW1pbmF0aW9uKHVuc2lnbmVkIGlkZW50aWZpZXJOdW1i
ZXIsIE5vZGVJbmRleCBjaGlsZDEpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBt
X2luZGV4SW5CbG9jazsgaS0tOykgeworICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9j
dXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYgKGluZGV4ID09IGNoaWxkMSkKKyAg
ICAgICAgICAgICAgICBicmVhazsKKworICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhb
aW5kZXhdOworICAgICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAg
ICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAg
ICAgICAgICAgY2FzZSBHZXRCeU9mZnNldDoKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5t
X3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUuc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlm
aWVyTnVtYmVyID09IGlkZW50aWZpZXJOdW1iZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVy
biBOb05vZGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAg
ICAgICAgICBjYXNlIFB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1f
c3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZp
ZXJOdW1iZXIgPT0gaWRlbnRpZmllck51bWJlcikgeworICAgICAgICAgICAgICAgICAgICBpZiAo
bm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEpIC8vIE11c3QgYmUgc2FtZSBwcm9wZXJ0eSBzdG9yYWdl
LgorICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAg
ICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CisgICAg
ICAgICAgICBjYXNlIFB1dEJ5VmFsQWxpYXM6CisgICAgICAgICAgICBjYXNlIEdldEJ5VmFsOgor
ICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKSB7CisgICAgICAg
ICAgICAgICAgICAgIC8vIElmIFB1dEJ5VmFsIHNwZWN1bGF0ZXMgdGhhdCBpdCdzIGFjY2Vzc2lu
ZyBhbiBhcnJheSB3aXRoIGFuCisgICAgICAgICAgICAgICAgICAgIC8vIGludGVnZXIgaW5kZXgs
IHRoZW4gaXQncyBpbXBvc3NpYmxlIGZvciBpdCB0byBjYXVzZSBhIHN0cnVjdHVyZQorICAgICAg
ICAgICAgICAgICAgICAvLyBjaGFuZ2UuCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAg
ICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFw
aC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9k
ZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlm
IChub2RlLmNhbkV4aXQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAg
ICB9CisgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgfQorICAgIAogICAgIE5vZGVJbmRleCBn
ZXRQcm9wZXJ0eVN0b3JhZ2VMb2FkRWxpbWluYXRpb24oTm9kZUluZGV4IGNoaWxkMSkKICAgICB7
CiAgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7CkBAIC00
NzksNiArNjAyLDUzIEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgfQog
ICAgIAorICAgIC8vIFRoaXMgcmV0dXJucyB0aGUgRmx1c2ggbm9kZSB0aGF0IGlzIGtlZXBpbmcg
YSBTZXRMb2NhbCBhbGl2ZS4KKyAgICBOb2RlSW5kZXggc2V0TG9jYWxTdG9yZUVsaW1pbmF0aW9u
KFZpcnR1YWxSZWdpc3RlciBsb2NhbCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9
IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7CisgICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBt
X2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtp
bmRleF07CisgICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAg
ICAgICAgICBjYXNlIEdldExvY2FsOgorICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAg
ICAgICAgICAgICBpZiAobm9kZS5sb2NhbCgpID09IGxvY2FsKQorICAgICAgICAgICAgICAgICAg
ICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IAorICAgICAgICAgICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOgorICAgICAgICAgICAgICAgIGlm
IChub2RlLnVubGlua2VkTG9jYWwoKSA9PSBsb2NhbCkKKyAgICAgICAgICAgICAgICAgICAgcmV0
dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAg
ICAgICAgICAgIGNhc2UgRmx1c2g6IHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5sb2NhbCgp
ICE9IGxvY2FsKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBp
ZiAoIWkpCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIE5vZGVJ
bmRleCBwcmV2SW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSAtIDEpOworICAgICAgICAgICAg
ICAgIGlmIChwcmV2SW5kZXggIT0gbm9kZS5jaGlsZDEoKS5pbmRleCgpKQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9ncmFwaFtwcmV2SW5kZXhd
LmxvY2FsKCkgPT0gbG9jYWwpOworICAgICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoW3ByZXZJ
bmRleF0udmFyaWFibGVBY2Nlc3NEYXRhKCkgPT0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7
CisgICAgICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbcHJldkluZGV4XS5zaG91bGRHZW5lcmF0
ZSgpKTsKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaFtwcmV2SW5kZXhdLnJlZkNvdW50KCkg
PiAxKQorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICByZXR1cm4g
aW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQor
ICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIGJyZWFr
OworICAgICAgICAgICAgfQorICAgICAgICAgICAgaWYgKG5vZGUuY2FuRXhpdCgpKQorICAgICAg
ICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5vTm9k
ZTsKKyAgICB9CisgICAgCiAgICAgdm9pZCBwZXJmb3JtU3Vic3RpdHV0aW9uKEVkZ2UmIGNoaWxk
LCBib29sIGFkZFJlZiA9IHRydWUpCiAgICAgewogICAgICAgICAvLyBDaGVjayBpZiB0aGlzIG9w
ZXJhbmQgaXMgYWN0dWFsbHkgdW51c2VkLgpAQCAtNTM2LDYgKzcwNiwxNyBAQCBwcml2YXRlOgog
ICAgICAgICBub2RlLnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOwogICAgIH0KICAgICAK
KyAgICB2b2lkIGVsaW1pbmF0ZShOb2RlSW5kZXggbm9kZUluZGV4LCBOb2RlVHlwZSBwaGFudG9t
VHlwZSA9IFBoYW50b20pCisgICAgeworICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9kZSkK
KyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9kZUlu
ZGV4XTsKKyAgICAgICAgaWYgKG5vZGUucmVmQ291bnQoKSAhPSAxKQorICAgICAgICAgICAgcmV0
dXJuOworICAgICAgICBBU1NFUlQobm9kZS5tdXN0R2VuZXJhdGUoKSk7CisgICAgICAgIG5vZGUu
c2V0T3BBbmREZWZhdWx0RmxhZ3MocGhhbnRvbVR5cGUpOworICAgIH0KKyAgICAKICAgICB2b2lk
IHBlcmZvcm1Ob2RlQ1NFKE5vZGUmIG5vZGUpCiAgICAgewogICAgICAgICBib29sIHNob3VsZEdl
bmVyYXRlID0gbm9kZS5zaG91bGRHZW5lcmF0ZSgpOwpAQCAtNjQ0LDYgKzgyNSwyOCBAQCBwcml2
YXRlOgogICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAg
ICBjYXNlIFNldExvY2FsOiB7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlh
YmxlQWNjZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBp
ZiAoIXZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgICAgIGJy
ZWFrOworICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gdmFyaWFibGVBY2Nlc3NE
YXRhLT5sb2NhbCgpOworICAgICAgICAgICAgTm9kZUluZGV4IHJlcGxhY2VtZW50SW5kZXggPSBz
ZXRMb2NhbFN0b3JlRWxpbWluYXRpb24obG9jYWwpOworICAgICAgICAgICAgaWYgKHJlcGxhY2Vt
ZW50SW5kZXggPT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAg
Tm9kZSYgcmVwbGFjZW1lbnQgPSBtX2dyYXBoW3JlcGxhY2VtZW50SW5kZXhdOworICAgICAgICAg
ICAgQVNTRVJUKHJlcGxhY2VtZW50Lm9wKCkgPT0gRmx1c2gpOworICAgICAgICAgICAgQVNTRVJU
KHJlcGxhY2VtZW50LnJlZkNvdW50KCkgPT0gMSk7CisgICAgICAgICAgICBBU1NFUlQocmVwbGFj
ZW1lbnQuc2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICBBU1NFUlQocmVwbGFjZW1lbnQu
bXVzdEdlbmVyYXRlKCkpOworICAgICAgICAgICAgcmVwbGFjZW1lbnQuc2V0T3BBbmREZWZhdWx0
RmxhZ3MoUGhhbnRvbSk7CisgICAgICAgICAgICBOb2RlSW5kZXggc2V0TG9jYWxJbmRleCA9IHJl
cGxhY2VtZW50LmNoaWxkMSgpLmluZGV4KCk7CisgICAgICAgICAgICBBU1NFUlQobV9ncmFwaFtz
ZXRMb2NhbEluZGV4XS5vcCgpID09IFNldExvY2FsKTsKKyAgICAgICAgICAgIG1fZ3JhcGguY2xl
YXJBbmREZXJlZkNoaWxkMShyZXBsYWNlbWVudCk7CisgICAgICAgICAgICByZXBsYWNlbWVudC5j
aGlsZHJlbi5jaGlsZDEoKSA9IG1fZ3JhcGhbc2V0TG9jYWxJbmRleF0uY2hpbGQxKCk7CisgICAg
ICAgICAgICBtX2dyYXBoLnJlZihyZXBsYWNlbWVudC5jaGlsZDEoKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgSlNDb25zdGFudDoK
ICAgICAgICAgICAgIC8vIFRoaXMgaXMgc3RyYW5nZSwgYnV0IG5lY2Vzc2FyeS4gU29tZSBwaGFz
ZXMgd2lsbCBjb252ZXJ0IG5vZGVzIHRvIGNvbnN0YW50cywKICAgICAgICAgICAgIC8vIHdoaWNo
IG1heSByZXN1bHQgaW4gZHVwbGljYXRlZCBjb25zdGFudHMuIFdlIHVzZSBDU0UgdG8gY2xlYW4g
dGhpcyB1cC4KQEAgLTY4MCw2ICs4ODMsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHNldFJl
cGxhY2VtZW50KGdsb2JhbFZhckxvYWRFbGltaW5hdGlvbihub2RlLnZhck51bWJlcigpLCBjb2Rl
QmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbikpKTsKICAgICAgICAgICAg
IGJyZWFrOwogICAgICAgICAgICAgCisgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyOgorICAgICAg
ICAgICAgZWxpbWluYXRlKGdsb2JhbFZhclN0b3JlRWxpbWluYXRpb24obm9kZS52YXJOdW1iZXIo
KSwgY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pKSk7CisgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAg
ICAgICAgICAgaWYgKG1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkpCiAgICAgICAgICAgICAgICAg
c2V0UmVwbGFjZW1lbnQoZ2V0QnlWYWxMb2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKS5pbmRl
eCgpLCBub2RlLmNoaWxkMigpLmluZGV4KCkpKTsKQEAgLTY5Niw2ICs5MDMsMTAgQEAgcHJpdmF0
ZToKICAgICAgICAgICAgIGlmIChjaGVja1N0cnVjdHVyZUxvYWRFbGltaW5hdGlvbihub2RlLnN0
cnVjdHVyZVNldCgpLCBub2RlLmNoaWxkMSgpLmluZGV4KCkpKQogICAgICAgICAgICAgICAgIGVs
aW1pbmF0ZSgpOwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2Fz
ZSBQdXRTdHJ1Y3R1cmU6CisgICAgICAgICAgICBlbGltaW5hdGUocHV0U3RydWN0dXJlU3RvcmVF
bGltaW5hdGlvbihub2RlLmNoaWxkMSgpLmluZGV4KCkpLCBQaGFudG9tUHV0U3RydWN0dXJlKTsK
KyAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjoKICAgICAg
ICAgICAgIGlmIChjaGVja0Z1bmN0aW9uRWxpbWluYXRpb24obm9kZS5mdW5jdGlvbigpLCBub2Rl
LmNoaWxkMSgpLmluZGV4KCkpKQpAQCAtNzE3LDYgKzkyOCwxMCBAQCBwcml2YXRlOgogICAgICAg
ICAgICAgc2V0UmVwbGFjZW1lbnQoZ2V0QnlPZmZzZXRMb2FkRWxpbWluYXRpb24obV9ncmFwaC5t
X3N0b3JhZ2VBY2Nlc3NEYXRhW25vZGUuc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlm
aWVyTnVtYmVyLCBub2RlLmNoaWxkMSgpLmluZGV4KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6CisgICAgICAgICAgICBlbGlt
aW5hdGUocHV0QnlPZmZzZXRTdG9yZUVsaW1pbmF0aW9uKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNz
RGF0YVtub2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlciwgbm9k
ZS5jaGlsZDEoKS5pbmRleCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAog
ICAgICAgICBkZWZhdWx0OgogICAgICAgICAgICAgLy8gZG8gbm90aGluZy4KICAgICAgICAgICAg
IGJyZWFrOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgKPT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHJldmlzaW9uIDEx
NzkzMSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZS5oCSh3b3JraW5nIGNv
cHkpCkBAIC01ODksNyArNTg5LDcgQEAgc3RydWN0IE5vZGUgewogCiAgICAgYm9vbCBoYXNTdHJ1
Y3R1cmVUcmFuc2l0aW9uRGF0YSgpCiAgICAgewotICAgICAgICByZXR1cm4gb3AoKSA9PSBQdXRT
dHJ1Y3R1cmU7CisgICAgICAgIHJldHVybiBvcCgpID09IFB1dFN0cnVjdHVyZSB8fCBvcCgpID09
IFBoYW50b21QdXRTdHJ1Y3R1cmU7CiAgICAgfQogICAgIAogICAgIFN0cnVjdHVyZVRyYW5zaXRp
b25EYXRhJiBzdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR05vZGVUeXBlLmgKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdOb2RlVHlwZS5oCShyZXZpc2lvbiAxMTc5MjYpCisrKyBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHdvcmtpbmcgY29weSkKQEAgLTM3LDExICszNywx
MSBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAvLyBUaGlzIG1hY3JvIGRlZmlu
ZXMgYSBzZXQgb2YgaW5mb3JtYXRpb24gYWJvdXQgYWxsIGtub3duIG5vZGUgdHlwZXMsIHVzZWQg
dG8gcG9wdWxhdGUgTm9kZUlkLCBOb2RlVHlwZSBiZWxvdy4KICNkZWZpbmUgRk9SX0VBQ0hfREZH
X09QKG1hY3JvKSBcCiAgICAgLyogQSBjb25zdGFudCBpbiB0aGUgQ29kZUJsb2NrJ3MgY29uc3Rh
bnQgcG9vbC4gKi9cCi0gICAgbWFjcm8oSlNDb25zdGFudCwgTm9kZVJlc3VsdEpTKSBcCisgICAg
bWFjcm8oSlNDb25zdGFudCwgTm9kZVJlc3VsdEpTIHwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAg
XAogICAgIC8qIEEgY29uc3RhbnQgbm90IGluIHRoZSBDb2RlQmxvY2sncyBjb25zdGFudCBwb29s
LiBVc2VzIGdldCBwYXRjaGVkIHRvIGp1bXBzIHRoYXQgZXhpdCB0aGUgKi9cCiAgICAgLyogY29k
ZSBibG9jay4gKi9cCi0gICAgbWFjcm8oV2Vha0pTQ29uc3RhbnQsIE5vZGVSZXN1bHRKUykgXAor
ICAgIG1hY3JvKFdlYWtKU0NvbnN0YW50LCBOb2RlUmVzdWx0SlMgfCBOb2RlRG9lc05vdEV4aXQp
IFwKICAgICBcCiAgICAgLyogTm9kZXMgZm9yIGhhbmRsaW5nIGZ1bmN0aW9ucyAoYm90aCBhcyBj
YWxsIGFuZCBhcyBjb25zdHJ1Y3QpLiAqL1wKICAgICBtYWNybyhDb252ZXJ0VGhpcywgTm9kZVJl
c3VsdEpTKSBcCkBAIC01MywxMCArNTMsMTAgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBE
RkcgewogICAgIC8qIFZhcmlhYmxlQWNjZXNzRGF0YSwgYW5kIHRodXMgd2lsbCBzaGFyZSBwcmVk
aWN0aW9ucy4gKi9cCiAgICAgbWFjcm8oR2V0TG9jYWwsIE5vZGVSZXN1bHRKUykgXAogICAgIG1h
Y3JvKFNldExvY2FsLCAwKSBcCi0gICAgbWFjcm8oUGhhbnRvbSwgTm9kZU11c3RHZW5lcmF0ZSkg
XAotICAgIG1hY3JvKE5vcCwgMCkgXAotICAgIG1hY3JvKFBoaSwgMCkgXAotICAgIG1hY3JvKEZs
dXNoLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oUGhhbnRvbSwgTm9kZU11c3RHZW5l
cmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkgXAorICAgIG1hY3JvKE5vcCwgMCB8IE5vZGVEb2VzTm90
RXhpdCkgXAorICAgIG1hY3JvKFBoaSwgMCB8IE5vZGVEb2VzTm90RXhpdCkgXAorICAgIG1hY3Jv
KEZsdXNoLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgXAogICAg
IC8qIEdldCB0aGUgdmFsdWUgb2YgYSBsb2NhbCB2YXJpYWJsZSwgd2l0aG91dCBsaW5raW5nIGlu
dG8gdGhlIFZhcmlhYmxlQWNjZXNzRGF0YSAqL1wKICAgICAvKiBuZXR3b3JrLiBUaGlzIGlzIG9u
bHkgdmFsaWQgZm9yIHZhcmlhYmxlIGFjY2Vzc2VzIHdob3NlIHByZWRpY3Rpb25zIG9yaWdpbmF0
ZWQgKi9cCkBAIC02NCwxMiArNjQsMTIgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcg
ewogICAgIG1hY3JvKEdldExvY2FsVW5saW5rZWQsIE5vZGVSZXN1bHRKUykgXAogICAgIFwKICAg
ICAvKiBNYXJrZXIgZm9yIGFuIGFyZ3VtZW50IGJlaW5nIHNldCBhdCB0aGUgcHJvbG9ndWUgb2Yg
YSBmdW5jdGlvbi4gKi9cCi0gICAgbWFjcm8oU2V0QXJndW1lbnQsIDApIFwKKyAgICBtYWNybyhT
ZXRBcmd1bWVudCwgMCB8IE5vZGVEb2VzTm90RXhpdCkgXAogICAgIFwKICAgICAvKiBIaW50IHRo
YXQgaW5saW5pbmcgYmVnaW5zIGhlcmUuIE5vIGNvZGUgaXMgZ2VuZXJhdGVkIGZvciB0aGlzIG5v
ZGUuIEl0J3Mgb25seSAqL1wKICAgICAvKiB1c2VkIGZvciBjb3B5aW5nIE9TUiBkYXRhIGludG8g
aW5saW5lIGZyYW1lIGRhdGEsIHRvIHN1cHBvcnQgcmVpZmljYXRpb24gb2YgKi9cCiAgICAgLyog
Y2FsbCBmcmFtZXMgb2YgaW5saW5lZCBmdW5jdGlvbnMuICovXAotICAgIG1hY3JvKElubGluZVN0
YXJ0LCAwKSBcCisgICAgbWFjcm8oSW5saW5lU3RhcnQsIDAgfCBOb2RlRG9lc05vdEV4aXQpIFwK
ICAgICBcCiAgICAgLyogTm9kZXMgZm9yIGJpdHdpc2Ugb3BlcmF0aW9ucy4gKi9cCiAgICAgbWFj
cm8oQml0QW5kLCBOb2RlUmVzdWx0SW50MzIpIFwKQEAgLTExMywxMSArMTEzLDEyIEBAIG5hbWVz
cGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhQdXRCeUlkLCBOb2RlTXVzdEdl
bmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKICAgICBtYWNybyhQdXRCeUlkRGlyZWN0LCBO
b2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKICAgICBtYWNybyhDaGVja1N0
cnVjdHVyZSwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKFB1dFN0cnVjdHVyZSwgTm9k
ZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCisgICAgbWFjcm8oUHV0U3RydWN0
dXJlLCBOb2RlTXVzdEdlbmVyYXRlKSBcCisgICAgbWFjcm8oUGhhbnRvbVB1dFN0cnVjdHVyZSwg
Tm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVEb2VzTm90RXhpdCkgXAogICAgIG1hY3JvKEdldFByb3Bl
cnR5U3RvcmFnZSwgTm9kZVJlc3VsdFN0b3JhZ2UpIFwKICAgICBtYWNybyhHZXRJbmRleGVkUHJv
cGVydHlTdG9yYWdlLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZVJlc3VsdFN0b3JhZ2UpIFwKICAg
ICBtYWNybyhHZXRCeU9mZnNldCwgTm9kZVJlc3VsdEpTKSBcCi0gICAgbWFjcm8oUHV0QnlPZmZz
ZXQsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAorICAgIG1hY3JvKFB1
dEJ5T2Zmc2V0LCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oR2V0QXJyYXlMZW5ndGgs
IE5vZGVSZXN1bHRJbnQzMikgXAogICAgIG1hY3JvKEdldEFyZ3VtZW50c0xlbmd0aCwgTm9kZVJl
c3VsdEludDMyKSBcCiAgICAgbWFjcm8oR2V0U3RyaW5nTGVuZ3RoLCBOb2RlUmVzdWx0SW50MzIp
IFwKQEAgLTEzNSw3ICsxMzYsNyBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAg
ICAgbWFjcm8oR2V0U2NvcGVkVmFyLCBOb2RlUmVzdWx0SlMgfCBOb2RlTXVzdEdlbmVyYXRlKSBc
CiAgICAgbWFjcm8oUHV0U2NvcGVkVmFyLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJz
V29ybGQpIFwKICAgICBtYWNybyhHZXRHbG9iYWxWYXIsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0
R2VuZXJhdGUpIFwKLSAgICBtYWNybyhQdXRHbG9iYWxWYXIsIE5vZGVNdXN0R2VuZXJhdGUgfCBO
b2RlQ2xvYmJlcnNXb3JsZCkgXAorICAgIG1hY3JvKFB1dEdsb2JhbFZhciwgTm9kZU11c3RHZW5l
cmF0ZSkgXAogICAgIG1hY3JvKENoZWNrRnVuY3Rpb24sIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAg
ICBcCiAgICAgLyogT3B0aW1pemF0aW9ucyBmb3IgYXJyYXkgbXV0YXRpb24uICovXApJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5j
cHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9u
UHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDExNzkyNikKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC02MTgsNyArNjE4LDggQEAgcHJpdmF0ZToKICAgICAgICAgY2FzZSBJbnQzMlRvRG91
YmxlOgogICAgICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6CiAgICAgICAgIGNhc2UgR2V0TXlB
cmd1bWVudHNMZW5ndGg6Ci0gICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOiB7CisgICAg
ICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgorICAgICAgICBjYXNlIFBoYW50b21QdXRTdHJ1
Y3R1cmU6IHsKICAgICAgICAgICAgIC8vIFRoaXMgbm9kZSBzaG91bGQgbmV2ZXIgYmUgdmlzaWJs
ZSBhdCB0aGlzIHN0YWdlIG9mIGNvbXBpbGF0aW9uLiBJdCBpcwogICAgICAgICAgICAgLy8gaW5z
ZXJ0ZWQgYnkgZml4dXAoKSwgd2hpY2ggZm9sbG93cyB0aGlzIHBoYXNlLgogICAgICAgICAgICAg
QVNTRVJUX05PVF9SRUFDSEVEKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RG
R1NwZWN1bGF0aXZlSklUMzJfNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHJldmlzaW9uIDExNzkzMSkKKysr
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0ODcsNiArMzQ4NywxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAg
Y2FzZSBQaGFudG9tUHV0U3RydWN0dXJlOiB7CisgICAgICAgIG1faml0LmFkZFdlYWtSZWZlcmVu
Y2VUcmFuc2l0aW9uKAorICAgICAgICAgICAgbm9kZS5jb2RlT3JpZ2luLmNvZGVPcmlnaW5Pd25l
cigpLAorICAgICAgICAgICAgbm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3Vz
U3RydWN0dXJlLAorICAgICAgICAgICAgbm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5l
d1N0cnVjdHVyZSk7CisgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorCiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6IHsKICAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSUmVn
IGJhc2VHUFIgPSBiYXNlLmdwcigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9E
RkdTcGVjdWxhdGl2ZUpJVDY0LmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCShyZXZpc2lvbiAxMTc5MzEpCisrKyBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0zNDk0LDYgKzM0OTQsMTUgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZShO
b2RlJiBub2RlKQogICAgICAgICBicmVhazsKICAgICB9CiAgICAgICAgIAorICAgIGNhc2UgUGhh
bnRvbVB1dFN0cnVjdHVyZTogeworICAgICAgICBtX2ppdC5hZGRXZWFrUmVmZXJlbmNlVHJhbnNp
dGlvbigKKyAgICAgICAgICAgIG5vZGUuY29kZU9yaWdpbi5jb2RlT3JpZ2luT3duZXIoKSwKKyAg
ICAgICAgICAgIG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5wcmV2aW91c1N0cnVjdHVy
ZSwKKyAgICAgICAgICAgIG5vZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1
cmUpOworICAgICAgICBub1Jlc3VsdChtX2NvbXBpbGVJbmRleCk7CisgICAgICAgIGJyZWFrOwor
ICAgIH0KKyAgICAgICAgCiAgICAgY2FzZSBQdXRTdHJ1Y3R1cmU6IHsKICAgICAgICAgU3BlY3Vs
YXRlQ2VsbE9wZXJhbmQgYmFzZSh0aGlzLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgR1BSUmVn
IGJhc2VHUFIgPSBiYXNlLmdwcigpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143387</attachid>
            <date>2012-05-22 15:56:21 -0700</date>
            <delta_ts>2012-05-22 23:12:35 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>redundantstore_patch_2.diff</filename>
            <type>text/plain</type>
            <size>30355</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE4MDczKQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDc5IEBA
CisyMDEyLTA1LTIyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIENTRSBzaG91bGQgZG8gcmVkdW5kYW50IHN0b3JlIGVsaW1pbmF0aW9uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzE2MQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorICAgICAgICAKKyAgICAgICAgVGhpcyBwYXRjaCBh
ZGRzIHJlZHVuZGFudCBzdG9yZSBlbGltaW5hdGlvbi4gRm9yIGV4YW1wbGUsIGNvbnNpZGVyIHRo
aXMKKyAgICAgICAgY29kZToKKyAgICAgICAgCisgICAgICAgIG8ueCA9IDQyOworICAgICAgICBv
LnggPSA4NDsKKyAgICAgICAgCisgICAgICAgIElmIG8ueCBpcyBzcGVjdWxhdGVkIHRvIGJlIGEg
d2VsbC1iZWhhdmVkIGZpZWxkLCB0aGUgZmlyc3QgYXNzaWdubWVudCBpcworICAgICAgICB1bm5l
Y2Vzc2FyeSwgc2luY2UgdGhlIHNlY29uZCBqdXN0IG92ZXJ3cml0ZXMgaXQuIFdlIHdvdWxkIGxp
a2UgdG8KKyAgICAgICAgZWxpbWluYXRlIHRoZSBmaXJzdCBhc3NpZ25tZW50IGluIHRoZXNlIGNh
c2VzLiBUaGUgbmVlZCBmb3IgdGhpcworICAgICAgICBvcHRpbWl6YXRpb24gYXJpc2VzIG1vc3Rs
eSBmcm9tIHN0b3JlcyB0aGF0IG91ciBydW50aW1lIHJlcXVpcmVzLiBGb3IKKyAgICAgICAgZXhh
bXBsZToKKyAgICAgICAgCisgICAgICAgIG8gPSB7ZjoxLCBnOjIsIGg6M307CisgICAgICAgIAor
ICAgICAgICBUaGlzIHdpbGwgaGF2ZSBmb3VyIGFzc2lnbm1lbnRzIHRvIHRoZSBzdHJ1Y3R1cmUg
Zm9yIHRoZSBuZXdseSBjcmVhdGVkCisgICAgICAgIG9iamVjdCAtIG9uZSBhc3NpZ25tZW50IGZv
ciB0aGUgZW1wdHkgc3RydWN0dXJlLCBvbmUgZm9yIHtmfSwgb25lIGZvcgorICAgICAgICB7Ziwg
Z30sIGFuZCBvbmUgZm9yIHtmLCBnLCBofS4gV2Ugd291bGQgbGlrZSB0byBvbmx5IGhhdmUgdGhl
IGxhc3Qgb2YKKyAgICAgICAgdGhvc2UgYXNzaWdtZW50cyBpbiB0aGlzIGNhc2UuCisgICAgICAg
IAorICAgICAgICBJbnRyaWd1aW5nbHksIGRvaW5nIHNvIGZvciBjYXB0dXJlZCB2YXJpYWJsZXMg
YnJlYWtzIHRoZSB3YXkgYXJndW1lbnRzCisgICAgICAgIHNpbXBsaWZpY2F0aW9uIHVzZWQgdG8g
d29yay4gQ29uc2lkZXIgdGhhdCBwcmlvciB0byBlaXRoZXIgYXJndW1lbnRzCisgICAgICAgIHNp
bXBsaWZpY2F0aW9uIG9yIHN0b3JlIGVsaW1pbmF0aW9uIHdlIHdpbGwgaGF2ZSBJUiB0aGF0IGxv
b2tzIGxpa2U6CisgICAgICAgIAorICAgICAgICBhOiBTZXRMb2NhbChyMCwgRW1wdHkpCisgICAg
ICAgIGI6IFNldExvY2FsKHIxLCBFbXB0eSkKKyAgICAgICAgYzogR2V0TG9jYWwocjApCisgICAg
ICAgIGQ6IENyZWF0ZUFyZ3VtZW50cyhAYykKKyAgICAgICAgZTogU2V0TG9jYWwocjAsIEBkKQor
ICAgICAgICBmOiBTZXRMb2NhbChyMSwgQGQpCisgICAgICAgIAorICAgICAgICBUaGVuIHJlZHVu
ZGFudCBzdG9yZSBlbGltaW5hdGlvbiB3aWxsIGVsaW1pbmF0ZSB0aGUgc3RvcmVzIHRoYXQKKyAg
ICAgICAgaW5pdGlhbGl6ZSB0aGUgYXJndW1lbnRzIHJlZ2lzdGVycyB0byBFbXB0eSwgYnV0IHRo
ZW4gYXJndW1lbnRzCisgICAgICAgIHNpbXBsaWZpY2F0aW9uIGVsaW1pbmF0ZXMgdGhlIHN0b3Jl
cyB0aGF0IGluaXRpYWxpemUgdGhlIGFyZ3VtZW50cyB0bworICAgICAgICB0aGUgbmV3bHkgY3Jl
YXRlZCBhcmd1bWVudHMgLSBhbmQgYXQgdGhpcyBwb2ludCB3ZSBubyBsb25nZXIgaGF2ZSBhbnkK
KyAgICAgICAgc3RvcmVzIHRvIHRoZSBhcmd1bWVudHMgcmVnaXN0ZXIsIGxlYWRpbmcgdG8gaGls
YXJpb3VzIGNyYXNoZXMuIFRoaXMKKyAgICAgICAgcGF0Y2ggdGhlcmVmb3JlIGNoYW5nZXMgYXJn
dW1lbnRzIHNpbXBsaWZpY2F0aW9uIHRvIHJlcGxhY2UKKyAgICAgICAgQ3JlYXRlQXJndW1lbnRz
IHdpdGggSlNDb25zdGFudChFbXB0eSkgcmF0aGVyIHRoYW4gZWxpbWluYXRpbmcgdGhlCisgICAg
ICAgIFNldExvY2Fscy4gQnV0IHRoaXMgcmV2ZWFsZWQgYnVncyB3aGVyZSBhcmd1bWVudHMgc2lt
cGxpZmljYXRpb24gd2FzCisgICAgICAgIGJlaW5nIG92ZXJ6ZWFsb3VzLCBzbyBJIGZpeGVkIHRo
b3NlIGJ1Z3MuCisgICAgICAgIAorICAgICAgICBUaGlzIGlzIGEgbWlub3Igc3BlZWQtdXAgb24g
VjgvZWFybHkgYW5kIGEgaGFuZGZ1bCBvZiBvdGhlciB0ZXN0cy4KKworICAgICAgICAqIGRmZy9E
RkdBYnN0cmFjdFN0YXRlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpl
eGVjdXRlKToKKyAgICAgICAgKiBkZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5j
cHA6CisgICAgICAgIChKU0M6OkRGRzo6QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZTo6cnVu
KToKKyAgICAgICAgKEpTQzo6REZHOjpBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlOjpvYnNl
cnZlQmFkQXJndW1lbnRzVXNlKToKKyAgICAgICAgKEpTQzo6REZHOjpBcmd1bWVudHNTaW1wbGlm
aWNhdGlvblBoYXNlOjpvYnNlcnZlQmFkQXJndW1lbnRzVXNlcyk6CisgICAgICAgIChKU0M6OkRG
Rzo6QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZTo6b2JzZXJ2ZVByb3BlckFyZ3VtZW50c1Vz
ZSk6CisgICAgICAgICogZGZnL0RGR0NTRVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpD
U0VQaGFzZTo6Z2xvYmFsVmFyU3RvcmVFbGltaW5hdGlvbik6CisgICAgICAgIChDU0VQaGFzZSk6
CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnB1dFN0cnVjdHVyZVN0b3JlRWxpbWluYXRp
b24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpwdXRCeU9mZnNldFN0b3JlRWxpbWlu
YXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpzZXRMb2NhbFN0b3JlRWxpbWlu
YXRpb24pOgorICAgICAgICAoSlNDOjpERkc6OkNTRVBoYXNlOjpzZXRSZXBsYWNlbWVudCk6Cisg
ICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OmVsaW1pbmF0ZSk6CisgICAgICAgIChKU0M6OkRG
Rzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2RlQ1NFKToKKyAgICAgICAgKiBkZmcvREZHTm9kZS5oOgor
ICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1N0cnVjdHVyZVRyYW5zaXRpb25EYXRhKToKKyAg
ICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICogZGZn
L0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpQ
cmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcvREZH
U3BlY3VsYXRpdmVKSVQzMl82NC5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6U3BlY3VsYXRpdmVK
SVQ6OmNvbXBpbGUpOgorICAgICAgICAqIGRmZy9ERkdTcGVjdWxhdGl2ZUpJVDY0LmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpTcGVjdWxhdGl2ZUpJVDo6Y29tcGlsZSk6CisKIDIwMTItMDUtMjEg
IEZpbGlwIFBpemxvICA8ZnBpemxvQGFwcGxlLmNvbT4KIAogICAgICAgICBERkcgQ29udmVydFRo
aXMgc2hvdWxkIGp1c3QgYmUgYSBDaGVja1N0cnVjdHVyZSBpZiB0aGUgc3RydWN0dXJlIGlzIGtu
b3duCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3Bw
Cj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0
ZS5jcHAJKHJldmlzaW9uIDExODA1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
QWJzdHJhY3RTdGF0ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE0MTEsNiArMTQxMSw3IEBAIGJv
b2wgQWJzdHJhY3RTdGF0ZTo6ZXhlY3V0ZSh1bnNpZ25lZCBpbmQKICAgICB9CiAgICAgICAgICAg
ICAKICAgICBjYXNlIFB1dFN0cnVjdHVyZToKKyAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6
CiAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGNsb2JiZXJTdHJ1Y3R1
cmVzKGluZGV4SW5CbG9jayk7CiAgICAgICAgIGZvck5vZGUobm9kZS5jaGlsZDEoKSkuc2V0KG5v
ZGUuc3RydWN0dXJlVHJhbnNpdGlvbkRhdGEoKS5uZXdTdHJ1Y3R1cmUpOwpJbmRleDogU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlLmNwcAo9
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBs
aWZpY2F0aW9uUGhhc2UuY3BwCShyZXZpc2lvbiAxMTgwNTgpCisrKyBTb3VyY2UvSmF2YVNjcmlw
dENvcmUvZGZnL0RGR0FyZ3VtZW50c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCSh3b3JraW5nIGNv
cHkpCkBAIC0xNzgsNyArMTc4LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAgICAg
Ly8gYSB2YXJpYWJsZSB0aGF0IHdlIHRoaW5rIGlzIGFsaWFzZWQgdG8gdGhlIGFyZ3VtZW50cywg
dGhlbiBpdAogICAgICAgICAgICAgICAgICAgICAgICAgLy8gbWF5IGVzY2FwZSBhdCB0aGlzIHBv
aW50LiBJbiBmdXR1cmUsIHdlIGNvdWxkIHRyYWNrIHRyYW5zaXRpdmUKICAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIGFsaWFzaW5nLiBCdXQgbm90IHlldC4KLSAgICAgICAgICAgICAgICAgICAg
ICAgIG9ic2VydmVCYWRBcmd1bWVudHNVc2Uobm9kZS5jaGlsZDEoKSk7CisgICAgICAgICAgICAg
ICAgICAgICAgICBvYnNlcnZlQmFkQXJndW1lbnRzVXNlKG5vZGUsIG5vZGUuY2hpbGQxKCkpOwog
ICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgICAgICBpZiAodmFy
aWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICAg
ICAgYnJlYWs7CkBAIC0yNjksNyArMjY5LDcgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAg
ICAgICAgLy8gVGhhdCdzIHNvIGF3ZnVsIGFuZCBwcmV0dHkgbXVjaCBpbXBvc3NpYmxlIHNpbmNl
IGl0IHdvdWxkCiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBpbXBseSB0aGF0IHRoZSBhcmd1
bWVudHMgd2VyZSBwcmVkaWN0ZWQgaW50ZWdlciwgYnV0IGl0J3MKICAgICAgICAgICAgICAgICAg
ICAgICAgIC8vIGdvb2QgdG8gYmUgZGVmZW5zaXZlIGFuZCB0aG9yb3VnaC4KLSAgICAgICAgICAg
ICAgICAgICAgICAgIG9ic2VydmVCYWRBcmd1bWVudHNVc2Uobm9kZS5jaGlsZDIoKSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICBvYnNlcnZlQmFkQXJndW1lbnRzVXNlKG5vZGUsIG5vZGUuY2hp
bGQyKCkpOwogICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZVByb3BlckFyZ3VtZW50c1Vz
ZShub2RlLCBub2RlLmNoaWxkMSgpKTsKICAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgICAgICAgICB9CkBAIC0zOTIsMzEgKzM5Miw2IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgICAgICAgICAgCiAgICAgICAgICAgICAgICAgICAgIFZhcmlhYmxlQWNjZXNzRGF0YSog
dmFyaWFibGVBY2Nlc3NEYXRhID0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKTsKICAgICAgICAg
ICAgICAgICAgICAgCi0gICAgICAgICAgICAgICAgICAgIC8vIElmIHRoaXMgaXMgYSBzdG9yZSBp
bnRvIHRoZSBhcmd1bWVudHMgcmVnaXN0ZXIgZm9yIGFuIElubGluZUNhbGxGcmFtZSoKLSAgICAg
ICAgICAgICAgICAgICAgLy8gdGhhdCBkb2VzIG5vdCBjcmVhdGUgYXJndW1lbnRzLCB0aGVuIGtp
bGwgaXQuCi0gICAgICAgICAgICAgICAgICAgIGludCBhcmd1bWVudHNSZWdpc3RlciA9Ci0gICAg
ICAgICAgICAgICAgICAgICAgICBtX2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9y
KG5vZGUuY29kZU9yaWdpbik7Ci0gICAgICAgICAgICAgICAgICAgIGlmICgodmFyaWFibGVBY2Nl
c3NEYXRhLT5sb2NhbCgpID09IGFyZ3VtZW50c1JlZ2lzdGVyCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgfHwgdmFyaWFibGVBY2Nlc3NEYXRhLT5sb2NhbCgpCi0gICAgICAgICAgICAgICAgICAg
ICAgICAgICAgID09IHVubW9kaWZpZWRBcmd1bWVudHNSZWdpc3Rlcihhcmd1bWVudHNSZWdpc3Rl
cikpCi0gICAgICAgICAgICAgICAgICAgICAgICAmJiAhbV9jcmVhdGVzQXJndW1lbnRzLmNvbnRh
aW5zKHNvdXJjZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkpIHsKLSAgICAgICAgICAgICAg
ICAgICAgICAgIC8vIEZpbmQgdGhlIEZsdXNoLiBJdCBzaG91bGQgYmUgdGhlIG5leHQgaW5zdHJ1
Y3Rpb24uCi0gICAgICAgICAgICAgICAgICAgICAgICBOb2RlJiBmbHVzaCA9IG1fZ3JhcGhbYmxv
Y2stPmF0KGluZGV4SW5CbG9jayArIDEpXTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VS
VChmbHVzaC5vcCgpID09IEZsdXNoKTsKLSAgICAgICAgICAgICAgICAgICAgICAgIEFTU0VSVChm
bHVzaC52YXJpYWJsZUFjY2Vzc0RhdGEoKSA9PSB2YXJpYWJsZUFjY2Vzc0RhdGEpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKGZsdXNoLmNoaWxkMSgpID09IG5vZGVJbmRleCk7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICAvLyBCZSBkZWZlbnNpdmUgaW4gcmVsZWFzZSBtb2RlLgot
ICAgICAgICAgICAgICAgICAgICAgICAgaWYgKGZsdXNoLm9wKCkgIT0gRmx1c2gKLSAgICAgICAg
ICAgICAgICAgICAgICAgICAgICB8fCBmbHVzaC52YXJpYWJsZUFjY2Vzc0RhdGEoKSAhPSB2YXJp
YWJsZUFjY2Vzc0RhdGEKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICB8fCBmbHVzaC5jaGls
ZDEoKSAhPSBub2RlSW5kZXgpCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7Ci0g
ICAgICAgICAgICAgICAgICAgICAgICBmbHVzaC5zZXRPcEFuZERlZmF1bHRGbGFncyhOb3ApOwot
ICAgICAgICAgICAgICAgICAgICAgICAgbV9ncmFwaC5jbGVhckFuZERlcmVmQ2hpbGQxKGZsdXNo
KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoLnNldFJlZkNvdW50KDApOwotICAgICAg
ICAgICAgICAgICAgICAgICAgY2hhbmdlZCA9IHRydWU7Ci0gICAgICAgICAgICAgICAgICAgICAg
ICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgfQotICAgICAgICAgICAgICAgICAgICAKICAg
ICAgICAgICAgICAgICAgICAgaWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQog
ICAgICAgICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIApAQCAt
NTgzLDYgKzU1OCwzMiBAQCBwdWJsaWM6CiAgICAgICAgICAgICBpbnNlcnRpb25TZXQuZXhlY3V0
ZSgqYmxvY2spOwogICAgICAgICB9CiAgICAgICAgIAorICAgICAgICBmb3IgKEJsb2NrSW5kZXgg
YmxvY2tJbmRleCA9IDA7IGJsb2NrSW5kZXggPCBtX2dyYXBoLm1fYmxvY2tzLnNpemUoKTsgKyti
bG9ja0luZGV4KSB7CisgICAgICAgICAgICBCYXNpY0Jsb2NrKiBibG9jayA9IG1fZ3JhcGgubV9i
bG9ja3NbYmxvY2tJbmRleF0uZ2V0KCk7CisgICAgICAgICAgICBpZiAoIWJsb2NrKQorICAgICAg
ICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAgZm9yICh1bnNpZ25lZCBpbmRleEluQmxv
Y2sgPSAwOyBpbmRleEluQmxvY2sgPCBibG9jay0+c2l6ZSgpOyArK2luZGV4SW5CbG9jaykgewor
ICAgICAgICAgICAgICAgIE5vZGVJbmRleCBub2RlSW5kZXggPSBibG9jay0+YXQoaW5kZXhJbkJs
b2NrKTsKKyAgICAgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOwor
ICAgICAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAg
ICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5vcCgpICE9IENyZWF0
ZUFyZ3VtZW50cykKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAgICAg
ICAgLy8gSWYgdGhpcyBpcyBhIENyZWF0ZUFyZ3VtZW50cyBmb3IgYW4gSW5saW5lQ2FsbEZyYW1l
KiB0aGF0IGRvZXMKKyAgICAgICAgICAgICAgICAvLyBub3QgY3JlYXRlIGFyZ3VtZW50cywgdGhl
biByZXBsYWNlIGl0IHdpdGggYSBKU0NvbnN0YW50KEVtcHR5KS4KKyAgICAgICAgICAgICAgICBp
ZiAobV9jcmVhdGVzQXJndW1lbnRzLmNvbnRhaW5zKG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxs
RnJhbWUpKQorICAgICAgICAgICAgICAgICAgICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICBO
b2RlIHBoYW50b20oUGhhbnRvbSwgbm9kZS5jb2RlT3JpZ2luKTsKKyAgICAgICAgICAgICAgICBw
aGFudG9tLmNoaWxkcmVuID0gbm9kZS5jaGlsZHJlbjsKKyAgICAgICAgICAgICAgICBwaGFudG9t
LnJlZigpOworICAgICAgICAgICAgICAgIG1fZ3JhcGguY29udmVydFRvQ29uc3RhbnQobm9kZUlu
ZGV4LCBKU1ZhbHVlKCkpOworICAgICAgICAgICAgICAgIE5vZGVJbmRleCBwaGFudG9tTm9kZUlu
ZGV4ID0gbV9ncmFwaC5zaXplKCk7CisgICAgICAgICAgICAgICAgbV9ncmFwaC5hcHBlbmQocGhh
bnRvbSk7CisgICAgICAgICAgICAgICAgaW5zZXJ0aW9uU2V0LmFwcGVuZChpbmRleEluQmxvY2ss
IHBoYW50b21Ob2RlSW5kZXgpOworICAgICAgICAgICAgfQorICAgICAgICAgICAgaW5zZXJ0aW9u
U2V0LmV4ZWN1dGUoKmJsb2NrKTsKKyAgICAgICAgfQorICAgICAgICAKICAgICAgICAgaWYgKGNo
YW5nZWQpCiAgICAgICAgICAgICBtX2dyYXBoLmNvbGxlY3RHYXJiYWdlKCk7CiAgICAgICAgIApA
QCAtNTk3LDMyICs1OTgsNDMgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIERlZmF1bHRIYXNoPFZh
cmlhYmxlQWNjZXNzRGF0YSo+OjpIYXNoLAogICAgICAgICAgICAgTnVsbGFibGVIYXNoVHJhaXRz
PFZhcmlhYmxlQWNjZXNzRGF0YSo+ID4gbV9hcmd1bWVudHNBbGlhc2luZzsKIAotICAgIHZvaWQg
b2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZShFZGdlIGVkZ2UpCisgICAgdm9pZCBvYnNlcnZlQmFkQXJn
dW1lbnRzVXNlKE5vZGUmIG5vZGUsIEVkZ2UgZWRnZSkKICAgICB7CiAgICAgICAgIGlmICghZWRn
ZSkKICAgICAgICAgICAgIHJldHVybjsKICAgICAgICAgCiAgICAgICAgIE5vZGUmIGNoaWxkID0g
bV9ncmFwaFtlZGdlXTsKLSAgICAgICAgaWYgKGNoaWxkLm9wKCkgIT0gR2V0TG9jYWwpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBpZiAoY2hpbGQubG9jYWwoKSA9PSBt
X2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKGNoaWxkLmNvZGVPcmlnaW4pKSB7
Ci0gICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKGNoaWxkLmNvZGVPcmlnaW4uaW5s
aW5lQ2FsbEZyYW1lKTsKLSAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgc3dpdGNoIChjaGls
ZC5vcCgpKSB7CisgICAgICAgIGNhc2UgQ3JlYXRlQXJndW1lbnRzOiB7CisgICAgICAgICAgICBp
ZiAobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSAhPSBjaGlsZC5jb2RlT3JpZ2luLmlu
bGluZUNhbGxGcmFtZSkKKyAgICAgICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKGNo
aWxkLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgIGJyZWFrOworICAg
ICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBHZXRMb2NhbDogeworICAgICAgICAg
ICAgaWYgKGNoaWxkLmxvY2FsKCkgPT0gbV9ncmFwaC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3Rl
ckZvcihjaGlsZC5jb2RlT3JpZ2luKSkgeworICAgICAgICAgICAgICAgIG1fY3JlYXRlc0FyZ3Vt
ZW50cy5hZGQoY2hpbGQuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOworICAgICAgICAgICAg
ICAgIHJldHVybjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICAgICAgVmFy
aWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBjaGlsZC52YXJpYWJsZUFjY2Vz
c0RhdGEoKTsKKyAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQo
KSkKKyAgICAgICAgICAgICAgICByZXR1cm47CisgICAgICAgICAgICAKKyAgICAgICAgICAgIEFy
Z3VtZW50c0FsaWFzaW5nRGF0YSYgZGF0YSA9IG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJp
YWJsZUFjY2Vzc0RhdGEpLT5zZWNvbmQ7CisgICAgICAgICAgICBkYXRhLmVzY2FwZXMgPSB0cnVl
OworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAgICAgICAgIAorICAgICAgICBk
ZWZhdWx0OgorICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KLSAgICAgICAgCi0gICAgICAg
IFZhcmlhYmxlQWNjZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gY2hpbGQudmFyaWFibGVB
Y2Nlc3NEYXRhKCk7Ci0gICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQo
KSkKLSAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgCi0gICAgICAgIEFyZ3VtZW50c0FsaWFz
aW5nRGF0YSYgZGF0YSA9IG1fYXJndW1lbnRzQWxpYXNpbmcuZmluZCh2YXJpYWJsZUFjY2Vzc0Rh
dGEpLT5zZWNvbmQ7Ci0gICAgICAgIGRhdGEuZXNjYXBlcyA9IHRydWU7CiAgICAgfQogICAgIAog
ICAgIHZvaWQgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZXMoTm9kZSYgbm9kZSkKICAgICB7CiAgICAg
ICAgIGZvciAodW5zaWduZWQgaSA9IG1fZ3JhcGgubnVtQ2hpbGRyZW4obm9kZSk7IGktLTspCi0g
ICAgICAgICAgICBvYnNlcnZlQmFkQXJndW1lbnRzVXNlKG1fZ3JhcGguY2hpbGQobm9kZSwgaSkp
OworICAgICAgICAgICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZShub2RlLCBtX2dyYXBoLmNoaWxk
KG5vZGUsIGkpKTsKICAgICB9CiAgICAgCiAgICAgdm9pZCBvYnNlcnZlUHJvcGVyQXJndW1lbnRz
VXNlKE5vZGUmIG5vZGUsIEVkZ2UgZWRnZSkKQEAgLTY0OSw5ICs2NjEsMTMgQEAgcHJpdmF0ZToK
ICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICAgCiAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gY2hpbGQudmFyaWFibGVBY2Nlc3NEYXRhKCk7
Ci0gICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkKKyAgICAgICAg
aWYgKHZhcmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKSB7CisgICAgICAgICAgICBpZiAo
Y2hpbGQubG9jYWwoKSA9PSBtX2dyYXBoLnVuY2hlY2tlZEFyZ3VtZW50c1JlZ2lzdGVyRm9yKGNo
aWxkLmNvZGVPcmlnaW4pCisgICAgICAgICAgICAgICAgJiYgbm9kZS5jb2RlT3JpZ2luLmlubGlu
ZUNhbGxGcmFtZSAhPSBjaGlsZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSkKKyAgICAgICAg
ICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRkKGNoaWxkLmNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lKTsKICAgICAgICAgICAgIHJldHVybjsKLSAgICAgICAgICAgICAgICAgICAgICAgIAor
ICAgICAgICB9CisgICAgICAgIAogICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEmIGRhdGEg
PSBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+c2Vjb25kOwog
ICAgICAgICBkYXRhLm1lcmdlQ2FsbENvbnRleHQobm9kZS5jb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSk7CiAgICAgfQpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFz
ZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdDU0VQaGFz
ZS5jcHAJKHJldmlzaW9uIDExODA1OCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZH
Q1NFUGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC0xOTksNiArMTk5LDMzIEBAIHByaXZhdGU6
CiAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgfQogICAgIAorICAgIE5vZGVJbmRleCBnbG9i
YWxWYXJTdG9yZUVsaW1pbmF0aW9uKHVuc2lnbmVkIHZhck51bWJlciwgSlNHbG9iYWxPYmplY3Qq
IGdsb2JhbE9iamVjdCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJ
bkJsb2NrOyBpLS07KSB7CisgICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRC
bG9jay0+YXQoaSk7CisgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07Cisg
ICAgICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICBj
b250aW51ZTsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBj
YXNlIFB1dEdsb2JhbFZhcjoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS52YXJOdW1iZXIoKSA9
PSB2YXJOdW1iZXIgJiYgY29kZUJsb2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmln
aW4pID09IGdsb2JhbE9iamVjdCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4Owor
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2Fz
ZSBHZXRHbG9iYWxWYXI6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUudmFyTnVtYmVyKCkgPT0g
dmFyTnVtYmVyICYmIGNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2lu
KSA9PSBnbG9iYWxPYmplY3QpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZh
dWx0OgorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgfQorICAgICAgICAgICAg
aWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRleCkgfHwgbm9kZS5jYW5FeGl0KCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4gTm9O
b2RlOworICAgIH0KKyAgICAKICAgICBOb2RlSW5kZXggZ2V0QnlWYWxMb2FkRWxpbWluYXRpb24o
Tm9kZUluZGV4IGNoaWxkMSwgTm9kZUluZGV4IGNoaWxkMikKICAgICB7CiAgICAgICAgIGZvciAo
dW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7CkBAIC0zMDMsNiArMzMwLDU2IEBA
IHByaXZhdGU6CiAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICB9CiAgICAgCisgICAgTm9kZUlu
ZGV4IHB1dFN0cnVjdHVyZVN0b3JlRWxpbWluYXRpb24oTm9kZUluZGV4IGNoaWxkMSkKKyAgICB7
CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7CisgICAg
ICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSk7CisgICAgICAg
ICAgICBpZiAoaW5kZXggPT0gY2hpbGQxKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOworICAgICAgICAgICAgaWYgKCFub2Rl
LnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICBz
d2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgY2FzZSBDaGVja1N0cnVjdHVyZToKKyAg
ICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgY2FzZSBQaGFudG9tUHV0U3RydWN0dXJlOgorICAgICAgICAgICAgICAgIGlmIChub2RlLmNo
aWxkMSgpID09IGNoaWxkMSkgLy8gTm8gbmVlZCB0byByZXRyYWNlIG91ciBzdGVwcy4KKyAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAg
ICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAgICAgICAg
ICAgICAgIGlmIChub2RlLmNoaWxkMSgpID09IGNoaWxkMSkKKyAgICAgICAgICAgICAgICAgICAg
cmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAor
ICAgICAgICAgICAgLy8gUHV0U3RydWN0dXJlIG5lZWRzIHRvIGV4ZWN1dGUgaWYgd2UgR0MuIEhl
bmNlIHRoaXMgbmVlZHMgdG8KKyAgICAgICAgICAgIC8vIGJlIGNhcmVmdWwgd2l0aCByZXNwZWN0
IHRvIG5vZGVzIHRoYXQgR0MuCisgICAgICAgICAgICBjYXNlIENyZWF0ZUFyZ3VtZW50czoKKyAg
ICAgICAgICAgIGNhc2UgVGVhck9mZkFyZ3VtZW50czoKKyAgICAgICAgICAgIGNhc2UgTmV3RnVu
Y3Rpb25Ob0NoZWNrOgorICAgICAgICAgICAgY2FzZSBOZXdGdW5jdGlvbjoKKyAgICAgICAgICAg
IGNhc2UgTmV3RnVuY3Rpb25FeHByZXNzaW9uOgorICAgICAgICAgICAgY2FzZSBDcmVhdGVBY3Rp
dmF0aW9uOgorICAgICAgICAgICAgY2FzZSBUZWFyT2ZmQWN0aXZhdGlvbjoKKyAgICAgICAgICAg
IGNhc2UgU3RyQ2F0OgorICAgICAgICAgICAgY2FzZSBUb1ByaW1pdGl2ZToKKyAgICAgICAgICAg
IGNhc2UgTmV3UmVnZXhwOgorICAgICAgICAgICAgY2FzZSBOZXdBcnJheUJ1ZmZlcjoKKyAgICAg
ICAgICAgIGNhc2UgTmV3QXJyYXk6CisgICAgICAgICAgICBjYXNlIE5ld09iamVjdDoKKyAgICAg
ICAgICAgIGNhc2UgQ3JlYXRlVGhpczoKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOwor
ICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29y
bGQoaW5kZXgpIHx8IG5vZGUuY2FuRXhpdCgpKQorICAgICAgICAgICAgICAgIHJldHVybiBOb05v
ZGU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICB9CisgICAgCiAgICAg
Tm9kZUluZGV4IGdldEJ5T2Zmc2V0TG9hZEVsaW1pbmF0aW9uKHVuc2lnbmVkIGlkZW50aWZpZXJO
dW1iZXIsIE5vZGVJbmRleCBjaGlsZDEpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVkIGkg
PSBtX2luZGV4SW5CbG9jazsgaS0tOykgewpAQCAtMzQ5LDYgKzQyNiw1MiBAQCBwcml2YXRlOgog
ICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgIH0KICAgICAKKyAgICBOb2RlSW5kZXggcHV0QnlP
ZmZzZXRTdG9yZUVsaW1pbmF0aW9uKHVuc2lnbmVkIGlkZW50aWZpZXJOdW1iZXIsIE5vZGVJbmRl
eCBjaGlsZDEpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9j
azsgaS0tOykgeworICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2st
PmF0KGkpOworICAgICAgICAgICAgaWYgKGluZGV4ID09IGNoaWxkMSkKKyAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOworICAg
ICAgICAgICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgY29u
dGludWU7CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgY2Fz
ZSBHZXRCeU9mZnNldDoKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3N0b3JhZ2VBY2Nl
c3NEYXRhW25vZGUuc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyID09
IGlkZW50aWZpZXJOdW1iZXIpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7Cisg
ICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNl
IFB1dEJ5T2Zmc2V0OgorICAgICAgICAgICAgICAgIGlmIChtX2dyYXBoLm1fc3RvcmFnZUFjY2Vz
c0RhdGFbbm9kZS5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCldLmlkZW50aWZpZXJOdW1iZXIgPT0g
aWRlbnRpZmllck51bWJlcikgeworICAgICAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEo
KSA9PSBjaGlsZDEpIC8vIE11c3QgYmUgc2FtZSBwcm9wZXJ0eSBzdG9yYWdlLgorICAgICAgICAg
ICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAgICAgICAgICByZXR1cm4g
Tm9Ob2RlOworICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAg
ICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgUHV0QnlWYWw6CisgICAgICAgICAgICBjYXNl
IFB1dEJ5VmFsQWxpYXM6CisgICAgICAgICAgICBjYXNlIEdldEJ5VmFsOgorICAgICAgICAgICAg
ICAgIGlmIChtX2dyYXBoLmJ5VmFsSXNQdXJlKG5vZGUpKSB7CisgICAgICAgICAgICAgICAgICAg
IC8vIElmIFB1dEJ5VmFsIHNwZWN1bGF0ZXMgdGhhdCBpdCdzIGFjY2Vzc2luZyBhbiBhcnJheSB3
aXRoIGFuCisgICAgICAgICAgICAgICAgICAgIC8vIGludGVnZXIgaW5kZXgsIHRoZW4gaXQncyBp
bXBvc3NpYmxlIGZvciBpdCB0byBjYXVzZSBhIHN0cnVjdHVyZQorICAgICAgICAgICAgICAgICAg
ICAvLyBjaGFuZ2UuCisgICAgICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAg
IH0KKyAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIAorICAg
ICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dv
cmxkKGluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChub2RlLmNhbkV4
aXQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICB9CisgICAgICAg
IHJldHVybiBOb05vZGU7CisgICAgfQorICAgIAogICAgIE5vZGVJbmRleCBnZXRQcm9wZXJ0eVN0
b3JhZ2VMb2FkRWxpbWluYXRpb24oTm9kZUluZGV4IGNoaWxkMSkKICAgICB7CiAgICAgICAgIGZv
ciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJsb2NrOyBpLS07KSB7CkBAIC00NzksNiArNjAyLDUz
IEBAIHByaXZhdGU6CiAgICAgICAgIHJldHVybiBOb05vZGU7CiAgICAgfQogICAgIAorICAgIC8v
IFRoaXMgcmV0dXJucyB0aGUgRmx1c2ggbm9kZSB0aGF0IGlzIGtlZXBpbmcgYSBTZXRMb2NhbCBh
bGl2ZS4KKyAgICBOb2RlSW5kZXggc2V0TG9jYWxTdG9yZUVsaW1pbmF0aW9uKFZpcnR1YWxSZWdp
c3RlciBsb2NhbCkKKyAgICB7CisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IG1faW5kZXhJbkJs
b2NrOyBpLS07KSB7CisgICAgICAgICAgICBOb2RlSW5kZXggaW5kZXggPSBtX2N1cnJlbnRCbG9j
ay0+YXQoaSk7CisgICAgICAgICAgICBOb2RlJiBub2RlID0gbV9ncmFwaFtpbmRleF07CisgICAg
ICAgICAgICBpZiAoIW5vZGUuc2hvdWxkR2VuZXJhdGUoKSkKKyAgICAgICAgICAgICAgICBjb250
aW51ZTsKKyAgICAgICAgICAgIHN3aXRjaCAobm9kZS5vcCgpKSB7CisgICAgICAgICAgICBjYXNl
IEdldExvY2FsOgorICAgICAgICAgICAgY2FzZSBTZXRMb2NhbDoKKyAgICAgICAgICAgICAgICBp
ZiAobm9kZS5sb2NhbCgpID09IGxvY2FsKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9O
b2RlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgY2FzZSBHZXRMb2NhbFVubGlua2VkOgorICAgICAgICAgICAgICAgIGlmIChub2RlLnVubGlu
a2VkTG9jYWwoKSA9PSBsb2NhbCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsK
KyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNh
c2UgRmx1c2g6IHsKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5sb2NhbCgpICE9IGxvY2FsKQor
ICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBpZiAoIWkpCisgICAg
ICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIE5vZGVJbmRleCBwcmV2SW5k
ZXggPSBtX2N1cnJlbnRCbG9jay0+YXQoaSAtIDEpOworICAgICAgICAgICAgICAgIGlmIChwcmV2
SW5kZXggIT0gbm9kZS5jaGlsZDEoKS5pbmRleCgpKQorICAgICAgICAgICAgICAgICAgICBicmVh
azsKKyAgICAgICAgICAgICAgICBBU1NFUlQobV9ncmFwaFtwcmV2SW5kZXhdLmxvY2FsKCkgPT0g
bG9jYWwpOworICAgICAgICAgICAgICAgIEFTU0VSVChtX2dyYXBoW3ByZXZJbmRleF0udmFyaWFi
bGVBY2Nlc3NEYXRhKCkgPT0gbm9kZS52YXJpYWJsZUFjY2Vzc0RhdGEoKSk7CisgICAgICAgICAg
ICAgICAgQVNTRVJUKG1fZ3JhcGhbcHJldkluZGV4XS5zaG91bGRHZW5lcmF0ZSgpKTsKKyAgICAg
ICAgICAgICAgICBpZiAobV9ncmFwaFtwcmV2SW5kZXhdLnJlZkNvdW50KCkgPiAxKQorICAgICAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICByZXR1cm4gaW5kZXg7CisgICAg
ICAgICAgICB9CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBkZWZhdWx0OgorICAgICAg
ICAgICAgICAgIGlmIChtX2dyYXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpKQorICAgICAgICAgICAg
ICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgfQorICAgICAgICAgICAgaWYgKG5vZGUuY2FuRXhpdCgpKQorICAgICAgICAgICAgICAgIHJl
dHVybiBOb05vZGU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICB9Cisg
ICAgCiAgICAgdm9pZCBwZXJmb3JtU3Vic3RpdHV0aW9uKEVkZ2UmIGNoaWxkLCBib29sIGFkZFJl
ZiA9IHRydWUpCiAgICAgewogICAgICAgICAvLyBDaGVjayBpZiB0aGlzIG9wZXJhbmQgaXMgYWN0
dWFsbHkgdW51c2VkLgpAQCAtNTAwLDE0ICs2NzAsMTYgQEAgcHJpdmF0ZToKICAgICAgICAgICAg
IG1fZ3JhcGhbY2hpbGRdLnJlZigpOwogICAgIH0KICAgICAKLSAgICBib29sIHNldFJlcGxhY2Vt
ZW50KE5vZGVJbmRleCByZXBsYWNlbWVudCkKKyAgICBlbnVtIFByZWRpY3Rpb25IYW5kbGluZ01v
ZGUgeyBSZXF1aXJlU2FtZVByZWRpY3Rpb24sIEFsbG93UHJlZGljdGlvbk1pc21hdGNoIH07Cisg
ICAgYm9vbCBzZXRSZXBsYWNlbWVudChOb2RlSW5kZXggcmVwbGFjZW1lbnQsIFByZWRpY3Rpb25I
YW5kbGluZ01vZGUgcHJlZGljdGlvbkhhbmRsaW5nTW9kZSA9IFJlcXVpcmVTYW1lUHJlZGljdGlv
bikKICAgICB7CiAgICAgICAgIGlmIChyZXBsYWNlbWVudCA9PSBOb05vZGUpCiAgICAgICAgICAg
ICByZXR1cm4gZmFsc2U7CiAgICAgICAgIAogICAgICAgICAvLyBCZSBzYWZlLiBEb24ndCB0cnkg
dG8gcGVyZm9ybSByZXBsYWNlbWVudHMgaWYgdGhlIHByZWRpY3Rpb25zIGRvbid0CiAgICAgICAg
IC8vIGFncmVlLgotICAgICAgICBpZiAobV9ncmFwaFttX2NvbXBpbGVJbmRleF0ucHJlZGljdGlv
bigpICE9IG1fZ3JhcGhbcmVwbGFjZW1lbnRdLnByZWRpY3Rpb24oKSkKKyAgICAgICAgaWYgKHBy
ZWRpY3Rpb25IYW5kbGluZ01vZGUgPT0gUmVxdWlyZVNhbWVQcmVkaWN0aW9uCisgICAgICAgICAg
ICAmJiBtX2dyYXBoW21fY29tcGlsZUluZGV4XS5wcmVkaWN0aW9uKCkgIT0gbV9ncmFwaFtyZXBs
YWNlbWVudF0ucHJlZGljdGlvbigpKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAg
ICAKICNpZiBERkdfRU5BQkxFKERFQlVHX1BST1BBR0FUSU9OX1ZFUkJPU0UpCkBAIC01MzYsNiAr
NzA4LDE3IEBAIHByaXZhdGU6CiAgICAgICAgIG5vZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MoUGhh
bnRvbSk7CiAgICAgfQogICAgIAorICAgIHZvaWQgZWxpbWluYXRlKE5vZGVJbmRleCBub2RlSW5k
ZXgsIE5vZGVUeXBlIHBoYW50b21UeXBlID0gUGhhbnRvbSkKKyAgICB7CisgICAgICAgIGlmIChu
b2RlSW5kZXggPT0gTm9Ob2RlKQorICAgICAgICAgICAgcmV0dXJuOworICAgICAgICBOb2RlJiBu
b2RlID0gbV9ncmFwaFtub2RlSW5kZXhdOworICAgICAgICBpZiAobm9kZS5yZWZDb3VudCgpICE9
IDEpCisgICAgICAgICAgICByZXR1cm47CisgICAgICAgIEFTU0VSVChub2RlLm11c3RHZW5lcmF0
ZSgpKTsKKyAgICAgICAgbm9kZS5zZXRPcEFuZERlZmF1bHRGbGFncyhwaGFudG9tVHlwZSk7Cisg
ICAgfQorICAgIAogICAgIHZvaWQgcGVyZm9ybU5vZGVDU0UoTm9kZSYgbm9kZSkKICAgICB7CiAg
ICAgICAgIGJvb2wgc2hvdWxkR2VuZXJhdGUgPSBub2RlLnNob3VsZEdlbmVyYXRlKCk7CkBAIC02
MjEsNiArODA0LDEyIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBOb2RlSW5kZXggcGhpSW5kZXgg
PSBub2RlLmNoaWxkMSgpLmluZGV4KCk7CiAgICAgICAgICAgICBpZiAoIXNldFJlcGxhY2VtZW50
KHBvc3NpYmxlUmVwbGFjZW1lbnQpKQogICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAg
ICAgLy8gSWYgdGhlIEdldExvY2FsIHdlIHJlcGxhY2VkIHVzZWQgdG8gcmVmZXIgdG8gYSBTZXRM
b2NhbCwgdGhlbiBpdCBub3cKKyAgICAgICAgICAgIC8vIHNob3VsZCByZWZlciB0byB0aGUgY2hp
bGQgb2YgdGhlIFNldExvY2FsIGluc3RlYWQuCisgICAgICAgICAgICBpZiAobV9ncmFwaFtwaGlJ
bmRleF0ub3AoKSA9PSBTZXRMb2NhbCkgeworICAgICAgICAgICAgICAgIEFTU0VSVChub2RlLmNo
aWxkMSgpLmluZGV4KCkgPT0gcGhpSW5kZXgpOworICAgICAgICAgICAgICAgIG1fZ3JhcGguY2hh
bmdlRWRnZShub2RlLmNoaWxkcmVuLmNoaWxkMSgpLCBtX2dyYXBoW3BoaUluZGV4XS5jaGlsZDEo
KSk7CisgICAgICAgICAgICB9CiAgICAgICAgICAgICBOb2RlSW5kZXggb2xkVGFpbEluZGV4ID0g
bV9jdXJyZW50QmxvY2stPnZhcmlhYmxlc0F0VGFpbC5vcGVyYW5kKAogICAgICAgICAgICAgICAg
IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKSk7CiAgICAgICAgICAgICBpZiAob2xkVGFpbElu
ZGV4ID09IG1fY29tcGlsZUluZGV4KSB7CkBAIC02NDQsMTAgKzgzMywzMiBAQCBwcml2YXRlOgog
ICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgIH0KICAgICAgICAgICAgIAorICAgICAgICBjYXNl
IFNldExvY2FsOiB7CisgICAgICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNj
ZXNzRGF0YSA9IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCk7CisgICAgICAgICAgICBpZiAoIXZh
cmlhYmxlQWNjZXNzRGF0YS0+aXNDYXB0dXJlZCgpKQorICAgICAgICAgICAgICAgIGJyZWFrOwor
ICAgICAgICAgICAgVmlydHVhbFJlZ2lzdGVyIGxvY2FsID0gdmFyaWFibGVBY2Nlc3NEYXRhLT5s
b2NhbCgpOworICAgICAgICAgICAgTm9kZUluZGV4IHJlcGxhY2VtZW50SW5kZXggPSBzZXRMb2Nh
bFN0b3JlRWxpbWluYXRpb24obG9jYWwpOworICAgICAgICAgICAgaWYgKHJlcGxhY2VtZW50SW5k
ZXggPT0gTm9Ob2RlKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgTm9kZSYg
cmVwbGFjZW1lbnQgPSBtX2dyYXBoW3JlcGxhY2VtZW50SW5kZXhdOworICAgICAgICAgICAgQVNT
RVJUKHJlcGxhY2VtZW50Lm9wKCkgPT0gRmx1c2gpOworICAgICAgICAgICAgQVNTRVJUKHJlcGxh
Y2VtZW50LnJlZkNvdW50KCkgPT0gMSk7CisgICAgICAgICAgICBBU1NFUlQocmVwbGFjZW1lbnQu
c2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICBBU1NFUlQocmVwbGFjZW1lbnQubXVzdEdl
bmVyYXRlKCkpOworICAgICAgICAgICAgcmVwbGFjZW1lbnQuc2V0T3BBbmREZWZhdWx0RmxhZ3Mo
UGhhbnRvbSk7CisgICAgICAgICAgICBOb2RlSW5kZXggc2V0TG9jYWxJbmRleCA9IHJlcGxhY2Vt
ZW50LmNoaWxkMSgpLmluZGV4KCk7CisgICAgICAgICAgICBBU1NFUlQobV9ncmFwaFtzZXRMb2Nh
bEluZGV4XS5vcCgpID09IFNldExvY2FsKTsKKyAgICAgICAgICAgIG1fZ3JhcGguY2xlYXJBbmRE
ZXJlZkNoaWxkMShyZXBsYWNlbWVudCk7CisgICAgICAgICAgICByZXBsYWNlbWVudC5jaGlsZHJl
bi5jaGlsZDEoKSA9IG1fZ3JhcGhbc2V0TG9jYWxJbmRleF0uY2hpbGQxKCk7CisgICAgICAgICAg
ICBtX2dyYXBoLnJlZihyZXBsYWNlbWVudC5jaGlsZDEoKSk7CisgICAgICAgICAgICBicmVhazsK
KyAgICAgICAgfQorICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgSlNDb25zdGFudDoKICAgICAg
ICAgICAgIC8vIFRoaXMgaXMgc3RyYW5nZSwgYnV0IG5lY2Vzc2FyeS4gU29tZSBwaGFzZXMgd2ls
bCBjb252ZXJ0IG5vZGVzIHRvIGNvbnN0YW50cywKICAgICAgICAgICAgIC8vIHdoaWNoIG1heSBy
ZXN1bHQgaW4gZHVwbGljYXRlZCBjb25zdGFudHMuIFdlIHVzZSBDU0UgdG8gY2xlYW4gdGhpcyB1
cC4KLSAgICAgICAgICAgIHNldFJlcGxhY2VtZW50KGNvbnN0YW50Q1NFKG5vZGUpKTsKKyAgICAg
ICAgICAgIHNldFJlcGxhY2VtZW50KGNvbnN0YW50Q1NFKG5vZGUpLCBBbGxvd1ByZWRpY3Rpb25N
aXNtYXRjaCk7CiAgICAgICAgICAgICBicmVhazsKICAgICAgICAgICAgIAogICAgICAgICBjYXNl
IEdldEFycmF5TGVuZ3RoOgpAQCAtNjgwLDYgKzg5MSwxMCBAQCBwcml2YXRlOgogICAgICAgICAg
ICAgc2V0UmVwbGFjZW1lbnQoZ2xvYmFsVmFyTG9hZEVsaW1pbmF0aW9uKG5vZGUudmFyTnVtYmVy
KCksIGNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSkpOwogICAg
ICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQdXRHbG9iYWxWYXI6
CisgICAgICAgICAgICBlbGltaW5hdGUoZ2xvYmFsVmFyU3RvcmVFbGltaW5hdGlvbihub2RlLnZh
ck51bWJlcigpLCBjb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbikp
KTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgCiAgICAgICAgIGNhc2UgR2V0QnlW
YWw6CiAgICAgICAgICAgICBpZiAobV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkKICAgICAgICAg
ICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRCeVZhbExvYWRFbGltaW5hdGlvbihub2RlLmNoaWxk
MSgpLmluZGV4KCksIG5vZGUuY2hpbGQyKCkuaW5kZXgoKSkpOwpAQCAtNjk2LDYgKzkxMSwxMCBA
QCBwcml2YXRlOgogICAgICAgICAgICAgaWYgKGNoZWNrU3RydWN0dXJlTG9hZEVsaW1pbmF0aW9u
KG5vZGUuc3RydWN0dXJlU2V0KCksIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpCiAgICAgICAgICAg
ICAgICAgZWxpbWluYXRlKCk7CiAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAorICAg
ICAgICBjYXNlIFB1dFN0cnVjdHVyZToKKyAgICAgICAgICAgIGVsaW1pbmF0ZShwdXRTdHJ1Y3R1
cmVTdG9yZUVsaW1pbmF0aW9uKG5vZGUuY2hpbGQxKCkuaW5kZXgoKSksIFBoYW50b21QdXRTdHJ1
Y3R1cmUpOworICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgY2FzZSBDaGVja0Z1bmN0aW9u
OgogICAgICAgICAgICAgaWYgKGNoZWNrRnVuY3Rpb25FbGltaW5hdGlvbihub2RlLmZ1bmN0aW9u
KCksIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpCkBAIC03MTcsNiArOTM2LDEwIEBAIHByaXZhdGU6
CiAgICAgICAgICAgICBzZXRSZXBsYWNlbWVudChnZXRCeU9mZnNldExvYWRFbGltaW5hdGlvbiht
X2dyYXBoLm1fc3RvcmFnZUFjY2Vzc0RhdGFbbm9kZS5zdG9yYWdlQWNjZXNzRGF0YUluZGV4KCld
LmlkZW50aWZpZXJOdW1iZXIsIG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkpOwogICAgICAgICAgICAg
YnJlYWs7CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQdXRCeU9mZnNldDoKKyAgICAgICAg
ICAgIGVsaW1pbmF0ZShwdXRCeU9mZnNldFN0b3JlRWxpbWluYXRpb24obV9ncmFwaC5tX3N0b3Jh
Z2VBY2Nlc3NEYXRhW25vZGUuc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVt
YmVyLCBub2RlLmNoaWxkMSgpLmluZGV4KCkpKTsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAg
ICAgICAgCiAgICAgICAgIGRlZmF1bHQ6CiAgICAgICAgICAgICAvLyBkbyBub3RoaW5nLgogICAg
ICAgICAgICAgYnJlYWs7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUu
aAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2
aXNpb24gMTE4MDU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdv
cmtpbmcgY29weSkKQEAgLTU4OSw3ICs1ODksNyBAQCBzdHJ1Y3QgTm9kZSB7CiAKICAgICBib29s
IGhhc1N0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkKICAgICB7Ci0gICAgICAgIHJldHVybiBvcCgp
ID09IFB1dFN0cnVjdHVyZTsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gUHV0U3RydWN0dXJlIHx8
IG9wKCkgPT0gUGhhbnRvbVB1dFN0cnVjdHVyZTsKICAgICB9CiAgICAgCiAgICAgU3RydWN0dXJl
VHJhbnNpdGlvbkRhdGEmIHN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDExODA1OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2luZyBjb3B5KQpAQCAtMzcs
MTEgKzM3LDExIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZHIHsKIC8vIFRoaXMgbWFj
cm8gZGVmaW5lcyBhIHNldCBvZiBpbmZvcm1hdGlvbiBhYm91dCBhbGwga25vd24gbm9kZSB0eXBl
cywgdXNlZCB0byBwb3B1bGF0ZSBOb2RlSWQsIE5vZGVUeXBlIGJlbG93LgogI2RlZmluZSBGT1Jf
RUFDSF9ERkdfT1AobWFjcm8pIFwKICAgICAvKiBBIGNvbnN0YW50IGluIHRoZSBDb2RlQmxvY2sn
cyBjb25zdGFudCBwb29sLiAqL1wKLSAgICBtYWNybyhKU0NvbnN0YW50LCBOb2RlUmVzdWx0SlMp
IFwKKyAgICBtYWNybyhKU0NvbnN0YW50LCBOb2RlUmVzdWx0SlMgfCBOb2RlRG9lc05vdEV4aXQp
IFwKICAgICBcCiAgICAgLyogQSBjb25zdGFudCBub3QgaW4gdGhlIENvZGVCbG9jaydzIGNvbnN0
YW50IHBvb2wuIFVzZXMgZ2V0IHBhdGNoZWQgdG8ganVtcHMgdGhhdCBleGl0IHRoZSAqL1wKICAg
ICAvKiBjb2RlIGJsb2NrLiAqL1wKLSAgICBtYWNybyhXZWFrSlNDb25zdGFudCwgTm9kZVJlc3Vs
dEpTKSBcCisgICAgbWFjcm8oV2Vha0pTQ29uc3RhbnQsIE5vZGVSZXN1bHRKUyB8IE5vZGVEb2Vz
Tm90RXhpdCkgXAogICAgIFwKICAgICAvKiBOb2RlcyBmb3IgaGFuZGxpbmcgZnVuY3Rpb25zIChi
b3RoIGFzIGNhbGwgYW5kIGFzIGNvbnN0cnVjdCkuICovXAogICAgIG1hY3JvKENvbnZlcnRUaGlz
LCBOb2RlUmVzdWx0SlMpIFwKQEAgLTUzLDEwICs1MywxMCBAQCBuYW1lc3BhY2UgSlNDIHsgbmFt
ZXNwYWNlIERGRyB7CiAgICAgLyogVmFyaWFibGVBY2Nlc3NEYXRhLCBhbmQgdGh1cyB3aWxsIHNo
YXJlIHByZWRpY3Rpb25zLiAqL1wKICAgICBtYWNybyhHZXRMb2NhbCwgTm9kZVJlc3VsdEpTKSBc
CiAgICAgbWFjcm8oU2V0TG9jYWwsIDApIFwKLSAgICBtYWNybyhQaGFudG9tLCBOb2RlTXVzdEdl
bmVyYXRlKSBcCi0gICAgbWFjcm8oTm9wLCAwKSBcCi0gICAgbWFjcm8oUGhpLCAwKSBcCi0gICAg
bWFjcm8oRmx1c2gsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhQaGFudG9tLCBOb2Rl
TXVzdEdlbmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0KSBcCisgICAgbWFjcm8oTm9wLCAwIHwgTm9k
ZURvZXNOb3RFeGl0KSBcCisgICAgbWFjcm8oUGhpLCAwIHwgTm9kZURvZXNOb3RFeGl0KSBcCisg
ICAgbWFjcm8oRmx1c2gsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9lc05vdEV4aXQpIFwKICAg
ICBcCiAgICAgLyogR2V0IHRoZSB2YWx1ZSBvZiBhIGxvY2FsIHZhcmlhYmxlLCB3aXRob3V0IGxp
bmtpbmcgaW50byB0aGUgVmFyaWFibGVBY2Nlc3NEYXRhICovXAogICAgIC8qIG5ldHdvcmsuIFRo
aXMgaXMgb25seSB2YWxpZCBmb3IgdmFyaWFibGUgYWNjZXNzZXMgd2hvc2UgcHJlZGljdGlvbnMg
b3JpZ2luYXRlZCAqL1wKQEAgLTY0LDEyICs2NCwxMiBAQCBuYW1lc3BhY2UgSlNDIHsgbmFtZXNw
YWNlIERGRyB7CiAgICAgbWFjcm8oR2V0TG9jYWxVbmxpbmtlZCwgTm9kZVJlc3VsdEpTKSBcCiAg
ICAgXAogICAgIC8qIE1hcmtlciBmb3IgYW4gYXJndW1lbnQgYmVpbmcgc2V0IGF0IHRoZSBwcm9s
b2d1ZSBvZiBhIGZ1bmN0aW9uLiAqL1wKLSAgICBtYWNybyhTZXRBcmd1bWVudCwgMCkgXAorICAg
IG1hY3JvKFNldEFyZ3VtZW50LCAwIHwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgXAogICAgIC8q
IEhpbnQgdGhhdCBpbmxpbmluZyBiZWdpbnMgaGVyZS4gTm8gY29kZSBpcyBnZW5lcmF0ZWQgZm9y
IHRoaXMgbm9kZS4gSXQncyBvbmx5ICovXAogICAgIC8qIHVzZWQgZm9yIGNvcHlpbmcgT1NSIGRh
dGEgaW50byBpbmxpbmUgZnJhbWUgZGF0YSwgdG8gc3VwcG9ydCByZWlmaWNhdGlvbiBvZiAqL1wK
ICAgICAvKiBjYWxsIGZyYW1lcyBvZiBpbmxpbmVkIGZ1bmN0aW9ucy4gKi9cCi0gICAgbWFjcm8o
SW5saW5lU3RhcnQsIDApIFwKKyAgICBtYWNybyhJbmxpbmVTdGFydCwgMCB8IE5vZGVEb2VzTm90
RXhpdCkgXAogICAgIFwKICAgICAvKiBOb2RlcyBmb3IgYml0d2lzZSBvcGVyYXRpb25zLiAqL1wK
ICAgICBtYWNybyhCaXRBbmQsIE5vZGVSZXN1bHRJbnQzMikgXApAQCAtMTEzLDExICsxMTMsMTIg
QEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1hY3JvKFB1dEJ5SWQsIE5v
ZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIG1hY3JvKFB1dEJ5SWRE
aXJlY3QsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIG1hY3Jv
KENoZWNrU3RydWN0dXJlLCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgbWFjcm8oUHV0U3RydWN0
dXJlLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQpIFwKKyAgICBtYWNybyhQ
dXRTdHJ1Y3R1cmUsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNybyhQaGFudG9tUHV0U3Ry
dWN0dXJlLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0KSBcCiAgICAgbWFjcm8o
R2V0UHJvcGVydHlTdG9yYWdlLCBOb2RlUmVzdWx0U3RvcmFnZSkgXAogICAgIG1hY3JvKEdldElu
ZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlUmVzdWx0U3RvcmFn
ZSkgXAogICAgIG1hY3JvKEdldEJ5T2Zmc2V0LCBOb2RlUmVzdWx0SlMpIFwKLSAgICBtYWNybyhQ
dXRCeU9mZnNldCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCisgICAg
bWFjcm8oUHV0QnlPZmZzZXQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhHZXRBcnJh
eUxlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCiAgICAgbWFjcm8oR2V0QXJndW1lbnRzTGVuZ3Ro
LCBOb2RlUmVzdWx0SW50MzIpIFwKICAgICBtYWNybyhHZXRTdHJpbmdMZW5ndGgsIE5vZGVSZXN1
bHRJbnQzMikgXApAQCAtMTM1LDcgKzEzNiw3IEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2Ug
REZHIHsKICAgICBtYWNybyhHZXRTY29wZWRWYXIsIE5vZGVSZXN1bHRKUyB8IE5vZGVNdXN0R2Vu
ZXJhdGUpIFwKICAgICBtYWNybyhQdXRTY29wZWRWYXIsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2Rl
Q2xvYmJlcnNXb3JsZCkgXAogICAgIG1hY3JvKEdldEdsb2JhbFZhciwgTm9kZVJlc3VsdEpTIHwg
Tm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKFB1dEdsb2JhbFZhciwgTm9kZU11c3RHZW5l
cmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCisgICAgbWFjcm8oUHV0R2xvYmFsVmFyLCBOb2Rl
TXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oQ2hlY2tGdW5jdGlvbiwgTm9kZU11c3RHZW5lcmF0
ZSkgXAogICAgIFwKICAgICAvKiBPcHRpbWl6YXRpb25zIGZvciBhcnJheSBtdXRhdGlvbi4gKi9c
CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlv
blBoYXNlLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1By
ZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcAkocmV2aXNpb24gMTE4MDU4KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTYxOCw3ICs2MTgsOCBAQCBwcml2YXRlOgogICAgICAgICBjYXNlIElu
dDMyVG9Eb3VibGU6CiAgICAgICAgIGNhc2UgR2V0TG9jYWxVbmxpbmtlZDoKICAgICAgICAgY2Fz
ZSBHZXRNeUFyZ3VtZW50c0xlbmd0aDoKLSAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6
IHsKKyAgICAgICAgY2FzZSBHZXRNeUFyZ3VtZW50QnlWYWw6CisgICAgICAgIGNhc2UgUGhhbnRv
bVB1dFN0cnVjdHVyZTogewogICAgICAgICAgICAgLy8gVGhpcyBub2RlIHNob3VsZCBuZXZlciBi
ZSB2aXNpYmxlIGF0IHRoaXMgc3RhZ2Ugb2YgY29tcGlsYXRpb24uIEl0IGlzCiAgICAgICAgICAg
ICAvLyBpbnNlcnRlZCBieSBmaXh1cCgpLCB3aGljaCBmb2xsb3dzIHRoaXMgcGhhc2UuCiAgICAg
ICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29y
ZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTE4
MDU4KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMzQ4Nyw2ICszNDg3LDE1IEBAIHZvaWQgU3BlY3VsYXRp
dmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgYnJlYWs7CiAgICAgfQogICAgICAg
ICAKKyAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6IHsKKyAgICAgICAgbV9qaXQuYWRkV2Vh
a1JlZmVyZW5jZVRyYW5zaXRpb24oCisgICAgICAgICAgICBub2RlLmNvZGVPcmlnaW4uY29kZU9y
aWdpbk93bmVyKCksCisgICAgICAgICAgICBub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCku
cHJldmlvdXNTdHJ1Y3R1cmUsCisgICAgICAgICAgICBub2RlLnN0cnVjdHVyZVRyYW5zaXRpb25E
YXRhKCkubmV3U3RydWN0dXJlKTsKKyAgICAgICAgbm9SZXN1bHQobV9jb21waWxlSW5kZXgpOwor
ICAgICAgICBicmVhazsKKyAgICB9CisKICAgICBjYXNlIFB1dFN0cnVjdHVyZTogewogICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAg
ICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENv
cmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZh
U2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlzaW9uIDExODA1OCkK
KysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHdv
cmtpbmcgY29weSkKQEAgLTM0OTQsNiArMzQ5NCwxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpj
b21waWxlKE5vZGUmIG5vZGUpCiAgICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAg
Y2FzZSBQaGFudG9tUHV0U3RydWN0dXJlOiB7CisgICAgICAgIG1faml0LmFkZFdlYWtSZWZlcmVu
Y2VUcmFuc2l0aW9uKAorICAgICAgICAgICAgbm9kZS5jb2RlT3JpZ2luLmNvZGVPcmlnaW5Pd25l
cigpLAorICAgICAgICAgICAgbm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3Vz
U3RydWN0dXJlLAorICAgICAgICAgICAgbm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5l
d1N0cnVjdHVyZSk7CisgICAgICAgIG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAg
YnJlYWs7CisgICAgfQorICAgICAgICAKICAgICBjYXNlIFB1dFN0cnVjdHVyZTogewogICAgICAg
ICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAg
ICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7Cg==
</data>
<flag name="review"
          id="149952"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>143470</attachid>
            <date>2012-05-22 23:12:35 -0700</date>
            <delta_ts>2012-05-22 23:42:23 -0700</delta_ts>
            <desc>the patch</desc>
            <filename>redundantstore_patch_3.diff</filename>
            <type>text/plain</type>
            <size>36344</size>
            <attacher name="Filip Pizlo">fpizlo</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFuZ2VMb2cKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2aXNpb24gMTE4MTI2KQorKysgU291cmNl
L0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpAQCAtMSwzICsxLDkwIEBA
CisyMDEyLTA1LTIyICBGaWxpcCBQaXpsbyAgPGZwaXpsb0BhcHBsZS5jb20+CisKKyAgICAgICAg
REZHIENTRSBzaG91bGQgZG8gcmVkdW5kYW50IHN0b3JlIGVsaW1pbmF0aW9uCisgICAgICAgIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD04NzE2MQorCisgICAgICAgIFJl
dmlld2VkIGJ5IE5PQk9EWSAoT09QUyEhKS4KKyAgICAgICAgCisgICAgICAgIFRoaXMgcGF0Y2gg
YWRkcyByZWR1bmRhbnQgc3RvcmUgZWxpbWluYXRpb24uIEZvciBleGFtcGxlLCBjb25zaWRlciB0
aGlzCisgICAgICAgIGNvZGU6CisgICAgICAgIAorICAgICAgICBvLnggPSA0MjsKKyAgICAgICAg
by54ID0gODQ7CisgICAgICAgIAorICAgICAgICBJZiBvLnggaXMgc3BlY3VsYXRlZCB0byBiZSBh
IHdlbGwtYmVoYXZlZCBmaWVsZCwgdGhlIGZpcnN0IGFzc2lnbm1lbnQgaXMKKyAgICAgICAgdW5u
ZWNlc3NhcnksIHNpbmNlIHRoZSBzZWNvbmQganVzdCBvdmVyd3JpdGVzIGl0LiBXZSB3b3VsZCBs
aWtlIHRvCisgICAgICAgIGVsaW1pbmF0ZSB0aGUgZmlyc3QgYXNzaWdubWVudCBpbiB0aGVzZSBj
YXNlcy4gVGhlIG5lZWQgZm9yIHRoaXMKKyAgICAgICAgb3B0aW1pemF0aW9uIGFyaXNlcyBtb3N0
bHkgZnJvbSBzdG9yZXMgdGhhdCBvdXIgcnVudGltZSByZXF1aXJlcy4gRm9yCisgICAgICAgIGV4
YW1wbGU6CisgICAgICAgIAorICAgICAgICBvID0ge2Y6MSwgZzoyLCBoOjN9OworICAgICAgICAK
KyAgICAgICAgVGhpcyB3aWxsIGhhdmUgZm91ciBhc3NpZ25tZW50cyB0byB0aGUgc3RydWN0dXJl
IGZvciB0aGUgbmV3bHkgY3JlYXRlZAorICAgICAgICBvYmplY3QgLSBvbmUgYXNzaWdubWVudCBm
b3IgdGhlIGVtcHR5IHN0cnVjdHVyZSwgb25lIGZvciB7Zn0sIG9uZSBmb3IKKyAgICAgICAge2Ys
IGd9LCBhbmQgb25lIGZvciB7ZiwgZywgaH0uIFdlIHdvdWxkIGxpa2UgdG8gb25seSBoYXZlIHRo
ZSBsYXN0IG9mCisgICAgICAgIHRob3NlIGFzc2lnbWVudHMgaW4gdGhpcyBjYXNlLgorICAgICAg
ICAKKyAgICAgICAgSW50cmlndWluZ2x5LCBkb2luZyBzbyBmb3IgY2FwdHVyZWQgdmFyaWFibGVz
IGJyZWFrcyB0aGUgd2F5IGFyZ3VtZW50cworICAgICAgICBzaW1wbGlmaWNhdGlvbiB1c2VkIHRv
IHdvcmsuIENvbnNpZGVyIHRoYXQgcHJpb3IgdG8gZWl0aGVyIGFyZ3VtZW50cworICAgICAgICBz
aW1wbGlmaWNhdGlvbiBvciBzdG9yZSBlbGltaW5hdGlvbiB3ZSB3aWxsIGhhdmUgSVIgdGhhdCBs
b29rcyBsaWtlOgorICAgICAgICAKKyAgICAgICAgYTogU2V0TG9jYWwocjAsIEVtcHR5KQorICAg
ICAgICBiOiBTZXRMb2NhbChyMSwgRW1wdHkpCisgICAgICAgIGM6IEdldExvY2FsKHIwKQorICAg
ICAgICBkOiBDcmVhdGVBcmd1bWVudHMoQGMpCisgICAgICAgIGU6IFNldExvY2FsKHIwLCBAZCkK
KyAgICAgICAgZjogU2V0TG9jYWwocjEsIEBkKQorICAgICAgICAKKyAgICAgICAgVGhlbiByZWR1
bmRhbnQgc3RvcmUgZWxpbWluYXRpb24gd2lsbCBlbGltaW5hdGUgdGhlIHN0b3JlcyB0aGF0Cisg
ICAgICAgIGluaXRpYWxpemUgdGhlIGFyZ3VtZW50cyByZWdpc3RlcnMgdG8gRW1wdHksIGJ1dCB0
aGVuIGFyZ3VtZW50cworICAgICAgICBzaW1wbGlmaWNhdGlvbiBlbGltaW5hdGVzIHRoZSBzdG9y
ZXMgdGhhdCBpbml0aWFsaXplIHRoZSBhcmd1bWVudHMgdG8KKyAgICAgICAgdGhlIG5ld2x5IGNy
ZWF0ZWQgYXJndW1lbnRzIC0gYW5kIGF0IHRoaXMgcG9pbnQgd2Ugbm8gbG9uZ2VyIGhhdmUgYW55
CisgICAgICAgIHN0b3JlcyB0byB0aGUgYXJndW1lbnRzIHJlZ2lzdGVyLCBsZWFkaW5nIHRvIGhp
bGFyaW91cyBjcmFzaGVzLiBUaGlzCisgICAgICAgIHBhdGNoIHRoZXJlZm9yZSBjaGFuZ2VzIGFy
Z3VtZW50cyBzaW1wbGlmaWNhdGlvbiB0byByZXBsYWNlCisgICAgICAgIENyZWF0ZUFyZ3VtZW50
cyB3aXRoIEpTQ29uc3RhbnQoRW1wdHkpIHJhdGhlciB0aGFuIGVsaW1pbmF0aW5nIHRoZQorICAg
ICAgICBTZXRMb2NhbHMuIEJ1dCB0aGlzIHJldmVhbGVkIGJ1Z3Mgd2hlcmUgYXJndW1lbnRzIHNp
bXBsaWZpY2F0aW9uIHdhcworICAgICAgICBiZWluZyBvdmVyemVhbG91cywgc28gSSBmaXhlZCB0
aG9zZSBidWdzLgorICAgICAgICAKKyAgICAgICAgVGhpcyBpcyBhIG1pbm9yIHNwZWVkLXVwIG9u
IFY4L2Vhcmx5IGFuZCBhIGhhbmRmdWwgb2Ygb3RoZXIgdGVzdHMuCisKKyAgICAgICAgKiBieXRl
Y29kZS9Db2RlQmxvY2suaDoKKyAgICAgICAgKEpTQzo6Q29kZUJsb2NrOjp1bmNoZWNrZWRBY3Rp
dmF0aW9uUmVnaXN0ZXIpOgorICAgICAgICAqIGRmZy9ERkdBYnN0cmFjdFN0YXRlLmNwcDoKKyAg
ICAgICAgKEpTQzo6REZHOjpBYnN0cmFjdFN0YXRlOjpleGVjdXRlKToKKyAgICAgICAgKiBkZmcv
REZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHA6CisgICAgICAgIChKU0M6OkRGRzo6
QXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZTo6cnVuKToKKyAgICAgICAgKEpTQzo6REZHOjpB
cmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlOjpvYnNlcnZlQmFkQXJndW1lbnRzVXNlKToKKyAg
ICAgICAgKEpTQzo6REZHOjpBcmd1bWVudHNTaW1wbGlmaWNhdGlvblBoYXNlOjpvYnNlcnZlQmFk
QXJndW1lbnRzVXNlcyk6CisgICAgICAgIChKU0M6OkRGRzo6QXJndW1lbnRzU2ltcGxpZmljYXRp
b25QaGFzZTo6b2JzZXJ2ZVByb3BlckFyZ3VtZW50c1VzZSk6CisgICAgICAgICogZGZnL0RGR0NT
RVBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZHOjpDU0VQaGFzZTo6Z2xvYmFsVmFyU3RvcmVF
bGltaW5hdGlvbik6CisgICAgICAgIChDU0VQaGFzZSk6CisgICAgICAgIChKU0M6OkRGRzo6Q1NF
UGhhc2U6OnB1dFN0cnVjdHVyZVN0b3JlRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpERkc6
OkNTRVBoYXNlOjpwdXRCeU9mZnNldFN0b3JlRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpE
Rkc6OkNTRVBoYXNlOjpzZXRMb2NhbFN0b3JlRWxpbWluYXRpb24pOgorICAgICAgICAoSlNDOjpE
Rkc6OkNTRVBoYXNlOjpzZXRSZXBsYWNlbWVudCk6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhh
c2U6OmVsaW1pbmF0ZSk6CisgICAgICAgIChKU0M6OkRGRzo6Q1NFUGhhc2U6OnBlcmZvcm1Ob2Rl
Q1NFKToKKyAgICAgICAgKiBkZmcvREZHR3JhcGguaDoKKyAgICAgICAgKEpTQzo6REZHOjpHcmFw
aDo6dW5jaGVja2VkQWN0aXZhdGlvblJlZ2lzdGVyRm9yKToKKyAgICAgICAgKEdyYXBoKToKKyAg
ICAgICAgKiBkZmcvREZHTm9kZS5oOgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6OmlzUGhhbnRv
bUFyZ3VtZW50cyk6CisgICAgICAgIChOb2RlKToKKyAgICAgICAgKEpTQzo6REZHOjpOb2RlOjpo
YXNDb25zdGFudCk6CisgICAgICAgIChKU0M6OkRGRzo6Tm9kZTo6dmFsdWVPZkpTQ29uc3RhbnQp
OgorICAgICAgICAoSlNDOjpERkc6Ok5vZGU6Omhhc1N0cnVjdHVyZVRyYW5zaXRpb25EYXRhKToK
KyAgICAgICAgKiBkZmcvREZHTm9kZVR5cGUuaDoKKyAgICAgICAgKERGRyk6CisgICAgICAgICog
ZGZnL0RGR1ByZWRpY3Rpb25Qcm9wYWdhdGlvblBoYXNlLmNwcDoKKyAgICAgICAgKEpTQzo6REZH
OjpQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZTo6cHJvcGFnYXRlKToKKyAgICAgICAgKiBkZmcv
REZHU3BlY3VsYXRpdmVKSVQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklU
Ojpjb21wdXRlVmFsdWVSZWNvdmVyeUZvcik6CisgICAgICAgICogZGZnL0RGR1NwZWN1bGF0aXZl
SklUMzJfNjQuY3BwOgorICAgICAgICAoSlNDOjpERkc6OlNwZWN1bGF0aXZlSklUOjpjb21waWxl
KToKKyAgICAgICAgKiBkZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHA6CisgICAgICAgIChKU0M6
OkRGRzo6U3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUpOgorCiAyMDEyLTA1LTIyICBGaWxpcCBQaXps
byAgPGZwaXpsb0BhcHBsZS5jb20+CiAKICAgICAgICAgVW5yZXZpZXdlZCwgcm9sbG91dCBodHRw
Oi8vdHJhYy53ZWJraXQub3JnL2NoYW5nZXNldC8xMTgxMDgKSW5kZXg6IFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNj
cmlwdENvcmUvYnl0ZWNvZGUvQ29kZUJsb2NrLmgJKHJldmlzaW9uIDExODA1OCkKKysrIFNvdXJj
ZS9KYXZhU2NyaXB0Q29yZS9ieXRlY29kZS9Db2RlQmxvY2suaAkod29ya2luZyBjb3B5KQpAQCAt
NDYyLDYgKzQ2MiwxMiBAQCBuYW1lc3BhY2UgSlNDIHsKICAgICAgICAgICAgIEFTU0VSVChuZWVk
c0Z1bGxTY29wZUNoYWluKCkpOwogICAgICAgICAgICAgcmV0dXJuIG1fYWN0aXZhdGlvblJlZ2lz
dGVyOwogICAgICAgICB9CisgICAgICAgIGludCB1bmNoZWNrZWRBY3RpdmF0aW9uUmVnaXN0ZXIo
KQorICAgICAgICB7CisgICAgICAgICAgICBpZiAoIW5lZWRzRnVsbFNjb3BlQ2hhaW4oKSkKKyAg
ICAgICAgICAgICAgICByZXR1cm4gSW52YWxpZFZpcnR1YWxSZWdpc3RlcjsKKyAgICAgICAgICAg
IHJldHVybiBhY3RpdmF0aW9uUmVnaXN0ZXIoKTsKKyAgICAgICAgfQogICAgICAgICBib29sIHVz
ZXNBcmd1bWVudHMoKSBjb25zdCB7IHJldHVybiBtX2FyZ3VtZW50c1JlZ2lzdGVyICE9IC0xOyB9
CiAgICAgICAgIAogICAgICAgICBib29sIG5lZWRzQWN0aXZhdGlvbigpIGNvbnN0CkluZGV4OiBT
b3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0Fic3RyYWN0U3RhdGUuY3BwCj09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0K
LS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0ZS5jcHAJKHJldmlz
aW9uIDExODEyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQWJzdHJhY3RTdGF0
ZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTI2NCw3ICsyNjQsOCBAQCBib29sIEFic3RyYWN0U3Rh
dGU6OmV4ZWN1dGUodW5zaWduZWQgaW5kCiAgICAgICAgIAogICAgIHN3aXRjaCAobm9kZS5vcCgp
KSB7CiAgICAgY2FzZSBKU0NvbnN0YW50OgotICAgIGNhc2UgV2Vha0pTQ29uc3RhbnQ6IHsKKyAg
ICBjYXNlIFdlYWtKU0NvbnN0YW50OgorICAgIGNhc2UgUGhhbnRvbUFyZ3VtZW50czogewogICAg
ICAgICBmb3JOb2RlKG5vZGVJbmRleCkuc2V0KG1fZ3JhcGgudmFsdWVPZkpTQ29uc3RhbnQobm9k
ZUluZGV4KSk7CiAgICAgICAgIG5vZGUuc2V0Q2FuRXhpdChmYWxzZSk7CiAgICAgICAgIGJyZWFr
OwpAQCAtMTQxMSw2ICsxNDEyLDcgQEAgYm9vbCBBYnN0cmFjdFN0YXRlOjpleGVjdXRlKHVuc2ln
bmVkIGluZAogICAgIH0KICAgICAgICAgICAgIAogICAgIGNhc2UgUHV0U3RydWN0dXJlOgorICAg
IGNhc2UgUGhhbnRvbVB1dFN0cnVjdHVyZToKICAgICAgICAgbm9kZS5zZXRDYW5FeGl0KGZhbHNl
KTsKICAgICAgICAgY2xvYmJlclN0cnVjdHVyZXMoaW5kZXhJbkJsb2NrKTsKICAgICAgICAgZm9y
Tm9kZShub2RlLmNoaWxkMSgpKS5zZXQobm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5l
d1N0cnVjdHVyZSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0FyZ3VtZW50
c1NpbXBsaWZpY2F0aW9uUGhhc2UuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0
Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmljYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDEx
ODEyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQXJndW1lbnRzU2ltcGxpZmlj
YXRpb25QaGFzZS5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE3OCw3ICsxNzgsNyBAQCBwdWJsaWM6
CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBhIHZhcmlhYmxlIHRoYXQgd2UgdGhpbmsgaXMg
YWxpYXNlZCB0byB0aGUgYXJndW1lbnRzLCB0aGVuIGl0CiAgICAgICAgICAgICAgICAgICAgICAg
ICAvLyBtYXkgZXNjYXBlIGF0IHRoaXMgcG9pbnQuIEluIGZ1dHVyZSwgd2UgY291bGQgdHJhY2sg
dHJhbnNpdGl2ZQogICAgICAgICAgICAgICAgICAgICAgICAgLy8gYWxpYXNpbmcuIEJ1dCBub3Qg
eWV0LgotICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZShub2Rl
LmNoaWxkMSgpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVCYWRBcmd1bWVudHNV
c2Uobm9kZSwgbm9kZS5jaGlsZDEoKSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAKICAgICAg
ICAgICAgICAgICAgICAgICAgIGlmICh2YXJpYWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkK
ICAgICAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsKQEAgLTI2OSw3ICsyNjksNyBAQCBw
dWJsaWM6CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBUaGF0J3Mgc28gYXdmdWwgYW5kIHBy
ZXR0eSBtdWNoIGltcG9zc2libGUgc2luY2UgaXQgd291bGQKICAgICAgICAgICAgICAgICAgICAg
ICAgIC8vIGltcGx5IHRoYXQgdGhlIGFyZ3VtZW50cyB3ZXJlIHByZWRpY3RlZCBpbnRlZ2VyLCBi
dXQgaXQncwogICAgICAgICAgICAgICAgICAgICAgICAgLy8gZ29vZCB0byBiZSBkZWZlbnNpdmUg
YW5kIHRob3JvdWdoLgotICAgICAgICAgICAgICAgICAgICAgICAgb2JzZXJ2ZUJhZEFyZ3VtZW50
c1VzZShub2RlLmNoaWxkMigpKTsKKyAgICAgICAgICAgICAgICAgICAgICAgIG9ic2VydmVCYWRB
cmd1bWVudHNVc2Uobm9kZSwgbm9kZS5jaGlsZDIoKSk7CiAgICAgICAgICAgICAgICAgICAgICAg
ICBvYnNlcnZlUHJvcGVyQXJndW1lbnRzVXNlKG5vZGUsIG5vZGUuY2hpbGQxKCkpOwogICAgICAg
ICAgICAgICAgICAgICAgICAgYnJlYWs7CiAgICAgICAgICAgICAgICAgICAgIH0KQEAgLTM5Miwz
MSArMzkyLDYgQEAgcHVibGljOgogICAgICAgICAgICAgICAgICAgICAKICAgICAgICAgICAgICAg
ICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZhcmlh
YmxlQWNjZXNzRGF0YSgpOwogICAgICAgICAgICAgICAgICAgICAKLSAgICAgICAgICAgICAgICAg
ICAgLy8gSWYgdGhpcyBpcyBhIHN0b3JlIGludG8gdGhlIGFyZ3VtZW50cyByZWdpc3RlciBmb3Ig
YW4gSW5saW5lQ2FsbEZyYW1lKgotICAgICAgICAgICAgICAgICAgICAvLyB0aGF0IGRvZXMgbm90
IGNyZWF0ZSBhcmd1bWVudHMsIHRoZW4ga2lsbCBpdC4KLSAgICAgICAgICAgICAgICAgICAgaW50
IGFyZ3VtZW50c1JlZ2lzdGVyID0KLSAgICAgICAgICAgICAgICAgICAgICAgIG1fZ3JhcGgudW5j
aGVja2VkQXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKTsKLSAgICAgICAgICAg
ICAgICAgICAgaWYgKCh2YXJpYWJsZUFjY2Vzc0RhdGEtPmxvY2FsKCkgPT0gYXJndW1lbnRzUmVn
aXN0ZXIKLSAgICAgICAgICAgICAgICAgICAgICAgICB8fCB2YXJpYWJsZUFjY2Vzc0RhdGEtPmxv
Y2FsKCkKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgPT0gdW5tb2RpZmllZEFyZ3VtZW50
c1JlZ2lzdGVyKGFyZ3VtZW50c1JlZ2lzdGVyKSkKLSAgICAgICAgICAgICAgICAgICAgICAgICYm
ICFtX2NyZWF0ZXNBcmd1bWVudHMuY29udGFpbnMoc291cmNlLmNvZGVPcmlnaW4uaW5saW5lQ2Fs
bEZyYW1lKSkgewotICAgICAgICAgICAgICAgICAgICAgICAgLy8gRmluZCB0aGUgRmx1c2guIEl0
IHNob3VsZCBiZSB0aGUgbmV4dCBpbnN0cnVjdGlvbi4KLSAgICAgICAgICAgICAgICAgICAgICAg
IE5vZGUmIGZsdXNoID0gbV9ncmFwaFtibG9jay0+YXQoaW5kZXhJbkJsb2NrICsgMSldOwotICAg
ICAgICAgICAgICAgICAgICAgICAgQVNTRVJUKGZsdXNoLm9wKCkgPT0gRmx1c2gpOwotICAgICAg
ICAgICAgICAgICAgICAgICAgQVNTRVJUKGZsdXNoLnZhcmlhYmxlQWNjZXNzRGF0YSgpID09IHZh
cmlhYmxlQWNjZXNzRGF0YSk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBBU1NFUlQoZmx1c2gu
Y2hpbGQxKCkgPT0gbm9kZUluZGV4KTsKLSAgICAgICAgICAgICAgICAgICAgICAgIC8vIEJlIGRl
ZmVuc2l2ZSBpbiByZWxlYXNlIG1vZGUuCi0gICAgICAgICAgICAgICAgICAgICAgICBpZiAoZmx1
c2gub3AoKSAhPSBGbHVzaAotICAgICAgICAgICAgICAgICAgICAgICAgICAgIHx8IGZsdXNoLnZh
cmlhYmxlQWNjZXNzRGF0YSgpICE9IHZhcmlhYmxlQWNjZXNzRGF0YQotICAgICAgICAgICAgICAg
ICAgICAgICAgICAgIHx8IGZsdXNoLmNoaWxkMSgpICE9IG5vZGVJbmRleCkKLSAgICAgICAgICAg
ICAgICAgICAgICAgICAgICBicmVhazsKLSAgICAgICAgICAgICAgICAgICAgICAgIGZsdXNoLnNl
dE9wQW5kRGVmYXVsdEZsYWdzKE5vcCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBtX2dyYXBo
LmNsZWFyQW5kRGVyZWZDaGlsZDEoZmx1c2gpOwotICAgICAgICAgICAgICAgICAgICAgICAgZmx1
c2guc2V0UmVmQ291bnQoMCk7Ci0gICAgICAgICAgICAgICAgICAgICAgICBjaGFuZ2VkID0gdHJ1
ZTsKLSAgICAgICAgICAgICAgICAgICAgICAgIGJyZWFrOwotICAgICAgICAgICAgICAgICAgICB9
Ci0gICAgICAgICAgICAgICAgICAgIAogICAgICAgICAgICAgICAgICAgICBpZiAodmFyaWFibGVB
Y2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCiAgICAgICAgICAgICAgICAgICAgICAgICBicmVhazsK
ICAgICAgICAgICAgICAgICAgICAgCkBAIC01ODMsNiArNTU4LDM1IEBAIHB1YmxpYzoKICAgICAg
ICAgICAgIGluc2VydGlvblNldC5leGVjdXRlKCpibG9jayk7CiAgICAgICAgIH0KICAgICAgICAg
CisgICAgICAgIGZvciAoQmxvY2tJbmRleCBibG9ja0luZGV4ID0gMDsgYmxvY2tJbmRleCA8IG1f
Z3JhcGgubV9ibG9ja3Muc2l6ZSgpOyArK2Jsb2NrSW5kZXgpIHsKKyAgICAgICAgICAgIEJhc2lj
QmxvY2sqIGJsb2NrID0gbV9ncmFwaC5tX2Jsb2Nrc1tibG9ja0luZGV4XS5nZXQoKTsKKyAgICAg
ICAgICAgIGlmICghYmxvY2spCisgICAgICAgICAgICAgICAgY29udGludWU7CisgICAgICAgICAg
ICBmb3IgKHVuc2lnbmVkIGluZGV4SW5CbG9jayA9IDA7IGluZGV4SW5CbG9jayA8IGJsb2NrLT5z
aXplKCk7ICsraW5kZXhJbkJsb2NrKSB7CisgICAgICAgICAgICAgICAgTm9kZUluZGV4IG5vZGVJ
bmRleCA9IGJsb2NrLT5hdChpbmRleEluQmxvY2spOworICAgICAgICAgICAgICAgIE5vZGUmIG5v
ZGUgPSBtX2dyYXBoW25vZGVJbmRleF07CisgICAgICAgICAgICAgICAgaWYgKCFub2RlLnNob3Vs
ZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgICAgIGNvbnRpbnVlOworICAgICAgICAgICAg
ICAgIGlmIChub2RlLm9wKCkgIT0gQ3JlYXRlQXJndW1lbnRzKQorICAgICAgICAgICAgICAgICAg
ICBjb250aW51ZTsKKyAgICAgICAgICAgICAgICAvLyBJZiB0aGlzIGlzIGEgQ3JlYXRlQXJndW1l
bnRzIGZvciBhbiBJbmxpbmVDYWxsRnJhbWUqIHRoYXQgZG9lcworICAgICAgICAgICAgICAgIC8v
IG5vdCBjcmVhdGUgYXJndW1lbnRzLCB0aGVuIHJlcGxhY2UgaXQgd2l0aCBhIFBoYW50b21Bcmd1
bWVudHMuCisgICAgICAgICAgICAgICAgLy8gUGhhbnRvbUFyZ3VtZW50cyBpcyBhIGNvbnN0YW50
IHRoYXQgcmVwcmVzZW50cyBKU1ZhbHVlKCkgKHRoZQorICAgICAgICAgICAgICAgIC8vIGVtcHR5
IHZhbHVlKSBpbiBERkcgYW5kIGFyZ3VtZW50cyBjcmVhdGlvbiBmb3IgT1NSIGV4aXQuCisgICAg
ICAgICAgICAgICAgaWYgKG1fY3JlYXRlc0FyZ3VtZW50cy5jb250YWlucyhub2RlLmNvZGVPcmln
aW4uaW5saW5lQ2FsbEZyYW1lKSkKKyAgICAgICAgICAgICAgICAgICAgY29udGludWU7CisgICAg
ICAgICAgICAgICAgTm9kZSBwaGFudG9tKFBoYW50b20sIG5vZGUuY29kZU9yaWdpbik7CisgICAg
ICAgICAgICAgICAgcGhhbnRvbS5jaGlsZHJlbiA9IG5vZGUuY2hpbGRyZW47CisgICAgICAgICAg
ICAgICAgcGhhbnRvbS5yZWYoKTsKKyAgICAgICAgICAgICAgICBub2RlLnNldE9wQW5kRGVmYXVs
dEZsYWdzKFBoYW50b21Bcmd1bWVudHMpOworICAgICAgICAgICAgICAgIG5vZGUuY2hpbGRyZW4u
cmVzZXQoKTsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggcGhhbnRvbU5vZGVJbmRleCA9IG1f
Z3JhcGguc2l6ZSgpOworICAgICAgICAgICAgICAgIG1fZ3JhcGguYXBwZW5kKHBoYW50b20pOwor
ICAgICAgICAgICAgICAgIGluc2VydGlvblNldC5hcHBlbmQoaW5kZXhJbkJsb2NrLCBwaGFudG9t
Tm9kZUluZGV4KTsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGluc2VydGlvblNldC5leGVj
dXRlKCpibG9jayk7CisgICAgICAgIH0KKyAgICAgICAgCiAgICAgICAgIGlmIChjaGFuZ2VkKQog
ICAgICAgICAgICAgbV9ncmFwaC5jb2xsZWN0R2FyYmFnZSgpOwogICAgICAgICAKQEAgLTU5Nywz
MiArNjAxLDQzIEBAIHByaXZhdGU6CiAgICAgICAgICAgICBEZWZhdWx0SGFzaDxWYXJpYWJsZUFj
Y2Vzc0RhdGEqPjo6SGFzaCwKICAgICAgICAgICAgIE51bGxhYmxlSGFzaFRyYWl0czxWYXJpYWJs
ZUFjY2Vzc0RhdGEqPiA+IG1fYXJndW1lbnRzQWxpYXNpbmc7CiAKLSAgICB2b2lkIG9ic2VydmVC
YWRBcmd1bWVudHNVc2UoRWRnZSBlZGdlKQorICAgIHZvaWQgb2JzZXJ2ZUJhZEFyZ3VtZW50c1Vz
ZShOb2RlJiBub2RlLCBFZGdlIGVkZ2UpCiAgICAgewogICAgICAgICBpZiAoIWVkZ2UpCiAgICAg
ICAgICAgICByZXR1cm47CiAgICAgICAgIAogICAgICAgICBOb2RlJiBjaGlsZCA9IG1fZ3JhcGhb
ZWRnZV07Ci0gICAgICAgIGlmIChjaGlsZC5vcCgpICE9IEdldExvY2FsKQotICAgICAgICAgICAg
cmV0dXJuOwotICAgICAgICAKLSAgICAgICAgaWYgKGNoaWxkLmxvY2FsKCkgPT0gbV9ncmFwaC51
bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihjaGlsZC5jb2RlT3JpZ2luKSkgewotICAgICAg
ICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChjaGlsZC5jb2RlT3JpZ2luLmlubGluZUNhbGxG
cmFtZSk7Ci0gICAgICAgICAgICByZXR1cm47CisgICAgICAgIHN3aXRjaCAoY2hpbGQub3AoKSkg
eworICAgICAgICBjYXNlIENyZWF0ZUFyZ3VtZW50czogeworICAgICAgICAgICAgaWYgKG5vZGUu
Y29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUgIT0gY2hpbGQuY29kZU9yaWdpbi5pbmxpbmVDYWxs
RnJhbWUpCisgICAgICAgICAgICAgICAgbV9jcmVhdGVzQXJndW1lbnRzLmFkZChjaGlsZC5jb2Rl
T3JpZ2luLmlubGluZUNhbGxGcmFtZSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgfQor
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgR2V0TG9jYWw6IHsKKyAgICAgICAgICAgIGlmIChj
aGlsZC5sb2NhbCgpID09IG1fZ3JhcGgudW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXJGb3IoY2hp
bGQuY29kZU9yaWdpbikpIHsKKyAgICAgICAgICAgICAgICBtX2NyZWF0ZXNBcmd1bWVudHMuYWRk
KGNoaWxkLmNvZGVPcmlnaW4uaW5saW5lQ2FsbEZyYW1lKTsKKyAgICAgICAgICAgICAgICByZXR1
cm47CisgICAgICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgICAgIFZhcmlhYmxlQWNj
ZXNzRGF0YSogdmFyaWFibGVBY2Nlc3NEYXRhID0gY2hpbGQudmFyaWFibGVBY2Nlc3NEYXRhKCk7
CisgICAgICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCisgICAg
ICAgICAgICAgICAgcmV0dXJuOworICAgICAgICAgICAgCisgICAgICAgICAgICBBcmd1bWVudHNB
bGlhc2luZ0RhdGEmIGRhdGEgPSBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nl
c3NEYXRhKS0+c2Vjb25kOworICAgICAgICAgICAgZGF0YS5lc2NhcGVzID0gdHJ1ZTsKKyAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgICAgICAgICAKKyAgICAgICAgZGVmYXVsdDoK
KyAgICAgICAgICAgIGJyZWFrOwogICAgICAgICB9Ci0gICAgICAgIAotICAgICAgICBWYXJpYWJs
ZUFjY2Vzc0RhdGEqIHZhcmlhYmxlQWNjZXNzRGF0YSA9IGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0
YSgpOwotICAgICAgICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCi0gICAg
ICAgICAgICByZXR1cm47Ci0gICAgICAgIAotICAgICAgICBBcmd1bWVudHNBbGlhc2luZ0RhdGEm
IGRhdGEgPSBtX2FyZ3VtZW50c0FsaWFzaW5nLmZpbmQodmFyaWFibGVBY2Nlc3NEYXRhKS0+c2Vj
b25kOwotICAgICAgICBkYXRhLmVzY2FwZXMgPSB0cnVlOwogICAgIH0KICAgICAKICAgICB2b2lk
IG9ic2VydmVCYWRBcmd1bWVudHNVc2VzKE5vZGUmIG5vZGUpCiAgICAgewogICAgICAgICBmb3Ig
KHVuc2lnbmVkIGkgPSBtX2dyYXBoLm51bUNoaWxkcmVuKG5vZGUpOyBpLS07KQotICAgICAgICAg
ICAgb2JzZXJ2ZUJhZEFyZ3VtZW50c1VzZShtX2dyYXBoLmNoaWxkKG5vZGUsIGkpKTsKKyAgICAg
ICAgICAgIG9ic2VydmVCYWRBcmd1bWVudHNVc2Uobm9kZSwgbV9ncmFwaC5jaGlsZChub2RlLCBp
KSk7CiAgICAgfQogICAgIAogICAgIHZvaWQgb2JzZXJ2ZVByb3BlckFyZ3VtZW50c1VzZShOb2Rl
JiBub2RlLCBFZGdlIGVkZ2UpCkBAIC02NDksOSArNjY0LDEzIEBAIHByaXZhdGU6CiAgICAgICAg
IH0KICAgICAgICAgICAgICAgICAgICAgICAgIAogICAgICAgICBWYXJpYWJsZUFjY2Vzc0RhdGEq
IHZhcmlhYmxlQWNjZXNzRGF0YSA9IGNoaWxkLnZhcmlhYmxlQWNjZXNzRGF0YSgpOwotICAgICAg
ICBpZiAodmFyaWFibGVBY2Nlc3NEYXRhLT5pc0NhcHR1cmVkKCkpCisgICAgICAgIGlmICh2YXJp
YWJsZUFjY2Vzc0RhdGEtPmlzQ2FwdHVyZWQoKSkgeworICAgICAgICAgICAgaWYgKGNoaWxkLmxv
Y2FsKCkgPT0gbV9ncmFwaC51bmNoZWNrZWRBcmd1bWVudHNSZWdpc3RlckZvcihjaGlsZC5jb2Rl
T3JpZ2luKQorICAgICAgICAgICAgICAgICYmIG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJh
bWUgIT0gY2hpbGQuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpCisgICAgICAgICAgICAgICAg
bV9jcmVhdGVzQXJndW1lbnRzLmFkZChjaGlsZC5jb2RlT3JpZ2luLmlubGluZUNhbGxGcmFtZSk7
CiAgICAgICAgICAgICByZXR1cm47Ci0gICAgICAgICAgICAgICAgICAgICAgICAKKyAgICAgICAg
fQorICAgICAgICAKICAgICAgICAgQXJndW1lbnRzQWxpYXNpbmdEYXRhJiBkYXRhID0gbV9hcmd1
bWVudHNBbGlhc2luZy5maW5kKHZhcmlhYmxlQWNjZXNzRGF0YSktPnNlY29uZDsKICAgICAgICAg
ZGF0YS5tZXJnZUNhbGxDb250ZXh0KG5vZGUuY29kZU9yaWdpbi5pbmxpbmVDYWxsRnJhbWUpOwog
ICAgIH0KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHQ1NFUGhhc2UuY3BwCShy
ZXZpc2lvbiAxMTgxMjYpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR0NTRVBoYXNl
LmNwcAkod29ya2luZyBjb3B5KQpAQCAtMTk5LDYgKzE5OSwzMyBAQCBwcml2YXRlOgogICAgICAg
ICByZXR1cm4gTm9Ob2RlOwogICAgIH0KICAgICAKKyAgICBOb2RlSW5kZXggZ2xvYmFsVmFyU3Rv
cmVFbGltaW5hdGlvbih1bnNpZ25lZCB2YXJOdW1iZXIsIEpTR2xvYmFsT2JqZWN0KiBnbG9iYWxP
YmplY3QpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsg
aS0tOykgeworICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0
KGkpOworICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOworICAgICAgICAg
ICAgaWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7
CisgICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgY2FzZSBQdXRH
bG9iYWxWYXI6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUudmFyTnVtYmVyKCkgPT0gdmFyTnVt
YmVyICYmIGNvZGVCbG9jaygpLT5nbG9iYWxPYmplY3RGb3Iobm9kZS5jb2RlT3JpZ2luKSA9PSBn
bG9iYWxPYmplY3QpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2UgR2V0R2xv
YmFsVmFyOgorICAgICAgICAgICAgICAgIGlmIChub2RlLnZhck51bWJlcigpID09IHZhck51bWJl
ciAmJiBjb2RlQmxvY2soKS0+Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbikgPT0gZ2xv
YmFsT2JqZWN0KQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgZGVmYXVsdDoKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGlmIChtX2dy
YXBoLmNsb2JiZXJzV29ybGQoaW5kZXgpIHx8IG5vZGUuY2FuRXhpdCgpKQorICAgICAgICAgICAg
ICAgIHJldHVybiBOb05vZGU7CisgICAgICAgIH0KKyAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAg
ICB9CisgICAgCiAgICAgTm9kZUluZGV4IGdldEJ5VmFsTG9hZEVsaW1pbmF0aW9uKE5vZGVJbmRl
eCBjaGlsZDEsIE5vZGVJbmRleCBjaGlsZDIpCiAgICAgewogICAgICAgICBmb3IgKHVuc2lnbmVk
IGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewpAQCAtMzAzLDYgKzMzMCw1NiBAQCBwcml2YXRl
OgogICAgICAgICByZXR1cm4gZmFsc2U7CiAgICAgfQogICAgIAorICAgIE5vZGVJbmRleCBwdXRT
dHJ1Y3R1cmVTdG9yZUVsaW1pbmF0aW9uKE5vZGVJbmRleCBjaGlsZDEpCisgICAgeworICAgICAg
ICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgeworICAgICAgICAgICAg
Tm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkpOworICAgICAgICAgICAgaWYg
KGluZGV4ID09IGNoaWxkMSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIE5v
ZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKKyAgICAgICAgICAgIGlmICghbm9kZS5zaG91bGRH
ZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgc3dpdGNoIChu
b2RlLm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgQ2hlY2tTdHJ1Y3R1cmU6CisgICAgICAgICAg
ICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2Ug
UGhhbnRvbVB1dFN0cnVjdHVyZToKKyAgICAgICAgICAgICAgICBpZiAobm9kZS5jaGlsZDEoKSA9
PSBjaGlsZDEpIC8vIE5vIG5lZWQgdG8gcmV0cmFjZSBvdXIgc3RlcHMuCisgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAg
ICAgICAgCisgICAgICAgICAgICBjYXNlIFB1dFN0cnVjdHVyZToKKyAgICAgICAgICAgICAgICBp
ZiAobm9kZS5jaGlsZDEoKSA9PSBjaGlsZDEpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBp
bmRleDsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAg
ICAgIC8vIFB1dFN0cnVjdHVyZSBuZWVkcyB0byBleGVjdXRlIGlmIHdlIEdDLiBIZW5jZSB0aGlz
IG5lZWRzIHRvCisgICAgICAgICAgICAvLyBiZSBjYXJlZnVsIHdpdGggcmVzcGVjdCB0byBub2Rl
cyB0aGF0IEdDLgorICAgICAgICAgICAgY2FzZSBDcmVhdGVBcmd1bWVudHM6CisgICAgICAgICAg
ICBjYXNlIFRlYXJPZmZBcmd1bWVudHM6CisgICAgICAgICAgICBjYXNlIE5ld0Z1bmN0aW9uTm9D
aGVjazoKKyAgICAgICAgICAgIGNhc2UgTmV3RnVuY3Rpb246CisgICAgICAgICAgICBjYXNlIE5l
d0Z1bmN0aW9uRXhwcmVzc2lvbjoKKyAgICAgICAgICAgIGNhc2UgQ3JlYXRlQWN0aXZhdGlvbjoK
KyAgICAgICAgICAgIGNhc2UgVGVhck9mZkFjdGl2YXRpb246CisgICAgICAgICAgICBjYXNlIFN0
ckNhdDoKKyAgICAgICAgICAgIGNhc2UgVG9QcmltaXRpdmU6CisgICAgICAgICAgICBjYXNlIE5l
d1JlZ2V4cDoKKyAgICAgICAgICAgIGNhc2UgTmV3QXJyYXlCdWZmZXI6CisgICAgICAgICAgICBj
YXNlIE5ld0FycmF5OgorICAgICAgICAgICAgY2FzZSBOZXdPYmplY3Q6CisgICAgICAgICAgICBj
YXNlIENyZWF0ZVRoaXM6CisgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAg
ICAgICAgICAKKyAgICAgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgYnJlYWs7Cisg
ICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobV9ncmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4
KSB8fCBub2RlLmNhbkV4aXQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgfQorICAgIAogICAgIE5vZGVJbmRl
eCBnZXRCeU9mZnNldExvYWRFbGltaW5hdGlvbih1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBO
b2RlSW5kZXggY2hpbGQxKQogICAgIHsKICAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRl
eEluQmxvY2s7IGktLTspIHsKQEAgLTM0OSw2ICs0MjYsNTIgQEAgcHJpdmF0ZToKICAgICAgICAg
cmV0dXJuIE5vTm9kZTsKICAgICB9CiAgICAgCisgICAgTm9kZUluZGV4IHB1dEJ5T2Zmc2V0U3Rv
cmVFbGltaW5hdGlvbih1bnNpZ25lZCBpZGVudGlmaWVyTnVtYmVyLCBOb2RlSW5kZXggY2hpbGQx
KQorICAgIHsKKyAgICAgICAgZm9yICh1bnNpZ25lZCBpID0gbV9pbmRleEluQmxvY2s7IGktLTsp
IHsKKyAgICAgICAgICAgIE5vZGVJbmRleCBpbmRleCA9IG1fY3VycmVudEJsb2NrLT5hdChpKTsK
KyAgICAgICAgICAgIGlmIChpbmRleCA9PSBjaGlsZDEpCisgICAgICAgICAgICAgICAgYnJlYWs7
CisKKyAgICAgICAgICAgIE5vZGUmIG5vZGUgPSBtX2dyYXBoW2luZGV4XTsKKyAgICAgICAgICAg
IGlmICghbm9kZS5zaG91bGRHZW5lcmF0ZSgpKQorICAgICAgICAgICAgICAgIGNvbnRpbnVlOwor
ICAgICAgICAgICAgc3dpdGNoIChub2RlLm9wKCkpIHsKKyAgICAgICAgICAgIGNhc2UgR2V0QnlP
ZmZzZXQ6CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtu
b2RlLnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlciA9PSBpZGVudGlm
aWVyTnVtYmVyKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAgICAgICAg
ICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBQdXRCeU9m
ZnNldDoKKyAgICAgICAgICAgICAgICBpZiAobV9ncmFwaC5tX3N0b3JhZ2VBY2Nlc3NEYXRhW25v
ZGUuc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVyID09IGlkZW50aWZp
ZXJOdW1iZXIpIHsKKyAgICAgICAgICAgICAgICAgICAgaWYgKG5vZGUuY2hpbGQxKCkgPT0gY2hp
bGQxKSAvLyBNdXN0IGJlIHNhbWUgcHJvcGVydHkgc3RvcmFnZS4KKyAgICAgICAgICAgICAgICAg
ICAgICAgIHJldHVybiBpbmRleDsKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsK
KyAgICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAg
ICAgCisgICAgICAgICAgICBjYXNlIFB1dEJ5VmFsOgorICAgICAgICAgICAgY2FzZSBQdXRCeVZh
bEFsaWFzOgorICAgICAgICAgICAgY2FzZSBHZXRCeVZhbDoKKyAgICAgICAgICAgICAgICBpZiAo
bV9ncmFwaC5ieVZhbElzUHVyZShub2RlKSkgeworICAgICAgICAgICAgICAgICAgICAvLyBJZiBQ
dXRCeVZhbCBzcGVjdWxhdGVzIHRoYXQgaXQncyBhY2Nlc3NpbmcgYW4gYXJyYXkgd2l0aCBhbgor
ICAgICAgICAgICAgICAgICAgICAvLyBpbnRlZ2VyIGluZGV4LCB0aGVuIGl0J3MgaW1wb3NzaWJs
ZSBmb3IgaXQgdG8gY2F1c2UgYSBzdHJ1Y3R1cmUKKyAgICAgICAgICAgICAgICAgICAgLy8gY2hh
bmdlLgorICAgICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICB9CisgICAg
ICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAg
IGRlZmF1bHQ6CisgICAgICAgICAgICAgICAgaWYgKG1fZ3JhcGguY2xvYmJlcnNXb3JsZChpbmRl
eCkpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAgICAgICAgICAg
YnJlYWs7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBpZiAobm9kZS5jYW5FeGl0KCkpCisg
ICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgfQorICAgICAgICByZXR1cm4g
Tm9Ob2RlOworICAgIH0KKyAgICAKICAgICBOb2RlSW5kZXggZ2V0UHJvcGVydHlTdG9yYWdlTG9h
ZEVsaW1pbmF0aW9uKE5vZGVJbmRleCBjaGlsZDEpCiAgICAgewogICAgICAgICBmb3IgKHVuc2ln
bmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0tOykgewpAQCAtNDc5LDYgKzYwMiw2MyBAQCBwcml2
YXRlOgogICAgICAgICByZXR1cm4gTm9Ob2RlOwogICAgIH0KICAgICAKKyAgICAvLyBUaGlzIHJl
dHVybnMgdGhlIEZsdXNoIG5vZGUgdGhhdCBpcyBrZWVwaW5nIGEgU2V0TG9jYWwgYWxpdmUuCisg
ICAgTm9kZUluZGV4IHNldExvY2FsU3RvcmVFbGltaW5hdGlvbihWaXJ0dWFsUmVnaXN0ZXIgbG9j
YWwpCisgICAgeworICAgICAgICBmb3IgKHVuc2lnbmVkIGkgPSBtX2luZGV4SW5CbG9jazsgaS0t
OykgeworICAgICAgICAgICAgTm9kZUluZGV4IGluZGV4ID0gbV9jdXJyZW50QmxvY2stPmF0KGkp
OworICAgICAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbaW5kZXhdOworICAgICAgICAgICAg
aWYgKCFub2RlLnNob3VsZEdlbmVyYXRlKCkpCisgICAgICAgICAgICAgICAgY29udGludWU7Cisg
ICAgICAgICAgICBzd2l0Y2ggKG5vZGUub3AoKSkgeworICAgICAgICAgICAgY2FzZSBHZXRMb2Nh
bDoKKyAgICAgICAgICAgIGNhc2UgU2V0TG9jYWw6CisgICAgICAgICAgICAgICAgaWYgKG5vZGUu
bG9jYWwoKSA9PSBsb2NhbCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICAKKyAgICAgICAgICAgIGNhc2Ug
R2V0TG9jYWxVbmxpbmtlZDoKKyAgICAgICAgICAgICAgICBpZiAobm9kZS51bmxpbmtlZExvY2Fs
KCkgPT0gbG9jYWwpCisgICAgICAgICAgICAgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgICAg
ICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgCisgICAgICAgICAgICBjYXNlIEZsdXNo
OiB7CisgICAgICAgICAgICAgICAgaWYgKG5vZGUubG9jYWwoKSAhPSBsb2NhbCkKKyAgICAgICAg
ICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgaWYgKCFpKQorICAgICAgICAgICAg
ICAgICAgICBicmVhazsKKyAgICAgICAgICAgICAgICBOb2RlSW5kZXggcHJldkluZGV4ID0gbV9j
dXJyZW50QmxvY2stPmF0KGkgLSAxKTsKKyAgICAgICAgICAgICAgICBpZiAocHJldkluZGV4ICE9
IG5vZGUuY2hpbGQxKCkuaW5kZXgoKSkKKyAgICAgICAgICAgICAgICAgICAgYnJlYWs7CisgICAg
ICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbcHJldkluZGV4XS5sb2NhbCgpID09IGxvY2FsKTsK
KyAgICAgICAgICAgICAgICBBU1NFUlQobV9ncmFwaFtwcmV2SW5kZXhdLnZhcmlhYmxlQWNjZXNz
RGF0YSgpID09IG5vZGUudmFyaWFibGVBY2Nlc3NEYXRhKCkpOworICAgICAgICAgICAgICAgIEFT
U0VSVChtX2dyYXBoW3ByZXZJbmRleF0uc2hvdWxkR2VuZXJhdGUoKSk7CisgICAgICAgICAgICAg
ICAgaWYgKG1fZ3JhcGhbcHJldkluZGV4XS5yZWZDb3VudCgpID4gMSkKKyAgICAgICAgICAgICAg
ICAgICAgYnJlYWs7CisgICAgICAgICAgICAgICAgcmV0dXJuIGluZGV4OworICAgICAgICAgICAg
fQorICAgICAgICAgICAgICAgIAorICAgICAgICAgICAgY2FzZSBHZXRTY29wZUNoYWluOgorICAg
ICAgICAgICAgICAgIGlmIChtX2dyYXBoLnVuY2hlY2tlZEFjdGl2YXRpb25SZWdpc3RlckZvcihu
b2RlLmNvZGVPcmlnaW4pID09IGxvY2FsKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gTm9O
b2RlOworICAgICAgICAgICAgICAgIGJyZWFrOworICAgICAgICAgICAgICAgIAorICAgICAgICAg
ICAgY2FzZSBDaGVja0FyZ3VtZW50c05vdENyZWF0ZWQ6CisgICAgICAgICAgICAgICAgaWYgKG1f
Z3JhcGgudW5jaGVja2VkQXJndW1lbnRzUmVnaXN0ZXJGb3Iobm9kZS5jb2RlT3JpZ2luKSA9PSBs
b2NhbCkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5vTm9kZTsKKyAgICAgICAgICAgICAg
ICBicmVhazsKKworICAgICAgICAgICAgZGVmYXVsdDoKKyAgICAgICAgICAgICAgICBpZiAobV9n
cmFwaC5jbG9iYmVyc1dvcmxkKGluZGV4KSkKKyAgICAgICAgICAgICAgICAgICAgcmV0dXJuIE5v
Tm9kZTsKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAg
IGlmIChub2RlLmNhbkV4aXQoKSkKKyAgICAgICAgICAgICAgICByZXR1cm4gTm9Ob2RlOworICAg
ICAgICB9CisgICAgICAgIHJldHVybiBOb05vZGU7CisgICAgfQorICAgIAogICAgIHZvaWQgcGVy
Zm9ybVN1YnN0aXR1dGlvbihFZGdlJiBjaGlsZCwgYm9vbCBhZGRSZWYgPSB0cnVlKQogICAgIHsK
ICAgICAgICAgLy8gQ2hlY2sgaWYgdGhpcyBvcGVyYW5kIGlzIGFjdHVhbGx5IHVudXNlZC4KQEAg
LTUwMCwxNCArNjgwLDE2IEBAIHByaXZhdGU6CiAgICAgICAgICAgICBtX2dyYXBoW2NoaWxkXS5y
ZWYoKTsKICAgICB9CiAgICAgCi0gICAgYm9vbCBzZXRSZXBsYWNlbWVudChOb2RlSW5kZXggcmVw
bGFjZW1lbnQpCisgICAgZW51bSBQcmVkaWN0aW9uSGFuZGxpbmdNb2RlIHsgUmVxdWlyZVNhbWVQ
cmVkaWN0aW9uLCBBbGxvd1ByZWRpY3Rpb25NaXNtYXRjaCB9OworICAgIGJvb2wgc2V0UmVwbGFj
ZW1lbnQoTm9kZUluZGV4IHJlcGxhY2VtZW50LCBQcmVkaWN0aW9uSGFuZGxpbmdNb2RlIHByZWRp
Y3Rpb25IYW5kbGluZ01vZGUgPSBSZXF1aXJlU2FtZVByZWRpY3Rpb24pCiAgICAgewogICAgICAg
ICBpZiAocmVwbGFjZW1lbnQgPT0gTm9Ob2RlKQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwog
ICAgICAgICAKICAgICAgICAgLy8gQmUgc2FmZS4gRG9uJ3QgdHJ5IHRvIHBlcmZvcm0gcmVwbGFj
ZW1lbnRzIGlmIHRoZSBwcmVkaWN0aW9ucyBkb24ndAogICAgICAgICAvLyBhZ3JlZS4KLSAgICAg
ICAgaWYgKG1fZ3JhcGhbbV9jb21waWxlSW5kZXhdLnByZWRpY3Rpb24oKSAhPSBtX2dyYXBoW3Jl
cGxhY2VtZW50XS5wcmVkaWN0aW9uKCkpCisgICAgICAgIGlmIChwcmVkaWN0aW9uSGFuZGxpbmdN
b2RlID09IFJlcXVpcmVTYW1lUHJlZGljdGlvbgorICAgICAgICAgICAgJiYgbV9ncmFwaFttX2Nv
bXBpbGVJbmRleF0ucHJlZGljdGlvbigpICE9IG1fZ3JhcGhbcmVwbGFjZW1lbnRdLnByZWRpY3Rp
b24oKSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgCiAjaWYgREZHX0VOQUJM
RShERUJVR19QUk9QQUdBVElPTl9WRVJCT1NFKQpAQCAtNTM2LDYgKzcxOCwxNyBAQCBwcml2YXRl
OgogICAgICAgICBub2RlLnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOwogICAgIH0KICAg
ICAKKyAgICB2b2lkIGVsaW1pbmF0ZShOb2RlSW5kZXggbm9kZUluZGV4LCBOb2RlVHlwZSBwaGFu
dG9tVHlwZSA9IFBoYW50b20pCisgICAgeworICAgICAgICBpZiAobm9kZUluZGV4ID09IE5vTm9k
ZSkKKyAgICAgICAgICAgIHJldHVybjsKKyAgICAgICAgTm9kZSYgbm9kZSA9IG1fZ3JhcGhbbm9k
ZUluZGV4XTsKKyAgICAgICAgaWYgKG5vZGUucmVmQ291bnQoKSAhPSAxKQorICAgICAgICAgICAg
cmV0dXJuOworICAgICAgICBBU1NFUlQobm9kZS5tdXN0R2VuZXJhdGUoKSk7CisgICAgICAgIG5v
ZGUuc2V0T3BBbmREZWZhdWx0RmxhZ3MocGhhbnRvbVR5cGUpOworICAgIH0KKyAgICAKICAgICB2
b2lkIHBlcmZvcm1Ob2RlQ1NFKE5vZGUmIG5vZGUpCiAgICAgewogICAgICAgICBib29sIHNob3Vs
ZEdlbmVyYXRlID0gbm9kZS5zaG91bGRHZW5lcmF0ZSgpOwpAQCAtNjIxLDYgKzgxNCwxMiBAQCBw
cml2YXRlOgogICAgICAgICAgICAgTm9kZUluZGV4IHBoaUluZGV4ID0gbm9kZS5jaGlsZDEoKS5p
bmRleCgpOwogICAgICAgICAgICAgaWYgKCFzZXRSZXBsYWNlbWVudChwb3NzaWJsZVJlcGxhY2Vt
ZW50KSkKICAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIC8vIElmIHRoZSBHZXRM
b2NhbCB3ZSByZXBsYWNlZCB1c2VkIHRvIHJlZmVyIHRvIGEgU2V0TG9jYWwsIHRoZW4gaXQgbm93
CisgICAgICAgICAgICAvLyBzaG91bGQgcmVmZXIgdG8gdGhlIGNoaWxkIG9mIHRoZSBTZXRMb2Nh
bCBpbnN0ZWFkLgorICAgICAgICAgICAgaWYgKG1fZ3JhcGhbcGhpSW5kZXhdLm9wKCkgPT0gU2V0
TG9jYWwpIHsKKyAgICAgICAgICAgICAgICBBU1NFUlQobm9kZS5jaGlsZDEoKS5pbmRleCgpID09
IHBoaUluZGV4KTsKKyAgICAgICAgICAgICAgICBtX2dyYXBoLmNoYW5nZUVkZ2Uobm9kZS5jaGls
ZHJlbi5jaGlsZDEoKSwgbV9ncmFwaFtwaGlJbmRleF0uY2hpbGQxKCkpOworICAgICAgICAgICAg
fQogICAgICAgICAgICAgTm9kZUluZGV4IG9sZFRhaWxJbmRleCA9IG1fY3VycmVudEJsb2NrLT52
YXJpYWJsZXNBdFRhaWwub3BlcmFuZCgKICAgICAgICAgICAgICAgICB2YXJpYWJsZUFjY2Vzc0Rh
dGEtPmxvY2FsKCkpOwogICAgICAgICAgICAgaWYgKG9sZFRhaWxJbmRleCA9PSBtX2NvbXBpbGVJ
bmRleCkgewpAQCAtNjQ0LDEwICs4NDMsMzIgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIGJyZWFr
OwogICAgICAgICB9CiAgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBTZXRMb2NhbDogeworICAg
ICAgICAgICAgVmFyaWFibGVBY2Nlc3NEYXRhKiB2YXJpYWJsZUFjY2Vzc0RhdGEgPSBub2RlLnZh
cmlhYmxlQWNjZXNzRGF0YSgpOworICAgICAgICAgICAgaWYgKCF2YXJpYWJsZUFjY2Vzc0RhdGEt
PmlzQ2FwdHVyZWQoKSkKKyAgICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIFZpcnR1
YWxSZWdpc3RlciBsb2NhbCA9IHZhcmlhYmxlQWNjZXNzRGF0YS0+bG9jYWwoKTsKKyAgICAgICAg
ICAgIE5vZGVJbmRleCByZXBsYWNlbWVudEluZGV4ID0gc2V0TG9jYWxTdG9yZUVsaW1pbmF0aW9u
KGxvY2FsKTsKKyAgICAgICAgICAgIGlmIChyZXBsYWNlbWVudEluZGV4ID09IE5vTm9kZSkKKyAg
ICAgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIE5vZGUmIHJlcGxhY2VtZW50ID0gbV9n
cmFwaFtyZXBsYWNlbWVudEluZGV4XTsKKyAgICAgICAgICAgIEFTU0VSVChyZXBsYWNlbWVudC5v
cCgpID09IEZsdXNoKTsKKyAgICAgICAgICAgIEFTU0VSVChyZXBsYWNlbWVudC5yZWZDb3VudCgp
ID09IDEpOworICAgICAgICAgICAgQVNTRVJUKHJlcGxhY2VtZW50LnNob3VsZEdlbmVyYXRlKCkp
OworICAgICAgICAgICAgQVNTRVJUKHJlcGxhY2VtZW50Lm11c3RHZW5lcmF0ZSgpKTsKKyAgICAg
ICAgICAgIHJlcGxhY2VtZW50LnNldE9wQW5kRGVmYXVsdEZsYWdzKFBoYW50b20pOworICAgICAg
ICAgICAgTm9kZUluZGV4IHNldExvY2FsSW5kZXggPSByZXBsYWNlbWVudC5jaGlsZDEoKS5pbmRl
eCgpOworICAgICAgICAgICAgQVNTRVJUKG1fZ3JhcGhbc2V0TG9jYWxJbmRleF0ub3AoKSA9PSBT
ZXRMb2NhbCk7CisgICAgICAgICAgICBtX2dyYXBoLmNsZWFyQW5kRGVyZWZDaGlsZDEocmVwbGFj
ZW1lbnQpOworICAgICAgICAgICAgcmVwbGFjZW1lbnQuY2hpbGRyZW4uY2hpbGQxKCkgPSBtX2dy
YXBoW3NldExvY2FsSW5kZXhdLmNoaWxkMSgpOworICAgICAgICAgICAgbV9ncmFwaC5yZWYocmVw
bGFjZW1lbnQuY2hpbGQxKCkpOworICAgICAgICAgICAgYnJlYWs7CisgICAgICAgIH0KKyAgICAg
ICAgICAgIAogICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6CiAgICAgICAgICAgICAvLyBUaGlzIGlz
IHN0cmFuZ2UsIGJ1dCBuZWNlc3NhcnkuIFNvbWUgcGhhc2VzIHdpbGwgY29udmVydCBub2RlcyB0
byBjb25zdGFudHMsCiAgICAgICAgICAgICAvLyB3aGljaCBtYXkgcmVzdWx0IGluIGR1cGxpY2F0
ZWQgY29uc3RhbnRzLiBXZSB1c2UgQ1NFIHRvIGNsZWFuIHRoaXMgdXAuCi0gICAgICAgICAgICBz
ZXRSZXBsYWNlbWVudChjb25zdGFudENTRShub2RlKSk7CisgICAgICAgICAgICBzZXRSZXBsYWNl
bWVudChjb25zdGFudENTRShub2RlKSwgQWxsb3dQcmVkaWN0aW9uTWlzbWF0Y2gpOwogICAgICAg
ICAgICAgYnJlYWs7CiAgICAgICAgICAgICAKICAgICAgICAgY2FzZSBHZXRBcnJheUxlbmd0aDoK
QEAgLTY4MCw2ICs5MDEsMTAgQEAgcHJpdmF0ZToKICAgICAgICAgICAgIHNldFJlcGxhY2VtZW50
KGdsb2JhbFZhckxvYWRFbGltaW5hdGlvbihub2RlLnZhck51bWJlcigpLCBjb2RlQmxvY2soKS0+
Z2xvYmFsT2JqZWN0Rm9yKG5vZGUuY29kZU9yaWdpbikpKTsKICAgICAgICAgICAgIGJyZWFrOwog
ICAgICAgICAgICAgCisgICAgICAgIGNhc2UgUHV0R2xvYmFsVmFyOgorICAgICAgICAgICAgZWxp
bWluYXRlKGdsb2JhbFZhclN0b3JlRWxpbWluYXRpb24obm9kZS52YXJOdW1iZXIoKSwgY29kZUJs
b2NrKCktPmdsb2JhbE9iamVjdEZvcihub2RlLmNvZGVPcmlnaW4pKSk7CisgICAgICAgICAgICBi
cmVhazsKKyAgICAgICAgICAgIAogICAgICAgICBjYXNlIEdldEJ5VmFsOgogICAgICAgICAgICAg
aWYgKG1fZ3JhcGguYnlWYWxJc1B1cmUobm9kZSkpCiAgICAgICAgICAgICAgICAgc2V0UmVwbGFj
ZW1lbnQoZ2V0QnlWYWxMb2FkRWxpbWluYXRpb24obm9kZS5jaGlsZDEoKS5pbmRleCgpLCBub2Rl
LmNoaWxkMigpLmluZGV4KCkpKTsKQEAgLTY5Niw2ICs5MjEsMTAgQEAgcHJpdmF0ZToKICAgICAg
ICAgICAgIGlmIChjaGVja1N0cnVjdHVyZUxvYWRFbGltaW5hdGlvbihub2RlLnN0cnVjdHVyZVNl
dCgpLCBub2RlLmNoaWxkMSgpLmluZGV4KCkpKQogICAgICAgICAgICAgICAgIGVsaW1pbmF0ZSgp
OwogICAgICAgICAgICAgYnJlYWs7CisgICAgICAgICAgICAKKyAgICAgICAgY2FzZSBQdXRTdHJ1
Y3R1cmU6CisgICAgICAgICAgICBlbGltaW5hdGUocHV0U3RydWN0dXJlU3RvcmVFbGltaW5hdGlv
bihub2RlLmNoaWxkMSgpLmluZGV4KCkpLCBQaGFudG9tUHV0U3RydWN0dXJlKTsKKyAgICAgICAg
ICAgIGJyZWFrOwogCiAgICAgICAgIGNhc2UgQ2hlY2tGdW5jdGlvbjoKICAgICAgICAgICAgIGlm
IChjaGVja0Z1bmN0aW9uRWxpbWluYXRpb24obm9kZS5mdW5jdGlvbigpLCBub2RlLmNoaWxkMSgp
LmluZGV4KCkpKQpAQCAtNzE3LDYgKzk0NiwxMCBAQCBwcml2YXRlOgogICAgICAgICAgICAgc2V0
UmVwbGFjZW1lbnQoZ2V0QnlPZmZzZXRMb2FkRWxpbWluYXRpb24obV9ncmFwaC5tX3N0b3JhZ2VB
Y2Nlc3NEYXRhW25vZGUuc3RvcmFnZUFjY2Vzc0RhdGFJbmRleCgpXS5pZGVudGlmaWVyTnVtYmVy
LCBub2RlLmNoaWxkMSgpLmluZGV4KCkpKTsKICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAg
ICAgCisgICAgICAgIGNhc2UgUHV0QnlPZmZzZXQ6CisgICAgICAgICAgICBlbGltaW5hdGUocHV0
QnlPZmZzZXRTdG9yZUVsaW1pbmF0aW9uKG1fZ3JhcGgubV9zdG9yYWdlQWNjZXNzRGF0YVtub2Rl
LnN0b3JhZ2VBY2Nlc3NEYXRhSW5kZXgoKV0uaWRlbnRpZmllck51bWJlciwgbm9kZS5jaGlsZDEo
KS5pbmRleCgpKSk7CisgICAgICAgICAgICBicmVhazsKKyAgICAgICAgICAgIAogICAgICAgICBk
ZWZhdWx0OgogICAgICAgICAgICAgLy8gZG8gbm90aGluZy4KICAgICAgICAgICAgIGJyZWFrOwpJ
bmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHR3JhcGguaAkocmV2aXNpb24gMTE4MDU4KQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdHcmFwaC5oCSh3b3JraW5nIGNvcHkpCkBA
IC0zNTIsNiArMzUyLDEyIEBAIHB1YmxpYzoKICAgICAgICAgICAgIGNvZGVPcmlnaW4uaW5saW5l
Q2FsbEZyYW1lLT5zdGFja09mZnNldDsKICAgICB9CiAgICAgCisgICAgaW50IHVuY2hlY2tlZEFj
dGl2YXRpb25SZWdpc3RlckZvcihjb25zdCBDb2RlT3JpZ2luJiBjb2RlT3JpZ2luKQorICAgIHsK
KyAgICAgICAgQVNTRVJUX1VOVVNFRChjb2RlT3JpZ2luLCAhY29kZU9yaWdpbi5pbmxpbmVDYWxs
RnJhbWUpOworICAgICAgICByZXR1cm4gbV9jb2RlQmxvY2stPnVuY2hlY2tlZEFjdGl2YXRpb25S
ZWdpc3RlcigpOworICAgIH0KKyAgICAKICAgICBWYWx1ZVByb2ZpbGUqIHZhbHVlUHJvZmlsZUZv
cihOb2RlSW5kZXggbm9kZUluZGV4KQogICAgIHsKICAgICAgICAgaWYgKG5vZGVJbmRleCA9PSBO
b05vZGUpCkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGUuaAkocmV2aXNpb24gMTE4
MTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdOb2RlLmgJKHdvcmtpbmcgY29w
eSkKQEAgLTIwMSw5ICsyMDEsMjEgQEAgc3RydWN0IE5vZGUgewogICAgICAgICByZXR1cm4gb3Ao
KSA9PSBXZWFrSlNDb25zdGFudDsKICAgICB9CiAgICAgCisgICAgYm9vbCBpc1BoYW50b21Bcmd1
bWVudHMoKQorICAgIHsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0gUGhhbnRvbUFyZ3VtZW50czsK
KyAgICB9CisgICAgCiAgICAgYm9vbCBoYXNDb25zdGFudCgpCiAgICAgewotICAgICAgICByZXR1
cm4gaXNDb25zdGFudCgpIHx8IGlzV2Vha0NvbnN0YW50KCk7CisgICAgICAgIHN3aXRjaCAob3Ao
KSkgeworICAgICAgICBjYXNlIEpTQ29uc3RhbnQ6CisgICAgICAgIGNhc2UgV2Vha0pTQ29uc3Rh
bnQ6CisgICAgICAgIGNhc2UgUGhhbnRvbUFyZ3VtZW50czoKKyAgICAgICAgICAgIHJldHVybiB0
cnVlOworICAgICAgICBkZWZhdWx0OgorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAg
ICB9CiAgICAgfQogCiAgICAgdW5zaWduZWQgY29uc3RhbnROdW1iZXIoKQpAQCAtMjM5LDkgKzI1
MSwxNyBAQCBzdHJ1Y3QgTm9kZSB7CiAgICAgCiAgICAgSlNWYWx1ZSB2YWx1ZU9mSlNDb25zdGFu
dChDb2RlQmxvY2sqIGNvZGVCbG9jaykKICAgICB7Ci0gICAgICAgIGlmIChvcCgpID09IFdlYWtK
U0NvbnN0YW50KQorICAgICAgICBzd2l0Y2ggKG9wKCkpIHsKKyAgICAgICAgY2FzZSBXZWFrSlND
b25zdGFudDoKICAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKHdlYWtDb25zdGFudCgpKTsKLSAg
ICAgICAgcmV0dXJuIGNvZGVCbG9jay0+Y29uc3RhbnRSZWdpc3RlcihGaXJzdENvbnN0YW50UmVn
aXN0ZXJJbmRleCArIGNvbnN0YW50TnVtYmVyKCkpLmdldCgpOworICAgICAgICBjYXNlIEpTQ29u
c3RhbnQ6CisgICAgICAgICAgICByZXR1cm4gY29kZUJsb2NrLT5jb25zdGFudFJlZ2lzdGVyKEZp
cnN0Q29uc3RhbnRSZWdpc3RlckluZGV4ICsgY29uc3RhbnROdW1iZXIoKSkuZ2V0KCk7CisgICAg
ICAgIGNhc2UgUGhhbnRvbUFyZ3VtZW50czoKKyAgICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7
CisgICAgICAgIGRlZmF1bHQ6CisgICAgICAgICAgICBBU1NFUlRfTk9UX1JFQUNIRUQoKTsKKyAg
ICAgICAgICAgIHJldHVybiBKU1ZhbHVlKCk7IC8vIEhhdmUgdG8gcmV0dXJuIHNvbWV0aGluZyBp
biByZWxlYXNlIG1vZGUuCisgICAgICAgIH0KICAgICB9CiAKICAgICBib29sIGlzSW50MzJDb25z
dGFudChDb2RlQmxvY2sqIGNvZGVCbG9jaykKQEAgLTU4OSw3ICs2MDksNyBAQCBzdHJ1Y3QgTm9k
ZSB7CiAKICAgICBib29sIGhhc1N0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkKICAgICB7Ci0gICAg
ICAgIHJldHVybiBvcCgpID09IFB1dFN0cnVjdHVyZTsKKyAgICAgICAgcmV0dXJuIG9wKCkgPT0g
UHV0U3RydWN0dXJlIHx8IG9wKCkgPT0gUGhhbnRvbVB1dFN0cnVjdHVyZTsKICAgICB9CiAgICAg
CiAgICAgU3RydWN0dXJlVHJhbnNpdGlvbkRhdGEmIHN0cnVjdHVyZVRyYW5zaXRpb25EYXRhKCkK
SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR05vZGVUeXBlLmgJKHJldmlzaW9uIDEx
ODEyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHTm9kZVR5cGUuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMzcsMTEgKzM3LDExIEBAIG5hbWVzcGFjZSBKU0MgeyBuYW1lc3BhY2UgREZH
IHsKIC8vIFRoaXMgbWFjcm8gZGVmaW5lcyBhIHNldCBvZiBpbmZvcm1hdGlvbiBhYm91dCBhbGwg
a25vd24gbm9kZSB0eXBlcywgdXNlZCB0byBwb3B1bGF0ZSBOb2RlSWQsIE5vZGVUeXBlIGJlbG93
LgogI2RlZmluZSBGT1JfRUFDSF9ERkdfT1AobWFjcm8pIFwKICAgICAvKiBBIGNvbnN0YW50IGlu
IHRoZSBDb2RlQmxvY2sncyBjb25zdGFudCBwb29sLiAqL1wKLSAgICBtYWNybyhKU0NvbnN0YW50
LCBOb2RlUmVzdWx0SlMpIFwKKyAgICBtYWNybyhKU0NvbnN0YW50LCBOb2RlUmVzdWx0SlMgfCBO
b2RlRG9lc05vdEV4aXQpIFwKICAgICBcCiAgICAgLyogQSBjb25zdGFudCBub3QgaW4gdGhlIENv
ZGVCbG9jaydzIGNvbnN0YW50IHBvb2wuIFVzZXMgZ2V0IHBhdGNoZWQgdG8ganVtcHMgdGhhdCBl
eGl0IHRoZSAqL1wKICAgICAvKiBjb2RlIGJsb2NrLiAqL1wKLSAgICBtYWNybyhXZWFrSlNDb25z
dGFudCwgTm9kZVJlc3VsdEpTKSBcCisgICAgbWFjcm8oV2Vha0pTQ29uc3RhbnQsIE5vZGVSZXN1
bHRKUyB8IE5vZGVEb2VzTm90RXhpdCkgXAogICAgIFwKICAgICAvKiBOb2RlcyBmb3IgaGFuZGxp
bmcgZnVuY3Rpb25zIChib3RoIGFzIGNhbGwgYW5kIGFzIGNvbnN0cnVjdCkuICovXAogICAgIG1h
Y3JvKENvbnZlcnRUaGlzLCBOb2RlUmVzdWx0SlMpIFwKQEAgLTUzLDEwICs1MywxMCBAQCBuYW1l
c3BhY2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgLyogVmFyaWFibGVBY2Nlc3NEYXRhLCBh
bmQgdGh1cyB3aWxsIHNoYXJlIHByZWRpY3Rpb25zLiAqL1wKICAgICBtYWNybyhHZXRMb2NhbCwg
Tm9kZVJlc3VsdEpTKSBcCiAgICAgbWFjcm8oU2V0TG9jYWwsIDApIFwKLSAgICBtYWNybyhQaGFu
dG9tLCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAgbWFjcm8oTm9wLCAwKSBcCi0gICAgbWFjcm8o
UGhpLCAwKSBcCi0gICAgbWFjcm8oRmx1c2gsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNy
byhQaGFudG9tLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0KSBcCisgICAgbWFj
cm8oTm9wLCAwIHwgTm9kZURvZXNOb3RFeGl0KSBcCisgICAgbWFjcm8oUGhpLCAwIHwgTm9kZURv
ZXNOb3RFeGl0KSBcCisgICAgbWFjcm8oRmx1c2gsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlRG9l
c05vdEV4aXQpIFwKICAgICBcCiAgICAgLyogR2V0IHRoZSB2YWx1ZSBvZiBhIGxvY2FsIHZhcmlh
YmxlLCB3aXRob3V0IGxpbmtpbmcgaW50byB0aGUgVmFyaWFibGVBY2Nlc3NEYXRhICovXAogICAg
IC8qIG5ldHdvcmsuIFRoaXMgaXMgb25seSB2YWxpZCBmb3IgdmFyaWFibGUgYWNjZXNzZXMgd2hv
c2UgcHJlZGljdGlvbnMgb3JpZ2luYXRlZCAqL1wKQEAgLTY0LDEyICs2NCwxMiBAQCBuYW1lc3Bh
Y2UgSlNDIHsgbmFtZXNwYWNlIERGRyB7CiAgICAgbWFjcm8oR2V0TG9jYWxVbmxpbmtlZCwgTm9k
ZVJlc3VsdEpTKSBcCiAgICAgXAogICAgIC8qIE1hcmtlciBmb3IgYW4gYXJndW1lbnQgYmVpbmcg
c2V0IGF0IHRoZSBwcm9sb2d1ZSBvZiBhIGZ1bmN0aW9uLiAqL1wKLSAgICBtYWNybyhTZXRBcmd1
bWVudCwgMCkgXAorICAgIG1hY3JvKFNldEFyZ3VtZW50LCAwIHwgTm9kZURvZXNOb3RFeGl0KSBc
CiAgICAgXAogICAgIC8qIEhpbnQgdGhhdCBpbmxpbmluZyBiZWdpbnMgaGVyZS4gTm8gY29kZSBp
cyBnZW5lcmF0ZWQgZm9yIHRoaXMgbm9kZS4gSXQncyBvbmx5ICovXAogICAgIC8qIHVzZWQgZm9y
IGNvcHlpbmcgT1NSIGRhdGEgaW50byBpbmxpbmUgZnJhbWUgZGF0YSwgdG8gc3VwcG9ydCByZWlm
aWNhdGlvbiBvZiAqL1wKICAgICAvKiBjYWxsIGZyYW1lcyBvZiBpbmxpbmVkIGZ1bmN0aW9ucy4g
Ki9cCi0gICAgbWFjcm8oSW5saW5lU3RhcnQsIDApIFwKKyAgICBtYWNybyhJbmxpbmVTdGFydCwg
MCB8IE5vZGVEb2VzTm90RXhpdCkgXAogICAgIFwKICAgICAvKiBOb2RlcyBmb3IgYml0d2lzZSBv
cGVyYXRpb25zLiAqL1wKICAgICBtYWNybyhCaXRBbmQsIE5vZGVSZXN1bHRJbnQzMikgXApAQCAt
MTEzLDExICsxMTMsMTIgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVzcGFjZSBERkcgewogICAgIG1h
Y3JvKFB1dEJ5SWQsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAg
IG1hY3JvKFB1dEJ5SWREaXJlY3QsIE5vZGVNdXN0R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3Js
ZCkgXAogICAgIG1hY3JvKENoZWNrU3RydWN0dXJlLCBOb2RlTXVzdEdlbmVyYXRlKSBcCi0gICAg
bWFjcm8oUHV0U3RydWN0dXJlLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZUNsb2JiZXJzV29ybGQp
IFwKKyAgICBtYWNybyhQdXRTdHJ1Y3R1cmUsIE5vZGVNdXN0R2VuZXJhdGUpIFwKKyAgICBtYWNy
byhQaGFudG9tUHV0U3RydWN0dXJlLCBOb2RlTXVzdEdlbmVyYXRlIHwgTm9kZURvZXNOb3RFeGl0
KSBcCiAgICAgbWFjcm8oR2V0UHJvcGVydHlTdG9yYWdlLCBOb2RlUmVzdWx0U3RvcmFnZSkgXAog
ICAgIG1hY3JvKEdldEluZGV4ZWRQcm9wZXJ0eVN0b3JhZ2UsIE5vZGVNdXN0R2VuZXJhdGUgfCBO
b2RlUmVzdWx0U3RvcmFnZSkgXAogICAgIG1hY3JvKEdldEJ5T2Zmc2V0LCBOb2RlUmVzdWx0SlMp
IFwKLSAgICBtYWNybyhQdXRCeU9mZnNldCwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVy
c1dvcmxkKSBcCisgICAgbWFjcm8oUHV0QnlPZmZzZXQsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAg
ICBtYWNybyhHZXRBcnJheUxlbmd0aCwgTm9kZVJlc3VsdEludDMyKSBcCiAgICAgbWFjcm8oR2V0
QXJndW1lbnRzTGVuZ3RoLCBOb2RlUmVzdWx0SW50MzIpIFwKICAgICBtYWNybyhHZXRTdHJpbmdM
ZW5ndGgsIE5vZGVSZXN1bHRJbnQzMikgXApAQCAtMTM1LDcgKzEzNiw3IEBAIG5hbWVzcGFjZSBK
U0MgeyBuYW1lc3BhY2UgREZHIHsKICAgICBtYWNybyhHZXRTY29wZWRWYXIsIE5vZGVSZXN1bHRK
UyB8IE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBtYWNybyhQdXRTY29wZWRWYXIsIE5vZGVNdXN0
R2VuZXJhdGUgfCBOb2RlQ2xvYmJlcnNXb3JsZCkgXAogICAgIG1hY3JvKEdldEdsb2JhbFZhciwg
Tm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0ZSkgXAotICAgIG1hY3JvKFB1dEdsb2JhbFZh
ciwgTm9kZU11c3RHZW5lcmF0ZSB8IE5vZGVDbG9iYmVyc1dvcmxkKSBcCisgICAgbWFjcm8oUHV0
R2xvYmFsVmFyLCBOb2RlTXVzdEdlbmVyYXRlKSBcCiAgICAgbWFjcm8oQ2hlY2tGdW5jdGlvbiwg
Tm9kZU11c3RHZW5lcmF0ZSkgXAogICAgIFwKICAgICAvKiBPcHRpbWl6YXRpb25zIGZvciBhcnJh
eSBtdXRhdGlvbi4gKi9cCkBAIC0xOTcsNiArMTk4LDcgQEAgbmFtZXNwYWNlIEpTQyB7IG5hbWVz
cGFjZSBERkcgewogICAgIC8qIE5vZGVzIHVzZWQgZm9yIGFyZ3VtZW50cy4gU2ltaWxhciB0byBh
Y3RpdmF0aW9uIHN1cHBvcnQsIG9ubHkgaXQgbWFrZXMgZXZlbiBsZXNzICovXAogICAgIC8qIHNl
bnNlLiAqL1wKICAgICBtYWNybyhDcmVhdGVBcmd1bWVudHMsIE5vZGVSZXN1bHRKUykgXAorICAg
IG1hY3JvKFBoYW50b21Bcmd1bWVudHMsIE5vZGVSZXN1bHRKUyB8IE5vZGVEb2VzTm90RXhpdCkg
XAogICAgIG1hY3JvKFRlYXJPZmZBcmd1bWVudHMsIE5vZGVNdXN0R2VuZXJhdGUpIFwKICAgICBt
YWNybyhHZXRNeUFyZ3VtZW50c0xlbmd0aCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11c3RHZW5lcmF0
ZSkgXAogICAgIG1hY3JvKEdldE15QXJndW1lbnRCeVZhbCwgTm9kZVJlc3VsdEpTIHwgTm9kZU11
c3RHZW5lcmF0ZSkgXApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdQcmVkaWN0
aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRD
b3JlL2RmZy9ERkdQcmVkaWN0aW9uUHJvcGFnYXRpb25QaGFzZS5jcHAJKHJldmlzaW9uIDExODEy
NikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHUHJlZGljdGlvblByb3BhZ2F0aW9u
UGhhc2UuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC02MTgsNyArNjE4LDkgQEAgcHJpdmF0ZToKICAg
ICAgICAgY2FzZSBJbnQzMlRvRG91YmxlOgogICAgICAgICBjYXNlIEdldExvY2FsVW5saW5rZWQ6
CiAgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudHNMZW5ndGg6Ci0gICAgICAgIGNhc2UgR2V0TXlB
cmd1bWVudEJ5VmFsOiB7CisgICAgICAgIGNhc2UgR2V0TXlBcmd1bWVudEJ5VmFsOgorICAgICAg
ICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6CisgICAgICAgIGNhc2UgUGhhbnRvbUFyZ3VtZW50
czogewogICAgICAgICAgICAgLy8gVGhpcyBub2RlIHNob3VsZCBuZXZlciBiZSB2aXNpYmxlIGF0
IHRoaXMgc3RhZ2Ugb2YgY29tcGlsYXRpb24uIEl0IGlzCiAgICAgICAgICAgICAvLyBpbnNlcnRl
ZCBieSBmaXh1cCgpLCB3aGljaCBmb2xsb3dzIHRoaXMgcGhhc2UuCiAgICAgICAgICAgICBBU1NF
UlRfTk9UX1JFQUNIRUQoKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3Bl
Y3VsYXRpdmVKSVQzMl82NC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkocmV2aXNpb24gMTE4MTI2KQorKysgU291
cmNlL0phdmFTY3JpcHRDb3JlL2RmZy9ERkdTcGVjdWxhdGl2ZUpJVDMyXzY0LmNwcAkod29ya2lu
ZyBjb3B5KQpAQCAtMTg1Myw2ICsxODUzLDcgQEAgdm9pZCBTcGVjdWxhdGl2ZUpJVDo6Y29tcGls
ZShOb2RlJiBub2RlKQogCiAgICAgc3dpdGNoIChvcCkgewogICAgIGNhc2UgSlNDb25zdGFudDoK
KyAgICBjYXNlIFBoYW50b21Bcmd1bWVudHM6CiAgICAgICAgIGluaXRDb25zdGFudEluZm8obV9j
b21waWxlSW5kZXgpOwogICAgICAgICBicmVhazsKIApAQCAtMzQ4Nyw2ICszNDg4LDE1IEBAIHZv
aWQgU3BlY3VsYXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKICAgICAgICAgYnJlYWs7CiAg
ICAgfQogICAgICAgICAKKyAgICBjYXNlIFBoYW50b21QdXRTdHJ1Y3R1cmU6IHsKKyAgICAgICAg
bV9qaXQuYWRkV2Vha1JlZmVyZW5jZVRyYW5zaXRpb24oCisgICAgICAgICAgICBub2RlLmNvZGVP
cmlnaW4uY29kZU9yaWdpbk93bmVyKCksCisgICAgICAgICAgICBub2RlLnN0cnVjdHVyZVRyYW5z
aXRpb25EYXRhKCkucHJldmlvdXNTdHJ1Y3R1cmUsCisgICAgICAgICAgICBub2RlLnN0cnVjdHVy
ZVRyYW5zaXRpb25EYXRhKCkubmV3U3RydWN0dXJlKTsKKyAgICAgICAgbm9SZXN1bHQobV9jb21w
aWxlSW5kZXgpOworICAgICAgICBicmVhazsKKyAgICB9CisKICAgICBjYXNlIFB1dFN0cnVjdHVy
ZTogewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFuZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQx
KCkpOwogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJhc2UuZ3ByKCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZlSklUNjQuY3BwCj09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0t
IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVKSVQ2NC5jcHAJKHJldmlz
aW9uIDExODEyNikKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9kZmcvREZHU3BlY3VsYXRpdmVK
SVQ2NC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTE5MjQsNiArMTkyNCw3IEBAIHZvaWQgU3BlY3Vs
YXRpdmVKSVQ6OmNvbXBpbGUoTm9kZSYgbm9kZSkKIAogICAgIHN3aXRjaCAob3ApIHsKICAgICBj
YXNlIEpTQ29uc3RhbnQ6CisgICAgY2FzZSBQaGFudG9tQXJndW1lbnRzOgogICAgICAgICBpbml0
Q29uc3RhbnRJbmZvKG1fY29tcGlsZUluZGV4KTsKICAgICAgICAgYnJlYWs7CiAKQEAgLTM0OTQs
NiArMzQ5NSwxNSBAQCB2b2lkIFNwZWN1bGF0aXZlSklUOjpjb21waWxlKE5vZGUmIG5vZGUpCiAg
ICAgICAgIGJyZWFrOwogICAgIH0KICAgICAgICAgCisgICAgY2FzZSBQaGFudG9tUHV0U3RydWN0
dXJlOiB7CisgICAgICAgIG1faml0LmFkZFdlYWtSZWZlcmVuY2VUcmFuc2l0aW9uKAorICAgICAg
ICAgICAgbm9kZS5jb2RlT3JpZ2luLmNvZGVPcmlnaW5Pd25lcigpLAorICAgICAgICAgICAgbm9k
ZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLnByZXZpb3VzU3RydWN0dXJlLAorICAgICAgICAg
ICAgbm9kZS5zdHJ1Y3R1cmVUcmFuc2l0aW9uRGF0YSgpLm5ld1N0cnVjdHVyZSk7CisgICAgICAg
IG5vUmVzdWx0KG1fY29tcGlsZUluZGV4KTsKKyAgICAgICAgYnJlYWs7CisgICAgfQorICAgICAg
ICAKICAgICBjYXNlIFB1dFN0cnVjdHVyZTogewogICAgICAgICBTcGVjdWxhdGVDZWxsT3BlcmFu
ZCBiYXNlKHRoaXMsIG5vZGUuY2hpbGQxKCkpOwogICAgICAgICBHUFJSZWcgYmFzZUdQUiA9IGJh
c2UuZ3ByKCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1bGF0aXZl
SklULmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvZGZnL0RGR1NwZWN1
bGF0aXZlSklULmNwcAkocmV2aXNpb24gMTE4MTI2KQorKysgU291cmNlL0phdmFTY3JpcHRDb3Jl
L2RmZy9ERkdTcGVjdWxhdGl2ZUpJVC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTEzNTgsMTMgKzEz
NTgsMTUgQEAgVmFsdWVSZWNvdmVyeSBTcGVjdWxhdGl2ZUpJVDo6Y29tcHV0ZVZhbAogICAgICAg
ICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6YXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkKCk7CiAK
ICAgICBjYXNlIEhhdmVOb2RlOiB7Ci0gICAgICAgIGlmIChpc0NvbnN0YW50KHZhbHVlU291cmNl
Lm5vZGVJbmRleCgpKSkKKyAgICAgICAgTm9kZSogbm9kZVB0ciA9ICZhdCh2YWx1ZVNvdXJjZS5u
b2RlSW5kZXgoKSk7CisKKyAgICAgICAgaWYgKG5vZGVQdHItPmlzUGhhbnRvbUFyZ3VtZW50cygp
KQorICAgICAgICAgICAgcmV0dXJuIFZhbHVlUmVjb3Zlcnk6OmFyZ3VtZW50c1RoYXRXZXJlTm90
Q3JlYXRlZCgpOworICAgICAgICAKKyAgICAgICAgaWYgKG5vZGVQdHItPmhhc0NvbnN0YW50KCkp
CiAgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVyeTo6Y29uc3RhbnQodmFsdWVPZkpTQ29u
c3RhbnQodmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpKTsKICAgICAgICAgCi0gICAgICAgIE5vZGUq
IG5vZGVQdHIgPSAmYXQodmFsdWVTb3VyY2Uubm9kZUluZGV4KCkpOwogICAgICAgICBpZiAoIW5v
ZGVQdHItPnNob3VsZEdlbmVyYXRlKCkpIHsKLSAgICAgICAgICAgIGlmIChub2RlUHRyLT5vcCgp
ID09IENyZWF0ZUFyZ3VtZW50cykKLSAgICAgICAgICAgICAgICByZXR1cm4gVmFsdWVSZWNvdmVy
eTo6YXJndW1lbnRzVGhhdFdlcmVOb3RDcmVhdGVkKCk7CiAgICAgICAgICAgICAvLyBJdCdzIGxl
Z2l0aW1hdGVseSBkZWFkLiBBcyBpbiwgbm9ib2R5IHdpbGwgZXZlciB1c2UgdGhpcyBub2RlLCBv
ciBvcGVyYW5kLAogICAgICAgICAgICAgLy8gZXZlci4gU2V0IGl0IHRvIFVuZGVmaW5lZCB0byBt
YWtlIHRoZSBHQyBoYXBweSBhZnRlciB0aGUgT1NSLgogICAgICAgICAgICAgcmV0dXJuIFZhbHVl
UmVjb3Zlcnk6OmNvbnN0YW50KGpzVW5kZWZpbmVkKCkpOwo=
</data>
<flag name="review"
          id="150048"
          type_id="1"
          status="+"
          setter="oliver"
    />
          </attachment>
      

    </bug>

</bugzilla>