<?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>165715</bug_id>
          
          <creation_ts>2016-12-09 20:23:55 -0800</creation_ts>
          <short_desc>WebAssembly: implement the elements section</short_desc>
          <delta_ts>2016-12-13 17:32:49 -0800</delta_ts>
          <reporter_accessible>1</reporter_accessible>
          <cclist_accessible>1</cclist_accessible>
          <classification_id>1</classification_id>
          <classification>Unclassified</classification>
          <product>WebKit</product>
          <component>JavaScriptCore</component>
          <version>WebKit Nightly Build</version>
          <rep_platform>Unspecified</rep_platform>
          <op_sys>Unspecified</op_sys>
          <bug_status>RESOLVED</bug_status>
          <resolution>FIXED</resolution>
          
          
          <bug_file_loc></bug_file_loc>
          <status_whiteboard></status_whiteboard>
          <keywords></keywords>
          <priority>P2</priority>
          <bug_severity>Normal</bug_severity>
          <target_milestone>---</target_milestone>
          
          
          <everconfirmed>1</everconfirmed>
          <reporter name="Saam Barati">saam</reporter>
          <assigned_to name="Saam Barati">saam</assigned_to>
          <cc>benjamin</cc>
    
    <cc>commit-queue</cc>
    
    <cc>fpizlo</cc>
    
    <cc>ggaren</cc>
    
    <cc>gskachkov</cc>
    
    <cc>jfbastien</cc>
    
    <cc>keith_miller</cc>
    
    <cc>mark.lam</cc>
    
    <cc>msaboff</cc>
    
    <cc>oliver</cc>
    
    <cc>ticaiolima</cc>
    
    <cc>ysuzuki</cc>
          

      

      

      

          <comment_sort_order>oldest_to_newest</comment_sort_order>  
          <long_desc isprivate="0" >
    <commentid>1258556</commentid>
    <comment_count>0</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-09 20:23:55 -0800</bug_when>
    <thetext>...</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259504</commentid>
    <comment_count>1</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-13 12:34:00 -0800</bug_when>
    <thetext>Will work on this now.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259541</commentid>
    <comment_count>2</comment_count>
      <attachid>297041</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-13 14:28:32 -0800</bug_when>
    <thetext>Created attachment 297041
WIP

it begins</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259555</commentid>
    <comment_count>3</comment_count>
      <attachid>297045</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-13 15:12:48 -0800</bug_when>
    <thetext>Created attachment 297045
WIP

This might be the patch. Need to start writing tests.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259573</commentid>
    <comment_count>4</comment_count>
      <attachid>297047</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-13 16:05:07 -0800</bug_when>
    <thetext>Created attachment 297047
patch</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259575</commentid>
    <comment_count>5</comment_count>
    <who name="WebKit Commit Bot">commit-queue</who>
    <bug_when>2016-12-13 16:07:25 -0800</bug_when>
    <thetext>Attachment 297047 did not pass style-queue:


ERROR: Source/JavaScriptCore/wasm/WasmModuleParser.cpp:509:  Tests for true/false, null/non-null, and zero/non-zero should all be done without equality comparisons.  [readability/comparison_to_zero] [5]
Total errors found: 1 in 10 files


If any of these errors are false positives, please file a bug against check-webkit-style.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259582</commentid>
    <comment_count>6</comment_count>
      <attachid>297047</attachid>
    <who name="Keith Miller">keith_miller</who>
    <bug_when>2016-12-13 16:47:07 -0800</bug_when>
    <thetext>Comment on attachment 297047
patch

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

r=me.

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyModuleRecord.cpp:229
&gt; +                return throwException(state, scope, createRangeError(state,
&gt; +                    ASCIILiteral(&quot;Element is trying to set an out of bounds table index&quot;)));

Why not just throwVMRangeError()? Unless you want to build a string with the indices seems like we should just use the simpler syntax.

&gt; Source/JavaScriptCore/wasm/js/WebAssemblyModuleRecord.cpp:239
&gt; +                        ASCIILiteral(&quot;Element is setting the table value with an import. This is not yet implemented. FIXME:&quot;)));

Did you mean to link to a bug here?</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259592</commentid>
    <comment_count>7</comment_count>
      <attachid>297047</attachid>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-13 17:20:19 -0800</bug_when>
    <thetext>Comment on attachment 297047
patch

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

&gt;&gt; Source/JavaScriptCore/wasm/js/WebAssemblyModuleRecord.cpp:229
&gt;&gt; +                    ASCIILiteral(&quot;Element is trying to set an out of bounds table index&quot;)));
&gt; 
&gt; Why not just throwVMRangeError()? Unless you want to build a string with the indices seems like we should just use the simpler syntax.

Yeah sounds good.

&gt;&gt; Source/JavaScriptCore/wasm/js/WebAssemblyModuleRecord.cpp:239
&gt;&gt; +                        ASCIILiteral(&quot;Element is setting the table value with an import. This is not yet implemented. FIXME:&quot;)));
&gt; 
&gt; Did you mean to link to a bug here?

Yeah. I&apos;ll do that.</thetext>
  </long_desc><long_desc isprivate="0" >
    <commentid>1259597</commentid>
    <comment_count>8</comment_count>
    <who name="Saam Barati">saam</who>
    <bug_when>2016-12-13 17:32:49 -0800</bug_when>
    <thetext>landed in:
https://trac.webkit.org/changeset/209785</thetext>
  </long_desc>
      
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297041</attachid>
            <date>2016-12-13 14:28:32 -0800</date>
            <delta_ts>2016-12-13 15:12:48 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>8626</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAo9PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtRm9ybWF0LmgJKHJldmlzaW9uIDIw
OTc3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAkod29ya2lu
ZyBjb3B5KQpAQCAtMTQ3LDYgKzE0NywxMSBAQCBzdHJ1Y3QgU2VnbWVudCB7CiAgICAgfQogfTsK
IAorc3RydWN0IEVsZW1lbnQgeworICAgIHVpbnQzMl90IG9mZnNldDsKKyAgICBWZWN0b3I8dWlu
dDMyX3Q+IGZ1bmN0aW9uSW5kaWNlczsKK307CisKIGNsYXNzIFRhYmxlSW5mb3JtYXRpb24gewog
cHVibGljOgogICAgIFRhYmxlSW5mb3JtYXRpb24oKQpAQCAtMTg1LDYgKzE5MCw3IEBAIHN0cnVj
dCBNb2R1bGVJbmZvcm1hdGlvbiB7CiAgICAgVmVjdG9yPEV4cG9ydD4gZXhwb3J0czsKICAgICBz
dGQ6Om9wdGlvbmFsPHVpbnQzMl90PiBzdGFydEZ1bmN0aW9uSW5kZXhTcGFjZTsKICAgICBWZWN0
b3I8U2VnbWVudDo6UHRyPiBkYXRhOworICAgIFZlY3RvcjxFbGVtZW50PiBlbGVtZW50czsKICAg
ICBUYWJsZUluZm9ybWF0aW9uIHRhYmxlSW5mb3JtYXRpb247CiAKICAgICB+TW9kdWxlSW5mb3Jt
YXRpb24oKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJz
ZXIuY3BwCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1
bGVQYXJzZXIuY3BwCShyZXZpc2lvbiAyMDk3NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUv
d2FzbS9XYXNtTW9kdWxlUGFyc2VyLmNwcAkod29ya2luZyBjb3B5KQpAQCAtNDkyLDggKzQ5Miw0
OSBAQCBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VTdGFydCgpCiAKIGJvb2wgTW9kdWxlUGFyc2Vy
OjpwYXJzZUVsZW1lbnQoKQogewotICAgIC8vIEZJWE1FIGh0dHBzOi8vYnVncy53ZWJraXQub3Jn
L3Nob3dfYnVnLmNnaT9pZD0xNjE3MDkKLSAgICBSRUxFQVNFX0FTU0VSVF9OT1RfUkVBQ0hFRCgp
OworICAgIGlmICghbV9oYXNUYWJsZSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgdWlu
dDMyX3QgZWxlbWVudENvdW50OworICAgIGlmICghcGFyc2VWYXJVSW50MzIoZWxlbWVudENvdW50
KSkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIGlmICghbV9tb2R1bGUtPmVsZW1lbnRzLnRy
eVJlc2VydmVDYXBhY2l0eShlbGVtZW50Q291bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgZWxlbWVudENvdW50OyArK2kpIHsKKyAgICAg
ICAgdWludDMyX3QgdGFibGVJbmRleDsKKyAgICAgICAgaWYgKCFwYXJzZVZhclVJbnQzMih0YWJs
ZUluZGV4KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgLy8gV2Ugb25seSBz
dXBwb3J0IG9uZSB0YWJsZSBmb3Igbm93LgorICAgICAgICBpZiAodGFibGVJbmRleCAhPSAwKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIHVpbnQzMl90IG9mZnNldDsKKyAg
ICAgICAgaWYgKCFwYXJzZUluaXRFeHByKG9mZnNldCkpCisgICAgICAgICAgICByZXR1cm4gZmFs
c2U7CisKKyAgICAgICAgdWludDMyX3QgaW5kZXhDb3VudDsKKyAgICAgICAgaWYgKCFwYXJzZVZh
clVJbnQzMihpbmRleENvdW50KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAg
ICBFbGVtZW50IGVsZW1lbnQ7CisgICAgICAgIGlmICghZWxlbWVudC5mdW5jdGlvbkluZGljZXMu
dHJ5UmVzZXJ2ZUNhcGFjaXR5KGluZGV4Q291bnQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNl
OworCisgICAgICAgIC8vIEZJWE1FOiB3ZSBuZWVkIHZhbGlkYXRpb24gZXJyb3JzIGFib3V0IHRo
aXMgb2Zmc2V0LiBXaGF0IGlmIGl0CisgICAgICAgIC8vIGlzIHByb3ZhYmx5IG91dCBvZiBib3Vu
ZHMsIGZvciBleGFtcGxlLgorICAgICAgICBlbGVtZW50Lm9mZnNldCA9IG9mZnNldDsKKworICAg
ICAgICBmb3IgKHVuc2lnbmVkIGkgPSAwOyBpIDwgaW5kZXhDb3VudDsgKytpKSB7CisgICAgICAg
ICAgICB1aW50MzJfdCBpbmRleDsKKyAgICAgICAgICAgIGlmICghcGFyc2VWYXJVSW50MzIoaW5k
ZXgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICAgICAgICAgIGVsZW1lbnQu
ZnVuY3Rpb25JbmRpY2VzLnVuY2hlY2tlZEFwcGVuZChpbmRleCk7CisgICAgICAgIH0KKworICAg
ICAgICBtX21vZHVsZS0+ZWxlbWVudHMudW5jaGVja2VkQXBwZW5kKFdURk1vdmUoZWxlbWVudCkp
OworICAgIH0KKwogICAgIHJldHVybiB0cnVlOwogfQogCkBAIC01MjAsNiArNTYxLDIyIEBAIGJv
b2wgTW9kdWxlUGFyc2VyOjpwYXJzZUNvZGUoKQogICAgIHJldHVybiB0cnVlOwogfQogCitib29s
IE1vZHVsZVBhcnNlcjo6cGFyc2VJbml0RXhwcih1aW50MzJfdCYgdmFsdWUpCit7CisgICAgLy8g
RklYTUUgYWxsb3cgY29tcGxleCBpbml0X2V4cHIgaGVyZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NTcwMAorICAgIC8vIEZvciBub3cgd2Ugb25seSBoYW5kbGUg
aTMyLmNvbnN0IGFzIG9mZnNldC4KKworICAgIHVpbnQ4X3Qgb3Bjb2RlOworICAgIHVpbnQ4X3Qg
ZW5kT3Bjb2RlOworICAgIGlmICghcGFyc2VVSW50OChvcGNvZGUpCisgICAgICAgIHx8IG9wY29k
ZSAhPSBXYXNtOjpJMzJDb25zdAorICAgICAgICB8fCAhcGFyc2VWYXJVSW50MzIodmFsdWUpCisg
ICAgICAgIHx8ICFwYXJzZVVJbnQ4KGVuZE9wY29kZSkKKyAgICAgICAgfHwgZW5kT3Bjb2RlICE9
IFdhc206OkVuZCkKKyAgICAgICAgcmV0dXJuIGZhbHNlOworICAgIHJldHVybiB0cnVlOworfQor
CiBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VEYXRhKCkKIHsKICAgICB1aW50MzJfdCBzZWdtZW50
Q291bnQ7CkBAIC01MzQsMjEgKzU5MSwxMyBAQCBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VEYXRh
KCkKICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nTG4oIiAgc2VnbWVu
dCAjIiwgc2VnbWVudE51bWJlcik7CiAgICAgICAgIHVpbnQzMl90IGluZGV4OwotICAgICAgICB1
aW50OF90IG9wY29kZTsKICAgICAgICAgdWludDMyX3Qgb2Zmc2V0OwotICAgICAgICB1aW50OF90
IGVuZE9wY29kZTsKICAgICAgICAgdWludDMyX3QgZGF0YUJ5dGVMZW5ndGg7CiAgICAgICAgIGlm
ICghcGFyc2VWYXJVSW50MzIoaW5kZXgpCiAgICAgICAgICAgICB8fCBpbmRleCkKICAgICAgICAg
ICAgIHJldHVybiBmYWxzZTsKIAotICAgICAgICAvLyBGSVhNRSBhbGxvdyBjb21wbGV4IGluaXRf
ZXhwciBoZXJlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NzAw
Ci0gICAgICAgIC8vIEZvciBub3cgd2Ugb25seSBoYW5kbGUgaTMyLmNvbnN0IGFzIG9mZnNldC4K
LSAgICAgICAgaWYgKCFwYXJzZVVJbnQ4KG9wY29kZSkKLSAgICAgICAgICAgIHx8IG9wY29kZSAh
PSBXYXNtOjpJMzJDb25zdAotICAgICAgICAgICAgfHwgIXBhcnNlVmFyVUludDMyKG9mZnNldCkK
LSAgICAgICAgICAgIHx8ICFwYXJzZVVJbnQ4KGVuZE9wY29kZSkKLSAgICAgICAgICAgIHx8IGVu
ZE9wY29kZSAhPSBXYXNtOjpFbmQpCisgICAgICAgIGlmICghcGFyc2VJbml0RXhwcihvZmZzZXQp
KQogICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwogICAgICAgICBpZiAodmVyYm9zZSkKICAgICAg
ICAgICAgIGRhdGFMb2dMbigiICAgIG9mZnNldDogIiwgb2Zmc2V0KTsKSW5kZXg6IFNvdXJjZS9K
YXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaAo9PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3Vy
Y2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgJKHJldmlzaW9uIDIwOTc3
MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuaAkod29y
a2luZyBjb3B5KQpAQCAtODEsNiArODEsNyBAQCBwcml2YXRlOgogICAgIGJvb2wgV0FSTl9VTlVT
RURfUkVUVVJOIHBhcnNlTWVtb3J5SGVscGVyKGJvb2wgaXNJbXBvcnQpOwogICAgIGJvb2wgV0FS
Tl9VTlVTRURfUkVUVVJOIHBhcnNlVGFibGVIZWxwZXIoYm9vbCBpc0ltcG9ydCk7CiAgICAgYm9v
bCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VSZXNpemFibGVMaW1pdHModWludDMyX3QmIGluaXRp
YWwsIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+JiBtYXhpbXVtKTsKKyAgICBib29sIFdBUk5fVU5V
U0VEX1JFVFVSTiBwYXJzZUluaXRFeHByKHVpbnQzMl90Jik7CiAKICAgICBWTSogbV92bTsKICAg
ICBzdGQ6OnVuaXF1ZV9wdHI8TW9kdWxlSW5mb3JtYXRpb24+IG1fbW9kdWxlOwpJbmRleDogU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNXZWJBc3NlbWJseU1vZHVsZS5oCj09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUu
aAkocmV2aXNpb24gMjA5NzcwKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vanMvSlNX
ZWJBc3NlbWJseU1vZHVsZS5oCSh3b3JraW5nIGNvcHkpCkBAIC01Myw2ICs1MywxMSBAQCBwdWJs
aWM6CiAgICAgV2FzbTo6U2lnbmF0dXJlKiBzaWduYXR1cmVGb3JGdW5jdGlvbkluZGV4U3BhY2Uo
dW5zaWduZWQgZnVuY3Rpb25JbmRleFNwYWNlKSBjb25zdCB7IEFTU0VSVChmdW5jdGlvbkluZGV4
U3BhY2UgPCBtX2Z1bmN0aW9uSW5kZXhTcGFjZS5zaXplKTsgcmV0dXJuIG1fZnVuY3Rpb25JbmRl
eFNwYWNlLmJ1ZmZlci5nZXQoKVtmdW5jdGlvbkluZGV4U3BhY2VdLnNpZ25hdHVyZTsgfQogICAg
IHVuc2lnbmVkIGltcG9ydENvdW50KCkgY29uc3QgeyByZXR1cm4gbV93YXNtVG9KU1N0dWJzLnNp
emUoKTsgfQogCisgICAgYm9vbCBpc1ZhbGlkRnVuY3Rpb25JbmRleFNwYWNlSW5kZXgodWludDMy
X3QgaW5kZXgpIGNvbnN0CisgICAgeworICAgICAgICByZXR1cm4gaW5kZXggPCBpbXBvcnRDb3Vu
dCgpICsgbV9jYWxsZWVDb3VudDsKKyAgICB9CisKICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBq
c0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKHVuc2lnbmVkIGZ1bmN0aW9u
SW5kZXhTcGFjZSkKICAgICB7CiAgICAgICAgIFJFTEVBU0VfQVNTRVJUKGZ1bmN0aW9uSW5kZXhT
cGFjZSA+PSBpbXBvcnRDb3VudCgpKTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNt
L2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2
YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9u
IDIwOTc3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkLmNwcAkod29ya2luZyBjb3B5KQpAQCAtMjA5LDYgKzIwOSw1MiBAQCBKU1ZhbHVl
IFdlYkFzc2VtYmx5TW9kdWxlUmVjb3JkOjpldmFsdWF0CiAgICAgICAgIH0KICAgICB9CiAKKyAg
ICB7CisgICAgICAgIEpTV2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSA9IG1faW5zdGFuY2UtPm1v
ZHVsZSgpOworICAgICAgICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5m
b3JtYXRpb24gPSBtb2R1bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7CisgICAgICAgIEpTV2ViQXNz
ZW1ibHlUYWJsZSogdGFibGUgPSBtX2luc3RhbmNlLT50YWJsZSgpOworICAgICAgICBmb3IgKGNv
bnN0IFdhc206OkVsZW1lbnQmIGVsZW1lbnQgOiBtb2R1bGVJbmZvcm1hdGlvbi5lbGVtZW50cykg
eworICAgICAgICAgICAgLy8gSXQgc2hvdWxkIGJlIGEgdmFsaWRhdGlvbiBlcnJvciB0byBoYXZl
IGFueSBlbGVtZW50cyB3aXRob3V0IGEgdGFibGUuCisgICAgICAgICAgICAvLyBBbHNvLCBpdCdz
IGNvdWxkIGJlIHRoYXQgYSB0YWJsZSB3YXNuJ3QgaW1wb3J0ZWQsIG9yIHRoYXQgdGhlIHRhYmxl
CisgICAgICAgICAgICAvLyBpbXBvcnRlZCB3YXNuJ3QgY29tYXB0aWJsZS4gSG93ZXZlciwgdGhv
c2Ugc2hvdWxkIGVycm9yIG91dCBiZWZvcmUKKyAgICAgICAgICAgIC8vIGdldHRpbmcgaGVyZS4K
KyAgICAgICAgICAgIEFTU0VSVCghIXRhYmxlKTsKKyAgICAgICAgICAgIHVpbnQzMl90IHRhYmxl
SW5kZXggPSBlbGVtZW50Lm9mZnNldDsKKyAgICAgICAgICAgIGZvciAodWludDMyX3QgaSA9IDA7
IGkgPCBlbGVtZW50LmZ1bmN0aW9uSW5kaWNlcy5zaXplKCk7ICsraSkgeworICAgICAgICAgICAg
ICAgIGlmICh0YWJsZUluZGV4ID49IHRhYmxlLT5zaXplKCkpIHsKKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKHN0YXRlLCBzY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihz
dGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTQ0lJTGl0ZXJhbCgiRWxlbWVudCBpcyB0
cnlpbmcgdG8gc2V0IGFuIG91dCBvZiBib3VuZHMgdGFibGUgaW5kZXgiKSkpOworICAgICAgICAg
ICAgICAgIH0KKworICAgICAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXggPSBlbGVt
ZW50LmZ1bmN0aW9uSW5kaWNlc1tpXTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhpcyBl
c3NlbnRpYWxseSBtZWFucyB3ZSdyZSBleHBvcnRpbmcgYW4gaW1wb3J0LgorICAgICAgICAgICAg
ICAgIC8vIFdlIG5lZWQgYSBzdG9yeSBoZXJlLiBXZSBuZWVkIHRvIGNyZWF0ZSBhIFdlYkFzc2Vt
Ymx5RnVuY3Rpb24KKyAgICAgICAgICAgICAgICAvLyBmb3IgdGhlIGltcG9ydC4KKyAgICAgICAg
ICAgICAgICBpZiAoZnVuY3Rpb25JbmRleCA8IG1vZHVsZS0+aW1wb3J0Q291bnQoKSkgeworICAg
ICAgICAgICAgICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oc3RhdGUsIHNjb3BlLCBjcmVh
dGVSYW5nZUVycm9yKHN0YXRlLAorICAgICAgICAgICAgICAgICAgICAgICAgQVNDSUlMaXRlcmFs
KCJFbGVtZW50IGlzIHNldHRpbmcgdGhlIHRhYmxlIHZhbHVlIHdpdGggYW4gaW1wb3J0LiBUaGlz
IGlzIG5vdCB5ZXQgaW1wbGVtZW50ZWQuIEZJWE1FOiIpKSk7CisgICAgICAgICAgICAgICAgfQor
CisgICAgICAgICAgICAgICAgaWYgKCFtb2R1bGUtPmlzVmFsaWRGdW5jdGlvbkluZGV4U3BhY2VJ
bmRleChmdW5jdGlvbkluZGV4KSkgeworICAgICAgICAgICAgICAgICAgICAvLyBGSVhNRTogVGhp
cyBzaG91bGQgcHJvYmFibHkgYmUgYSB2YWxpZGF0aW9uIGJ1Zy4KKyAgICAgICAgICAgICAgICAg
ICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKHN0YXRlLCBzY29wZSwgY3JlYXRlUmFuZ2VFcnJvcihz
dGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTQ0lJTGl0ZXJhbCgiRWxlbWVudCBpcyB0
cnlpbmcgdG8gYWNjZXNzIGFuIG91dCBvZiBib3VuZHMgZnVuY3Rpb24gaW5kZXgiKSkpOworICAg
ICAgICAgICAgICAgIH0KKworCisgICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSog
anNFbnRyeXBvaW50Q2FsbGVlID0gbW9kdWxlLT5qc0VudHJ5cG9pbnRDYWxsZWVGcm9tRnVuY3Rp
b25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOworICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1i
bHlDYWxsZWUqIHdhc21FbnRyeXBvaW50Q2FsbGVlID0gbW9kdWxlLT53YXNtRW50cnlwb2ludENh
bGxlZUZyb21GdW5jdGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CisgICAgICAgICAgICAg
ICAgV2FzbTo6U2lnbmF0dXJlKiBzaWduYXR1cmUgPSBtb2R1bGUtPnNpZ25hdHVyZUZvckZ1bmN0
aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKKyAgICAgICAgICAgICAgICAvLyBGSVhNRTog
d2hhdCB0byBkbyBhYm91dCBuYW1lIGhlcmU/CisgICAgICAgICAgICAgICAgV2ViQXNzZW1ibHlG
dW5jdGlvbiogZnVuY3Rpb24gPSBXZWJBc3NlbWJseUZ1bmN0aW9uOjpjcmVhdGUoCisgICAgICAg
ICAgICAgICAgICAgIHZtLCBtX2luc3RhbmNlLT5nbG9iYWxPYmplY3QoKSwgc2lnbmF0dXJlLT5h
cmd1bWVudHMuc2l6ZSgpLCBTdHJpbmcoKSwgbV9pbnN0YW5jZS5nZXQoKSwganNFbnRyeXBvaW50
Q2FsbGVlLCB3YXNtRW50cnlwb2ludENhbGxlZSwgc2lnbmF0dXJlKTsKKworICAgICAgICAgICAg
ICAgIHRhYmxlLT5zZXRGdW5jdGlvbih2bSwgdGFibGVJbmRleCwgZnVuY3Rpb24pOworICAgICAg
ICAgICAgICAgICsrdGFibGVJbmRleDsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0K
KwogICAgIGlmIChXZWJBc3NlbWJseUZ1bmN0aW9uKiBzdGFydEZ1bmN0aW9uID0gbV9zdGFydEZ1
bmN0aW9uLmdldCgpKSB7CiAgICAgICAgIFByb3RvQ2FsbEZyYW1lIHByb3RvQ2FsbEZyYW1lOwog
ICAgICAgICBwcm90b0NhbGxGcmFtZS5pbml0KG51bGxwdHIsIHN0YXJ0RnVuY3Rpb24sIEpTVmFs
dWUoKSwgMSwgbnVsbHB0cik7Cg==
</data>

          </attachment>
          <attachment
              isobsolete="1"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297045</attachid>
            <date>2016-12-13 15:12:48 -0800</date>
            <delta_ts>2016-12-13 16:05:07 -0800</delta_ts>
            <desc>WIP</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>13025</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvd2FzbS9CdWlsZGVyLmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvd2Fz
bS9CdWlsZGVyLmpzCShyZXZpc2lvbiAyMDk3NzEpCisrKyBKU1Rlc3RzL3dhc20vQnVpbGRlci5q
cwkod29ya2luZyBjb3B5KQpAQCAtNDg5LDcgKzQ4OSwxOCBAQCBleHBvcnQgZGVmYXVsdCBjbGFz
cyBCdWlsZGVyIHsKIAogICAgICAgICAgICAgY2FzZSAiRWxlbWVudCI6CiAgICAgICAgICAgICAg
ICAgLy8gRklYTUUgaW1wbGVtZW50IGVsZW1lbnQgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2MTcwOQotICAgICAgICAgICAgICAgIHRoaXNbc2VjdGlvbl0gPSAoKSA9
PiB7IHRocm93IG5ldyBFcnJvcihgVW5pbXBsZW1lbnRlZDogc2VjdGlvbiB0eXBlICIke3NlY3Rp
b259ImApOyB9OworICAgICAgICAgICAgICAgIHRoaXNbc2VjdGlvbl0gPSBmdW5jdGlvbigpIHsK
KyAgICAgICAgICAgICAgICAgICAgY29uc3QgcyA9IHRoaXMuX2FkZFNlY3Rpb24oc2VjdGlvbik7
CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IGV4cG9ydEJ1aWxkZXIgPSB7CisgICAgICAgICAg
ICAgICAgICAgICAgICBFbmQ6ICgpID0+IHRoaXMsCisgICAgICAgICAgICAgICAgICAgICAgICBF
bGVtZW50OiAoe3RhYmxlSW5kZXggPSAwLCBvZmZzZXQsIGZ1bmN0aW9uSW5kaWNlc30pID0+IHsK
KyAgICAgICAgICAgICAgICAgICAgICAgICAgICBzLmRhdGEucHVzaCh7dGFibGVJbmRleCwgb2Zm
c2V0LCBmdW5jdGlvbkluZGljZXN9KTsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICByZXR1
cm4gZXhwb3J0QnVpbGRlcjsKKyAgICAgICAgICAgICAgICAgICAgICAgIH0KKyAgICAgICAgICAg
ICAgICAgICAgfTsKKworICAgICAgICAgICAgICAgICAgICByZXR1cm4gZXhwb3J0QnVpbGRlcjsK
KyAgICAgICAgICAgICAgICB9OwogICAgICAgICAgICAgICAgIGJyZWFrOwogCiAgICAgICAgICAg
ICBjYXNlICJDb2RlIjoKSW5kZXg6IEpTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5Qmlu
YXJ5LmpzCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvd2FzbS9CdWlsZGVyX1dlYkFzc2VtYmx5Qmlu
YXJ5LmpzCShyZXZpc2lvbiAyMDk3NzEpCisrKyBKU1Rlc3RzL3dhc20vQnVpbGRlcl9XZWJBc3Nl
bWJseUJpbmFyeS5qcwkod29ya2luZyBjb3B5KQpAQCAtMTM1LDcgKzEzNSwyMyBAQCBjb25zdCBl
bWl0dGVycyA9IHsKICAgICBTdGFydDogKHNlY3Rpb24sIGJpbikgPT4gewogICAgICAgICBwdXQo
YmluLCAidmFydWludDMyIiwgc2VjdGlvbi5kYXRhWzBdKTsKICAgICB9LAotICAgIEVsZW1lbnQ6
IChzZWN0aW9uLCBiaW4pID0+IHsgdGhyb3cgbmV3IEVycm9yKGBOb3QgeWV0IGltcGxlbWVudGVk
YCk7IH0sCisgICAgRWxlbWVudDogKHNlY3Rpb24sIGJpbikgPT4geworICAgICAgICBjb25zdCBk
YXRhID0gc2VjdGlvbi5kYXRhOworICAgICAgICBwdXQoYmluLCAidmFydWludDMyIiwgZGF0YS5s
ZW5ndGgpOworICAgICAgICBmb3IgKGNvbnN0IHt0YWJsZUluZGV4LCBvZmZzZXQsIGZ1bmN0aW9u
SW5kaWNlc30gb2YgZGF0YSkgeworICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIsIHRh
YmxlSW5kZXgpOworCisgICAgICAgICAgICAvLyBGSVhNRSBhbGxvdyBjb21wbGV4IGluaXRfZXhw
ciBoZXJlLiBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1NzAwCisg
ICAgICAgICAgICAvLyBGb3Igbm93IHdlIG9ubHkgaGFuZGxlIGkzMi5jb25zdCBhcyBvZmZzZXQu
CisgICAgICAgICAgICBwdXQoYmluLCAidWludDgiLCBXQVNNLmRlc2NyaXB0aW9uLm9wY29kZVsi
aTMyLmNvbnN0Il0udmFsdWUpOworICAgICAgICAgICAgcHV0KGJpbiwgV0FTTS5kZXNjcmlwdGlv
bi5vcGNvZGVbImkzMi5jb25zdCJdLmltbWVkaWF0ZVswXS50eXBlLCBvZmZzZXQpOworICAgICAg
ICAgICAgcHV0KGJpbiwgInVpbnQ4IiwgV0FTTS5kZXNjcmlwdGlvbi5vcGNvZGVbImVuZCJdLnZh
bHVlKTsKKworICAgICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIsIGZ1bmN0aW9uSW5kaWNl
cy5sZW5ndGgpOworICAgICAgICAgICAgZm9yIChjb25zdCBmdW5jdGlvbkluZGV4IG9mIGZ1bmN0
aW9uSW5kaWNlcykKKyAgICAgICAgICAgICAgICBwdXQoYmluLCAidmFydWludDMyIiwgZnVuY3Rp
b25JbmRleCk7CisgICAgICAgIH0KKyAgICB9LAogCiAgICAgQ29kZTogKHNlY3Rpb24sIGJpbikg
PT4gewogICAgICAgICBwdXQoYmluLCAidmFydWludDMyIiwgc2VjdGlvbi5kYXRhLmxlbmd0aCk7
CkluZGV4OiBKU1Rlc3RzL3dhc20vanMtYXBpL2VsZW1lbnQuanMKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNU
ZXN0cy93YXNtL2pzLWFwaS9lbGVtZW50LmpzCShub25leGlzdGVudCkKKysrIEpTVGVzdHMvd2Fz
bS9qcy1hcGkvZWxlbWVudC5qcwkod29ya2luZyBjb3B5KQpAQCAtMCwwICsxLDM0IEBACitpbXBv
cnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKK2ltcG9ydCAqIGFzIGFzc2VydCBmcm9t
ICcuLi9hc3NlcnQuanMnOworCisKK2NvbnN0IHRhYmxlRGVzY3JpcHRpb24gPSB7aW5pdGlhbDog
MSwgZWxlbWVudDogImFueWZ1bmMifTsKK2NvbnN0IGJ1aWxkZXIgPSBuZXcgQnVpbGRlcigpCisg
ICAgLlR5cGUoKS5FbmQoKQorICAgIC5JbXBvcnQoKQorICAgICAgICAuVGFibGUoImltcCIsICJ0
YWJsZSIsIHRhYmxlRGVzY3JpcHRpb24pCisgICAgLkVuZCgpCisgICAgLkZ1bmN0aW9uKCkuRW5k
KCkKKyAgICAuRWxlbWVudCgpCisgICAgICAgIC5FbGVtZW50KHt0YWJsZUluZGV4OiAwLCBvZmZz
ZXQ6IDAsIGZ1bmN0aW9uSW5kaWNlczogWzBdfSkKKyAgICAuRW5kKCkKKyAgICAuQ29kZSgpCisg
ICAgICAgIC5GdW5jdGlvbigiZm9vIiwge3BhcmFtczogWyJpMzIiXSwgcmV0OiAiaTMyIn0pCisg
ICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgIC5JMzJDb25zdCg0MikKKyAgICAg
ICAgICAgIC5JMzJBZGQoKQorICAgICAgICAgICAgLlJldHVybigpCisgICAgICAgIC5FbmQoKQor
ICAgIC5FbmQoKTsKKworY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOwor
Y29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5Lk1vZHVsZShiaW4pOworY29uc3QgdGFibGUg
PSBuZXcgV2ViQXNzZW1ibHkuVGFibGUodGFibGVEZXNjcmlwdGlvbik7CituZXcgV2ViQXNzZW1i
bHkuSW5zdGFuY2UobW9kdWxlLCB7aW1wOiB7dGFibGV9fSk7Citjb25zdCBmb28gPSB0YWJsZS5n
ZXQoMCk7Citjb25zdCBvYmpzID0gW107Citmb3IgKGxldCBpID0gMDsgaSA8IDEwMDAwOyBpKysp
IHsKKyAgICBvYmpzLnB1c2gobmV3IFN0cmluZygiZm9vIikpOworICAgIGlmIChmb28oMjApICE9
PSAyMCArIDQyKQorICAgICAgICB0aHJvdyBuZXcgRXJyb3IoImJhZCEhISIpOworfQpJbmRleDog
U291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCj09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAkocmV2aXNpb24gMjA5NzcxKQor
KysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCSh3b3JraW5nIGNvcHkp
CkBAIC0xNDcsNiArMTQ3LDExIEBAIHN0cnVjdCBTZWdtZW50IHsKICAgICB9CiB9OwogCitzdHJ1
Y3QgRWxlbWVudCB7CisgICAgdWludDMyX3Qgb2Zmc2V0OworICAgIFZlY3Rvcjx1aW50MzJfdD4g
ZnVuY3Rpb25JbmRpY2VzOworfTsKKwogY2xhc3MgVGFibGVJbmZvcm1hdGlvbiB7CiBwdWJsaWM6
CiAgICAgVGFibGVJbmZvcm1hdGlvbigpCkBAIC0xODUsNiArMTkwLDcgQEAgc3RydWN0IE1vZHVs
ZUluZm9ybWF0aW9uIHsKICAgICBWZWN0b3I8RXhwb3J0PiBleHBvcnRzOwogICAgIHN0ZDo6b3B0
aW9uYWw8dWludDMyX3Q+IHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlOwogICAgIFZlY3RvcjxTZWdt
ZW50OjpQdHI+IGRhdGE7CisgICAgVmVjdG9yPEVsZW1lbnQ+IGVsZW1lbnRzOwogICAgIFRhYmxl
SW5mb3JtYXRpb24gdGFibGVJbmZvcm1hdGlvbjsKIAogICAgIH5Nb2R1bGVJbmZvcm1hdGlvbigp
OwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5jcHAK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNl
ci5jcHAJKHJldmlzaW9uIDIwOTc3MSkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dh
c21Nb2R1bGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTIsOCArNDkyLDYwIEBAIGJv
b2wgTW9kdWxlUGFyc2VyOjpwYXJzZVN0YXJ0KCkKIAogYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNl
RWxlbWVudCgpCiB7Ci0gICAgLy8gRklYTUUgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19i
dWcuY2dpP2lkPTE2MTcwOQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9SRUFDSEVEKCk7CisgICAg
aWYgKCFtX2hhc1RhYmxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICB1aW50MzJfdCBl
bGVtZW50Q291bnQ7CisgICAgaWYgKCFwYXJzZVZhclVJbnQzMihlbGVtZW50Q291bnQpKQorICAg
ICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX21vZHVsZS0+ZWxlbWVudHMudHJ5UmVzZXJ2
ZUNhcGFjaXR5KGVsZW1lbnRDb3VudCkpCisgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgIGZv
ciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbGVtZW50Q291bnQ7ICsraSkgeworICAgICAgICB1aW50
MzJfdCB0YWJsZUluZGV4OworICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKHRhYmxlSW5kZXgp
KQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBXZSBvbmx5IHN1cHBvcnQg
b25lIHRhYmxlIGZvciBub3cuCisgICAgICAgIGlmICh0YWJsZUluZGV4ICE9IDApCisgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdWludDMyX3Qgb2Zmc2V0OworICAgICAgICBp
ZiAoIXBhcnNlSW5pdEV4cHIob2Zmc2V0KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKwor
ICAgICAgICB1aW50MzJfdCBpbmRleENvdW50OworICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMy
KGluZGV4Q291bnQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIEFTU0VS
VCghIW1fbW9kdWxlLT50YWJsZUluZm9ybWF0aW9uKTsKKyAgICAgICAgaWYgKHN0ZDo6b3B0aW9u
YWw8dWludDMyX3Q+IG1heGltdW0gPSBtX21vZHVsZS0+dGFibGVJbmZvcm1hdGlvbi5tYXhpbXVt
KCkpIHsKKyAgICAgICAgICAgIGlmIChpbmRleENvdW50KSB7CisgICAgICAgICAgICAgICAgLy8g
RklYTUU6IHNob3VsZCAhaW5kZXhDb3VudCBiZSBhIHZhbGlkYXRpb24gZXJyb3I/CisgICAgICAg
ICAgICAgICAgdWludDY0X3QgbGFzdFdyaXR0ZW5JbmRleCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90
PihpbmRleENvdW50KSArIHN0YXRpY19jYXN0PHVpbnQ2NF90PihvZmZzZXQpIC0gMTsKKyAgICAg
ICAgICAgICAgICAvLyBGSVhNRTogcmlnaHQgbm93LCBwcm92YWJseSBvdXQgb2YgYm91bmRzIHdy
aXRlcyBhcmUgdmFsaWRhdGlvbiBlcnJvcnMuCisgICAgICAgICAgICAgICAgaWYgKGxhc3RXcml0
dGVuSW5kZXggPj0gc3RhdGljX2Nhc3Q8dWludDY0X3Q+KCptYXhpbXVtKSkKKyAgICAgICAgICAg
ICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAgICAgfQorICAgICAgICB9CisKKyAgICAg
ICAgRWxlbWVudCBlbGVtZW50OworICAgICAgICBpZiAoIWVsZW1lbnQuZnVuY3Rpb25JbmRpY2Vz
LnRyeVJlc2VydmVDYXBhY2l0eShpbmRleENvdW50KSkKKyAgICAgICAgICAgIHJldHVybiBmYWxz
ZTsKKworICAgICAgICAvLyBGSVhNRTogd2UgbmVlZCB2YWxpZGF0aW9uIGVycm9ycyBhYm91dCB0
aGlzIG9mZnNldC4gV2hhdCBpZiBpdAorICAgICAgICAvLyBpcyBwcm92YWJseSBvdXQgb2YgYm91
bmRzLCBmb3IgZXhhbXBsZS4KKyAgICAgICAgZWxlbWVudC5vZmZzZXQgPSBvZmZzZXQ7CisKKyAg
ICAgICAgZm9yICh1bnNpZ25lZCBpID0gMDsgaSA8IGluZGV4Q291bnQ7ICsraSkgeworICAgICAg
ICAgICAgdWludDMyX3QgaW5kZXg7CisgICAgICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGlu
ZGV4KSkKKyAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAgICBlbGVtZW50
LmZ1bmN0aW9uSW5kaWNlcy51bmNoZWNrZWRBcHBlbmQoaW5kZXgpOworICAgICAgICB9CisKKyAg
ICAgICAgbV9tb2R1bGUtPmVsZW1lbnRzLnVuY2hlY2tlZEFwcGVuZChXVEZNb3ZlKGVsZW1lbnQp
KTsKKyAgICB9CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAtNTIwLDYgKzU3MiwyMiBAQCBi
b29sIE1vZHVsZVBhcnNlcjo6cGFyc2VDb2RlKCkKICAgICByZXR1cm4gdHJ1ZTsKIH0KIAorYm9v
bCBNb2R1bGVQYXJzZXI6OnBhcnNlSW5pdEV4cHIodWludDMyX3QmIHZhbHVlKQoreworICAgIC8v
IEZJWE1FIGFsbG93IGNvbXBsZXggaW5pdF9leHByIGhlcmUuIGh0dHBzOi8vYnVncy53ZWJraXQu
b3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU3MDAKKyAgICAvLyBGb3Igbm93IHdlIG9ubHkgaGFuZGxl
IGkzMi5jb25zdCBhcyBvZmZzZXQuCisKKyAgICB1aW50OF90IG9wY29kZTsKKyAgICB1aW50OF90
IGVuZE9wY29kZTsKKyAgICBpZiAoIXBhcnNlVUludDgob3Bjb2RlKQorICAgICAgICB8fCBvcGNv
ZGUgIT0gV2FzbTo6STMyQ29uc3QKKyAgICAgICAgfHwgIXBhcnNlVmFyVUludDMyKHZhbHVlKQor
ICAgICAgICB8fCAhcGFyc2VVSW50OChlbmRPcGNvZGUpCisgICAgICAgIHx8IGVuZE9wY29kZSAh
PSBXYXNtOjpFbmQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAgICByZXR1cm4gdHJ1ZTsKK30K
KwogYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlRGF0YSgpCiB7CiAgICAgdWludDMyX3Qgc2VnbWVu
dENvdW50OwpAQCAtNTM0LDIxICs2MDIsMTMgQEAgYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlRGF0
YSgpCiAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAgZGF0YUxvZ0xuKCIgIHNlZ21l
bnQgIyIsIHNlZ21lbnROdW1iZXIpOwogICAgICAgICB1aW50MzJfdCBpbmRleDsKLSAgICAgICAg
dWludDhfdCBvcGNvZGU7CiAgICAgICAgIHVpbnQzMl90IG9mZnNldDsKLSAgICAgICAgdWludDhf
dCBlbmRPcGNvZGU7CiAgICAgICAgIHVpbnQzMl90IGRhdGFCeXRlTGVuZ3RoOwogICAgICAgICBp
ZiAoIXBhcnNlVmFyVUludDMyKGluZGV4KQogICAgICAgICAgICAgfHwgaW5kZXgpCiAgICAgICAg
ICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgLy8gRklYTUUgYWxsb3cgY29tcGxleCBpbml0
X2V4cHIgaGVyZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTcw
MAotICAgICAgICAvLyBGb3Igbm93IHdlIG9ubHkgaGFuZGxlIGkzMi5jb25zdCBhcyBvZmZzZXQu
Ci0gICAgICAgIGlmICghcGFyc2VVSW50OChvcGNvZGUpCi0gICAgICAgICAgICB8fCBvcGNvZGUg
IT0gV2FzbTo6STMyQ29uc3QKLSAgICAgICAgICAgIHx8ICFwYXJzZVZhclVJbnQzMihvZmZzZXQp
Ci0gICAgICAgICAgICB8fCAhcGFyc2VVSW50OChlbmRPcGNvZGUpCi0gICAgICAgICAgICB8fCBl
bmRPcGNvZGUgIT0gV2FzbTo6RW5kKQorICAgICAgICBpZiAoIXBhcnNlSW5pdEV4cHIob2Zmc2V0
KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgaWYgKHZlcmJvc2UpCiAgICAg
ICAgICAgICBkYXRhTG9nTG4oIiAgICBvZmZzZXQ6ICIsIG9mZnNldCk7CkluZGV4OiBTb3VyY2Uv
SmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgKPT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291
cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNlci5oCShyZXZpc2lvbiAyMDk3
NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgJKHdv
cmtpbmcgY29weSkKQEAgLTgxLDYgKzgxLDcgQEAgcHJpdmF0ZToKICAgICBib29sIFdBUk5fVU5V
U0VEX1JFVFVSTiBwYXJzZU1lbW9yeUhlbHBlcihib29sIGlzSW1wb3J0KTsKICAgICBib29sIFdB
Uk5fVU5VU0VEX1JFVFVSTiBwYXJzZVRhYmxlSGVscGVyKGJvb2wgaXNJbXBvcnQpOwogICAgIGJv
b2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlUmVzaXphYmxlTGltaXRzKHVpbnQzMl90JiBpbml0
aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiYgbWF4aW11bSk7CisgICAgYm9vbCBXQVJOX1VO
VVNFRF9SRVRVUk4gcGFyc2VJbml0RXhwcih1aW50MzJfdCYpOwogCiAgICAgVk0qIG1fdm07CiAg
ICAgc3RkOjp1bmlxdWVfcHRyPE1vZHVsZUluZm9ybWF0aW9uPiBtX21vZHVsZTsKSW5kZXg6IFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pTV2ViQXNzZW1ibHlNb2R1bGUuaAo9PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9KU1dlYkFzc2VtYmx5TW9kdWxl
LmgJKHJldmlzaW9uIDIwOTc3MCkKKysrIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL0pT
V2ViQXNzZW1ibHlNb2R1bGUuaAkod29ya2luZyBjb3B5KQpAQCAtNTMsNiArNTMsMTEgQEAgcHVi
bGljOgogICAgIFdhc206OlNpZ25hdHVyZSogc2lnbmF0dXJlRm9yRnVuY3Rpb25JbmRleFNwYWNl
KHVuc2lnbmVkIGZ1bmN0aW9uSW5kZXhTcGFjZSkgY29uc3QgeyBBU1NFUlQoZnVuY3Rpb25JbmRl
eFNwYWNlIDwgbV9mdW5jdGlvbkluZGV4U3BhY2Uuc2l6ZSk7IHJldHVybiBtX2Z1bmN0aW9uSW5k
ZXhTcGFjZS5idWZmZXIuZ2V0KClbZnVuY3Rpb25JbmRleFNwYWNlXS5zaWduYXR1cmU7IH0KICAg
ICB1bnNpZ25lZCBpbXBvcnRDb3VudCgpIGNvbnN0IHsgcmV0dXJuIG1fd2FzbVRvSlNTdHVicy5z
aXplKCk7IH0KIAorICAgIGJvb2wgaXNWYWxpZEZ1bmN0aW9uSW5kZXhTcGFjZUluZGV4KHVpbnQz
Ml90IGluZGV4KSBjb25zdAorICAgIHsKKyAgICAgICAgcmV0dXJuIGluZGV4IDwgaW1wb3J0Q291
bnQoKSArIG1fY2FsbGVlQ291bnQ7CisgICAgfQorCiAgICAgSlNXZWJBc3NlbWJseUNhbGxlZSog
anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZSh1bnNpZ25lZCBmdW5jdGlv
bkluZGV4U3BhY2UpCiAgICAgewogICAgICAgICBSRUxFQVNFX0FTU0VSVChmdW5jdGlvbkluZGV4
U3BhY2UgPj0gaW1wb3J0Q291bnQoKSk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0ph
dmFTY3JpcHRDb3JlL3dhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVSZWNvcmQuY3BwCShyZXZpc2lv
biAyMDk3NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9qcy9XZWJBc3NlbWJseU1v
ZHVsZVJlY29yZC5jcHAJKHdvcmtpbmcgY29weSkKQEAgLTIwOSw2ICsyMDksNTUgQEAgSlNWYWx1
ZSBXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVhdAogICAgICAgICB9CiAgICAgfQogCisg
ICAgeworICAgICAgICBKU1dlYkFzc2VtYmx5TW9kdWxlKiBtb2R1bGUgPSBtX2luc3RhbmNlLT5t
b2R1bGUoKTsKKyAgICAgICAgY29uc3QgV2FzbTo6TW9kdWxlSW5mb3JtYXRpb24mIG1vZHVsZUlu
Zm9ybWF0aW9uID0gbW9kdWxlLT5tb2R1bGVJbmZvcm1hdGlvbigpOworICAgICAgICBKU1dlYkFz
c2VtYmx5VGFibGUqIHRhYmxlID0gbV9pbnN0YW5jZS0+dGFibGUoKTsKKyAgICAgICAgZm9yIChj
b25zdCBXYXNtOjpFbGVtZW50JiBlbGVtZW50IDogbW9kdWxlSW5mb3JtYXRpb24uZWxlbWVudHMp
IHsKKyAgICAgICAgICAgIC8vIEl0IHNob3VsZCBiZSBhIHZhbGlkYXRpb24gZXJyb3IgdG8gaGF2
ZSBhbnkgZWxlbWVudHMgd2l0aG91dCBhIHRhYmxlLgorICAgICAgICAgICAgLy8gQWxzbywgaXQn
cyBjb3VsZCBiZSB0aGF0IGEgdGFibGUgd2Fzbid0IGltcG9ydGVkLCBvciB0aGF0IHRoZSB0YWJs
ZQorICAgICAgICAgICAgLy8gaW1wb3J0ZWQgd2Fzbid0IGNvbWFwdGlibGUuIEhvd2V2ZXIsIHRo
b3NlIHNob3VsZCBlcnJvciBvdXQgYmVmb3JlCisgICAgICAgICAgICAvLyBnZXR0aW5nIGhlcmUu
CisgICAgICAgICAgICBBU1NFUlQoISF0YWJsZSk7CisgICAgICAgICAgICB1aW50MzJfdCB0YWJs
ZUluZGV4ID0gZWxlbWVudC5vZmZzZXQ7CisgICAgICAgICAgICBmb3IgKHVpbnQzMl90IGkgPSAw
OyBpIDwgZWxlbWVudC5mdW5jdGlvbkluZGljZXMuc2l6ZSgpOyArK2kpIHsKKyAgICAgICAgICAg
ICAgICBpZiAodGFibGVJbmRleCA+PSB0YWJsZS0+c2l6ZSgpKSB7CisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3Io
c3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICBBU0NJSUxpdGVyYWwoIkVsZW1lbnQgaXMg
dHJ5aW5nIHRvIHNldCBhbiBvdXQgb2YgYm91bmRzIHRhYmxlIGluZGV4IikpKTsKKyAgICAgICAg
ICAgICAgICB9CisKKyAgICAgICAgICAgICAgICB1aW50MzJfdCBmdW5jdGlvbkluZGV4ID0gZWxl
bWVudC5mdW5jdGlvbkluZGljZXNbaV07CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRoaXMg
ZXNzZW50aWFsbHkgbWVhbnMgd2UncmUgZXhwb3J0aW5nIGFuIGltcG9ydC4KKyAgICAgICAgICAg
ICAgICAvLyBXZSBuZWVkIGEgc3RvcnkgaGVyZS4gV2UgbmVlZCB0byBjcmVhdGUgYSBXZWJBc3Nl
bWJseUZ1bmN0aW9uCisgICAgICAgICAgICAgICAgLy8gZm9yIHRoZSBpbXBvcnQuCisgICAgICAg
ICAgICAgICAgaWYgKGZ1bmN0aW9uSW5kZXggPCBtb2R1bGUtPmltcG9ydENvdW50KCkpIHsKKyAg
ICAgICAgICAgICAgICAgICAgcmV0dXJuIHRocm93RXhjZXB0aW9uKHN0YXRlLCBzY29wZSwgY3Jl
YXRlUmFuZ2VFcnJvcihzdGF0ZSwKKyAgICAgICAgICAgICAgICAgICAgICAgIEFTQ0lJTGl0ZXJh
bCgiRWxlbWVudCBpcyBzZXR0aW5nIHRoZSB0YWJsZSB2YWx1ZSB3aXRoIGFuIGltcG9ydC4gVGhp
cyBpcyBub3QgeWV0IGltcGxlbWVudGVkLiBGSVhNRToiKSkpOworICAgICAgICAgICAgICAgIH0K
KworICAgICAgICAgICAgICAgIGlmICghbW9kdWxlLT5pc1ZhbGlkRnVuY3Rpb25JbmRleFNwYWNl
SW5kZXgoZnVuY3Rpb25JbmRleCkpIHsKKyAgICAgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRo
aXMgc2hvdWxkIHByb2JhYmx5IGJlIGEgdmFsaWRhdGlvbiBidWcuCisgICAgICAgICAgICAgICAg
ICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihzdGF0ZSwgc2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3Io
c3RhdGUsCisgICAgICAgICAgICAgICAgICAgICAgICBBU0NJSUxpdGVyYWwoIkVsZW1lbnQgaXMg
dHJ5aW5nIHRvIGFjY2VzcyBhbiBvdXQgb2YgYm91bmRzIGZ1bmN0aW9uIGluZGV4IikpKTsKKyAg
ICAgICAgICAgICAgICB9CisKKworICAgICAgICAgICAgICAgIEpTV2ViQXNzZW1ibHlDYWxsZWUq
IGpzRW50cnlwb2ludENhbGxlZSA9IG1vZHVsZS0+anNFbnRyeXBvaW50Q2FsbGVlRnJvbUZ1bmN0
aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKKyAgICAgICAgICAgICAgICBKU1dlYkFzc2Vt
Ymx5Q2FsbGVlKiB3YXNtRW50cnlwb2ludENhbGxlZSA9IG1vZHVsZS0+d2FzbUVudHJ5cG9pbnRD
YWxsZWVGcm9tRnVuY3Rpb25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOworICAgICAgICAgICAg
ICAgIFdhc206OlNpZ25hdHVyZSogc2lnbmF0dXJlID0gbW9kdWxlLT5zaWduYXR1cmVGb3JGdW5j
dGlvbkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6
IFNheSB3ZSBleHBvcnQgbG9jYWwgZnVuY3Rpb24gImZvbyIgYXQgZnVuY2l0b24gaW5kZXggMC4K
KyAgICAgICAgICAgICAgICAvLyBXaGF0IGlmIHdlIGFsc28gc2V0IGl0IHRvIHRoZSB0YWJsZSBh
biBFbGVtZW50IHcvIGluZGV4IDAuCisgICAgICAgICAgICAgICAgLy8gRG9lcyAobmV3IEluc3Rh
bmNlKC4uLikpLmV4cG9ydHMuZm9vID09PSB0YWJsZS5nZXQoMCk/CisgICAgICAgICAgICAgICAg
Ly8gRklYTUU6IHdoYXQgdG8gZG8gYWJvdXQgbmFtZSBoZXJlPworICAgICAgICAgICAgICAgIFdl
YkFzc2VtYmx5RnVuY3Rpb24qIGZ1bmN0aW9uID0gV2ViQXNzZW1ibHlGdW5jdGlvbjo6Y3JlYXRl
KAorICAgICAgICAgICAgICAgICAgICB2bSwgbV9pbnN0YW5jZS0+Z2xvYmFsT2JqZWN0KCksIHNp
Z25hdHVyZS0+YXJndW1lbnRzLnNpemUoKSwgU3RyaW5nKCksIG1faW5zdGFuY2UuZ2V0KCksIGpz
RW50cnlwb2ludENhbGxlZSwgd2FzbUVudHJ5cG9pbnRDYWxsZWUsIHNpZ25hdHVyZSk7CisKKyAg
ICAgICAgICAgICAgICB0YWJsZS0+c2V0RnVuY3Rpb24odm0sIHRhYmxlSW5kZXgsIGZ1bmN0aW9u
KTsKKyAgICAgICAgICAgICAgICArK3RhYmxlSW5kZXg7CisgICAgICAgICAgICB9CisgICAgICAg
IH0KKyAgICB9CisKICAgICBpZiAoV2ViQXNzZW1ibHlGdW5jdGlvbiogc3RhcnRGdW5jdGlvbiA9
IG1fc3RhcnRGdW5jdGlvbi5nZXQoKSkgewogICAgICAgICBQcm90b0NhbGxGcmFtZSBwcm90b0Nh
bGxGcmFtZTsKICAgICAgICAgcHJvdG9DYWxsRnJhbWUuaW5pdChudWxscHRyLCBzdGFydEZ1bmN0
aW9uLCBKU1ZhbHVlKCksIDEsIG51bGxwdHIpOwo=
</data>

          </attachment>
          <attachment
              isobsolete="0"
              ispatch="1"
              isprivate="0"
          >
            <attachid>297047</attachid>
            <date>2016-12-13 16:05:07 -0800</date>
            <delta_ts>2016-12-13 16:47:07 -0800</delta_ts>
            <desc>patch</desc>
            <filename>a-backup.diff</filename>
            <type>text/plain</type>
            <size>19533</size>
            <attacher name="Saam Barati">saam</attacher>
            
              <data encoding="base64">SW5kZXg6IEpTVGVzdHMvQ2hhbmdlTG9nCj09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT0KLS0tIEpTVGVzdHMvQ2hhbmdlTG9n
CShyZXZpc2lvbiAyMDk3ODIpCisrKyBKU1Rlc3RzL0NoYW5nZUxvZwkod29ya2luZyBjb3B5KQpA
QCAtMSwzICsxLDE5IEBACisyMDE2LTEyLTEzICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUu
Y29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBpbXBsZW1lbnQgdGhlIGVsZW1lbnRzIHNlY3Rp
b24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTcx
NQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAgICAgICogd2Fz
bS9CdWlsZGVyLmpzOgorICAgICAgICAoZXhwb3J0LmRlZmF1bHQuQnVpbGRlci5wcm90b3R5cGUu
X3JlZ2lzdGVyU2VjdGlvbkJ1aWxkZXJzLnN3aXRjaCk6CisgICAgICAgICogd2FzbS9CdWlsZGVy
X1dlYkFzc2VtYmx5QmluYXJ5LmpzOgorICAgICAgICAoY29uc3QuZW1pdHRlcnMuRWxlbWVudCk6
CisgICAgICAgICogd2FzbS9mdW5jdGlvbi10ZXN0cy9iYXNpYy1lbGVtZW50LmpzOiBBZGRlZC4K
KyAgICAgICAgKiB3YXNtL2pzLWFwaS9lbGVtZW50LmpzOiBBZGRlZC4KKyAgICAgICAgKGFzc2Vy
dEJhZEJpbmFyeSk6CisgICAgICAgIChhc3NlcnRCYWRCaW5hcnkuYmFkSW5zdGFudGlhdGlvbik6
CisKIDIwMTYtMTItMTMgIFNhYW0gQmFyYXRpICA8c2JhcmF0aUBhcHBsZS5jb20+CiAKICAgICAg
ICAgV2ViQXNzZW1ibHk6IGltcGxlbWVudCB0aGUgdGFibGUgc2VjdGlvbiBhbmQgdGFibGUgaW1w
b3J0CkluZGV4OiBKU1Rlc3RzL3dhc20vQnVpbGRlci5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3Rz
L3dhc20vQnVpbGRlci5qcwkocmV2aXNpb24gMjA5NzcxKQorKysgSlNUZXN0cy93YXNtL0J1aWxk
ZXIuanMJKHdvcmtpbmcgY29weSkKQEAgLTQ4OCw4ICs0ODgsMTggQEAgZXhwb3J0IGRlZmF1bHQg
Y2xhc3MgQnVpbGRlciB7CiAgICAgICAgICAgICAgICAgYnJlYWs7CiAKICAgICAgICAgICAgIGNh
c2UgIkVsZW1lbnQiOgotICAgICAgICAgICAgICAgIC8vIEZJWE1FIGltcGxlbWVudCBlbGVtZW50
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjE3MDkKLSAgICAgICAg
ICAgICAgICB0aGlzW3NlY3Rpb25dID0gKCkgPT4geyB0aHJvdyBuZXcgRXJyb3IoYFVuaW1wbGVt
ZW50ZWQ6IHNlY3Rpb24gdHlwZSAiJHtzZWN0aW9ufSJgKTsgfTsKKyAgICAgICAgICAgICAgICB0
aGlzW3NlY3Rpb25dID0gZnVuY3Rpb24oKSB7CisgICAgICAgICAgICAgICAgICAgIGNvbnN0IHMg
PSB0aGlzLl9hZGRTZWN0aW9uKHNlY3Rpb24pOworICAgICAgICAgICAgICAgICAgICBjb25zdCBl
eHBvcnRCdWlsZGVyID0geworICAgICAgICAgICAgICAgICAgICAgICAgRW5kOiAoKSA9PiB0aGlz
LAorICAgICAgICAgICAgICAgICAgICAgICAgRWxlbWVudDogKHt0YWJsZUluZGV4ID0gMCwgb2Zm
c2V0LCBmdW5jdGlvbkluZGljZXN9KSA9PiB7CisgICAgICAgICAgICAgICAgICAgICAgICAgICAg
cy5kYXRhLnB1c2goe3RhYmxlSW5kZXgsIG9mZnNldCwgZnVuY3Rpb25JbmRpY2VzfSk7CisgICAg
ICAgICAgICAgICAgICAgICAgICAgICAgcmV0dXJuIGV4cG9ydEJ1aWxkZXI7CisgICAgICAgICAg
ICAgICAgICAgICAgICB9CisgICAgICAgICAgICAgICAgICAgIH07CisKKyAgICAgICAgICAgICAg
ICAgICAgcmV0dXJuIGV4cG9ydEJ1aWxkZXI7CisgICAgICAgICAgICAgICAgfTsKICAgICAgICAg
ICAgICAgICBicmVhazsKIAogICAgICAgICAgICAgY2FzZSAiQ29kZSI6CkluZGV4OiBKU1Rlc3Rz
L3dhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qcwo9PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBKU1Rlc3Rz
L3dhc20vQnVpbGRlcl9XZWJBc3NlbWJseUJpbmFyeS5qcwkocmV2aXNpb24gMjA5NzcxKQorKysg
SlNUZXN0cy93YXNtL0J1aWxkZXJfV2ViQXNzZW1ibHlCaW5hcnkuanMJKHdvcmtpbmcgY29weSkK
QEAgLTEzNSw3ICsxMzUsMjMgQEAgY29uc3QgZW1pdHRlcnMgPSB7CiAgICAgU3RhcnQ6IChzZWN0
aW9uLCBiaW4pID0+IHsKICAgICAgICAgcHV0KGJpbiwgInZhcnVpbnQzMiIsIHNlY3Rpb24uZGF0
YVswXSk7CiAgICAgfSwKLSAgICBFbGVtZW50OiAoc2VjdGlvbiwgYmluKSA9PiB7IHRocm93IG5l
dyBFcnJvcihgTm90IHlldCBpbXBsZW1lbnRlZGApOyB9LAorICAgIEVsZW1lbnQ6IChzZWN0aW9u
LCBiaW4pID0+IHsKKyAgICAgICAgY29uc3QgZGF0YSA9IHNlY3Rpb24uZGF0YTsKKyAgICAgICAg
cHV0KGJpbiwgInZhcnVpbnQzMiIsIGRhdGEubGVuZ3RoKTsKKyAgICAgICAgZm9yIChjb25zdCB7
dGFibGVJbmRleCwgb2Zmc2V0LCBmdW5jdGlvbkluZGljZXN9IG9mIGRhdGEpIHsKKyAgICAgICAg
ICAgIHB1dChiaW4sICJ2YXJ1aW50MzIiLCB0YWJsZUluZGV4KTsKKworICAgICAgICAgICAgLy8g
RklYTUUgYWxsb3cgY29tcGxleCBpbml0X2V4cHIgaGVyZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5v
cmcvc2hvd19idWcuY2dpP2lkPTE2NTcwMAorICAgICAgICAgICAgLy8gRm9yIG5vdyB3ZSBvbmx5
IGhhbmRsZSBpMzIuY29uc3QgYXMgb2Zmc2V0LgorICAgICAgICAgICAgcHV0KGJpbiwgInVpbnQ4
IiwgV0FTTS5kZXNjcmlwdGlvbi5vcGNvZGVbImkzMi5jb25zdCJdLnZhbHVlKTsKKyAgICAgICAg
ICAgIHB1dChiaW4sIFdBU00uZGVzY3JpcHRpb24ub3Bjb2RlWyJpMzIuY29uc3QiXS5pbW1lZGlh
dGVbMF0udHlwZSwgb2Zmc2V0KTsKKyAgICAgICAgICAgIHB1dChiaW4sICJ1aW50OCIsIFdBU00u
ZGVzY3JpcHRpb24ub3Bjb2RlWyJlbmQiXS52YWx1ZSk7CisKKyAgICAgICAgICAgIHB1dChiaW4s
ICJ2YXJ1aW50MzIiLCBmdW5jdGlvbkluZGljZXMubGVuZ3RoKTsKKyAgICAgICAgICAgIGZvciAo
Y29uc3QgZnVuY3Rpb25JbmRleCBvZiBmdW5jdGlvbkluZGljZXMpCisgICAgICAgICAgICAgICAg
cHV0KGJpbiwgInZhcnVpbnQzMiIsIGZ1bmN0aW9uSW5kZXgpOworICAgICAgICB9CisgICAgfSwK
IAogICAgIENvZGU6IChzZWN0aW9uLCBiaW4pID0+IHsKICAgICAgICAgcHV0KGJpbiwgInZhcnVp
bnQzMiIsIHNlY3Rpb24uZGF0YS5sZW5ndGgpOwpJbmRleDogSlNUZXN0cy93YXNtL2Z1bmN0aW9u
LXRlc3RzL2Jhc2ljLWVsZW1lbnQuanMKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gSlNUZXN0cy93YXNtL2Z1bmN0
aW9uLXRlc3RzL2Jhc2ljLWVsZW1lbnQuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0cy93YXNt
L2Z1bmN0aW9uLXRlc3RzL2Jhc2ljLWVsZW1lbnQuanMJKHdvcmtpbmcgY29weSkKQEAgLTAsMCAr
MSwzNCBAQAoraW1wb3J0IEJ1aWxkZXIgZnJvbSAnLi4vQnVpbGRlci5qcyc7CitpbXBvcnQgKiBh
cyBhc3NlcnQgZnJvbSAnLi4vYXNzZXJ0LmpzJzsKKworCitjb25zdCB0YWJsZURlc2NyaXB0aW9u
ID0ge2luaXRpYWw6IDEsIGVsZW1lbnQ6ICJhbnlmdW5jIn07Citjb25zdCBidWlsZGVyID0gbmV3
IEJ1aWxkZXIoKQorICAgIC5UeXBlKCkuRW5kKCkKKyAgICAuSW1wb3J0KCkKKyAgICAgICAgLlRh
YmxlKCJpbXAiLCAidGFibGUiLCB0YWJsZURlc2NyaXB0aW9uKQorICAgIC5FbmQoKQorICAgIC5G
dW5jdGlvbigpLkVuZCgpCisgICAgLkVsZW1lbnQoKQorICAgICAgICAuRWxlbWVudCh7dGFibGVJ
bmRleDogMCwgb2Zmc2V0OiAwLCBmdW5jdGlvbkluZGljZXM6IFswXX0pCisgICAgLkVuZCgpCisg
ICAgLkNvZGUoKQorICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHtwYXJhbXM6IFsiaTMyIl0sIHJl
dDogImkzMiJ9KQorICAgICAgICAgICAgLkdldExvY2FsKDApCisgICAgICAgICAgICAuSTMyQ29u
c3QoNDIpCisgICAgICAgICAgICAuSTMyQWRkKCkKKyAgICAgICAgICAgIC5SZXR1cm4oKQorICAg
ICAgICAuRW5kKCkKKyAgICAuRW5kKCk7CisKK2NvbnN0IGJpbiA9IGJ1aWxkZXIuV2ViQXNzZW1i
bHkoKS5nZXQoKTsKK2NvbnN0IG1vZHVsZSA9IG5ldyBXZWJBc3NlbWJseS5Nb2R1bGUoYmluKTsK
K2NvbnN0IHRhYmxlID0gbmV3IFdlYkFzc2VtYmx5LlRhYmxlKHRhYmxlRGVzY3JpcHRpb24pOwor
bmV3IFdlYkFzc2VtYmx5Lkluc3RhbmNlKG1vZHVsZSwge2ltcDoge3RhYmxlfX0pOworY29uc3Qg
Zm9vID0gdGFibGUuZ2V0KDApOworY29uc3Qgb2JqcyA9IFtdOworZm9yIChsZXQgaSA9IDA7IGkg
PCAxMDAwMDsgaSsrKSB7CisgICAgb2Jqcy5wdXNoKG5ldyBTdHJpbmcoImZvbyIpKTsKKyAgICBp
ZiAoZm9vKDIwKSAhPT0gMjAgKyA0MikKKyAgICAgICAgdGhyb3cgbmV3IEVycm9yKCJiYWQhISEi
KTsKK30KSW5kZXg6IEpTVGVzdHMvd2FzbS9qcy1hcGkvZWxlbWVudC5qcwo9PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0t
LSBKU1Rlc3RzL3dhc20vanMtYXBpL2VsZW1lbnQuanMJKG5vbmV4aXN0ZW50KQorKysgSlNUZXN0
cy93YXNtL2pzLWFwaS9lbGVtZW50LmpzCSh3b3JraW5nIGNvcHkpCkBAIC0wLDAgKzEsMTYxIEBA
CitpbXBvcnQgQnVpbGRlciBmcm9tICcuLi9CdWlsZGVyLmpzJzsKK2ltcG9ydCAqIGFzIGFzc2Vy
dCBmcm9tICcuLi9hc3NlcnQuanMnOworCitmdW5jdGlvbiBhc3NlcnRCYWRCaW5hcnkoYnVpbGRl
ciwgc3RyKSB7CisgICAgY29uc3QgYmluID0gYnVpbGRlci5XZWJBc3NlbWJseSgpLmdldCgpOwor
ICAgIGxldCB0aHJldyA9IGZhbHNlOworICAgIHRyeSB7CisgICAgICAgIG5ldyBXZWJBc3NlbWJs
eS5Nb2R1bGUoYmluKTsKKyAgICB9IGNhdGNoKGUpIHsKKyAgICAgICAgdGhyZXcgPSB0cnVlOwor
ICAgICAgICBhc3NlcnQudHJ1dGh5KGUudG9TdHJpbmcoKS5pbmRleE9mKHN0cikgIT09IC0xKTsK
KyAgICAgICAgYXNzZXJ0LnRydXRoeShlIGluc3RhbmNlb2YgV2ViQXNzZW1ibHkuQ29tcGlsZUVy
cm9yKTsKKyAgICB9CisgICAgYXNzZXJ0LnRydXRoeSh0aHJldyk7Cit9CisKK2NvbnN0IGJhZEVs
ZW1lbnRTZWN0aW9uU3RyaW5nID0gImNvdWxkbid0IHBhcnNlIHNlY3Rpb24gRWxlbWVudCI7CisK
K3sKKyAgICAvLyBCYWQgZWxlbWVudCBzZWN0aW9uIGIvYyBubyBUYWJsZSBzZWN0aW9uL2ltcG9y
dC4KKyAgICBjb25zdCBidWlsZGVyID0gbmV3IEJ1aWxkZXIoKQorICAgICAgICAuVHlwZSgpLkVu
ZCgpCisgICAgICAgIC5GdW5jdGlvbigpLkVuZCgpCisgICAgICAgIC5FbGVtZW50KCkKKyAgICAg
ICAgICAgIC5FbGVtZW50KHt0YWJsZUluZGV4OiAwLCBvZmZzZXQ6IDAsIGZ1bmN0aW9uSW5kaWNl
czogWzBdfSkKKyAgICAgICAgLkVuZCgpCisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5G
dW5jdGlvbigiZm9vIiwge3BhcmFtczogWyJpMzIiXSwgcmV0OiAiaTMyIn0pCisgICAgICAgICAg
ICAgICAgLkdldExvY2FsKDApCisgICAgICAgICAgICAgICAgLkkzMkNvbnN0KDQyKQorICAgICAg
ICAgICAgICAgIC5JMzJBZGQoKQorICAgICAgICAgICAgICAgIC5SZXR1cm4oKQorICAgICAgICAg
ICAgLkVuZCgpCisgICAgICAgIC5FbmQoKTsKKworICAgIGFzc2VydEJhZEJpbmFyeShidWlsZGVy
LCBiYWRFbGVtZW50U2VjdGlvblN0cmluZyk7Cit9CisKK3sKKyAgICAvLyBCYWQgdGFibGUgaW5k
ZXguCisgICAgY29uc3QgYnVpbGRlciA9IG5ldyBCdWlsZGVyKCkKKyAgICAgICAgLlR5cGUoKS5F
bmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuVGFibGUoKQorICAgICAg
ICAgICAgLlRhYmxlKHtlbGVtZW50OiAiYW55ZnVuYyIsIGluaXRpYWw6IDIwfSkKKyAgICAgICAg
LkVuZCgpCisgICAgICAgIC5FbGVtZW50KCkKKyAgICAgICAgICAgIC5FbGVtZW50KHt0YWJsZUlu
ZGV4OiAxLCBvZmZzZXQ6IDAsIGZ1bmN0aW9uSW5kaWNlczogWzBdfSkKKyAgICAgICAgLkVuZCgp
CisgICAgICAgIC5Db2RlKCkKKyAgICAgICAgICAgIC5GdW5jdGlvbigiZm9vIiwge3BhcmFtczog
WyJpMzIiXSwgcmV0OiAiaTMyIn0pCisgICAgICAgICAgICAgICAgLkdldExvY2FsKDApCisgICAg
ICAgICAgICAgICAgLkkzMkNvbnN0KDQyKQorICAgICAgICAgICAgICAgIC5JMzJBZGQoKQorICAg
ICAgICAgICAgICAgIC5SZXR1cm4oKQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgIC5FbmQo
KTsKKworICAgIGFzc2VydEJhZEJpbmFyeShidWlsZGVyLCBiYWRFbGVtZW50U2VjdGlvblN0cmlu
Zyk7Cit9CisKK3sKKyAgICAvLyBPdmVyZmxvdyB0YWJsZSBtYXhpbXVtIHNpemUuCisgICAgY29u
c3QgYnVpbGRlciA9IG5ldyBCdWlsZGVyKCkKKyAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAg
ICAuRnVuY3Rpb24oKS5FbmQoKQorICAgICAgICAuVGFibGUoKQorICAgICAgICAgICAgLlRhYmxl
KHtlbGVtZW50OiAiYW55ZnVuYyIsIGluaXRpYWw6IDIwLCBtYXhpbXVtOiAyMH0pCisgICAgICAg
IC5FbmQoKQorICAgICAgICAuRWxlbWVudCgpCisgICAgICAgICAgICAuRWxlbWVudCh7b2Zmc2V0
OiAxOSwgZnVuY3Rpb25JbmRpY2VzOiBbMCwgMV19KQorICAgICAgICAuRW5kKCkKKyAgICAgICAg
LkNvZGUoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCB7cGFyYW1zOiBbImkzMiJdLCBy
ZXQ6ICJpMzIifSkKKyAgICAgICAgICAgICAgICAuR2V0TG9jYWwoMCkKKyAgICAgICAgICAgICAg
ICAuSTMyQ29uc3QoNDIpCisgICAgICAgICAgICAgICAgLkkzMkFkZCgpCisgICAgICAgICAgICAg
ICAgLlJldHVybigpCisgICAgICAgICAgICAuRW5kKCkKKyAgICAgICAgLkVuZCgpOworCisgICAg
YXNzZXJ0QmFkQmluYXJ5KGJ1aWxkZXIsIGJhZEVsZW1lbnRTZWN0aW9uU3RyaW5nKTsKK30KKwor
eworICAgIC8vIE92ZXJmbG93IHRhYmxlIG1heGltdW0gc2l6ZS4KKyAgICBjb25zdCBidWlsZGVy
ID0gbmV3IEJ1aWxkZXIoKQorICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgIC5GdW5jdGlv
bigpLkVuZCgpCisgICAgICAgIC5UYWJsZSgpCisgICAgICAgICAgICAuVGFibGUoe2VsZW1lbnQ6
ICJhbnlmdW5jIiwgaW5pdGlhbDogMjAsIG1heGltdW06IDIwfSkKKyAgICAgICAgLkVuZCgpCisg
ICAgICAgIC5FbGVtZW50KCkKKyAgICAgICAgICAgIC5FbGVtZW50KHtvZmZzZXQ6IDIwLCBmdW5j
dGlvbkluZGljZXM6IFswXX0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAg
ICAgICAgICAuRnVuY3Rpb24oImZvbyIsIHtwYXJhbXM6IFsiaTMyIl0sIHJldDogImkzMiJ9KQor
ICAgICAgICAgICAgICAgIC5HZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCg0
MikKKyAgICAgICAgICAgICAgICAuSTMyQWRkKCkKKyAgICAgICAgICAgICAgICAuUmV0dXJuKCkK
KyAgICAgICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCk7CisKKyAgICBhc3NlcnRCYWRCaW5h
cnkoYnVpbGRlciwgYmFkRWxlbWVudFNlY3Rpb25TdHJpbmcpOworfQorCit7CisgICAgLy8gT3Zl
cmZsb3cgZnVuY3Rpb24gaW5kZXggc3BhY2UuCisgICAgY29uc3QgYnVpbGRlciA9IG5ldyBCdWls
ZGVyKCkKKyAgICAgICAgLlR5cGUoKS5FbmQoKQorICAgICAgICAuRnVuY3Rpb24oKS5FbmQoKQor
ICAgICAgICAuVGFibGUoKQorICAgICAgICAgICAgLlRhYmxlKHtlbGVtZW50OiAiYW55ZnVuYyIs
IGluaXRpYWw6IDIwLCBtYXhpbXVtOiAyMH0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAuRWxl
bWVudCgpCisgICAgICAgICAgICAuRWxlbWVudCh7b2Zmc2V0OiAwLCBmdW5jdGlvbkluZGljZXM6
IFswLCAwLCAxXX0pCisgICAgICAgIC5FbmQoKQorICAgICAgICAuQ29kZSgpCisgICAgICAgICAg
ICAuRnVuY3Rpb24oImZvbyIsIHtwYXJhbXM6IFsiaTMyIl0sIHJldDogImkzMiJ9KQorICAgICAg
ICAgICAgICAgIC5HZXRMb2NhbCgwKQorICAgICAgICAgICAgICAgIC5JMzJDb25zdCg0MikKKyAg
ICAgICAgICAgICAgICAuSTMyQWRkKCkKKyAgICAgICAgICAgICAgICAuUmV0dXJuKCkKKyAgICAg
ICAgICAgIC5FbmQoKQorICAgICAgICAuRW5kKCk7CisKKyAgICBhc3NlcnRCYWRCaW5hcnkoYnVp
bGRlciwgYmFkRWxlbWVudFNlY3Rpb25TdHJpbmcpOworfQorCit7CisgICAgZnVuY3Rpb24gYmFk
SW5zdGFudGlhdGlvbihhY3R1YWxUYWJsZSwgZXJyb3JUeXBlLCBtc2cpIHsKKyAgICAgICAgLy8g
T3ZlcmZsb3cgZnVuY3Rpb24gaW5kZXggc3BhY2UuCisgICAgICAgIGNvbnN0IGJ1aWxkZXIgPSBu
ZXcgQnVpbGRlcigpCisgICAgICAgICAgICAuVHlwZSgpLkVuZCgpCisgICAgICAgICAgICAuSW1w
b3J0KCkKKyAgICAgICAgICAgICAgICAuVGFibGUoImltcCIsICJ0YWJsZSIsIHtlbGVtZW50OiAi
YW55ZnVuYyIsIGluaXRpYWw6IDE5fSkgLy8gdW5zcGVjaWZpZWQgbWF4aW11bS4KKyAgICAgICAg
ICAgIC5FbmQoKQorICAgICAgICAgICAgLkZ1bmN0aW9uKCkuRW5kKCkKKyAgICAgICAgICAgIC5F
bGVtZW50KCkKKyAgICAgICAgICAgICAgICAuRWxlbWVudCh7b2Zmc2V0OiAxOSwgZnVuY3Rpb25J
bmRpY2VzOiBbMCwgMCwgMCwgMCwgMF19KQorICAgICAgICAgICAgLkVuZCgpCisgICAgICAgICAg
ICAuQ29kZSgpCisgICAgICAgICAgICAgICAgLkZ1bmN0aW9uKCJmb28iLCB7cGFyYW1zOiBbImkz
MiJdLCByZXQ6ICJpMzIifSkKKyAgICAgICAgICAgICAgICAgICAgLkdldExvY2FsKDApCisgICAg
ICAgICAgICAgICAgICAgIC5JMzJDb25zdCg0MikKKyAgICAgICAgICAgICAgICAgICAgLkkzMkFk
ZCgpCisgICAgICAgICAgICAgICAgICAgIC5SZXR1cm4oKQorICAgICAgICAgICAgICAgIC5FbmQo
KQorICAgICAgICAgICAgLkVuZCgpOworCisgICAgICAgIGNvbnN0IGJpbiA9IGJ1aWxkZXIuV2Vi
QXNzZW1ibHkoKS5nZXQoKTsKKyAgICAgICAgY29uc3QgbW9kdWxlID0gbmV3IFdlYkFzc2VtYmx5
Lk1vZHVsZShiaW4pOworICAgICAgICBhc3NlcnQudGhyb3dzKCgpID0+IG5ldyBXZWJBc3NlbWJs
eS5JbnN0YW5jZShtb2R1bGUsIHtpbXA6IHt0YWJsZTogYWN0dWFsVGFibGV9fSksIGVycm9yVHlw
ZSwgbXNnKTsKKyAgICB9CisKKyAgICBmb3IgKGxldCBpID0gMTk7IGkgPCAxOSArIDU7IGkrKykg
eworICAgICAgICBjb25zdCB0YWJsZSA9IG5ldyBXZWJBc3NlbWJseS5UYWJsZSh7ZWxlbWVudDog
ImFueWZ1bmMiLCBpbml0aWFsOiBpfSk7CisgICAgICAgIGJhZEluc3RhbnRpYXRpb24odGFibGUs
IFJhbmdlRXJyb3IsICJFbGVtZW50IGlzIHRyeWluZyB0byBzZXQgYW4gb3V0IG9mIGJvdW5kcyB0
YWJsZSBpbmRleCIpOworICAgIH0KK30KSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS9DaGFu
Z2VMb2cKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkocmV2
aXNpb24gMjA5NzcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL0NoYW5nZUxvZwkod29ya2lu
ZyBjb3B5KQpAQCAtMSwzICsxLDMwIEBACisyMDE2LTEyLTEzICBTYWFtIEJhcmF0aSAgPHNiYXJh
dGlAYXBwbGUuY29tPgorCisgICAgICAgIFdlYkFzc2VtYmx5OiBpbXBsZW1lbnQgdGhlIGVsZW1l
bnRzIHNlY3Rpb24KKyAgICAgICAgaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dp
P2lkPTE2NTcxNQorCisgICAgICAgIFJldmlld2VkIGJ5IE5PQk9EWSAoT09QUyEpLgorCisgICAg
ICAgIFRoaXMgaXMgYSBzdHJhaWdodCBmb3J3YXJkIGltcGxlbWVudGF0aW9uIG9mIHRoZSBFbGVt
ZW50CisgICAgICAgIHNlY3Rpb24gaW4gdGhlIFdhc20gc3BlYzoKKyAgICAgICAgaHR0cHM6Ly9n
aXRodWIuY29tL1dlYkFzc2VtYmx5L2Rlc2lnbi9ibG9iL21hc3Rlci9CaW5hcnlFbmNvZGluZy5t
ZCNlbGVtZW50LXNlY3Rpb24KKyAgICAgICAgCisgICAgICAgIFRoZXJlIGFyZSBhIGZldyBhbWJp
Z3VpdGllcyBJIGVuY291bnRlcmVkIHdoZW4gaW1wbGVtZW50aW5nIHRoaXMsIHNvIEkndmUKKyAg
ICAgICAgZmlsZWQgYnVncyBhZ2FpbnN0IHRoZSBXYXNtIGRlc2lnbiByZXBvLCBhbmQgY29ycmVz
cG9uZGluZyBidWd6aWxsYSBidWdzCisgICAgICAgIGZvciB1cyB0byBhZGRyZXNzIGFmdGVyIHRo
ZXkndmUgYmVlbiBkaXNjdXNzZWQgYnkgdGhlIHZhcmlvdXMgV2FzbSBmb2xrczoKKyAgICAgICAg
LSBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1ODI3CisgICAgICAg
IC0gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2NTgyNgorICAgICAg
ICAtIGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU4MjUKKworICAg
ICAgICAqIHdhc20vV2FzbUZvcm1hdC5oOgorICAgICAgICAqIHdhc20vV2FzbU1vZHVsZVBhcnNl
ci5jcHA6CisgICAgICAgIChKU0M6Oldhc206Ok1vZHVsZVBhcnNlcjo6cGFyc2VFbGVtZW50KToK
KyAgICAgICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZUluaXRFeHByKToKKyAgICAg
ICAgKEpTQzo6V2FzbTo6TW9kdWxlUGFyc2VyOjpwYXJzZURhdGEpOgorICAgICAgICAqIHdhc20v
V2FzbU1vZHVsZVBhcnNlci5oOgorICAgICAgICAqIHdhc20vanMvV2ViQXNzZW1ibHlNb2R1bGVS
ZWNvcmQuY3BwOgorICAgICAgICAoSlNDOjpXZWJBc3NlbWJseU1vZHVsZVJlY29yZDo6ZXZhbHVh
dGUpOgorCiAyMDE2LTEyLTEzICBTYWFtIEJhcmF0aSAgPHNiYXJhdGlAYXBwbGUuY29tPgogCiAg
ICAgICAgIFdlYkFzc2VtYmx5OiBpbXBsZW1lbnQgdGhlIHRhYmxlIHNlY3Rpb24gYW5kIHRhYmxl
IGltcG9ydApJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5oCj09
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT0KLS0tIFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL1dhc21Gb3JtYXQuaAkocmV2
aXNpb24gMjA5NzcxKQorKysgU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbUZvcm1hdC5o
CSh3b3JraW5nIGNvcHkpCkBAIC0xNDcsNiArMTQ3LDExIEBAIHN0cnVjdCBTZWdtZW50IHsKICAg
ICB9CiB9OwogCitzdHJ1Y3QgRWxlbWVudCB7CisgICAgdWludDMyX3Qgb2Zmc2V0OworICAgIFZl
Y3Rvcjx1aW50MzJfdD4gZnVuY3Rpb25JbmRpY2VzOworfTsKKwogY2xhc3MgVGFibGVJbmZvcm1h
dGlvbiB7CiBwdWJsaWM6CiAgICAgVGFibGVJbmZvcm1hdGlvbigpCkBAIC0xODUsNiArMTkwLDcg
QEAgc3RydWN0IE1vZHVsZUluZm9ybWF0aW9uIHsKICAgICBWZWN0b3I8RXhwb3J0PiBleHBvcnRz
OwogICAgIHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IHN0YXJ0RnVuY3Rpb25JbmRleFNwYWNlOwog
ICAgIFZlY3RvcjxTZWdtZW50OjpQdHI+IGRhdGE7CisgICAgVmVjdG9yPEVsZW1lbnQ+IGVsZW1l
bnRzOwogICAgIFRhYmxlSW5mb3JtYXRpb24gdGFibGVJbmZvcm1hdGlvbjsKIAogICAgIH5Nb2R1
bGVJbmZvcm1hdGlvbigpOwpJbmRleDogU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1v
ZHVsZVBhcnNlci5jcHAKPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20v
V2FzbU1vZHVsZVBhcnNlci5jcHAJKHJldmlzaW9uIDIwOTc3MSkKKysrIFNvdXJjZS9KYXZhU2Ny
aXB0Q29yZS93YXNtL1dhc21Nb2R1bGVQYXJzZXIuY3BwCSh3b3JraW5nIGNvcHkpCkBAIC00OTIs
OCArNDkyLDY1IEBAIGJvb2wgTW9kdWxlUGFyc2VyOjpwYXJzZVN0YXJ0KCkKIAogYm9vbCBNb2R1
bGVQYXJzZXI6OnBhcnNlRWxlbWVudCgpCiB7Ci0gICAgLy8gRklYTUUgaHR0cHM6Ly9idWdzLndl
YmtpdC5vcmcvc2hvd19idWcuY2dpP2lkPTE2MTcwOQotICAgIFJFTEVBU0VfQVNTRVJUX05PVF9S
RUFDSEVEKCk7CisgICAgaWYgKCFtX2hhc1RhYmxlKQorICAgICAgICByZXR1cm4gZmFsc2U7CisK
KyAgICB1aW50MzJfdCBlbGVtZW50Q291bnQ7CisgICAgaWYgKCFwYXJzZVZhclVJbnQzMihlbGVt
ZW50Q291bnQpKQorICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgaWYgKCFtX21vZHVsZS0+ZWxl
bWVudHMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGVsZW1lbnRDb3VudCkpCisgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBlbGVtZW50Q291bnQ7ICsraSkg
eworICAgICAgICB1aW50MzJfdCB0YWJsZUluZGV4OworICAgICAgICBpZiAoIXBhcnNlVmFyVUlu
dDMyKHRhYmxlSW5kZXgpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworICAgICAgICAvLyBX
ZSBvbmx5IHN1cHBvcnQgb25lIHRhYmxlIGZvciBub3cuCisgICAgICAgIGlmICh0YWJsZUluZGV4
ICE9IDApCisgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisKKyAgICAgICAgdWludDMyX3Qgb2Zm
c2V0OworICAgICAgICBpZiAoIXBhcnNlSW5pdEV4cHIob2Zmc2V0KSkKKyAgICAgICAgICAgIHJl
dHVybiBmYWxzZTsKKworICAgICAgICB1aW50MzJfdCBpbmRleENvdW50OworICAgICAgICBpZiAo
IXBhcnNlVmFyVUludDMyKGluZGV4Q291bnQpKQorICAgICAgICAgICAgcmV0dXJuIGZhbHNlOwor
CisgICAgICAgIEFTU0VSVCghIW1fbW9kdWxlLT50YWJsZUluZm9ybWF0aW9uKTsKKyAgICAgICAg
aWYgKHN0ZDo6b3B0aW9uYWw8dWludDMyX3Q+IG1heGltdW0gPSBtX21vZHVsZS0+dGFibGVJbmZv
cm1hdGlvbi5tYXhpbXVtKCkpIHsKKyAgICAgICAgICAgIC8vIEZJWE1FOiBzaG91bGQgaW5kZXhD
b3VudCBiZWluZyB6ZXJvIGJlIGEgdmFsaWRhdGlvbiBlcnJvcj8KKyAgICAgICAgICAgIC8vIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU4MjYKKyAgICAgICAgICAg
IGlmIChpbmRleENvdW50KSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IHJpZ2h0IG5vdywg
cHJvdmFibHkgb3V0IG9mIGJvdW5kcyB3cml0ZXMgYXJlIHZhbGlkYXRpb24gZXJyb3JzLgorICAg
ICAgICAgICAgICAgIC8vIFNob3VsZCB0aGV5IGJlIHRob3VnaD8KKyAgICAgICAgICAgICAgICAv
LyBodHRwczovL2J1Z3Mud2Via2l0Lm9yZy9zaG93X2J1Zy5jZ2k/aWQ9MTY1ODI3CisgICAgICAg
ICAgICAgICAgdWludDY0X3QgbGFzdFdyaXR0ZW5JbmRleCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90
PihpbmRleENvdW50KSArIHN0YXRpY19jYXN0PHVpbnQ2NF90PihvZmZzZXQpIC0gMTsKKyAgICAg
ICAgICAgICAgICBpZiAobGFzdFdyaXR0ZW5JbmRleCA+PSBzdGF0aWNfY2FzdDx1aW50NjRfdD4o
Km1heGltdW0pKQorICAgICAgICAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CisgICAgICAgICAg
ICB9CisgICAgICAgIH0KKworICAgICAgICBFbGVtZW50IGVsZW1lbnQ7CisgICAgICAgIGlmICgh
ZWxlbWVudC5mdW5jdGlvbkluZGljZXMudHJ5UmVzZXJ2ZUNhcGFjaXR5KGluZGV4Q291bnQpKQor
ICAgICAgICAgICAgcmV0dXJuIGZhbHNlOworCisgICAgICAgIGVsZW1lbnQub2Zmc2V0ID0gb2Zm
c2V0OworCisgICAgICAgIGZvciAodW5zaWduZWQgaSA9IDA7IGkgPCBpbmRleENvdW50OyArK2kp
IHsKKyAgICAgICAgICAgIHVpbnQzMl90IGZ1bmN0aW9uSW5kZXg7CisgICAgICAgICAgICBpZiAo
IXBhcnNlVmFyVUludDMyKGZ1bmN0aW9uSW5kZXgpKQorICAgICAgICAgICAgICAgIHJldHVybiBm
YWxzZTsKKworICAgICAgICAgICAgaWYgKGZ1bmN0aW9uSW5kZXggPj0gbV9mdW5jdGlvbkluZGV4
U3BhY2Uuc2l6ZSgpKQorICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKKworICAgICAgICAg
ICAgZWxlbWVudC5mdW5jdGlvbkluZGljZXMudW5jaGVja2VkQXBwZW5kKGZ1bmN0aW9uSW5kZXgp
OworICAgICAgICB9CisKKyAgICAgICAgbV9tb2R1bGUtPmVsZW1lbnRzLnVuY2hlY2tlZEFwcGVu
ZChXVEZNb3ZlKGVsZW1lbnQpKTsKKyAgICB9CisKICAgICByZXR1cm4gdHJ1ZTsKIH0KIApAQCAt
NTIwLDYgKzU3NywyMiBAQCBib29sIE1vZHVsZVBhcnNlcjo6cGFyc2VDb2RlKCkKICAgICByZXR1
cm4gdHJ1ZTsKIH0KIAorYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlSW5pdEV4cHIodWludDMyX3Qm
IHZhbHVlKQoreworICAgIC8vIEZJWE1FIGFsbG93IGNvbXBsZXggaW5pdF9leHByIGhlcmUuIGh0
dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU3MDAKKyAgICAvLyBGb3Ig
bm93IHdlIG9ubHkgaGFuZGxlIGkzMi5jb25zdCBhcyBvZmZzZXQuCisKKyAgICB1aW50OF90IG9w
Y29kZTsKKyAgICB1aW50OF90IGVuZE9wY29kZTsKKyAgICBpZiAoIXBhcnNlVUludDgob3Bjb2Rl
KQorICAgICAgICB8fCBvcGNvZGUgIT0gV2FzbTo6STMyQ29uc3QKKyAgICAgICAgfHwgIXBhcnNl
VmFyVUludDMyKHZhbHVlKQorICAgICAgICB8fCAhcGFyc2VVSW50OChlbmRPcGNvZGUpCisgICAg
ICAgIHx8IGVuZE9wY29kZSAhPSBXYXNtOjpFbmQpCisgICAgICAgIHJldHVybiBmYWxzZTsKKyAg
ICByZXR1cm4gdHJ1ZTsKK30KKwogYm9vbCBNb2R1bGVQYXJzZXI6OnBhcnNlRGF0YSgpCiB7CiAg
ICAgdWludDMyX3Qgc2VnbWVudENvdW50OwpAQCAtNTM0LDIxICs2MDcsMTMgQEAgYm9vbCBNb2R1
bGVQYXJzZXI6OnBhcnNlRGF0YSgpCiAgICAgICAgIGlmICh2ZXJib3NlKQogICAgICAgICAgICAg
ZGF0YUxvZ0xuKCIgIHNlZ21lbnQgIyIsIHNlZ21lbnROdW1iZXIpOwogICAgICAgICB1aW50MzJf
dCBpbmRleDsKLSAgICAgICAgdWludDhfdCBvcGNvZGU7CiAgICAgICAgIHVpbnQzMl90IG9mZnNl
dDsKLSAgICAgICAgdWludDhfdCBlbmRPcGNvZGU7CiAgICAgICAgIHVpbnQzMl90IGRhdGFCeXRl
TGVuZ3RoOwogICAgICAgICBpZiAoIXBhcnNlVmFyVUludDMyKGluZGV4KQogICAgICAgICAgICAg
fHwgaW5kZXgpCiAgICAgICAgICAgICByZXR1cm4gZmFsc2U7CiAKLSAgICAgICAgLy8gRklYTUUg
YWxsb3cgY29tcGxleCBpbml0X2V4cHIgaGVyZS4gaHR0cHM6Ly9idWdzLndlYmtpdC5vcmcvc2hv
d19idWcuY2dpP2lkPTE2NTcwMAotICAgICAgICAvLyBGb3Igbm93IHdlIG9ubHkgaGFuZGxlIGkz
Mi5jb25zdCBhcyBvZmZzZXQuCi0gICAgICAgIGlmICghcGFyc2VVSW50OChvcGNvZGUpCi0gICAg
ICAgICAgICB8fCBvcGNvZGUgIT0gV2FzbTo6STMyQ29uc3QKLSAgICAgICAgICAgIHx8ICFwYXJz
ZVZhclVJbnQzMihvZmZzZXQpCi0gICAgICAgICAgICB8fCAhcGFyc2VVSW50OChlbmRPcGNvZGUp
Ci0gICAgICAgICAgICB8fCBlbmRPcGNvZGUgIT0gV2FzbTo6RW5kKQorICAgICAgICBpZiAoIXBh
cnNlSW5pdEV4cHIob2Zmc2V0KSkKICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAg
aWYgKHZlcmJvc2UpCiAgICAgICAgICAgICBkYXRhTG9nTG4oIiAgICBvZmZzZXQ6ICIsIG9mZnNl
dCk7CkluZGV4OiBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNtTW9kdWxlUGFyc2VyLmgK
PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PQotLS0gU291cmNlL0phdmFTY3JpcHRDb3JlL3dhc20vV2FzbU1vZHVsZVBhcnNl
ci5oCShyZXZpc2lvbiAyMDk3NzEpCisrKyBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2FzbS9XYXNt
TW9kdWxlUGFyc2VyLmgJKHdvcmtpbmcgY29weSkKQEAgLTgxLDYgKzgxLDcgQEAgcHJpdmF0ZToK
ICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZU1lbW9yeUhlbHBlcihib29sIGlzSW1w
b3J0KTsKICAgICBib29sIFdBUk5fVU5VU0VEX1JFVFVSTiBwYXJzZVRhYmxlSGVscGVyKGJvb2wg
aXNJbXBvcnQpOwogICAgIGJvb2wgV0FSTl9VTlVTRURfUkVUVVJOIHBhcnNlUmVzaXphYmxlTGlt
aXRzKHVpbnQzMl90JiBpbml0aWFsLCBzdGQ6Om9wdGlvbmFsPHVpbnQzMl90PiYgbWF4aW11bSk7
CisgICAgYm9vbCBXQVJOX1VOVVNFRF9SRVRVUk4gcGFyc2VJbml0RXhwcih1aW50MzJfdCYpOwog
CiAgICAgVk0qIG1fdm07CiAgICAgc3RkOjp1bmlxdWVfcHRyPE1vZHVsZUluZm9ybWF0aW9uPiBt
X21vZHVsZTsKSW5kZXg6IFNvdXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5
TW9kdWxlUmVjb3JkLmNwcAo9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09
PT09PT09PT09PT09PT09PT09PT09PT09PT09Ci0tLSBTb3VyY2UvSmF2YVNjcmlwdENvcmUvd2Fz
bS9qcy9XZWJBc3NlbWJseU1vZHVsZVJlY29yZC5jcHAJKHJldmlzaW9uIDIwOTc3MSkKKysrIFNv
dXJjZS9KYXZhU2NyaXB0Q29yZS93YXNtL2pzL1dlYkFzc2VtYmx5TW9kdWxlUmVjb3JkLmNwcAko
d29ya2luZyBjb3B5KQpAQCAtMjA5LDYgKzIwOSw1MiBAQCBKU1ZhbHVlIFdlYkFzc2VtYmx5TW9k
dWxlUmVjb3JkOjpldmFsdWF0CiAgICAgICAgIH0KICAgICB9CiAKKyAgICB7CisgICAgICAgIEpT
V2ViQXNzZW1ibHlNb2R1bGUqIG1vZHVsZSA9IG1faW5zdGFuY2UtPm1vZHVsZSgpOworICAgICAg
ICBjb25zdCBXYXNtOjpNb2R1bGVJbmZvcm1hdGlvbiYgbW9kdWxlSW5mb3JtYXRpb24gPSBtb2R1
bGUtPm1vZHVsZUluZm9ybWF0aW9uKCk7CisgICAgICAgIEpTV2ViQXNzZW1ibHlUYWJsZSogdGFi
bGUgPSBtX2luc3RhbmNlLT50YWJsZSgpOworICAgICAgICBmb3IgKGNvbnN0IFdhc206OkVsZW1l
bnQmIGVsZW1lbnQgOiBtb2R1bGVJbmZvcm1hdGlvbi5lbGVtZW50cykgeworICAgICAgICAgICAg
Ly8gSXQgc2hvdWxkIGJlIGEgdmFsaWRhdGlvbiBlcnJvciB0byBoYXZlIGFueSBlbGVtZW50cyB3
aXRob3V0IGEgdGFibGUuCisgICAgICAgICAgICAvLyBBbHNvLCBpdCBjb3VsZCBiZSB0aGF0IGEg
dGFibGUgd2Fzbid0IGltcG9ydGVkLCBvciB0aGF0IHRoZSB0YWJsZQorICAgICAgICAgICAgLy8g
aW1wb3J0ZWQgd2Fzbid0IGNvbXBhdGlibGUuIEhvd2V2ZXIsIHRob3NlIHNob3VsZCBlcnJvciBv
dXQgYmVmb3JlCisgICAgICAgICAgICAvLyBnZXR0aW5nIGhlcmUuCisgICAgICAgICAgICBBU1NF
UlQoISF0YWJsZSk7CisgICAgICAgICAgICBpZiAoIWVsZW1lbnQuZnVuY3Rpb25JbmRpY2VzLnNp
emUoKSkKKyAgICAgICAgICAgICAgICBjb250aW51ZTsKKworICAgICAgICAgICAgdWludDMyX3Qg
dGFibGVJbmRleCA9IGVsZW1lbnQub2Zmc2V0OworICAgICAgICAgICAgdWludDY0X3QgbGFzdFdy
aXR0ZW5JbmRleCA9IHN0YXRpY19jYXN0PHVpbnQ2NF90Pih0YWJsZUluZGV4KSArIHN0YXRpY19j
YXN0PHVpbnQ2NF90PihlbGVtZW50LmZ1bmN0aW9uSW5kaWNlcy5zaXplKCkpIC0gMTsKKyAgICAg
ICAgICAgIGlmIChsYXN0V3JpdHRlbkluZGV4ID49IHRhYmxlLT5zaXplKCkpIHsKKyAgICAgICAg
ICAgICAgICByZXR1cm4gdGhyb3dFeGNlcHRpb24oc3RhdGUsIHNjb3BlLCBjcmVhdGVSYW5nZUVy
cm9yKHN0YXRlLAorICAgICAgICAgICAgICAgICAgICBBU0NJSUxpdGVyYWwoIkVsZW1lbnQgaXMg
dHJ5aW5nIHRvIHNldCBhbiBvdXQgb2YgYm91bmRzIHRhYmxlIGluZGV4IikpKTsKKyAgICAgICAg
ICAgIH0KKworICAgICAgICAgICAgZm9yICh1aW50MzJfdCBpID0gMDsgaSA8IGVsZW1lbnQuZnVu
Y3Rpb25JbmRpY2VzLnNpemUoKTsgKytpKSB7CisgICAgICAgICAgICAgICAgLy8gRklYTUU6IFRo
aXMgZXNzZW50aWFsbHkgbWVhbnMgd2UncmUgZXhwb3J0aW5nIGFuIGltcG9ydC4KKyAgICAgICAg
ICAgICAgICAvLyBXZSBuZWVkIGEgc3RvcnkgaGVyZS4gV2UgbmVlZCB0byBjcmVhdGUgYSBXZWJB
c3NlbWJseUZ1bmN0aW9uCisgICAgICAgICAgICAgICAgLy8gZm9yIHRoZSBpbXBvcnQuCisgICAg
ICAgICAgICAgICAgdWludDMyX3QgZnVuY3Rpb25JbmRleCA9IGVsZW1lbnQuZnVuY3Rpb25JbmRp
Y2VzW2ldOworICAgICAgICAgICAgICAgIGlmIChmdW5jdGlvbkluZGV4IDwgbW9kdWxlLT5pbXBv
cnRDb3VudCgpKSB7CisgICAgICAgICAgICAgICAgICAgIHJldHVybiB0aHJvd0V4Y2VwdGlvbihz
dGF0ZSwgc2NvcGUsIGNyZWF0ZVJhbmdlRXJyb3Ioc3RhdGUsCisgICAgICAgICAgICAgICAgICAg
ICAgICBBU0NJSUxpdGVyYWwoIkVsZW1lbnQgaXMgc2V0dGluZyB0aGUgdGFibGUgdmFsdWUgd2l0
aCBhbiBpbXBvcnQuIFRoaXMgaXMgbm90IHlldCBpbXBsZW1lbnRlZC4gRklYTUU6IikpKTsKKyAg
ICAgICAgICAgICAgICB9CisKKyAgICAgICAgICAgICAgICBKU1dlYkFzc2VtYmx5Q2FsbGVlKiBq
c0VudHJ5cG9pbnRDYWxsZWUgPSBtb2R1bGUtPmpzRW50cnlwb2ludENhbGxlZUZyb21GdW5jdGlv
bkluZGV4U3BhY2UoZnVuY3Rpb25JbmRleCk7CisgICAgICAgICAgICAgICAgSlNXZWJBc3NlbWJs
eUNhbGxlZSogd2FzbUVudHJ5cG9pbnRDYWxsZWUgPSBtb2R1bGUtPndhc21FbnRyeXBvaW50Q2Fs
bGVlRnJvbUZ1bmN0aW9uSW5kZXhTcGFjZShmdW5jdGlvbkluZGV4KTsKKyAgICAgICAgICAgICAg
ICBXYXNtOjpTaWduYXR1cmUqIHNpZ25hdHVyZSA9IG1vZHVsZS0+c2lnbmF0dXJlRm9yRnVuY3Rp
b25JbmRleFNwYWNlKGZ1bmN0aW9uSW5kZXgpOworICAgICAgICAgICAgICAgIC8vIEZJWE1FOiBT
YXkgd2UgZXhwb3J0IGxvY2FsIGZ1bmN0aW9uICJmb28iIGF0IGZ1bmNpdG9uIGluZGV4IDAuCisg
ICAgICAgICAgICAgICAgLy8gV2hhdCBpZiB3ZSBhbHNvIHNldCBpdCB0byB0aGUgdGFibGUgYW4g
RWxlbWVudCB3LyBpbmRleCAwLgorICAgICAgICAgICAgICAgIC8vIERvZXMgKG5ldyBJbnN0YW5j
ZSguLi4pKS5leHBvcnRzLmZvbyA9PT0gdGFibGUuZ2V0KDApPworICAgICAgICAgICAgICAgIC8v
IGh0dHBzOi8vYnVncy53ZWJraXQub3JnL3Nob3dfYnVnLmNnaT9pZD0xNjU4MjUKKyAgICAgICAg
ICAgICAgICBXZWJBc3NlbWJseUZ1bmN0aW9uKiBmdW5jdGlvbiA9IFdlYkFzc2VtYmx5RnVuY3Rp
b246OmNyZWF0ZSgKKyAgICAgICAgICAgICAgICAgICAgdm0sIG1faW5zdGFuY2UtPmdsb2JhbE9i
amVjdCgpLCBzaWduYXR1cmUtPmFyZ3VtZW50cy5zaXplKCksIFN0cmluZygpLCBtX2luc3RhbmNl
LmdldCgpLCBqc0VudHJ5cG9pbnRDYWxsZWUsIHdhc21FbnRyeXBvaW50Q2FsbGVlLCBzaWduYXR1
cmUpOworCisgICAgICAgICAgICAgICAgdGFibGUtPnNldEZ1bmN0aW9uKHZtLCB0YWJsZUluZGV4
LCBmdW5jdGlvbik7CisgICAgICAgICAgICAgICAgKyt0YWJsZUluZGV4OworICAgICAgICAgICAg
fQorICAgICAgICB9CisgICAgfQorCiAgICAgaWYgKFdlYkFzc2VtYmx5RnVuY3Rpb24qIHN0YXJ0
RnVuY3Rpb24gPSBtX3N0YXJ0RnVuY3Rpb24uZ2V0KCkpIHsKICAgICAgICAgUHJvdG9DYWxsRnJh
bWUgcHJvdG9DYWxsRnJhbWU7CiAgICAgICAgIHByb3RvQ2FsbEZyYW1lLmluaXQobnVsbHB0ciwg
c3RhcnRGdW5jdGlvbiwgSlNWYWx1ZSgpLCAxLCBudWxscHRyKTsK
</data>
<flag name="review"
          id="319395"
          type_id="1"
          status="+"
          setter="keith_miller"
    />
          </attachment>
      

    </bug>

</bugzilla>