ZGlmZiAtLWdpdCBhL0NoYW5nZUxvZyBiL0NoYW5nZUxvZwppbmRleCBjZjlkY2I2Li5lOTI2MmFlIDEwMDY0NAotLS0gYS9DaGFuZ2VMb2cKKysrIGIvQ2hhbmdlTG9nCkBAIC0xLDYgKzEsMjUgQEAKIAogICAgICAgICAgICAgICAgIENoYW5nZUxvZyBmaWxlIGZvciB6bGliCiAKK0NoYW5nZXMgaW4gMS4yLjAuOCAoNCBOb3ZlbWJlciAyMDAzKQorLSBVcGRhdGUgdmVyc2lvbiBpbiBjb250cmliL2RlbHBoaS9aTGliLnBhcyBhbmQgY29udHJpYi9wYXNjYWwvemxpYnBhcy5wYXMKKy0gQWRkIGV4cGVyaW1lbnRhbCBOT19ESVZJREUgI2RlZmluZSBpbiBhZGxlcjMyLmMKKyAgICAtIFBvc3NpYmx5IGZhc3RlciBvbiBzb21lIHByb2Nlc3NvcnMgKGxldCBtZSBrbm93IGlmIGl0IGlzKQorLSBDb3JyZWN0IFpfQkxPQ0sgdG8gbm90IHJldHVybiBvbiBmaXJzdCBpbmZsYXRlIGNhbGwgaWYgbm8gd3JhcAorLSBGaXggc3RybS0+ZGF0YV90eXBlIG9uIGluZmxhdGUoKSByZXR1cm4gdG8gY29ycmVjdGx5IGluZGljYXRlIEVPQgorLSBBZGQgZGVmbGF0ZVByaW1lKCkgZnVuY3Rpb24gZm9yIGFwcGVuZGluZyBpbiB0aGUgbWlkZGxlIG9mIGEgYnl0ZQorLSBBZGQgY29udHJpYi9nemFwcGVuZCBmb3IgYW4gZXhhbXBsZSBvZiBhcHBlbmRpbmcgdG8gYSBzdHJlYW0KKy0gVXBkYXRlIHdpbjMyL0RMTF9GQVEudHh0IFtUcnV0YV0KKy0gRGVsZXRlIFR1cmJvIEMgY29tbWVudCBpbiBSRUFETUUgW1RydXRhXQorLSBJbXByb3ZlIHNvbWUgaW5kZW50YXRpb24gaW4gemNvbmYuaCBbVHJ1dGFdCistIEZpeCBpbmZpbml0ZSBsb29wIG9uIGJhZCBpbnB1dCBpbiBjb25maWd1cmUgc2NyaXB0IFtDaHVyY2hdCistIEZpeCBnemVvZigpIGZvciBjb25jYXRlbmF0ZWQgZ3ppcCBmaWxlcyBbSm9obnNvbl0KKy0gQWRkIGV4YW1wbGUgdG8gY29udHJpYi92aXN1YWwtYmFzaWMudHh0IFtNaWNoYWVsIEIuXQorLSBBZGQgLXAgdG8gbWtkaXIncyBpbiBNYWtlZmlsZS5pbiBbdmRhXQorLSBGaXggY29uZmlndXJlIHRvIHByb3Blcmx5IGRldGVjdCBwcmVzZW5jZSBvciBsYWNrIG9mIHByaW50ZiBmdW5jdGlvbnMKKy0gQWRkIEFTNDAwIHN1cHBvcnQgW01vbm5lcmF0XQorLSBBZGRlZCBhIGxpdHRsZSBDeWd3aW4gc3VwcG9ydCBbV2lsc29uXQorCiBDaGFuZ2VzIGluIDEuMi4wLjcgKDIxIFNlcHRlbWJlciAyMDAzKQogLSBDb3JyZWN0IHNvbWUgZGVidWcgZm9ybWF0cyBpbiBjb250cmliL2luZmJhY2s5CiAtIENhc3QgYSB0eXBlIGluIGEgZGVidWcgc3RhdGVtZW50IGluIHRyZWVzLmMKQEAgLTEwLDcgKzI5LDcgQEAKIC0gUmVtb3ZlIHNvbWUgZGlyZWN0b3JpZXMgaW4gb2xkIHRoYXQgaGF2ZSBiZWVuIHVwZGF0ZWQgdG8gMS4yCiAtIEFkZCBkeWxpYiBidWlsZGluZyBmb3IgTWFjIE9TIFggaW4gY29uZmlndXJlIGFuZCBNYWtlZmlsZS5pbgogLSBSZW1vdmUgb2xkIGRpc3RyaWJ1dGlvbiBzdHVmZiBmcm9tIE1ha2VmaWxlCi0tIFVwZGF0ZSBSRUFETUUgdG8gcG9pbnQgZm9yIERMTF9GQVEudHh0LCBhbmQgYWRkIGNvbW1lbnQgb24gTWFjIE9TIFgKKy0gVXBkYXRlIFJFQURNRSB0byBwb2ludCB0byBETExfRkFRLnR4dCwgYW5kIGFkZCBjb21tZW50IG9uIE1hYyBPUyBYCiAtIFVwZGF0ZSBsaW5rcyBpbiBSRUFETUUKIAogQ2hhbmdlcyBpbiAxLjIuMC42ICgxMyBTZXB0ZW1iZXIgMjAwMykKZGlmZiAtLWdpdCBhL01ha2VmaWxlIGIvTWFrZWZpbGUKaW5kZXggMDM5MjgwZC4uZmE0ZjU4OCAxMDA2NDQKLS0tIGEvTWFrZWZpbGUKKysrIGIvTWFrZWZpbGUKQEAgLTMwLDEzICszMCwxNCBAQAogCiBMSUJTPWxpYnouYQogU0hBUkVETElCPWxpYnouc28KLVNIQVJFRExJQlY9bGliei5zby4xLjIuMC43CitTSEFSRURMSUJWPWxpYnouc28uMS4yLjAuOAogU0hBUkVETElCTT1saWJ6LnNvLjEKIAogQVI9YXIgcmMKIFJBTkxJQj1yYW5saWIKIFRBUj10YXIKIFNIRUxMPS9iaW4vc2gKK0VYRT0KIAogcHJlZml4ID0gL3Vzci9sb2NhbAogZXhlY19wcmVmaXggPSAke3ByZWZpeH0KQEAgLTUzLDcgKzU0LDcgQEAKIAogVEVTVF9PQkpTID0gZXhhbXBsZS5vIG1pbmlnemlwLm8KIAotYWxsOiBleGFtcGxlIG1pbmlnemlwCithbGw6IGV4YW1wbGUkKEVYRSkgbWluaWd6aXAkKEVYRSkKIAogY2hlY2s6IHRlc3QKIHRlc3Q6IGFsbApAQCAtODIsMTcgKzgzLDE3IEBACiAJbG4gLXMgJEAgJChTSEFSRURMSUIpCiAJbG4gLXMgJEAgJChTSEFSRURMSUJNKQogCi1leGFtcGxlOiBleGFtcGxlLm8gJChMSUJTKQorZXhhbXBsZSQoRVhFKTogZXhhbXBsZS5vICQoTElCUykKIAkkKENDKSAkKENGTEFHUykgLW8gJEAgZXhhbXBsZS5vICQoTERGTEFHUykKIAotbWluaWd6aXA6IG1pbmlnemlwLm8gJChMSUJTKQorbWluaWd6aXAkKEVYRSk6IG1pbmlnemlwLm8gJChMSUJTKQogCSQoQ0MpICQoQ0ZMQUdTKSAtbyAkQCBtaW5pZ3ppcC5vICQoTERGTEFHUykKIAogaW5zdGFsbDogJChMSUJTKQotCS1AaWYgWyAhIC1kICQoZXhlY19wcmVmaXgpIF07IHRoZW4gbWtkaXIgJChleGVjX3ByZWZpeCk7IGZpCi0JLUBpZiBbICEgLWQgJChpbmNsdWRlZGlyKSAgXTsgdGhlbiBta2RpciAkKGluY2x1ZGVkaXIpOyBmaQotCS1AaWYgWyAhIC1kICQobGliZGlyKSAgICAgIF07IHRoZW4gbWtkaXIgJChsaWJkaXIpOyBmaQotCS1AaWYgWyAhIC1kICQobWFuM2RpcikgICAgIF07IHRoZW4gbWtkaXIgJChtYW4zZGlyKTsgZmkKKwktQGlmIFsgISAtZCAkKGV4ZWNfcHJlZml4KSBdOyB0aGVuIG1rZGlyIC1wICQoZXhlY19wcmVmaXgpOyBmaQorCS1AaWYgWyAhIC1kICQoaW5jbHVkZWRpcikgIF07IHRoZW4gbWtkaXIgLXAgJChpbmNsdWRlZGlyKTsgZmkKKwktQGlmIFsgISAtZCAkKGxpYmRpcikgICAgICBdOyB0aGVuIG1rZGlyIC1wICQobGliZGlyKTsgZmkKKwktQGlmIFsgISAtZCAkKG1hbjNkaXIpICAgICBdOyB0aGVuIG1rZGlyIC1wICQobWFuM2Rpcik7IGZpCiAJY3AgemxpYi5oIHpjb25mLmggJChpbmNsdWRlZGlyKQogCWNobW9kIDY0NCAkKGluY2x1ZGVkaXIpL3psaWIuaCAkKGluY2x1ZGVkaXIpL3pjb25mLmgKIAljcCAkKExJQlMpICQobGliZGlyKQpAQCAtMTE5LDcgKzEyMCw4IEBACiAKIG1vc3RseWNsZWFuOiBjbGVhbgogY2xlYW46Ci0Jcm0gLWYgKi5vICp+IGV4YW1wbGUgbWluaWd6aXAgbGliei4qIGZvby5neiBzb19sb2NhdGlvbnMgXAorCXJtIC1mICoubyAqfiBleGFtcGxlJChFWEUpIG1pbmlnemlwJChFWEUpIFwKKwkgICBsaWJ6LiogZm9vLmd6IHNvX2xvY2F0aW9ucyBcCiAJICAgX21hdGNoLnMgbWFrZXRyZWUgY29udHJpYi9pbmZiYWNrOS8qLm8KIAogbWFpbnRhaW5lci1jbGVhbjogZGlzdGNsZWFuCmRpZmYgLS1naXQgYS9NYWtlZmlsZS5pbiBiL01ha2VmaWxlLmluCmluZGV4IDAzOTI4MGQuLmZhNGY1ODggMTAwNjQ0Ci0tLSBhL01ha2VmaWxlLmluCisrKyBiL01ha2VmaWxlLmluCkBAIC0zMCwxMyArMzAsMTQgQEAKIAogTElCUz1saWJ6LmEKIFNIQVJFRExJQj1saWJ6LnNvCi1TSEFSRURMSUJWPWxpYnouc28uMS4yLjAuNworU0hBUkVETElCVj1saWJ6LnNvLjEuMi4wLjgKIFNIQVJFRExJQk09bGliei5zby4xCiAKIEFSPWFyIHJjCiBSQU5MSUI9cmFubGliCiBUQVI9dGFyCiBTSEVMTD0vYmluL3NoCitFWEU9CiAKIHByZWZpeCA9IC91c3IvbG9jYWwKIGV4ZWNfcHJlZml4ID0gJHtwcmVmaXh9CkBAIC01Myw3ICs1NCw3IEBACiAKIFRFU1RfT0JKUyA9IGV4YW1wbGUubyBtaW5pZ3ppcC5vCiAKLWFsbDogZXhhbXBsZSBtaW5pZ3ppcAorYWxsOiBleGFtcGxlJChFWEUpIG1pbmlnemlwJChFWEUpCiAKIGNoZWNrOiB0ZXN0CiB0ZXN0OiBhbGwKQEAgLTgyLDE3ICs4MywxNyBAQAogCWxuIC1zICRAICQoU0hBUkVETElCKQogCWxuIC1zICRAICQoU0hBUkVETElCTSkKIAotZXhhbXBsZTogZXhhbXBsZS5vICQoTElCUykKK2V4YW1wbGUkKEVYRSk6IGV4YW1wbGUubyAkKExJQlMpCiAJJChDQykgJChDRkxBR1MpIC1vICRAIGV4YW1wbGUubyAkKExERkxBR1MpCiAKLW1pbmlnemlwOiBtaW5pZ3ppcC5vICQoTElCUykKK21pbmlnemlwJChFWEUpOiBtaW5pZ3ppcC5vICQoTElCUykKIAkkKENDKSAkKENGTEFHUykgLW8gJEAgbWluaWd6aXAubyAkKExERkxBR1MpCiAKIGluc3RhbGw6ICQoTElCUykKLQktQGlmIFsgISAtZCAkKGV4ZWNfcHJlZml4KSBdOyB0aGVuIG1rZGlyICQoZXhlY19wcmVmaXgpOyBmaQotCS1AaWYgWyAhIC1kICQoaW5jbHVkZWRpcikgIF07IHRoZW4gbWtkaXIgJChpbmNsdWRlZGlyKTsgZmkKLQktQGlmIFsgISAtZCAkKGxpYmRpcikgICAgICBdOyB0aGVuIG1rZGlyICQobGliZGlyKTsgZmkKLQktQGlmIFsgISAtZCAkKG1hbjNkaXIpICAgICBdOyB0aGVuIG1rZGlyICQobWFuM2Rpcik7IGZpCisJLUBpZiBbICEgLWQgJChleGVjX3ByZWZpeCkgXTsgdGhlbiBta2RpciAtcCAkKGV4ZWNfcHJlZml4KTsgZmkKKwktQGlmIFsgISAtZCAkKGluY2x1ZGVkaXIpICBdOyB0aGVuIG1rZGlyIC1wICQoaW5jbHVkZWRpcik7IGZpCisJLUBpZiBbICEgLWQgJChsaWJkaXIpICAgICAgXTsgdGhlbiBta2RpciAtcCAkKGxpYmRpcik7IGZpCisJLUBpZiBbICEgLWQgJChtYW4zZGlyKSAgICAgXTsgdGhlbiBta2RpciAtcCAkKG1hbjNkaXIpOyBmaQogCWNwIHpsaWIuaCB6Y29uZi5oICQoaW5jbHVkZWRpcikKIAljaG1vZCA2NDQgJChpbmNsdWRlZGlyKS96bGliLmggJChpbmNsdWRlZGlyKS96Y29uZi5oCiAJY3AgJChMSUJTKSAkKGxpYmRpcikKQEAgLTExOSw3ICsxMjAsOCBAQAogCiBtb3N0bHljbGVhbjogY2xlYW4KIGNsZWFuOgotCXJtIC1mICoubyAqfiBleGFtcGxlIG1pbmlnemlwIGxpYnouKiBmb28uZ3ogc29fbG9jYXRpb25zIFwKKwlybSAtZiAqLm8gKn4gZXhhbXBsZSQoRVhFKSBtaW5pZ3ppcCQoRVhFKSBcCisJICAgbGliei4qIGZvby5neiBzb19sb2NhdGlvbnMgXAogCSAgIF9tYXRjaC5zIG1ha2V0cmVlIGNvbnRyaWIvaW5mYmFjazkvKi5vCiAKIG1haW50YWluZXItY2xlYW46IGRpc3RjbGVhbgpkaWZmIC0tZ2l0IGEvUkVBRE1FIGIvUkVBRE1FCmluZGV4IGVkYTE4ZmEuLmEwODcxMDQgMTAwNjQ0Ci0tLSBhL1JFQURNRQorKysgYi9SRUFETUUKQEAgLTEsNiArMSw2IEBACiBaTElCIERBVEEgQ09NUFJFU1NJT04gTElCUkFSWQogCi16bGliIDEuMi4wLjcgaXMgYSBnZW5lcmFsIHB1cnBvc2UgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LiAgQWxsIHRoZSBjb2RlIGlzCit6bGliIDEuMi4wLjggaXMgYSBnZW5lcmFsIHB1cnBvc2UgZGF0YSBjb21wcmVzc2lvbiBsaWJyYXJ5LiAgQWxsIHRoZSBjb2RlIGlzCiB0aHJlYWQgc2FmZS4gIFRoZSBkYXRhIGZvcm1hdCB1c2VkIGJ5IHRoZSB6bGliIGxpYnJhcnkgaXMgZGVzY3JpYmVkIGJ5IFJGQ3MKIChSZXF1ZXN0IGZvciBDb21tZW50cykgMTk1MCB0byAxOTUyIGluIHRoZSBmaWxlcwogaHR0cDovL3d3dy5pZXRmLm9yZy9yZmMvcmZjMTk1MC50eHQgKHpsaWIgZm9ybWF0KSwgcmZjMTk1MS50eHQgKGRlZmxhdGUgZm9ybWF0KQpAQCAtMzQsNyArMzQsNyBAQAogaXNzdWUgb2YgIERyLiBEb2JiJ3MgSm91cm5hbDsgYSBjb3B5IG9mIHRoZSBhcnRpY2xlIGlzIGF2YWlsYWJsZSBpbgogaHR0cDovL2RvZ21hLm5ldC9tYXJrbi9hcnRpY2xlcy96bGlidG9vbC96bGlidG9vbC5odG0KIAotVGhlIGNoYW5nZXMgbWFkZSBpbiB2ZXJzaW9uIDEuMi4wLjcgYXJlIGRvY3VtZW50ZWQgaW4gdGhlIGZpbGUgQ2hhbmdlTG9nLgorVGhlIGNoYW5nZXMgbWFkZSBpbiB2ZXJzaW9uIDEuMi4wLjggYXJlIGRvY3VtZW50ZWQgaW4gdGhlIGZpbGUgQ2hhbmdlTG9nLgogCiBVbnN1cHBvcnRlZCB0aGlyZCBwYXJ0eSBjb250cmlidXRpb25zIGFyZSBwcm92aWRlZCBpbiBkaXJlY3RvcnkgImNvbnRyaWIiLgogCkBAIC03Nyw5ICs3Nyw2IEBACiAKIC0gZ3pkb3BlbiBpcyBub3Qgc3VwcG9ydGVkIG9uIFJJU0NPUywgQkVPUyBhbmQgYnkgc29tZSBNYWMgY29tcGlsZXJzLgogCi0tIEZvciBUdXJibyBDIHRoZSBzbWFsbCBtb2RlbCBpcyBzdXBwb3J0ZWQgb25seSB3aXRoIHJlZHVjZWQgcGVyZm9ybWFuY2UgdG8KLSAgYXZvaWQgYW55IGZhciBhbGxvY2F0aW9uOyBpdCB3YXMgdGVzdGVkIHdpdGggLURNQVhfV0JJVFM9MTEgLURNQVhfTUVNX0xFVkVMPTMKLQogLSBGb3IgUGFsbU9zLCBzZWUgaHR0cDovL3BhbG16bGliLnNvdXJjZWZvcmdlLm5ldC8KIAogLSBXaGVuIGJ1aWxkaW5nIGEgc2hhcmVkLCBpLmUuIGR5bmFtaWMgbGlicmFyeSBvbiBNYWMgT1MgWCwgdGhlIGxpYnJhcnkgbXVzdCBiZQpkaWZmIC0tZ2l0IGEvYWRsZXIzMi5jIGIvYWRsZXIzMi5jCmluZGV4IDRkNTIzOTkuLmJhZDkzMGUgMTAwNjQ0Ci0tLSBhL2FkbGVyMzIuYworKysgYi9hZGxlcjMyLmMKQEAgLTgsNyArOCw3IEBACiAjZGVmaW5lIFpMSUJfSU5URVJOQUwKICNpbmNsdWRlICJ6bGliLmgiCiAKLSNkZWZpbmUgQkFTRSA2NTUyMUwgLyogbGFyZ2VzdCBwcmltZSBzbWFsbGVyIHRoYW4gNjU1MzYgKi8KKyNkZWZpbmUgQkFTRSA2NTUyMVVMICAgIC8qIGxhcmdlc3QgcHJpbWUgc21hbGxlciB0aGFuIDY1NTM2ICovCiAjZGVmaW5lIE5NQVggNTU1MgogLyogTk1BWCBpcyB0aGUgbGFyZ2VzdCBuIHN1Y2ggdGhhdCAyNTVuKG4rMSkvMiArIChuKzEpKEJBU0UtMSkgPD0gMl4zMi0xICovCiAKQEAgLTE4LDYgKzE4LDMxIEBACiAjZGVmaW5lIERPOChidWYsaSkgIERPNChidWYsaSk7IERPNChidWYsaSs0KTsKICNkZWZpbmUgRE8xNihidWYpICAgRE84KGJ1ZiwwKTsgRE84KGJ1Ziw4KTsKIAorI2lmZGVmIE5PX0RJVklERQorIyAgZGVmaW5lIE1PRChhKSBcCisgICAgZG8geyBcCisgICAgICAgIGlmIChhID4gKEJBU0UgPDwgMTYpKSBhIC09IChCQVNFIDw8IDE2KTsgXAorICAgICAgICBpZiAoYSA+IChCQVNFIDw8IDE1KSkgYSAtPSAoQkFTRSA8PCAxNSk7IFwKKyAgICAgICAgaWYgKGEgPiAoQkFTRSA8PCAxNCkpIGEgLT0gKEJBU0UgPDwgMTQpOyBcCisgICAgICAgIGlmIChhID4gKEJBU0UgPDwgMTMpKSBhIC09IChCQVNFIDw8IDEzKTsgXAorICAgICAgICBpZiAoYSA+IChCQVNFIDw8IDEyKSkgYSAtPSAoQkFTRSA8PCAxMik7IFwKKyAgICAgICAgaWYgKGEgPiAoQkFTRSA8PCAxMSkpIGEgLT0gKEJBU0UgPDwgMTEpOyBcCisgICAgICAgIGlmIChhID4gKEJBU0UgPDwgMTApKSBhIC09IChCQVNFIDw8IDEwKTsgXAorICAgICAgICBpZiAoYSA+IChCQVNFIDw8IDkpKSBhIC09IChCQVNFIDw8IDkpOyBcCisgICAgICAgIGlmIChhID4gKEJBU0UgPDwgOCkpIGEgLT0gKEJBU0UgPDwgOCk7IFwKKyAgICAgICAgaWYgKGEgPiAoQkFTRSA8PCA3KSkgYSAtPSAoQkFTRSA8PCA3KTsgXAorICAgICAgICBpZiAoYSA+IChCQVNFIDw8IDYpKSBhIC09IChCQVNFIDw8IDYpOyBcCisgICAgICAgIGlmIChhID4gKEJBU0UgPDwgNSkpIGEgLT0gKEJBU0UgPDwgNSk7IFwKKyAgICAgICAgaWYgKGEgPiAoQkFTRSA8PCA0KSkgYSAtPSAoQkFTRSA8PCA0KTsgXAorICAgICAgICBpZiAoYSA+IChCQVNFIDw8IDMpKSBhIC09IChCQVNFIDw8IDMpOyBcCisgICAgICAgIGlmIChhID4gKEJBU0UgPDwgMikpIGEgLT0gKEJBU0UgPDwgMik7IFwKKyAgICAgICAgaWYgKGEgPiAoQkFTRSA8PCAxKSkgYSAtPSAoQkFTRSA8PCAxKTsgXAorICAgICAgICBpZiAoYSA+IEJBU0UpIGEgLT0gQkFTRTsgXAorICAgIH0gd2hpbGUgKDApCisjZWxzZQorIyAgZGVmaW5lIE1PRChhKSBhICU9IEJBU0UKKyNlbmRpZgorCiAvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiB1TG9uZyBaRVhQT1JUIGFkbGVyMzIoYWRsZXIsIGJ1ZiwgbGVuKQogICAgIHVMb25nIGFkbGVyOwpAQCAtNDIsOCArNjcsOCBAQAogICAgICAgICAgICAgczEgKz0gKmJ1ZisrOwogICAgICAgICAgICAgczIgKz0gczE7CiAgICAgICAgIH0gd2hpbGUgKC0tayk7Ci0gICAgICAgIHMxICU9IEJBU0U7Ci0gICAgICAgIHMyICU9IEJBU0U7CisgICAgICAgIE1PRChzMSk7CisgICAgICAgIE1PRChzMik7CiAgICAgfQogICAgIHJldHVybiAoczIgPDwgMTYpIHwgczE7CiB9CmRpZmYgLS1naXQgYS9hczQwMC9ibmRzcmMgYi9hczQwMC9ibmRzcmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uYTk2M2UzYQotLS0gL2Rldi9udWxsCisrKyBiL2FzNDAwL2JuZHNyYwpAQCAtMCwwICsxLDEzMiBAQAorU1RSUEdNRVhQIFBHTUxWTCgqQ1VSUkVOVCkgU0lHTkFUVVJFKCdaTElCJykKKworLypAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAqLworLyogICBWZXJzaW9uIDEuMS4zIGVudHJ5IHBvaW50cy4gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLypAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICpNT0RVTEUgICAgICBBRExFUjMyICAgICAgWkxJQiAgICAgICAgIDAxLzAyLzAxICAwMDoxNTowOSAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgRVhQT1JUIFNZTUJPTCgiYWRsZXIzMiIpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgKk1PRFVMRSAgICAgIENPTVBSRVNTICAgICBaTElCICAgICAgICAgMDEvMDIvMDEgIDAwOjE1OjA5ICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBFWFBPUlQgU1lNQk9MKCJjb21wcmVzcyIpCisgIEVYUE9SVCBTWU1CT0woImNvbXByZXNzMiIpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgKk1PRFVMRSAgICAgIENSQzMyICAgICAgICBaTElCICAgICAgICAgMDEvMDIvMDEgIDAwOjE1OjA5ICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBFWFBPUlQgU1lNQk9MKCJjcmMzMiIpCisgIEVYUE9SVCBTWU1CT0woImdldF9jcmNfdGFibGUiKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICpNT0RVTEUgICAgICBERUZMQVRFICAgICAgWkxJQiAgICAgICAgIDAxLzAyLzAxICAwMDoxNTowOSAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgRVhQT1JUIFNZTUJPTCgiZGVmbGF0ZSIpCisgIEVYUE9SVCBTWU1CT0woImRlZmxhdGVFbmQiKQorICBFWFBPUlQgU1lNQk9MKCJkZWZsYXRlU2V0RGljdGlvbmFyeSIpCisgIEVYUE9SVCBTWU1CT0woImRlZmxhdGVDb3B5IikKKyAgRVhQT1JUIFNZTUJPTCgiZGVmbGF0ZVJlc2V0IikKKyAgRVhQT1JUIFNZTUJPTCgiZGVmbGF0ZVBhcmFtcyIpCisgIEVYUE9SVCBTWU1CT0woImRlZmxhdGVQcmltZSIpCisgIEVYUE9SVCBTWU1CT0woImRlZmxhdGVJbml0XyIpCisgIEVYUE9SVCBTWU1CT0woImRlZmxhdGVJbml0Ml8iKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICpNT0RVTEUgICAgICBHWklPICAgICAgICAgWkxJQiAgICAgICAgIDAxLzAyLzAxICAwMDoxNTowOSAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgRVhQT1JUIFNZTUJPTCgiZ3pvcGVuIikKKyAgRVhQT1JUIFNZTUJPTCgiZ3pkb3BlbiIpCisgIEVYUE9SVCBTWU1CT0woImd6c2V0cGFyYW1zIikKKyAgRVhQT1JUIFNZTUJPTCgiZ3pyZWFkIikKKyAgRVhQT1JUIFNZTUJPTCgiZ3p3cml0ZSIpCisgIEVYUE9SVCBTWU1CT0woImd6cHJpbnRmIikKKyAgRVhQT1JUIFNZTUJPTCgiZ3pwdXRzIikKKyAgRVhQT1JUIFNZTUJPTCgiZ3pnZXRzIikKKyAgRVhQT1JUIFNZTUJPTCgiZ3pwdXRjIikKKyAgRVhQT1JUIFNZTUJPTCgiZ3pnZXRjIikKKyAgRVhQT1JUIFNZTUJPTCgiZ3pmbHVzaCIpCisgIEVYUE9SVCBTWU1CT0woImd6c2VlayIpCisgIEVYUE9SVCBTWU1CT0woImd6cmV3aW5kIikKKyAgRVhQT1JUIFNZTUJPTCgiZ3p0ZWxsIikKKyAgRVhQT1JUIFNZTUJPTCgiZ3plb2YiKQorICBFWFBPUlQgU1lNQk9MKCJnemNsb3NlIikKKyAgRVhQT1JUIFNZTUJPTCgiZ3plcnJvciIpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgKk1PRFVMRSAgICAgIElORkxBVEUgICAgICBaTElCICAgICAgICAgMDEvMDIvMDEgIDAwOjE1OjA5ICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBFWFBPUlQgU1lNQk9MKCJpbmZsYXRlIikKKyAgRVhQT1JUIFNZTUJPTCgiaW5mbGF0ZUVuZCIpCisgIEVYUE9SVCBTWU1CT0woImluZmxhdGVTZXREaWN0aW9uYXJ5IikKKyAgRVhQT1JUIFNZTUJPTCgiaW5mbGF0ZVN5bmMiKQorICBFWFBPUlQgU1lNQk9MKCJpbmZsYXRlUmVzZXQiKQorICBFWFBPUlQgU1lNQk9MKCJpbmZsYXRlSW5pdF8iKQorICBFWFBPUlQgU1lNQk9MKCJpbmZsYXRlSW5pdDJfIikKKyAgRVhQT1JUIFNZTUJPTCgiaW5mbGF0ZVN5bmNQb2ludCIpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgKk1PRFVMRSAgICAgIFVOQ09NUFIgICAgICBaTElCICAgICAgICAgMDEvMDIvMDEgIDAwOjE1OjA5ICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBFWFBPUlQgU1lNQk9MKCJ1bmNvbXByZXNzIikKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAqTU9EVUxFICAgICAgWlVUSUwgICAgICAgIFpMSUIgICAgICAgICAwMS8wMi8wMSAgMDA6MTU6MDkgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIEVYUE9SVCBTWU1CT0woInpsaWJWZXJzaW9uIikKKyAgRVhQT1JUIFNZTUJPTCgiekVycm9yIikKKworLypAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAqLworLyogICBWZXJzaW9uIDEuMi4wLjcgYWRkaXRpb25hbCBlbnRyeSBwb2ludHMuICAgICAgICAgICAgICAgICAgICAgICAqLworLypAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEBAQEAqLworCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICpNT0RVTEUgICAgICBDT01QUkVTUyAgICAgWkxJQiAgICAgICAgIDAxLzAyLzAxICAwMDoxNTowOSAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgRVhQT1JUIFNZTUJPTCgiY29tcHJlc3NCb3VuZCIpCisKKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKy8qICAgKk1PRFVMRSAgICAgIERFRkxBVEUgICAgICBaTElCICAgICAgICAgMDEvMDIvMDEgIDAwOjE1OjA5ICAgICAgKi8KKy8qKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKi8KKworICBFWFBPUlQgU1lNQk9MKCJkZWZsYXRlQm91bmQiKQorCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisvKiAgICpNT0RVTEUgICAgICBHWklPICAgICAgICAgWkxJQiAgICAgICAgIDAxLzAyLzAxICAwMDoxNTowOSAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKiovCisKKyAgRVhQT1JUIFNZTUJPTCgiZ3p1bmdldGMiKQorICBFWFBPUlQgU1lNQk9MKCJnemNsZWFyZXJyIikKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAqTU9EVUxFICAgICAgSU5GQkFDSyAgICAgIFpMSUIgICAgICAgICAwMS8wMi8wMSAgMDA6MTU6MDkgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIEVYUE9SVCBTWU1CT0woImluZmxhdGVCYWNrIikKKyAgRVhQT1JUIFNZTUJPTCgiaW5mbGF0ZUJhY2tFbmQiKQorICBFWFBPUlQgU1lNQk9MKCJpbmZsYXRlQmFja0luaXRfIikKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAqTU9EVUxFICAgICAgSU5GTEFURSAgICAgIFpMSUIgICAgICAgICAwMS8wMi8wMSAgMDA6MTU6MDkgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIEVYUE9SVCBTWU1CT0woImluZmxhdGVDb3B5IikKKworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAqTU9EVUxFICAgICAgWlVUSUwgICAgICAgIFpMSUIgICAgICAgICAwMS8wMi8wMSAgMDA6MTU6MDkgICAgICAqLworLyoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgIEVYUE9SVCBTWU1CT0woInpsaWJDb21waWxlRmxhZ3MiKQorCitFTkRQR01FWFAKZGlmZiAtLWdpdCBhL2FzNDAwL2NvbXBpbGUuY2xwIGIvYXM0MDAvY29tcGlsZS5jbHAKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uNGY4NzAwYwotLS0gL2Rldi9udWxsCisrKyBiL2FzNDAwL2NvbXBpbGUuY2xwCkBAIC0wLDAgKzEsMTIzIEBACisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworLyogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKy8qICBaTElCICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworLyogICAgQ29tcGlsZSBzb3VyY2VzIGludG8gbW9kdWxlcyBhbmQgbGluayB0aGVtIGludG8gYSBzZXJ2aWNlIHByb2dyYW0uICAgICAgKi8KKy8qICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisvKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqLworCisgICAgICAgICAgICAgUEdNCisKKy8qICAgICAgQ29uZmlndXJhdGlvbiBhZGp1c3RhYmxlIHBhcmFtZXRlcnMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgICAgICAgICBEQ0wgICAgICAgIFZBUigmU1JDTElCKSBUWVBFKCpDSEFSKSBMRU4oMTApICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVkFMVUUoJ1pMSUInKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTb3VyY2UgbGlicmFyeS4gKi8KKyAgICAgICAgICAgICBEQ0wgICAgICAgIFZBUigmU1JDRklMRSkgVFlQRSgqQ0hBUikgTEVOKDEwKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgIFZBTFVFKCdTT1VSQ0VTJykgICAgICAgICAgICAgICAgICAgICAgLyogU291cmNlIG1lbWJlciBmaWxlLiAqLworICAgICAgICAgICAgIERDTCAgICAgICAgVkFSKCZDVExGSUxFKSBUWVBFKCpDSEFSKSBMRU4oMTApICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVkFMVUUoJ1RPT0xTJykgICAgICAgICAgICAgICAgICAgICAgICAvKiBDb250cm9sIG1lbWJlciBmaWxlLiAqLworCisgICAgICAgICAgICAgRENMICAgICAgICBWQVIoJk1PRExJQikgVFlQRSgqQ0hBUikgTEVOKDEwKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgIFZBTFVFKCdaTElCJykgICAgICAgICAgICAgICAgICAgICAgICAgLyogTW9kdWxlIGxpYnJhcnkuICovCisKKyAgICAgICAgICAgICBEQ0wgICAgICAgIFZBUigmU1JWTElCKSBUWVBFKCpDSEFSKSBMRU4oMTApICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVkFMVUUoJ0xHUEwnKSAgICAgICAgICAgICAgICAgICAgICAgICAvKiBTZXJ2aWNlIHByb2dyYW0gbGlicmFyeS4gKi8KKworICAgICAgICAgICAgIERDTCAgICAgICAgVkFSKCZDRkxBR1MpIFRZUEUoKkNIQVIpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgVkFMVUUoJ09QVElNSVpFKDQwKScpICAgICAgICAgICAgICAgICAvKiBDb21waWxlIG9wdGlvbnMuICovCisKKworLyogICAgICBXb3JraW5nIHN0b3JhZ2UuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKi8KKworICAgICAgICAgICAgIERDTCAgICAgICAgVkFSKCZDTURMRU4pIFRZUEUoKkRFQykgTEVOKDE1IDUpIFZBTFVFKDMwMCkgICAgLyogQ29tbWFuZCBsZW5ndGguICovCisgICAgICAgICAgICAgRENMICAgICAgICBWQVIoJkNNRCkgVFlQRSgqQ0hBUikgTEVOKDUxMikKKworCisvKiAgICAgIENvbXBpbGUgc291cmNlcyBpbnRvIG1vZHVsZXMuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAqLworCisgICAgICAgICAgICAgQ0hHVkFSICAgICBWQVIoJkNNRCkgVkFMVUUoJ0NSVENNT0QgTU9EVUxFKCcgKlRDQVQgJk1PRExJQiAqVENBVCAgKworICAgICAgICAgICAgICAgICAgICAgICAgJy9BRExFUjMyKSAgICAgICAgICAgICAgIFNSQ0ZJTEUoJyAqVENBVCAgICAgICAgICAgICAgICsKKyAgICAgICAgICAgICAgICAgICAgICAgICZTUkNMSUIgKlRDQVQgJy8nICpUQ0FUICZTUkNGSUxFICpUQ0FUICAgICAgICAgICAgICAgICArCisgICAgICAgICAgICAgICAgICAgICAgICAnKSBTWVNJRkNPUFQoKklGU0lPKScgKkJDQVQgJkNGTEFHUykKKyAgICAgICAgICAgICBDQUxMICAgICAgIFBHTShRQ01ERVhDKSBQQVJNKCZDTUQgJkNNRExFTikKKworICAgICAgICAgICAgIENIR1ZBUiAgICAgVkFSKCZDTUQpIFZBTFVFKCdDUlRDTU9EIE1PRFVMRSgnICpUQ0FUICZNT0RMSUIgKlRDQVQgICsKKyAgICAgICAgICAgICAgICAgICAgICAgICcvQ09NUFJFU1MpICAgICAgICAgICAgICBTUkNGSUxFKCcgKlRDQVQgICAgICAgICAgICAgICArCisgICAgICAgICAgICAgICAgICAgICAgICAmU1JDTElCICpUQ0FUICcvJyAqVENBVCAmU1JDRklMRSAqVENBVCAgICAgICAgICAgICAgICAgKworICAgICAgICAgICAgICAgICAgICAgICAgJykgU1lTSUZDT1BUKCpJRlNJTyknICpCQ0FUICZDRkxBR1MpCisgICAgICAgICAgICAgQ0FMTCAgICAgICBQR00oUUNNREVYQykgUEFSTSgmQ01EICZDTURMRU4pCisKKyAgICAgICAgICAgICBDSEdWQVIgICAgIFZBUigmQ01EKSBWQUxVRSgnQ1JUQ01PRCBNT0RVTEUoJyAqVENBVCAmTU9ETElCICpUQ0FUICArCisgICAgICAgICAgICAgICAgICAgICAgICAnL0NSQzMyKSAgICAgICAgICAgICAgICAgU1JDRklMRSgnICpUQ0FUICAgICAgICAgICAgICAgKworICAgICAgICAgICAgICAgICAgICAgICAgJlNSQ0xJQiAqVENBVCAnLycgKlRDQVQgJlNSQ0ZJTEUgKlRDQVQgICAgICAgICAgICAgICAgICsKKyAgICAgICAgICAgICAgICAgICAgICAgICcpIFNZU0lGQ09QVCgqSUZTSU8pJyAqQkNBVCAmQ0ZMQUdTKQorICAgICAgICAgICAgIENBTEwgICAgICAgUEdNKFFDTURFWEMpIFBBUk0oJkNNRCAmQ01ETEVOKQorCisgICAgICAgICAgICAgQ0hHVkFSICAgICBWQVIoJkNNRCkgVkFMVUUoJ0NSVENNT0QgTU9EVUxFKCcgKlRDQVQgJk1PRExJQiAqVENBVCAgKworICAgICAgICAgICAgICAgICAgICAgICAgJy9ERUZMQVRFKSAgICAgICAgICAgICAgIFNSQ0ZJTEUoJyAqVENBVCAgICAgICAgICAgICAgICsKKyAgICAgICAgICAgICAgICAgICAgICAgICZTUkNMSUIgKlRDQVQgJy8nICpUQ0FUICZTUkNGSUxFICpUQ0FUICAgICAgICAgICAgICAgICArCisgICAgICAgICAgICAgICAgICAgICAgICAnKSBTWVNJRkNPUFQoKklGU0lPKScgKkJDQVQgJkNGTEFHUykKKyAgICAgICAgICAgICBDQUxMICAgICAgIFBHTShRQ01ERVhDKSBQQVJNKCZDTUQgJkNNRExFTikKKworICAgICAgICAgICAgIENIR1ZBUiAgICAgVkFSKCZDTUQpIFZBTFVFKCdDUlRDTU9EIE1PRFVMRSgnICpUQ0FUICZNT0RMSUIgKlRDQVQgICsKKyAgICAgICAgICAgICAgICAgICAgICAgICcvR1pJTykgICAgICAgICAgICAgICAgICBTUkNGSUxFKCcgKlRDQVQgICAgICAgICAgICAgICArCisgICAgICAgICAgICAgICAgICAgICAgICAmU1JDTElCICpUQ0FUICcvJyAqVENBVCAmU1JDRklMRSAqVENBVCAgICAgICAgICAgICAgICAgKworICAgICAgICAgICAgICAgICAgICAgICAgJykgU1lTSUZDT1BUKCpJRlNJTyknICpCQ0FUICZDRkxBR1MpCisgICAgICAgICAgICAgQ0FMTCAgICAgICBQR00oUUNNREVYQykgUEFSTSgmQ01EICZDTURMRU4pCisKKyAgICAgICAgICAgICBDSEdWQVIgICAgIFZBUigmQ01EKSBWQUxVRSgnQ1JUQ01PRCBNT0RVTEUoJyAqVENBVCAmTU9ETElCICpUQ0FUICArCisgICAgICAgICAgICAgICAgICAgICAgICAnL0lORkJBQ0spICAgICAgICAgICAgICAgU1JDRklMRSgnICpUQ0FUICAgICAgICAgICAgICAgKworICAgICAgICAgICAgICAgICAgICAgICAgJlNSQ0xJQiAqVENBVCAnLycgKlRDQVQgJlNSQ0ZJTEUgKlRDQVQgICAgICAgICAgICAgICAgICsKKyAgICAgICAgICAgICAgICAgICAgICAgICcpIFNZU0lGQ09QVCgqSUZTSU8pJyAqQkNBVCAmQ0ZMQUdTKQorICAgICAgICAgICAgIENBTEwgICAgICAgUEdNKFFDTURFWEMpIFBBUk0oJkNNRCAmQ01ETEVOKQorCisgICAgICAgICAgICAgQ0hHVkFSICAgICBWQVIoJkNNRCkgVkFMVUUoJ0NSVENNT0QgTU9EVUxFKCcgKlRDQVQgJk1PRExJQiAqVENBVCAgKworICAgICAgICAgICAgICAgICAgICAgICAgJy9JTkZGQVNUKSAgICAgICAgICAgICAgIFNSQ0ZJTEUoJyAqVENBVCAgICAgICAgICAgICAgICsKKyAgICAgICAgICAgICAgICAgICAgICAgICZTUkNMSUIgKlRDQVQgJy8nICpUQ0FUICZTUkNGSUxFICpUQ0FUICAgICAgICAgICAgICAgICArCisgICAgICAgICAgICAgICAgICAgICAgICAnKSBTWVNJRkNPUFQoKklGU0lPKScgKkJDQVQgJkNGTEFHUykKKyAgICAgICAgICAgICBDQUxMICAgICAgIFBHTShRQ01ERVhDKSBQQVJNKCZDTUQgJkNNRExFTikKKworICAgICAgICAgICAgIENIR1ZBUiAgICAgVkFSKCZDTUQpIFZBTFVFKCdDUlRDTU9EIE1PRFVMRSgnICpUQ0FUICZNT0RMSUIgKlRDQVQgICsKKyAgICAgICAgICAgICAgICAgICAgICAgICcvSU5GTEFURSkgICAgICAgICAgICAgICBTUkNGSUxFKCcgKlRDQVQgICAgICAgICAgICAgICArCisgICAgICAgICAgICAgICAgICAgICAgICAmU1JDTElCICpUQ0FUICcvJyAqVENBVCAmU1JDRklMRSAqVENBVCAgICAgICAgICAgICAgICAgKworICAgICAgICAgICAgICAgICAgICAgICAgJykgU1lTSUZDT1BUKCpJRlNJTyknICpCQ0FUICZDRkxBR1MpCisgICAgICAgICAgICAgQ0FMTCAgICAgICBQR00oUUNNREVYQykgUEFSTSgmQ01EICZDTURMRU4pCisKKyAgICAgICAgICAgICBDSEdWQVIgICAgIFZBUigmQ01EKSBWQUxVRSgnQ1JUQ01PRCBNT0RVTEUoJyAqVENBVCAmTU9ETElCICpUQ0FUICArCisgICAgICAgICAgICAgICAgICAgICAgICAnL0lORlRSRUVTKSAgICAgICAgICAgICAgU1JDRklMRSgnICpUQ0FUICAgICAgICAgICAgICAgKworICAgICAgICAgICAgICAgICAgICAgICAgJlNSQ0xJQiAqVENBVCAnLycgKlRDQVQgJlNSQ0ZJTEUgKlRDQVQgICAgICAgICAgICAgICAgICsKKyAgICAgICAgICAgICAgICAgICAgICAgICcpIFNZU0lGQ09QVCgqSUZTSU8pJyAqQkNBVCAmQ0ZMQUdTKQorICAgICAgICAgICAgIENBTEwgICAgICAgUEdNKFFDTURFWEMpIFBBUk0oJkNNRCAmQ01ETEVOKQorCisgICAgICAgICAgICAgQ0hHVkFSICAgICBWQVIoJkNNRCkgVkFMVUUoJ0NSVENNT0QgTU9EVUxFKCcgKlRDQVQgJk1PRExJQiAqVENBVCAgKworICAgICAgICAgICAgICAgICAgICAgICAgJy9UUkVFUykgICAgICAgICAgICAgICAgIFNSQ0ZJTEUoJyAqVENBVCAgICAgICAgICAgICAgICsKKyAgICAgICAgICAgICAgICAgICAgICAgICZTUkNMSUIgKlRDQVQgJy8nICpUQ0FUICZTUkNGSUxFICpUQ0FUICAgICAgICAgICAgICAgICArCisgICAgICAgICAgICAgICAgICAgICAgICAnKSBTWVNJRkNPUFQoKklGU0lPKScgKkJDQVQgJkNGTEFHUykKKyAgICAgICAgICAgICBDQUxMICAgICAgIFBHTShRQ01ERVhDKSBQQVJNKCZDTUQgJkNNRExFTikKKworICAgICAgICAgICAgIENIR1ZBUiAgICAgVkFSKCZDTUQpIFZBTFVFKCdDUlRDTU9EIE1PRFVMRSgnICpUQ0FUICZNT0RMSUIgKlRDQVQgICsKKyAgICAgICAgICAgICAgICAgICAgICAgICcvVU5DT01QUikgICAgICAgICAgICAgICBTUkNGSUxFKCcgKlRDQVQgICAgICAgICAgICAgICArCisgICAgICAgICAgICAgICAgICAgICAgICAmU1JDTElCICpUQ0FUICcvJyAqVENBVCAmU1JDRklMRSAqVENBVCAgICAgICAgICAgICAgICAgKworICAgICAgICAgICAgICAgICAgICAgICAgJykgU1lTSUZDT1BUKCpJRlNJTyknICpCQ0FUICZDRkxBR1MpCisgICAgICAgICAgICAgQ0FMTCAgICAgICBQR00oUUNNREVYQykgUEFSTSgmQ01EICZDTURMRU4pCisKKyAgICAgICAgICAgICBDSEdWQVIgICAgIFZBUigmQ01EKSBWQUxVRSgnQ1JUQ01PRCBNT0RVTEUoJyAqVENBVCAmTU9ETElCICpUQ0FUICArCisgICAgICAgICAgICAgICAgICAgICAgICAnL1pVVElMKSAgICAgICAgICAgICAgICAgU1JDRklMRSgnICpUQ0FUICAgICAgICAgICAgICAgKworICAgICAgICAgICAgICAgICAgICAgICAgJlNSQ0xJQiAqVENBVCAnLycgKlRDQVQgJlNSQ0ZJTEUgKlRDQVQgICAgICAgICAgICAgICAgICsKKyAgICAgICAgICAgICAgICAgICAgICAgICcpIFNZU0lGQ09QVCgqSUZTSU8pJyAqQkNBVCAmQ0ZMQUdTKQorICAgICAgICAgICAgIENBTEwgICAgICAgUEdNKFFDTURFWEMpIFBBUk0oJkNNRCAmQ01ETEVOKQorCisKKy8qICAgICAgTGluayBtb2R1bGVzIGludG8gYSBzZXJ2aWNlIHByb2dyYW0uICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICovCisKKyAgICAgICAgICAgICBDUlRTUlZQR00gIFNSVlBHTSgmU1JWTElCL1pMSUIpICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgTU9EVUxFKCZNT0RMSUIvQURMRVIzMiAgICAgJk1PRExJQi9DT01QUkVTUyAgICArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmTU9ETElCL0NSQzMyICAgICAgICZNT0RMSUIvREVGTEFURSAgICAgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJk1PRExJQi9HWklPICAgICAgICAmTU9ETElCL0lORkJBQ0sgICAgICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICZNT0RMSUIvSU5GRkFTVCAgICAgJk1PRExJQi9JTkZMQVRFICAgICArCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAmTU9ETElCL0lORlRSRUVTICAgICZNT0RMSUIvVFJFRVMgICAgICAgKworICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgJk1PRExJQi9VTkNPTVBSICAgICAmTU9ETElCL1pVVElMKSAgICAgICsKKyAgICAgICAgICAgICAgICAgICAgICAgICAgU1JDRklMRSgmU1JDTElCLyZDVExGSUxFKSBTUkNNQlIoQk5EU1JDKSArCisgICAgICAgICAgICAgICAgICAgICAgICAgIFRFWFQoJ1pMSUIgMS4yLjAuNycpIFRHVFJMUyhWNFI0TTApCisKKyAgICAgICAgICAgICBFTkRQR00KZGlmZiAtLWdpdCBhL2FzNDAwL3JlYWRtZS50eHQgYi9hczQwMC9yZWFkbWUudHh0Cm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjdjZTVlZDEKLS0tIC9kZXYvbnVsbAorKysgYi9hczQwMC9yZWFkbWUudHh0CkBAIC0wLDAgKzEsMTExIEBACisgICAgICAgIFpMSUIgdmVyc2lvbiAxLjIuMC43IGZvciBBUzQwMCBpbnN0YWxsYXRpb24gaW5zdHJ1Y3Rpb25zCisKK0kpIEZyb20gYW4gQVM0MDAgKlNBVkYgZmlsZToKKworMSkgICAgICBVbnBhY2tpbmcgYXJjaGl2ZSB0byBhbiBBUzQwMCBzYXZlIGZpbGUKKworT24gdGhlIEFTNDAwOgorCitfICAgICAgIENyZWF0ZSB0aGUgWkxJQiBBUzQwMCBsaWJyYXJ5OgorCisgICAgICAgIENSVExJQiBMSUIoWkxJQikgVFlQRShQUk9EKSBURVhUKCdaTElCIGNvbXByZXNzaW9uIEFQSSBsaWJyYXJ5JykKKworXyAgICAgICBDcmVhdGUgYSB3b3JrIHNhdmUgZmlsZSwgZm9yIGV4YW1wbGU6CisKKyAgICAgICAgICAgICAgICBDUlRTQVZGIEZJTEUoWkxJQi9aTElCU0FWRikKKworT24gYSBQQyBjb25uZWN0ZWQgdG8gdGhlIHRhcmdldCBBUzQwMDoKKworXyAgICAgICBVbnBhY2sgdGhlIHNhdmUgZmlsZSBpbWFnZSB0byBhIFBDIGZpbGUgIlpMSUJTQVZGIgorXyAgICAgICBVcGxvYWQgdGhpcyBmaWxlIGludG8gdGhlIHNhdmUgZmlsZSBvbiB0aGUgQVM0MDAsIGZvciBleGFtcGxlCisgICAgICAgICAgICAgICAgdXNpbmcgZnRwIGluIEJJTkFSWSBtb2RlLgorCisKKzIpICAgICAgUG9wdWxhdGluZyB0aGUgWkxJQiBBUzQwMCBzb3VyY2UgbGlicmFyeQorCitPbiB0aGUgQVM0MDA6CisKK18gICAgICAgRXh0cmFjdCB0aGUgc2F2ZWQgb2JqZWN0cyBpbnRvIHRoZSBaTElCIEFTNDAwIGxpYnJhcnkgdXNpbmc6CisKK1JTVE9CSiBPQkooKkFMTCkgU0FWTElCKFpMSUIpIERFVigqU0FWRikgU0FWRihaTElCL1pMSUJTQVZGKSBSU1RMSUIoWkxJQikKKworCiszKSAgICAgIEN1c3RvbWl6ZSBpbnN0YWxsYXRpb246CisKK18gICAgICAgRWRpdCBDTCBtZW1iZXIgWkxJQi9UT09MUyhDT01QSUxFKSBhbmQgY2hhbmdlIHBhcmFtZXRlcnMgaWYgbmVlZGVkLAorICAgICAgICAgICAgICAgIGFjY29yZGluZyB0byB0aGUgY29tbWVudHMuCisKK18gICAgICAgQ29tcGlsZSB0aGlzIG1lbWJlciB3aXRoOgorCisgICAgICAgIENSVENMUEdNIFBHTShaTElCL0NPTVBJTEUpIFNSQ0ZJTEUoWkxJQi9UT09MUykgU1JDTUJSKENPTVBJTEUpCisKKworNCkgICAgICBDb21waWxlIGFuZCBnZW5lcmF0ZSB0aGUgc2VydmljZSBwcm9ncmFtOgorCitfICAgICAgIFRoaXMgY2FuIG5vdyBiZSBkb25lIGJ5IGV4ZWN1dGluZzoKKworICAgICAgICBDQUxMIFBHTShaTElCL0NPTVBJTEUpCisKKworCitJSSkgRnJvbSB0aGUgb3JpZ2luYWwgc291cmNlIGRpc3RyaWJ1dGlvbjoKKworMSkgICAgICBPbiB0aGUgQVM0MDAsIGNyZWF0ZSB0aGUgc291cmNlIGxpYnJhcnk6CisKKyAgICAgICAgQ1JUTElCIExJQihaTElCKSBUWVBFKFBST0QpIFRFWFQoJ1pMSUIgY29tcHJlc3Npb24gQVBJIGxpYnJhcnknKQorCisyKSAgICAgIENyZWF0ZSB0aGUgc291cmNlIGZpbGVzOgorCisgICAgICAgIENSVFNSQ1BGIEZJTEUoWkxJQi9TT1VSQ0VTKSBSQ0RMRU4oMTEyKSBURVhUKCdaTElCIGxpYnJhcnkgbW9kdWxlcycpCisgICAgICAgIENSVFNSQ1BGIEZJTEUoWkxJQi9IKSAgICAgICBSQ0RMRU4oMTEyKSBURVhUKCdaTElCIGxpYnJhcnkgaW5jbHVkZXMnKQorICAgICAgICBDUlRTUkNQRiBGSUxFKFpMSUIvVE9PTFMpICAgUkNETEVOKDExMikgVEVYVCgnWkxJQiBsaWJyYXJ5IGNvbnRyb2wgdXRpbGl0aWVzJykKKworMykgICAgICBGcm9tIHRoZSBtYWNoaW5lIGhvc3RpbmcgdGhlIGRpc3RyaWJ1dGlvbiBmaWxlcywgdXBsb2FkIHRoZW0gKHdpdGgKKyAgICAgICAgICAgICAgICBGVFAgaW4gdGV4dCBtb2RlLCBmb3IgZXhhbXBsZSkgYWNjb3JkaW5nIHRvIHRoZSBmb2xsb3dpbmcgdGFibGU6CisKKyAgICBPcmlnaW5hbCAgICBBUzQwMCAgIEFTNDAwICAgIEFTNDAwIEFTNDAwCisgICAgZmlsZSAgICAgICAgZmlsZSAgICBtZW1iZXIgICB0eXBlICBkZXNjcmlwdGlvbgorICAgICAgICAgICAgICAgIFNPVVJDRVMgICAgICAgICAgICAgICAgT3JpZ2luYWwgWkxJQiBDIHN1YnByb2dyYW0gc291cmNlcworICAgIGFkbGVyMzIuYyAgICAgICAgICAgQURMRVIzMiAgQyAgICAgWkxJQiAtIENvbXB1dGUgdGhlIEFkbGVyLTMyIGNoZWNrc3VtIG9mIGEgZHRhIHN0cm0KKyAgICBjb21wcmVzcy5jICAgICAgICAgIENPTVBSRVNTIEMgICAgIFpMSUIgLSBDb21wcmVzcyBhIG1lbW9yeSBidWZmZXIKKyAgICBjcmMzMi5jICAgICAgICAgICAgIENSQzMyICAgIEMgICAgIFpMSUIgLSBDb21wdXRlIHRoZSBDUkMtMzIgb2YgYSBkYXRhIHN0cmVhbQorICAgIGRlZmxhdGUuYyAgICAgICAgICAgREVGTEFURSAgQyAgICAgWkxJQiAtIENvbXByZXNzIGRhdGEgdXNpbmcgdGhlIGRlZmxhdGlvbiBhbGdvcml0aG0KKyAgICBnemlvLmMgICAgICAgICAgICAgIEdaSU8gICAgIEMgICAgIFpMSUIgLSBJTyBvbiAuZ3ogZmlsZXMKKyAgICBpbmZiYWNrLmMgICAgICAgICAgIElORkJBQ0sgIEMgICAgIFpMSUIgLSBJbmZsYXRlIHVzaW5nIGEgY2FsbGJhY2sgaW50ZXJmYWNlCisgICAgaW5mZmFzdC5jICAgICAgICAgICBJTkZGQVNUICBDICAgICBaTElCIC0gRmFzdCBwcm9jLiBsaXRlcmFscyAmIGxlbmd0aC9kaXN0YW5jZSBwYWlycworICAgIGluZmxhdGUuYyAgICAgICAgICAgSU5GTEFURSAgQyAgICAgWkxJQiAtIEludGVyZmFjZSB0byBpbmZsYXRlIG1vZHVsZXMKKyAgICBpbmZ0cmVlcy5jICAgICAgICAgIElORlRSRUVTIEMgICAgIFpMSUIgLSBHZW5lcmF0ZSBIdWZmbWFuIHRyZWVzIGZvciBlZmZpY2llbnQgZGVjb2RlCisgICAgdHJlZXMuYyAgICAgICAgICAgICBUUkVFUyAgICBDICAgICBaTElCIC0gT3V0cHV0IGRlZmxhdGVkIGRhdGEgdXNpbmcgSHVmZm1hbiBjb2RpbmcKKyAgICB1bmNvbXByLmMgICAgICAgICAgIFVOQ09NUFIgIEMgICAgIFpMSUIgLSBEZWNvbXByZXNzIGEgbWVtb3J5IGJ1ZmZlcgorICAgIHp1dGlsLmMgICAgICAgICAgICAgWlVUSUwgICAgQyAgICAgWkxJQiAtIFRhcmdldCBkZXBlbmRlbnQgdXRpbGl0eSBmdW5jdGlvbnMKKyAgICAgICAgICAgICAgICBIICAgICAgICAgICAgICAgICAgICAgIE9yaWdpbmFsIFpMSUIgQyBhbmQgSUxFL1JQRyBpbmNsdWRlIGZpbGVzCisgICAgY3JjMzIuaCAgICAgICAgICAgICBDUkMzMiAgICBDICAgICBaTElCIC0gQ1JDMzIgdGFibGVzCisgICAgZGVmbGF0ZS5oICAgICAgICAgICBERUZMQVRFICBDICAgICBaTElCIC0gSW50ZXJuYWwgY29tcHJlc3Npb24gc3RhdGUKKyAgICBpbmZmYXN0LmggICAgICAgICAgIElORkZBU1QgIEMgICAgIFpMSUIgLSBIZWFkZXIgdG8gdXNlIGluZmZhc3QuYworICAgIGluZmZpeGVkLmggICAgICAgICAgSU5GRklYRUQgQyAgICAgWkxJQiAtIFRhYmxlIGZvciBkZWNvZGluZyBmaXhlZCBjb2RlcworICAgIGluZmxhdGUuaCAgICAgICAgICAgSU5GTEFURSAgQyAgICAgWkxJQiAtIEludGVybmFsIGluZmxhdGUgc3RhdGUgZGVmaW5pdGlvbnMKKyAgICBpbmZ0cmVlcy5oICAgICAgICAgIElORlRSRUVTIEMgICAgIFpMSUIgLSBIZWFkZXIgdG8gdXNlIGluZnRyZWVzLmMKKyAgICB0cmVlcy5oICAgICAgICAgICAgIFRSRUVTICAgIEMgICAgIFpMSUIgLSBDcmVhdGVkIGF1dG9tYXRpY2FsbHkgd2l0aCAtREdFTl9UUkVFU19ICisgICAgemNvbmYuaCAgICAgICAgICAgICBaQ09ORiAgICBDICAgICBaTElCIC0gQ29tcHJlc3Npb24gbGlicmFyeSBjb25maWd1cmF0aW9uCisgICAgemxpYi5oICAgICAgICAgICAgICBaTElCICAgICBDICAgICBaTElCIC0gQ29tcHJlc3Npb24gbGlicmFyeSBDIHVzZXIgaW50ZXJmYWNlCisgICAgYXM0MDAvemxpYi5pbmMgICAgICBaTElCLklOQyBSUEdMRSBaTElCIC0gQ29tcHJlc3Npb24gbGlicmFyeSBJTEUgUlBHIHVzZXIgaW50ZXJmYWNlCisgICAgenV0aWwuaCAgICAgICAgICAgICBaVVRJTCAgICBDICAgICBaTElCIC0gSW50ZXJuYWwgaW50ZXJmYWNlIGFuZCBjb25maWd1cmF0aW9uCisgICAgICAgICAgICAgICAgVE9PTFMgICAgICAgICAgICAgICAgICBCdWlsZGluZyBzb3VyY2Ugc29mdHdhcmUgJiBBUy80MDAgUkVBRE1FCisgICAgYXM0MDAvYm5kc3JjICAgICAgICBCTkRTUkMgICAgICAgICBFbnRyeSBwb2ludCBleHBvcnRhdGlvbiBsaXN0CisgICAgYXM0MDAvY29tcGlsZS5jbHAgICBDT01QSUxFICBDTFAgICBDb21waWxlIHNvdXJjZXMgJiBnZW5lcmF0ZSBzZXJ2aWNlIHByb2dyYW0KKyAgICBhczQwMC9yZWFkbWUudHh0ICAgIFJFQURNRSAgIFRYVCAgIEluc3RhbGxhdGlvbiBpbnN0cnVjdGlvbnMKKworNCkgICAgICBDb250aW51ZSBhcyBpbiBJKTMpLgorCisKKworCitOb3RlczogIEZvciBBUzQwMCBJTEUgUlBHIHByb2dyYW1tZXJzLCBhIC9jb3B5IG1lbWJlciBkZWZpbmluZyB0aGUgWkxJQgorICAgICAgICAgICAgICAgIEFQSSBwcm90b3R5cGVzIGZvciBJTEUgUlBHIGNhbiBiZSBmb3VuZCBpbiBaTElCL0goWkxJQi5JTkMpLgorICAgICAgICAgICAgICAgIFBsZWFzZSByZWFkIGNvbW1lbnRzIGluIHRoaXMgbWVtYmVyIGZvciBtb3JlIGluZm9ybWF0aW9uLgorCisgICAgICAgIFJlbWVtYmVyIHRoYXQgbW9zdCBmb3JlaWduIHRleHR1YWwgZGF0YSBhcmUgQVNDSUkgY29kZWQ6IHRoaXMKKyAgICAgICAgICAgICAgICBpbXBsZW1lbnRhdGlvbiBkb2VzIG5vdCBoYW5kbGUgY29udmVyc2lvbiBmcm9tL3RvIEFTQ0lJLCBzbworICAgICAgICAgICAgICAgIHRleHQgZGF0YSBjb2RlIGNvbnZlcnNpb25zIG11c3QgYmUgZG9uZSBleHBsaWNpdGVseS4KKworICAgICAgICBBbHdheXMgb3BlbiB6aXBwZWQgZmlsZXMgaW4gYmluYXJ5IG1vZGUuCmRpZmYgLS1naXQgYS9hczQwMC96bGliLmluYyBiL2FzNDAwL3psaWIuaW5jCm5ldyBmaWxlIG1vZGUgMTAwNjQ0CmluZGV4IDAwMDAwMDAuLjlhMGZjNTQKLS0tIC9kZXYvbnVsbAorKysgYi9hczQwMC96bGliLmluYwpAQCAtMCwwICsxLDMyNyBAQAorICAgICAgKiAgWkxJQi5JTkMgLSBJbnRlcmZhY2UgdG8gdGhlIGdlbmVyYWwgcHVycG9zZSBjb21wcmVzc2lvbiBsaWJyYXJ5CisgICAgICAqCisgICAgICAqICBJTEUgUlBHNDAwIHZlcnNpb24gYnkgUGF0cmljayBNb25uZXJhdCwgREFUQVNQSEVSRS4KKyAgICAgICogIFZlcnNpb24gMS4yLjAuNworICAgICAgKgorICAgICAgKgorICAgICAgKiAgV0FSTklORzoKKyAgICAgICogICAgIFByb2NlZHVyZXMgaW5mbGF0ZUluaXQoKSwgaW5mbGF0ZUluaXQyKCksIGRlZmxhdGVJbml0KCksCisgICAgICAqICAgICAgICAgZGVmbGF0ZUluaXQyKCkgYW5kIGluZmxhdGVCYWNrSW5pdCgpIG5lZWQgdG8gYmUgY2FsbGVkIHdpdGgKKyAgICAgICogICAgICAgICB0d28gYWRkaXRpb25hbCBhcmd1bWVudHM6CisgICAgICAqICAgICAgICAgdGhlIHBhY2thZ2UgdmVyc2lvbiBzdHJpbmcgYW5kIHRoZSBzdHJlYW0gY29udHJvbCBzdHJ1Y3R1cmUuCisgICAgICAqICAgICAgICAgc2l6ZS4gVGhpcyBpcyBuZWVkZWQgYmVjYXVzZSBSUEcgbGFja3Mgc29tZSBtYWNybyBmZWF0dXJlLgorICAgICAgKiAgICAgICAgIENhbGwgdGhlc2UgcHJvY2VkdXJlcyBhczoKKyAgICAgICogICAgICAgICAgICAgaW5mbGF0ZUluaXQoLi4uOiBaTElCX1ZFUlNJT046ICVzaXplKHpfc3RyZWFtKSkKKyAgICAgICoKKyAgICAgIC9pZiBub3QgZGVmaW5lZChaTElCX0hfKQorICAgICAgL2RlZmluZSBaTElCX0hfCisgICAgICAqCisgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb25zdGFudHMKKyAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAqCisgICAgIEQgWkxJQl9WRVJTSU9OICAgIEMgICAgICAgICAgICAgICAgICAgJzEuMi4wLjgnICAgICAgICAgICAgICAgICAgICAgICAgICAgIEhlYWRlcidzIHZlcnNpb24KKyAgICAgRCBaTElCX1ZFUk5VTSAgICAgQyAgICAgICAgICAgICAgICAgICBYJzEyMDgnCisgICAgICAqCisgICAgIEQgWl9OT19GTFVTSCAgICAgIEMgICAgICAgICAgICAgICAgICAgMAorICAgICBEIFpfU1lOQ19GTFVTSCAgICBDICAgICAgICAgICAgICAgICAgIDIKKyAgICAgRCBaX0ZVTExfRkxVU0ggICAgQyAgICAgICAgICAgICAgICAgICAzCisgICAgIEQgWl9GSU5JU0ggICAgICAgIEMgICAgICAgICAgICAgICAgICAgNAorICAgICBEIFpfQkxPQ0sgICAgICAgICBDICAgICAgICAgICAgICAgICAgIDUKKyAgICAgICoKKyAgICAgRCBaX09LICAgICAgICAgICAgQyAgICAgICAgICAgICAgICAgICAwCisgICAgIEQgWl9TVFJFQU1fRU5EICAgIEMgICAgICAgICAgICAgICAgICAgMQorICAgICBEIFpfTkVFRF9ESUNUICAgICBDICAgICAgICAgICAgICAgICAgIDIKKyAgICAgRCBaX0VSUk5PICAgICAgICAgQyAgICAgICAgICAgICAgICAgICAtMQorICAgICBEIFpfU1RSRUFNX0VSUk9SICBDICAgICAgICAgICAgICAgICAgIC0yCisgICAgIEQgWl9EQVRBX0VSUk9SICAgIEMgICAgICAgICAgICAgICAgICAgLTMKKyAgICAgRCBaX01FTV9FUlJPUiAgICAgQyAgICAgICAgICAgICAgICAgICAtNAorICAgICBEIFpfQlVGX0VSUk9SICAgICBDICAgICAgICAgICAgICAgICAgIC01CisgICAgIERaX1ZFUlNJT05fRVJST1IgIEMgICAgICAgICAgICAgICAgICAgLTYKKyAgICAgICoKKyAgICAgRCBaX05PX0NPTVBSRVNTSU9OLi4uCisgICAgIEQgICAgICAgICAgICAgICAgIEMgICAgICAgICAgICAgICAgICAgMAorICAgICBEIFpfQkVTVF9TUEVFRCAgICBDICAgICAgICAgICAgICAgICAgIDEKKyAgICAgRCBaX0JFU1RfQ09NUFJFU1NJT04uLi4KKyAgICAgRCAgICAgICAgICAgICAgICAgQyAgICAgICAgICAgICAgICAgICA5CisgICAgIEQgWl9ERUZBVUxUX0NPTVBSRVNTSU9OLi4uCisgICAgIEQgICAgICAgICAgICAgICAgIEMgICAgICAgICAgICAgICAgICAgLTEKKyAgICAgICoKKyAgICAgRCBaX0ZJTFRFUkVEICAgICAgQyAgICAgICAgICAgICAgICAgICAxCisgICAgIEQgWl9IVUZGTUFOX09OTFkgIEMgICAgICAgICAgICAgICAgICAgMgorICAgICBEIFpfUkxFICAgICAgICAgICBDICAgICAgICAgICAgICAgICAgIDMKKyAgICAgRCBaX0RFRkFVTFRfU1RSQVRFR1kuLi4KKyAgICAgRCAgICAgICAgICAgICAgICAgQyAgICAgICAgICAgICAgICAgICAwCisgICAgICAqCisgICAgIEQgWl9CSU5BUlkgICAgICAgIEMgICAgICAgICAgICAgICAgICAgMAorICAgICBEIFpfQVNDSUkgICAgICAgICBDICAgICAgICAgICAgICAgICAgIDEKKyAgICAgRCBaX1VOS05PV04gICAgICAgQyAgICAgICAgICAgICAgICAgICAyCisgICAgICAqCisgICAgIEQgWl9ERUZMQVRFRCAgICAgIEMgICAgICAgICAgICAgICAgICAgOAorICAgICAgKgorICAgICBEIFpfTlVMTCAgICAgICAgICBDICAgICAgICAgICAgICAgICAgIDAKKyAgICAgICoKKyAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVHlwZXMKKyAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAqCisgICAgIEQgel9zdHJlYW1wICAgICAgIFMgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmVhbSBzdHJ1Y3QgcHRyCisgICAgIEQgZ3pGaWxlICAgICAgICAgIFMgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEZpbGUgcG9pbnRlcgorICAgICBEIHpfb2ZmX3QgICAgICAgICBTICAgICAgICAgICAgIDEwaSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJlYW0gb2Zmc2V0cworICAgICAgKgorICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RydWN0dXJlcworICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICoKKyAgICAgICogIFRoZSBHWklQIGVuY29kZS9kZWNvZGUgc3RyZWFtIHN1cHBvcnQgc3RydWN0dXJlLgorICAgICAgKgorICAgICBEIHpfc3RyZWFtICAgICAgICBEUyAgICAgICAgICAgICAgICAgIGFsaWduIGJhc2VkKHpfc3RyZWFtcCkKKyAgICAgRCAgenNfbmV4dF9pbiAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgTmV4dCBpbnB1dCBieXRlCisgICAgIEQgIHpzX2F2YWlsX2luICAgICAgICAgICAgICAgICAgMTBVIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ5dGUgY250IGF0IG5leHRfaW4KKyAgICAgRCAgenNfdG90YWxfaW4gICAgICAgICAgICAgICAgICAxMFUgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgVG90YWwgYnl0ZXMgcmVhZAorICAgICBEICB6c19uZXh0X291dCAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQgYnVmZmVyIHB0cgorICAgICBEICB6c19hdmFpbF9vdXQgICAgICAgICAgICAgICAgIDEwVSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSb29tIGxlZnQgQCBuZXh0X291dAorICAgICBEICB6c190b3RhbF9vdXQgICAgICAgICAgICAgICAgIDEwVSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBUb3RhbCBieXRlcyB3cml0dGVuCisgICAgIEQgIHpzX21zZyAgICAgICAgICAgICAgICAgICAgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIExhc3QgZXJybXNnIG9yIG51bGwKKyAgICAgRCAgenNfc3RhdGUgICAgICAgICAgICAgICAgICAgICAgICogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50ZXJuYWwgc3RhdGUKKyAgICAgRCAgenNfemFsbG9jICAgICAgICAgICAgICAgICAgICAgICogICBwcm9jcHRyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50LiBzdGF0ZSBhbGxvY2F0b3IKKyAgICAgRCAgenNfZnJlZSAgICAgICAgICAgICAgICAgICAgICAgICogICBwcm9jcHRyICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgSW50LiBzdGF0ZSBkZWFsbG9jLgorICAgICBEICB6c19vcGFxdWUgICAgICAgICAgICAgICAgICAgICAgKiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQcml2YXRlIGFsbG9jLiBkYXRhCisgICAgIEQgIHpzX2RhdGFfdHlwZSAgICAgICAgICAgICAgICAgMTBpIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEFTQy9CSU4gYmVzdCBndWVzcworICAgICBEICB6c19hZGxlciAgICAgICAgICAgICAgICAgICAgIDEwdSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBVbmNvbXByLiBhZGxlcjMyIHZhbAorICAgICBEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwVSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBSZXNlcnZlZAorICAgICBEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwVSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBQdHIuIGFsaWdubWVudAorICAgICAgKgorICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICogICAgICAgICAgICAgICAgICAgICBVdGlsaXR5IGZ1bmN0aW9uIHByb3RvdHlwZXMKKyAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAqCisgICAgIEQgY29tcHJlc3MgICAgICAgIFBSICAgICAgICAgICAgMTBJIDAgZXh0cHJvYygnY29tcHJlc3MnKQorICAgICBEICBkZXN0ICAgICAgICAgICAgICAgICAgICAgIDMyNzY3ICAgIG9wdGlvbnMoKnZhcnNpemUpICAgICAgICAgICAgICAgICAgICBEZXN0aW5hdGlvbiBidWZmZXIKKyAgICAgRCAgZGVzdExlbiAgICAgICAgICAgICAgICAgICAgICAxMFUgMCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGVzdGluYXRpb24gbGVuZ3RoCisgICAgIEQgIHNvdXJjZSAgICAgICAgICAgICAgICAgICAgMzI3NjcgICAgY29uc3Qgb3B0aW9ucygqdmFyc2l6ZSkgICAgICAgICAgICAgIFNvdXJjZSBidWZmZXIKKyAgICAgRCAgc291cmNlTGVuICAgICAgICAgICAgICAgICAgICAxMHUgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU291cmNlIGxlbmd0aAorICAgICAgKgorICAgICBEIGNvbXByZXNzMiAgICAgICBQUiAgICAgICAgICAgIDEwSSAwIGV4dHByb2MoJ2NvbXByZXNzMicpCisgICAgIEQgIGRlc3QgICAgICAgICAgICAgICAgICAgICAgMzI3NjcgICAgb3B0aW9ucygqdmFyc2l6ZSkgICAgICAgICAgICAgICAgICAgIERlc3RpbmF0aW9uIGJ1ZmZlcgorICAgICBEICBkZXN0TGVuICAgICAgICAgICAgICAgICAgICAgIDEwVSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBEZXN0aW5hdGlvbiBsZW5ndGgKKyAgICAgRCAgc291cmNlICAgICAgICAgICAgICAgICAgICAzMjc2NyAgICBjb25zdCBvcHRpb25zKCp2YXJzaXplKSAgICAgICAgICAgICAgU291cmNlIGJ1ZmZlcgorICAgICBEICBzb3VyY2VMZW4gICAgICAgICAgICAgICAgICAgIDEwVSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2UgbGVuZ3RoCisgICAgIEQgIGxldmVsICAgICAgICAgICAgICAgICAgICAgICAgMTBJIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXByZXNzaW9uIGxldmVsCisgICAgICAqCisgICAgIEQgY29tcHJlc3NCb3VuZCAgIFBSICAgICAgICAgICAgMTBVIDAgZXh0cHJvYygnY29tcHJlc3NCb3VuZCcpCisgICAgIEQgIHNvdXJjZUxlbiAgICAgICAgICAgICAgICAgICAgMTBVIDAgdmFsdWUKKyAgICAgICoKKyAgICAgRCB1bmNvbXByZXNzICAgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCd1bmNvbXByZXNzJykKKyAgICAgRCAgZGVzdCAgICAgICAgICAgICAgICAgICAgICAzMjc2NyAgICBvcHRpb25zKCp2YXJzaXplKSAgICAgICAgICAgICAgICAgICAgRGVzdGluYXRpb24gYnVmZmVyCisgICAgIEQgIGRlc3RMZW4gICAgICAgICAgICAgICAgICAgICAgMTBVIDAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERlc3RpbmF0aW9uIGxlbmd0aAorICAgICBEICBzb3VyY2UgICAgICAgICAgICAgICAgICAgIDMyNzY3ICAgIGNvbnN0IG9wdGlvbnMoKnZhcnNpemUpICAgICAgICAgICAgICBTb3VyY2UgYnVmZmVyCisgICAgIEQgIHNvdXJjZUxlbiAgICAgICAgICAgICAgICAgICAgMTBVIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFNvdXJjZSBsZW5ndGgKKyAgICAgICoKKyAgICAgRCBnem9wZW4gICAgICAgICAgUFIgICAgICAgICAgICAgICAgICBleHRwcm9jKCdnem9wZW4nKQorICAgICBEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UoZ3pGaWxlKQorICAgICBEICBwYXRoICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlIG9wdGlvbnMoKnN0cmluZykgICAgICAgICAgICAgICBGaWxlIHBhdGhuYW1lCisgICAgIEQgIG1vZGUgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgb3B0aW9ucygqc3RyaW5nKSAgICAgICAgICAgICAgIE9wZW4gbW9kZQorICAgICAgKgorICAgICBEIGd6ZG9wZW4gICAgICAgICBQUiAgICAgICAgICAgICAgICAgIGV4dHByb2MoJ2d6ZG9wZW4nKQorICAgICBEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2UoZ3pGaWxlKQorICAgICBEICBmZCAgICAgICAgICAgICAgICAgICAgICAgICAgIDEwaSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGaWxlIGRlc2NyaXB0b3IKKyAgICAgRCAgbW9kZSAgICAgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSBvcHRpb25zKCpzdHJpbmcpICAgICAgICAgICAgICAgT3BlbiBtb2RlCisgICAgICAqCisgICAgIEQgZ3pzZXRwYXJhbXMgICAgIFBSICAgICAgICAgICAgMTBJIDAgZXh0cHJvYygnZ3pzZXRwYXJhbXMnKQorICAgICBEICBmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGxpa2UoZ3pGaWxlKSAgICAgICAgICAgICAgICAgICBGaWxlIHBvaW50ZXIKKyAgICAgRCAgbGV2ZWwgICAgICAgICAgICAgICAgICAgICAgICAxMEkgMCB2YWx1ZQorICAgICBEICBzdHJhdGVneSAgICAgICAgICAgICAgICAgICAgIDEwaSAwIHZhbHVlCisgICAgICAqCisgICAgIEQgZ3pyZWFkICAgICAgICAgIFBSICAgICAgICAgICAgMTBJIDAgZXh0cHJvYygnZ3pyZWFkJykKKyAgICAgRCAgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKGd6RmlsZSkgICAgICAgICAgICAgICAgICAgRmlsZSBwb2ludGVyCisgICAgIEQgIGJ1ZiAgICAgICAgICAgICAgICAgICAgICAgMzI3NjcgICAgb3B0aW9ucygqdmFyc2l6ZSkgICAgICAgICAgICAgICAgICAgIEJ1ZmZlcgorICAgICBEICBsZW4gICAgICAgICAgICAgICAgICAgICAgICAgIDEwdSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCdWZmZXIgbGVuZ3RoCisgICAgICAqCisgICAgIEQgZ3p3cml0ZSAgICAgICAgIFBSICAgICAgICAgICAgMTBJIDAgZXh0cHJvYygnZ3p3cml0ZScpCisgICAgIEQgIGZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShnekZpbGUpICAgICAgICAgICAgICAgICAgIEZpbGUgcG9pbnRlcgorICAgICBEICBidWYgICAgICAgICAgICAgICAgICAgICAgIDMyNzY3ICAgIGNvbnN0IG9wdGlvbnMoKnZhcnNpemUpICAgICAgICAgICAgICBCdWZmZXIKKyAgICAgRCAgbGVuICAgICAgICAgICAgICAgICAgICAgICAgICAxMHUgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQnVmZmVyIGxlbmd0aAorICAgICAgKgorICAgICBEIGd6cHV0cyAgICAgICAgICBQUiAgICAgICAgICAgIDEwSSAwIGV4dHByb2MoJ2d6cHV0cycpCisgICAgIEQgIGZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShnekZpbGUpICAgICAgICAgICAgICAgICAgIEZpbGUgcG9pbnRlcgorICAgICBEICBzICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlIG9wdGlvbnMoKnN0cmluZykgICAgICAgICAgICAgICBTdHJpbmcgdG8gb3V0cHV0CisgICAgICAqCisgICAgIEQgZ3pnZXRzICAgICAgICAgIFBSICAgICAgICAgICAgICAqICAgZXh0cHJvYygnZ3pnZXRzJykKKyAgICAgRCAgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKGd6RmlsZSkgICAgICAgICAgICAgICAgICAgRmlsZSBwb2ludGVyCisgICAgIEQgIGJ1ZiAgICAgICAgICAgICAgICAgICAgICAgMzI3NjcgICAgb3B0aW9ucygqdmFyc2l6ZSkgICAgICAgICAgICAgICAgICAgIFJlYWQgYnVmZmVyCisgICAgIEQgIGxlbiAgICAgICAgICAgICAgICAgICAgICAgICAgMTBpIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlciBsZW5ndGgKKyAgICAgICoKKyAgICAgRCBnemZsdXNoICAgICAgICAgUFIgICAgICAgICAgICAxMGkgMCBleHRwcm9jKCdnemZsdXNoJykKKyAgICAgRCAgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKGd6RmlsZSkgICAgICAgICAgICAgICAgICAgRmlsZSBwb2ludGVyCisgICAgIEQgIGZsdXNoICAgICAgICAgICAgICAgICAgICAgICAgMTBJIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFR5cGUgb2YgZmx1c2gKKyAgICAgICoKKyAgICAgRCBnenNlZWsgICAgICAgICAgUFIgICAgICAgICAgICAgICAgICBleHRwcm9jKCdnenNlZWsnKQorICAgICBEICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9vZmZfdCkKKyAgICAgRCAgZmlsZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YWx1ZSBsaWtlKGd6RmlsZSkgICAgICAgICAgICAgICAgICAgRmlsZSBwb2ludGVyCisgICAgIEQgIG9mZnNldCAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZSh6X29mZl90KSAgICAgICAgICAgICAgICAgIE9mZnNldAorICAgICBEICB3aGVuY2UgICAgICAgICAgICAgICAgICAgICAgIDEwaSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPcmlnaW4KKyAgICAgICoKKyAgICAgRCBnenJld2luZCAgICAgICAgUFIgICAgICAgICAgICAxMGkgMCBleHRwcm9jKCdnenJld2luZCcpCisgICAgIEQgIGZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShnekZpbGUpICAgICAgICAgICAgICAgICAgIEZpbGUgcG9pbnRlcgorICAgICAgKgorICAgICBEIGd6dGVsbCAgICAgICAgICBQUiAgICAgICAgICAgICAgICAgIGV4dHByb2MoJ2d6dGVsbCcpCisgICAgIEQgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSh6X29mZl90KQorICAgICBEICBmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGxpa2UoZ3pGaWxlKSAgICAgICAgICAgICAgICAgICBGaWxlIHBvaW50ZXIKKyAgICAgICoKKyAgICAgRCBnemVvZiAgICAgICAgICAgUFIgICAgICAgICAgICAxMGkgMCBleHRwcm9jKCdnemVvZicpCisgICAgIEQgIGZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShnekZpbGUpICAgICAgICAgICAgICAgICAgIEZpbGUgcG9pbnRlcgorICAgICAgKgorICAgICBEIGd6Y2xvc2UgICAgICAgICBQUiAgICAgICAgICAgIDEwaSAwIGV4dHByb2MoJ2d6Y2xvc2UnKQorICAgICBEICBmaWxlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhbHVlIGxpa2UoZ3pGaWxlKSAgICAgICAgICAgICAgICAgICBGaWxlIHBvaW50ZXIKKyAgICAgICoKKyAgICAgRCBnemVycm9yICAgICAgICAgUFIgICAgICAgICAgICAgICogICBleHRwcm9jKCdnemVycm9yJykgICAgICAgICAgICAgICAgICAgRXJyb3Igc3RyaW5nCisgICAgIEQgIGZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShnekZpbGUpICAgICAgICAgICAgICAgICAgIEZpbGUgcG9pbnRlcgorICAgICBEICBlcnJudW0gICAgICAgICAgICAgICAgICAgICAgIDEwSSAwICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBFcnJvciBjb2RlCisgICAgICAqCisgICAgIEQgZ3pjbGVhcmVyciAgICAgIFBSICAgICAgICAgICAgICAgICAgZXh0cHJvYygnZ3pjbGVhcmVycicpCisgICAgIEQgIGZpbGUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFsdWUgbGlrZShnekZpbGUpICAgICAgICAgICAgICAgICAgIEZpbGUgcG9pbnRlcgorICAgICAgKgorICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICogICAgICAgICAgICAgICAgICAgICAgICBCYXNpYyBmdW5jdGlvbiBwcm90b3R5cGVzCisgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgKgorICAgICBEIHpsaWJWZXJzaW9uICAgICBQUiAgICAgICAgICAgICAgKiAgIGV4dHByb2MoJ3psaWJWZXJzaW9uJykgICAgICAgICAgICAgICBWZXJzaW9uIHN0cmluZworICAgICAgKgorICAgICBEIGRlZmxhdGVJbml0ICAgICBQUiAgICAgICAgICAgIDEwSSAwIGV4dHByb2MoJ2RlZmxhdGVJbml0XycpICAgICAgICAgICAgICBJbml0LiBjb21wcmVzc2lvbgorICAgICBEICBzdHJtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9zdHJlYW0pICAgICAgICAgICAgICAgICAgICAgICBDb21wcmVzc2lvbiBzdHJlYW0KKyAgICAgRCAgbGV2ZWwgICAgICAgICAgICAgICAgICAgICAgICAxMEkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3Npb24gbGV2ZWwKKyAgICAgRCAgdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSBvcHRpb25zKCpzdHJpbmcpICAgICAgICAgICAgICAgVmVyc2lvbiBzdHJpbmcKKyAgICAgRCAgc3RyZWFtX3NpemUgICAgICAgICAgICAgICAgICAxMGkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyZWFtIHN0cnVjdC4gc2l6ZQorICAgICAgKgorICAgICBEIGRlZmxhdGUgICAgICAgICBQUiAgICAgICAgICAgIDEwSSAwIGV4dHByb2MoJ2RlZmxhdGUnKSAgICAgICAgICAgICAgICAgICBDb21wcmVzcyBkYXRhCisgICAgIEQgIHN0cm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSh6X3N0cmVhbSkgICAgICAgICAgICAgICAgICAgICAgIENvbXByZXNzaW9uIHN0cmVhbQorICAgICBEICBmbHVzaCAgICAgICAgICAgICAgICAgICAgICAgIDEwSSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbHVzaCB0eXBlIHJlcXVpcmVkCisgICAgICAqCisgICAgIEQgZGVmbGF0ZUVuZCAgICAgIFBSICAgICAgICAgICAgMTBJIDAgZXh0cHJvYygnZGVmbGF0ZUVuZCcpICAgICAgICAgICAgICAgIFRlcm1pbi4gY29tcHJlc3Npb24KKyAgICAgRCAgc3RybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfc3RyZWFtKSAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3Npb24gc3RyZWFtCisgICAgICAqCisgICAgIEQgaW5mbGF0ZUluaXQgICAgIFBSICAgICAgICAgICAgMTBJIDAgZXh0cHJvYygnaW5mbGF0ZUluaXRfJykgICAgICAgICAgICAgIEluaXQuIGV4cGFuc2lvbgorICAgICBEICBzdHJtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9zdHJlYW0pICAgICAgICAgICAgICAgICAgICAgICBFeHBhbnNpb24gc3RyZWFtCisgICAgIEQgIHZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgb3B0aW9ucygqc3RyaW5nKSAgICAgICAgICAgICAgIFZlcnNpb24gc3RyaW5nCisgICAgIEQgIHN0cmVhbV9zaXplICAgICAgICAgICAgICAgICAgMTBpIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmVhbSBzdHJ1Y3QuIHNpemUKKyAgICAgICoKKyAgICAgRCBpbmZsYXRlICAgICAgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdpbmZsYXRlJykgICAgICAgICAgICAgICAgICAgRXhwYW5kIGRhdGEKKyAgICAgRCAgc3RybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfc3RyZWFtKSAgICAgICAgICAgICAgICAgICAgICAgRXhwYW5zaW9uIHN0cmVhbQorICAgICBEICBmbHVzaCAgICAgICAgICAgICAgICAgICAgICAgIDEwSSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBGbHVzaCB0eXBlIHJlcXVpcmVkCisgICAgICAqCisgICAgIEQgaW5mbGF0ZUVuZCAgICAgIFBSICAgICAgICAgICAgMTBJIDAgZXh0cHJvYygnaW5mbGF0ZUVuZCcpICAgICAgICAgICAgICAgIFRlcm1pbi4gZXhwYW5zaW9uCisgICAgIEQgIHN0cm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSh6X3N0cmVhbSkgICAgICAgICAgICAgICAgICAgICAgIEV4cGFuc2lvbiBzdHJlYW0KKyAgICAgICoKKyAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgQWR2YW5jZWQgZnVuY3Rpb24gcHJvdG90eXBlcworICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICoKKyAgICAgRCBkZWZsYXRlSW5pdDIgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdkZWZsYXRlSW5pdDJfJykgICAgICAgICAgICAgSW5pdC4gY29tcHJlc3Npb24KKyAgICAgRCAgc3RybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfc3RyZWFtKSAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3Npb24gc3RyZWFtCisgICAgIEQgIGxldmVsICAgICAgICAgICAgICAgICAgICAgICAgMTBJIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXByZXNzaW9uIGxldmVsCisgICAgIEQgIG1ldGhvZCAgICAgICAgICAgICAgICAgICAgICAgMTBJIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIENvbXByZXNzaW9uIG1ldGhvZAorICAgICBEICB3aW5kb3dCaXRzICAgICAgICAgICAgICAgICAgIDEwSSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2cyKHdpbmRvdyBzaXplKQorICAgICBEICBtZW1MZXZlbCAgICAgICAgICAgICAgICAgICAgIDEwSSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBNZW0vY21wcmVzcyB0cmFkZW9mZgorICAgICBEICBzdHJhdGVneSAgICAgICAgICAgICAgICAgICAgIDEwSSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBDb21wcmVzc2lvbiBzdGF0ZWd5CisgICAgIEQgIHZlcnNpb24gICAgICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgb3B0aW9ucygqc3RyaW5nKSAgICAgICAgICAgICAgIFZlcnNpb24gc3RyaW5nCisgICAgIEQgIHN0cmVhbV9zaXplICAgICAgICAgICAgICAgICAgMTBpIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIFN0cmVhbSBzdHJ1Y3QuIHNpemUKKyAgICAgICoKKyAgICAgRCBkZWZsYXRlU2V0RGljdGlvbmFyeS4uLgorICAgICBEICAgICAgICAgICAgICAgICBQUiAgICAgICAgICAgIDEwSSAwIGV4dHByb2MoJ2RlZmxhdGVTZXREaWN0aW9uYXJ5JykgICAgICBJbml0LiBkaWN0aW9uYXJ5CisgICAgIEQgIHN0cm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSh6X3N0cmVhbSkgICAgICAgICAgICAgICAgICAgICAgIENvbXByZXNzaW9uIHN0cmVhbQorICAgICBEICBkaWN0aW9uYXJ5ICAgICAgICAgICAgICAgIDMyNzY3ICAgIGNvbnN0IG9wdGlvbnMoKnZhcnNpemUpICAgICAgICAgICAgICBEaWN0aW9uYXJ5IGJ5dGVzCisgICAgIEQgIGRpY3RMZW5ndGggICAgICAgICAgICAgICAgICAgMTBVIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIERpY3Rpb25hcnkgbGVuZ3RoCisgICAgICAqCisgICAgIEQgZGVmbGF0ZUNvcHkgICAgIFBSICAgICAgICAgICAgMTBJIDAgZXh0cHJvYygnZGVmbGF0ZUNvcHknKSAgICAgICAgICAgICAgIENvbXByZXNzIHN0cm0gMiBzdHJtCisgICAgIEQgIGRlc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSh6X3N0cmVhbSkgICAgICAgICAgICAgICAgICAgICAgIERlc3RpbmF0aW9uIHN0cmVhbQorICAgICBEICBzb3VyY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9zdHJlYW0pICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2Ugc3RyZWFtCisgICAgICAqCisgICAgIEQgZGVmbGF0ZVJlc2V0ICAgIFBSICAgICAgICAgICAgMTBJIDAgZXh0cHJvYygnZGVmbGF0ZVJlc2V0JykgICAgICAgICAgICAgIEVuZCBhbmQgaW5pdC4gc3RyZWFtCisgICAgIEQgIHN0cm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSh6X3N0cmVhbSkgICAgICAgICAgICAgICAgICAgICAgIENvbXByZXNzaW9uIHN0cmVhbQorICAgICAgKgorICAgICBEIGRlZmxhdGVQYXJhbXMgICBQUiAgICAgICAgICAgIDEwSSAwIGV4dHByb2MoJ2RlZmxhdGVQYXJhbXMnKSAgICAgICAgICAgICBDaGFuZ2UgbGV2ZWwgJiBzdHJhdAorICAgICBEICBzdHJtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9zdHJlYW0pICAgICAgICAgICAgICAgICAgICAgICBDb21wcmVzc2lvbiBzdHJlYW0KKyAgICAgRCAgbGV2ZWwgICAgICAgICAgICAgICAgICAgICAgICAxMEkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3Npb24gbGV2ZWwKKyAgICAgRCAgc3RyYXRlZ3kgICAgICAgICAgICAgICAgICAgICAxMEkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3Npb24gc3RhdGVneQorICAgICAgKgorICAgICBEIGRlZmxhdGVCb3VuZCAgICBQUiAgICAgICAgICAgIDEwVSAwIGV4dHByb2MoJ2RlZmxhdGVCb3VuZCcpICAgICAgICAgICAgICBDaGFuZ2UgbGV2ZWwgJiBzdHJhdAorICAgICBEICBzdHJtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9zdHJlYW0pICAgICAgICAgICAgICAgICAgICAgICBDb21wcmVzc2lvbiBzdHJlYW0KKyAgICAgRCAgc291cmNlbGVuICAgICAgICAgICAgICAgICAgICAxMFUgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3Npb24gbGV2ZWwKKyAgICAgICoKKyAgICAgRCBkZWZsYXRlUHJpbWUgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdkZWZsYXRlUHJpbWUnKSAgICAgICAgICAgICAgQ2hhbmdlIGxldmVsICYgc3RyYXQKKyAgICAgRCAgc3RybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfc3RyZWFtKSAgICAgICAgICAgICAgICAgICAgICAgQ29tcHJlc3Npb24gc3RyZWFtCisgICAgIEQgIGJpdHMgICAgICAgICAgICAgICAgICAgICAgICAgMTBJIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE51bWJlciBvZiBiaXRzIHRvIGluc2VydAorICAgICBEICB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgIDEwSSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBCaXRzIHRvIGluc2VydAorICAgICAgKgorICAgICBEIGluZmxhdGVJbml0MiAgICBQUiAgICAgICAgICAgIDEwSSAwIGV4dHByb2MoJ2luZmxhdGVJbml0Ml8nKSAgICAgICAgICAgICBJbml0LiBleHBhbnNpb24KKyAgICAgRCAgc3RybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfc3RyZWFtKSAgICAgICAgICAgICAgICAgICAgICAgRXhwYW5zaW9uIHN0cmVhbQorICAgICBEICB3aW5kb3dCaXRzICAgICAgICAgICAgICAgICAgIDEwSSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsb2cyKHdpbmRvdyBzaXplKQorICAgICBEICB2ZXJzaW9uICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlIG9wdGlvbnMoKnN0cmluZykgICAgICAgICAgICAgICBWZXJzaW9uIHN0cmluZworICAgICBEICBzdHJlYW1fc2l6ZSAgICAgICAgICAgICAgICAgIDEwaSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBTdHJlYW0gc3RydWN0LiBzaXplCisgICAgICAqCisgICAgIEQgaW5mbGF0ZVNldERpY3Rpb25hcnkuLi4KKyAgICAgRCAgICAgICAgICAgICAgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdpbmZsYXRlU2V0RGljdGlvbmFyeScpICAgICAgSW5pdC4gZGljdGlvbmFyeQorICAgICBEICBzdHJtICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9zdHJlYW0pICAgICAgICAgICAgICAgICAgICAgICBFeHBhbnNpb24gc3RyZWFtCisgICAgIEQgIGRpY3Rpb25hcnkgICAgICAgICAgICAgICAgMzI3NjcgICAgY29uc3Qgb3B0aW9ucygqdmFyc2l6ZSkgICAgICAgICAgICAgIERpY3Rpb25hcnkgYnl0ZXMKKyAgICAgRCAgZGljdExlbmd0aCAgICAgICAgICAgICAgICAgICAxMFUgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRGljdGlvbmFyeSBsZW5ndGgKKyAgICAgICoKKyAgICAgRCBpbmZsYXRlU3luYyAgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdpbmZsYXRlU3luYycpICAgICAgICAgICAgICAgU3luYy4gZXhwYW5zaW9uCisgICAgIEQgIHN0cm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSh6X3N0cmVhbSkgICAgICAgICAgICAgICAgICAgICAgIEV4cGFuc2lvbiBzdHJlYW0KKyAgICAgICoKKyAgICAgRCBpbmZsYXRlQ29weSAgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdpbmZsYXRlQ29weScpCisgICAgIEQgIGRlc3QgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSh6X3N0cmVhbSkgICAgICAgICAgICAgICAgICAgICAgIERlc3RpbmF0aW9uIHN0cmVhbQorICAgICBEICBzb3VyY2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGxpa2Uoel9zdHJlYW0pICAgICAgICAgICAgICAgICAgICAgICBTb3VyY2Ugc3RyZWFtCisgICAgICAqCisgICAgIEQgaW5mbGF0ZVJlc2V0ICAgIFBSICAgICAgICAgICAgMTBJIDAgZXh0cHJvYygnaW5mbGF0ZVJlc2V0JykgICAgICAgICAgICAgIEVuZCBhbmQgaW5pdC4gc3RyZWFtCisgICAgIEQgIHN0cm0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbGlrZSh6X3N0cmVhbSkgICAgICAgICAgICAgICAgICAgICAgIEV4cGFuc2lvbiBzdHJlYW0KKyAgICAgICoKKyAgICAgRCBpbmZsYXRlQmFja0luaXQuLi4KKyAgICAgRCAgICAgICAgICAgICAgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdpbmZsYXRlQmFja0luaXRfJykKKyAgICAgRCAgc3RybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfc3RyZWFtKSAgICAgICAgICAgICAgICAgICAgICAgRXhwYW5zaW9uIHN0cmVhbQorICAgICBEICB3aW5kb3dCaXRzICAgICAgICAgICAgICAgICAgIDEwSSAwIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBMb2cyKGJ1ZmZlciBzaXplKQorICAgICBEICB3aW5kb3cgICAgICAgICAgICAgICAgICAgIDMyNzY3ICAgIG9wdGlvbnMoKnZhcnNpemUpICAgICAgICAgICAgICAgICAgICBCdWZmZXIKKyAgICAgRCAgdmVyc2lvbiAgICAgICAgICAgICAgICAgICAgICAgICogICB2YWx1ZSBvcHRpb25zKCpzdHJpbmcpICAgICAgICAgICAgICAgVmVyc2lvbiBzdHJpbmcKKyAgICAgRCAgc3RyZWFtX3NpemUgICAgICAgICAgICAgICAgICAxMGkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgU3RyZWFtIHN0cnVjdC4gc2l6ZQorICAgICAgKgorICAgICBEIGluZmxhdGVCYWNrICAgICBQUiAgICAgICAgICAgIDEwSSAwIGV4dHByb2MoJ2luZmxhdGVCYWNrJykKKyAgICAgRCAgc3RybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfc3RyZWFtKSAgICAgICAgICAgICAgICAgICAgICAgRXhwYW5zaW9uIHN0cmVhbQorICAgICBEICBpbiAgICAgICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlIHByb2NwdHIgICAgICAgICAgICAgICAgICAgICAgICBJbnB1dCBmdW5jdGlvbgorICAgICBEICBpbl9kZXNjICAgICAgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBJbnB1dCBkZXNjcmlwdG9yCisgICAgIEQgIG91dCAgICAgICAgICAgICAgICAgICAgICAgICAgICAqICAgdmFsdWUgcHJvY3B0ciAgICAgICAgICAgICAgICAgICAgICAgIE91dHB1dCBmdW5jdGlvbgorICAgICBEICBvdXRfZGVzYyAgICAgICAgICAgICAgICAgICAgICAgKiAgIHZhbHVlICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBPdXRwdXQgZGVzY3JpcHRvcgorICAgICAgKgorICAgICBEIGluZmxhdGVCYWNrRW5kICBQUiAgICAgICAgICAgIDEwSSAwIGV4dHByb2MoJ2luZmxhdGVCYWNrRW5kJykKKyAgICAgRCAgc3RybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfc3RyZWFtKSAgICAgICAgICAgICAgICAgICAgICAgRXhwYW5zaW9uIHN0cmVhbQorICAgICAgKgorICAgICBEIHpsaWJDb21waWxlRmxhZ3MuLi4KKyAgICAgRCAgICAgICAgICAgICAgICAgUFIgICAgICAgICAgICAxMFUgMCBleHRwcm9jKCd6bGliQ29tcGlsZUZsYWdzJykKKyAgICAgICoKKyAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAqICAgICAgICAgICAgICAgICAgICAgICAgQ2hlY2tzdW0gZnVuY3Rpb24gcHJvdG90eXBlcworICAgICAgKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioKKyAgICAgICoKKyAgICAgRCBhZGxlcjMyICAgICAgICAgUFIgICAgICAgICAgICAxMFUgMCBleHRwcm9jKCdhZGxlcjMyJykgICAgICAgICAgICAgICAgICAgTmV3IGNoZWNrc3VtCisgICAgIEQgIGFkbGVyICAgICAgICAgICAgICAgICAgICAgICAgMTBVIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9sZCBjaGVja3N1bQorICAgICBEICBidWYgICAgICAgICAgICAgICAgICAgICAgIDMyNzY3ICAgIGNvbnN0IG9wdGlvbnMoKnZhcnNpemUpICAgICAgICAgICAgICBCeXRlcyB0byBhY2N1bXVsYXRlCisgICAgIEQgIGxlbiAgICAgICAgICAgICAgICAgICAgICAgICAgMTBVIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlciBsZW5ndGgKKyAgICAgICoKKyAgICAgRCBjcmMzMiAgICAgICAgICAgUFIgICAgICAgICAgICAxMFUgMCBleHRwcm9jKCdjcmMzMicpICAgICAgICAgICAgICAgICAgICAgTmV3IGNoZWNrc3VtCisgICAgIEQgIGNyYyAgICAgICAgICAgICAgICAgICAgICAgICAgMTBVIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIE9sZCBjaGVja3N1bQorICAgICBEICBidWYgICAgICAgICAgICAgICAgICAgICAgIDMyNzY3ICAgIGNvbnN0IG9wdGlvbnMoKnZhcnNpemUpICAgICAgICAgICAgICBCeXRlcyB0byBhY2N1bXVsYXRlCisgICAgIEQgIGxlbiAgICAgICAgICAgICAgICAgICAgICAgICAgMTBVIDAgdmFsdWUgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEJ1ZmZlciBsZW5ndGgKKyAgICAgICoKKyAgICAgICoqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqCisgICAgICAqICAgICAgICAgICAgICAgICAgICAgTWlzY2VsbGFuZW91cyBmdW5jdGlvbiBwcm90b3R5cGVzCisgICAgICAqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKioqKgorICAgICAgKgorICAgICBEIHpFcnJvciAgICAgICAgICBQUiAgICAgICAgICAgICAgKiAgIGV4dHByb2MoJ3pFcnJvcicpICAgICAgICAgICAgICAgICAgICBFcnJvciBzdHJpbmcKKyAgICAgRCAgZXJyICAgICAgICAgICAgICAgICAgICAgICAgICAxMEkgMCB2YWx1ZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgRXJyb3IgY29kZQorICAgICAgKgorICAgICBEIGluZmxhdGVTeW5jUG9pbnQuLi4KKyAgICAgRCAgICAgICAgICAgICAgICAgUFIgICAgICAgICAgICAxMEkgMCBleHRwcm9jKCdpbmZsYXRlU3luY1BvaW50JykKKyAgICAgRCAgc3RybSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBsaWtlKHpfc3RyZWFtKSAgICAgICAgICAgICAgICAgICAgICAgRXhwYW5zaW9uIHN0cmVhbQorICAgICAgKgorICAgICBEIGdldF9jcmNfdGFibGUgICBQUiAgICAgICAgICAgICAgKiAgIGV4dHByb2MoJ2dldF9jcmNfdGFibGUnKSAgICAgICAgICAgICBQdHIgdG8gdWxvbmdzCisgICAgICAqCisgICAgICAvZW5kaWYKZGlmZiAtLWdpdCBhL2NvbmZpZ3VyZSBiL2NvbmZpZ3VyZQppbmRleCBlNTcwYTdhLi45MmE1NzM3IDEwMDc1NQotLS0gYS9jb25maWd1cmUKKysrIGIvY29uZmlndXJlCkBAIC01Myw2ICs1Myw3IEBACiAgICAgLWwqIHwgLS1sKikgbGliZGlyPSIkMiI7IHNoaWZ0OyBzaGlmdDs7CiAgICAgLWkqIHwgLS1pKikgaW5jbHVkZWRpcj0iJDIiOyBzaGlmdDsgc2hpZnQ7OwogICAgIC1zKiB8IC0tcyopIHNoYXJlZD0xOyBzaGlmdDs7CisgICAgKikgZWNobyAidW5rbm93biBvcHRpb246ICQxIjsgZWNobyAiJDAgLS1oZWxwIGZvciBoZWxwIjsgZXhpdCAxOzsKICAgICBlc2FjCiBkb25lCiAKQEAgLTc2LDYgKzc3LDggQEAKICAgQ0ZMQUdTPSIkY2ZsYWdzIgogICBjYXNlIGAodW5hbWUgLXMgfHwgZWNobyB1bmtub3duKSAyPi9kZXYvbnVsbGAgaW4KICAgTGludXggfCBsaW51eCkgTERTSEFSRUQ9JHtMRFNIQVJFRC0iJGNjIC1zaGFyZWQgLVdsLC1zb25hbWUsbGliei5zby4xIn07OworICBDWUdXSU4qIHwgQ3lnd2luKiB8IGN5Z3dpbiogKQorICAgICAgICAgICAgIEVYRT0nLmV4ZSc7OwogICBRTlgqKSAgIyBUaGlzIGlzIGZvciBRTlg2LiBJIHN1cHBvc2UgdGhhdCB0aGUgUU5YIHJ1bGUgYmVsb3cgaXMgZm9yIFFOWDIsUU5YNAogICAgICAgICAgIyAoYWxhaW4uYm9ubmVmb3lAaWNidC5jb20pCiAgICAgICAgICAgICAgICAgIExEU0hBUkVEPSR7TERTSEFSRUQtIiRjYyAtc2hhcmVkIC1XbCwtaGxpYnouc28uMSJ9OzsKQEAgLTE4OCwxMSArMTkxLDggQEAKIAogY2F0ID4gJHRlc3QuYyA8PEVPRgogI2luY2x1ZGUgPHN0ZGlvLmg+Ci0jaW5jbHVkZSA8c3RkbGliLmg+Ci0KLSNpZiAoZGVmaW5lZChfX01TRE9TX18pIHx8IGRlZmluZWQoX1dJTkRPV1MpIHx8IGRlZmluZWQoX1dJTjMyKSB8fCBkZWZpbmVkKF9fV0lOMzJfXykgfHwgZGVmaW5lZChXSU4zMikgfHwgZGVmaW5lZChfX1NURENfXykgfHwgZGVmaW5lZChfX2NwbHVzcGx1cykgfHwgZGVmaW5lZChfX09TMl9fKSkgJiYgIWRlZmluZWQoU1REQykKLSMgIGRlZmluZSBTVERDCi0jZW5kaWYKKyNpbmNsdWRlIDxzdGRhcmcuaD4KKyNpbmNsdWRlICJ6Y29uZi5oIgogCiBpbnQgbWFpbigpCiB7CkBAIC0yMDUsNyArMjA1LDcgQEAKIEVPRgogCiBpZiB0ZXN0ICJgKCRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmMpIDI+JjFgIiA9ICIiOyB0aGVuCi0gIGVjaG8gIkNoZWNraW5nIHdoZXRoZXIgdG8gdXNlIHZzbnByaW50ZigpIG9yIHNucHJpbnRmKCkuLi4gdXNpbmcgdnNucHJpbnRmKCkiCisgIGVjaG8gIkNoZWNraW5nIHdoZXRoZXIgdG8gdXNlIHZzW25dcHJpbnRmKCkgb3Igc1tuXXByaW50ZigpLi4uIHVzaW5nIHZzW25dcHJpbnRmKCkiCiAKICAgY2F0ID4gJHRlc3QuYyA8PEVPRgogI2luY2x1ZGUgPHN0ZGlvLmg+CkBAIC0yMjgsNyArMjI4LDcgQEAKIH0KIEVPRgogCi0gIGlmIHRlc3QgImAoJENDIC1jICRDRkxBR1MgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KKyAgaWYgdGVzdCAiYCgkQ0MgJENGTEFHUyAtbyAkdGVzdCAkdGVzdC5jKSAyPiYxYCIgPSAiIjsgdGhlbgogICAgIGVjaG8gIkNoZWNraW5nIGZvciB2c25wcmludGYoKSBpbiBzdGRpby5oLi4uIFllcy4iCiAKICAgICBjYXQgPiR0ZXN0LmMgPDxFT0YKQEAgLTIzNywxNCArMjM3LDE0IEBACiAKIGludCBteXRlc3QoY2hhciAqZm10LCAuLi4pCiB7Ci0gIGludCBpOworICBpbnQgbjsKICAgY2hhciBidWZbMjBdOwogICB2YV9saXN0IGFwOwogCiAgIHZhX3N0YXJ0KGFwLCBmbXQpOwotICBpID0gdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXApOworICBuID0gdnNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksIGZtdCwgYXApOwogICB2YV9lbmQoYXApOwotICByZXR1cm4gMDsKKyAgcmV0dXJuIG47CiB9CiAKIGludCBtYWluKCkKQEAgLTI3NSwxNCArMjc1LDE0IEBACiAKIGludCBteXRlc3QoY2hhciAqZm10LCAuLi4pCiB7Ci0gIGludCBpOworICBpbnQgbjsKICAgY2hhciBidWZbMjBdOwogICB2YV9saXN0IGFwOwogCiAgIHZhX3N0YXJ0KGFwLCBmbXQpOwotICBpID0gdnNwcmludGYoYnVmLCBmbXQsIGFwKTsKKyAgbiA9IHZzcHJpbnRmKGJ1ZiwgZm10LCBhcCk7CiAgIHZhX2VuZChhcCk7Ci0gIHJldHVybiAwOworICByZXR1cm4gbjsKIH0KIAogaW50IG1haW4oKQpAQCAtMzAyLDExICszMDIsMTAgQEAKICAgICBmaQogICBmaQogZWxzZQotICBlY2hvICJDaGVja2luZyB3aGV0aGVyIHRvIHVzZSB2c25wcmludGYoKSBvciBzbnByaW50ZigpLi4uIHVzaW5nIHNucHJpbnRmKCkiCisgIGVjaG8gIkNoZWNraW5nIHdoZXRoZXIgdG8gdXNlIHZzW25dcHJpbnRmKCkgb3Igc1tuXXByaW50ZigpLi4uIHVzaW5nIHNbbl1wcmludGYoKSIKIAogICBjYXQgPiR0ZXN0LmMgPDxFT0YKICNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgogCiBpbnQgbXl0ZXN0KCkKIHsKQEAgLTMyMiwyMCArMzIxLDE3IEBACiB9CiBFT0YKIAotICBpZiB0ZXN0ICJgKCRDQyAtYyAkQ0ZMQUdTICR0ZXN0LmMpIDI+JjFgIiA9ICIiOyB0aGVuCisgIGlmIHRlc3QgImAoJENDICRDRkxBR1MgLW8gJHRlc3QgJHRlc3QuYykgMj4mMWAiID0gIiI7IHRoZW4KICAgICBlY2hvICJDaGVja2luZyBmb3Igc25wcmludGYoKSBpbiBzdGRpby5oLi4uIFllcy4iCiAKICAgICBjYXQgPiR0ZXN0LmMgPDxFT0YKICNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgogCi1pbnQgbXl0ZXN0KGNoYXIgKmZtdCwgLi4uKQoraW50IG15dGVzdCgpCiB7Ci0gIGludCBpOwogICBjaGFyIGJ1ZlsyMF07CiAKLSAgaSA9IHNucHJpbnRmKGJ1Ziwgc2l6ZW9mKGJ1ZiksICIlcyIsICJmb28iKTsKLSAgcmV0dXJuIDA7CisgIHJldHVybiBzbnByaW50ZihidWYsIHNpemVvZihidWYpLCAiJXMiLCAiZm9vIik7CiB9CiAKIGludCBtYWluKCkKQEAgLTM2MiwxNSArMzU4LDEyIEBACiAKICAgICBjYXQgPiR0ZXN0LmMgPDxFT0YKICNpbmNsdWRlIDxzdGRpby5oPgotI2luY2x1ZGUgPHN0ZGFyZy5oPgogCi1pbnQgbXl0ZXN0KGNoYXIgKmZtdCwgLi4uKQoraW50IG15dGVzdCgpCiB7Ci0gIGludCBpOwogICBjaGFyIGJ1ZlsyMF07CiAKLSAgaSA9IHNwcmludGYoYnVmLCAiJXMiLCAiZm9vIik7Ci0gIHJldHVybiAwOworICByZXR1cm4gc3ByaW50ZihidWYsICIlcyIsICJmb28iKTsKIH0KIAogaW50IG1haW4oKQpAQCAtNDI4LDcgKzQyMSw3IEBACiAgICAgZmk7OwogZXNhYwogCi1ybSAtZiAkdGVzdC5bY29dICR0ZXN0JHNoYXJlZF9leHQKK3JtIC1mICR0ZXN0Lltjb10gJHRlc3QgJHRlc3Qkc2hhcmVkX2V4dAogCiAjIHVkcGF0ZSBNYWtlZmlsZQogc2VkIDwgTWFrZWZpbGUuaW4gIgpAQCAtNDQyLDYgKzQzNSw3IEBACiAvXlNIQVJFRExJQk0gKj0vcyM9LiojPSRTSEFSRURMSUJNIwogL15BUiAqPS9zIz0uKiM9JEFSIwogL15SQU5MSUIgKj0vcyM9LiojPSRSQU5MSUIjCisvXkVYRSAqPS9zIz0uKiM9JEVYRSMKIC9ecHJlZml4ICo9L3MjPS4qIz0kcHJlZml4IwogL15leGVjX3ByZWZpeCAqPS9zIz0uKiM9JGV4ZWNfcHJlZml4IwogL15saWJkaXIgKj0vcyM9LiojPSRsaWJkaXIjCmRpZmYgLS1naXQgYS9jb250cmliL1JFQURNRS5jb250cmliIGIvY29udHJpYi9SRUFETUUuY29udHJpYgppbmRleCA5NmYyYzQzLi44ODYwZjMxIDEwMDY0NAotLS0gYS9jb250cmliL1JFQURNRS5jb250cmliCisrKyBiL2NvbnRyaWIvUkVBRE1FLmNvbnRyaWIKQEAgLTUsNjIgKzUsNjYgQEAKIAogCiBhZGEvICAgICAgICBieSBEbWl0cml5IEFuaXNpbWtvdiA8YW5pc2lta292QHlhaG9vLmNvbT4KLQlTdXBwb3J0IGZvciBBZGEKLQlTZWUgaHR0cDovL3psaWItYWRhLnNvdXJjZWZvcmdlLm5ldC8KKyAgICAgICAgU3VwcG9ydCBmb3IgQWRhCisgICAgICAgIFNlZSBodHRwOi8vemxpYi1hZGEuc291cmNlZm9yZ2UubmV0LwogCi1hc201ODYvIGFuZCBhc202ODYvIGJ5IEJyaWFuIFJhaXRlciA8YnJlYWRib3hAbXVwcGV0bGFicy5jb20+Ci0JYXNtIGNvZGUgZm9yIFBlbnRpdW0gYW5kIFBQcm8vUElJLCB1c2luZyB0aGUgQVQmVCAoR05VIGFzKSBzeW50YXgKLQlTZWUgaHR0cDovL3d3dy5tdXBwZXRsYWJzLmNvbS9+YnJlYWRib3gvc29mdHdhcmUvYXNzZW1ibHkuaHRtbAorYXNtNTg2LworYXNtNjg2LyAgICAgYnkgQnJpYW4gUmFpdGVyIDxicmVhZGJveEBtdXBwZXRsYWJzLmNvbT4KKyAgICAgICAgYXNtIGNvZGUgZm9yIFBlbnRpdW0gYW5kIFBQcm8vUElJLCB1c2luZyB0aGUgQVQmVCAoR05VIGFzKSBzeW50YXgKKyAgICAgICAgU2VlIGh0dHA6Ly93d3cubXVwcGV0bGFicy5jb20vfmJyZWFkYm94L3NvZnR3YXJlL2Fzc2VtYmx5Lmh0bWwKIAogYmxhc3QvICAgICAgYnkgTWFyayBBZGxlciA8bWFkbGVyQGFsdW1uaS5jYWx0ZWNoLmVkdT4KLQlEZWNvbXByZXNzb3IgZm9yIG91dHB1dCBvZiBQS1dhcmUgRGF0YSBDb21wcmVzc2lvbiBMaWJyYXJ5IChEQ0wpCisgICAgICAgIERlY29tcHJlc3NvciBmb3Igb3V0cHV0IG9mIFBLV2FyZSBEYXRhIENvbXByZXNzaW9uIExpYnJhcnkgKERDTCkKIAogZGVscGhpLyAgICAgYnkgQ29zbWluIFRydXRhIDxjb3NtaW50QGNzLnViYmNsdWoucm8+Ci0JU3VwcG9ydCBmb3IgRGVscGhpIGFuZCBDKysgQnVpbGRlcgorICAgICAgICBTdXBwb3J0IGZvciBEZWxwaGkgYW5kIEMrKyBCdWlsZGVyCisKK2d6YXBwZW5kLyAgIGJ5IE1hcmsgQWRsZXIgPG1hZGxlckBhbHVtbmkuY2FsdGVjaC5lZHU+CisgICAgICAgIGFwcGVuZCB0byBhIGd6aXAgZmlsZSAtLSBpbGx1c3RyYXRlcyB0aGUgdXNlIG9mIFpfQkxPQ0sKIAogaW5mYmFjazkvICAgYnkgTWFyayBBZGxlciA8bWFkbGVyQGFsdW1uaS5jYWx0ZWNoLmVkdT4KICAgICAgICAgVW5zdXBwb3J0ZWQgZGlmZnMgdG8gaW5mYmFjayB0byBkZWNvZGUgdGhlIGRlZmxhdGU2NCBmb3JtYXQKIAogaW5mbGF0ZTg2LyAgYnkgQ2hyaXMgQW5kZXJzb24gPGNocmlzdG9wQGNoYXJtLm5ldD4KLQlUdW5lZCB4ODYgZ2NjIGFzbSBjb2RlIHRvIHJlcGxhY2UgaW5mbGF0ZV9mYXN0KCkKKyAgICAgICAgVHVuZWQgeDg2IGdjYyBhc20gY29kZSB0byByZXBsYWNlIGluZmxhdGVfZmFzdCgpCiAKIGlvc3RyZWFtLyAgIGJ5IEtldmluIFJ1bGFuZCA8a2V2aW5Acm9kaW4ud3VzdGwuZWR1PgotCUEgQysrIEkvTyBzdHJlYW1zIGludGVyZmFjZSB0byB0aGUgemxpYiBneiogZnVuY3Rpb25zCisgICAgICAgIEEgQysrIEkvTyBzdHJlYW1zIGludGVyZmFjZSB0byB0aGUgemxpYiBneiogZnVuY3Rpb25zCiAKIGlvc3RyZWFtMi8gIGJ5IFR5Z2UgTPh2c2V0IDxUeWdlLkxvdnNldEBjbXIubm8+Ci0JQW5vdGhlciBDKysgSS9PIHN0cmVhbXMgaW50ZXJmYWNlCisgICAgICAgIEFub3RoZXIgQysrIEkvTyBzdHJlYW1zIGludGVyZmFjZQogCiBpb3N0cmVhbTMvICBieSBMdWR3aWcgU2Nod2FyZHQgPHNjaHdhcmR0QHN1bi5hYy56YT4KICAgICAgICAgICAgIGFuZCBLZXZpbiBSdWxhbmQgPGtldmluQHJvZGluLnd1c3RsLmVkdT4KLQlZZXQgYW5vdGhlciBDKysgSS9PIHN0cmVhbXMgaW50ZXJmYWNlCisgICAgICAgIFlldCBhbm90aGVyIEMrKyBJL08gc3RyZWFtcyBpbnRlcmZhY2UKIAogbWFzbTY4Ni8gICAgYnkgRGFuIEhpZ2RvbiA8aGRhbkBraW5lc29mdC5jb20+CiAgICAgICAgICAgICBhbmQgQ2h1Y2sgV2FsYm91cm4gPGNodWNrd0BraW5lc29mdC5jb20+Ci0JYXNtIGNvZGUgZm9yIFBlbnRpdW0gUHJvL1BJSSwgdXNpbmcgdGhlIE1BU00gc3ludGF4CisgICAgICAgIGFzbSBjb2RlIGZvciBQZW50aXVtIFByby9QSUksIHVzaW5nIHRoZSBNQVNNIHN5bnRheAogCiBtYXNteDg2LyAgICBieSBHaWxsZXMgVm9sbGFudCA8aW5mb0B3aW5pbWFnZS5jb20+Ci0JeDg2IGFzbSBjb2RlIHRvIHJlcGxhY2UgbG9uZ2VzdF9tYXRjaCgpIGFuZCBpbmZsYXRlX2Zhc3QoKSwKLQlmb3IgVmlzdWFsIEMrKyBhbmQgTUFTTQorICAgICAgICB4ODYgYXNtIGNvZGUgdG8gcmVwbGFjZSBsb25nZXN0X21hdGNoKCkgYW5kIGluZmxhdGVfZmFzdCgpLAorICAgICAgICBmb3IgVmlzdWFsIEMrKyBhbmQgTUFTTQogCiBtaW5pemlwLyAgICBieSBHaWxsZXMgVm9sbGFudCA8aW5mb0B3aW5pbWFnZS5jb20+Ci0JTWluaSB6aXAgYW5kIHVuemlwIGJhc2VkIG9uIHpsaWIKLQlTZWUgaHR0cDovL3d3dy53aW5pbWFnZS5jb20vekxpYkRsbC91bnppcC5odG1sCisgICAgICAgIE1pbmkgemlwIGFuZCB1bnppcCBiYXNlZCBvbiB6bGliCisgICAgICAgIFNlZSBodHRwOi8vd3d3LndpbmltYWdlLmNvbS96TGliRGxsL3VuemlwLmh0bWwKIAogcGFzY2FsLyAgICAgYnkgQm9iIERlbGxhY2EgPGJvYmRsQHh0cmEuY28ubno+IGV0IGFsLgotCVN1cHBvcnQgZm9yIFBhc2NhbAorICAgICAgICBTdXBwb3J0IGZvciBQYXNjYWwKIAogcHVmZi8gICAgICAgYnkgTWFyayBBZGxlciA8bWFkbGVyQGFsdW1uaS5jYWx0ZWNoLmVkdT4KLQlTbWFsbCwgbG93IG1lbW9yeSB1c2FnZSBpbmZsYXRlLiAgQWxzbyBzZXJ2ZXMgdG8gcHJvdmlkZSBhbgotCXVuYW1iaWd1b3VzIGRlc2NyaXB0aW9uIG9mIHRoZSBkZWZsYXRlIGZvcm1hdC4KKyAgICAgICAgU21hbGwsIGxvdyBtZW1vcnkgdXNhZ2UgaW5mbGF0ZS4gIEFsc28gc2VydmVzIHRvIHByb3ZpZGUgYW4KKyAgICAgICAgdW5hbWJpZ3VvdXMgZGVzY3JpcHRpb24gb2YgdGhlIGRlZmxhdGUgZm9ybWF0LgogCiB0ZXN0emxpYi8gICBieSBHaWxsZXMgVm9sbGFudCA8aW5mb0B3aW5pbWFnZS5jb20+Ci0JRXhhbXBsZSBvZiB0aGUgdXNlIG9mIHpsaWIKKyAgICAgICAgRXhhbXBsZSBvZiB0aGUgdXNlIG9mIHpsaWIKIAogdW50Z3ovICAgICAgYnkgIlBlZHJvIEEuIEFyYW5kYSBHdXRpXGlycmV6IiA8cGFhZ0B0aWQuZXM+Ci0JQSB2ZXJ5IHNpbXBsZSB0YXIuZ3ogZmlsZSBleHRyYWN0b3IgdXNpbmcgemxpYgorICAgICAgICBBIHZlcnkgc2ltcGxlIHRhci5neiBmaWxlIGV4dHJhY3RvciB1c2luZyB6bGliCiAKIHZpc3VhbC1iYXNpYy50eHQgYnkgQ2FybG9zIFJpb3MgPGNfcmlvc0Bzb25kYS5jbD4KLQlIb3cgdG8gdXNlIGNvbXByZXNzKCksIHVuY29tcHJlc3MoKSBhbmQgdGhlIGd6KiBmdW5jdGlvbnMgZnJvbSBWQgorICAgICAgICBIb3cgdG8gdXNlIGNvbXByZXNzKCksIHVuY29tcHJlc3MoKSBhbmQgdGhlIGd6KiBmdW5jdGlvbnMgZnJvbSBWQgogCiB2c3R1ZGlvLyAgICBieSBHaWxsZXMgVm9sbGFudCA8aW5mb0B3aW5pbWFnZS5jb20+Ci0JQnVpbGRpbmcgemxpYiB3aXRoIFZpc3VhbCBTdHVkaW8gLk5FVAorICAgICAgICBCdWlsZGluZyB6bGliIHdpdGggVmlzdWFsIFN0dWRpbyAuTkVUCmRpZmYgLS1naXQgYS9jb250cmliL2FkYS96bGliLXRoaW4uYWRzIGIvY29udHJpYi9hZGEvemxpYi10aGluLmFkcwppbmRleCAxOWNiYjk2Li5hZjEyODdhIDEwMDY0NAotLS0gYS9jb250cmliL2FkYS96bGliLXRoaW4uYWRzCisrKyBiL2NvbnRyaWIvYWRhL3psaWItdGhpbi5hZHMKQEAgLTE0Niw2ICsxNDYsMTcgQEAKICAgICAgIHN0cmF0ZWd5IDogSW50KQogICAgICAgcmV0dXJuICAgICBJbnQ7ICAgICAgIC0tIHpsaWIuaDo1MDYKIAorICAgZnVuY3Rpb24gZGVmbGF0ZUJvdW5kCisgICAgIChzdHJtICAgICA6IFpfU3RyZWFtcDsKKyAgICAgIHNvdXJjZUxlbiA6IFVMb25nKQorICAgICAgcmV0dXJuICAgICBJbnQ7ICAgICAgIC0tIHpsaWIuaDo1OTUKKworICAgZnVuY3Rpb24gZGVmbGF0ZVByaW1lCisgICAgIChzdHJtICAgICA6IFpfU3RyZWFtcDsKKyAgICAgIGJpdHMgICAgIDogSW50OworICAgICAgdmFsdWUgICAgOiBJbnQpCisgICAgICByZXR1cm4gICAgIEludDsgICAgICAgLS0gemxpYi5oOjYwNAorCiAgICBmdW5jdGlvbiBpbmZsYXRlU2V0RGljdGlvbmFyeQogICAgICAoc3RybSAgICAgICA6IFpfU3RyZWFtcDsKICAgICAgIGRpY3Rpb25hcnkgOiBCeXRlX0FjY2VzczsKQEAgLTQyMSw2ICs0MzIsOCBAQAogICAgcHJhZ21hIEltcG9ydCAoQywgZGVmbGF0ZUNvcHksICJkZWZsYXRlQ29weSIpOwogICAgcHJhZ21hIEltcG9ydCAoQywgZGVmbGF0ZVJlc2V0LCAiZGVmbGF0ZVJlc2V0Iik7CiAgICBwcmFnbWEgSW1wb3J0IChDLCBkZWZsYXRlUGFyYW1zLCAiZGVmbGF0ZVBhcmFtcyIpOworICAgcHJhZ21hIEltcG9ydCAoQywgZGVmbGF0ZUJvdW5kLCAiZGVmbGF0ZUJvdW5kIik7CisgICBwcmFnbWEgSW1wb3J0IChDLCBkZWZsYXRlUHJpbWUsICJkZWZsYXRlUHJpbWUiKTsKICAgIHByYWdtYSBJbXBvcnQgKEMsIGluZmxhdGVTZXREaWN0aW9uYXJ5LCAiaW5mbGF0ZVNldERpY3Rpb25hcnkiKTsKICAgIHByYWdtYSBJbXBvcnQgKEMsIGluZmxhdGVTeW5jLCAiaW5mbGF0ZVN5bmMiKTsKICAgIHByYWdtYSBJbXBvcnQgKEMsIGluZmxhdGVSZXNldCwgImluZmxhdGVSZXNldCIpOwpkaWZmIC0tZ2l0IGEvY29udHJpYi9kZWxwaGkvWkxpYi5wYXMgYi9jb250cmliL2RlbHBoaS9aTGliLnBhcwppbmRleCBlYTlhMTdmLi42MWZmZDA4IDEwMDY0NAotLS0gYS9jb250cmliL2RlbHBoaS9aTGliLnBhcworKysgYi9jb250cmliL2RlbHBoaS9aTGliLnBhcwpAQCAtMTUyLDcgKzE1Miw3IEBACiAgIGNvbnN0IE91dEJ1ZjogUG9pbnRlcjsgQnVmU2l6ZTogSW50ZWdlcik7CiAKIGNvbnN0Ci0gIHpsaWJfdmVyc2lvbiA9ICcxLjIuMCc7CisgIHpsaWJfdmVyc2lvbiA9ICcxLjIuMSc7CiAKIHR5cGUKICAgRVpsaWJFcnJvciA9IGNsYXNzKEV4Y2VwdGlvbik7CmRpZmYgLS1naXQgYS9jb250cmliL2d6YXBwZW5kL2d6YXBwZW5kLmMgYi9jb250cmliL2d6YXBwZW5kL2d6YXBwZW5kLmMKbmV3IGZpbGUgbW9kZSAxMDA2NDQKaW5kZXggMDAwMDAwMC4uZjA1MTg2NAotLS0gL2Rldi9udWxsCisrKyBiL2NvbnRyaWIvZ3phcHBlbmQvZ3phcHBlbmQuYwpAQCAtMCwwICsxLDUwMCBAQAorLyogZ3phcHBlbmQgLS0gY29tbWFuZCB0byBhcHBlbmQgdG8gYSBnemlwIGZpbGUKKworICBDb3B5cmlnaHQgKEMpIDIwMDMgTWFyayBBZGxlciwgYWxsIHJpZ2h0cyByZXNlcnZlZAorICB2ZXJzaW9uIDEuMSwgNCBOb3YgMjAwMworCisgIFRoaXMgc29mdHdhcmUgaXMgcHJvdmlkZWQgJ2FzLWlzJywgd2l0aG91dCBhbnkgZXhwcmVzcyBvciBpbXBsaWVkCisgIHdhcnJhbnR5LiAgSW4gbm8gZXZlbnQgd2lsbCB0aGUgYXV0aG9yIGJlIGhlbGQgbGlhYmxlIGZvciBhbnkgZGFtYWdlcworICBhcmlzaW5nIGZyb20gdGhlIHVzZSBvZiB0aGlzIHNvZnR3YXJlLgorCisgIFBlcm1pc3Npb24gaXMgZ3JhbnRlZCB0byBhbnlvbmUgdG8gdXNlIHRoaXMgc29mdHdhcmUgZm9yIGFueSBwdXJwb3NlLAorICBpbmNsdWRpbmcgY29tbWVyY2lhbCBhcHBsaWNhdGlvbnMsIGFuZCB0byBhbHRlciBpdCBhbmQgcmVkaXN0cmlidXRlIGl0CisgIGZyZWVseSwgc3ViamVjdCB0byB0aGUgZm9sbG93aW5nIHJlc3RyaWN0aW9uczoKKworICAxLiBUaGUgb3JpZ2luIG9mIHRoaXMgc29mdHdhcmUgbXVzdCBub3QgYmUgbWlzcmVwcmVzZW50ZWQ7IHlvdSBtdXN0IG5vdAorICAgICBjbGFpbSB0aGF0IHlvdSB3cm90ZSB0aGUgb3JpZ2luYWwgc29mdHdhcmUuIElmIHlvdSB1c2UgdGhpcyBzb2Z0d2FyZQorICAgICBpbiBhIHByb2R1Y3QsIGFuIGFja25vd2xlZGdtZW50IGluIHRoZSBwcm9kdWN0IGRvY3VtZW50YXRpb24gd291bGQgYmUKKyAgICAgYXBwcmVjaWF0ZWQgYnV0IGlzIG5vdCByZXF1aXJlZC4KKyAgMi4gQWx0ZXJlZCBzb3VyY2UgdmVyc2lvbnMgbXVzdCBiZSBwbGFpbmx5IG1hcmtlZCBhcyBzdWNoLCBhbmQgbXVzdCBub3QgYmUKKyAgICAgbWlzcmVwcmVzZW50ZWQgYXMgYmVpbmcgdGhlIG9yaWdpbmFsIHNvZnR3YXJlLgorICAzLiBUaGlzIG5vdGljZSBtYXkgbm90IGJlIHJlbW92ZWQgb3IgYWx0ZXJlZCBmcm9tIGFueSBzb3VyY2UgZGlzdHJpYnV0aW9uLgorCisgIE1hcmsgQWRsZXIgICAgbWFkbGVyQGFsdW1uaS5jYWx0ZWNoLmVkdQorICovCisKKy8qCisgKiBDaGFuZ2UgaGlzdG9yeToKKyAqCisgKiAxLjAgIDE5IE9jdCAyMDAzICAgICAtIEZpcnN0IHZlcnNpb24KKyAqIDEuMSAgIDQgTm92IDIwMDMgICAgIC0gRXhwYW5kIGFuZCBjbGFyaWZ5IHNvbWUgY29tbWVudHMgYW5kIG5vdGVzCisgKiAgICAgICAgICAgICAgICAgICAgICAtIEFkZCB2ZXJzaW9uIGFuZCBjb3B5cmlnaHQgdG8gaGVscAorICogICAgICAgICAgICAgICAgICAgICAgLSBTZW5kIGhlbHAgdG8gc3Rkb3V0IGluc3RlYWQgb2Ygc3RkZXJyCisgKiAgICAgICAgICAgICAgICAgICAgICAtIEFkZCBzb21lIHByZWVtcHRpdmUgdHlwZWNhc3RzCisgKiAgICAgICAgICAgICAgICAgICAgICAtIEFkZCBMIHRvIGNvbnN0YW50cyBpbiBsc2VlaygpIGNhbGxzCisgKiAgICAgICAgICAgICAgICAgICAgICAtIFJlbW92ZSBzb21lIGRlYnVnZ2luZyBpbmZvcm1hdGlvbiBpbiBlcnJvciBtZXNzYWdlcworICogICAgICAgICAgICAgICAgICAgICAgLSBVc2UgbmV3IGRhdGFfdHlwZSBkZWZpbml0aW9uIGZvciB6bGliIDEuMi4xCisgKiAgICAgICAgICAgICAgICAgICAgICAtIFNpbXBsZnkgYW5kIHVuaWZ5IGZpbGUgb3BlcmF0aW9ucworICogICAgICAgICAgICAgICAgICAgICAgLSBGaW5pc2ggb2ZmIGd6aXAgZmlsZSBpbiBnenRhY2soKQorICogICAgICAgICAgICAgICAgICAgICAgLSBVc2UgZGVmbGF0ZVByaW1lKCkgaW5zdGVhZCBvZiBhZGRpbmcgZW1wdHkgYmxvY2tzCisgKiAgICAgICAgICAgICAgICAgICAgICAtIEtlZXAgZ3ppcCBmaWxlIGNsZWFuIG9uIGFwcGVuZGVkIGZpbGUgcmVhZCBlcnJvcnMKKyAqICAgICAgICAgICAgICAgICAgICAgIC0gVXNlIGluLXBsYWNlIHJvdGF0ZSBpbnN0ZWFkIG9mIGF1eGlsaWFyeSBidWZmZXIKKyAqICAgICAgICAgICAgICAgICAgICAgICAgKFdoeSB5b3UgYXNrPyAgQmVjYXVzZSBpdCB3YXMgZnVuIHRvIHdyaXRlISkKKyAqLworCisvKgorICAgZ3phcHBlbmQgdGFrZXMgYSBnemlwIGZpbGUgYW5kIGFwcGVuZHMgdG8gaXQsIGNvbXByZXNzaW5nIGZpbGVzIGZyb20gdGhlCisgICBjb21tYW5kIGxpbmUgb3IgZGF0YSBmcm9tIHN0ZGluLiAgVGhlIGd6aXAgZmlsZSBpcyB3cml0dGVuIHRvIGRpcmVjdGx5LCB0bworICAgYXZvaWQgY29weWluZyB0aGF0IGZpbGUsIGluIGNhc2UgaXQncyBsYXJnZS4gIE5vdGUgdGhhdCB0aGlzIHJlc3VsdHMgaW4gdGhlCisgICB1bmZyaWVuZGx5IGJlaGF2aW9yIHRoYXQgaWYgZ3phcHBlbmQgZmFpbHMsIHRoZSBnemlwIGZpbGUgaXMgY29ycnVwdGVkLgorCisgICBUaGlzIHByb2dyYW0gd2FzIHdyaXR0ZW4gdG8gaWxsdXN0cmF0ZSB0aGUgdXNlIG9mIHRoZSBuZXcgWl9CTE9DSyBvcHRpb24gb2YKKyAgIHpsaWIgMS4yLjEncyBpbmZsYXRlKCkgZnVuY3Rpb24uICBUaGlzIG9wdGlvbiByZXR1cm5zIGZyb20gaW5mbGF0ZSgpIGF0IGVhY2gKKyAgIGJsb2NrIGJvdW5kYXJ5IHRvIGZhY2lsaXRhdGUgbG9jYXRpbmcgYW5kIG1vZGlmeWluZyB0aGUgbGFzdCBibG9jayBiaXQgYXQKKyAgIHRoZSBzdGFydCBvZiB0aGUgZmluYWwgZGVmbGF0ZSBibG9jay4gIEFsc28gd2hldGhlciB1c2luZyBaX0JMT0NLIG9yIG5vdCwKKyAgIGFub3RoZXIgcmVxdWlyZWQgZmVhdHVyZSBvZiB6bGliIDEuMi4xIGlzIHRoYXQgaW5mbGF0ZSgpIG5vdyBwcm92aWRlcyB0aGUKKyAgIG51bWJlciBvZiB1bnVzdWVkIGJpdHMgaW4gdGhlIGxhc3QgaW5wdXQgYnl0ZSB1c2VkLiAgZ3phcHBlbmQgd2lsbCBub3Qgd29yaworICAgd2l0aCB2ZXJzaW9ucyBvZiB6bGliIGVhcmxpZXIgdGhhbiAxLjIuMS4KKworICAgZ3phcHBlbmQgZmlyc3QgZGVjb21wcmVzc2VzIHRoZSBnemlwIGZpbGUgaW50ZXJuYWxseSwgZGlzY2FyZGluZyBhbGwgYnV0CisgICB0aGUgbGFzdCAzMksgb2YgdW5jb21wcmVzc2VkIGRhdGEsIGFuZCBub3RpbmcgdGhlIGxvY2F0aW9uIG9mIHRoZSBsYXN0IGJsb2NrCisgICBiaXQgYW5kIHRoZSBudW1iZXIgb2YgdW51c2VkIGJpdHMgaW4gdGhlIGxhc3QgYnl0ZSBvZiB0aGUgY29tcHJlc3NlZCBkYXRhLgorICAgVGhlIGd6aXAgdHJhaWxlciBjb250YWluaW5nIHRoZSBDUkMtMzIgYW5kIGxlbmd0aCBvZiB0aGUgdW5jb21wcmVzc2VkIGRhdGEKKyAgIGlzIHZlcmlmaWVkLiAgVGhpcyB0cmFpbGVyIHdpbGwgYmUgbGF0ZXIgb3ZlcndyaXR0ZW4uCisKKyAgIFRoZW4gdGhlIGxhc3QgYmxvY2sgYml0IGlzIGNsZWFyZWQgYnkgc2Vla2luZyBiYWNrIGluIHRoZSBmaWxlIGFuZCByZXdyaXRpbmcKKyAgIHRoZSBieXRlIHRoYXQgY29udGFpbnMgaXQuICBTZWVraW5nIGZvcndhcmQsIHRoZSBsYXN0IGJ5dGUgb2YgdGhlIGNvbXByZXNzZWQKKyAgIGRhdGEgaXMgc2F2ZWQgYWxvbmcgd2l0aCB0aGUgbnVtYmVyIG9mIHVudXNlZCBiaXRzIHRvIGluaXRpYWxpemUgZGVmbGF0ZS4KKworICAgQSBkZWZsYXRlIHByb2Nlc3MgaXMgaW5pdGlhbGl6ZWQsIHVzaW5nIHRoZSBsYXN0IDMySyBvZiB0aGUgdW5jb21wcmVzc2VkCisgICBkYXRhIGZyb20gdGhlIGd6aXAgZmlsZSB0byBpbml0aWFsaXplIHRoZSBkaWN0aW9uYXJ5LiAgSWYgdGhlIHRvdGFsCisgICB1bmNvbXByZXNzZWQgZGF0YSB3YXMgbGVzcyB0aGFuIDMySywgdGhlbiBhbGwgb2YgaXQgaXMgdXNlZCB0byBpbml0aWFsaXplCisgICB0aGUgZGljdGlvbmFyeS4gIFRoZSBkZWZsYXRlIG91dHB1dCBiaXQgYnVmZmVyIGlzIGFsc28gaW5pdGlhbGl6ZWQgd2l0aCB0aGUKKyAgIGxhc3QgYml0cyBmcm9tIHRoZSBvcmlnaW5hbCBkZWZsYXRlIHN0cmVhbS4gIEZyb20gaGVyZSBvbiwgdGhlIGRhdGEgdG8KKyAgIGFwcGVuZCBpcyBzaW1wbHkgY29tcHJlc3NlZCB1c2luZyBkZWZsYXRlLCBhbmQgd3JpdHRlbiB0byB0aGUgZ3ppcCBmaWxlLgorICAgV2hlbiB0aGF0IGlzIGNvbXBsZXRlLCB0aGUgbmV3IENSQy0zMiBhbmQgdW5jb21wcmVzc2VkIGxlbmd0aCBhcmUgd3JpdHRlbgorICAgYXMgdGhlIHRyYWlsZXIgb2YgdGhlIGd6aXAgZmlsZS4KKyAqLworCisjaW5jbHVkZSA8c3RkaW8uaD4KKyNpbmNsdWRlIDxzdGRsaWIuaD4KKyNpbmNsdWRlIDxzdHJpbmcuaD4KKyNpbmNsdWRlIDxmY250bC5oPgorI2luY2x1ZGUgPHVuaXN0ZC5oPgorI2luY2x1ZGUgInpsaWIuaCIKKworI2RlZmluZSBsb2NhbCBzdGF0aWMKKyNkZWZpbmUgTEdDSFVOSyAxNAorI2RlZmluZSBDSFVOSyAoMVUgPDwgTEdDSFVOSykKKyNkZWZpbmUgRFNJWkUgMzI3NjhVCisKKy8qIHByaW50IGFuIGVycm9yIG1lc3NhZ2UgYW5kIHRlcm1pbmF0ZSB3aXRoIGV4dHJlbWUgcHJlanVkaWNlICovCitsb2NhbCB2b2lkIGJ5ZShjaGFyICptc2cxLCBjaGFyICptc2cyKQoreworICAgIGZwcmludGYoc3RkZXJyLCAiZ3phcHBlbmQgZXJyb3I6ICVzJXNcbiIsIG1zZzEsIG1zZzIpOworICAgIGV4aXQoMSk7Cit9CisKKy8qIHJldHVybiB0aGUgZ3JlYXRlc3QgY29tbW9uIGRpdmlzb3Igb2YgYSBhbmQgYiB1c2luZyBFdWNsaWQncyBhbGdvcml0aG0sCisgICBtb2RpZmllZCB0byBiZSBmYXN0IHdoZW4gb25lIGFyZ3VtZW50IG11Y2ggZ3JlYXRlciB0aGFuIHRoZSBvdGhlciwgYW5kCisgICBjb2RlZCB0byBhdm9pZCB1bm5lY2Vzc2FyeSBzd2FwcGluZyAqLworbG9jYWwgdW5zaWduZWQgZ2NkKHVuc2lnbmVkIGEsIHVuc2lnbmVkIGIpCit7CisgICAgdW5zaWduZWQgYzsKKworICAgIHdoaWxlIChhICYmIGIpCisgICAgICAgIGlmIChhID4gYikgeworICAgICAgICAgICAgYyA9IGI7CisgICAgICAgICAgICB3aGlsZSAoYSAtIGMgPj0gYykKKyAgICAgICAgICAgICAgICBjIDw8PSAxOworICAgICAgICAgICAgYSAtPSBjOworICAgICAgICB9CisgICAgICAgIGVsc2UgeworICAgICAgICAgICAgYyA9IGE7CisgICAgICAgICAgICB3aGlsZSAoYiAtIGMgPj0gYykKKyAgICAgICAgICAgICAgICBjIDw8PSAxOworICAgICAgICAgICAgYiAtPSBjOworICAgICAgICB9CisgICAgcmV0dXJuIGEgKyBiOworfQorCisvKiByb3RhdGUgbGlzdFswLi5sZW4tMV0gbGVmdCBieSByb3QgcG9zaXRpb25zLCBpbiBwbGFjZSAqLworbG9jYWwgdm9pZCByb3RhdGUodW5zaWduZWQgY2hhciAqbGlzdCwgdW5zaWduZWQgbGVuLCB1bnNpZ25lZCByb3QpCit7CisgICAgdW5zaWduZWQgY2hhciB0bXA7CisgICAgdW5zaWduZWQgY3ljbGVzOworICAgIHVuc2lnbmVkIGNoYXIgKnN0YXJ0LCAqbGFzdCwgKnRvLCAqZnJvbTsKKworICAgIC8qIG5vcm1hbGl6ZSByb3QgYW5kIGhhbmRsZSBkZWdlbmVyYXRlIGNhc2VzICovCisgICAgaWYgKGxlbiA8IDIpIHJldHVybjsKKyAgICBpZiAocm90ID49IGxlbikgcm90ICU9IGxlbjsKKyAgICBpZiAocm90ID09IDApIHJldHVybjsKKworICAgIC8qIHBvaW50ZXIgdG8gbGFzdCBlbnRyeSBpbiBsaXN0ICovCisgICAgbGFzdCA9IGxpc3QgKyAobGVuIC0gMSk7CisKKyAgICAvKiBkbyBzaW1wbGUgbGVmdCBzaGlmdCBieSBvbmUgKi8KKyAgICBpZiAocm90ID09IDEpIHsKKyAgICAgICAgdG1wID0gKmxpc3Q7CisgICAgICAgIG1lbWNweShsaXN0LCBsaXN0ICsgMSwgbGVuIC0gMSk7CisgICAgICAgICpsYXN0ID0gdG1wOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogZG8gc2ltcGxlIHJpZ2h0IHNoaWZ0IGJ5IG9uZSAqLworICAgIGlmIChyb3QgPT0gbGVuIC0gMSkgeworICAgICAgICB0bXAgPSAqbGFzdDsKKyAgICAgICAgbWVtbW92ZShsaXN0ICsgMSwgbGlzdCwgbGVuIC0gMSk7CisgICAgICAgICpsaXN0ID0gdG1wOworICAgICAgICByZXR1cm47CisgICAgfQorCisgICAgLyogb3RoZXJ3aXNlIGRvIHJvdGF0ZSBhcyBhIHNldCBvZiBjeWNsZXMgaW4gcGxhY2UgKi8KKyAgICBjeWNsZXMgPSBnY2QobGVuLCByb3QpOyAgICAgICAgICAgICAvKiBudW1iZXIgb2YgY3ljbGVzICovCisgICAgZG8geworICAgICAgICBzdGFydCA9IGZyb20gPSBsaXN0ICsgY3ljbGVzOyAgIC8qIHN0YXJ0IGluZGV4IGlzIGFyYml0cmFyeSAqLworICAgICAgICB0bXAgPSAqZnJvbTsgICAgICAgICAgICAgICAgICAgIC8qIHNhdmUgZW50cnkgdG8gYmUgb3ZlcndyaXR0ZW4gKi8KKyAgICAgICAgZm9yICg7OykgeworICAgICAgICAgICAgdG8gPSBmcm9tOyAgICAgICAgICAgICAgICAgIC8qIG5leHQgc3RlcCBpbiBjeWNsZSAqLworICAgICAgICAgICAgZnJvbSArPSByb3Q7ICAgICAgICAgICAgICAgIC8qIGdvIHJpZ2h0IHJvdCBwb3NpdGlvbnMgKi8KKyAgICAgICAgICAgIGlmIChmcm9tID4gbGFzdCkgZnJvbSAtPSBsZW47ICAgLyogKHBvaW50ZXIgYmV0dGVyIG5vdCB3cmFwKSAqLworICAgICAgICAgICAgaWYgKGZyb20gPT0gc3RhcnQpIGJyZWFrOyAgIC8qIGFsbCBidXQgb25lIHNoaWZ0ZWQgKi8KKyAgICAgICAgICAgICp0byA9ICpmcm9tOyAgICAgICAgICAgICAgICAvKiBzaGlmdCBsZWZ0ICovCisgICAgICAgIH0KKyAgICAgICAgKnRvID0gdG1wOyAgICAgICAgICAgICAgICAgICAgICAvKiBjb21wbGV0ZSB0aGUgY2lyY2xlICovCisgICAgfSB3aGlsZSAoLS1jeWNsZXMpOworfQorCisvKiBzdHJ1Y3R1cmUgZm9yIGd6aXAgZmlsZSByZWFkIG9wZXJhdGlvbnMgKi8KK3R5cGVkZWYgc3RydWN0IHsKKyAgICBpbnQgZmQ7ICAgICAgICAgICAgICAgICAgICAgLyogZmlsZSBkZXNjcmlwdG9yICovCisgICAgaW50IHNpemU7ICAgICAgICAgICAgICAJLyogMSA8PCBzaXplIGlzIGJ5dGVzIGluIGJ1ZiAqLworICAgIHVuc2lnbmVkIGxlZnQ7ICAgICAgICAgICAgICAvKiBieXRlcyBhdmFpbGFibGUgYXQgbmV4dCAqLworICAgIHVuc2lnbmVkIGNoYXIgKmJ1ZjsgICAgICAgICAvKiBidWZmZXIgKi8KKyAgICB1bnNpZ25lZCBjaGFyICpuZXh0OyAgICAgICAgLyogbmV4dCBieXRlIGluIGJ1ZmZlciAqLworICAgIGNoYXIgKm5hbWU7ICAgICAgICAgICAgICAgICAvKiBmaWxlIG5hbWUgZm9yIGVycm9yIG1lc3NhZ2VzICovCit9IGZpbGU7CisKKy8qIHJlbG9hZCBidWZmZXIgKi8KK2xvY2FsIGludCByZWFkaW4oZmlsZSAqaW4pCit7CisgICAgaW50IGxlbjsKKworICAgIGxlbiA9IHJlYWQoaW4tPmZkLCBpbi0+YnVmLCAxIDw8IGluLT5zaXplKTsKKyAgICBpZiAobGVuID09IC0xKSBieWUoImVycm9yIHJlYWRpbmcgIiwgaW4tPm5hbWUpOworICAgIGluLT5sZWZ0ID0gKHVuc2lnbmVkKWxlbjsKKyAgICBpbi0+bmV4dCA9IGluLT5idWY7CisgICAgcmV0dXJuIGxlbjsKK30KKworLyogcmVhZCBmcm9tIGZpbGUgaW4sIGV4aXQgaWYgZW5kLW9mLWZpbGUgKi8KK2xvY2FsIGludCByZWFkbW9yZShmaWxlICppbikKK3sKKyAgICBpZiAocmVhZGluKGluKSA9PSAwKSBieWUoInVuZXhwZWN0ZWQgZW5kIG9mICIsIGluLT5uYW1lKTsKKyAgICByZXR1cm4gMDsKK30KKworI2RlZmluZSByZWFkMShpbikgKGluLT5sZWZ0ID09IDAgPyByZWFkbW9yZShpbikgOiAwLCBcCisgICAgICAgICAgICAgICAgICAgaW4tPmxlZnQtLSwgKihpbi0+bmV4dCkrKykKKworLyogc2tpcCBvdmVyIG4gYnl0ZXMgb2YgaW4gKi8KK2xvY2FsIHZvaWQgc2tpcChmaWxlICppbiwgdW5zaWduZWQgbikKK3sKKyAgICB1bnNpZ25lZCBieXBhc3M7CisKKyAgICBpZiAobiA+IGluLT5sZWZ0KSB7CisgICAgICAgIG4gLT0gaW4tPmxlZnQ7CisgICAgICAgIGJ5cGFzcyA9IG4gJiB+KCgxVSA8PCBpbi0+c2l6ZSkgLSAxKTsKKyAgICAgICAgaWYgKGJ5cGFzcykgeworICAgICAgICAgICAgaWYgKGxzZWVrKGluLT5mZCwgKG9mZl90KWJ5cGFzcywgU0VFS19DVVIpID09IC0xKQorICAgICAgICAgICAgICAgIGJ5ZSgic2Vla2luZyAiLCBpbi0+bmFtZSk7CisgICAgICAgICAgICBuIC09IGJ5cGFzczsKKyAgICAgICAgfQorICAgICAgICByZWFkbW9yZShpbik7CisgICAgICAgIGlmIChuID4gaW4tPmxlZnQpCisgICAgICAgICAgICBieWUoInVuZXhwZWN0ZWQgZW5kIG9mICIsIGluLT5uYW1lKTsKKyAgICB9CisgICAgaW4tPmxlZnQgLT0gbjsKKyAgICBpbi0+bmV4dCArPSBuOworfQorCisvKiByZWFkIGEgZm91ci1ieXRlIHVuc2lnbmVkIGludGVnZXIsIGxpdHRsZS1lbmRpYW4sIGZyb20gaW4gKi8KK3Vuc2lnbmVkIGxvbmcgcmVhZDQoZmlsZSAqaW4pCit7CisgICAgdW5zaWduZWQgbG9uZyB2YWw7CisKKyAgICB2YWwgPSByZWFkMShpbik7CisgICAgdmFsICs9ICh1bnNpZ25lZClyZWFkMShpbikgPDwgODsKKyAgICB2YWwgKz0gKHVuc2lnbmVkIGxvbmcpcmVhZDEoaW4pIDw8IDE2OworICAgIHZhbCArPSAodW5zaWduZWQgbG9uZylyZWFkMShpbikgPDwgMjQ7CisgICAgcmV0dXJuIHZhbDsKK30KKworLyogc2tpcCBvdmVyIGd6aXAgaGVhZGVyICovCitsb2NhbCB2b2lkIGd6aGVhZGVyKGZpbGUgKmluKQoreworICAgIGludCBmbGFnczsKKyAgICB1bnNpZ25lZCBuOworCisgICAgaWYgKHJlYWQxKGluKSAhPSAzMSB8fCByZWFkMShpbikgIT0gMTM5KSBieWUoaW4tPm5hbWUsICIgbm90IGEgZ3ppcCBmaWxlIik7CisgICAgaWYgKHJlYWQxKGluKSAhPSA4KSBieWUoInVua25vd24gY29tcHJlc3Npb24gbWV0aG9kIGluIiwgaW4tPm5hbWUpOworICAgIGZsYWdzID0gcmVhZDEoaW4pOworICAgIGlmIChmbGFncyAmIDB4ZTApIGJ5ZSgidW5rbm93biBoZWFkZXIgZmxhZ3Mgc2V0IGluIiwgaW4tPm5hbWUpOworICAgIHNraXAoaW4sIDYpOworICAgIGlmIChmbGFncyAmIDQpIHsKKyAgICAgICAgbiA9IHJlYWQxKGluKTsKKyAgICAgICAgbiArPSAodW5zaWduZWQpKHJlYWQxKGluKSkgPDwgODsKKyAgICAgICAgc2tpcChpbiwgbik7CisgICAgfQorICAgIGlmIChmbGFncyAmIDgpIHdoaWxlIChyZWFkMShpbikgIT0gMCkgOworICAgIGlmIChmbGFncyAmIDE2KSB3aGlsZSAocmVhZDEoaW4pICE9IDApIDsKKyAgICBpZiAoZmxhZ3MgJiAyKSBza2lwKGluLCAyKTsKK30KKworLyogZGVjb21wcmVzcyBnemlwIGZpbGUgIm5hbWUiLCByZXR1cm4gc3RybSB3aXRoIGEgZGVmbGF0ZSBzdHJlYW0gcmVhZHkgdG8KKyAgIGNvbnRpbnVlIGNvbXByZXNzaW9uIG9mIHRoZSBkYXRhIGluIHRoZSBnemlwIGZpbGUsIGFuZCByZXR1cm4gYSBmaWxlCisgICBkZXNjcmlwdG9yIHBvaW50aW5nIHRvIHdoZXJlIHRvIHdyaXRlIHRoZSBjb21wcmVzc2VkIGRhdGEgLS0gdGhlIGRlZmxhdGUKKyAgIHN0cmVhbSBpcyBpbml0aWFsaXplZCB0byBjb21wcmVzcyB1c2luZyBsZXZlbCAibGV2ZWwiICovCitsb2NhbCBpbnQgZ3pzY2FuKGNoYXIgKm5hbWUsIHpfc3RyZWFtICpzdHJtLCBpbnQgbGV2ZWwpCit7CisgICAgaW50IHJldCwgbGFzdGJpdCwgbGVmdCwgZnVsbDsKKyAgICB1bnNpZ25lZCBoYXZlOworICAgIHVuc2lnbmVkIGxvbmcgY3JjLCB0b3Q7CisgICAgdW5zaWduZWQgY2hhciAqd2luZG93OworICAgIG9mZl90IGxhc3RvZmYsIGVuZDsKKyAgICBmaWxlIGd6OworCisgICAgLyogb3BlbiBnemlwIGZpbGUgKi8KKyAgICBnei5uYW1lID0gbmFtZTsKKyAgICBnei5mZCA9IG9wZW4obmFtZSwgT19SRFdSLCAwKTsKKyAgICBpZiAoZ3ouZmQgPT0gLTEpIGJ5ZSgiY2Fubm90IG9wZW4gIiwgbmFtZSk7CisgICAgZ3ouYnVmID0gbWFsbG9jKENIVU5LKTsKKyAgICBpZiAoZ3ouYnVmID09IE5VTEwpIGJ5ZSgib3V0IG9mIG1lbW9yeSIsICIiKTsKKyAgICBnei5zaXplID0gTEdDSFVOSzsKKyAgICBnei5sZWZ0ID0gMDsKKworICAgIC8qIHNraXAgZ3ppcCBoZWFkZXIgKi8KKyAgICBnemhlYWRlcigmZ3opOworCisgICAgLyogcHJlcGFyZSB0byBkZWNvbXByZXNzICovCisgICAgd2luZG93ID0gbWFsbG9jKERTSVpFKTsKKyAgICBpZiAod2luZG93ID09IE5VTEwpIGJ5ZSgib3V0IG9mIG1lbW9yeSIsICIiKTsKKyAgICBzdHJtLT56YWxsb2MgPSBaX05VTEw7CisgICAgc3RybS0+emZyZWUgPSBaX05VTEw7CisgICAgc3RybS0+b3BhcXVlID0gWl9OVUxMOworICAgIHJldCA9IGluZmxhdGVJbml0MihzdHJtLCAtMTUpOworICAgIGlmIChyZXQgIT0gWl9PSykgYnllKCJvdXQgb2YgbWVtb3J5IiwgIiBvciBsaWJyYXJ5IG1pc21hdGNoIik7CisKKyAgICAvKiBkZWNvbXByZXNzIHRoZSBkZWZsYXRlIHN0cmVhbSwgc2F2aW5nIGFwcGVuZCBpbmZvcm1hdGlvbiAqLworICAgIGxhc3RiaXQgPSAwOworICAgIGxhc3RvZmYgPSBsc2Vlayhnei5mZCwgMEwsIFNFRUtfQ1VSKSAtIGd6LmxlZnQ7CisgICAgbGVmdCA9IDA7CisgICAgc3RybS0+YXZhaWxfaW4gPSBnei5sZWZ0OworICAgIHN0cm0tPm5leHRfaW4gPSBnei5uZXh0OworICAgIGNyYyA9IGNyYzMyKDBMLCBaX05VTEwsIDApOworICAgIGhhdmUgPSBmdWxsID0gMDsKKyAgICBkbyB7CisgICAgICAgIC8qIGlmIG5lZWRlZCwgZ2V0IG1vcmUgaW5wdXQgKi8KKyAgICAgICAgaWYgKHN0cm0tPmF2YWlsX2luID09IDApIHsKKyAgICAgICAgICAgIHJlYWRtb3JlKCZneik7CisgICAgICAgICAgICBzdHJtLT5hdmFpbF9pbiA9IGd6LmxlZnQ7CisgICAgICAgICAgICBzdHJtLT5uZXh0X2luID0gZ3oubmV4dDsKKyAgICAgICAgfQorCisgICAgICAgIC8qIHNldCB1cCBvdXRwdXQgdG8gbmV4dCBhdmFpbGFibGUgc2VjdGlvbiBvZiBzbGlkaW5nIHdpbmRvdyAqLworICAgICAgICBzdHJtLT5hdmFpbF9vdXQgPSBEU0laRSAtIGhhdmU7CisgICAgICAgIHN0cm0tPm5leHRfb3V0ID0gd2luZG93ICsgaGF2ZTsKKworICAgICAgICAvKiBpbmZsYXRlIGFuZCBjaGVjayBmb3IgZXJyb3JzICovCisgICAgICAgIHJldCA9IGluZmxhdGUoc3RybSwgWl9CTE9DSyk7CisgICAgICAgIGlmIChyZXQgPT0gWl9TVFJFQU1fRVJST1IpIGJ5ZSgiaW50ZXJuYWwgc3RyZWFtIGVycm9yISIsICIiKTsKKyAgICAgICAgaWYgKHJldCA9PSBaX01FTV9FUlJPUikgYnllKCJvdXQgb2YgbWVtb3J5IiwgIiIpOworICAgICAgICBpZiAocmV0ID09IFpfREFUQV9FUlJPUikKKyAgICAgICAgICAgIGJ5ZSgiaW52YWxpZCBjb21wcmVzc2VkIGRhdGEtLWZvcm1hdCB2aW9sYXRlZCBpbiIsIG5hbWUpOworCisgICAgICAgIC8qIHVwZGF0ZSBjcmMgYW5kIHNsaWRpbmcgd2luZG93IHBvaW50ZXIgKi8KKyAgICAgICAgY3JjID0gY3JjMzIoY3JjLCB3aW5kb3cgKyBoYXZlLCBEU0laRSAtIGhhdmUgLSBzdHJtLT5hdmFpbF9vdXQpOworICAgICAgICBpZiAoc3RybS0+YXZhaWxfb3V0KQorICAgICAgICAgICAgaGF2ZSA9IERTSVpFIC0gc3RybS0+YXZhaWxfb3V0OworICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgIGhhdmUgPSAwOworICAgICAgICAgICAgZnVsbCA9IDE7CisgICAgICAgIH0KKworICAgICAgICAvKiBwcm9jZXNzIGVuZCBvZiBibG9jayAqLworICAgICAgICBpZiAoc3RybS0+ZGF0YV90eXBlICYgMTI4KSB7CisgICAgICAgICAgICBpZiAoc3RybS0+ZGF0YV90eXBlICYgNjQpCisgICAgICAgICAgICAgICAgbGVmdCA9IHN0cm0tPmRhdGFfdHlwZSAmIDB4MWY7CisgICAgICAgICAgICBlbHNlIHsKKyAgICAgICAgICAgICAgICBsYXN0Yml0ID0gc3RybS0+ZGF0YV90eXBlICYgMHgxZjsKKyAgICAgICAgICAgICAgICBsYXN0b2ZmID0gbHNlZWsoZ3ouZmQsIDBMLCBTRUVLX0NVUikgLSBzdHJtLT5hdmFpbF9pbjsKKyAgICAgICAgICAgIH0KKyAgICAgICAgfQorICAgIH0gd2hpbGUgKHJldCAhPSBaX1NUUkVBTV9FTkQpOworICAgIGluZmxhdGVFbmQoc3RybSk7CisgICAgZ3oubGVmdCA9IHN0cm0tPmF2YWlsX2luOworICAgIGd6Lm5leHQgPSBzdHJtLT5uZXh0X2luOworCisgICAgLyogc2F2ZSB0aGUgbG9jYXRpb24gb2YgdGhlIGVuZCBvZiB0aGUgY29tcHJlc3NlZCBkYXRhICovCisgICAgZW5kID0gbHNlZWsoZ3ouZmQsIDBMLCBTRUVLX0NVUikgLSBnei5sZWZ0OworCisgICAgLyogY2hlY2sgZ3ppcCB0cmFpbGVyIGFuZCBzYXZlIHRvdGFsIGZvciBkZWZsYXRlICovCisgICAgaWYgKGNyYyAhPSByZWFkNCgmZ3opKQorICAgICAgICBieWUoImludmFsaWQgY29tcHJlc3NlZCBkYXRhLS1jcmMgbWlzbWF0Y2ggaW4gIiwgbmFtZSk7CisgICAgdG90ID0gc3RybS0+dG90YWxfb3V0OworICAgIGlmICgodG90ICYgMHhmZmZmZmZmZlVMKSAhPSByZWFkNCgmZ3opKQorICAgICAgICBieWUoImludmFsaWQgY29tcHJlc3NlZCBkYXRhLS1sZW5ndGggbWlzbWF0Y2ggaW4iLCBuYW1lKTsKKworICAgIC8qIGlmIG5vdCBhdCBlbmQgb2YgZmlsZSwgd2FybiAqLworICAgIGlmIChnei5sZWZ0IHx8IHJlYWRpbigmZ3opKQorICAgICAgICBmcHJpbnRmKHN0ZGVyciwKKyAgICAgICAgICAgICJnemFwcGVuZCB3YXJuaW5nOiBqdW5rIGF0IGVuZCBvZiBnemlwIGZpbGUgb3ZlcndyaXR0ZW5cbiIpOworCisgICAgLyogY2xlYXIgbGFzdCBibG9jayBiaXQgKi8KKyAgICBsc2Vlayhnei5mZCwgbGFzdG9mZiAtIChsYXN0Yml0ICE9IDApLCBTRUVLX1NFVCk7CisgICAgaWYgKHJlYWQoZ3ouZmQsIGd6LmJ1ZiwgMSkgIT0gMSkgYnllKCJyZWFkaW5nIGFmdGVyIHNlZWsgb24gIiwgbmFtZSk7CisgICAgKmd6LmJ1ZiA9ICh1bnNpZ25lZCBjaGFyKSgqZ3ouYnVmIF4gKDEgPDwgKCg4IC0gbGFzdGJpdCkgJiA3KSkpOworICAgIGxzZWVrKGd6LmZkLCAtMUwsIFNFRUtfQ1VSKTsKKyAgICBpZiAod3JpdGUoZ3ouZmQsIGd6LmJ1ZiwgMSkgIT0gMSkgYnllKCJ3cml0aW5nIGFmdGVyIHNlZWsgdG8gIiwgbmFtZSk7CisKKyAgICAvKiBpZiB3aW5kb3cgd3JhcHBlZCwgYnVpbGQgZGljdGlvbmFyeSBmcm9tIHdpbmRvdyBieSByb3RhdGluZyAqLworICAgIGlmIChmdWxsKSB7CisgICAgICAgIHJvdGF0ZSh3aW5kb3csIERTSVpFLCBoYXZlKTsKKyAgICAgICAgaGF2ZSA9IERTSVpFOworICAgIH0KKworICAgIC8qIHNldCB1cCBkZWZsYXRlIHN0cmVhbSB3aXRoIHdpbmRvdywgY3JjLCB0b3RhbF9pbiwgYW5kIGxlZnRvdmVyIGJpdHMgKi8KKyAgICByZXQgPSBkZWZsYXRlSW5pdDIoc3RybSwgbGV2ZWwsIFpfREVGTEFURUQsIC0xNSwgOCwgWl9ERUZBVUxUX1NUUkFURUdZKTsKKyAgICBpZiAocmV0ICE9IFpfT0spIGJ5ZSgib3V0IG9mIG1lbW9yeSIsICIiKTsKKyAgICBkZWZsYXRlU2V0RGljdGlvbmFyeShzdHJtLCB3aW5kb3csIGhhdmUpOworICAgIHN0cm0tPmFkbGVyID0gY3JjOworICAgIHN0cm0tPnRvdGFsX2luID0gdG90OworICAgIGlmIChsZWZ0KSB7CisgICAgICAgIGxzZWVrKGd6LmZkLCAtLWVuZCwgU0VFS19TRVQpOworICAgICAgICBpZiAocmVhZChnei5mZCwgZ3ouYnVmLCAxKSAhPSAxKSBieWUoInJlYWRpbmcgYWZ0ZXIgc2VlayBvbiAiLCBuYW1lKTsKKyAgICAgICAgZGVmbGF0ZVByaW1lKHN0cm0sIDggLSBsZWZ0LCAqZ3ouYnVmKTsKKyAgICB9CisgICAgbHNlZWsoZ3ouZmQsIGVuZCwgU0VFS19TRVQpOworCisgICAgLyogY2xlYW4gdXAgYW5kIHJldHVybiAqLworICAgIGZyZWUod2luZG93KTsKKyAgICBmcmVlKGd6LmJ1Zik7CisgICAgcmV0dXJuIGd6LmZkOworfQorCisvKiBhcHBlbmQgZmlsZSAibmFtZSIgdG8gZ3ppcCBmaWxlIGdkIHVzaW5nIGRlZmxhdGUgc3RyZWFtIHN0cm0gLS0gaWYgbGFzdAorICAgaXMgdHJ1ZSwgdGhlbiBmaW5pc2ggb2ZmIHRoZSBkZWZsYXRlIHN0cmVhbSBhdCB0aGUgZW5kICovCitsb2NhbCB2b2lkIGd6dGFjayhjaGFyICpuYW1lLCBpbnQgZ2QsIHpfc3RyZWFtICpzdHJtLCBpbnQgbGFzdCkKK3sKKyAgICBpbnQgZmQsIGxlbiwgcmV0OworICAgIHVuc2lnbmVkIGxlZnQ7CisgICAgdW5zaWduZWQgY2hhciAqaW4sICpvdXQ7CisKKyAgICAvKiBvcGVuIGZpbGUgdG8gY29tcHJlc3MgYW5kIGFwcGVuZCAqLworICAgIGZkID0gMDsKKyAgICBpZiAobmFtZSAhPSBOVUxMKSB7CisgICAgICAgIGZkID0gb3BlbihuYW1lLCBPX1JET05MWSwgMCk7CisgICAgICAgIGlmIChmZCA9PSAtMSkKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLCAiZ3phcHBlbmQgd2FybmluZzogJXMgbm90IGZvdW5kLCBza2lwcGluZyAuLi5cbiIsCisgICAgICAgICAgICAgICAgICAgIG5hbWUpOworICAgIH0KKworICAgIC8qIGFsbG9jYXRlIGJ1ZmZlcnMgKi8KKyAgICBpbiA9IGZkID09IC0xID8gTlVMTCA6IG1hbGxvYyhDSFVOSyk7CisgICAgb3V0ID0gbWFsbG9jKENIVU5LKTsKKyAgICBpZiAob3V0ID09IE5VTEwpIGJ5ZSgib3V0IG9mIG1lbW9yeSIsICIiKTsKKworICAgIC8qIGNvbXByZXNzIGlucHV0IGZpbGUgYW5kIGFwcGVuZCB0byBnemlwIGZpbGUgKi8KKyAgICBkbyB7CisgICAgICAgIC8qIGdldCBtb3JlIGlucHV0ICovCisgICAgICAgIGxlbiA9IGZkID09IC0xID8gMCA6IHJlYWQoZmQsIGluLCBDSFVOSyk7CisgICAgICAgIGlmIChsZW4gPT0gLTEpIHsKKyAgICAgICAgICAgIGZwcmludGYoc3RkZXJyLAorICAgICAgICAgICAgICAgICAgICAiZ3phcHBlbmQgd2FybmluZzogZXJyb3IgcmVhZGluZyAlcywgc2tpcHBpbmcgcmVzdCAuLi5cbiIsCisgICAgICAgICAgICAgICAgICAgIG5hbWUpOworICAgICAgICAgICAgbGVuID0gMDsKKyAgICAgICAgfQorICAgICAgICBzdHJtLT5hdmFpbF9pbiA9ICh1bnNpZ25lZClsZW47CisgICAgICAgIHN0cm0tPm5leHRfaW4gPSBpbjsKKyAgICAgICAgaWYgKGxlbikgc3RybS0+YWRsZXIgPSBjcmMzMihzdHJtLT5hZGxlciwgaW4sICh1bnNpZ25lZClsZW4pOworCisgICAgICAgIC8qIGNvbXByZXNzIGFuZCB3cml0ZSBhbGwgYXZhaWxhYmxlIG91dHB1dCAqLworICAgICAgICBkbyB7CisgICAgICAgICAgICBzdHJtLT5hdmFpbF9vdXQgPSBDSFVOSzsKKyAgICAgICAgICAgIHN0cm0tPm5leHRfb3V0ID0gb3V0OworICAgICAgICAgICAgcmV0ID0gZGVmbGF0ZShzdHJtLCBsYXN0ICYmIGxlbiA9PSAwID8gWl9GSU5JU0ggOiBaX05PX0ZMVVNIKTsKKyAgICAgICAgICAgIGxlZnQgPSBDSFVOSyAtIHN0cm0tPmF2YWlsX291dDsKKyAgICAgICAgICAgIHdoaWxlIChsZWZ0KSB7CisgICAgICAgICAgICAgICAgbGVuID0gd3JpdGUoZ2QsIG91dCArIENIVU5LIC0gc3RybS0+YXZhaWxfb3V0IC0gbGVmdCwgbGVmdCk7CisgICAgICAgICAgICAgICAgaWYgKGxlbiA9PSAtMSkgYnllKCJ3cml0aW5nIGd6aXAgZmlsZSIsICIiKTsKKyAgICAgICAgICAgICAgICBsZWZ0IC09ICh1bnNpZ25lZClsZW47CisgICAgICAgICAgICB9CisgICAgICAgIH0gd2hpbGUgKHN0cm0tPmF2YWlsX291dCA9PSAwICYmIHJldCAhPSBaX1NUUkVBTV9FTkQpOworICAgIH0gd2hpbGUgKGxlbiAhPSAwKTsKKworICAgIC8qIHdyaXRlIHRyYWlsZXIgYWZ0ZXIgbGFzdCBlbnRyeSAqLworICAgIGlmIChsYXN0KSB7CisgICAgICAgIGRlZmxhdGVFbmQoc3RybSk7CisgICAgICAgIG91dFswXSA9ICh1bnNpZ25lZCBjaGFyKShzdHJtLT5hZGxlcik7CisgICAgICAgIG91dFsxXSA9ICh1bnNpZ25lZCBjaGFyKShzdHJtLT5hZGxlciA+PiA4KTsKKyAgICAgICAgb3V0WzJdID0gKHVuc2lnbmVkIGNoYXIpKHN0cm0tPmFkbGVyID4+IDE2KTsKKyAgICAgICAgb3V0WzNdID0gKHVuc2lnbmVkIGNoYXIpKHN0cm0tPmFkbGVyID4+IDI0KTsKKyAgICAgICAgb3V0WzRdID0gKHVuc2lnbmVkIGNoYXIpKHN0cm0tPnRvdGFsX2luKTsKKyAgICAgICAgb3V0WzVdID0gKHVuc2lnbmVkIGNoYXIpKHN0cm0tPnRvdGFsX2luID4+IDgpOworICAgICAgICBvdXRbNl0gPSAodW5zaWduZWQgY2hhcikoc3RybS0+dG90YWxfaW4gPj4gMTYpOworICAgICAgICBvdXRbN10gPSAodW5zaWduZWQgY2hhcikoc3RybS0+dG90YWxfaW4gPj4gMjQpOworICAgICAgICBsZW4gPSA4OworICAgICAgICBkbyB7CisgICAgICAgICAgICByZXQgPSB3cml0ZShnZCwgb3V0ICsgOCAtIGxlbiwgbGVuKTsKKyAgICAgICAgICAgIGlmIChyZXQgPT0gLTEpIGJ5ZSgid3JpdGluZyBnemlwIGZpbGUiLCAiIik7CisgICAgICAgICAgICBsZW4gLT0gcmV0OworICAgICAgICB9IHdoaWxlIChsZW4pOworICAgICAgICBjbG9zZShnZCk7CisgICAgfQorCisgICAgLyogY2xlYW4gdXAgYW5kIHJldHVybiAqLworICAgIGZyZWUob3V0KTsKKyAgICBpZiAoaW4gIT0gTlVMTCkgZnJlZShpbik7CisgICAgaWYgKGZkID4gMCkgY2xvc2UoZmQpOworfQorCisvKiBwcm9jZXNzIHRoZSBjb21wcmVzc2lvbiBsZXZlbCBvcHRpb24gaWYgcHJlc2VudCwgc2NhbiB0aGUgZ3ppcCBmaWxlLCBhbmQKKyAgIGFwcGVuZCB0aGUgc3BlY2lmaWVkIGZpbGVzLCBvciBhcHBlbmQgdGhlIGRhdGEgZnJvbSBzdGRpbiBpZiBubyBvdGhlciBmaWxlCisgICBuYW1lcyBhcmUgcHJvdmlkZWQgb24gdGhlIGNvbW1hbmQgbGluZSAtLSB0aGUgZ3ppcCBmaWxlIG11c3QgYmUgd3JpdGFibGUKKyAgIGFuZCBzZWVrYWJsZSAqLworaW50IG1haW4oaW50IGFyZ2MsIGNoYXIgKiphcmd2KQoreworICAgIGludCBnZCwgbGV2ZWw7CisgICAgel9zdHJlYW0gc3RybTsKKworICAgIC8qIGlnbm9yZSBjb21tYW5kIG5hbWUgKi8KKyAgICBhcmd2Kys7CisKKyAgICAvKiBwcm92aWRlIHVzYWdlIGlmIG5vIGFyZ3VtZW50cyAqLworICAgIGlmICgqYXJndiA9PSBOVUxMKSB7CisgICAgICAgIHByaW50ZigiZ3phcHBlbmQgMS4xICg0IE5vdiAyMDAzKSBDb3B5cmlnaHQgKEMpIDIwMDMgTWFyayBBZGxlclxuIik7CisgICAgICAgIHByaW50ZigKKyAgICAgICAgICAgICJ1c2FnZTogZ3phcHBlbmQgWy1sZXZlbF0gZmlsZS5neiBbIGFkZHRoaXMgWyBhbmR0aGlzIC4uLiBdXVxuIik7CisgICAgICAgIHJldHVybiAwOworICAgIH0KKworICAgIC8qIHNldCBjb21wcmVzc2lvbiBsZXZlbCAqLworICAgIGxldmVsID0gWl9ERUZBVUxUX0NPTVBSRVNTSU9OOworICAgIGlmIChhcmd2WzBdWzBdID09ICctJykgeworICAgICAgICBpZiAoYXJndlswXVsxXSA8ICcwJyB8fCBhcmd2WzBdWzFdID4gJzknIHx8IGFyZ3ZbMF1bMl0gIT0gMCkKKyAgICAgICAgICAgIGJ5ZSgiaW52YWxpZCBjb21wcmVzc2lvbiBsZXZlbCIsICIiKTsKKyAgICAgICAgbGV2ZWwgPSBhcmd2WzBdWzFdIC0gJzAnOworICAgICAgICBpZiAoKisrYXJndiA9PSBOVUxMKSBieWUoIm5vIGd6aXAgZmlsZSBuYW1lIGFmdGVyIG9wdGlvbnMiLCAiIik7CisgICAgfQorCisgICAgLyogcHJlcGFyZSB0byBhcHBlbmQgdG8gZ3ppcCBmaWxlICovCisgICAgZ2QgPSBnenNjYW4oKmFyZ3YrKywgJnN0cm0sIGxldmVsKTsKKworICAgIC8qIGFwcGVuZCBmaWxlcyBvbiBjb21tYW5kIGxpbmUsIG9yIGZyb20gc3RkaW4gaWYgbm9uZSAqLworICAgIGlmICgqYXJndiA9PSBOVUxMKQorICAgICAgICBnenRhY2soTlVMTCwgZ2QsICZzdHJtLCAxKTsKKyAgICBlbHNlCisgICAgICAgIGRvIHsKKyAgICAgICAgICAgIGd6dGFjaygqYXJndiwgZ2QsICZzdHJtLCBhcmd2WzFdID09IE5VTEwpOworICAgICAgICB9IHdoaWxlICgqKythcmd2ICE9IE5VTEwpOworICAgIHJldHVybiAwOworfQpkaWZmIC0tZ2l0IGEvY29udHJpYi9pbmZiYWNrOS9pbmZ0cmVlOS5jIGIvY29udHJpYi9pbmZiYWNrOS9pbmZ0cmVlOS5jCmluZGV4IDI4MjlhODQuLjQ0ZmY3MjEgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvaW5mYmFjazkvaW5mdHJlZTkuYworKysgYi9jb250cmliL2luZmJhY2s5L2luZnRyZWU5LmMKQEAgLTksNyArOSw3IEBACiAjZGVmaW5lIE1BWEJJVFMgMTUKIAogY29uc3QgY2hhciBpbmZsYXRlOV9jb3B5cmlnaHRbXSA9Ci0gICAiIGluZmxhdGU5IDEuMi4wLjcgQ29weXJpZ2h0IDE5OTUtMjAwMyBNYXJrIEFkbGVyICI7CisgICAiIGluZmxhdGU5IDEuMi4wLjggQ29weXJpZ2h0IDE5OTUtMjAwMyBNYXJrIEFkbGVyICI7CiAvKgogICBJZiB5b3UgdXNlIHRoZSB6bGliIGxpYnJhcnkgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpcyB3ZWxjb21lCiAgIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHlvdXIgcHJvZHVjdC4gSWYgZm9yIHNvbWUgcmVhc29uIHlvdSBjYW5ub3QKQEAgLTY0LDcgKzY0LDcgQEAKICAgICBzdGF0aWMgY29uc3QgdW5zaWduZWQgc2hvcnQgbGV4dFszMV0gPSB7IC8qIExlbmd0aCBjb2RlcyAyNTcuLjI4NSBleHRyYSAqLwogICAgICAgICAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI4LCAxMjgsIDEyOCwgMTI5LCAxMjksIDEyOSwgMTI5LAogICAgICAgICAxMzAsIDEzMCwgMTMwLCAxMzAsIDEzMSwgMTMxLCAxMzEsIDEzMSwgMTMyLCAxMzIsIDEzMiwgMTMyLAotICAgICAgICAxMzMsIDEzMywgMTMzLCAxMzMsIDE0NCwgNzEsIDY5fTsKKyAgICAgICAgMTMzLCAxMzMsIDEzMywgMTMzLCAxNDQsIDc2LCAyMDN9OwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBkYmFzZVszMl0gPSB7IC8qIERpc3RhbmNlIGNvZGVzIDAuLjMxIGJhc2UgKi8KICAgICAgICAgMSwgMiwgMywgNCwgNSwgNywgOSwgMTMsIDE3LCAyNSwgMzMsIDQ5LAogICAgICAgICA2NSwgOTcsIDEyOSwgMTkzLCAyNTcsIDM4NSwgNTEzLCA3NjksIDEwMjUsIDE1MzcsIDIwNDksIDMwNzMsCmRpZmYgLS1naXQgYS9jb250cmliL3Bhc2NhbC96bGlicGFzLnBhcyBiL2NvbnRyaWIvcGFzY2FsL3psaWJwYXMucGFzCmluZGV4IGY4MTg5M2YuLjkzNjE5MTQgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvcGFzY2FsL3psaWJwYXMucGFzCisrKyBiL2NvbnRyaWIvcGFzY2FsL3psaWJwYXMucGFzCkBAIC0xMCw3ICsxMCw3IEBACiBpbnRlcmZhY2UKIAogY29uc3QKLSAgWkxJQl9WRVJTSU9OID0gJzEuMi4wJzsKKyAgWkxJQl9WRVJTSU9OID0gJzEuMi4xJzsKIAogdHlwZQogICBhbGxvY19mdW5jID0gZnVuY3Rpb24ob3BhcXVlOiBQb2ludGVyOyBpdGVtcywgc2l6ZTogSW50ZWdlcik6IFBvaW50ZXI7CkBAIC05Nyw2ICs5Nyw3IEBACiBmdW5jdGlvbiBkZWZsYXRlUmVzZXQodmFyIHN0cm06IHpfc3RyZWFtKTogSW50ZWdlcjsKIGZ1bmN0aW9uIGRlZmxhdGVQYXJhbXModmFyIHN0cm06IHpfc3RyZWFtOyBsZXZlbCwgc3RyYXRlZ3k6IEludGVnZXIpOiBJbnRlZ2VyOwogZnVuY3Rpb24gZGVmbGF0ZUJvdW5kKHZhciBzdHJtOiB6X3N0cmVhbTsgc291cmNlTGVuOiBMb25nSW50KTogTG9uZ0ludDsKK2Z1bmN0aW9uIGRlZmxhdGVQcmltZSh2YXIgc3RybTogel9zdHJlYW07IGJpdHMsIHZhbHVlOiBJbnRlZ2VyKTogSW50ZWdlcjsKIGZ1bmN0aW9uIGluZmxhdGVJbml0Mih2YXIgc3RybTogel9zdHJlYW07IHdpbmRvd0JpdHM6IEludGVnZXIpOiBJbnRlZ2VyOwogZnVuY3Rpb24gaW5mbGF0ZVNldERpY3Rpb25hcnkodmFyIHN0cm06IHpfc3RyZWFtOyBjb25zdCBkaWN0aW9uYXJ5OiBQQ2hhcjsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGRpY3RMZW5ndGg6IEludGVnZXIpOiBJbnRlZ2VyOwpkaWZmIC0tZ2l0IGEvY29udHJpYi92aXN1YWwtYmFzaWMudHh0IGIvY29udHJpYi92aXN1YWwtYmFzaWMudHh0CmluZGV4IDEwZmI0NGIuLjU3ZWZlNTggMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvdmlzdWFsLWJhc2ljLnR4dAorKysgYi9jb250cmliL3Zpc3VhbC1iYXNpYy50eHQKQEAgLTY3LDMgKzY3LDk0IEBACiAtSm9uIENhcnVhbmEKIGpvbi1uZXRAdXNhLm5ldAogTWljcm9zb2Z0IFNpdGVidWlsZGVyIE5ldHdvcmsgTGV2ZWwgMSBNZW1iZXIgLSBIVE1MIFdyaXRlcidzIEd1aWxkIE1lbWJlcgorCisKK0hlcmUgaXMgYW5vdGhlciBleGFtcGxlIGZyb20gTWljaGFlbCA8bWljaGFlbF9ib3Jnc3lzQGhvdG1haWwuY29tPiB0aGF0IGhlCitzYXlzIGNvbmZvcm1zIHRvIHRoZSBWQiBndWlkZWxpbmVzLCBhbmQgdGhhdCBzb2x2ZXMgdGhlIHByb2JsZW0gb2Ygbm90Citrbm93aW5nIHRoZSB1bmNvbXByZXNzZWQgc2l6ZSBieSBzdG9yaW5nIGl0IGF0IHRoZSBlbmQgb2YgdGhlIGZpbGU6CisKKydDYWxsaW5nIHRoZSBmdW5jdGlvbnM6CisnYnJhY2tldCBtZWFuaW5nOiA8cGFyYW1ldGVyPiBbb3B0aW9uYWxdIHtSYW5nZSBvZiBwb3NzaWJsZSB2YWx1ZXN9CisnQ2FsbCBzdWJDb21wcmVzc0ZpbGUoPHBhdGggd2l0aCBmaWxlbmFtZSB0byBjb21wcmVzcz4gWywgPHBhdGggd2l0aAorZmlsZW5hbWUgdG8gd3JpdGUgdG8+LCBbbGV2ZWwgb2YgY29tcHJlc3Npb24gezEuLjl9XV0pCisnQ2FsbCBzdWJVbmNvbXByZXNzRmlsZSg8cGF0aCB3aXRoIGZpbGVuYW1lIHRvIGNvbXByZXNzPikKKworT3B0aW9uIEV4cGxpY2l0CitQcml2YXRlIGxuZ3B2dFBjblNtbCBBcyBMb25nICdTdG9yZXMgdmFsdWUgZm9yICdsbmdQZXJjZW50U21hbGxlcicKK1ByaXZhdGUgQ29uc3QgU1VDQ0VTUyBBcyBMb25nID0gMAorUHJpdmF0ZSBDb25zdCBzdHJGaWxFeHQgQXMgU3RyaW5nID0gIi5jcHIiCitQcml2YXRlIERlY2xhcmUgRnVuY3Rpb24gbG5nZm5jQ3ByIExpYiAiemxpYi5kbGwiIEFsaWFzICJjb21wcmVzczIiIChCeVJlZgorZGVzdCBBcyBBbnksIEJ5UmVmIGRlc3RMZW4gQXMgQW55LCBCeVJlZiBzcmMgQXMgQW55LCBCeVZhbCBzcmNMZW4gQXMgTG9uZywKK0J5VmFsIGxldmVsIEFzIEludGVnZXIpIEFzIExvbmcKK1ByaXZhdGUgRGVjbGFyZSBGdW5jdGlvbiBsbmdmbmNVY3AgTGliICJ6bGliLmRsbCIgQWxpYXMgInVuY29tcHJlc3MiIChCeVJlZgorZGVzdCBBcyBBbnksIEJ5UmVmIGRlc3RMZW4gQXMgQW55LCBCeVJlZiBzcmMgQXMgQW55LCBCeVZhbCBzcmNMZW4gQXMgTG9uZykKK0FzIExvbmcKKworUHVibGljIFN1YiBzdWJDb21wcmVzc0ZpbGUoQnlWYWwgc3RyYXJnT3JpRmlsUHRoIEFzIFN0cmluZywgT3B0aW9uYWwgQnlWYWwKK3N0cmFyZ0NwckZpbFB0aCBBcyBTdHJpbmcsIE9wdGlvbmFsIEJ5VmFsIGludEx2bCBBcyBJbnRlZ2VyID0gOSkKKyAgICBEaW0gc3RyQ3ByUHRoIEFzIFN0cmluZworICAgIERpbSBsbmdPcmlTaXogQXMgTG9uZworICAgIERpbSBsbmdDcHJTaXogQXMgTG9uZworICAgIERpbSBieXRhcnlPcmkoKSBBcyBCeXRlCisgICAgRGltIGJ5dGFyeUNwcigpIEFzIEJ5dGUKKyAgICBsbmdPcmlTaXogPSBGaWxlTGVuKHN0cmFyZ09yaUZpbFB0aCkKKyAgICBSZURpbSBieXRhcnlPcmkobG5nT3JpU2l6IC0gMSkKKyAgICBPcGVuIHN0cmFyZ09yaUZpbFB0aCBGb3IgQmluYXJ5IEFjY2VzcyBSZWFkIEFzICMxCisgICAgICAgIEdldCAjMSwgLCBieXRhcnlPcmkoKQorICAgIENsb3NlICMxCisgICAgc3RyQ3ByUHRoID0gSUlmKHN0cmFyZ0NwckZpbFB0aCA9ICIiLCBzdHJhcmdPcmlGaWxQdGgsIHN0cmFyZ0NwckZpbFB0aCkKKydTZWxlY3QgZmlsZSBwYXRoIGFuZCBuYW1lCisgICAgc3RyQ3ByUHRoID0gc3RyQ3ByUHRoICYgSUlmKFJpZ2h0KHN0ckNwclB0aCwgTGVuKHN0ckZpbEV4dCkpID0KK3N0ckZpbEV4dCwgIiIsIHN0ckZpbEV4dCkgJ0FkZCBmaWxlIGV4dGVuc2lvbiBpZiBub3QgZXhpc3RzCisgICAgbG5nQ3ByU2l6ID0gKGxuZ09yaVNpeiAqIDEuMDEpICsgMTIgJ0NvbXByZXNzaW9uIG5lZWRzIHRlbXBvcmFyeSBhIGJpdAorbW9yZSBzcGFjZSB0aGVuIG9yaWdpbmFsIGZpbGUgc2l6ZQorICAgIFJlRGltIGJ5dGFyeUNwcihsbmdDcHJTaXogLSAxKQorICAgIElmIGxuZ2ZuY0NwcihieXRhcnlDcHIoMCksIGxuZ0NwclNpeiwgYnl0YXJ5T3JpKDApLCBsbmdPcmlTaXosIGludEx2bCkgPQorU1VDQ0VTUyBUaGVuCisgICAgICAgIGxuZ3B2dFBjblNtbCA9ICgxIyAtIChsbmdDcHJTaXogLyBsbmdPcmlTaXopKSAqIDEwMAorICAgICAgICBSZURpbSBQcmVzZXJ2ZSBieXRhcnlDcHIobG5nQ3ByU2l6IC0gMSkKKyAgICAgICAgT3BlbiBzdHJDcHJQdGggRm9yIEJpbmFyeSBBY2Nlc3MgV3JpdGUgQXMgIzEKKyAgICAgICAgICAgIFB1dCAjMSwgLCBieXRhcnlDcHIoKQorICAgICAgICAgICAgUHV0ICMxLCAsIGxuZ09yaVNpeiAnQWRkIHRoZSB0aGUgb3JpZ2luYWwgc2l6ZSB2YWx1ZSB0byB0aGUgZW5kCisobGFzdCA0IGJ5dGVzKQorICAgICAgICBDbG9zZSAjMQorICAgIEVsc2UKKyAgICAgICAgTXNnQm94ICJDb21wcmVzc2lvbiBlcnJvciIKKyAgICBFbmQgSWYKKyAgICBFcmFzZSBieXRhcnlDcHIKKyAgICBFcmFzZSBieXRhcnlPcmkKK0VuZCBTdWIKKworUHVibGljIFN1YiBzdWJVbmNvbXByZXNzRmlsZShCeVZhbCBzdHJhcmdGaWxQdGggQXMgU3RyaW5nKQorICAgIERpbSBieXRhcnlDcHIoKSBBcyBCeXRlCisgICAgRGltIGJ5dGFyeU9yaSgpIEFzIEJ5dGUKKyAgICBEaW0gbG5nT3JpU2l6IEFzIExvbmcKKyAgICBEaW0gbG5nQ3ByU2l6IEFzIExvbmcKKyAgICBEaW0gc3RyT3JpUHRoIEFzIFN0cmluZworICAgIGxuZ0NwclNpeiA9IEZpbGVMZW4oc3RyYXJnRmlsUHRoKQorICAgIFJlRGltIGJ5dGFyeUNwcihsbmdDcHJTaXogLSAxKQorICAgIE9wZW4gc3RyYXJnRmlsUHRoIEZvciBCaW5hcnkgQWNjZXNzIFJlYWQgQXMgIzEKKyAgICAgICAgR2V0ICMxLCAsIGJ5dGFyeUNwcigpCisgICAgQ2xvc2UgIzEKKyAgICAnUmVhZCB0aGUgb3JpZ2luYWwgZmlsZSBzaXplIHZhbHVlOgorICAgIGxuZ09yaVNpeiA9IGJ5dGFyeUNwcihsbmdDcHJTaXogLSAxKSAqICgyIF4gMjQpIF8KKyAgICAgICAgICAgICAgKyBieXRhcnlDcHIobG5nQ3ByU2l6IC0gMikgKiAoMiBeIDE2KSBfCisgICAgICAgICAgICAgICsgYnl0YXJ5Q3ByKGxuZ0NwclNpeiAtIDMpICogKDIgXiA4KSBfCisgICAgICAgICAgICAgICsgYnl0YXJ5Q3ByKGxuZ0NwclNpeiAtIDQpCisgICAgUmVEaW0gUHJlc2VydmUgYnl0YXJ5Q3ByKGxuZ0NwclNpeiAtIDUpICdDdXQgb2YgdGhlIG9yaWdpbmFsIHNpemUgdmFsdWUKKyAgICBSZURpbSBieXRhcnlPcmkobG5nT3JpU2l6IC0gMSkKKyAgICBJZiBsbmdmbmNVY3AoYnl0YXJ5T3JpKDApLCBsbmdPcmlTaXosIGJ5dGFyeUNwcigwKSwgbG5nQ3ByU2l6KSA9IFNVQ0NFU1MKK1RoZW4KKyAgICAgICAgc3RyT3JpUHRoID0gTGVmdChzdHJhcmdGaWxQdGgsIExlbihzdHJhcmdGaWxQdGgpIC0gTGVuKHN0ckZpbEV4dCkpCisgICAgICAgIE9wZW4gc3RyT3JpUHRoIEZvciBCaW5hcnkgQWNjZXNzIFdyaXRlIEFzICMxCisgICAgICAgICAgICBQdXQgIzEsICwgYnl0YXJ5T3JpKCkKKyAgICAgICAgQ2xvc2UgIzEKKyAgICBFbHNlCisgICAgICAgIE1zZ0JveCAiVW5jb21wcmVzc2lvbiBlcnJvciIKKyAgICBFbmQgSWYKKyAgICBFcmFzZSBieXRhcnlDcHIKKyAgICBFcmFzZSBieXRhcnlPcmkKK0VuZCBTdWIKK1B1YmxpYyBQcm9wZXJ0eSBHZXQgbG5nUGVyY2VudFNtYWxsZXIoKSBBcyBMb25nCisgICAgbG5nUGVyY2VudFNtYWxsZXIgPSBsbmdwdnRQY25TbWwKK0VuZCBQcm9wZXJ0eQpkaWZmIC0tZ2l0IGEvY29udHJpYi92c3R1ZGlvL3ZjNy96bGlidmMuZGVmIGIvY29udHJpYi92c3R1ZGlvL3ZjNy96bGlidmMuZGVmCmluZGV4IDYzYjNlNmQuLjZiYzI2YzQgMTAwNjQ0Ci0tLSBhL2NvbnRyaWIvdnN0dWRpby92YzcvemxpYnZjLmRlZgorKysgYi9jb250cmliL3ZzdHVkaW8vdmM3L3psaWJ2Yy5kZWYKQEAgLTUzLDcgKzUzLDggQEAKICAgICAgICAgZGVmbGF0ZUJvdW5kICAgICAgICAgICAgICAgICAgICAgICAgICAgICBANDcNCiAgICAgICAgIGd6Y2xlYXJlcnIgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDQ4DQogICAgICAgICBnenVuZ2V0YyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA0OQ0KLSAgICAgICAgemxpYkNvbXBpbGVGbGFncyAgICAgICAgICAgICAgICAgICAgICAgICBANTANCisgICAgICAgIHpsaWJDb21waWxlRmxhZ3MgICAgICAgICAgICAgICAgICAgICAgICAgQDUwCisgICAgICAgIGRlZmxhdGVQcmltZSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgQDUxDQogDQogICAgICAgICB1bnpPcGVuICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIEA2MQ0KICAgICAgICAgdW56Q2xvc2UgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBANjINCmRpZmYgLS1naXQgYS9kZWZsYXRlLmMgYi9kZWZsYXRlLmMKaW5kZXggZGRjMGM1ZS4uOWU5MGE3OSAxMDA2NDQKLS0tIGEvZGVmbGF0ZS5jCisrKyBiL2RlZmxhdGUuYwpAQCAtNTIsNyArNTIsNyBAQAogI2luY2x1ZGUgImRlZmxhdGUuaCIKIAogY29uc3QgY2hhciBkZWZsYXRlX2NvcHlyaWdodFtdID0KLSAgICIgZGVmbGF0ZSAxLjIuMC43IENvcHlyaWdodCAxOTk1LTIwMDMgSmVhbi1sb3VwIEdhaWxseSAiOworICAgIiBkZWZsYXRlIDEuMi4wLjggQ29weXJpZ2h0IDE5OTUtMjAwMyBKZWFuLWxvdXAgR2FpbGx5ICI7CiAvKgogICBJZiB5b3UgdXNlIHRoZSB6bGliIGxpYnJhcnkgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpcyB3ZWxjb21lCiAgIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHlvdXIgcHJvZHVjdC4gSWYgZm9yIHNvbWUgcmVhc29uIHlvdSBjYW5ub3QKQEAgLTM5MSw2ICszOTEsMTggQEAKIH0KIAogLyogPT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PSAqLworaW50IFpFWFBPUlQgZGVmbGF0ZVByaW1lIChzdHJtLCBiaXRzLCB2YWx1ZSkKKyAgICB6X3N0cmVhbXAgc3RybTsKKyAgICBpbnQgYml0czsKKyAgICBpbnQgdmFsdWU7Cit7CisgICAgaWYgKHN0cm0gPT0gWl9OVUxMIHx8IHN0cm0tPnN0YXRlID09IFpfTlVMTCkgcmV0dXJuIFpfU1RSRUFNX0VSUk9SOworICAgIHN0cm0tPnN0YXRlLT5iaV92YWxpZCA9IGJpdHM7CisgICAgc3RybS0+c3RhdGUtPmJpX2J1ZiA9ICh1c2gpKHZhbHVlICYgKCgxIDw8IGJpdHMpIC0gMSkpOworICAgIHJldHVybiBaX09LOworfQorCisvKiA9PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09ICovCiBpbnQgWkVYUE9SVCBkZWZsYXRlUGFyYW1zKHN0cm0sIGxldmVsLCBzdHJhdGVneSkKICAgICB6X3N0cmVhbXAgc3RybTsKICAgICBpbnQgbGV2ZWw7CmRpZmYgLS1naXQgYS9nemlvLmMgYi9nemlvLmMKaW5kZXggNDQxNTYwZS4uNGFmZDEwMiAxMDA2NDQKLS0tIGEvZ3ppby5jCisrKyBiL2d6aW8uYwpAQCAtODg5LDcgKzg4OSwxMyBAQAogewogICAgIGd6X3N0cmVhbSAqcyA9IChnel9zdHJlYW0qKWZpbGU7CiAKLSAgICByZXR1cm4gKHMgPT0gTlVMTCB8fCBzLT5tb2RlICE9ICdyJykgPyAwIDogcy0+el9lb2Y7CisgICAgLyogV2l0aCBjb25jYXRlbmF0ZWQgY29tcHJlc3NlZCBmaWxlcyB0aGF0IGNhbiBoYXZlIGVtYmVkZGVkCisgICAgICogY3JjIHRyYWlsZXJzLCB6X2VvZiBpcyBubyBsb25nZXIgdGhlIG9ubHkvYmVzdCBpbmRpY2F0b3Igb2YgRU9GCisgICAgICogb24gYSBnel9zdHJlYW0uIEhhbmRsZSBlbmQtb2Ytc3RyZWFtIGVycm9yIGV4cGxpY2l0bHkgaGVyZS4KKyAgICAgKi8KKyAgICBpZiAocyA9PSBOVUxMIHx8IHMtPm1vZGUgIT0gJ3InKSByZXR1cm4gMDsKKyAgICBpZiAocy0+el9lb2YpIHJldHVybiAxOworICAgIHJldHVybiBzLT56X2VyciA9PSBaX1NUUkVBTV9FTkQ7CiB9CiAKIC8qID09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PT09PQpkaWZmIC0tZ2l0IGEvaW5mbGF0ZS5jIGIvaW5mbGF0ZS5jCmluZGV4IDI4N2VmZGEuLmE1M2I1YzcgMTAwNjQ0Ci0tLSBhL2luZmxhdGUuYworKysgYi9pbmZsYXRlLmMKQEAgLTU2OCw3ICs1NjgsNyBAQAogICAgICAgICBzd2l0Y2ggKHN0YXRlLT5tb2RlKSB7CiAgICAgICAgIGNhc2UgSEVBRDoKICAgICAgICAgICAgIGlmIChzdGF0ZS0+d3JhcCA9PSAwKSB7Ci0gICAgICAgICAgICAgICAgc3RhdGUtPm1vZGUgPSBUWVBFOworICAgICAgICAgICAgICAgIHN0YXRlLT5tb2RlID0gVFlQRURPOwogICAgICAgICAgICAgICAgIGJyZWFrOwogICAgICAgICAgICAgfQogICAgICAgICAgICAgTkVFREJJVFMoMTYpOwpAQCAtMTA3NCw4ICsxMDc0LDggQEAKICAgICBpZiAoc3RhdGUtPndyYXAgJiYgb3V0KQogICAgICAgICBzdHJtLT5hZGxlciA9IHN0YXRlLT5jaGVjayA9CiAgICAgICAgICAgICBVUERBVEUoc3RhdGUtPmNoZWNrLCBzdHJtLT5uZXh0X291dCAtIG91dCwgb3V0KTsKLSAgICBzdHJtLT5kYXRhX3R5cGUgPSBzdGF0ZS0+Yml0cyArIChzdGF0ZS0+bGFzdCA/IDggOiAwKSArCi0gICAgICAgICAgICAgICAgICAgICAgKHN0YXRlLT5tb2RlID09IFRZUEUgPyAxNiA6IDApOworICAgIHN0cm0tPmRhdGFfdHlwZSA9IHN0YXRlLT5iaXRzICsgKHN0YXRlLT5sYXN0ID8gNjQgOiAwKSArCisgICAgICAgICAgICAgICAgICAgICAgKHN0YXRlLT5tb2RlID09IFRZUEUgPyAxMjggOiAwKTsKICAgICBpZiAoKChpbiA9PSAwICYmIG91dCA9PSAwKSB8fCBmbHVzaCA9PSBaX0ZJTklTSCkgJiYgcmV0ID09IFpfT0spCiAgICAgICAgIHJldCA9IFpfQlVGX0VSUk9SOwogICAgIHJldHVybiByZXQ7CmRpZmYgLS1naXQgYS9pbmZ0cmVlcy5jIGIvaW5mdHJlZXMuYwppbmRleCA3NWJjMjJmLi40MGRlMDIxIDEwMDY0NAotLS0gYS9pbmZ0cmVlcy5jCisrKyBiL2luZnRyZWVzLmMKQEAgLTksNyArOSw3IEBACiAjZGVmaW5lIE1BWEJJVFMgMTUKIAogY29uc3QgY2hhciBpbmZsYXRlX2NvcHlyaWdodFtdID0KLSAgICIgaW5mbGF0ZSAxLjIuMC43IENvcHlyaWdodCAxOTk1LTIwMDMgTWFyayBBZGxlciAiOworICAgIiBpbmZsYXRlIDEuMi4wLjggQ29weXJpZ2h0IDE5OTUtMjAwMyBNYXJrIEFkbGVyICI7CiAvKgogICBJZiB5b3UgdXNlIHRoZSB6bGliIGxpYnJhcnkgaW4gYSBwcm9kdWN0LCBhbiBhY2tub3dsZWRnbWVudCBpcyB3ZWxjb21lCiAgIGluIHRoZSBkb2N1bWVudGF0aW9uIG9mIHlvdXIgcHJvZHVjdC4gSWYgZm9yIHNvbWUgcmVhc29uIHlvdSBjYW5ub3QKQEAgLTYyLDcgKzYyLDcgQEAKICAgICAgICAgMzUsIDQzLCA1MSwgNTksIDY3LCA4MywgOTksIDExNSwgMTMxLCAxNjMsIDE5NSwgMjI3LCAyNTgsIDAsIDB9OwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBsZXh0WzMxXSA9IHsgLyogTGVuZ3RoIGNvZGVzIDI1Ny4uMjg1IGV4dHJhICovCiAgICAgICAgIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTYsIDE2LCAxNiwgMTcsIDE3LCAxNywgMTcsIDE4LCAxOCwgMTgsIDE4LAotICAgICAgICAxOSwgMTksIDE5LCAxOSwgMjAsIDIwLCAyMCwgMjAsIDIxLCAyMSwgMjEsIDIxLCAxNiwgNzEsIDY5fTsKKyAgICAgICAgMTksIDE5LCAxOSwgMTksIDIwLCAyMCwgMjAsIDIwLCAyMSwgMjEsIDIxLCAyMSwgMTYsIDc2LCAyMDN9OwogICAgIHN0YXRpYyBjb25zdCB1bnNpZ25lZCBzaG9ydCBkYmFzZVszMl0gPSB7IC8qIERpc3RhbmNlIGNvZGVzIDAuLjI5IGJhc2UgKi8KICAgICAgICAgMSwgMiwgMywgNCwgNSwgNywgOSwgMTMsIDE3LCAyNSwgMzMsIDQ5LCA2NSwgOTcsIDEyOSwgMTkzLAogICAgICAgICAyNTcsIDM4NSwgNTEzLCA3NjksIDEwMjUsIDE1MzcsIDIwNDksIDMwNzMsIDQwOTcsIDYxNDUsCmRpZmYgLS1naXQgYS9taW5pZ3ppcC5jIGIvbWluaWd6aXAuYwppbmRleCAxNjdmNzQ1Li42ZGUzNWRkIDEwMDY0NAotLS0gYS9taW5pZ3ppcC5jCisrKyBiL21pbmlnemlwLmMKQEAgLTMxLDcgKzMxLDcgQEAKICMgIGluY2x1ZGUgPHN5cy9zdGF0Lmg+CiAjZW5kaWYKIAotI2lmIGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoT1MyKSB8fCBkZWZpbmVkKFdJTjMyKQorI2lmIGRlZmluZWQoTVNET1MpIHx8IGRlZmluZWQoT1MyKSB8fCBkZWZpbmVkKFdJTjMyKSB8fCBkZWZpbmVkKF9fQ1lHV0lOX18pCiAjICBpbmNsdWRlIDxmY250bC5oPgogIyAgaW5jbHVkZSA8aW8uaD4KICMgIGRlZmluZSBTRVRfQklOQVJZX01PREUoZmlsZSkgc2V0bW9kZShmaWxlbm8oZmlsZSksIE9fQklOQVJZKQpkaWZmIC0tZ2l0IGEvcW54L3BhY2thZ2UucXBnIGIvcW54L3BhY2thZ2UucXBnCmluZGV4IGY3YzllNzMuLjY5MzM2ZDkgMTAwNjQ0Ci0tLSBhL3FueC9wYWNrYWdlLnFwZworKysgYi9xbngvcGFja2FnZS5xcGcKQEAgLTI1LDEwICsyNSwxMCBAQAogICAgICAgPFFQRzpGaWxlcz4KICAgICAgICAgIDxRUEc6QWRkIGZpbGU9Ii4uL3pjb25mLmgiIGluc3RhbGw9Ii9vcHQvaW5jbHVkZS8iIHVzZXI9InJvb3Q6c3lzIiBwZXJtaXNzaW9uPSI2NDQiLz4KICAgICAgICAgIDxRUEc6QWRkIGZpbGU9Ii4uL3psaWIuaCIgaW5zdGFsbD0iL29wdC9pbmNsdWRlLyIgdXNlcj0icm9vdDpzeXMiIHBlcm1pc3Npb249IjY0NCIvPgotICAgICAgICAgPFFQRzpBZGQgZmlsZT0iLi4vbGliei5zby4xLjIuMC43IiBpbnN0YWxsPSIvb3B0L2xpYi8iIHVzZXI9InJvb3Q6YmluIiBwZXJtaXNzaW9uPSI2NDQiLz4KLSAgICAgICAgIDxRUEc6QWRkIGZpbGU9ImxpYnouc28iIGluc3RhbGw9Ii9vcHQvbGliLyIgY29tcG9uZW50PSJkZXYiIGZpbGV0eXBlPSJzeW1saW5rIiBsaW5rdG89ImxpYnouc28uMS4yLjAuNyIvPgotICAgICAgICAgPFFQRzpBZGQgZmlsZT0ibGliei5zby4xIiBpbnN0YWxsPSIvb3B0L2xpYi8iIGZpbGV0eXBlPSJzeW1saW5rIiBsaW5rdG89ImxpYnouc28uMS4yLjAuNyIvPgotICAgICAgICAgPFFQRzpBZGQgZmlsZT0iLi4vbGliei5zby4xLjIuMC43IiBpbnN0YWxsPSIvb3B0L2xpYi8iIGNvbXBvbmVudD0ic2xpYiIvPgorICAgICAgICAgPFFQRzpBZGQgZmlsZT0iLi4vbGliei5zby4xLjIuMC44IiBpbnN0YWxsPSIvb3B0L2xpYi8iIHVzZXI9InJvb3Q6YmluIiBwZXJtaXNzaW9uPSI2NDQiLz4KKyAgICAgICAgIDxRUEc6QWRkIGZpbGU9ImxpYnouc28iIGluc3RhbGw9Ii9vcHQvbGliLyIgY29tcG9uZW50PSJkZXYiIGZpbGV0eXBlPSJzeW1saW5rIiBsaW5rdG89ImxpYnouc28uMS4yLjAuOCIvPgorICAgICAgICAgPFFQRzpBZGQgZmlsZT0ibGliei5zby4xIiBpbnN0YWxsPSIvb3B0L2xpYi8iIGZpbGV0eXBlPSJzeW1saW5rIiBsaW5rdG89ImxpYnouc28uMS4yLjAuOCIvPgorICAgICAgICAgPFFQRzpBZGQgZmlsZT0iLi4vbGliei5zby4xLjIuMC44IiBpbnN0YWxsPSIvb3B0L2xpYi8iIGNvbXBvbmVudD0ic2xpYiIvPgogICAgICAgPC9RUEc6RmlsZXM+CiAKICAgICAgIDxRUEc6UGFja2FnZUZpbHRlcj4KQEAgLTYzLDcgKzYzLDcgQEAKICAgICAgICAgICAgIDwvUVBNOlByb2R1Y3REZXNjcmlwdGlvbj4KIAogICAgICAgICAgICAgPFFQTTpSZWxlYXNlRGVzY3JpcHRpb24+Ci0gICAgICAgICAgICAgICA8UVBNOlJlbGVhc2VWZXJzaW9uPjEuMi4wLjc8L1FQTTpSZWxlYXNlVmVyc2lvbj4KKyAgICAgICAgICAgICAgIDxRUE06UmVsZWFzZVZlcnNpb24+MS4yLjAuODwvUVBNOlJlbGVhc2VWZXJzaW9uPgogICAgICAgICAgICAgICAgPFFQTTpSZWxlYXNlVXJnZW5jeT5NZWRpdW08L1FQTTpSZWxlYXNlVXJnZW5jeT4KICAgICAgICAgICAgICAgIDxRUE06UmVsZWFzZVN0YWJpbGl0eT5TdGFibGU8L1FQTTpSZWxlYXNlU3RhYmlsaXR5PgogICAgICAgICAgICAgICAgPFFQTTpSZWxlYXNlTm90ZU1pbm9yPjwvUVBNOlJlbGVhc2VOb3RlTWlub3I+CmRpZmYgLS1naXQgYS93aW4zMi9ETExfRkFRLnR4dCBiL3dpbjMyL0RMTF9GQVEudHh0CmluZGV4IGM0NGJjZTUuLjgwYjZiNDIgMTAwNjQ0Ci0tLSBhL3dpbjMyL0RMTF9GQVEudHh0CisrKyBiL3dpbjMyL0RMTF9GQVEudHh0CkBAIC0zMzQsOSArMzM0LDkgQEAKICAgICBsaW5rIHRoZW0gaW4gWkxJQjEuRExMLCBhbmQgZXhwb3J0IHRoZW0/CiAKICAgLSBOby4gIEEgbGVnaXRpbWF0ZSBidWlsZCBvZiBaTElCMS5ETEwgbXVzdCBub3QgaW5jbHVkZSBjb2RlCi0gICAgdGhhdCBkb2VzIG5vdCBvcmlnaW5hdGUgZnJvbSB0aGUgb2ZmaWNpYWwgemxpYiBzb3VyY2VzLiAgQnV0Ci0gICAgeW91IGNhbiBtYWtlIHlvdXIgb3duIHByaXZhdGUgYnVpbGQsIGFuZCBnaXZlIGl0IGEgZGlmZmVyZW50Ci0gICAgbmFtZSwgYXMgc3VnZ2VzdGVkIGluIHRoZSBwcmV2aW91cyBhbnN3ZXIuCisgICAgdGhhdCBkb2VzIG5vdCBvcmlnaW5hdGUgZnJvbSB0aGUgb2ZmaWNpYWwgemxpYiBzb3VyY2UgY29kZS4KKyAgICBCdXQgeW91IGNhbiBtYWtlIHlvdXIgb3duIHByaXZhdGUgRExMIGJ1aWxkLCB1bmRlciBhIGRpZmZlcmVudAorICAgIGZpbGUgbmFtZSwgYXMgc3VnZ2VzdGVkIGluIHRoZSBwcmV2aW91cyBhbnN3ZXIuCiAKICAgICBGb3IgZXhhbXBsZSwgaW4gQm9ybGFuZCBEZWxwaGkgYW5kIEMrKyBCdWlsZGVyLCB6bGliIGlzIGEgcGFydAogICAgIG9mIHRoZSBzdGFuZGFyZCBWQ0wgbGlicmFyeS4gIElmIGFuIGFwcGxpY2F0aW9uIGxpbmtzIHRvIFZDTApAQCAtMzQ1LDcgKzM0NSwxNiBAQAogICAgIGluY29tcGF0aWJsZSBaTElCMS5ETEwuCiAKIAotMTQuIEkgbWFkZSBteSBvd24gWkxJQjEuRExMIGJ1aWxkLiAgQ2FuIEkgdGVzdCBpdCBmb3IgY29tcGxpYW5jZT8KKzE0LiBNYXkgSSByZW1vdmUgc29tZSBmdW5jdGlvbmFsaXR5IG91dCBvZiBaTElCMS5ETEwsIGJ5IGVuYWJsaW5nCisgICAgbWFjcm9zIGxpa2UgTk9fR1pDT01QUkVTUyBvciBOT19HWklQIGF0IGNvbXBpbGUgdGltZT8KKworICAtIE5vLiAgQSBsZWdpdGltYXRlIGJ1aWxkIG9mIFpMSUIxLkRMTCBtdXN0IHByb3ZpZGUgdGhlIGNvbXBsZXRlCisgICAgemxpYiBmdW5jdGlvbmFsaXR5LCBhcyBpbXBsZW1lbnRlZCBpbiB0aGUgb2ZmaWNpYWwgemxpYiBzb3VyY2UKKyAgICBjb2RlLiAgQnV0IHlvdSBjYW4gbWFrZSB5b3VyIG93biBwcml2YXRlIERMTCBidWlsZCwgdW5kZXIgYQorICAgIGRpZmZlcmVudCBmaWxlIG5hbWUsIGFzIHN1Z2dlc3RlZCBpbiB0aGUgcHJldmlvdXMgYW5zd2VyLgorCisKKzE1LiBJIG1hZGUgbXkgb3duIFpMSUIxLkRMTCBidWlsZC4gIENhbiBJIHRlc3QgaXQgZm9yIGNvbXBsaWFuY2U/CiAKICAgLSBXZSBwcmVmZXIgdGhhdCB5b3UgZG93bmxvYWQgdGhlIG9mZmljaWFsIERMTCBmcm9tIHRoZSB6bGliCiAgICAgd2ViIHNpdGUuICBJZiB5b3UgbmVlZCBzb21ldGhpbmcgcGVjdWxpYXIgZnJvbSB0aGlzIERMTCwgeW91CkBAIC0zNTYsMyArMzY1LDcgQEAKICAgICBSdW5uaW5nIHRoZXNlIHRlc3QgcHJvZ3JhbXMgaXMgbm90IGEgZ3VhcmFudGVlIG9mIGNvbXBsaWFuY2UsCiAgICAgYnV0IGEgZmFpbHVyZSBjYW4gaW1wbHkgYSBkZXRlY3RlZCBwcm9ibGVtLgogCisqKgorCitUaGlzIGRvY3VtZW50IGlzIHdyaXR0ZW4gYW5kIG1haW50YWluZWQgYnkKK0Nvc21pbiBUcnV0YSA8Y29zbWludEBjcy51YmJjbHVqLnJvPgpkaWZmIC0tZ2l0IGEvd2luMzIvemxpYi5kZWYgYi93aW4zMi96bGliLmRlZgppbmRleCA1Njg4YTFjLi5hNDdjYmMxIDEwMDY0NAotLS0gYS93aW4zMi96bGliLmRlZgorKysgYi93aW4zMi96bGliLmRlZgpAQCAtMTQsNiArMTQsNyBAQAogICAgIGRlZmxhdGVSZXNldAogICAgIGRlZmxhdGVQYXJhbXMKICAgICBkZWZsYXRlQm91bmQKKyAgICBkZWZsYXRlUHJpbWUKICAgICBpbmZsYXRlU2V0RGljdGlvbmFyeQogICAgIGluZmxhdGVTeW5jCiAgICAgaW5mbGF0ZUNvcHkKZGlmZiAtLWdpdCBhL3dpbjMyL3psaWIxLnJjIGIvd2luMzIvemxpYjEucmMKaW5kZXggOWMyNjQ2Ny4uMDlhMDZmNSAxMDA2NDQKLS0tIGEvd2luMzIvemxpYjEucmMKKysrIGIvd2luMzIvemxpYjEucmMKQEAgLTUsOCArNSw4IEBACiAjZWxzZQogVlNfVkVSU0lPTl9JTkZPCQlWRVJTSU9OSU5GTwlNT1ZFQUJMRSBJTVBVUkUgTE9BRE9OQ0FMTCBESVNDQVJEQUJMRQogI2VuZGlmCi0gIEZJTEVWRVJTSU9OCQkxLDIsMCw3Ci0gIFBST0RVQ1RWRVJTSU9OCTEsMiwwLDcKKyAgRklMRVZFUlNJT04JCTEsMiwwLDgKKyAgUFJPRFVDVFZFUlNJT04JMSwyLDAsOAogICBGSUxFRkxBR1NNQVNLCQlWU19GRklfRklMRUZMQUdTTUFTSwogI2lmZGVmIF9ERUJVRwogICBGSUxFRkxBR1MJCTEKQEAgLTIzLDEyICsyMywxMiBAQAogICAgIC8vbGFuZ3VhZ2UgSUQgPSBVLlMuIEVuZ2xpc2gsIGNoYXIgc2V0ID0gV2luZG93cywgTXVsdGlsaW5ndWFsCiAgICAgQkVHSU4KICAgICAgIFZBTFVFICJGaWxlRGVzY3JpcHRpb24iLAkiemxpYiBkYXRhIGNvbXByZXNzaW9uIGxpYnJhcnlcMCIKLSAgICAgIFZBTFVFICJGaWxlVmVyc2lvbiIsCSIxLjIuMC43XDAiCisgICAgICBWQUxVRSAiRmlsZVZlcnNpb24iLAkiMS4yLjAuOFwwIgogICAgICAgVkFMVUUgIkludGVybmFsTmFtZSIsCSJ6bGliMS5kbGxcMCIKICAgICAgIFZBTFVFICJMZWdhbENvcHlyaWdodCIsCSIoQykgMTk5NS0yMDAzIEplYW4tbG91cCBHYWlsbHkgJiBNYXJrIEFkbGVyXDAiCiAgICAgICBWQUxVRSAiT3JpZ2luYWxGaWxlbmFtZSIsCSJ6bGliMS5kbGxcMCIKICAgICAgIFZBTFVFICJQcm9kdWN0TmFtZSIsCSJ6bGliXDAiCi0gICAgICBWQUxVRSAiUHJvZHVjdFZlcnNpb24iLAkiMS4yLjAuN1wwIgorICAgICAgVkFMVUUgIlByb2R1Y3RWZXJzaW9uIiwJIjEuMi4wLjhcMCIKICAgICAgIFZBTFVFICJDb21tZW50cyIsIkRMTCBzdXBwb3J0IGJ5IEFsZXNzYW5kcm8gSWFjb3BldHRpICYgR2lsbGVzIFZvbGxhbnRcMCIKICAgICBFTkQKICAgRU5ECmRpZmYgLS1naXQgYS96Y29uZi5oIGIvemNvbmYuaAppbmRleCA0MzAxMzc1Li4zY2VhODk3IDEwMDY0NAotLS0gYS96Y29uZi5oCisrKyBiL3pjb25mLmgKQEAgLTIzLDYgKzIzLDcgQEAKICMgIGRlZmluZSBkZWZsYXRlU2V0RGljdGlvbmFyeSB6X2RlZmxhdGVTZXREaWN0aW9uYXJ5CiAjICBkZWZpbmUgZGVmbGF0ZUNvcHkgICB6X2RlZmxhdGVDb3B5CiAjICBkZWZpbmUgZGVmbGF0ZVJlc2V0ICB6X2RlZmxhdGVSZXNldAorIyAgZGVmaW5lIGRlZmxhdGVQcmltZSAgel9kZWZsYXRlUHJpbWUKICMgIGRlZmluZSBkZWZsYXRlUGFyYW1zIHpfZGVmbGF0ZVBhcmFtcwogIyAgZGVmaW5lIGRlZmxhdGVCb3VuZCAgel9kZWZsYXRlQm91bmQKICMgIGRlZmluZSBpbmZsYXRlSW5pdDJfIHpfaW5mbGF0ZUluaXQyXwpAQCAtMTA1LDYgKzEwNiwxMCBAQAogIyAgZGVmaW5lIFNUREMKICNlbmRpZgogCisjaWYgZGVmaW5lZChfX09TNDAwX18pICYmICFkZWZpbmVkKFNUREMpICAgIC8qIGlTZXJpZXMgKGZvcm1lcmx5IEFTLzQwMCkuICovCisjICBkZWZpbmUgU1REQworI2VuZGlmCisKICNpZm5kZWYgU1REQwogIyAgaWZuZGVmIGNvbnN0IC8qIGNhbm5vdCB1c2UgIWRlZmluZWQoU1REQykgJiYgIWRlZmluZWQoY29uc3QpIG9uIE1hYyAqLwogIyAgICBkZWZpbmUgY29uc3QgICAgICAgLyogbm90ZTogbmVlZCBhIG1vcmUgZ2VudGxlIHNvbHV0aW9uIGhlcmUgKi8KQEAgLTI4NywxMSArMjkyLDE1IEBACiAjICBkZWZpbmUgIHpfb2ZmX3QgbG9uZwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKF9fTVZTX18pCisjaWYgZGVmaW5lZChfX09TNDAwX18pCiAjZGVmaW5lIE5PX3ZzbnByaW50ZgotI2lmZGVmIEZBUgotI3VuZGVmIEZBUgogI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fTVZTX18pCisjICBkZWZpbmUgTk9fdnNucHJpbnRmCisjICBpZmRlZiBGQVIKKyMgICAgdW5kZWYgRkFSCisjICBlbmRpZgogI2VuZGlmCiAKIC8qIE1WUyBsaW5rZXIgZG9lcyBub3Qgc3VwcG9ydCBleHRlcm5hbCBuYW1lcyBsYXJnZXIgdGhhbiA4IGJ5dGVzICovCmRpZmYgLS1naXQgYS96Y29uZi5pbi5oIGIvemNvbmYuaW4uaAppbmRleCA0MzAxMzc1Li4zY2VhODk3IDEwMDY0NAotLS0gYS96Y29uZi5pbi5oCisrKyBiL3pjb25mLmluLmgKQEAgLTIzLDYgKzIzLDcgQEAKICMgIGRlZmluZSBkZWZsYXRlU2V0RGljdGlvbmFyeSB6X2RlZmxhdGVTZXREaWN0aW9uYXJ5CiAjICBkZWZpbmUgZGVmbGF0ZUNvcHkgICB6X2RlZmxhdGVDb3B5CiAjICBkZWZpbmUgZGVmbGF0ZVJlc2V0ICB6X2RlZmxhdGVSZXNldAorIyAgZGVmaW5lIGRlZmxhdGVQcmltZSAgel9kZWZsYXRlUHJpbWUKICMgIGRlZmluZSBkZWZsYXRlUGFyYW1zIHpfZGVmbGF0ZVBhcmFtcwogIyAgZGVmaW5lIGRlZmxhdGVCb3VuZCAgel9kZWZsYXRlQm91bmQKICMgIGRlZmluZSBpbmZsYXRlSW5pdDJfIHpfaW5mbGF0ZUluaXQyXwpAQCAtMTA1LDYgKzEwNiwxMCBAQAogIyAgZGVmaW5lIFNUREMKICNlbmRpZgogCisjaWYgZGVmaW5lZChfX09TNDAwX18pICYmICFkZWZpbmVkKFNUREMpICAgIC8qIGlTZXJpZXMgKGZvcm1lcmx5IEFTLzQwMCkuICovCisjICBkZWZpbmUgU1REQworI2VuZGlmCisKICNpZm5kZWYgU1REQwogIyAgaWZuZGVmIGNvbnN0IC8qIGNhbm5vdCB1c2UgIWRlZmluZWQoU1REQykgJiYgIWRlZmluZWQoY29uc3QpIG9uIE1hYyAqLwogIyAgICBkZWZpbmUgY29uc3QgICAgICAgLyogbm90ZTogbmVlZCBhIG1vcmUgZ2VudGxlIHNvbHV0aW9uIGhlcmUgKi8KQEAgLTI4NywxMSArMjkyLDE1IEBACiAjICBkZWZpbmUgIHpfb2ZmX3QgbG9uZwogI2VuZGlmCiAKLSNpZiBkZWZpbmVkKF9fTVZTX18pCisjaWYgZGVmaW5lZChfX09TNDAwX18pCiAjZGVmaW5lIE5PX3ZzbnByaW50ZgotI2lmZGVmIEZBUgotI3VuZGVmIEZBUgogI2VuZGlmCisKKyNpZiBkZWZpbmVkKF9fTVZTX18pCisjICBkZWZpbmUgTk9fdnNucHJpbnRmCisjICBpZmRlZiBGQVIKKyMgICAgdW5kZWYgRkFSCisjICBlbmRpZgogI2VuZGlmCiAKIC8qIE1WUyBsaW5rZXIgZG9lcyBub3Qgc3VwcG9ydCBleHRlcm5hbCBuYW1lcyBsYXJnZXIgdGhhbiA4IGJ5dGVzICovCmRpZmYgLS1naXQgYS96bGliLjMgYi96bGliLjMKaW5kZXggMGExYTU3ZS4uZjBjMTcyYiAxMDA2NDQKLS0tIGEvemxpYi4zCisrKyBiL3psaWIuMwpAQCAtMSw0ICsxLDQgQEAKLS5USCBaTElCIDMgIjIxIFNlcHRlbWJlciAyMDAzIgorLlRIIFpMSUIgMyAiNCBOb3ZlbWJlciAyMDAzIgogLlNIIE5BTUUKIHpsaWIgXC0gY29tcHJlc3Npb24vZGVjb21wcmVzc2lvbiBsaWJyYXJ5CiAuU0ggU1lOT1BTSVMKQEAgLTEzMyw3ICsxMzMsNyBAQAogU2VuZCBxdWVzdGlvbnMgYW5kL29yIGNvbW1lbnRzIHRvIHpsaWJAZ3ppcC5vcmcsCiBvciAoZm9yIHRoZSBXaW5kb3dzIERMTCB2ZXJzaW9uKSB0byBHaWxsZXMgVm9sbGFudCAoaW5mb0B3aW5pbWFnZS5jb20pLgogLlNIIEFVVEhPUlMKLVZlcnNpb24gMS4yLjAuNworVmVyc2lvbiAxLjIuMC44CiBDb3B5cmlnaHQgKEMpIDE5OTUtMjAwMyBKZWFuLWxvdXAgR2FpbGx5IChqbG91cEBnemlwLm9yZykKIGFuZCBNYXJrIEFkbGVyIChtYWRsZXJAYWx1bW5pLmNhbHRlY2guZWR1KS4KIC5MUApkaWZmIC0tZ2l0IGEvemxpYi5oIGIvemxpYi5oCmluZGV4IGMzOGI4M2MuLjZkYzU1Y2QgMTAwNjQ0Ci0tLSBhL3psaWIuaAorKysgYi96bGliLmgKQEAgLTEsNSArMSw1IEBACiAvKiB6bGliLmggLS0gaW50ZXJmYWNlIG9mIHRoZSAnemxpYicgZ2VuZXJhbCBwdXJwb3NlIGNvbXByZXNzaW9uIGxpYnJhcnkKLSAgdmVyc2lvbiAxLjIuMC43LCBTZXB0ZW1iZXIgMjFzdCwgMjAwMworICB2ZXJzaW9uIDEuMi4wLjgsIE5vdmVtYmVyIDR0aCwgMjAwMwogCiAgIENvcHlyaWdodCAoQykgMTk5NS0yMDAzIEplYW4tbG91cCBHYWlsbHkgYW5kIE1hcmsgQWRsZXIKIApAQCAtMzcsOCArMzcsOCBAQAogZXh0ZXJuICJDIiB7CiAjZW5kaWYKIAotI2RlZmluZSBaTElCX1ZFUlNJT04gIjEuMi4wLjciCi0jZGVmaW5lIFpMSUJfVkVSTlVNIDB4MTIwNworI2RlZmluZSBaTElCX1ZFUlNJT04gIjEuMi4wLjgiCisjZGVmaW5lIFpMSUJfVkVSTlVNIDB4MTIwOAogCiAvKgogICAgICBUaGUgJ3psaWInIGNvbXByZXNzaW9uIGxpYnJhcnkgcHJvdmlkZXMgaW4tbWVtb3J5IGNvbXByZXNzaW9uIGFuZApAQCAtMTc0LDcgKzE3NCw3IEBACiAjZGVmaW5lIFpfQklOQVJZICAgMAogI2RlZmluZSBaX0FTQ0lJICAgIDEKICNkZWZpbmUgWl9VTktOT1dOICAyCi0vKiBQb3NzaWJsZSB2YWx1ZXMgb2YgdGhlIGRhdGFfdHlwZSBmaWVsZCAqLworLyogUG9zc2libGUgdmFsdWVzIG9mIHRoZSBkYXRhX3R5cGUgZmllbGQgKHRob3VnaCBzZWUgaW5mbGF0ZSgpKSAqLwogCiAjZGVmaW5lIFpfREVGTEFURUQgICA4CiAvKiBUaGUgZGVmbGF0ZSBjb21wcmVzc2lvbiBtZXRob2QgKHRoZSBvbmx5IG9uZSBzdXBwb3J0ZWQgaW4gdGhpcyB2ZXJzaW9uKSAqLwpAQCAtMzczLDEyICszNzMsMTUgQEAKIAogICAgIFRoZSBaX0JMT0NLIG9wdGlvbiBhc3Npc3RzIGluIGFwcGVuZGluZyB0byBvciBjb21iaW5pbmcgZGVmbGF0ZSBzdHJlYW1zLgogICBBbHNvIHRvIGFzc2lzdCBpbiB0aGlzLCBvbiByZXR1cm4gaW5mbGF0ZSgpIHdpbGwgc2V0IHN0cm0tPmRhdGFfdHlwZSB0byB0aGUKLSAgbnVtYmVyIG9mIHVudXNlZCBiaXRzIGluIHRoZSBsYXN0IGJ5dGUgdGFrZW4gZnJvbSBzdHJtLT5uZXh0X2luLCBwbHVzIGVpZ2h0CisgIG51bWJlciBvZiB1bnVzZWQgYml0cyBpbiB0aGUgbGFzdCBieXRlIHRha2VuIGZyb20gc3RybS0+bmV4dF9pbiwgcGx1cyA2NAogICBpZiBpbmZsYXRlKCkgaXMgY3VycmVudGx5IGRlY29kaW5nIHRoZSBsYXN0IGJsb2NrIGluIHRoZSBkZWZsYXRlIHN0cmVhbSwKLSAgcGx1cyAxNiBpZiBpbmZsYXRlKCkgcmV0dXJuZWQgaW1tZWRpYXRlbHkgYWZ0ZXIgZGVjb2RpbmcgYW4gZW5kLW9mLWJsb2NrCi0gIGNvZGUgb3IgZGVjb2RpbmcgdGhlIGNvbXBsZXRlIGhlYWRlciB1cCBqdXN0IGJlZm9yZSB0aGUgZmlyc3QgYnl0ZSBvZiB0aGUKKyAgcGx1cyAxMjggaWYgaW5mbGF0ZSgpIHJldHVybmVkIGltbWVkaWF0ZWx5IGFmdGVyIGRlY29kaW5nIGFuIGVuZC1vZi1ibG9jaworICBjb2RlIG9yIGRlY29kaW5nIHRoZSBjb21wbGV0ZSBoZWFkZXIgdXAgdG8ganVzdCBiZWZvcmUgdGhlIGZpcnN0IGJ5dGUgb2YgdGhlCiAgIGRlZmxhdGUgc3RyZWFtLiBUaGUgZW5kLW9mLWJsb2NrIHdpbGwgbm90IGJlIGluZGljYXRlZCB1bnRpbCBhbGwgb2YgdGhlCi0gIHVuY29tcHJlc3NlZCBkYXRhIGZyb20gdGhhdCBibG9jayBoYXMgYmVlbiB3cml0dGVuIHRvIHN0cm0tPm5leHRfb3V0LgorICB1bmNvbXByZXNzZWQgZGF0YSBmcm9tIHRoYXQgYmxvY2sgaGFzIGJlZW4gd3JpdHRlbiB0byBzdHJtLT5uZXh0X291dC4gIFRoZQorICBudW1iZXIgb2YgdW51c2VkIGJpdHMgbWF5IGluIGdlbmVyYWwgYmUgZ3JlYXRlciB0aGFuIHNldmVuLCBleGNlcHQgd2hlbgorICBiaXQgNyBvZiBkYXRhX3R5cGUgaXMgc2V0LCBpbiB3aGljaCBjYXNlIHRoZSBudW1iZXIgb2YgdW51c2VkIGJpdHMgd2lsbCBiZQorICBsZXNzIHRoYW4gZWlnaHQuCiAKICAgICBpbmZsYXRlKCkgc2hvdWxkIG5vcm1hbGx5IGJlIGNhbGxlZCB1bnRpbCBpdCByZXR1cm5zIFpfU1RSRUFNX0VORCBvciBhbgogICBlcnJvci4gSG93ZXZlciBpZiBhbGwgZGVjb21wcmVzc2lvbiBpcyB0byBiZSBwZXJmb3JtZWQgaW4gYSBzaW5nbGUgc3RlcApAQCAtNTk4LDYgKzYwMSwyMiBAQAogICAgZm9yIGRlZmxhdGlvbiBpbiBhIHNpbmdsZSBwYXNzLCBhbmQgc28gd291bGQgYmUgY2FsbGVkIGJlZm9yZSBkZWZsYXRlKCkuCiAqLwogCitaRVhURVJOIGludCBaRVhQT1JUIGRlZmxhdGVQcmltZSBPRigoel9zdHJlYW1wIHN0cm0sCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IGJpdHMsCisgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgaW50IHZhbHVlKSk7CisvKgorICAgICBkZWZsYXRlUHJpbWUoKSBpbnNlcnRzIGJpdHMgaW4gdGhlIGRlZmxhdGUgb3V0cHV0IHN0cmVhbS4gIFRoZSBpbnRlbnQKKyAgaXMgdGhhdCB0aGlzIGZ1bmN0aW9uIGlzIHVzZWQgdG8gc3RhcnQgb2ZmIHRoZSBkZWZsYXRlIG91dHB1dCB3aXRoIHRoZQorICBiaXRzIGxlZnRvdmVyIGZyb20gYSBwcmV2aW91cyBkZWZsYXRlIHN0cmVhbSB3aGVuIGFwcGVuZGluZyB0byBpdC4gIEFzIHN1Y2gsCisgIHRoaXMgZnVuY3Rpb24gY2FuIG9ubHkgYmUgdXNlZCBmb3IgcmF3IGRlZmxhdGUsIGFuZCBtdXN0IGJlIHVzZWQgYmVmb3JlIHRoZQorICBmaXJzdCBkZWZsYXRlKCkgY2FsbCBhZnRlciBhIGRlZmxhdGVJbml0MigpIG9yIGRlZmxhdGVSZXNldCgpLiAgYml0cyBtdXN0IGJlCisgIGxlc3MgdGhhbiBvciBlcXVhbCB0byAxNiwgYW5kIHRoYXQgbWFueSBvZiB0aGUgbGVhc3Qgc2lnbmlmaWNhbnQgYml0cyBvZgorICB2YWx1ZSB3aWxsIGJlIGluc2VydGVkIGluIHRoZSBvdXRwdXQuCisKKyAgICAgIGRlZmxhdGVQcmltZSByZXR1cm5zIFpfT0sgaWYgc3VjY2Vzcywgb3IgWl9TVFJFQU1fRVJST1IgaWYgdGhlIHNvdXJjZQorICAgc3RyZWFtIHN0YXRlIHdhcyBpbmNvbnNpc3RlbnQuCisqLworCiAvKgogWkVYVEVSTiBpbnQgWkVYUE9SVCBpbmZsYXRlSW5pdDIgT0YoKHpfc3RyZWFtcCBzdHJtLAogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGludCAgd2luZG93Qml0cykpOwo=