From kde-kimageshop Mon Aug 23 13:11:45 2021 From: Halla Rempt Date: Mon, 23 Aug 2021 13:11:45 +0000 To: kde-kimageshop Subject: =?utf-8?q?=5Bgraphics/krita=5D_/=3A_PSD=3A_refactor_compression_and_fix_ZIP_decompression?= Message-Id: <20210823131145.C795E1241E3F () leptone ! kde ! org> X-MARC-Message: https://marc.info/?l=kde-kimageshop&m=162972433409818 R2l0IGNvbW1pdCBlMjZjMTRjYzFjYTViZGI3MGEzNjYyZjJjMzdlM2E2ZTc4NjQwNGE1IGJ5IEhh bGxhIFJlbXB0LCBvbiBiZWhhbGYgb2YgTC4gRS4gU2Vnb3ZpYS4KQ29tbWl0dGVkIG9uIDIzLzA4 LzIwMjEgYXQgMTM6MTEuClB1c2hlZCBieSByZW1wdCBpbnRvIGJyYW5jaCAnbWFzdGVyJy4KClBT RDogcmVmYWN0b3IgY29tcHJlc3Npb24gYW5kIGZpeCBaSVAgZGVjb21wcmVzc2lvbgoKUHJldmlv dXNseSwgdGhlcmUgd2VyZSB0d28gY29kZSBwYXRocyBmb3IgaGFuZGxpbmcgWklQIGNvbXByZXNz ZWQgYmxvYnMuCk9uZSB1c2VkIHpsaWIgKG9ubHkgZm9yIGRlY29tcHJlc3Npb24sIGNvZGUgZnJv bSBwc2RwYXJzZSwgd29ya2luZykgYW5kCnRoZSBvdGhlciBlbXBsb3llZCBxKERlKUNvbXByZXNz LiBUaGlzIGxhdHRlciBvbmUgbm90IG9ubHkgZG9lcyBub3QKcmV0dXJuIGJsb2JzIGNvbXByZXNz ZWQgd2l0aCBEZWZsYXRlLCBtYWtpbmcgaXRzIHVzZSB3aXRoIGxheWVyIGNoYW5uZWwKZGF0YSBp bXBvc3NpYmxlLCBidXQgaXMgYWxzbyBicm9rZW4gLSB0aGUgY29kZSBwcmVwZW5kaW5nIHRoZSBk YXRhIHNpemUKYWN0cyBvbiBhIGNsb3NlZCBRSU9EZXZpY2UsIHdoaWNoIGlzIG5vdCBkZXRlY3Rl ZCBieSB0aGUgdGVzdCBzdWl0ZS4KClRoaXMgY29tbWl0OgotIHJlZmFjdG9ycyB0aGUgZXhpc3Rp bmcgY29kZSBpbnRvIGEgc2luZ2xlIENvbXByZXNzaW9uIGNsYXNzLAotIG1ha2luZyBabGliIGEg cmVxdWlyZWQgZGVwZW5kZW5jeSAod2hpY2ggYWxyZWFkeSBpcywgdGhyb3VnaCBRdWFaaXAKICBh bmQgbGlicG5nKSwKLSBmaXhlcyB0aGUgdGVzdCBzdWl0ZSBieSBjaGVja2luZyB0aGUgc2l6ZSBv ZiB0aGUgY29tcHJlc3NlZCBvdXRwdXQuCgpXaGlsZSBhdCBpdCwgYWRkIGZ1cnRoZXIgaGFyZGVu aW5nIHRvIHRoZSBabGliIGhhbmRsaW5nIGNvZGUuCgpDQ01BSUw6IGtpbWFnZXNob3BAa2RlLm9y ZwoKTSAgKzMgICAgLTMgICAgQ01ha2VMaXN0cy50eHQKTSAgKzAgICAgLTggICAgbGlicy9wc2Qv Q01ha2VMaXN0cy50eHQKRCAgKzAgICAgLTQgICAgbGlicy9wc2QvY29uZmlnX3BzZC5oLmNtYWtl Ck0gICsxICAgIC0xICAgIGxpYnMvcHNkL3BzZF9sYXllcl9yZWNvcmQuY3BwCk0gICsyICAgIC0z ICAgIGxpYnMvcHNkL3BzZF9sYXllcl9yZWNvcmQuaApNICArMiAgICAtMiAgICBsaWJzL3BzZC9w c2RfbGF5ZXJfc2VjdGlvbi5jcHAKTSAgKzE1ICAgLTExOSAgbGlicy9wc2QvcHNkX3BpeGVsX3V0 aWxzLmNwcApNICArNyAgICAtNSAgICBsaWJzL3BzZHV0aWxzL0NNYWtlTGlzdHMudHh0Ck0gICs1 ICAgIC01ICAgIGxpYnMvcHNkdXRpbHMvYXNsL2tpc19hc2xfcGF0dGVybnNfd3JpdGVyLmNwcApN ICArMyAgICAtMyAgICBsaWJzL3BzZHV0aWxzL2FzbC9raXNfYXNsX3JlYWRlci5jcHAKTSAgKzIy OCAgLTQzICAgbGlicy9wc2R1dGlscy9jb21wcmVzc2lvbi5jcHAKTSAgKzUgICAgLTQgICAgbGli cy9wc2R1dGlscy9jb21wcmVzc2lvbi5oCk0gICs4ICAgIC0wICAgIGxpYnMvcHNkdXRpbHMvcHNk LmgKTSAgKzI0ICAgLTEyICAgbGlicy9wc2R1dGlscy90ZXN0cy9jb21wcmVzc2lvbl90ZXN0LmNw cApNICArNSAgICAtMTEgICBwbHVnaW5zL2ltcGV4L3BzZC9DTWFrZUxpc3RzLnR4dApEICArMCAg ICAtNCAgICBwbHVnaW5zL2ltcGV4L3BzZC9jb25maWdfcHNkLmguY21ha2UKTSAgKzggICAgLTEy ICAgcGx1Z2lucy9pbXBleC9wc2QvcHNkX2ltYWdlX2RhdGEuY3BwCgpodHRwczovL2ludmVudC5r ZGUub3JnL2dyYXBoaWNzL2tyaXRhL2NvbW1pdC9lMjZjMTRjYzFjYTViZGI3MGEzNjYyZjJjMzdl M2E2ZTc4NjQwNGE1CgpkaWZmIC0tZ2l0IGEvQ01ha2VMaXN0cy50eHQgYi9DTWFrZUxpc3RzLnR4 dAppbmRleCAyNDhjODg5NmNkLi41N2FkZmFmZGM5IDEwMDY0NAotLS0gYS9DTWFrZUxpc3RzLnR4 dAorKysgYi9DTWFrZUxpc3RzLnR4dApAQCAtNzI3LDEyICs3MjcsMTIgQEAgaWYoS1NlRXhwcl9G T1VORCkKICAgICBsaXN0IChBUFBFTkQgQU5EUk9JRF9FWFRSQV9MSUJTICR7S1NlRXhwcl9MSUJS QVJZfSAke0tTZUV4cHJVSV9MSUJSQVJZfSkKIGVuZGlmKCkKIAotZmluZF9wYWNrYWdlKFpMSUIp CitmaW5kX3BhY2thZ2UoWkxJQiBSRVFVSVJFRCkKIHNldF9wYWNrYWdlX3Byb3BlcnRpZXMoWkxJ QiBQUk9QRVJUSUVTCiAgICAgREVTQ1JJUFRJT04gIkNvbXByZXNzaW9uIGxpYnJhcnkiCiAgICAg VVJMICJodHRwczovL3d3dy56bGliLm5ldC8iCi0gICAgVFlQRSBPUFRJT05BTAotICAgIFBVUlBP U0UgIk9wdGlvbmFsbHkgdXNlZCBieSB0aGUgRydNaWMgYW5kIHRoZSBQU0QgcGx1Z2lucyIpCisg ICAgVFlQRSBSRVFVSVJFRAorICAgIFBVUlBPU0UgIlJlcXVpcmVkIGJ5IEtyaXRhJ3MgUE5HIGFu ZCBQU0Qgc3VwcG9ydCIpCiBtYWNyb19ib29sX3RvXzAxKFpMSUJfRk9VTkQgSEFWRV9aTElCKQog CiBmaW5kX3BhY2thZ2UoT3BlbkVYUiAzLjAgQ09ORklHIFFVSUVUKQpkaWZmIC0tZ2l0IGEvbGli cy9wc2QvQ01ha2VMaXN0cy50eHQgYi9saWJzL3BzZC9DTWFrZUxpc3RzLnR4dAppbmRleCAzZjll ZTMwYmUwLi42M2NhM2E5YjA5IDEwMDY0NAotLS0gYS9saWJzL3BzZC9DTWFrZUxpc3RzLnR4dAor KysgYi9saWJzL3BzZC9DTWFrZUxpc3RzLnR4dApAQCAtMSw1ICsxLDMgQEAKLWNvbmZpZ3VyZV9m aWxlKGNvbmZpZ19wc2QuaC5jbWFrZSAke0NNQUtFX0NVUlJFTlRfQklOQVJZX0RJUn0vY29uZmln X3BzZC5oKQotCiBzZXQoa3JpdGFwc2RfU1JDUwogICAgIHBzZF9hZGRpdGlvbmFsX2xheWVyX2lu Zm9fYmxvY2suY3BwCiAgICAgcHNkX2hlYWRlci5jcHAKQEAgLTEzLDE2ICsxMSwxMCBAQCBzZXQo a3JpdGFwc2RfU1JDUwogYWRkX2xpYnJhcnkoa3JpdGFwc2QgU0hBUkVEICR7a3JpdGFwc2RfU1JD U30pCiBnZW5lcmF0ZV9leHBvcnRfaGVhZGVyKGtyaXRhcHNkKQogCi10YXJnZXRfaW5jbHVkZV9k aXJlY3Rvcmllcyhrcml0YXBzZAotICAgIFBVQkxJQwotICAgICAgICAke1pMSUJfSU5DTFVERV9E SVJ9Ci0pCi0KIHRhcmdldF9saW5rX2xpYnJhcmllcyhrcml0YXBzZAogICAgIFBVQkxJQwogICAg ICAgICBrcml0YWltYWdlCiAgICAgICAgIGtyaXRhcHNkdXRpbHMKLSAgICAgICAgJHtaTElCX0xJ QlJBUklFU30KICkKIAogc2V0X3RhcmdldF9wcm9wZXJ0aWVzKGtyaXRhcHNkIFBST1BFUlRJRVMK ZGlmZiAtLWdpdCBhL2xpYnMvcHNkL2NvbmZpZ19wc2QuaC5jbWFrZSBiL2xpYnMvcHNkL2NvbmZp Z19wc2QuaC5jbWFrZQpkZWxldGVkIGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggNDg0ZTRlYWI5NC4u MDAwMDAwMDAwMAotLS0gYS9saWJzL3BzZC9jb25maWdfcHNkLmguY21ha2UKKysrIC9kZXYvbnVs bApAQCAtMSw0ICswLDAgQEAKLQotLyogRGVmaW5lcyBpZiB5b3VyIHN5c3RlbSBoYXMgdGhlIFps aWIgbGlicmFyeSAqLwotI2NtYWtlZGVmaW5lIEhBVkVfWkxJQiAxCi0KZGlmZiAtLWdpdCBhL2xp YnMvcHNkL3BzZF9sYXllcl9yZWNvcmQuY3BwIGIvbGlicy9wc2QvcHNkX2xheWVyX3JlY29yZC5j cHAKaW5kZXggNWNmZTNkYTUwZC4uZjc1ZTU3MmQ0MSAxMDA2NDQKLS0tIGEvbGlicy9wc2QvcHNk X2xheWVyX3JlY29yZC5jcHAKKysrIGIvbGlicy9wc2QvcHNkX2xheWVyX3JlY29yZC5jcHAKQEAg LTY0OSw3ICs2NDksNyBAQCB2b2lkIFBTRExheWVyUmVjb3JkOjp3cml0ZVBpeGVsRGF0YUltcGwo UUlPRGV2aWNlICZpbykKICAgICAgICAgZm9yIChpbnQgaSA9IDA7IGkgPCBuQ2hhbm5lbHM7IGkr KykgewogICAgICAgICAgICAgY29uc3QgQ2hhbm5lbEluZm8gKmNoYW5uZWxJbmZvID0gY2hhbm5l bEluZm9SZWNvcmRzW2ldOwogICAgICAgICAgICAgS2lzQXNsV3JpdGVyVXRpbHM6Ok9mZnNldFN0 cmVhbVB1c2hlcjxxdWludDMyLCBieXRlT3JkZXI+IGNoYW5uZWxCbG9ja1NpemVFeHRlcm5hbFRh ZyhpbywgMCwgY2hhbm5lbEluZm8tPmNoYW5uZWxJbmZvUG9zaXRpb24pOwotICAgICAgICAgICAg U0FGRV9XUklURV9FWChieXRlT3JkZXIsIGlvLCAocXVpbnQxNilDb21wcmVzc2lvbjo6VW5jb21w cmVzc2VkKTsKKyAgICAgICAgICAgIFNBRkVfV1JJVEVfRVgoYnl0ZU9yZGVyLCBpbywgc3RhdGlj X2Nhc3Q8cXVpbnQxNj4ocHNkX2NvbXByZXNzaW9uX3R5cGU6OlVuY29tcHJlc3NlZCkpOwogICAg ICAgICB9CiAKICAgICAgICAgd3JpdGVUcmFuc3BhcmVuY3lNYXNrUGl4ZWxEYXRhPGJ5dGVPcmRl cj4oaW8pOwpkaWZmIC0tZ2l0IGEvbGlicy9wc2QvcHNkX2xheWVyX3JlY29yZC5oIGIvbGlicy9w c2QvcHNkX2xheWVyX3JlY29yZC5oCmluZGV4IGZmMzE3MTY0MjQuLmI0MmNlNTgxZjggMTAwNjQ0 Ci0tLSBhL2xpYnMvcHNkL3BzZF9sYXllcl9yZWNvcmQuaAorKysgYi9saWJzL3BzZC9wc2RfbGF5 ZXJfcmVjb3JkLmgKQEAgLTE0LDcgKzE0LDYgQEAKICNpbmNsdWRlIDxRU3RyaW5nPgogI2luY2x1 ZGUgPFFWZWN0b3I+CiAKLSNpbmNsdWRlIDxjb21wcmVzc2lvbi5oPgogI2luY2x1ZGUgPGtpc19u b2RlLmg+CiAjaW5jbHVkZSA8a2lzX3BhaW50X2RldmljZS5oPgogI2luY2x1ZGUgPGtpc190eXBl cy5oPgpAQCAtNDksNyArNDgsNyBAQCBlbnVtIHBzZF9sYXllcl90eXBlIHsKIHN0cnVjdCBLUklU QVBTRF9FWFBPUlQgQ2hhbm5lbEluZm8gewogICAgIENoYW5uZWxJbmZvKCkKICAgICAgICAgOiBj aGFubmVsSWQoMCkKLSAgICAgICAgLCBjb21wcmVzc2lvblR5cGUoQ29tcHJlc3Npb246OlVua25v d24pCisgICAgICAgICwgY29tcHJlc3Npb25UeXBlKHBzZF9jb21wcmVzc2lvbl90eXBlOjpVbmtu b3duKQogICAgICAgICAsIGNoYW5uZWxEYXRhU3RhcnQoMCkKICAgICAgICAgLCBjaGFubmVsRGF0 YUxlbmd0aCgwKQogICAgICAgICAsIGNoYW5uZWxPZmZzZXQoMCkKQEAgLTU4LDcgKzU3LDcgQEAg c3RydWN0IEtSSVRBUFNEX0VYUE9SVCBDaGFubmVsSW5mbyB7CiAgICAgfQogCiAgICAgcWludDE2 IGNoYW5uZWxJZDsgLy8gMCByZWQsIDEgZ3JlZW4sIDIgYmx1ZSwgLTEgdHJhbnNwYXJlbmN5LCAt MiB1c2VyLXN1cHBsaWVkIGxheWVyIG1hc2sKLSAgICBDb21wcmVzc2lvbjo6Q29tcHJlc3Npb25U eXBlIGNvbXByZXNzaW9uVHlwZTsKKyAgICBwc2RfY29tcHJlc3Npb25fdHlwZSBjb21wcmVzc2lv blR5cGU7CiAgICAgcXVpbnQ2NCBjaGFubmVsRGF0YVN0YXJ0OwogICAgIHF1aW50NjQgY2hhbm5l bERhdGFMZW5ndGg7CiAgICAgUVZlY3RvcjxxdWludDMyPiBybGVSb3dMZW5ndGhzOwpkaWZmIC0t Z2l0IGEvbGlicy9wc2QvcHNkX2xheWVyX3NlY3Rpb24uY3BwIGIvbGlicy9wc2QvcHNkX2xheWVy X3NlY3Rpb24uY3BwCmluZGV4IGMwOTRkZDA5YmUuLjYzNWUzMTNjNjIgMTAwNjQ0Ci0tLSBhL2xp YnMvcHNkL3BzZF9sYXllcl9zZWN0aW9uLmNwcAorKysgYi9saWJzL3BzZC9wc2RfbGF5ZXJfc2Vj dGlvbi5jcHAKQEAgLTEzOSwxMyArMTM5LDEzIEBAIGJvb2wgUFNETGF5ZXJNYXNrU2VjdGlvbjo6 cmVhZExheWVySW5mb0ltcGwoUUlPRGV2aWNlICZpbykKICAgICAgICAgICAgICAgICAgICAgZXJy b3IgPSAiQ291bGQgbm90IHJlYWQgY29tcHJlc3Npb24gdHlwZSBmb3IgY2hhbm5lbCI7CiAgICAg ICAgICAgICAgICAgICAgIHJldHVybiBmYWxzZTsKICAgICAgICAgICAgICAgICB9Ci0gICAgICAg ICAgICAgICAgY2hhbm5lbEluZm8tPmNvbXByZXNzaW9uVHlwZSA9IChDb21wcmVzc2lvbjo6Q29t cHJlc3Npb25UeXBlKWNvbXByZXNzaW9uVHlwZTsKKyAgICAgICAgICAgICAgICBjaGFubmVsSW5m by0+Y29tcHJlc3Npb25UeXBlID0gc3RhdGljX2Nhc3Q8cHNkX2NvbXByZXNzaW9uX3R5cGU+KGNv bXByZXNzaW9uVHlwZSk7CiAgICAgICAgICAgICAgICAgZGJnRmlsZSA8PCAiXHRcdENoYW5uZWwi IDw8IGogPDwgImhhcyBjb21wcmVzc2lvbiB0eXBlIiA8PCBjb21wcmVzc2lvblR5cGU7CiAKICAg ICAgICAgICAgICAgICBRUmVjdCBjaGFubmVsUmVjdCA9IGxheWVyUmVjb3JkLT5jaGFubmVsUmVj dChjaGFubmVsSW5mbyk7CiAKICAgICAgICAgICAgICAgICAvLyByZWFkIHRoZSBybGUgcm93IGxl bmd0aHM7Ci0gICAgICAgICAgICAgICAgaWYgKGNoYW5uZWxJbmZvLT5jb21wcmVzc2lvblR5cGUg PT0gQ29tcHJlc3Npb246OlJMRSkgeworICAgICAgICAgICAgICAgIGlmIChjaGFubmVsSW5mby0+ Y29tcHJlc3Npb25UeXBlID09IHBzZF9jb21wcmVzc2lvbl90eXBlOjpSTEUpIHsKICAgICAgICAg ICAgICAgICAgICAgZm9yIChxaW50NjQgcm93ID0gMDsgcm93IDwgY2hhbm5lbFJlY3QuaGVpZ2h0 KCk7ICsrcm93KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAvLyBkYmdGaWxlIDw8ICJSZWFk aW5nIHRoZSBSTEUgYnl0ZWNvdW50IHBvc2l0aW9uIG9mIHJvdyIgPDwgcm93IDw8ICJhdCBwb3Mi IDw8IGlvLnBvcygpOwogCmRpZmYgLS1naXQgYS9saWJzL3BzZC9wc2RfcGl4ZWxfdXRpbHMuY3Bw IGIvbGlicy9wc2QvcHNkX3BpeGVsX3V0aWxzLmNwcAppbmRleCA0MWM3OGQyNzAwLi5iYjhiOWEy Y2M2IDEwMDY0NAotLS0gYS9saWJzL3BzZC9wc2RfcGl4ZWxfdXRpbHMuY3BwCisrKyBiL2xpYnMv cHNkL3BzZF9waXhlbF91dGlscy5jcHAKQEAgLTksMjggKzksMjIgQEAKIAogI2luY2x1ZGUgPFFJ T0RldmljZT4KICNpbmNsdWRlIDxRTWFwPgorI2luY2x1ZGUgPFF0RW5kaWFuPgogI2luY2x1ZGUg PFF0R2xvYmFsPgogCiAjaW5jbHVkZSA8S29Db2xvclNwYWNlLmg+CiAjaW5jbHVkZSA8S29Db2xv clNwYWNlTWF0aHMuaD4KICNpbmNsdWRlIDxLb0NvbG9yU3BhY2VUcmFpdHMuaD4KICNpbmNsdWRl IDxjb2xvcnNwYWNlcy9Lb0FscGhhQ29sb3JTcGFjZS5oPgorI2luY2x1ZGUgPGtpc19nbG9iYWwu aD4KKyNpbmNsdWRlIDxraXNfaXRlcmF0b3JfbmcuaD4KIAotI2luY2x1ZGUgPFF0RW5kaWFuPgot Ci0jaW5jbHVkZSAia2lzX2dsb2JhbC5oIgogI2luY2x1ZGUgPGFzbC9raXNfYXNsX3JlYWRlcl91 dGlscy5oPgogI2luY2x1ZGUgPGFzbC9raXNfYXNsX3dyaXRlcl91dGlscy5oPgotCi0jaW5jbHVk ZSAia2lzX2l0ZXJhdG9yX25nLmgiCi0jaW5jbHVkZSAicHNkLmgiCi0jaW5jbHVkZSAicHNkX2xh eWVyX3JlY29yZC5oIgogI2luY2x1ZGUgPGFzbC9raXNfb2Zmc2V0X2tlZXBlci5oPgotCi0jaW5j bHVkZSAiY29uZmlnX3BzZC5oIgotI2lmZGVmIEhBVkVfWkxJQgotI2luY2x1ZGUgInpsaWIuaCIK LSNlbmRpZgorI2luY2x1ZGUgPGNvbXByZXNzaW9uLmg+CisjaW5jbHVkZSA8cHNkLmg+CisjaW5j bHVkZSA8cHNkX2xheWVyX3JlY29yZC5oPgogCiBuYW1lc3BhY2UgUHNkUGl4ZWxVdGlscwogewpA QCAtMzA0LDkxICsyOTgsNiBAQCB2b2lkIHJlYWRBbHBoYU1hc2tQaXhlbENvbW1vbihpbnQgY2hh bm5lbFNpemUsIGNvbnN0IFFNYXA8cXVpbnQxNiwgUUJ5dGVBcnJheT4gJgogICAgIH0KIH0KIAot LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCi0vKiBUd28gZnVuY3Rpb25zIGNvcGllZCBmcm9tIHRoZSBhYmFuZG9u ZWQgUFNEUGFyc2UgbGlicmFyeSAoR1BMKSAgICAgKi8KLS8qIFNlZTogaHR0cDovL3d3dy50ZWxl Z3JhcGhpY3MuY29tLmF1L3N2bi9wc2RwYXJzZS90cnVuay9wc2RfemlwLmMgICAqLwotLyogQ3Jl YXRlZCBieSBQYXRyaWNrIGluIDIwMDcuMDIuMDIsIGxpYnBzZEBncmFwaGVzdC5jb20gICAgICAg ICAgICAgICovCi0vKiBNb2RpZmljYXRpb25zIGJ5IFRvYnkgVGhhaW4gPHRvYnlAdGVsZWdyYXBo aWNzLmNvbS5hdT4gICAgICAgICAgICAgKi8KLS8qKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLwotCi10eXBlZGVmIGJv b2wgcHNkX3N0YXR1czsKLXR5cGVkZWYgcXVpbnQ4IHBzZF91Y2hhcjsKLXR5cGVkZWYgaW50IHBz ZF9pbnQ7Ci10eXBlZGVmIHF1aW50OCBCeXRlZjsKLQotcHNkX3N0YXR1cyBwc2RfdW56aXBfd2l0 aG91dF9wcmVkaWN0aW9uKHBzZF91Y2hhciAqc3JjX2J1ZiwgcHNkX2ludCBzcmNfbGVuLCBwc2Rf dWNoYXIgKmRzdF9idWYsIHBzZF9pbnQgZHN0X2xlbikKLXsKLSNpZmRlZiBIQVZFX1pMSUIKLSAg ICB6X3N0cmVhbSBzdHJlYW07Ci0gICAgcHNkX2ludCBzdGF0ZTsKLQotICAgIG1lbXNldCgmc3Ry ZWFtLCAwLCBzaXplb2Yoel9zdHJlYW0pKTsKLSAgICBzdHJlYW0uZGF0YV90eXBlID0gWl9CSU5B Ulk7Ci0KLSAgICBzdHJlYW0ubmV4dF9pbiA9IChCeXRlZiAqKXNyY19idWY7Ci0gICAgc3RyZWFt LmF2YWlsX2luID0gc3JjX2xlbjsKLSAgICBzdHJlYW0ubmV4dF9vdXQgPSAoQnl0ZWYgKilkc3Rf YnVmOwotICAgIHN0cmVhbS5hdmFpbF9vdXQgPSBkc3RfbGVuOwotCi0gICAgaWYgKGluZmxhdGVJ bml0KCZzdHJlYW0pICE9IFpfT0spCi0gICAgICAgIHJldHVybiAwOwotCi0gICAgZG8gewotICAg ICAgICBzdGF0ZSA9IGluZmxhdGUoJnN0cmVhbSwgWl9QQVJUSUFMX0ZMVVNIKTsKLSAgICAgICAg aWYgKHN0YXRlID09IFpfU1RSRUFNX0VORCkKLSAgICAgICAgICAgIGJyZWFrOwotICAgICAgICBp ZiAoc3RhdGUgIT0gWl9PSykKLSAgICAgICAgICAgIGJyZWFrOwotICAgIH0gd2hpbGUgKHN0cmVh bS5hdmFpbF9vdXQgPiAwKTsKLQotICAgIGlmIChzdGF0ZSAhPSBaX1NUUkVBTV9FTkQgJiYgc3Rh dGUgIT0gWl9PSykKLSAgICAgICAgcmV0dXJuIDA7Ci0KLSAgICByZXR1cm4gMTsKLQotI2VuZGlm IC8qIEhBVkVfWkxJQiAqLwotCi0gICAgcmV0dXJuIDA7Ci19Ci0KLXBzZF9zdGF0dXMgcHNkX3Vu emlwX3dpdGhfcHJlZGljdGlvbihwc2RfdWNoYXIgKnNyY19idWYsIHBzZF9pbnQgc3JjX2xlbiwg cHNkX3VjaGFyICpkc3RfYnVmLCBwc2RfaW50IGRzdF9sZW4sIHBzZF9pbnQgcm93X3NpemUsIHBz ZF9pbnQgY29sb3JfZGVwdGgpCi17Ci0gICAgcHNkX3N0YXR1cyBzdGF0dXM7Ci0gICAgaW50IGxl bjsKLSAgICBwc2RfdWNoYXIgKmJ1ZjsKLQotICAgIHN0YXR1cyA9IHBzZF91bnppcF93aXRob3V0 X3ByZWRpY3Rpb24oc3JjX2J1Ziwgc3JjX2xlbiwgZHN0X2J1ZiwgZHN0X2xlbik7Ci0gICAgaWYg KCFzdGF0dXMpCi0gICAgICAgIHJldHVybiBzdGF0dXM7Ci0KLSAgICBidWYgPSBkc3RfYnVmOwot ICAgIGRvIHsKLSAgICAgICAgbGVuID0gcm93X3NpemU7Ci0gICAgICAgIGlmIChjb2xvcl9kZXB0 aCA9PSAxNikgewotICAgICAgICAgICAgd2hpbGUgKC0tbGVuKSB7Ci0gICAgICAgICAgICAgICAg YnVmWzJdICs9IGJ1ZlswXSArICgoYnVmWzFdICsgYnVmWzNdKSA+PiA4KTsKLSAgICAgICAgICAg ICAgICBidWZbM10gKz0gYnVmWzFdOwotICAgICAgICAgICAgICAgIGJ1ZiArPSAyOwotICAgICAg ICAgICAgfQotICAgICAgICAgICAgYnVmICs9IDI7Ci0gICAgICAgICAgICBkc3RfbGVuIC09IHJv d19zaXplICogMjsKLSAgICAgICAgfSBlbHNlIHsKLSAgICAgICAgICAgIHdoaWxlICgtLWxlbikg ewotICAgICAgICAgICAgICAgICooYnVmICsgMSkgKz0gKmJ1ZjsKLSAgICAgICAgICAgICAgICBi dWYrKzsKLSAgICAgICAgICAgIH0KLSAgICAgICAgICAgIGJ1ZisrOwotICAgICAgICAgICAgZHN0 X2xlbiAtPSByb3dfc2l6ZTsKLSAgICAgICAgfQotICAgIH0gd2hpbGUgKGRzdF9sZW4gPiAwKTsK LQotICAgIHJldHVybiAxOwotfQotCi0vKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KLS8qIEVuZCBvZiB0aGlyZCBw YXJ0eSBibG9jayAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLwot LyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKiovCi0KIFFNYXA8cXVpbnQxNiwgUUJ5dGVBcnJheT4gZmV0Y2hDaGFubmVs c0J5dGVzKFFJT0RldmljZSAmaW8sIFFWZWN0b3I8Q2hhbm5lbEluZm8gKj4gY2hhbm5lbEluZm9S ZWNvcmRzLCBpbnQgcm93LCBpbnQgd2lkdGgsIGludCBjaGFubmVsU2l6ZSwgYm9vbCBwcm9jZXNz TWFza3MpCiB7CiAgICAgY29uc3QgaW50IHVuY29tcHJlc3NlZExlbmd0aCA9IHdpZHRoICogY2hh bm5lbFNpemU7CkBAIC00MDIsMTAgKzMxMSwxMCBAQCBRTWFwPHF1aW50MTYsIFFCeXRlQXJyYXk+ IGZldGNoQ2hhbm5lbHNCeXRlcyhRSU9EZXZpY2UgJmlvLCBRVmVjdG9yPENoYW5uZWxJbmZvCiAK ICAgICAgICAgaW8uc2VlayhjaGFubmVsSW5mby0+Y2hhbm5lbERhdGFTdGFydCArIGNoYW5uZWxJ bmZvLT5jaGFubmVsT2Zmc2V0KTsKIAotICAgICAgICBpZiAoY2hhbm5lbEluZm8tPmNvbXByZXNz aW9uVHlwZSA9PSBDb21wcmVzc2lvbjo6VW5jb21wcmVzc2VkKSB7CisgICAgICAgIGlmIChjaGFu bmVsSW5mby0+Y29tcHJlc3Npb25UeXBlID09IHBzZF9jb21wcmVzc2lvbl90eXBlOjpVbmNvbXBy ZXNzZWQpIHsKICAgICAgICAgICAgIGNoYW5uZWxCeXRlc1tjaGFubmVsSW5mby0+Y2hhbm5lbElk XSA9IGlvLnJlYWQodW5jb21wcmVzc2VkTGVuZ3RoKTsKICAgICAgICAgICAgIGNoYW5uZWxJbmZv LT5jaGFubmVsT2Zmc2V0ICs9IHVuY29tcHJlc3NlZExlbmd0aDsKLSAgICAgICAgfSBlbHNlIGlm IChjaGFubmVsSW5mby0+Y29tcHJlc3Npb25UeXBlID09IENvbXByZXNzaW9uOjpSTEUpIHsKKyAg ICAgICAgfSBlbHNlIGlmIChjaGFubmVsSW5mby0+Y29tcHJlc3Npb25UeXBlID09IHBzZF9jb21w cmVzc2lvbl90eXBlOjpSTEUpIHsKICAgICAgICAgICAgIGludCBybGVMZW5ndGggPSBjaGFubmVs SW5mby0+cmxlUm93TGVuZ3Roc1tyb3ddOwogICAgICAgICAgICAgUUJ5dGVBcnJheSBjb21wcmVz c2VkQnl0ZXMgPSBpby5yZWFkKHJsZUxlbmd0aCk7CiAgICAgICAgICAgICBRQnl0ZUFycmF5IHVu Y29tcHJlc3NlZEJ5dGVzID0gQ29tcHJlc3Npb246OnVuY29tcHJlc3ModW5jb21wcmVzc2VkTGVu Z3RoLCBjb21wcmVzc2VkQnl0ZXMsIGNoYW5uZWxJbmZvLT5jb21wcmVzc2lvblR5cGUpOwpAQCAt NDM4LDcgKzM0Nyw3IEBAIHZvaWQgcmVhZENvbW1vbihLaXNQYWludERldmljZVNQIGRldiwKICAg ICAgICAgcmV0dXJuOwogICAgIH0KIAotICAgIGlmIChpbmZvUmVjb3Jkcy5maXJzdCgpLT5jb21w cmVzc2lvblR5cGUgPT0gQ29tcHJlc3Npb246OlpJUCB8fCBpbmZvUmVjb3Jkcy5maXJzdCgpLT5j b21wcmVzc2lvblR5cGUgPT0gQ29tcHJlc3Npb246OlpJUFdpdGhQcmVkaWN0aW9uKSB7CisgICAg aWYgKGluZm9SZWNvcmRzLmZpcnN0KCktPmNvbXByZXNzaW9uVHlwZSA9PSBwc2RfY29tcHJlc3Np b25fdHlwZTo6WklQIHx8IGluZm9SZWNvcmRzLmZpcnN0KCktPmNvbXByZXNzaW9uVHlwZSA9PSBw c2RfY29tcHJlc3Npb25fdHlwZTo6WklQV2l0aFByZWRpY3Rpb24pIHsKICAgICAgICAgY29uc3Qg aW50IG51bVBpeGVscyA9IGNoYW5uZWxTaXplICogbGF5ZXJSZWN0LndpZHRoKCkgKiBsYXllclJl Y3QuaGVpZ2h0KCk7CiAKICAgICAgICAgUU1hcDxxdWludDE2LCBRQnl0ZUFycmF5PiBjaGFubmVs Qnl0ZXM7CkBAIC00NDYsMjQgKzM1NSwxMSBAQCB2b2lkIHJlYWRDb21tb24oS2lzUGFpbnREZXZp Y2VTUCBkZXYsCiAgICAgICAgIFFfRk9SRUFDSCAoQ2hhbm5lbEluZm8gKmluZm8sIGluZm9SZWNv cmRzKSB7CiAgICAgICAgICAgICBpby5zZWVrKGluZm8tPmNoYW5uZWxEYXRhU3RhcnQpOwogICAg ICAgICAgICAgUUJ5dGVBcnJheSBjb21wcmVzc2VkQnl0ZXMgPSBpby5yZWFkKGluZm8tPmNoYW5u ZWxEYXRhTGVuZ3RoKTsKLSAgICAgICAgICAgIFFCeXRlQXJyYXkgdW5jb21wcmVzc2VkQnl0ZXMo bnVtUGl4ZWxzLCAwKTsKLQotICAgICAgICAgICAgYm9vbCBzdGF0dXMgPSBmYWxzZTsKLSAgICAg ICAgICAgIGlmIChpbmZvUmVjb3Jkcy5maXJzdCgpLT5jb21wcmVzc2lvblR5cGUgPT0gQ29tcHJl c3Npb246OlpJUCkgewotICAgICAgICAgICAgICAgIHN0YXR1cyA9IHBzZF91bnppcF93aXRob3V0 X3ByZWRpY3Rpb24oKHF1aW50OCAqKWNvbXByZXNzZWRCeXRlcy5kYXRhKCksCi0gICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBjb21wcmVzc2VkQnl0 ZXMuc2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgKHF1aW50OCAqKXVuY29tcHJlc3NlZEJ5dGVzLmRhdGEoKSwKLSAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuY29tcHJlc3NlZEJ5 dGVzLnNpemUoKSk7Ci0gICAgICAgICAgICB9IGVsc2UgewotICAgICAgICAgICAgICAgIHN0YXR1 cyA9IHBzZF91bnppcF93aXRoX3ByZWRpY3Rpb24oKHF1aW50OCAqKWNvbXByZXNzZWRCeXRlcy5k YXRhKCksCi0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICBjb21wcmVzc2VkQnl0ZXMuc2l6ZSgpLAotICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgKHF1aW50OCAqKXVuY29tcHJlc3NlZEJ5dGVzLmRhdGEoKSwK LSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuY29t cHJlc3NlZEJ5dGVzLnNpemUoKSwKLSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgIGxheWVyUmVjdC53aWR0aCgpLAotICAgICAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgY2hhbm5lbFNpemUgKiA4KTsKLSAgICAgICAg ICAgIH0KKyAgICAgICAgICAgIFFCeXRlQXJyYXkgdW5jb21wcmVzc2VkQnl0ZXM7CisKKyAgICAg ICAgICAgIHVuY29tcHJlc3NlZEJ5dGVzID0gQ29tcHJlc3Npb246OnVuY29tcHJlc3MobnVtUGl4 ZWxzLCBjb21wcmVzc2VkQnl0ZXMsIGluZm9SZWNvcmRzLmZpcnN0KCktPmNvbXByZXNzaW9uVHlw ZSwgbGF5ZXJSZWN0LndpZHRoKCksIGNoYW5uZWxTaXplICogOCk7CiAKLSAgICAgICAgICAgIGlm ICghc3RhdHVzKSB7CisgICAgICAgICAgICBpZiAodW5jb21wcmVzc2VkQnl0ZXMuc2l6ZSgpICE9 IG51bVBpeGVscykgewogICAgICAgICAgICAgICAgIFFTdHJpbmcgZXJyb3IgPSBRU3RyaW5nKCJG YWlsZWQgdG8gdW56aXAgY2hhbm5lbCBkYXRhOiBpZCA9ICUxLCBjb21wcmVzc2lvbiA9ICUyIiku YXJnKGluZm8tPmNoYW5uZWxJZCkuYXJnKGluZm8tPmNvbXByZXNzaW9uVHlwZSk7CiAgICAgICAg ICAgICAgICAgZGJnRmlsZSA8PCAiRVJST1I6IiA8PCBlcnJvcjsKICAgICAgICAgICAgICAgICBk YmdGaWxlIDw8ICIgICAgICAiIDw8IHBwVmFyKGluZm8tPmNoYW5uZWxJZCk7CkBAIC01ODUsNyAr NDgxLDcgQEAgdm9pZCB3cml0ZUNoYW5uZWxEYXRhUkxFSW1wbChRSU9EZXZpY2UgJmlvLAogICAg IH0KIAogICAgIGlmICh3cml0ZUNvbXByZXNzaW9uVHlwZSkgewotICAgICAgICBTQUZFX1dSSVRF X0VYKGJ5dGVPcmRlciwgaW8sIChxdWludDE2KUNvbXByZXNzaW9uOjpSTEUpOworICAgICAgICBT QUZFX1dSSVRFX0VYKGJ5dGVPcmRlciwgaW8sIHN0YXRpY19jYXN0PHF1aW50MTY+KHBzZF9jb21w cmVzc2lvbl90eXBlOjpSTEUpKTsKICAgICB9CiAKICAgICBjb25zdCBib29sIGV4dGVybmFsUmxl QmxvY2sgPSBybGVCbG9ja09mZnNldCA+PSAwOwpAQCAtNjEyLDcgKzUwOCw3IEBAIHZvaWQgd3Jp dGVDaGFubmVsRGF0YVJMRUltcGwoUUlPRGV2aWNlICZpbywKICAgICBjb25zdCBpbnQgc3RyaWRl ID0gY2hhbm5lbFNpemUgKiByYy53aWR0aCgpOwogICAgIGZvciAocWludDMyIHJvdyA9IDA7IHJv dyA8IHJjLmhlaWdodCgpOyArK3JvdykgewogICAgICAgICBRQnl0ZUFycmF5IHVuY29tcHJlc3Nl ZCA9IFFCeXRlQXJyYXk6OmZyb21SYXdEYXRhKChjb25zdCBjaGFyICopcGxhbmUgKyByb3cgKiBz dHJpZGUsIHN0cmlkZSk7Ci0gICAgICAgIFFCeXRlQXJyYXkgY29tcHJlc3NlZCA9IENvbXByZXNz aW9uOjpjb21wcmVzcyh1bmNvbXByZXNzZWQsIENvbXByZXNzaW9uOjpSTEUpOworICAgICAgICBR Qnl0ZUFycmF5IGNvbXByZXNzZWQgPSBDb21wcmVzc2lvbjo6Y29tcHJlc3ModW5jb21wcmVzc2Vk LCBwc2RfY29tcHJlc3Npb25fdHlwZTo6UkxFKTsKIAogICAgICAgICBLaXNBc2xXcml0ZXJVdGls czo6T2Zmc2V0U3RyZWFtUHVzaGVyPHF1aW50MTYsIGJ5dGVPcmRlcj4gcmxlRXh0ZXJuYWxUYWco aW8sIDAsIGNoYW5uZWxSTEVTaXplUG9zICsgcm93ICogc3RhdGljX2Nhc3Q8cWludDY0PihzaXpl b2YocXVpbnQxNikpKTsKIApkaWZmIC0tZ2l0IGEvbGlicy9wc2R1dGlscy9DTWFrZUxpc3RzLnR4 dCBiL2xpYnMvcHNkdXRpbHMvQ01ha2VMaXN0cy50eHQKaW5kZXggNTZmNjE2NGI0Mi4uOWMwMjI1 MDhiYSAxMDA2NDQKLS0tIGEvbGlicy9wc2R1dGlscy9DTWFrZUxpc3RzLnR4dAorKysgYi9saWJz L3BzZHV0aWxzL0NNYWtlTGlzdHMudHh0CkBAIC0xLDYgKzEsMyBAQAotaW5jbHVkZV9kaXJlY3Rv cmllcyggJHtDTUFLRV9CSU5BUllfRElSfS9saWJzL3BzZHV0aWxzICAjRm9yIGtpc3BzZF9pbmNs dWRlLmgKLSkKLQogc2V0KGtyaXRhcHNkdXRpbHNfTElCX1NSQ1MKICAgICBwc2QuY3BwCiAgICAg Y29tcHJlc3Npb24uY3BwCkBAIC0xNywxMCArMTQsMTUgQEAgc2V0KGtyaXRhcHNkdXRpbHNfTElC X1NSQ1MKIGFkZF9saWJyYXJ5KGtyaXRhcHNkdXRpbHMgU0hBUkVEICR7a3JpdGFwc2R1dGlsc19M SUJfU1JDU30gKQogZ2VuZXJhdGVfZXhwb3J0X2hlYWRlcihrcml0YXBzZHV0aWxzIEJBU0VfTkFN RSBrcml0YXBzZHV0aWxzKQogCit0YXJnZXRfaW5jbHVkZV9kaXJlY3Rvcmllcyhrcml0YXBzZHV0 aWxzCisgICAgUFVCTElDCisgICAgICAgICR7WkxJQl9JTkNMVURFX0RJUn0KKykKKwogaWYgKFdJ TjMyKQotICAgIHRhcmdldF9saW5rX2xpYnJhcmllcyhrcml0YXBzZHV0aWxzIGtyaXRhcGlnbWVu dCBrcml0YWdsb2JhbCBLRjU6OkkxOG4gICR7UVRfUVRDT1JFX0xJQlJBUll9ICR7UVRfUVRHVUlf TElCUkFSWX0gJHtXSU4zMl9QTEFURk9STV9ORVRfTElCU30pCisgICAgdGFyZ2V0X2xpbmtfbGli cmFyaWVzKGtyaXRhcHNkdXRpbHMga3JpdGFwaWdtZW50IGtyaXRhZ2xvYmFsIEtGNTo6STE4biAg JHtRVF9RVENPUkVfTElCUkFSWX0gJHtRVF9RVEdVSV9MSUJSQVJZfSAke1dJTjMyX1BMQVRGT1JN X05FVF9MSUJTfSAke1pMSUJfTElCUkFSSUVTfSkKIGVsc2UgKFdJTjMyKQotICAgIHRhcmdldF9s aW5rX2xpYnJhcmllcyhrcml0YXBzZHV0aWxzIGtyaXRhcGlnbWVudCBrcml0YWdsb2JhbCBLRjU6 OkkxOG4gICR7UVRfUVRDT1JFX0xJQlJBUll9ICR7UVRfUVRHVUlfTElCUkFSWX0pCisgICAgdGFy Z2V0X2xpbmtfbGlicmFyaWVzKGtyaXRhcHNkdXRpbHMga3JpdGFwaWdtZW50IGtyaXRhZ2xvYmFs IEtGNTo6STE4biAgJHtRVF9RVENPUkVfTElCUkFSWX0gJHtRVF9RVEdVSV9MSUJSQVJZfSAke1pM SUJfTElCUkFSSUVTfSkKIGVuZGlmIChXSU4zMikKIAogc2V0X3RhcmdldF9wcm9wZXJ0aWVzKGty aXRhcHNkdXRpbHMgUFJPUEVSVElFUwpkaWZmIC0tZ2l0IGEvbGlicy9wc2R1dGlscy9hc2wva2lz X2FzbF9wYXR0ZXJuc193cml0ZXIuY3BwIGIvbGlicy9wc2R1dGlscy9hc2wva2lzX2FzbF9wYXR0 ZXJuc193cml0ZXIuY3BwCmluZGV4IGQxMWEwZGIyNGQuLjQ3MDI2ZWVjOTggMTAwNjQ0Ci0tLSBh L2xpYnMvcHNkdXRpbHMvYXNsL2tpc19hc2xfcGF0dGVybnNfd3JpdGVyLmNwcAorKysgYi9saWJz L3BzZHV0aWxzL2FzbC9raXNfYXNsX3BhdHRlcm5zX3dyaXRlci5jcHAKQEAgLTgsMTQgKzgsMTQg QEAKICNpbmNsdWRlICJraXNfYXNsX3BhdHRlcm5zX3dyaXRlci5oIgogCiAjaW5jbHVkZSA8ZnVu Y3Rpb25hbD4KKworI2luY2x1ZGUgPGNvbXByZXNzaW9uLmg+CisjaW5jbHVkZSA8a2lzX2RlYnVn Lmg+CiAjaW5jbHVkZSA8cmVzb3VyY2VzL0tvUGF0dGVybi5oPgogCi0jaW5jbHVkZSAiY29tcHJl c3Npb24uaCIKICNpbmNsdWRlICJraXNfYXNsX2NhbGxiYWNrX29iamVjdF9jYXRjaGVyLmgiCi0j aW5jbHVkZSAia2lzX2FzbF94bWxfcGFyc2VyLmgiCi0jaW5jbHVkZSAia2lzX2RlYnVnLmgiCi0K ICNpbmNsdWRlICJraXNfYXNsX3dyaXRlcl91dGlscy5oIgorI2luY2x1ZGUgImtpc19hc2xfeG1s X3BhcnNlci5oIgogCiBLaXNBc2xQYXR0ZXJuc1dyaXRlcjo6S2lzQXNsUGF0dGVybnNXcml0ZXIo Y29uc3QgUURvbURvY3VtZW50ICZkb2MsIFFJT0RldmljZSAmZGV2aWNlLCBwc2RfYnl0ZV9vcmRl ciBieXRlT3JkZXIpCiAgICAgOiBtX2RvYyhkb2MpCkBAIC02NSw3ICs2NSw3IEBAIHZvaWQgc2xp Y2VRSW1hZ2UoY29uc3QgUUltYWdlICZpbWFnZSwgUVZlY3RvcjxRVmVjdG9yPFFCeXRlQXJyYXk+ PiAqZHN0UGxhbmVzLCBiCiAgICAgICAgICAgICAgICAgZHN0UHRyICs9IGRzdFN0ZXA7CiAgICAg ICAgICAgICB9CiAKLSAgICAgICAgICAgIGNvbXByZXNzZWRSb3dzW2ldLmFwcGVuZChDb21wcmVz c2lvbjo6Y29tcHJlc3ModW5jb21wcmVzc2VkUm93c1tpXS5sYXN0KCksIENvbXByZXNzaW9uOjpS TEUpKTsKKyAgICAgICAgICAgIGNvbXByZXNzZWRSb3dzW2ldLmFwcGVuZChDb21wcmVzc2lvbjo6 Y29tcHJlc3ModW5jb21wcmVzc2VkUm93c1tpXS5sYXN0KCksIHBzZF9jb21wcmVzc2lvbl90eXBl OjpSTEUpKTsKICAgICAgICAgICAgIGlmIChjb21wcmVzc2VkUm93c1tpXS5sYXN0KCkuaXNFbXB0 eSgpKSB7CiAgICAgICAgICAgICAgICAgdGhyb3cgS2lzQXNsV3JpdGVyVXRpbHM6OkFTTFdyaXRl RXhjZXB0aW9uKCJGYWlsZWQgdG8gY29tcHJlc3MgcGF0dGVybiBwbGFuZSIpOwogICAgICAgICAg ICAgfQpkaWZmIC0tZ2l0IGEvbGlicy9wc2R1dGlscy9hc2wva2lzX2FzbF9yZWFkZXIuY3BwIGIv bGlicy9wc2R1dGlscy9hc2wva2lzX2FzbF9yZWFkZXIuY3BwCmluZGV4IGZjYzZiZmQyOTcuLjBk ZGY5MWJhYjIgMTAwNjQ0Ci0tLSBhL2xpYnMvcHNkdXRpbHMvYXNsL2tpc19hc2xfcmVhZGVyLmNw cAorKysgYi9saWJzL3BzZHV0aWxzL2FzbC9raXNfYXNsX3JlYWRlci5jcHAKQEAgLTMxMSwxMCAr MzExLDEwIEBAIFFJbWFnZSByZWFkVmlydHVhbEFycmF5TGlzdChRSU9EZXZpY2UgJmRldmljZSwg aW50IG51bVBsYW5lcykKIAogICAgICAgICBjb25zdCBpbnQgZGF0YUxlbmd0aCA9IHBsYW5lUmVj dC53aWR0aCgpICogcGxhbmVSZWN0LmhlaWdodCgpICogY2hhbm5lbFNpemU7CiAKLSAgICAgICAg aWYgKHVzZUNvbXByZXNzaW9uID09IENvbXByZXNzaW9uOjpVbmNvbXByZXNzZWQpIHsKKyAgICAg ICAgaWYgKHVzZUNvbXByZXNzaW9uID09IHBzZF9jb21wcmVzc2lvbl90eXBlOjpVbmNvbXByZXNz ZWQpIHsKICAgICAgICAgICAgIGRhdGFQbGFuZXNbaV0gPSBkZXZpY2UucmVhZChkYXRhTGVuZ3Ro KTsKIAotICAgICAgICB9IGVsc2UgaWYgKHVzZUNvbXByZXNzaW9uID09IENvbXByZXNzaW9uOjpS TEUpIHsKKyAgICAgICAgfSBlbHNlIGlmICh1c2VDb21wcmVzc2lvbiA9PSBwc2RfY29tcHJlc3Np b25fdHlwZTo6UkxFKSB7CiAgICAgICAgICAgICBjb25zdCBpbnQgbnVtUm93cyA9IHBsYW5lUmVj dC5oZWlnaHQoKTsKIAogICAgICAgICAgICAgUVZlY3RvcjxxdWludDE2PiByb3dTaXplczsKQEAg LTMzNSw3ICszMzUsNyBAQCBRSW1hZ2UgcmVhZFZpcnR1YWxBcnJheUxpc3QoUUlPRGV2aWNlICZk ZXZpY2UsIGludCBudW1QbGFuZXMpCiAgICAgICAgICAgICAgICAgICAgIHRocm93IEFTTFBhcnNl RXhjZXB0aW9uKCJWQUxpc3Q6IGZhaWxlZCB0byByZWFkIGNvbXByZXNzZWQgZGF0YSEiKTsKICAg ICAgICAgICAgICAgICB9CiAKLSAgICAgICAgICAgICAgICBRQnl0ZUFycmF5IHVuY29tcHJlc3Nl ZERhdGEgPSBDb21wcmVzc2lvbjo6dW5jb21wcmVzcyhwbGFuZVJlY3Qud2lkdGgoKSAqIGNoYW5u ZWxTaXplLCBjb21wcmVzc2VkRGF0YSwgQ29tcHJlc3Npb246OlJMRSk7CisgICAgICAgICAgICAg ICAgUUJ5dGVBcnJheSB1bmNvbXByZXNzZWREYXRhID0gQ29tcHJlc3Npb246OnVuY29tcHJlc3Mo cGxhbmVSZWN0LndpZHRoKCkgKiBjaGFubmVsU2l6ZSwgY29tcHJlc3NlZERhdGEsIHBzZF9jb21w cmVzc2lvbl90eXBlOjpSTEUpOwogCiAgICAgICAgICAgICAgICAgaWYgKHVuY29tcHJlc3NlZERh dGEuc2l6ZSgpICE9IHBsYW5lUmVjdC53aWR0aCgpKSB7CiAgICAgICAgICAgICAgICAgICAgIHRo cm93IEFTTFBhcnNlRXhjZXB0aW9uKCJWQUxpc3Q6IGZhaWxlZCB0byBkZWNvbXByZXNzIGRhdGEh Iik7CmRpZmYgLS1naXQgYS9saWJzL3BzZHV0aWxzL2NvbXByZXNzaW9uLmNwcCBiL2xpYnMvcHNk dXRpbHMvY29tcHJlc3Npb24uY3BwCmluZGV4IGYyMjAzZjA2MDMuLmE0ZTIyNWVkYTEgMTAwNjQ0 Ci0tLSBhL2xpYnMvcHNkdXRpbHMvY29tcHJlc3Npb24uY3BwCisrKyBiL2xpYnMvcHNkdXRpbHMv Y29tcHJlc3Npb24uY3BwCkBAIC0xLDI0ICsxLDMxIEBACiAvKgorICogIFNQRFgtRmlsZUNvcHly aWdodFRleHQ6IDIwMDQtMjAwNyBHcmFwaGVzdCBTb2Z0d2FyZSA8bGlicHNkQGdyYXBoZXN0LmNv bT4KICAqICBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDA3IEpvaG4gTWFyc2hhbGwKICAqICBT UERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDEwIEJvdWRld2lqbiBSZW1wdCA8Ym91ZEB2YWxkeWFz Lm9yZz4KKyAqICBTUERYLUZpbGVDb3B5cmlnaHRUZXh0OiAyMDIxIEwuIEUuIFNlZ292aWEgPGFt eUBhbXlzcGFyay5tZT4KICAqCiAgKiAgU1BEWC1MaWNlbnNlLUlkZW50aWZpZXI6IEdQTC0yLjAt b3ItbGF0ZXIKICAqLworCiAjaW5jbHVkZSAiY29tcHJlc3Npb24uaCIKIAotI2luY2x1ZGUgImtp c19kZWJ1Zy5oIgotI2luY2x1ZGUgInBzZF91dGlscy5oIgogI2luY2x1ZGUgPFFCdWZmZXI+CiAj aW5jbHVkZSA8UXRFbmRpYW4+CisjaW5jbHVkZSA8emxpYi5oPgorCisjaW5jbHVkZSA8a2lzX2Rl YnVnLmg+CisjaW5jbHVkZSA8cHNkX3V0aWxzLmg+CiAKK25hbWVzcGFjZSBLaXNSTEUKK3sKIC8v IGZyb20gZ2ltcCdzIHBzZC1zYXZlLmMKLXN0YXRpYyBxdWludDMyIHBhY2tfcGJfbGluZShjb25z dCBRQnl0ZUFycmF5ICZzcmMsIFFCeXRlQXJyYXkgJmRzdCkKK2ludCBjb21wcmVzcyhjb25zdCBR Qnl0ZUFycmF5ICZzcmMsIFFCeXRlQXJyYXkgJmRzdCkKIHsKLSAgICBxdWludDMyIGxlbmd0aCA9 IHNyYy5zaXplKCk7CisgICAgaW50IGxlbmd0aCA9IHNyYy5zaXplKCk7CiAgICAgZHN0LnJlc2l6 ZShsZW5ndGggKiAyKTsKICAgICBkc3QuZmlsbCgwLCBsZW5ndGggKiAyKTsKIAotICAgIHF1aW50 MzIgcmVtYWluaW5nID0gbGVuZ3RoOworICAgIGludCByZW1haW5pbmcgPSBsZW5ndGg7CiAgICAg cXVpbnQ4IGksIGo7CiAgICAgcXVpbnQzMiBkZXN0X3B0ciA9IDA7CiAgICAgY29uc3QgY2hhciAq c3RhcnQgPSBzcmMuY29uc3REYXRhKCk7CkBAIC0zMiwxNCArMzksMTMgQEAgc3RhdGljIHF1aW50 MzIgcGFja19wYl9saW5lKGNvbnN0IFFCeXRlQXJyYXkgJnNyYywgUUJ5dGVBcnJheSAmZHN0KQog CiAgICAgICAgIGlmIChpID4gMSkgLyogTWF0Y2ggZm91bmQgKi8KICAgICAgICAgewotICAgICAg ICAgICAgZHN0W2Rlc3RfcHRyKytdID0gLShpIC0gMSk7CisgICAgICAgICAgICBkc3RbZGVzdF9w dHIrK10gPSBzdGF0aWNfY2FzdDxjaGFyPigtKGkgLSAxKSk7CiAgICAgICAgICAgICBkc3RbZGVz dF9wdHIrK10gPSAqc3RhcnQ7CiAKICAgICAgICAgICAgIHN0YXJ0ICs9IGk7CiAgICAgICAgICAg ICByZW1haW5pbmcgLT0gaTsKICAgICAgICAgICAgIGxlbmd0aCArPSAyOwotICAgICAgICB9IGVs c2UgLyogTG9vayBmb3IgY2hhcmFjdGVycyBkaWZmZXJlbnQgZnJvbSB0aGUgcHJldmlvdXMgKi8K LSAgICAgICAgeworICAgICAgICB9IGVsc2UgeyAvKiBMb29rIGZvciBjaGFyYWN0ZXJzIGRpZmZl cmVudCBmcm9tIHRoZSBwcmV2aW91cyAqLwogICAgICAgICAgICAgaSA9IDA7CiAgICAgICAgICAg ICB3aGlsZSAoKGkgPCAxMjgpICYmIChyZW1haW5pbmcgLSAoaSArIDEpID4gMCkgJiYgKHN0YXJ0 W2ldICE9IHN0YXJ0WyhpICsgMSldIHx8IHJlbWFpbmluZyAtIChpICsgMikgPD0gMCB8fCBzdGFy dFtpXSAhPSBzdGFydFsoaSArIDIpXSkpCiAgICAgICAgICAgICAgICAgaSsrOwpAQCAtNTMsNyAr NTksNyBAQCBzdGF0aWMgcXVpbnQzMiBwYWNrX3BiX2xpbmUoY29uc3QgUUJ5dGVBcnJheSAmc3Jj LCBRQnl0ZUFycmF5ICZkc3QpCiAKICAgICAgICAgICAgIGlmIChpID4gMCkgLyogU29tZSBkaXN0 aW5jdCBvbmVzIGZvdW5kICovCiAgICAgICAgICAgICB7Ci0gICAgICAgICAgICAgICAgZHN0W2Rl c3RfcHRyKytdID0gaSAtIDE7CisgICAgICAgICAgICAgICAgZHN0W2Rlc3RfcHRyKytdID0gc3Rh dGljX2Nhc3Q8Y2hhcj4oaSAtIDFVKTsKICAgICAgICAgICAgICAgICBmb3IgKGogPSAwOyBqIDwg aTsgaisrKSB7CiAgICAgICAgICAgICAgICAgICAgIGRzdFtkZXN0X3B0cisrXSA9IHN0YXJ0W2pd OwogICAgICAgICAgICAgICAgIH0KQEAgLTY3LDE4ICs3MywzMiBAQCBzdGF0aWMgcXVpbnQzMiBw YWNrX3BiX2xpbmUoY29uc3QgUUJ5dGVBcnJheSAmc3JjLCBRQnl0ZUFycmF5ICZkc3QpCiAgICAg cmV0dXJuIGxlbmd0aDsKIH0KIAorUUJ5dGVBcnJheSBjb21wcmVzcyhjb25zdCBRQnl0ZUFycmF5 ICZkYXRhKQoreworICAgIFFCeXRlQXJyYXkgb3V0cHV0OworICAgIGNvbnN0IGludCByZXN1bHQg PSBLaXNSTEU6OmNvbXByZXNzKGRhdGEsIG91dHB1dCk7CisgICAgaWYgKHJlc3VsdCA8PSAwKQor ICAgICAgICByZXR1cm4gUUJ5dGVBcnJheSgpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIG91 dHB1dDsKK30KKwogLy8gZnJvbSBnaW1wJ3MgcHNkLXV0aWwuYwotcXVpbnQzMiBkZWNvZGVfcGFj a2JpdHMoY29uc3QgY2hhciAqc3JjLCBjaGFyICpkc3QsIHF1aW50MTYgcGFja2VkX2xlbiwgcXVp bnQzMiB1bnBhY2tlZF9sZW4pCitpbnQgZGVjb21wcmVzcyhjb25zdCBRQnl0ZUFycmF5ICZpbnB1 dCwgUUJ5dGVBcnJheSAmb3V0cHV0LCBpbnQgdW5wYWNrZWRfbGVuKQogeworICAgIG91dHB1dC5y ZXNpemUodW5wYWNrZWRfbGVuKTsKKwogICAgIC8qCiAgICAgICogIERlY29kZSBhIFBhY2tCaXRz IGNodW5rLgogICAgICAqLwogICAgIHFpbnQzMiBuOworICAgIGNvbnN0IGNoYXIgKnNyYyA9IGlu cHV0LmRhdGEoKTsKKyAgICBjaGFyICpkc3QgPSBvdXRwdXQuZGF0YSgpOwogICAgIGNoYXIgZGF0 OwotICAgIHFpbnQzMiB1bnBhY2tfbGVmdCA9IHVucGFja2VkX2xlbjsKLSAgICBxaW50MzIgcGFj a19sZWZ0ID0gcGFja2VkX2xlbjsKKyAgICBpbnQgdW5wYWNrX2xlZnQgPSB1bnBhY2tlZF9sZW47 CisgICAgaW50IHBhY2tfbGVmdCA9IGlucHV0LnNpemUoKTsKICAgICBxaW50MzIgZXJyb3JfY29k ZSA9IDA7Ci0gICAgcWludDMyIHJldHVybl92YWwgPSAwOworICAgIGludCByZXR1cm5fdmFsID0g MDsKIAogICAgIHdoaWxlICh1bnBhY2tfbGVmdCA+IDAgJiYgcGFja19sZWZ0ID4gMCkgewogICAg ICAgICBuID0gKnNyYzsKQEAgLTE2MywzNiArMTgzLDIwNSBAQCBxdWludDMyIGRlY29kZV9wYWNr Yml0cyhjb25zdCBjaGFyICpzcmMsIGNoYXIgKmRzdCwgcXVpbnQxNiBwYWNrZWRfbGVuLCBxdWlu dDMyCiAgICAgcmV0dXJuIHJldHVybl92YWw7CiB9CiAKLVFCeXRlQXJyYXkgQ29tcHJlc3Npb246 OnVuY29tcHJlc3MocXVpbnQzMiB1bnBhY2tlZF9sZW4sIFFCeXRlQXJyYXkgYnl0ZXMsIENvbXBy ZXNzaW9uOjpDb21wcmVzc2lvblR5cGUgY29tcHJlc3Npb25UeXBlKQorUUJ5dGVBcnJheSBkZWNv bXByZXNzKGNvbnN0IFFCeXRlQXJyYXkgJmRhdGEsIGludCBleHBlY3RlZF9sZW5ndGgpCiB7Ci0g ICAgaWYgKHVucGFja2VkX2xlbiA+IDMwMDAwKQorICAgIFFCeXRlQXJyYXkgb3V0cHV0KGV4cGVj dGVkX2xlbmd0aCwgJ1wwJyk7CisgICAgY29uc3QgaW50IHJlc3VsdCA9IEtpc1JMRTo6ZGVjb21w cmVzcyhkYXRhLCBvdXRwdXQsIGV4cGVjdGVkX2xlbmd0aCk7CisgICAgaWYgKHJlc3VsdCAhPSAw KQogICAgICAgICByZXR1cm4gUUJ5dGVBcnJheSgpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJu IG91dHB1dDsKK30KK30gLy8gbmFtZXNwYWNlIEtpc1JMRQorCituYW1lc3BhY2UgS2lzWmlwCit7 CisvLyBCYXNlZCBvbiB0aGUgcmV2ZXJzZSBvZiBwc2RfdW56aXBfd2l0aG91dF9wcmVkaWN0aW9u CitpbnQgY29tcHJlc3MoY29uc3QgY2hhciAqaW5wdXQsIGludCB1bnBhY2tlZF9sZW4sIGNoYXIg KmRzdCwgaW50IG1heG91dCkKK3sKKyAgICB6X3N0cmVhbSBzdHJlYW17fTsKKyAgICBpbnQgc3Rh dGU7CisKKyAgICBzdHJlYW0uZGF0YV90eXBlID0gWl9CSU5BUlk7CisgICAgc3RyZWFtLm5leHRf aW4gPSBjb25zdF9jYXN0PEJ5dGVmICo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQnl0ZWYgKj4o aW5wdXQpKTsKKyAgICBzdHJlYW0uYXZhaWxfaW4gPSBzdGF0aWNfY2FzdDx1SW50Pih1bnBhY2tl ZF9sZW4pOworICAgIHN0cmVhbS5uZXh0X291dCA9IHJlaW50ZXJwcmV0X2Nhc3Q8Qnl0ZWYgKj4o ZHN0KTsKKyAgICBzdHJlYW0uYXZhaWxfb3V0ID0gc3RhdGljX2Nhc3Q8dUludD4obWF4b3V0KTsK KworICAgIGRiZ0ZpbGUgPDwgIkV4cGVjdGVkIHVucGFja2VkIGxlbmd0aDoiIDw8IHVucGFja2Vk X2xlbiA8PCAiLCBtYXhvdXQ6IiA8PCBtYXhvdXQ7CisKKyAgICBpZiAoZGVmbGF0ZUluaXQoJnN0 cmVhbSwgLTEpICE9IFpfT0spIHsKKyAgICAgICAgZGJnRmlsZSA8PCAiRmFpbGVkIGRlZmxhdGUg aW5pdGlhbGl6YXRpb24iOworICAgICAgICByZXR1cm4gMDsKKyAgICB9CisKKyAgICBpbnQgZmx1 c2ggPSBaX1BBUlRJQUxfRkxVU0g7CisKKyAgICBkbyB7CisgICAgICAgIHN0YXRlID0gZGVmbGF0 ZSgmc3RyZWFtLCBmbHVzaCk7CisgICAgICAgIGlmIChzdGF0ZSA9PSBaX1NUUkVBTV9FTkQpIHsK KyAgICAgICAgICAgIGRiZ0ZpbGUgPDwgIkZpbmlzaGVkIGRlZmxhdGluZyI7CisgICAgICAgICAg ICBmbHVzaCA9IFpfRklOSVNIOworICAgICAgICB9IGVsc2UgaWYgKHN0YXRlICE9IFpfT0spIHsK KyAgICAgICAgICAgIGRiZ0ZpbGUgPDwgIkVycm9yIGRlZmxhdGluZyIgPDwgc3RhdGUgPDwgc3Ry ZWFtLm1zZzsKKyAgICAgICAgICAgIGJyZWFrOworICAgICAgICB9CisgICAgfSB3aGlsZSAoc3Ry ZWFtLmF2YWlsX2luID4gMCk7CisKKyAgICBpZiAoc3RhdGUgIT0gWl9PSyB8fCBzdHJlYW0uYXZh aWxfaW4gPiAwKSB7CisgICAgICAgIGRiZ0ZpbGUgPDwgIkZhaWxlZCBkZWZsYXRpbmciIDw8IHN0 YXRlIDw8IHN0cmVhbS5tc2c7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIGRiZ0Zp bGUgPDwgIlN1Y2Nlc3MsIGRlZmxhdGVkIHNpemU6IiA8PCBzdHJlYW0udG90YWxfb3V0OworCisg ICAgcmV0dXJuIHN0YXRpY19jYXN0PGludD4oc3RyZWFtLnRvdGFsX291dCk7Cit9CisKK1FCeXRl QXJyYXkgY29tcHJlc3MoY29uc3QgUUJ5dGVBcnJheSAmZGF0YSkKK3sKKyAgICBRQnl0ZUFycmF5 IG91dHB1dChkYXRhLmxlbmd0aCgpICogNCwgJ1wwJyk7CisgICAgY29uc3QgaW50IHJlc3VsdCA9 IEtpc1ppcDo6Y29tcHJlc3MoZGF0YS5jb25zdERhdGEoKSwgZGF0YS5zaXplKCksIG91dHB1dC5k YXRhKCksIG91dHB1dC5zaXplKCkpOworICAgIG91dHB1dC5yZXNpemUocmVzdWx0KTsKKyAgICBy ZXR1cm4gb3V0cHV0OworfQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qIFR3byBmdW5jdGlvbnMgY29w aWVkIGZyb20gdGhlIGFiYW5kb25lZCBQU0RQYXJzZSBsaWJyYXJ5IChHUEwpICAgICAqLworLyog U2VlOiBodHRwOi8vd3d3LnRlbGVncmFwaGljcy5jb20uYXUvc3ZuL3BzZHBhcnNlL3RydW5rL3Bz ZF96aXAuYyAgICovCisvKiBDcmVhdGVkIGJ5IFBhdHJpY2sgaW4gMjAwNy4wMi4wMiwgbGlicHNk QGdyYXBoZXN0LmNvbSAgICAgICAgICAgICAgKi8KKy8qIE1vZGlmaWNhdGlvbnMgYnkgVG9ieSBU aGFpbiA8dG9ieUB0ZWxlZ3JhcGhpY3MuY29tLmF1PiAgICAgICAgICAgICAqLworLyogUmVmYWN0 b3JlZCBieSBMLiBFLiBTZWdvdmlhIDxhbXlAYW15c3BhcmsubWU+LCAyMDIxLjA2LjMwICAgICAg ICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKi8KK2ludCBwc2RfdW56aXBfd2l0aG91dF9wcmVkaWN0aW9u KGNvbnN0IGNoYXIgKnNyYywgaW50IHBhY2tlZF9sZW4sIGNoYXIgKmRzdCwgaW50IHVucGFja2Vk X2xlbikKK3sKKyAgICB6X3N0cmVhbSBzdHJlYW17fTsKKyAgICBpbnQgc3RhdGU7CisKKyAgICBz dHJlYW0uZGF0YV90eXBlID0gWl9CSU5BUlk7CisgICAgc3RyZWFtLm5leHRfaW4gPSBjb25zdF9j YXN0PEJ5dGVmICo+KHJlaW50ZXJwcmV0X2Nhc3Q8Y29uc3QgQnl0ZWYgKj4oc3JjKSk7CisgICAg c3RyZWFtLmF2YWlsX2luID0gc3RhdGljX2Nhc3Q8dUludD4ocGFja2VkX2xlbik7CisgICAgc3Ry ZWFtLm5leHRfb3V0ID0gcmVpbnRlcnByZXRfY2FzdDxCeXRlZiAqPihkc3QpOworICAgIHN0cmVh bS5hdmFpbF9vdXQgPSBzdGF0aWNfY2FzdDx1SW50Pih1bnBhY2tlZF9sZW4pOworCisgICAgaWYg KGluZmxhdGVJbml0KCZzdHJlYW0pICE9IFpfT0spCisgICAgICAgIHJldHVybiAwOworCisgICAg aW50IGZsdXNoID0gWl9QQVJUSUFMX0ZMVVNIOworCisgICAgZG8geworICAgICAgICBzdGF0ZSA9 IGluZmxhdGUoJnN0cmVhbSwgZmx1c2gpOworICAgICAgICBpZiAoc3RhdGUgPT0gWl9TVFJFQU1f RU5EKSB7CisgICAgICAgICAgICBkYmdGaWxlIDw8ICJGaW5pc2hlZCBpbmZsYXRpbmciOworICAg ICAgICAgICAgYnJlYWs7CisgICAgICAgIH0gZWxzZSBpZiAoc3RhdGUgPT0gWl9EQVRBX0VSUk9S KSB7CisgICAgICAgICAgICBkYmdGaWxlIDw8ICJFcnJvciBpbmZsYXRpbmciIDw8IHN0YXRlIDw8 IHN0cmVhbS5tc2c7CisgICAgICAgICAgICBpZiAoaW5mbGF0ZVN5bmMoJnN0cmVhbSkgIT0gWl9P SykKKyAgICAgICAgICAgICAgICByZXR1cm4gMDsKKyAgICAgICAgICAgIGNvbnRpbnVlOworICAg ICAgICB9CisgICAgfSB3aGlsZSAoc3RyZWFtLmF2YWlsX291dCA+IDApOworCisgICAgaWYgKChz dGF0ZSAhPSBaX1NUUkVBTV9FTkQgJiYgc3RhdGUgIT0gWl9PSykgfHwgc3RyZWFtLmF2YWlsX291 dCA+IDApIHsKKyAgICAgICAgZGJnRmlsZSA8PCAiRmFpbGVkIGluZmxhdGluZyIgPDwgc3RhdGUg PDwgc3RyZWFtLm1zZzsKKyAgICAgICAgcmV0dXJuIDA7CisgICAgfQorCisgICAgcmV0dXJuIHN0 YXRpY19jYXN0PGludD4oc3RyZWFtLnRvdGFsX291dCk7Cit9CisKK1FCeXRlQXJyYXkgcHNkX3Vu emlwX3dpdGhfcHJlZGljdGlvbihjb25zdCBRQnl0ZUFycmF5ICZzcmMsIGludCBkc3RfbGVuLCBp bnQgcm93X3NpemUsIGludCBjb2xvcl9kZXB0aCkKK3sKKyAgICBpbnQgbGVuOworCisgICAgUUJ5 dGVBcnJheSBkc3RfYnVmID0gQ29tcHJlc3Npb246OnVuY29tcHJlc3MoZHN0X2xlbiwgc3JjLCBw c2RfY29tcHJlc3Npb25fdHlwZTo6WklQKTsKKyAgICBpZiAoZHN0X2J1Zi5zaXplKCkgPT0gMCkK KyAgICAgICAgcmV0dXJuIGRzdF9idWY7CisKKyAgICBjaGFyICpidWYgPSBkc3RfYnVmLmRhdGEo KTsKKyAgICBkbyB7CisgICAgICAgIGxlbiA9IHJvd19zaXplOworICAgICAgICBpZiAoY29sb3Jf ZGVwdGggPT0gMTYpIHsKKyAgICAgICAgICAgIHdoaWxlICgtLWxlbikgeworICAgICAgICAgICAg ICAgIGJ1ZlsyXSArPSBidWZbMF0gKyAoKGJ1ZlsxXSArIGJ1ZlszXSkgPj4gOCk7CisgICAgICAg ICAgICAgICAgYnVmWzNdICs9IGJ1ZlsxXTsKKyAgICAgICAgICAgICAgICBidWYgKz0gMjsKKyAg ICAgICAgICAgIH0KKyAgICAgICAgICAgIGJ1ZiArPSAyOworICAgICAgICAgICAgZHN0X2xlbiAt PSByb3dfc2l6ZSAqIDI7CisgICAgICAgIH0gZWxzZSB7CisgICAgICAgICAgICB3aGlsZSAoLS1s ZW4pIHsKKyAgICAgICAgICAgICAgICAqKGJ1ZiArIDEpICs9ICpidWY7CisgICAgICAgICAgICAg ICAgYnVmKys7CisgICAgICAgICAgICB9CisgICAgICAgICAgICBidWYrKzsKKyAgICAgICAgICAg IGRzdF9sZW4gLT0gcm93X3NpemU7CisgICAgICAgIH0KKyAgICB9IHdoaWxlIChkc3RfbGVuID4g MCk7CisKKyAgICByZXR1cm4gZHN0X2J1ZjsKK30KKworLyoqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiBFbmQg b2YgdGhpcmQgcGFydHkgYmxvY2sgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAg ICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioq KioqKioqKioqKioqKioqKioqKioqKioqLworCitRQnl0ZUFycmF5IHBzZF96aXBfd2l0aF9wcmVk aWN0aW9uKGNvbnN0IFFCeXRlQXJyYXkgJnNyYywgaW50IHJvd19zaXplLCBpbnQgY29sb3JfZGVw dGgpCit7CisgICAgUUJ5dGVBcnJheSB0ZW1wYnVmKHNyYyk7CisKKyAgICBpbnQgbGVuOworICAg IGludCBkc3RfbGVuID0gc3JjLnNpemUoKTsKKworICAgIGNoYXIgKmJ1ZiA9IHRlbXBidWYuZGF0 YSgpOworICAgIGRvIHsKKyAgICAgICAgbGVuID0gcm93X3NpemU7CisgICAgICAgIGlmIChjb2xv cl9kZXB0aCA9PSAxNikgeworICAgICAgICAgICAgd2hpbGUgKC0tbGVuKSB7CisgICAgICAgICAg ICAgICAgYnVmWzJdIC09IGJ1ZlswXSArICgoYnVmWzFdICsgYnVmWzNdKSA+PiA4KTsKKyAgICAg ICAgICAgICAgICBidWZbM10gLT0gYnVmWzFdOworICAgICAgICAgICAgICAgIGJ1ZiArPSAyOwor ICAgICAgICAgICAgfQorICAgICAgICAgICAgYnVmICs9IDI7CisgICAgICAgICAgICBkc3RfbGVu IC09IHJvd19zaXplICogMjsKKyAgICAgICAgfSBlbHNlIHsKKyAgICAgICAgICAgIHdoaWxlICgt LWxlbikgeworICAgICAgICAgICAgICAgICooYnVmICsgMSkgLT0gKmJ1ZjsKKyAgICAgICAgICAg ICAgICBidWYrKzsKKyAgICAgICAgICAgIH0KKyAgICAgICAgICAgIGJ1ZisrOworICAgICAgICAg ICAgZHN0X2xlbiAtPSByb3dfc2l6ZTsKKyAgICAgICAgfQorICAgIH0gd2hpbGUgKGRzdF9sZW4g PiAwKTsKKworICAgIHJldHVybiBDb21wcmVzc2lvbjo6Y29tcHJlc3ModGVtcGJ1ZiwgcHNkX2Nv bXByZXNzaW9uX3R5cGU6OlpJUCk7Cit9CisKK1FCeXRlQXJyYXkgZGVjb21wcmVzcyhjb25zdCBR Qnl0ZUFycmF5ICZkYXRhLCBpbnQgZXhwZWN0ZWRfbGVuZ3RoKQoreworICAgIFFCeXRlQXJyYXkg b3V0cHV0KGV4cGVjdGVkX2xlbmd0aCwgJ1wwJyk7CisgICAgY29uc3QgaW50IHJlc3VsdCA9IHBz ZF91bnppcF93aXRob3V0X3ByZWRpY3Rpb24oZGF0YS5jb25zdERhdGEoKSwgZGF0YS5zaXplKCks IG91dHB1dC5kYXRhKCksIGV4cGVjdGVkX2xlbmd0aCk7CisgICAgaWYgKHJlc3VsdCA9PSAwKQor ICAgICAgICByZXR1cm4gUUJ5dGVBcnJheSgpOworICAgIGVsc2UKKyAgICAgICAgcmV0dXJuIG91 dHB1dDsKK30KK30gLy8gbmFtZXNwYWNlIEtpc1ppcAorCitRQnl0ZUFycmF5IENvbXByZXNzaW9u Ojp1bmNvbXByZXNzKGludCB1bnBhY2tlZF9sZW4sIFFCeXRlQXJyYXkgYnl0ZXMsIHBzZF9jb21w cmVzc2lvbl90eXBlIGNvbXByZXNzaW9uVHlwZSwgaW50IHJvd19zaXplLCBpbnQgY29sb3JfZGVw dGgpCit7CiAgICAgaWYgKGJ5dGVzLnNpemUoKSA8IDEpCiAgICAgICAgIHJldHVybiBRQnl0ZUFy cmF5KCk7CiAKICAgICBzd2l0Y2ggKGNvbXByZXNzaW9uVHlwZSkgewogICAgIGNhc2UgVW5jb21w cmVzc2VkOgogICAgICAgICByZXR1cm4gYnl0ZXM7Ci0gICAgY2FzZSBSTEU6IHsKLSAgICAgICAg UUJ5dGVBcnJheSBiYTsKLSAgICAgICAgYmEucmVzaXplKHN0YXRpY19jYXN0PGludD4odW5wYWNr ZWRfbGVuKSk7Ci0gICAgICAgIGRlY29kZV9wYWNrYml0cyhieXRlcy5jb25zdERhdGEoKSwgYmEu ZGF0YSgpLCBzdGF0aWNfY2FzdDxxdWludDE2PihieXRlcy5sZW5ndGgoKSksIHVucGFja2VkX2xl bik7Ci0gICAgICAgIHJldHVybiBiYTsKLSAgICB9CisgICAgY2FzZSBSTEU6CisgICAgICAgIHJl dHVybiBLaXNSTEU6OmRlY29tcHJlc3MoYnl0ZXMsIHVucGFja2VkX2xlbik7CiAgICAgY2FzZSBa SVA6Ci0gICAgY2FzZSBaSVBXaXRoUHJlZGljdGlvbjogewotICAgICAgICAvLyBwcmVwZW5kIHRo ZSBleHBlY3RlZCBsZW5ndGggb2YgdGhlIHBpeGVscyBpbiBiaWctZW5kaWFuCi0gICAgICAgIC8v IGZvcm1hdCB0byB0aGUgYnl0ZSBhcnJheSBhcyBxVW5jb21wcmVzcyBleHBlY3RzLi4uCi0KLSAg ICAgICAgUUJ5dGVBcnJheSBiOwotICAgICAgICBRQnVmZmVyIGJ1ZigmYik7Ci0gICAgICAgIHF1 aW50MzIgdmFsID0gcUZyb21CaWdFbmRpYW4odW5wYWNrZWRfbGVuKTsKLSAgICAgICAgYnVmLndy aXRlKChjaGFyICopJnZhbCwgNCk7Ci0gICAgICAgIGIuYXBwZW5kKGJ5dGVzKTsKLQotICAgICAg ICAvLyBhbmQgbGV0J3MgaG9wZSB0aGF0IHRoaXMgaXMgc3VmZmljaWVudC4uLgotICAgICAgICBy ZXR1cm4gcVVuY29tcHJlc3MoYik7Ci0gICAgfQorICAgICAgICByZXR1cm4gS2lzWmlwOjpkZWNv bXByZXNzKGJ5dGVzLCB1bnBhY2tlZF9sZW4pOworICAgIGNhc2UgWklQV2l0aFByZWRpY3Rpb246 CisgICAgICAgIHJldHVybiBLaXNaaXA6OnBzZF91bnppcF93aXRoX3ByZWRpY3Rpb24oYnl0ZXMs IHVucGFja2VkX2xlbiwgcm93X3NpemUsIGNvbG9yX2RlcHRoKTsKICAgICBkZWZhdWx0OgogICAg ICAgICBxRmF0YWwoIkNhbm5vdCB1bmNvbXByZXNzIGxheWVyIGRhdGE6IGludmFsaWQgY29tcHJl c3Npb24gdHlwZSIpOwogICAgIH0KQEAgLTIwMCw3ICszODksNyBAQCBRQnl0ZUFycmF5IENvbXBy ZXNzaW9uOjp1bmNvbXByZXNzKHF1aW50MzIgdW5wYWNrZWRfbGVuLCBRQnl0ZUFycmF5IGJ5dGVz LCBDb21wcgogICAgIHJldHVybiBRQnl0ZUFycmF5KCk7CiB9CiAKLVFCeXRlQXJyYXkgQ29tcHJl c3Npb246OmNvbXByZXNzKFFCeXRlQXJyYXkgYnl0ZXMsIENvbXByZXNzaW9uOjpDb21wcmVzc2lv blR5cGUgY29tcHJlc3Npb25UeXBlKQorUUJ5dGVBcnJheSBDb21wcmVzc2lvbjo6Y29tcHJlc3Mo UUJ5dGVBcnJheSBieXRlcywgcHNkX2NvbXByZXNzaW9uX3R5cGUgY29tcHJlc3Npb25UeXBlLCBp bnQgcm93X3NpemUsIGludCBjb2xvcl9kZXB0aCkKIHsKICAgICBpZiAoYnl0ZXMuc2l6ZSgpIDwg MSkKICAgICAgICAgcmV0dXJuIFFCeXRlQXJyYXkoKTsKQEAgLTIwOCwxNiArMzk3LDEyIEBAIFFC eXRlQXJyYXkgQ29tcHJlc3Npb246OmNvbXByZXNzKFFCeXRlQXJyYXkgYnl0ZXMsIENvbXByZXNz aW9uOjpDb21wcmVzc2lvblR5cGUKICAgICBzd2l0Y2ggKGNvbXByZXNzaW9uVHlwZSkgewogICAg IGNhc2UgVW5jb21wcmVzc2VkOgogICAgICAgICByZXR1cm4gYnl0ZXM7Ci0gICAgY2FzZSBSTEU6 IHsKLSAgICAgICAgUUJ5dGVBcnJheSBkc3Q7Ci0gICAgICAgIGludCBwYWNrZWRfbGVuID0gcGFj a19wYl9saW5lKGJ5dGVzLCBkc3QpOwotICAgICAgICBRX0FTU0VSVChwYWNrZWRfbGVuID09IGRz dC5zaXplKCkpOwotICAgICAgICBRX1VOVVNFRChwYWNrZWRfbGVuKTsKLSAgICAgICAgcmV0dXJu IGRzdDsKLSAgICB9CisgICAgY2FzZSBSTEU6CisgICAgICAgIHJldHVybiBLaXNSTEU6OmNvbXBy ZXNzKGJ5dGVzKTsKICAgICBjYXNlIFpJUDoKKyAgICAgICAgcmV0dXJuIEtpc1ppcDo6Y29tcHJl c3MoYnl0ZXMpOwogICAgIGNhc2UgWklQV2l0aFByZWRpY3Rpb246Ci0gICAgICAgIHJldHVybiBx Q29tcHJlc3MoYnl0ZXMpOworICAgICAgICByZXR1cm4gS2lzWmlwOjpwc2RfemlwX3dpdGhfcHJl ZGljdGlvbihieXRlcywgcm93X3NpemUsIGNvbG9yX2RlcHRoKTsKICAgICBkZWZhdWx0OgogICAg ICAgICBxRmF0YWwoIkNhbm5vdCBjb21wcmVzcyBsYXllciBkYXRhOiBpbnZhbGlkIGNvbXByZXNz aW9uIHR5cGUiKTsKICAgICB9CmRpZmYgLS1naXQgYS9saWJzL3BzZHV0aWxzL2NvbXByZXNzaW9u LmggYi9saWJzL3BzZHV0aWxzL2NvbXByZXNzaW9uLmgKaW5kZXggMTBmMGEwNWM1OS4uNTdiY2U0 YTY1MSAxMDA2NDQKLS0tIGEvbGlicy9wc2R1dGlscy9jb21wcmVzc2lvbi5oCisrKyBiL2xpYnMv cHNkdXRpbHMvY29tcHJlc3Npb24uaApAQCAtMSw1ICsxLDYgQEAKIC8qCiAgKiAgU1BEWC1GaWxl Q29weXJpZ2h0VGV4dDogMjAxMCBCb3VkZXdpam4gUmVtcHQgPGJvdWRAdmFsZHlhcy5vcmc+Cisg KiAgU1BEWC1GaWxlQ29weXJpZ2h0VGV4dDogMjAyMSBMLiBFLiBTZWdvdmlhIDxhbXlAYW15c3Bh cmsubWU+CiAgKgogICogIFNQRFgtTGljZW5zZS1JZGVudGlmaWVyOiBHUEwtMi4wLW9yLWxhdGVy CiAgKi8KQEAgLTcsMTUgKzgsMTUgQEAKICNkZWZpbmUgQ09NUFJFU1NJT05fSAogCiAjaW5jbHVk ZSAia3JpdGFwc2R1dGlsc19leHBvcnQuaCIKKwogI2luY2x1ZGUgPFFCeXRlQXJyYXk+CisjaW5j bHVkZSA8cHNkLmg+CiAKIGNsYXNzIEtSSVRBUFNEVVRJTFNfRVhQT1JUIENvbXByZXNzaW9uCiB7 CiBwdWJsaWM6Ci0gICAgZW51bSBDb21wcmVzc2lvblR5cGUgeyBVbmNvbXByZXNzZWQgPSAwLCBS TEUsIFpJUCwgWklQV2l0aFByZWRpY3Rpb24sIFVua25vd24gfTsKLQotICAgIHN0YXRpYyBRQnl0 ZUFycmF5IHVuY29tcHJlc3MocXVpbnQzMiB1bnBhY2tlZF9sZW4sIFFCeXRlQXJyYXkgYnl0ZXMs IENvbXByZXNzaW9uVHlwZSBjb21wcmVzc2lvblR5cGUpOwotICAgIHN0YXRpYyBRQnl0ZUFycmF5 IGNvbXByZXNzKFFCeXRlQXJyYXkgYnl0ZXMsIENvbXByZXNzaW9uVHlwZSBjb21wcmVzc2lvblR5 cGUpOworICAgIHN0YXRpYyBRQnl0ZUFycmF5IHVuY29tcHJlc3MoaW50IHVucGFja2VkX2xlbiwg UUJ5dGVBcnJheSBieXRlcywgcHNkX2NvbXByZXNzaW9uX3R5cGUgY29tcHJlc3Npb25UeXBlLCBp bnQgcm93X3NpemUgPSAwLCBpbnQgY29sb3JfZGVwdGggPSAwKTsKKyAgICBzdGF0aWMgUUJ5dGVB cnJheSBjb21wcmVzcyhRQnl0ZUFycmF5IGJ5dGVzLCBwc2RfY29tcHJlc3Npb25fdHlwZSBjb21w cmVzc2lvblR5cGUsIGludCByb3dfc2l6ZSA9IDAsIGludCBjb2xvcl9kZXB0aCA9IDApOwogfTsK IAogI2VuZGlmIC8vIFBTRF9DT01QUkVTU0lPTl9ICmRpZmYgLS1naXQgYS9saWJzL3BzZHV0aWxz L3BzZC5oIGIvbGlicy9wc2R1dGlscy9wc2QuaAppbmRleCBiMjU0MzQ3ZmMyLi5mNDg1ODIxNDBi IDEwMDY0NAotLS0gYS9saWJzL3BzZHV0aWxzL3BzZC5oCisrKyBiL2xpYnMvcHNkdXRpbHMvcHNk LmgKQEAgLTM2LDYgKzM2LDE0IEBAIGVudW0gY2xhc3MgcHNkX2J5dGVfb3JkZXIgOiBzdGQ6OnVp bnRfbGVhc3Q4X3QgewogICAgIHBzZEludmFsaWRCeXRlT3JkZXIgPSAyNTUsCiB9OwogCitlbnVt IHBzZF9jb21wcmVzc2lvbl90eXBlIDogc3RkOjp1aW50MTZfdCB7CisgICAgVW5jb21wcmVzc2Vk ID0gMCwKKyAgICBSTEUsCisgICAgWklQLAorICAgIFpJUFdpdGhQcmVkaWN0aW9uLAorICAgIFVu a25vd24gPSAyNTUsCit9OworCiAvKioKICAqIEltYWdlIGNvbG9yL2RlcHRoIG1vZGVzCiAgKi8K ZGlmZiAtLWdpdCBhL2xpYnMvcHNkdXRpbHMvdGVzdHMvY29tcHJlc3Npb25fdGVzdC5jcHAgYi9s aWJzL3BzZHV0aWxzL3Rlc3RzL2NvbXByZXNzaW9uX3Rlc3QuY3BwCmluZGV4IGRlYWIyMWVkZTUu LjlkMTJhZmEyYjkgMTAwNjQ0Ci0tLSBhL2xpYnMvcHNkdXRpbHMvdGVzdHMvY29tcHJlc3Npb25f dGVzdC5jcHAKKysrIGIvbGlicy9wc2R1dGlscy90ZXN0cy9jb21wcmVzc2lvbl90ZXN0LmNwcApA QCAtMjAsMTAgKzIwLDEyIEBACiB2b2lkIENvbXByZXNzaW9uVGVzdDo6dGVzdENvbXByZXNzaW9u UkxFKCkKIHsKICAgICBRQnl0ZUFycmF5IGJhKCJUd2VlIGVlZWUgYWFhYWEgYXNkYXNkYTQ3ODky MzQ3OTgxICAgIHd3d3d3d3d3d3d3d1dXV1dXV1dXV1ciKTsKLSAgICBRQnl0ZUFycmF5IGNvbXBy ZXNzZWQgPSBDb21wcmVzc2lvbjo6Y29tcHJlc3MoYmEsIENvbXByZXNzaW9uOjpSTEUpOworICAg IFFCeXRlQXJyYXkgY29tcHJlc3NlZCA9IENvbXByZXNzaW9uOjpjb21wcmVzcyhiYSwgcHNkX2Nv bXByZXNzaW9uX3R5cGU6OlJMRSk7CisgICAgUVZFUklGWShjb21wcmVzc2VkLnNpemUoKSA+IDAp OwogICAgIGRiZ0tyaXRhIDw8IGNvbXByZXNzZWQuc2l6ZSgpIDw8ICJ1bmNvbXByZXNzZWQiIDw8 IGJhLnNpemUoKTsKIAotICAgIFFCeXRlQXJyYXkgdW5jb21wcmVzc2VkID0gQ29tcHJlc3Npb246 OnVuY29tcHJlc3MoYmEuc2l6ZSgpLCBjb21wcmVzc2VkLCBDb21wcmVzc2lvbjo6UkxFKTsKKyAg ICBRQnl0ZUFycmF5IHVuY29tcHJlc3NlZCA9IENvbXByZXNzaW9uOjp1bmNvbXByZXNzKGJhLnNp emUoKSwgY29tcHJlc3NlZCwgcHNkX2NvbXByZXNzaW9uX3R5cGU6OlJMRSk7CisgICAgUVZFUklG WSh1bmNvbXByZXNzZWQuc2l6ZSgpID4gMCk7CiAgICAgUVZFUklGWShxc3RyY21wKGJhLCB1bmNv bXByZXNzZWQpID09IDApOwogCiAgICAgYmEuY2xlYXIoKTsKQEAgLTMxLDE5ICszMywyMyBAQCB2 b2lkIENvbXByZXNzaW9uVGVzdDo6dGVzdENvbXByZXNzaW9uUkxFKCkKICAgICBmb3IgKGludCBp ID0gMDsgaSA8IDUwMDsgKytpKSB7CiAgICAgICAgIGRzIDw8IHJhbmQoKTsKICAgICB9Ci0gICAg Y29tcHJlc3NlZCA9IENvbXByZXNzaW9uOjpjb21wcmVzcyhiYSwgQ29tcHJlc3Npb246OlJMRSk7 CisgICAgY29tcHJlc3NlZCA9IENvbXByZXNzaW9uOjpjb21wcmVzcyhiYSwgcHNkX2NvbXByZXNz aW9uX3R5cGU6OlJMRSk7CiAgICAgZGJnS3JpdGEgPDwgY29tcHJlc3NlZC5zaXplKCkgPDwgInVu Y29tcHJlc3NlZCIgPDwgYmEuc2l6ZSgpOwotICAgIHVuY29tcHJlc3NlZCA9IENvbXByZXNzaW9u Ojp1bmNvbXByZXNzKGJhLnNpemUoKSwgY29tcHJlc3NlZCwgQ29tcHJlc3Npb246OlJMRSk7Cisg ICAgUVZFUklGWShjb21wcmVzc2VkLnNpemUoKSA+IDApOworICAgIHVuY29tcHJlc3NlZCA9IENv bXByZXNzaW9uOjp1bmNvbXByZXNzKGJhLnNpemUoKSwgY29tcHJlc3NlZCwgcHNkX2NvbXByZXNz aW9uX3R5cGU6OlJMRSk7CisgICAgUVZFUklGWSh1bmNvbXByZXNzZWQuc2l6ZSgpID4gMCk7CiAg ICAgUVZFUklGWShxc3RyY21wKGJhLCB1bmNvbXByZXNzZWQpID09IDApOwogfQogCiB2b2lkIENv bXByZXNzaW9uVGVzdDo6dGVzdENvbXByZXNzaW9uWklQKCkKIHsKICAgICBRQnl0ZUFycmF5IGJh KCJUd2VlIGVlZWUgYWFhYWEgYXNkYXNkYTQ3ODkyMzQ3OTgxICAgIHd3d3d3d3d3d3d3d1dXV1dX V1dXV1ciKTsKLSAgICBRQnl0ZUFycmF5IGNvbXByZXNzZWQgPSBDb21wcmVzc2lvbjo6Y29tcHJl c3MoYmEsIENvbXByZXNzaW9uOjpaSVApOworICAgIFFCeXRlQXJyYXkgY29tcHJlc3NlZCA9IENv bXByZXNzaW9uOjpjb21wcmVzcyhiYSwgcHNkX2NvbXByZXNzaW9uX3R5cGU6OlpJUCk7CisgICAg UVZFUklGWShjb21wcmVzc2VkLnNpemUoKSA+IDApOwogICAgIGRiZ0tyaXRhIDw8IGNvbXByZXNz ZWQuc2l6ZSgpIDw8ICJ1bmNvbXByZXNzZWQiIDw8IGJhLnNpemUoKTsKIAotICAgIFFCeXRlQXJy YXkgdW5jb21wcmVzc2VkID0gQ29tcHJlc3Npb246OnVuY29tcHJlc3MoYmEuc2l6ZSgpLCBjb21w cmVzc2VkLCBDb21wcmVzc2lvbjo6WklQKTsKKyAgICBRQnl0ZUFycmF5IHVuY29tcHJlc3NlZCA9 IENvbXByZXNzaW9uOjp1bmNvbXByZXNzKGJhLnNpemUoKSwgY29tcHJlc3NlZCwgcHNkX2NvbXBy ZXNzaW9uX3R5cGU6OlpJUCk7CisgICAgUVZFUklGWSh1bmNvbXByZXNzZWQuc2l6ZSgpID4gMCk7 CiAgICAgUVZFUklGWShxc3RyY21wKGJhLCB1bmNvbXByZXNzZWQpID09IDApOwogCiAgICAgYmEu Y2xlYXIoKTsKQEAgLTUxLDE5ICs1NywyMyBAQCB2b2lkIENvbXByZXNzaW9uVGVzdDo6dGVzdENv bXByZXNzaW9uWklQKCkKICAgICBmb3IgKGludCBpID0gMDsgaSA8IDUwMDsgKytpKSB7CiAgICAg ICAgIGRzIDw8IHJhbmQoKTsKICAgICB9Ci0gICAgY29tcHJlc3NlZCA9IENvbXByZXNzaW9uOjpj b21wcmVzcyhiYSwgQ29tcHJlc3Npb246OlpJUCk7CisgICAgY29tcHJlc3NlZCA9IENvbXByZXNz aW9uOjpjb21wcmVzcyhiYSwgcHNkX2NvbXByZXNzaW9uX3R5cGU6OlpJUCk7CisgICAgUVZFUklG WShjb21wcmVzc2VkLnNpemUoKSA+IDApOwogICAgIGRiZ0tyaXRhIDw8IGNvbXByZXNzZWQuc2l6 ZSgpIDw8ICJ1bmNvbXByZXNzZWQiIDw8IGJhLnNpemUoKTsKLSAgICB1bmNvbXByZXNzZWQgPSBD b21wcmVzc2lvbjo6dW5jb21wcmVzcyhiYS5zaXplKCksIGNvbXByZXNzZWQsIENvbXByZXNzaW9u OjpaSVApOworICAgIHVuY29tcHJlc3NlZCA9IENvbXByZXNzaW9uOjp1bmNvbXByZXNzKGJhLnNp emUoKSwgY29tcHJlc3NlZCwgcHNkX2NvbXByZXNzaW9uX3R5cGU6OlpJUCk7CisgICAgUVZFUklG WSh1bmNvbXByZXNzZWQuc2l6ZSgpID4gMCk7CiAgICAgUVZFUklGWShxc3RyY21wKGJhLCB1bmNv bXByZXNzZWQpID09IDApOwogfQogCiB2b2lkIENvbXByZXNzaW9uVGVzdDo6dGVzdENvbXByZXNz aW9uVW5jb21wcmVzc2VkKCkKIHsKICAgICBRQnl0ZUFycmF5IGJhKCJUd2VlIGVlZWUgYWFhYWEg YXNkYXNkYTQ3ODkyMzQ3OTgxICAgIHd3d3d3d3d3d3d3d1dXV1dXV1dXV1ciKTsKLSAgICBRQnl0 ZUFycmF5IGNvbXByZXNzZWQgPSBDb21wcmVzc2lvbjo6Y29tcHJlc3MoYmEsIENvbXByZXNzaW9u OjpVbmNvbXByZXNzZWQpOworICAgIFFCeXRlQXJyYXkgY29tcHJlc3NlZCA9IENvbXByZXNzaW9u Ojpjb21wcmVzcyhiYSwgcHNkX2NvbXByZXNzaW9uX3R5cGU6OlVuY29tcHJlc3NlZCk7CisgICAg UVZFUklGWShjb21wcmVzc2VkLnNpemUoKSA+IDApOwogICAgIGRiZ0tyaXRhIDw8IGNvbXByZXNz ZWQuc2l6ZSgpIDw8ICJ1bmNvbXByZXNzZWQiIDw8IGJhLnNpemUoKTsKIAotICAgIFFCeXRlQXJy YXkgdW5jb21wcmVzc2VkID0gQ29tcHJlc3Npb246OnVuY29tcHJlc3MoYmEuc2l6ZSgpLCBjb21w cmVzc2VkLCBDb21wcmVzc2lvbjo6VW5jb21wcmVzc2VkKTsKKyAgICBRQnl0ZUFycmF5IHVuY29t cHJlc3NlZCA9IENvbXByZXNzaW9uOjp1bmNvbXByZXNzKGJhLnNpemUoKSwgY29tcHJlc3NlZCwg cHNkX2NvbXByZXNzaW9uX3R5cGU6OlVuY29tcHJlc3NlZCk7CisgICAgUVZFUklGWSh1bmNvbXBy ZXNzZWQuc2l6ZSgpID4gMCk7CiAgICAgUVZFUklGWShxc3RyY21wKGJhLCB1bmNvbXByZXNzZWQp ID09IDApOwogCiAgICAgYmEuY2xlYXIoKTsKQEAgLTcxLDkgKzgxLDExIEBAIHZvaWQgQ29tcHJl c3Npb25UZXN0Ojp0ZXN0Q29tcHJlc3Npb25VbmNvbXByZXNzZWQoKQogICAgIGZvciAoaW50IGkg PSAwOyBpIDwgNTAwOyArK2kpIHsKICAgICAgICAgZHMgPDwgcmFuZCgpOwogICAgIH0KLSAgICBj b21wcmVzc2VkID0gQ29tcHJlc3Npb246OmNvbXByZXNzKGJhLCBDb21wcmVzc2lvbjo6VW5jb21w cmVzc2VkKTsKKyAgICBjb21wcmVzc2VkID0gQ29tcHJlc3Npb246OmNvbXByZXNzKGJhLCBwc2Rf Y29tcHJlc3Npb25fdHlwZTo6VW5jb21wcmVzc2VkKTsKICAgICBkYmdLcml0YSA8PCBjb21wcmVz c2VkLnNpemUoKSA8PCAidW5jb21wcmVzc2VkIiA8PCBiYS5zaXplKCk7Ci0gICAgdW5jb21wcmVz c2VkID0gQ29tcHJlc3Npb246OnVuY29tcHJlc3MoYmEuc2l6ZSgpLCBjb21wcmVzc2VkLCBDb21w cmVzc2lvbjo6VW5jb21wcmVzc2VkKTsKKyAgICBRVkVSSUZZKGNvbXByZXNzZWQuc2l6ZSgpID4g MCk7CisgICAgdW5jb21wcmVzc2VkID0gQ29tcHJlc3Npb246OnVuY29tcHJlc3MoYmEuc2l6ZSgp LCBjb21wcmVzc2VkLCBwc2RfY29tcHJlc3Npb25fdHlwZTo6VW5jb21wcmVzc2VkKTsKKyAgICBR VkVSSUZZKHVuY29tcHJlc3NlZC5zaXplKCkgPiAwKTsKICAgICBRVkVSSUZZKHFzdHJjbXAoYmEs IHVuY29tcHJlc3NlZCkgPT0gMCk7CiB9CiAKZGlmZiAtLWdpdCBhL3BsdWdpbnMvaW1wZXgvcHNk L0NNYWtlTGlzdHMudHh0IGIvcGx1Z2lucy9pbXBleC9wc2QvQ01ha2VMaXN0cy50eHQKaW5kZXgg ZTk5NDAxYjQzNC4uMDUxNmMyZGQzOSAxMDA2NDQKLS0tIGEvcGx1Z2lucy9pbXBleC9wc2QvQ01h a2VMaXN0cy50eHQKKysrIGIvcGx1Z2lucy9pbXBleC9wc2QvQ01ha2VMaXN0cy50eHQKQEAgLTIs MTcgKzIsMTEgQEAgaWYgKE5PVCBNU1ZDIEFORCBOT1QgQVBQTEUpCiAgICAgYWRkX3N1YmRpcmVj dG9yeSh0ZXN0cykKIGVuZGlmKCkKIAotY29uZmlndXJlX2ZpbGUoY29uZmlnX3BzZC5oLmNtYWtl ICR7Q01BS0VfQ1VSUkVOVF9CSU5BUllfRElSfS9jb25maWdfcHNkLmgpCi0KIGluY2x1ZGVfZGly ZWN0b3JpZXMoCiAgICAgJHtDTUFLRV9CSU5BUllfRElSfS9saWJzL3BzZAogICAgICR7Q01BS0Vf U09VUkNFX0RJUn0vbGlicy9wc2QKICkgICNGb3Iga2lzcHNkX2luY2x1ZGUuaAogCi1pbmNsdWRl X2RpcmVjdG9yaWVzKFNZU1RFTQotICAgICR7WkxJQl9JTkNMVURFX0RJUn0KLSkKLQogc2V0KExJ Ql9QU0RfU1JDUyAKICAgICBwc2RfY29sb3Jtb2RlX2Jsb2NrLmNwcAogICAgIHBzZF9pbWFnZV9k YXRhLmNwcApAQCAtMzEsNyArMjUsNyBAQCBzZXQoa3JpdGFwc2RpbXBvcnRfU09VUkNFUwogCiBh ZGRfbGlicmFyeShrcml0YXBzZGltcG9ydCBNT0RVTEUgJHtrcml0YXBzZGltcG9ydF9TT1VSQ0VT fSkKIAotdGFyZ2V0X2xpbmtfbGlicmFyaWVzKGtyaXRhcHNkaW1wb3J0IGtyaXRhZ2xvYmFsIGty aXRhdWkga3JpdGFwc2QgS0Y1OjpJMThuICR7WkxJQl9MSUJSQVJJRVN9KQordGFyZ2V0X2xpbmtf bGlicmFyaWVzKGtyaXRhcHNkaW1wb3J0IGtyaXRhZ2xvYmFsIGtyaXRhdWkga3JpdGFwc2QgS0Y1 OjpJMThuKQogCiBpbnN0YWxsKFRBUkdFVFMga3JpdGFwc2RpbXBvcnQgREVTVElOQVRJT04gJHtL UklUQV9QTFVHSU5fSU5TVEFMTF9ESVJ9KQogCkBAIC00OCwxMCArNDIsMTAgQEAgc2V0KGtyaXRh cHNkZXhwb3J0X1NPVVJDRVMKIGFkZF9saWJyYXJ5KGtyaXRhcHNkZXhwb3J0IE1PRFVMRSAke2ty aXRhcHNkZXhwb3J0X1NPVVJDRVN9KQogCiBpZiAoTVNWQykKLSAgICB0YXJnZXRfbGlua19saWJy YXJpZXMoa3JpdGFwc2RleHBvcnQga3JpdGF1aSBrcml0YXBzZCBrcml0YWltcGV4ICR7V0lOMzJf UExBVEZPUk1fTkVUX0xJQlN9ICR7WkxJQl9MSUJSQVJJRVN9KQotZWxzZSAoKQkKLSAgICB0YXJn ZXRfbGlua19saWJyYXJpZXMoa3JpdGFwc2RleHBvcnQga3JpdGF1aSBrcml0YXBzZCBrcml0YWlt cGV4ICR7WkxJQl9MSUJSQVJJRVN9KQotZW5kaWYgKCkJCisgICAgdGFyZ2V0X2xpbmtfbGlicmFy aWVzKGtyaXRhcHNkZXhwb3J0IGtyaXRhdWkga3JpdGFwc2Qga3JpdGFpbXBleCBrcml0YXN0b3Jl ICR7V0lOMzJfUExBVEZPUk1fTkVUX0xJQlN9KQorZWxzZSAoKQorICAgIHRhcmdldF9saW5rX2xp YnJhcmllcyhrcml0YXBzZGV4cG9ydCBrcml0YXVpIGtyaXRhcHNkIGtyaXRhaW1wZXgpCitlbmRp ZiAoKQogCiBpbnN0YWxsKFRBUkdFVFMga3JpdGFwc2RleHBvcnQgREVTVElOQVRJT04gJHtLUklU QV9QTFVHSU5fSU5TVEFMTF9ESVJ9KQogCmRpZmYgLS1naXQgYS9wbHVnaW5zL2ltcGV4L3BzZC9j b25maWdfcHNkLmguY21ha2UgYi9wbHVnaW5zL2ltcGV4L3BzZC9jb25maWdfcHNkLmguY21ha2UK ZGVsZXRlZCBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDQ4NGU0ZWFiOTQuLjAwMDAwMDAwMDAKLS0t IGEvcGx1Z2lucy9pbXBleC9wc2QvY29uZmlnX3BzZC5oLmNtYWtlCisrKyAvZGV2L251bGwKQEAg LTEsNCArMCwwIEBACi0KLS8qIERlZmluZXMgaWYgeW91ciBzeXN0ZW0gaGFzIHRoZSBabGliIGxp YnJhcnkgKi8KLSNjbWFrZWRlZmluZSBIQVZFX1pMSUIgMQotCmRpZmYgLS1naXQgYS9wbHVnaW5z L2ltcGV4L3BzZC9wc2RfaW1hZ2VfZGF0YS5jcHAgYi9wbHVnaW5zL2ltcGV4L3BzZC9wc2RfaW1h Z2VfZGF0YS5jcHAKaW5kZXggOTU3YmZmZGZkZC4uMzllNWE1ZjNhOSAxMDA2NDQKLS0tIGEvcGx1 Z2lucy9pbXBleC9wc2QvcHNkX2ltYWdlX2RhdGEuY3BwCisrKyBiL3BsdWdpbnMvaW1wZXgvcHNk L3BzZF9pbWFnZV9kYXRhLmNwcApAQCAtMTgsMTcgKzE4LDEzIEBACiAjaW5jbHVkZSA8S29Db2xv clNwYWNlLmg+CiAjaW5jbHVkZSA8S29Db2xvclNwYWNlTWF0aHMuaD4KICNpbmNsdWRlIDxLb0Nv bG9yU3BhY2VUcmFpdHMuaD4KLQotI2luY2x1ZGUgInBzZF91dGlscy5oIgotI2luY2x1ZGUgImNv bXByZXNzaW9uLmgiCi0KLSNpbmNsdWRlICJraXNfaXRlcmF0b3JfbmcuaCIKLSNpbmNsdWRlICJr aXNfcGFpbnRfZGV2aWNlLmgiCisjaW5jbHVkZSA8a2lzX2l0ZXJhdG9yX25nLmg+CisjaW5jbHVk ZSA8a2lzX3BhaW50X2RldmljZS5oPgogCiAjaW5jbHVkZSA8YXNsL2tpc19hc2xfcmVhZGVyX3V0 aWxzLmg+Ci0KLSNpbmNsdWRlICJwc2RfcGl4ZWxfdXRpbHMuaCIKLQorI2luY2x1ZGUgPGNvbXBy ZXNzaW9uLmg+CisjaW5jbHVkZSA8cHNkX3BpeGVsX3V0aWxzLmg+CisjaW5jbHVkZSA8cHNkX3V0 aWxzLmg+CiAKIFBTREltYWdlRGF0YTo6UFNESW1hZ2VEYXRhKFBTREhlYWRlciAqaGVhZGVyKQog ewpAQCAtNTYsNyArNTIsNyBAQCBib29sIFBTREltYWdlRGF0YTo6cmVhZChRSU9EZXZpY2UgJmlv LCBLaXNQYWludERldmljZVNQIGRldikKICAgICAgICAgICAgIG1fY2hhbm5lbE9mZnNldHMgPDwg MDsKICAgICAgICAgICAgIENoYW5uZWxJbmZvIGNoYW5uZWxJbmZvOwogICAgICAgICAgICAgY2hh bm5lbEluZm8uY2hhbm5lbElkID0gY2hhbm5lbDsKLSAgICAgICAgICAgIGNoYW5uZWxJbmZvLmNv bXByZXNzaW9uVHlwZSA9IENvbXByZXNzaW9uOjpVbmNvbXByZXNzZWQ7CisgICAgICAgICAgICBj aGFubmVsSW5mby5jb21wcmVzc2lvblR5cGUgPSBwc2RfY29tcHJlc3Npb25fdHlwZTo6VW5jb21w cmVzc2VkOwogICAgICAgICAgICAgY2hhbm5lbEluZm8uY2hhbm5lbERhdGFTdGFydCA9IHN0YXJ0 OwogICAgICAgICAgICAgY2hhbm5lbEluZm8uY2hhbm5lbERhdGFMZW5ndGggPSBxdWludDY0KG1f aGVhZGVyLT53aWR0aCkgKiBtX2hlYWRlci0+aGVpZ2h0ICogbV9jaGFubmVsU2l6ZTsKICAgICAg ICAgICAgIHN0YXJ0ICs9IGNoYW5uZWxJbmZvLmNoYW5uZWxEYXRhTGVuZ3RoOwpAQCAtODQsNyAr ODAsNyBAQCBib29sIFBTREltYWdlRGF0YTo6cmVhZChRSU9EZXZpY2UgJmlvLCBLaXNQYWludERl dmljZVNQIGRldikKICAgICAgICAgICAgIENoYW5uZWxJbmZvIGNoYW5uZWxJbmZvOwogICAgICAg ICAgICAgY2hhbm5lbEluZm8uY2hhbm5lbElkID0gY2hhbm5lbDsKICAgICAgICAgICAgIGNoYW5u ZWxJbmZvLmNoYW5uZWxEYXRhU3RhcnQgPSBzdGFydDsKLSAgICAgICAgICAgIGNoYW5uZWxJbmZv LmNvbXByZXNzaW9uVHlwZSA9IENvbXByZXNzaW9uOjpSTEU7CisgICAgICAgICAgICBjaGFubmVs SW5mby5jb21wcmVzc2lvblR5cGUgPSBwc2RfY29tcHJlc3Npb25fdHlwZTo6UkxFOwogICAgICAg ICAgICAgZm9yIChxdWludDMyIHJvdyA9IDA7IHJvdyA8IG1faGVhZGVyLT5oZWlnaHQ7IHJvdysr ICkgewogICAgICAgICAgICAgICAgIGlmIChtX2hlYWRlci0+dmVyc2lvbiA9PSAxKSB7CiAgICAg ICAgICAgICAgICAgICAgIHF1aW50MTYgcmxlbGVuZ3RoMTY7IC8vIHVzZSB0ZW1wb3JhcnkgdmFy aWFibGUgdG8gbm90IGNhc3QgcG9pbnRlcnMgYW5kIG5vdCByZWx5IG9uIGVuZGlhbm5lc3MKQEAg LTE0MCw3ICsxMzYsNyBAQCBib29sIFBTREltYWdlRGF0YTo6cmVhZChRSU9EZXZpY2UgJmlvLCBL aXNQYWludERldmljZVNQIGRldikKIGJvb2wgUFNESW1hZ2VEYXRhOjp3cml0ZShRSU9EZXZpY2Ug JmlvLCBLaXNQYWludERldmljZVNQIGRldiwgYm9vbCBoYXNBbHBoYSkKIHsKICAgICAvLyBYWFg6 IG1ha2UgdGhlIGNvbXByZXNzaW9uIHNldHRpbmcgY29uZmlndXJhYmxlLiBGb3Igbm93LCBhbHdh eXMgdXNlIFJMRS4KLSAgICBwc2R3cml0ZShpbywgKHF1aW50MTYpQ29tcHJlc3Npb246OlJMRSk7 CisgICAgcHNkd3JpdGUoaW8sIHN0YXRpY19jYXN0PHF1aW50MTY+KHBzZF9jb21wcmVzc2lvbl90 eXBlOjpSTEUpKTsKIAogICAgIC8vIG5vdyB3cml0ZSBhbGwgdGhlIGNoYW5uZWxzIGluIGRpc3Bs YXkgb3JkZXIKICAgICAvLyBmaWxsIGluIHRoZSBjaGFubmVsIGNob29zZXIsIGluIHRoZSBkaXNw bGF5IG9yZGVyLCBidXQgc3RvcmUgdGhlIHBpeGVsIGluZGV4IGFzIHdlbGwuCgo=