# Name: smd_crunchers v0.10 # Type: Library plugin # Library of compression algorithms # Author: Stef Dawson / Devin Doucette / Alexandre Tedeschi # URL: http://stefdawson.com/ # Recommended load order: 5 # ..................................................................... # This is a plugin for Textpattern - http://textpattern.com/ # To install: textpattern > admin > plugins # Paste the following text into the 'Install plugin' box: # ..................................................................... YToxMTp7czo0OiJuYW1lIjtzOjEzOiJzbWRfY3J1bmNoZXJzIjtzOjY6ImF1dGhvciI7czo0 OToiU3RlZiBEYXdzb24gLyBEZXZpbiBEb3VjZXR0ZSAvIEFsZXhhbmRyZSBUZWRlc2NoaSI7 czoxMDoiYXV0aG9yX3VyaSI7czoyMjoiaHR0cDovL3N0ZWZkYXdzb24uY29tLyI7czo3OiJ2 ZXJzaW9uIjtzOjQ6IjAuMTAiO3M6MTE6ImRlc2NyaXB0aW9uIjtzOjMzOiJMaWJyYXJ5IG9m IGNvbXByZXNzaW9uIGFsZ29yaXRobXMiO3M6NDoiY29kZSI7czo1MjQ3OToiLyoqDQogKiBz bWRfY3J1bmNoZXJzDQogKg0KICogQSBUZXh0cGF0dGVybiBDTVMgcGx1Z2luIGxpYnJhcnkg Zm9yIHN0YW5kYXJkIGNvbXByZXNzaW9uL2RlY29tcHJlc3Npb24gYWxnb3JpdGhtcw0KICog IC0+IHppcC91bnppcA0KICogIC0+IHRhcg0KICogIC0+IGd6aXANCiAqICAtPiBiemlwMg0K ICoNCiAqIEBhdXRob3IgRGV2aW4gRG91Y2V0dGUNCiAqIEBhdXRob3IgQWxleGFuZHJlIFRl ZGVzY2hpDQogKiBAYXV0aG9yIFN0ZWYgRGF3c29uDQogKiBAbGluayAgIGh0dHA6Ly9zaGF3 LmNhLw0KICogQGxpbmsgICBodHRwOi8vc3RlZmRhd3Nvbi5jb20vDQogKi8NCg0KLy8gLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQpmdW5jdGlvbiBzbWRfY3J1bmNoX2NhcGFiaWxpdGll cygkdHlwZT0nY29tcHJlc3MnKSB7DQoJJHNtZF9jcnVuY2hlcnMgPSBhcnJheSgpOw0KDQoJ Ly8gQmktZGlyZWN0aW9uYWwgY2xhc3MNCglpZiAoY2xhc3NfZXhpc3RzKCdzbWRfY3J1bmNo X3Rhcl9maWxlJykpIHsNCgkJJHNtZF9jcnVuY2hlcnNbXSA9ICd0YXInOw0KCX0NCg0KCWlm ICgkdHlwZSA9PSAnY29tcHJlc3MnKSB7DQoJCS8vIEF2YWlsYWJsZSBjb21wcmVzc29ycw0K CQlpZiAoZnVuY3Rpb25fZXhpc3RzKCdnemNvbXByZXNzJykgJiYgZnVuY3Rpb25fZXhpc3Rz KCdnem9wZW4nKSAmJiBmdW5jdGlvbl9leGlzdHMoJ2d6d3JpdGUnKSkgew0KCQkJaWYgKGNs YXNzX2V4aXN0cygnc21kX2NydW5jaF9nemlwX2ZpbGUnKSkgew0KCQkJCSRzbWRfY3J1bmNo ZXJzW10gPSAnZ3ppcCc7DQoJCQl9DQoJCQlpZiAoY2xhc3NfZXhpc3RzKCdzbWRfY3J1bmNo X3ppcF9maWxlJykpIHsNCgkJCQkkc21kX2NydW5jaGVyc1tdID0gJ3ppcCc7DQoJCQl9DQoJ CX0NCgkJaWYgKGZ1bmN0aW9uX2V4aXN0cygnYnpjb21wcmVzcycpICYmIGZ1bmN0aW9uX2V4 aXN0cygnYnpvcGVuJykgJiYgZnVuY3Rpb25fZXhpc3RzKCdiendyaXRlJykpIHsNCgkJCWlm IChjbGFzc19leGlzdHMoJ3NtZF9jcnVuY2hfYnppcF9maWxlJykpIHsNCgkJCQkkc21kX2Ny dW5jaGVyc1tdID0gJ2J6aXAyJzsNCgkJCX0NCgkJfQ0KCX0gZWxzZSB7DQoJCS8vIEF2YWls YWJsZSBkZWNvbXByZXNzb3JzDQoJCWlmIChmdW5jdGlvbl9leGlzdHMoJ2d6aW5mbGF0ZScp KSB7DQoJCQlpZiAoY2xhc3NfZXhpc3RzKCdzbWRfY3J1bmNoX2d6aXBfZmlsZScpKSB7DQoJ CQkJJHNtZF9jcnVuY2hlcnNbXSA9ICdnemlwJzsNCgkJCX0NCgkJCWlmIChjbGFzc19leGlz dHMoJ3NtZF9jcnVuY2hfZFVuemlwMicpKSB7DQoJCQkJJHNtZF9jcnVuY2hlcnNbXSA9ICd6 aXAnOw0KCQkJfQ0KCQl9DQoJCWlmIChmdW5jdGlvbl9leGlzdHMoJ2J6ZGVjb21wcmVzcycp KSB7DQoJCQlpZiAoY2xhc3NfZXhpc3RzKCdzbWRfY3J1bmNoX2J6aXBfZmlsZScpKSB7DQoJ CQkJJHNtZF9jcnVuY2hlcnNbXSA9ICdiemlwMic7DQoJCQl9DQoJCX0NCgl9DQoJcmV0dXJu ICRzbWRfY3J1bmNoZXJzOw0KfQ0KDQovKi0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tDQogfCBUQVIvR1pJUC9CWklQMi9aSVAgQVJDSElWRSBD TEFTU0VTIDIuMQ0KIHwgQnkgRGV2aW4gRG91Y2V0dGUNCiB8IENvcHlyaWdodCAoYykgMjAw NSBEZXZpbiBEb3VjZXR0ZQ0KIHwgRW1haWw6IGRhcmtzbm9vcHlAc2hhdy5jYQ0KICstLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLQ0KIHwgRW1h aWwgYnVncy9zdWdnZXN0aW9ucyB0byBkYXJrc25vb3B5QHNoYXcuY2ENCiArLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0NCiB8IFRoaXMgc2Ny aXB0IGhhcyBiZWVuIGNyZWF0ZWQgYW5kIHJlbGVhc2VkIHVuZGVyDQogfCB0aGUgR05VIEdQ TCBhbmQgaXMgZnJlZSB0byB1c2UgYW5kIHJlZGlzdHJpYnV0ZQ0KIHwgb25seSBpZiB0aGlz IGNvcHlyaWdodCBzdGF0ZW1lbnQgaXMgbm90IHJlbW92ZWQNCiArLS0tLS0tLS0tLS0tLS0t LS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0qLw0KDQpjbGFzcyBzbWRfY3J1 bmNoX2FyY2hpdmUNCnsNCglmdW5jdGlvbiBzbWRfY3J1bmNoX2FyY2hpdmUoJG5hbWUpDQoJ ew0KCQkkdGhpcy0+b3B0aW9ucyA9IGFycmF5ICgNCgkJCSdiYXNlZGlyJyA9PiAiLiIsDQoJ CQknbmFtZScgPT4gJG5hbWUsDQoJCQkncHJlcGVuZCcgPT4gIiIsDQoJCQknaW5tZW1vcnkn ID0+IDAsDQoJCQknb3ZlcndyaXRlJyA9PiAwLA0KCQkJJ3JlY3Vyc2UnID0+IDEsDQoJCQkn c3RvcmVwYXRocycgPT4gMSwNCgkJCSdmb2xsb3dsaW5rcycgPT4gMCwNCgkJCSdsZXZlbCcg PT4gMywNCgkJCSdtZXRob2QnID0+IDEsDQoJCQknc2Z4JyA9PiAiIiwNCgkJCSd0eXBlJyA9 PiAiIiwNCgkJCSdjb21tZW50JyA9PiAiIg0KCQkpOw0KCQkkdGhpcy0+ZmlsZXMgPSBhcnJh eSAoKTsNCgkJJHRoaXMtPmV4Y2x1ZGUgPSBhcnJheSAoKTsNCgkJJHRoaXMtPnN0b3Jlb25s eSA9IGFycmF5ICgpOw0KCQkkdGhpcy0+ZXJyb3IgPSBhcnJheSAoKTsNCgl9DQoNCglmdW5j dGlvbiBzZXRfb3B0aW9ucygkb3B0aW9ucykNCgl7DQoJCWZvcmVhY2ggKCRvcHRpb25zIGFz ICRrZXkgPT4gJHZhbHVlKQ0KCQkJJHRoaXMtPm9wdGlvbnNbJGtleV0gPSAkdmFsdWU7DQoJ CWlmICghZW1wdHkgKCR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10pKQ0KCQl7DQoJCQkkdGhp cy0+b3B0aW9uc1snYmFzZWRpciddID0gc3RyX3JlcGxhY2UoIlxcIiwgIi8iLCAkdGhpcy0+ b3B0aW9uc1snYmFzZWRpciddKTsNCgkJCSR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10gPSBw cmVnX3JlcGxhY2UoIi9cLysvIiwgIi8iLCAkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddKTsN CgkJCSR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10gPSBwcmVnX3JlcGxhY2UoIi9cLyQvIiwg IiIsICR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10pOw0KCQl9DQoJCWlmICghZW1wdHkgKCR0 aGlzLT5vcHRpb25zWyduYW1lJ10pKQ0KCQl7DQoJCQkkdGhpcy0+b3B0aW9uc1snbmFtZSdd ID0gc3RyX3JlcGxhY2UoIlxcIiwgIi8iLCAkdGhpcy0+b3B0aW9uc1snbmFtZSddKTsNCgkJ CSR0aGlzLT5vcHRpb25zWyduYW1lJ10gPSBwcmVnX3JlcGxhY2UoIi9cLysvIiwgIi8iLCAk dGhpcy0+b3B0aW9uc1snbmFtZSddKTsNCgkJfQ0KCQlpZiAoIWVtcHR5ICgkdGhpcy0+b3B0 aW9uc1sncHJlcGVuZCddKSkNCgkJew0KCQkJJHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSA9 IHN0cl9yZXBsYWNlKCJcXCIsICIvIiwgJHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSk7DQoJ CQkkdGhpcy0+b3B0aW9uc1sncHJlcGVuZCddID0gcHJlZ19yZXBsYWNlKCIvXihcLipcLysp Ky8iLCAiIiwgJHRoaXMtPm9wdGlvbnNbJ3ByZXBlbmQnXSk7DQoJCQkkdGhpcy0+b3B0aW9u c1sncHJlcGVuZCddID0gcHJlZ19yZXBsYWNlKCIvXC8rLyIsICIvIiwgJHRoaXMtPm9wdGlv bnNbJ3ByZXBlbmQnXSk7DQoJCQkkdGhpcy0+b3B0aW9uc1sncHJlcGVuZCddID0gcHJlZ19y ZXBsYWNlKCIvXC8kLyIsICIiLCAkdGhpcy0+b3B0aW9uc1sncHJlcGVuZCddKSAuICIvIjsN CgkJfQ0KCX0NCg0KCWZ1bmN0aW9uIGNyZWF0ZV9hcmNoaXZlKCkNCgl7DQoJCSR0aGlzLT5t YWtlX2xpc3QoKTsNCg0KCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5J10gPT0gMCkN CgkJew0KCQkJJHB3ZCA9IGdldGN3ZCgpOw0KCQkJY2hkaXIoJHRoaXMtPm9wdGlvbnNbJ2Jh c2VkaXInXSk7DQoJCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ292ZXJ3cml0ZSddID09IDAgJiYg ZmlsZV9leGlzdHMoJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSAuICgkdGhpcy0+b3B0aW9uc1sn dHlwZSddID09ICJnemlwIiB8fCAkdGhpcy0+b3B0aW9uc1sndHlwZSddID09ICJiemlwIiA/ ICIudG1wIiA6ICIiKSkpDQoJCQl7DQoJCQkJJHRoaXMtPmVycm9yW10gPSAiRmlsZSB7JHRo aXMtPm9wdGlvbnNbJ25hbWUnXX0gYWxyZWFkeSBleGlzdHMuIjsNCgkJCQljaGRpcigkcHdk KTsNCgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJCWVsc2UgaWYgKCR0aGlzLT5hcmNoaXZlID0g QGZvcGVuKCR0aGlzLT5vcHRpb25zWyduYW1lJ10gLiAoJHRoaXMtPm9wdGlvbnNbJ3R5cGUn XSA9PSAiZ3ppcCIgfHwgJHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSA9PSAiYnppcCIgPyAiLnRt cCIgOiAiIiksICJ3YisiKSkNCgkJCQljaGRpcigkcHdkKTsNCgkJCWVsc2UNCgkJCXsNCgkJ CQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3Qgb3BlbiB7JHRoaXMtPm9wdGlvbnNbJ25h bWUnXX0gZm9yIHdyaXRpbmcuIjsNCgkJCQljaGRpcigkcHdkKTsNCgkJCQlyZXR1cm4gMDsN CgkJCX0NCgkJfQ0KCQllbHNlDQoJCQkkdGhpcy0+YXJjaGl2ZSA9ICIiOw0KDQoJCXN3aXRj aCAoJHRoaXMtPm9wdGlvbnNbJ3R5cGUnXSkNCgkJew0KCQljYXNlICJ6aXAiOg0KCQkJaWYg KCEkdGhpcy0+Y3JlYXRlX3ppcCgpKQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNv dWxkIG5vdCBjcmVhdGUgemlwIGZpbGUuIjsNCgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJCWJy ZWFrOw0KCQljYXNlICJiemlwIjoNCgkJCWlmICghJHRoaXMtPmNyZWF0ZV90YXIoKSkNCgkJ CXsNCgkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3VsZCBub3QgY3JlYXRlIHRhciBmaWxlLiI7 DQoJCQkJcmV0dXJuIDA7DQoJCQl9DQoJCQlpZiAoISR0aGlzLT5jcmVhdGVfYnppcCgpKQ0K CQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBjcmVhdGUgYnppcDIgZmls ZS4iOw0KCQkJCXJldHVybiAwOw0KCQkJfQ0KCQkJYnJlYWs7DQoJCWNhc2UgImd6aXAiOg0K CQkJaWYgKCEkdGhpcy0+Y3JlYXRlX3RhcigpKQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltd ID0gIkNvdWxkIG5vdCBjcmVhdGUgdGFyIGZpbGUuIjsNCgkJCQlyZXR1cm4gMDsNCgkJCX0N CgkJCWlmICghJHRoaXMtPmNyZWF0ZV9nemlwKCkpDQoJCQl7DQoJCQkJJHRoaXMtPmVycm9y W10gPSAiQ291bGQgbm90IGNyZWF0ZSBnemlwIGZpbGUuIjsNCgkJCQlyZXR1cm4gMDsNCgkJ CX0NCgkJCWJyZWFrOw0KCQljYXNlICJ0YXIiOg0KCQkJaWYgKCEkdGhpcy0+Y3JlYXRlX3Rh cigpKQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBjcmVhdGUgdGFy IGZpbGUuIjsNCgkJCQlyZXR1cm4gMDsNCgkJCX0NCgkJfQ0KDQoJCWlmICgkdGhpcy0+b3B0 aW9uc1snaW5tZW1vcnknXSA9PSAwKQ0KCQl7DQoJCQlmY2xvc2UoJHRoaXMtPmFyY2hpdmUp Ow0KCQkJaWYgKCR0aGlzLT5vcHRpb25zWyd0eXBlJ10gPT0gImd6aXAiIHx8ICR0aGlzLT5v cHRpb25zWyd0eXBlJ10gPT0gImJ6aXAiKQ0KCQkJCXVubGluaygkdGhpcy0+b3B0aW9uc1sn YmFzZWRpciddIC4gIi8iIC4gJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSAuICIudG1wIik7DQoJ CX0NCgl9DQoNCglmdW5jdGlvbiBhZGRfZGF0YSgkZGF0YSkNCgl7DQoJCWlmICgkdGhpcy0+ b3B0aW9uc1snaW5tZW1vcnknXSA9PSAwKQ0KCQkJZndyaXRlKCR0aGlzLT5hcmNoaXZlLCAk ZGF0YSk7DQoJCWVsc2UNCgkJCSR0aGlzLT5hcmNoaXZlIC49ICRkYXRhOw0KCX0NCg0KCWZ1 bmN0aW9uIG1ha2VfbGlzdCgpDQoJew0KCQlpZiAoIWVtcHR5ICgkdGhpcy0+ZXhjbHVkZSkp DQoJCQlmb3JlYWNoICgkdGhpcy0+ZmlsZXMgYXMgJGtleSA9PiAkdmFsdWUpDQoJCQkJZm9y ZWFjaCAoJHRoaXMtPmV4Y2x1ZGUgYXMgJGN1cnJlbnQpDQoJCQkJCWlmICgkdmFsdWVbJ25h bWUnXSA9PSAkY3VycmVudFsnbmFtZSddKQ0KCQkJCQkJdW5zZXQgKCR0aGlzLT5maWxlc1sk a2V5XSk7DQoJCWlmICghZW1wdHkgKCR0aGlzLT5zdG9yZW9ubHkpKQ0KCQkJZm9yZWFjaCAo JHRoaXMtPmZpbGVzIGFzICRrZXkgPT4gJHZhbHVlKQ0KCQkJCWZvcmVhY2ggKCR0aGlzLT5z dG9yZW9ubHkgYXMgJGN1cnJlbnQpDQoJCQkJCWlmICgkdmFsdWVbJ25hbWUnXSA9PSAkY3Vy cmVudFsnbmFtZSddKQ0KCQkJCQkJJHRoaXMtPmZpbGVzWyRrZXldWydtZXRob2QnXSA9IDA7 DQoJCXVuc2V0ICgkdGhpcy0+ZXhjbHVkZSwgJHRoaXMtPnN0b3Jlb25seSk7DQoJfQ0KDQoJ ZnVuY3Rpb24gYWRkX2ZpbGVzKCRsaXN0KQ0KCXsNCgkJJHRlbXAgPSAkdGhpcy0+bGlzdF9m aWxlcygkbGlzdCk7DQoJCWZvcmVhY2ggKCR0ZW1wIGFzICRjdXJyZW50KQ0KCQkJJHRoaXMt PmZpbGVzW10gPSAkY3VycmVudDsNCgl9DQoNCglmdW5jdGlvbiBleGNsdWRlX2ZpbGVzKCRs aXN0KQ0KCXsNCgkJJHRlbXAgPSAkdGhpcy0+bGlzdF9maWxlcygkbGlzdCk7DQoJCWZvcmVh Y2ggKCR0ZW1wIGFzICRjdXJyZW50KQ0KCQkJJHRoaXMtPmV4Y2x1ZGVbXSA9ICRjdXJyZW50 Ow0KCX0NCg0KCWZ1bmN0aW9uIHN0b3JlX2ZpbGVzKCRsaXN0KQ0KCXsNCgkJJHRlbXAgPSAk dGhpcy0+bGlzdF9maWxlcygkbGlzdCk7DQoJCWZvcmVhY2ggKCR0ZW1wIGFzICRjdXJyZW50 KQ0KCQkJJHRoaXMtPnN0b3Jlb25seVtdID0gJGN1cnJlbnQ7DQoJfQ0KDQoJZnVuY3Rpb24g bGlzdF9maWxlcygkbGlzdCkNCgl7DQoJCWlmICghaXNfYXJyYXkgKCRsaXN0KSkNCgkJew0K CQkJJHRlbXAgPSAkbGlzdDsNCgkJCSRsaXN0ID0gYXJyYXkgKCR0ZW1wKTsNCgkJCXVuc2V0 ICgkdGVtcCk7DQoJCX0NCg0KCQkkZmlsZXMgPSBhcnJheSAoKTsNCg0KCQkkcHdkID0gZ2V0 Y3dkKCk7DQoJCWNoZGlyKCR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10pOw0KDQoJCWZvcmVh Y2ggKCRsaXN0IGFzICRjdXJyZW50KQ0KCQl7DQoJCQkkY3VycmVudCA9IHN0cl9yZXBsYWNl KCJcXCIsICIvIiwgJGN1cnJlbnQpOw0KCQkJJGN1cnJlbnQgPSBwcmVnX3JlcGxhY2UoIi9c LysvIiwgIi8iLCAkY3VycmVudCk7DQoJCQkkY3VycmVudCA9IHByZWdfcmVwbGFjZSgiL1wv JC8iLCAiIiwgJGN1cnJlbnQpOw0KCQkJaWYgKHN0cnN0cigkY3VycmVudCwgIioiKSkNCgkJ CXsNCgkJCQkkcmVnZXggPSBwcmVnX3JlcGxhY2UoIi8oW1xcXF5cJFwuXFtcXVx8XChcKVw/ XCtce1x9XC9dKS8iLCAiXFxcXFxcMSIsICRjdXJyZW50KTsNCgkJCQkkcmVnZXggPSBzdHJf cmVwbGFjZSgiKiIsICIuKiIsICRyZWdleCk7DQoJCQkJJGRpciA9IHN0cnN0cigkY3VycmVu dCwgIi8iKSA/IHN1YnN0cigkY3VycmVudCwgMCwgc3RycnBvcygkY3VycmVudCwgIi8iKSkg OiAiLiI7DQoJCQkJJHRlbXAgPSAkdGhpcy0+cGFyc2VfZGlyKCRkaXIpOw0KCQkJCWZvcmVh Y2ggKCR0ZW1wIGFzICRjdXJyZW50MikNCgkJCQkJaWYgKHByZWdfbWF0Y2goIi9eeyRyZWdl eH0kL2kiLCAkY3VycmVudDJbJ25hbWUnXSkpDQoJCQkJCQkkZmlsZXNbXSA9ICRjdXJyZW50 MjsNCgkJCQl1bnNldCAoJHJlZ2V4LCAkZGlyLCAkdGVtcCwgJGN1cnJlbnQpOw0KCQkJfQ0K CQkJZWxzZSBpZiAoQGlzX2RpcigkY3VycmVudCkpDQoJCQl7DQoJCQkJJHRlbXAgPSAkdGhp cy0+cGFyc2VfZGlyKCRjdXJyZW50KTsNCgkJCQlmb3JlYWNoICgkdGVtcCBhcyAkZmlsZSkN CgkJCQkJJGZpbGVzW10gPSAkZmlsZTsNCgkJCQl1bnNldCAoJHRlbXAsICRmaWxlKTsNCgkJ CX0NCgkJCWVsc2UgaWYgKEBmaWxlX2V4aXN0cygkY3VycmVudCkpDQoJCQkJJGZpbGVzW10g PSBhcnJheSAoJ25hbWUnID0+ICRjdXJyZW50LCAnbmFtZTInID0+ICR0aGlzLT5vcHRpb25z WydwcmVwZW5kJ10gLg0KCQkJCQlwcmVnX3JlcGxhY2UoIi8oXC4rXC8rKSsvIiwgIiIsICgk dGhpcy0+b3B0aW9uc1snc3RvcmVwYXRocyddID09IDAgJiYgc3Ryc3RyKCRjdXJyZW50LCAi LyIpKSA/DQoJCQkJCXN1YnN0cigkY3VycmVudCwgc3RycnBvcygkY3VycmVudCwgIi8iKSAr IDEpIDogJGN1cnJlbnQpLA0KCQkJCQkndHlwZScgPT4gQGlzX2xpbmsoJGN1cnJlbnQpICYm ICR0aGlzLT5vcHRpb25zWydmb2xsb3dsaW5rcyddID09IDAgPyAyIDogMCwNCgkJCQkJJ2V4 dCcgPT4gc3Vic3RyKCRjdXJyZW50LCBzdHJycG9zKCRjdXJyZW50LCAiLiIpKSwgJ3N0YXQn ID0+IHN0YXQoJGN1cnJlbnQpKTsNCgkJfQ0KDQoJCWNoZGlyKCRwd2QpOw0KDQoJCXVuc2V0 ICgkY3VycmVudCwgJHB3ZCk7DQoNCgkJdXNvcnQoJGZpbGVzLCBhcnJheSAoInNtZF9jcnVu Y2hfYXJjaGl2ZSIsICJzb3J0X2ZpbGVzIikpOw0KDQoJCXJldHVybiAkZmlsZXM7DQoJfQ0K DQoJZnVuY3Rpb24gcGFyc2VfZGlyKCRkaXJuYW1lKQ0KCXsNCgkJaWYgKCR0aGlzLT5vcHRp b25zWydzdG9yZXBhdGhzJ10gPT0gMSAmJiAhcHJlZ19tYXRjaCgiL14oXC4rXC8qKSskLyIs ICRkaXJuYW1lKSkNCgkJCSRmaWxlcyA9IGFycmF5IChhcnJheSAoJ25hbWUnID0+ICRkaXJu YW1lLCAnbmFtZTInID0+ICR0aGlzLT5vcHRpb25zWydwcmVwZW5kJ10gLg0KCQkJCXByZWdf cmVwbGFjZSgiLyhcLitcLyspKy8iLCAiIiwgKCR0aGlzLT5vcHRpb25zWydzdG9yZXBhdGhz J10gPT0gMCAmJiBzdHJzdHIoJGRpcm5hbWUsICIvIikpID8NCgkJCQlzdWJzdHIoJGRpcm5h bWUsIHN0cnJwb3MoJGRpcm5hbWUsICIvIikgKyAxKSA6ICRkaXJuYW1lKSwgJ3R5cGUnID0+ IDUsICdzdGF0JyA9PiBzdGF0KCRkaXJuYW1lKSkpOw0KCQllbHNlDQoJCQkkZmlsZXMgPSBh cnJheSAoKTsNCgkJJGRpciA9IEBvcGVuZGlyKCRkaXJuYW1lKTsNCg0KCQl3aGlsZSAoJGZp bGUgPSBAcmVhZGRpcigkZGlyKSkNCgkJew0KCQkJJGZ1bGxuYW1lID0gJGRpcm5hbWUgLiAi LyIgLiAkZmlsZTsNCgkJCWlmICgkZmlsZSA9PSAiLiIgfHwgJGZpbGUgPT0gIi4uIikNCgkJ CQljb250aW51ZTsNCgkJCWVsc2UgaWYgKEBpc19kaXIoJGZ1bGxuYW1lKSkNCgkJCXsNCgkJ CQlpZiAoZW1wdHkgKCR0aGlzLT5vcHRpb25zWydyZWN1cnNlJ10pKQ0KCQkJCQljb250aW51 ZTsNCgkJCQkkdGVtcCA9ICR0aGlzLT5wYXJzZV9kaXIoJGZ1bGxuYW1lKTsNCgkJCQlmb3Jl YWNoICgkdGVtcCBhcyAkZmlsZTIpDQoJCQkJCSRmaWxlc1tdID0gJGZpbGUyOw0KCQkJfQ0K CQkJZWxzZSBpZiAoQGZpbGVfZXhpc3RzKCRmdWxsbmFtZSkpDQoJCQkJJGZpbGVzW10gPSBh cnJheSAoJ25hbWUnID0+ICRmdWxsbmFtZSwgJ25hbWUyJyA9PiAkdGhpcy0+b3B0aW9uc1sn cHJlcGVuZCddIC4NCgkJCQkJcHJlZ19yZXBsYWNlKCIvKFwuK1wvKykrLyIsICIiLCAoJHRo aXMtPm9wdGlvbnNbJ3N0b3JlcGF0aHMnXSA9PSAwICYmIHN0cnN0cigkZnVsbG5hbWUsICIv IikpID8NCgkJCQkJc3Vic3RyKCRmdWxsbmFtZSwgc3RycnBvcygkZnVsbG5hbWUsICIvIikg KyAxKSA6ICRmdWxsbmFtZSksDQoJCQkJCSd0eXBlJyA9PiBAaXNfbGluaygkZnVsbG5hbWUp ICYmICR0aGlzLT5vcHRpb25zWydmb2xsb3dsaW5rcyddID09IDAgPyAyIDogMCwNCgkJCQkJ J2V4dCcgPT4gc3Vic3RyKCRmaWxlLCBzdHJycG9zKCRmaWxlLCAiLiIpKSwgJ3N0YXQnID0+ IHN0YXQoJGZ1bGxuYW1lKSk7DQoJCX0NCg0KCQlAY2xvc2VkaXIoJGRpcik7DQoNCgkJcmV0 dXJuICRmaWxlczsNCgl9DQoNCglmdW5jdGlvbiBzb3J0X2ZpbGVzKCRhLCAkYikNCgl7DQoJ CWlmICgkYVsndHlwZSddICE9ICRiWyd0eXBlJ10pDQoJCQlpZiAoJGFbJ3R5cGUnXSA9PSA1 IHx8ICRiWyd0eXBlJ10gPT0gMikNCgkJCQlyZXR1cm4gLTE7DQoJCQllbHNlIGlmICgkYVsn dHlwZSddID09IDIgfHwgJGJbJ3R5cGUnXSA9PSA1KQ0KCQkJCXJldHVybiAxOw0KCQllbHNl IGlmICgkYVsndHlwZSddID09IDUpDQoJCQlyZXR1cm4gc3RyY21wKHN0cnRvbG93ZXIoJGFb J25hbWUnXSksIHN0cnRvbG93ZXIoJGJbJ25hbWUnXSkpOw0KCQllbHNlIGlmICgkYVsnZXh0 J10gIT0gJGJbJ2V4dCddKQ0KCQkJcmV0dXJuIHN0cmNtcCgkYVsnZXh0J10sICRiWydleHQn XSk7DQoJCWVsc2UgaWYgKCRhWydzdGF0J11bN10gIT0gJGJbJ3N0YXQnXVs3XSkNCgkJCXJl dHVybiAkYVsnc3RhdCddWzddID4gJGJbJ3N0YXQnXVs3XSA/IC0xIDogMTsNCgkJZWxzZQ0K CQkJcmV0dXJuIHN0cmNtcChzdHJ0b2xvd2VyKCRhWyduYW1lJ10pLCBzdHJ0b2xvd2VyKCRi WyduYW1lJ10pKTsNCgkJcmV0dXJuIDA7DQoJfQ0KDQoJZnVuY3Rpb24gZG93bmxvYWRfZmls ZSgpDQoJew0KCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5J10gPT0gMCkNCgkJew0K CQkJJHRoaXMtPmVycm9yW10gPSAiQ2FuIG9ubHkgdXNlIGRvd25sb2FkX2ZpbGUoKSBpZiBh cmNoaXZlIGlzIGluIG1lbW9yeS4gUmVkaXJlY3QgdG8gZmlsZSBvdGhlcndpc2UsIGl0IGlz IGZhc3Rlci4iOw0KCQkJcmV0dXJuOw0KCQl9DQoJCXN3aXRjaCAoJHRoaXMtPm9wdGlvbnNb J3R5cGUnXSkNCgkJew0KCQljYXNlICJ6aXAiOg0KCQkJaGVhZGVyKCJDb250ZW50LVR5cGU6 IGFwcGxpY2F0aW9uL3ppcCIpOw0KCQkJYnJlYWs7DQoJCWNhc2UgImJ6aXAiOg0KCQkJaGVh ZGVyKCJDb250ZW50LVR5cGU6IGFwcGxpY2F0aW9uL3gtYnppcDIiKTsNCgkJCWJyZWFrOw0K CQljYXNlICJnemlwIjoNCgkJCWhlYWRlcigiQ29udGVudC1UeXBlOiBhcHBsaWNhdGlvbi94 LWd6aXAiKTsNCgkJCWJyZWFrOw0KCQljYXNlICJ0YXIiOg0KCQkJaGVhZGVyKCJDb250ZW50 LVR5cGU6IGFwcGxpY2F0aW9uL3gtdGFyIik7DQoJCX0NCgkJJGhlYWRlciA9ICJDb250ZW50 LURpc3Bvc2l0aW9uOiBhdHRhY2htZW50OyBmaWxlbmFtZT1cIiI7DQoJCSRoZWFkZXIgLj0g c3Ryc3RyKCR0aGlzLT5vcHRpb25zWyduYW1lJ10sICIvIikgPyBzdWJzdHIoJHRoaXMtPm9w dGlvbnNbJ25hbWUnXSwgc3RycnBvcygkdGhpcy0+b3B0aW9uc1snbmFtZSddLCAiLyIpICsg MSkgOiAkdGhpcy0+b3B0aW9uc1snbmFtZSddOw0KCQkkaGVhZGVyIC49ICJcIiI7DQoJCWhl YWRlcigkaGVhZGVyKTsNCgkJaGVhZGVyKCJDb250ZW50LUxlbmd0aDogIiAuIHN0cmxlbigk dGhpcy0+YXJjaGl2ZSkpOw0KCQloZWFkZXIoIkNvbnRlbnQtVHJhbnNmZXItRW5jb2Rpbmc6 IGJpbmFyeSIpOw0KCQloZWFkZXIoIkNhY2hlLUNvbnRyb2w6IG5vLWNhY2hlLCBtdXN0LXJl dmFsaWRhdGUsIG1heC1hZ2U9NjAiKTsNCgkJaGVhZGVyKCJFeHBpcmVzOiBTYXQsIDAxIEph biAyMDAwIDEyOjAwOjAwIEdNVCIpOw0KCQlwcmludCgkdGhpcy0+YXJjaGl2ZSk7DQoJfQ0K fQ0KDQpjbGFzcyBzbWRfY3J1bmNoX3Rhcl9maWxlIGV4dGVuZHMgc21kX2NydW5jaF9hcmNo aXZlDQp7DQoJZnVuY3Rpb24gc21kX2NydW5jaF90YXJfZmlsZSgkbmFtZSkNCgl7DQoJCSR0 aGlzLT5zbWRfY3J1bmNoX2FyY2hpdmUoJG5hbWUpOw0KCQkkdGhpcy0+b3B0aW9uc1sndHlw ZSddID0gInRhciI7DQoJfQ0KDQoJZnVuY3Rpb24gY3JlYXRlX3RhcigpDQoJew0KCQkkcHdk ID0gZ2V0Y3dkKCk7DQoJCWNoZGlyKCR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10pOw0KDQoJ CWZvcmVhY2ggKCR0aGlzLT5maWxlcyBhcyAkY3VycmVudCkNCgkJew0KCQkJaWYgKCRjdXJy ZW50WyduYW1lJ10gPT0gJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSkNCgkJCQljb250aW51ZTsN CgkJCWlmIChzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pID4gOTkpDQoJCQl7DQoJCQkJJHBh dGggPSBzdWJzdHIoJGN1cnJlbnRbJ25hbWUyJ10sIDAsIHN0cnBvcygkY3VycmVudFsnbmFt ZTInXSwgIi8iLCBzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pIC0gMTAwKSArIDEpOw0KCQkJ CSRjdXJyZW50WyduYW1lMiddID0gc3Vic3RyKCRjdXJyZW50WyduYW1lMiddLCBzdHJsZW4o JHBhdGgpKTsNCgkJCQlpZiAoc3RybGVuKCRwYXRoKSA+IDE1NCB8fCBzdHJsZW4oJGN1cnJl bnRbJ25hbWUyJ10pID4gOTkpDQoJCQkJew0KCQkJCQkkdGhpcy0+ZXJyb3JbXSA9ICJDb3Vs ZCBub3QgYWRkIHskcGF0aH17JGN1cnJlbnRbJ25hbWUyJ119IHRvIGFyY2hpdmUgYmVjYXVz ZSB0aGUgZmlsZW5hbWUgaXMgdG9vIGxvbmcuIjsNCgkJCQkJY29udGludWU7DQoJCQkJfQ0K CQkJfQ0KCQkJJGJsb2NrID0gcGFjaygiYTEwMGE4YThhOGExMmExMmE4YTFhMTAwYTZhMmEz MmEzMmE4YThhMTU1YTEyIiwgJGN1cnJlbnRbJ25hbWUyJ10sIHNwcmludGYoIiUwN28iLA0K CQkJCSRjdXJyZW50WydzdGF0J11bMl0pLCBzcHJpbnRmKCIlMDdvIiwgJGN1cnJlbnRbJ3N0 YXQnXVs0XSksIHNwcmludGYoIiUwN28iLCAkY3VycmVudFsnc3RhdCddWzVdKSwNCgkJCQlz cHJpbnRmKCIlMDExbyIsICRjdXJyZW50Wyd0eXBlJ10gPT0gMiA/IDAgOiAkY3VycmVudFsn c3RhdCddWzddKSwgc3ByaW50ZigiJTAxMW8iLCAkY3VycmVudFsnc3RhdCddWzldKSwNCgkJ CQkiICAgICAgICAiLCAkY3VycmVudFsndHlwZSddLCAkY3VycmVudFsndHlwZSddID09IDIg PyBAcmVhZGxpbmsoJGN1cnJlbnRbJ25hbWUnXSkgOiAiIiwgInVzdGFyICIsICIgIiwNCgkJ CQkiVW5rbm93biIsICJVbmtub3duIiwgIiIsICIiLCAhZW1wdHkgKCRwYXRoKSA/ICRwYXRo IDogIiIsICIiKTsNCg0KCQkJJGNoZWNrc3VtID0gMDsNCgkJCWZvciAoJGkgPSAwOyAkaSA8 IDUxMjsgJGkrKykNCgkJCQkkY2hlY2tzdW0gKz0gb3JkKHN1YnN0cigkYmxvY2ssICRpLCAx KSk7DQoJCQkkY2hlY2tzdW0gPSBwYWNrKCJhOCIsIHNwcmludGYoIiUwN28iLCAkY2hlY2tz dW0pKTsNCgkJCSRibG9jayA9IHN1YnN0cl9yZXBsYWNlKCRibG9jaywgJGNoZWNrc3VtLCAx NDgsIDgpOw0KDQoJCQlpZiAoJGN1cnJlbnRbJ3R5cGUnXSA9PSAyIHx8ICRjdXJyZW50Wydz dGF0J11bN10gPT0gMCkNCgkJCQkkdGhpcy0+YWRkX2RhdGEoJGJsb2NrKTsNCgkJCWVsc2Ug aWYgKCRmcCA9IEBmb3BlbigkY3VycmVudFsnbmFtZSddLCAicmIiKSkNCgkJCXsNCgkJCQkk dGhpcy0+YWRkX2RhdGEoJGJsb2NrKTsNCgkJCQl3aGlsZSAoJHRlbXAgPSBmcmVhZCgkZnAs IDEwNDg1NzYpKQ0KCQkJCQkkdGhpcy0+YWRkX2RhdGEoJHRlbXApOw0KCQkJCWlmICgkY3Vy cmVudFsnc3RhdCddWzddICUgNTEyID4gMCkNCgkJCQl7DQoJCQkJCSR0ZW1wID0gIiI7DQoJ CQkJCWZvciAoJGkgPSAwOyAkaSA8IDUxMiAtICRjdXJyZW50WydzdGF0J11bN10gJSA1MTI7 ICRpKyspDQoJCQkJCQkkdGVtcCAuPSAiXDAiOw0KCQkJCQkkdGhpcy0+YWRkX2RhdGEoJHRl bXApOw0KCQkJCX0NCgkJCQlmY2xvc2UoJGZwKTsNCgkJCX0NCgkJCWVsc2UNCgkJCQkkdGhp cy0+ZXJyb3JbXSA9ICJDb3VsZCBub3Qgb3BlbiBmaWxlIHskY3VycmVudFsnbmFtZSddfSBm b3IgcmVhZGluZy4gSXQgd2FzIG5vdCBhZGRlZC4iOw0KCQl9DQoNCgkJJHRoaXMtPmFkZF9k YXRhKHBhY2soImExMDI0IiwgIiIpKTsNCg0KCQljaGRpcigkcHdkKTsNCg0KCQlyZXR1cm4g MTsNCgl9DQoNCglmdW5jdGlvbiBleHRyYWN0X2ZpbGVzKCkNCgl7DQoJCSRwd2QgPSBnZXRj d2QoKTsNCgkJY2hkaXIoJHRoaXMtPm9wdGlvbnNbJ2Jhc2VkaXInXSk7DQoNCgkJaWYgKCRm cCA9ICR0aGlzLT5vcGVuX2FyY2hpdmUoKSkNCgkJew0KCQkJaWYgKCR0aGlzLT5vcHRpb25z Wydpbm1lbW9yeSddID09IDEpDQoJCQkJJHRoaXMtPmZpbGVzID0gYXJyYXkgKCk7DQoNCgkJ CXdoaWxlICgkYmxvY2sgPSBmcmVhZCgkZnAsIDUxMikpDQoJCQl7DQoJCQkJJHRlbXAgPSB1 bnBhY2soImExMDBuYW1lL2E4bW9kZS9hOHVpZC9hOGdpZC9hMTJzaXplL2ExMm10aW1lL2E4 Y2hlY2tzdW0vYTF0eXBlL2ExMDBzeW1saW5rL2E2bWFnaWMvYTJ0ZW1wL2EzMnRlbXAvYTMy dGVtcC9hOHRlbXAvYTh0ZW1wL2ExNTVwcmVmaXgvYTEydGVtcCIsICRibG9jayk7DQoJCQkJ JGZpbGUgPSBhcnJheSAoDQoJCQkJCSduYW1lJyA9PiAkdGVtcFsncHJlZml4J10gLiAkdGVt cFsnbmFtZSddLA0KCQkJCQknc3RhdCcgPT4gYXJyYXkgKA0KCQkJCQkJMiA9PiAkdGVtcFsn bW9kZSddLA0KCQkJCQkJNCA9PiBvY3RkZWMoJHRlbXBbJ3VpZCddKSwNCgkJCQkJCTUgPT4g b2N0ZGVjKCR0ZW1wWydnaWQnXSksDQoJCQkJCQk3ID0+IG9jdGRlYygkdGVtcFsnc2l6ZSdd KSwNCgkJCQkJCTkgPT4gb2N0ZGVjKCR0ZW1wWydtdGltZSddKSwNCgkJCQkJKSwNCgkJCQkJ J2NoZWNrc3VtJyA9PiBvY3RkZWMoJHRlbXBbJ2NoZWNrc3VtJ10pLA0KCQkJCQkndHlwZScg PT4gJHRlbXBbJ3R5cGUnXSwNCgkJCQkJJ21hZ2ljJyA9PiAkdGVtcFsnbWFnaWMnXSwNCgkJ CQkpOw0KDQoJCQkJaWYgKCRmaWxlWydjaGVja3N1bSddID09IDB4MDAwMDAwMDApDQoJCQkJ CWJyZWFrOw0KCQkJCWVsc2UgaWYgKHN1YnN0cigkZmlsZVsnbWFnaWMnXSwgMCwgNSkgIT0g InVzdGFyIikNCgkJCQl7DQoJCQkJCSR0aGlzLT5lcnJvcltdID0gIlRoaXMgc2NyaXB0IGRv ZXMgbm90IHN1cHBvcnQgZXh0cmFjdGluZyB0aGlzIHR5cGUgb2YgdGFyIGZpbGUuIjsNCgkJ CQkJYnJlYWs7DQoJCQkJfQ0KCQkJCSRibG9jayA9IHN1YnN0cl9yZXBsYWNlKCRibG9jaywg IiAgICAgICAgIiwgMTQ4LCA4KTsNCgkJCQkkY2hlY2tzdW0gPSAwOw0KCQkJCWZvciAoJGkg PSAwOyAkaSA8IDUxMjsgJGkrKykNCgkJCQkJJGNoZWNrc3VtICs9IG9yZChzdWJzdHIoJGJs b2NrLCAkaSwgMSkpOw0KCQkJCWlmICgkZmlsZVsnY2hlY2tzdW0nXSAhPSAkY2hlY2tzdW0p DQoJCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBleHRyYWN0IGZyb20geyR0aGlz LT5vcHRpb25zWyduYW1lJ119LCBpdCBpcyBjb3JydXB0LiI7DQoNCgkJCQkvLyBBZGRlZDog Y3JlYXRlIGRpciBpZiByZXF1aXJlZA0KCQkJCWlmIChzdHJwb3MoJGZpbGVbJ25hbWUnXSwg Jy4uJykgPT09IGZhbHNlKSB7DQoJCQkJCSRwYXRoX3BhcnRzID0gcGF0aGluZm8oJGZpbGVb J25hbWUnXSk7DQoJCQkJCWlmICghZmlsZV9leGlzdHMoJGZpbGVbJ25hbWUnXSkpIHsNCgkJ CQkJCSRyZXQgPSBzbWRfbWtkaXJfcmVjdXJzaXZlKCgoaXNzZXQoJHBhdGhfcGFydHNbJ2V4 dGVuc2lvbiddKSkgPyBkaXJuYW1lKCR0aGlzLT5vcHRpb25zWydiYXNlZGlyJ10uRFMuJGZp bGVbJ25hbWUnXSkgOiAkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddLkRTLiRmaWxlWyduYW1l J10pKTsNCgkJCQkJfQ0KCQkJCX0NCg0KCQkJCWlmICgkdGhpcy0+b3B0aW9uc1snaW5tZW1v cnknXSA9PSAxKQ0KCQkJCXsNCgkJCQkJJGZpbGVbJ2RhdGEnXSA9IGZyZWFkKCRmcCwgJGZp bGVbJ3N0YXQnXVs3XSk7DQoJCQkJCWZyZWFkKCRmcCwgKDUxMiAtICRmaWxlWydzdGF0J11b N10gJSA1MTIpID09IDUxMiA/IDAgOiAoNTEyIC0gJGZpbGVbJ3N0YXQnXVs3XSAlIDUxMikp Ow0KCQkJCQl1bnNldCAoJGZpbGVbJ2NoZWNrc3VtJ10sICRmaWxlWydtYWdpYyddKTsNCgkJ CQkJJHRoaXMtPmZpbGVzW10gPSAkZmlsZTsNCgkJCQl9DQoJCQkJZWxzZSBpZiAoJGZpbGVb J3R5cGUnXSA9PSA1KQ0KCQkJCXsNCgkJCQkJaWYgKCFpc19kaXIoJGZpbGVbJ25hbWUnXSkp DQoJCQkJCQlta2RpcigkZmlsZVsnbmFtZSddLCAkZmlsZVsnc3RhdCddWzJdKTsNCgkJCQl9 DQoJCQkJZWxzZSBpZiAoJHRoaXMtPm9wdGlvbnNbJ292ZXJ3cml0ZSddID09IDAgJiYgZmls ZV9leGlzdHMoJGZpbGVbJ25hbWUnXSkpDQoJCQkJew0KCQkJCQkkdGhpcy0+ZXJyb3JbXSA9 ICJ7JGZpbGVbJ25hbWUnXX0gYWxyZWFkeSBleGlzdHMuIjsNCgkJCQkJY29udGludWU7DQoJ CQkJfQ0KCQkJCWVsc2UgaWYgKCRmaWxlWyd0eXBlJ10gPT0gMikNCgkJCQl7DQoJCQkJCXN5 bWxpbmsoJHRlbXBbJ3N5bWxpbmsnXSwgJGZpbGVbJ25hbWUnXSk7DQoJCQkJCWNobW9kKCRm aWxlWyduYW1lJ10sICRmaWxlWydzdGF0J11bMl0pOw0KCQkJCX0NCgkJCQllbHNlIGlmICgk bmV3ID0gZm9wZW4oJGZpbGVbJ25hbWUnXSwgIndiIikpDQoJCQkJew0KCQkJCQlmd3JpdGUo JG5ldywgZnJlYWQoJGZwLCAkZmlsZVsnc3RhdCddWzddKSk7DQoJCQkJCWZyZWFkKCRmcCwg KDUxMiAtICRmaWxlWydzdGF0J11bN10gJSA1MTIpID09IDUxMiA/IDAgOiAoNTEyIC0gJGZp bGVbJ3N0YXQnXVs3XSAlIDUxMikpOw0KCQkJCQlmY2xvc2UoJG5ldyk7DQoJCQkJCUBjaG1v ZCgkZmlsZVsnbmFtZSddLCAwNjQ0KTsgLy8gSGFyZC1jb2RlZCBmb3Igbm93IGJlY2F1c2Ug dGhlIHN0dXBpZCAwMTAwNjQ0IHZhbHVlIGluICRmaWxlWydzdGF0J11bMl0gY29uZnVzZXMg dGhlIE9TL1BIUA0KCQkJCX0NCgkJCQllbHNlDQoJCQkJew0KCQkJCQkkdGhpcy0+ZXJyb3Jb XSA9ICJDb3VsZCBub3Qgb3BlbiB7JGZpbGVbJ25hbWUnXX0gZm9yIHdyaXRpbmcuIjsNCgkJ CQkJY29udGludWU7DQoJCQkJfQ0KCQkJCS8vIFJlbW92ZSBvd25lciBhbmQgZ3JvdXAgc2V0 dGluZyBzaW5jZSB0aGVyZSBpcyBhbG1vc3QgMCBsaWtlbGlob29kIHRoZSBmaWxlcyB3aWxs IGhhdmUgdGhlIHNhbWUgdXNlci9ncm91cCBhY3Jvc3Mgc3lzdGVtcw0KCQkJCS8vIEluIG90 aGVyIHdvcmRzLCBsZWF2ZSBvd25lci9ncm91cCBhdCB0aGUgQXBhY2hlIGRlZmF1bHQgLS0g d2hpY2ggaXMgd2hhdCB3ZSB3YW50DQovLwkJCQljaG93bigkZmlsZVsnbmFtZSddLCAkZmls ZVsnc3RhdCddWzRdKTsNCi8vCQkJCWNoZ3JwKCRmaWxlWyduYW1lJ10sICRmaWxlWydzdGF0 J11bNV0pOw0KCQkJCUB0b3VjaCgkZmlsZVsnbmFtZSddLCAkZmlsZVsnc3RhdCddWzldKTsN CgkJCQl1bnNldCAoJGZpbGUpOw0KCQkJfQ0KCQl9DQoJCWVsc2UNCgkJCSR0aGlzLT5lcnJv cltdID0gIkNvdWxkIG5vdCBvcGVuIGZpbGUgeyR0aGlzLT5vcHRpb25zWyduYW1lJ119IjsN Cg0KCQljaGRpcigkcHdkKTsNCgl9DQoNCglmdW5jdGlvbiBvcGVuX2FyY2hpdmUoKQ0KCXsN CgkJcmV0dXJuIEBmb3BlbigkdGhpcy0+b3B0aW9uc1snbmFtZSddLCAicmIiKTsNCgl9DQp9 DQoNCmNsYXNzIHNtZF9jcnVuY2hfZ3ppcF9maWxlIGV4dGVuZHMgc21kX2NydW5jaF90YXJf ZmlsZQ0Kew0KCWZ1bmN0aW9uIHNtZF9jcnVuY2hfZ3ppcF9maWxlKCRuYW1lKQ0KCXsNCgkJ JHRoaXMtPnNtZF9jcnVuY2hfdGFyX2ZpbGUoJG5hbWUpOw0KCQkkdGhpcy0+b3B0aW9uc1sn dHlwZSddID0gImd6aXAiOw0KCX0NCg0KCWZ1bmN0aW9uIGNyZWF0ZV9nemlwKCkNCgl7DQoJ CWlmICgkdGhpcy0+b3B0aW9uc1snaW5tZW1vcnknXSA9PSAwKQ0KCQl7DQoJCQkkcHdkID0g Z2V0Y3dkKCk7DQoJCQljaGRpcigkdGhpcy0+b3B0aW9uc1snYmFzZWRpciddKTsNCgkJCWlm ICgkZnAgPSBnem9wZW4oJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSwgIndieyR0aGlzLT5vcHRp b25zWydsZXZlbCddfSIpKQ0KCQkJew0KCQkJCWZzZWVrKCR0aGlzLT5hcmNoaXZlLCAwKTsN CgkJCQl3aGlsZSAoJHRlbXAgPSBmcmVhZCgkdGhpcy0+YXJjaGl2ZSwgMTA0ODU3NikpDQoJ CQkJCWd6d3JpdGUoJGZwLCAkdGVtcCk7DQoJCQkJZ3pjbG9zZSgkZnApOw0KCQkJCWNoZGly KCRwd2QpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNv dWxkIG5vdCBvcGVuIHskdGhpcy0+b3B0aW9uc1snbmFtZSddfSBmb3Igd3JpdGluZy4iOw0K CQkJCWNoZGlyKCRwd2QpOw0KCQkJCXJldHVybiAwOw0KCQkJfQ0KCQl9DQoJCWVsc2UNCgkJ CSR0aGlzLT5hcmNoaXZlID0gZ3plbmNvZGUoJHRoaXMtPmFyY2hpdmUsICR0aGlzLT5vcHRp b25zWydsZXZlbCddKTsNCg0KCQlyZXR1cm4gMTsNCgl9DQoNCglmdW5jdGlvbiBvcGVuX2Fy Y2hpdmUoKQ0KCXsNCgkJcmV0dXJuIEBnem9wZW4oJHRoaXMtPm9wdGlvbnNbJ25hbWUnXSwg InJiIik7DQoJfQ0KfQ0KDQpjbGFzcyBzbWRfY3J1bmNoX2J6aXBfZmlsZSBleHRlbmRzIHNt ZF9jcnVuY2hfdGFyX2ZpbGUNCnsNCglmdW5jdGlvbiBzbWRfY3J1bmNoX2J6aXBfZmlsZSgk bmFtZSkNCgl7DQoJCSR0aGlzLT5zbWRfY3J1bmNoX3Rhcl9maWxlKCRuYW1lKTsNCgkJJHRo aXMtPm9wdGlvbnNbJ3R5cGUnXSA9ICJiemlwIjsNCgl9DQoNCglmdW5jdGlvbiBjcmVhdGVf YnppcCgpDQoJew0KCQlpZiAoJHRoaXMtPm9wdGlvbnNbJ2lubWVtb3J5J10gPT0gMCkNCgkJ ew0KCQkJJHB3ZCA9IGdldGN3ZCgpOw0KCQkJY2hkaXIoJHRoaXMtPm9wdGlvbnNbJ2Jhc2Vk aXInXSk7DQoJCQlpZiAoJGZwID0gYnpvcGVuKCR0aGlzLT5vcHRpb25zWyduYW1lJ10sICJ3 YiIpKQ0KCQkJew0KCQkJCWZzZWVrKCR0aGlzLT5hcmNoaXZlLCAwKTsNCgkJCQl3aGlsZSAo JHRlbXAgPSBmcmVhZCgkdGhpcy0+YXJjaGl2ZSwgMTA0ODU3NikpDQoJCQkJCWJ6d3JpdGUo JGZwLCAkdGVtcCk7DQoJCQkJYnpjbG9zZSgkZnApOw0KCQkJCWNoZGlyKCRwd2QpOw0KCQkJ fQ0KCQkJZWxzZQ0KCQkJew0KCQkJCSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBvcGVu IHskdGhpcy0+b3B0aW9uc1snbmFtZSddfSBmb3Igd3JpdGluZy4iOw0KCQkJCWNoZGlyKCRw d2QpOw0KCQkJCXJldHVybiAwOw0KCQkJfQ0KCQl9DQoJCWVsc2UNCgkJCSR0aGlzLT5hcmNo aXZlID0gYnpjb21wcmVzcygkdGhpcy0+YXJjaGl2ZSwgJHRoaXMtPm9wdGlvbnNbJ2xldmVs J10pOw0KDQoJCXJldHVybiAxOw0KCX0NCg0KCWZ1bmN0aW9uIG9wZW5fYXJjaGl2ZSgpDQoJ ew0KCQlyZXR1cm4gQGJ6b3BlbigkdGhpcy0+b3B0aW9uc1snbmFtZSddLCAiciIpOw0KCX0N Cn0NCg0KY2xhc3Mgc21kX2NydW5jaF96aXBfZmlsZSBleHRlbmRzIHNtZF9jcnVuY2hfYXJj aGl2ZQ0Kew0KCWZ1bmN0aW9uIHNtZF9jcnVuY2hfemlwX2ZpbGUoJG5hbWUpDQoJew0KCQkk dGhpcy0+c21kX2NydW5jaF9hcmNoaXZlKCRuYW1lKTsNCgkJJHRoaXMtPm9wdGlvbnNbJ3R5 cGUnXSA9ICJ6aXAiOw0KCX0NCg0KCWZ1bmN0aW9uIGNyZWF0ZV96aXAoKQ0KCXsNCgkJJGZp bGVzID0gMDsNCgkJJG9mZnNldCA9IDA7DQoJCSRjZW50cmFsID0gIiI7DQoNCgkJaWYgKCFl bXB0eSAoJHRoaXMtPm9wdGlvbnNbJ3NmeCddKSkNCgkJCWlmICgkZnAgPSBAZm9wZW4oJHRo aXMtPm9wdGlvbnNbJ3NmeCddLCAicmIiKSkNCgkJCXsNCgkJCQkkdGVtcCA9IGZyZWFkKCRm cCwgZmlsZXNpemUoJHRoaXMtPm9wdGlvbnNbJ3NmeCddKSk7DQoJCQkJZmNsb3NlKCRmcCk7 DQoJCQkJJHRoaXMtPmFkZF9kYXRhKCR0ZW1wKTsNCgkJCQkkb2Zmc2V0ICs9IHN0cmxlbigk dGVtcCk7DQoJCQkJdW5zZXQgKCR0ZW1wKTsNCgkJCX0NCgkJCWVsc2UNCgkJCQkkdGhpcy0+ ZXJyb3JbXSA9ICJDb3VsZCBub3Qgb3BlbiBzZnggbW9kdWxlIGZyb20geyR0aGlzLT5vcHRp b25zWydzZngnXX0uIjsNCg0KCQkkcHdkID0gZ2V0Y3dkKCk7DQoJCWNoZGlyKCR0aGlzLT5v cHRpb25zWydiYXNlZGlyJ10pOw0KDQoJCWZvcmVhY2ggKCR0aGlzLT5maWxlcyBhcyAkY3Vy cmVudCkNCgkJew0KCQkJaWYgKCRjdXJyZW50WyduYW1lJ10gPT0gJHRoaXMtPm9wdGlvbnNb J25hbWUnXSkNCgkJCQljb250aW51ZTsNCg0KCQkJJHRpbWVkYXRlID0gZXhwbG9kZSgiICIs IGRhdGUoIlkgbiBqIEcgaSBzIiwgJGN1cnJlbnRbJ3N0YXQnXVs5XSkpOw0KCQkJJHRpbWVk YXRlID0gKCR0aW1lZGF0ZVswXSAtIDE5ODAgPDwgMjUpIHwgKCR0aW1lZGF0ZVsxXSA8PCAy MSkgfCAoJHRpbWVkYXRlWzJdIDw8IDE2KSB8DQoJCQkJKCR0aW1lZGF0ZVszXSA8PCAxMSkg fCAoJHRpbWVkYXRlWzRdIDw8IDUpIHwgKCR0aW1lZGF0ZVs1XSk7DQoNCgkJCSRibG9jayA9 IHBhY2soIlZ2dnZWIiwgMHgwNDAzNGI1MCwgMHgwMDBBLCAweDAwMDAsIChpc3NldCgkY3Vy cmVudFsnbWV0aG9kJ10pIHx8ICR0aGlzLT5vcHRpb25zWydtZXRob2QnXSA9PSAwKSA/IDB4 MDAwMCA6IDB4MDAwOCwgJHRpbWVkYXRlKTsNCg0KCQkJaWYgKCRjdXJyZW50WydzdGF0J11b N10gPT0gMCAmJiAkY3VycmVudFsndHlwZSddID09IDUpDQoJCQl7DQoJCQkJJGJsb2NrIC49 IHBhY2soIlZWVnZ2IiwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgc3Ry bGVuKCRjdXJyZW50WyduYW1lMiddKSArIDEsIDB4MDAwMCk7DQoJCQkJJGJsb2NrIC49ICRj dXJyZW50WyduYW1lMiddIC4gIi8iOw0KCQkJCSR0aGlzLT5hZGRfZGF0YSgkYmxvY2spOw0K CQkJCSRjZW50cmFsIC49IHBhY2soIlZ2dnZ2VlZWVnZ2dnZ2VlYiLCAweDAyMDE0YjUwLCAw eDAwMTQsICR0aGlzLT5vcHRpb25zWydtZXRob2QnXSA9PSAwID8gMHgwMDAwIDogMHgwMDBB LCAweDAwMDAsDQoJCQkJCShpc3NldCgkY3VycmVudFsnbWV0aG9kJ10pIHx8ICR0aGlzLT5v cHRpb25zWydtZXRob2QnXSA9PSAwKSA/IDB4MDAwMCA6IDB4MDAwOCwgJHRpbWVkYXRlLA0K CQkJCQkweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCBzdHJsZW4oJGN1cnJl bnRbJ25hbWUyJ10pICsgMSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAkY3Vy cmVudFsndHlwZSddID09IDUgPyAweDAwMDAwMDEwIDogMHgwMDAwMDAwMCwgJG9mZnNldCk7 DQoJCQkJJGNlbnRyYWwgLj0gJGN1cnJlbnRbJ25hbWUyJ10gLiAiLyI7DQoJCQkJJGZpbGVz Kys7DQoJCQkJJG9mZnNldCArPSAoMzEgKyBzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pKTsN CgkJCX0NCgkJCWVsc2UgaWYgKCRjdXJyZW50WydzdGF0J11bN10gPT0gMCkNCgkJCXsNCgkJ CQkkYmxvY2sgLj0gcGFjaygiVlZWdnYiLCAweDAwMDAwMDAwLCAweDAwMDAwMDAwLCAweDAw MDAwMDAwLCBzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pLCAweDAwMDApOw0KCQkJCSRibG9j ayAuPSAkY3VycmVudFsnbmFtZTInXTsNCgkJCQkkdGhpcy0+YWRkX2RhdGEoJGJsb2NrKTsN CgkJCQkkY2VudHJhbCAuPSBwYWNrKCJWdnZ2dlZWVlZ2dnZ2dlZWIiwgMHgwMjAxNGI1MCwg MHgwMDE0LCAkdGhpcy0+b3B0aW9uc1snbWV0aG9kJ10gPT0gMCA/IDB4MDAwMCA6IDB4MDAw QSwgMHgwMDAwLA0KCQkJCQkoaXNzZXQoJGN1cnJlbnRbJ21ldGhvZCddKSB8fCAkdGhpcy0+ b3B0aW9uc1snbWV0aG9kJ10gPT0gMCkgPyAweDAwMDAgOiAweDAwMDgsICR0aW1lZGF0ZSwN CgkJCQkJMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgMHgwMDAwMDAwMCwgc3RybGVuKCRjdXJy ZW50WyduYW1lMiddKSwgMHgwMDAwLCAweDAwMDAsIDB4MDAwMCwgMHgwMDAwLCAkY3VycmVu dFsndHlwZSddID09IDUgPyAweDAwMDAwMDEwIDogMHgwMDAwMDAwMCwgJG9mZnNldCk7DQoJ CQkJJGNlbnRyYWwgLj0gJGN1cnJlbnRbJ25hbWUyJ107DQoJCQkJJGZpbGVzKys7DQoJCQkJ JG9mZnNldCArPSAoMzAgKyBzdHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pKTsNCgkJCX0NCgkJ CWVsc2UgaWYgKCRmcCA9IEBmb3BlbigkY3VycmVudFsnbmFtZSddLCAicmIiKSkNCgkJCXsN CgkJCQkkdGVtcCA9IGZyZWFkKCRmcCwgJGN1cnJlbnRbJ3N0YXQnXVs3XSk7DQoJCQkJZmNs b3NlKCRmcCk7DQoJCQkJJGNyYzMyID0gY3JjMzIoJHRlbXApOw0KCQkJCWlmICghaXNzZXQo JGN1cnJlbnRbJ21ldGhvZCddKSAmJiAkdGhpcy0+b3B0aW9uc1snbWV0aG9kJ10gPT0gMSkN CgkJCQl7DQoJCQkJCSR0ZW1wID0gZ3pjb21wcmVzcygkdGVtcCwgJHRoaXMtPm9wdGlvbnNb J2xldmVsJ10pOw0KCQkJCQkkc2l6ZSA9IHN0cmxlbigkdGVtcCkgLSA2Ow0KCQkJCQkkdGVt cCA9IHN1YnN0cigkdGVtcCwgMiwgJHNpemUpOw0KCQkJCX0NCgkJCQllbHNlDQoJCQkJCSRz aXplID0gc3RybGVuKCR0ZW1wKTsNCgkJCQkkYmxvY2sgLj0gcGFjaygiVlZWdnYiLCAkY3Jj MzIsICRzaXplLCAkY3VycmVudFsnc3RhdCddWzddLCBzdHJsZW4oJGN1cnJlbnRbJ25hbWUy J10pLCAweDAwMDApOw0KCQkJCSRibG9jayAuPSAkY3VycmVudFsnbmFtZTInXTsNCgkJCQkk dGhpcy0+YWRkX2RhdGEoJGJsb2NrKTsNCgkJCQkkdGhpcy0+YWRkX2RhdGEoJHRlbXApOw0K CQkJCXVuc2V0ICgkdGVtcCk7DQoJCQkJJGNlbnRyYWwgLj0gcGFjaygiVnZ2dnZWVlZWdnZ2 dnZWViIsIDB4MDIwMTRiNTAsIDB4MDAxNCwgJHRoaXMtPm9wdGlvbnNbJ21ldGhvZCddID09 IDAgPyAweDAwMDAgOiAweDAwMEEsIDB4MDAwMCwNCgkJCQkJKGlzc2V0KCRjdXJyZW50Wydt ZXRob2QnXSkgfHwgJHRoaXMtPm9wdGlvbnNbJ21ldGhvZCddID09IDApID8gMHgwMDAwIDog MHgwMDA4LCAkdGltZWRhdGUsDQoJCQkJCSRjcmMzMiwgJHNpemUsICRjdXJyZW50WydzdGF0 J11bN10sIHN0cmxlbigkY3VycmVudFsnbmFtZTInXSksIDB4MDAwMCwgMHgwMDAwLCAweDAw MDAsIDB4MDAwMCwgMHgwMDAwMDAwMCwgJG9mZnNldCk7DQoJCQkJJGNlbnRyYWwgLj0gJGN1 cnJlbnRbJ25hbWUyJ107DQoJCQkJJGZpbGVzKys7DQoJCQkJJG9mZnNldCArPSAoMzAgKyBz dHJsZW4oJGN1cnJlbnRbJ25hbWUyJ10pICsgJHNpemUpOw0KCQkJfQ0KCQkJZWxzZQ0KCQkJ CSR0aGlzLT5lcnJvcltdID0gIkNvdWxkIG5vdCBvcGVuIGZpbGUgeyRjdXJyZW50WyduYW1l J119IGZvciByZWFkaW5nLiBJdCB3YXMgbm90IGFkZGVkLiI7DQoJCX0NCg0KCQkkdGhpcy0+ YWRkX2RhdGEoJGNlbnRyYWwpOw0KDQoJCSR0aGlzLT5hZGRfZGF0YShwYWNrKCJWdnZ2dlZW diIsIDB4MDYwNTRiNTAsIDB4MDAwMCwgMHgwMDAwLCAkZmlsZXMsICRmaWxlcywgc3RybGVu KCRjZW50cmFsKSwgJG9mZnNldCwNCgkJCSFlbXB0eSAoJHRoaXMtPm9wdGlvbnNbJ2NvbW1l bnQnXSkgPyBzdHJsZW4oJHRoaXMtPm9wdGlvbnNbJ2NvbW1lbnQnXSkgOiAweDAwMDApKTsN Cg0KCQlpZiAoIWVtcHR5ICgkdGhpcy0+b3B0aW9uc1snY29tbWVudCddKSkNCgkJCSR0aGlz LT5hZGRfZGF0YSgkdGhpcy0+b3B0aW9uc1snY29tbWVudCddKTsNCg0KCQljaGRpcigkcHdk KTsNCg0KCQlyZXR1cm4gMTsNCgl9DQp9DQoNCi8vIDE5LzA4LzIwMTEgKHYyLjY2MykNCi8v IC0gdW56aXBBbGwgd2FzIHVzaW5nIGRvdWJsZSBzbGFzaGVzIChwYXRoLy9maWxlbmFtZSkg dG8gc2F2ZSBmaWxlcy4gKHRoYW5rcyB0byBLYXJlbiBQZXl0b24pLg0KLy8gMDkvMDgvMjAx MCAodjIuNjYyKQ0KLy8gLSB1bnppcEFsbCBwYXJhbWV0ZXJzIGZ1bGx5IHJldmlld2VkIGFu ZCBmaXhlZC4gVGhhbmtzIFJvbm55IERyZXNjaGxlciBhbmQgQ29ub3IgTWFjIEFvaWRoLg0K Ly8gMTIvMDUvMjAxMCAodjIuNjYxKQ0KLy8gLSBGaXhlZCBFX1NUUklDVCBub3RpY2U6ICJP bmx5IHZhcmlhYmxlcyBzaG91bGQgYmUgcGFzc2VkIGJ5IHJlZmVyZW5jZSIuIFRoYW5rcyBF cmlrIFcuDQovLyAyNC8wMy8yMDEwICh2Mi42NikNCi8vIC0gRml4ZWQgYnVnIGluc2lkZSB1 bnppcEFsbCB3aGVuIGRpcm5hbWUgaXMgIi4iICh0aGFua3MgdG8gVGhvcnN0ZW4gR3JvdGgp DQovLyAtIEFkZGVkIGNoYXJhY3RlciAiwrQiIHRvIHRoZSBzdHJpbmcgY29udmVyc2lvbiB0 YWJsZSAoZXg6IGNhaXhhIGTCtMOhZ3VhKQ0KLy8gMjcvMDIvMjAxMA0KLy8gLSBSZW1vdmVk IFBIUDQgc3VwcG9ydCAoZmlsZV9wdXRfY29udGVudHMgcmVkZWNsYXJhdGlvbikuDQovLyAw NC8xMi8yMDA5ICh2Mi42NSkNCi8vICogQWRkZWQgY2hhcmFjdGVyIHRyYW5zbGF0aW9uIHRv IGRlY29kZSBhY2NlbnRzIGFuZC9vciBzcGVjaWFsIGNoYXJhY3RlcnMuDQovLyAxMC8xMS8y MDA5DQovLyAqIFNvbWUgc2VjdXJpdHkgYWRkZWQgdG8gYXZvaWQgbWFsaWNpb3VzIFpJUCBm aWxlcyAocmVsYXRpdmUgZGlycykNCi8vICogdW56aXBBbGwoKSB3aWxsIG91dHB1dCBieSBk ZWZhdWx0IHRvIHNhbWUgZm9sZGVyIG9mIHRoZSBjYWxsZXIgc2NyaXB0DQovLyAyNS8wOS8y MDA5DQovLyAtIENvZGUgb3B0aW1pemF0aW9uIHRvIHJlZHVjZSBtZW1vcnkgdXNhZ2UgKHVu Y29tcHJlc3MoJiRjb250ZW50cykpDQovLyAxMi8wNy8yMDA5ICgyLjYyKQ0KLy8gLSBEZWJ1 ZyBtZXNzYWdlcyBhcmUgc2hvd24gb25seSB3aGVuIGV4cGxpY2l0Lg0KLy8gLSBOZXcgbWV0 aG9kOiBnZXRMYXN0RXJyb3IoKQ0KDQojIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIw0KIyBDbGFzcyBkVW56aXAyIHYyLjY2 Mw0KIw0KIyAgQXV0aG9yOiBBbGV4YW5kcmUgVGVkZXNjaGkgKGQpDQojICBFLU1haWw6IGFs ZXhhbmRyZWJyIGF0IGdtYWlsIGRvdCBjb20NCiMgIExvbmRyaW5hIC0gUFIgLyBCcmF6aWwN CiMNCiMgIE9iamVjdGl2ZToNCiMgICAgVGhpcyBjbGFzcyBhbGxvd3MgcHJvZ3JhbW1lciB0 byBlYXNpbHkgdW56aXAgZmlsZXMgb24gdGhlIGZseS4NCiMNCiMgIFJlcXVpcmVtZW50czoN CiMgICAgVGhpcyBjbGFzcyByZXF1aXJlcyBleHRlbnNpb24gWkxpYiBFbmFibGVkLiBJdCBp cyBkZWZhdWx0DQojICAgIGZvciBtb3N0IHNpdGUgaG9zdHMgYXJvdW5kIHRoZSB3b3JsZCwg YW5kIGZvciB0aGUgUEhQIFdpbjMyIGRpc3QuDQojDQojICBUbyBkbzoNCiMgICAqIEVycm9y IGhhbmRsaW5nDQojICAgKiBXcml0ZSBhIFBIUC1TaWRlIGd6aW5mbGF0ZSwgdG8gY29tcGxl dGVseSBhdm9pZCBhbnkgZXh0ZXJuYWwgZXh0ZW5zaW9ucw0KIyAgICogV3JpdGUgb3RoZXIg ZGVjb21wcmVzcyBhbGdvcml0aG1zDQojDQojICBNZXRob2RzOg0KIyAgKiBkVW56aXAyKCRm aWxlbmFtZSkgICAgICAgICAtIENvbnN0cnVjdG9yIC0gT3BlbnMgJGZpbGVuYW1lDQojICAq IGdldExpc3QoWyRzdG9wT25GaWxlXSkgICAgIC0gUmV0cmlldmUgdGhlIGZpbGUgbGlzdA0K IyAgKiBnZXRFeHRyYUluZm8oJHppcGZpbGVuYW1lKSAtIFJldHJpZXZlIG1vcmUgaW5mb3Jt YXRpb24gYWJvdXQgY29tcHJlc3NlZCBmaWxlDQojICAqIGdldFppcEluZm8oWyRlbnRyeV0p ICAgICAgIC0gUmV0cmlldmUgWklQIGZpbGUgZGV0YWlscy4NCiMgICogdW56aXAoJHppcGZp bGVuYW1lLCBbJG91dGZpbGVuYW1lLCBbJGFwcGx5Q2htb2RdXSkgLSBVbnppcCBmaWxlDQoj ICAqIHVuemlwQWxsKFskb3V0RGlyLCBbJHppcERpciwgWyRtYWludGFpblN0cnVjdHVyZSwg WyRhcHBseUNobW9kXV1dXSkNCiMgICogY2xvc2UoKSAgICAgICAgICAgICAgICAgICAgLSBD bG9zZSBmaWxlIGhhbmRsZXIsIGJ1dCBrZWVwIHRoZSBsaXN0DQojICAqIF9fZGVzdHJveSgp ICAgICAgICAgICAgICAgIC0gQ2xvc2UgZmlsZSBoYW5kbGVyIGFuZCByZWxlYXNlIG1lbW9y eQ0KIw0KIyAgSWYgeW91IG1vZGlmeSB0aGlzIGNsYXNzLCBvciBoYXZlIGFueSBpZGVhcyB0 byBpbXByb3ZlIGl0LCBwbGVhc2UgY29udGFjdCBtZSENCiMgIFlvdSBhcmUgYWxsb3dlZCB0 byByZWRpc3RyaWJ1dGUgdGhpcyBjbGFzcywgaWYgeW91IGtlZXAgbXkgbmFtZSBhbmQgY29u dGFjdCBlLW1haWwgb24gaXQuDQojDQojICBQTEVBU0UhIElGIFlPVSBVU0UgVEhJUyBDTEFT UyBJTiBBTlkgT0YgWU9VUiBQUk9KRUNUUywgUExFQVNFIExFVCBNRSBLTk9XIQ0KIyAgSWYg eW91IGhhdmUgcHJvYmxlbXMgdXNpbmcgaXQsIGRvbid0IHRoaW5rIHR3aWNlIGJlZm9yZSBj b250YWN0aW5nIG1lIQ0KIw0KIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMj IyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMjIyMNCg0KY2xhc3Mgc21kX2NydW5jaF9kVW56aXAy ew0KCUZ1bmN0aW9uIGdldFZlcnNpb24oKXsNCgkJcmV0dXJuICIyLjY2MyI7DQoJfQ0KCS8v IFB1YmxpYw0KCXZhciAkZmlsZU5hbWU7DQoJdmFyICRsYXN0RXJyb3I7DQoJdmFyICRjb21w cmVzc2VkTGlzdDsgLy8gWW91IHdpbGwgcHJvYmxhYmx5IHVzZSBvbmx5IHRoaXMgb25lIQ0K CXZhciAkY2VudHJhbERpckxpc3Q7IC8vIENlbnRyYWwgZGlyIGxpc3QuLi4gSXQncyBhIGtp bmQgb2YgJ2V4dHJhIGF0dHJpYnV0ZXMnIGZvciBhIHNldCBvZiBmaWxlcw0KCXZhciAkZW5k T2ZDZW50cmFsOyAgIC8vIEVuZCBvZiBjZW50cmFsIGRpciwgY29udGFpbnMgWklQIENvbW1l bnRzDQoJdmFyICRkZWJ1ZzsNCg0KCS8vIFByaXZhdGUNCgl2YXIgJGZoOw0KCXZhciAkemlw U2lnbmF0dXJlID0gIlx4NTBceDRiXHgwM1x4MDQiOyAvLyBsb2NhbCBmaWxlIGhlYWRlciBz aWduYXR1cmUNCgl2YXIgJGRpclNpZ25hdHVyZSA9ICJceDUwXHg0Ylx4MDFceDAyIjsgLy8g Y2VudHJhbCBkaXIgaGVhZGVyIHNpZ25hdHVyZQ0KCXZhciAkZGlyU2lnbmF0dXJlRT0gIlx4 NTBceDRiXHgwNVx4MDYiOyAvLyBlbmQgb2YgY2VudHJhbCBkaXIgc2lnbmF0dXJlDQoNCgkv LyBQdWJsaWMNCglGdW5jdGlvbiBzbWRfY3J1bmNoX2RVbnppcDIoJGZpbGVOYW1lKXsNCgkJ JHRoaXMtPmZpbGVOYW1lICAgICAgID0gJGZpbGVOYW1lOw0KCQkkdGhpcy0+Y29tcHJlc3Nl ZExpc3QgPSANCgkJJHRoaXMtPmNlbnRyYWxEaXJMaXN0ID0gDQoJCSR0aGlzLT5lbmRPZkNl bnRyYWwgICA9IEFycmF5KCk7DQoJfQ0KCQ0KCUZ1bmN0aW9uIGdldExpc3QoJHN0b3BPbkZp bGU9ZmFsc2Upew0KCQlpZihzaXplb2YoJHRoaXMtPmNvbXByZXNzZWRMaXN0KSl7DQoJCQkk dGhpcy0+ZGVidWdNc2coMSwgIlJldHVybmluZyBhbHJlYWR5IGxvYWRlZCBmaWxlIGxpc3Qu Iik7DQoJCQlyZXR1cm4gJHRoaXMtPmNvbXByZXNzZWRMaXN0Ow0KCQl9DQoJCQ0KCQkvLyBP cGVuIGZpbGUsIGFuZCBzZXQgZmlsZSBoYW5kbGVyDQoJCSRmaCA9IGZvcGVuKCR0aGlzLT5m aWxlTmFtZSwgInIiKTsNCgkJJHRoaXMtPmZoID0gJiRmaDsNCgkJaWYoISRmaCl7DQoJCQkk dGhpcy0+ZGVidWdNc2coMiwgIkZhaWxlZCB0byBsb2FkIGZpbGUuIik7DQoJCQlyZXR1cm4g ZmFsc2U7DQoJCX0NCgkJDQoJCSR0aGlzLT5kZWJ1Z01zZygxLCAiTG9hZGluZyBsaXN0IGZy b20gJ0VuZCBvZiBDZW50cmFsIERpcicgaW5kZXggbGlzdC4uLiIpOw0KCQlpZighJHRoaXMt Pl9sb2FkRmlsZUxpc3RCeUVPRigkZmgsICRzdG9wT25GaWxlKSl7DQoJCQkkdGhpcy0+ZGVi dWdNc2coMSwgIkZhaWxlZCEgVHJ5aW5nIHRvIGxvYWQgbGlzdCBsb29raW5nIGZvciBzaWdu YXR1cmVzLi4uIik7DQoJCQlpZighJHRoaXMtPl9sb2FkRmlsZUxpc3RCeVNpZ25hdHVyZXMo JGZoLCAkc3RvcE9uRmlsZSkpew0KCQkJCSR0aGlzLT5kZWJ1Z01zZygxLCAiRmFpbGVkISBD b3VsZCBub3QgZmluZCBhbnkgdmFsaWQgaGVhZGVyLiIpOw0KCQkJCSR0aGlzLT5kZWJ1Z01z ZygyLCAiWklQIEZpbGUgaXMgY29ycnVwdGVkIG9yIGVtcHR5Iik7DQoJCQkJcmV0dXJuIGZh bHNlOw0KCQkJfQ0KCQl9DQoJCQ0KCQlpZigkdGhpcy0+ZGVidWcpew0KCQkJIy0tLS0tLS0g RGVidWcgY29tcHJlc3NlZExpc3QNCgkJCSRra2sgPSAwOw0KCQkJZWNobyAiPHRhYmxlIGJv cmRlcj0nMCcgc3R5bGU9J2ZvbnQ6IDExcHggVmVyZGFuYTsgYm9yZGVyOiAxcHggc29saWQg IzAwMCc+IjsNCgkJCWZvcmVhY2goJHRoaXMtPmNvbXByZXNzZWRMaXN0IGFzICRmaWxlTmFt ZT0+JGl0ZW0pew0KCQkJCWlmKCEka2trICYmICRra2s9MSl7DQoJCQkJCWVjaG8gIjx0ciBz dHlsZT0nYmFja2dyb3VuZDogI0FEQSc+IjsNCgkJCQkJZm9yZWFjaCgkaXRlbSBhcyAkZmll bGROYW1lPT4kdmFsdWUpDQoJCQkJCQllY2hvICI8dGQ+JGZpZWxkTmFtZTwvdGQ+IjsNCgkJ CQkJZWNobyAnPC90cj4nOw0KCQkJCX0NCgkJCQllY2hvICI8dHIgc3R5bGU9J2JhY2tncm91 bmQ6ICNDRkMnPiI7DQoJCQkJZm9yZWFjaCgkaXRlbSBhcyAkZmllbGROYW1lPT4kdmFsdWUp ew0KCQkJCQlpZigkZmllbGROYW1lID09ICdsYXN0bW9kX2RhdGV0aW1lJykNCgkJCQkJCWVj aG8gIjx0ZCB0aXRsZT0nJGZpZWxkTmFtZScgbm93cmFwPSdub3dyYXAnPiIuZGF0ZSgiZC9t L1kgSDppOnMiLCAkdmFsdWUpLiI8L3RkPiI7DQoJCQkJCWVsc2UNCgkJCQkJCWVjaG8gIjx0 ZCB0aXRsZT0nJGZpZWxkTmFtZScgbm93cmFwPSdub3dyYXAnPiR2YWx1ZTwvdGQ+IjsNCgkJ CQl9DQoJCQkJZWNobyAiPC90cj4iOw0KCQkJfQ0KCQkJZWNobyAiPC90YWJsZT4iOw0KCQkJ DQoJCQkjLS0tLS0tLSBEZWJ1ZyBjZW50cmFsRGlyTGlzdA0KCQkJJGtrayA9IDA7DQoJCQlp ZihzaXplb2YoJHRoaXMtPmNlbnRyYWxEaXJMaXN0KSl7DQoJCQkJZWNobyAiPHRhYmxlIGJv cmRlcj0nMCcgc3R5bGU9J2ZvbnQ6IDExcHggVmVyZGFuYTsgYm9yZGVyOiAxcHggc29saWQg IzAwMCc+IjsNCgkJCQlmb3JlYWNoKCR0aGlzLT5jZW50cmFsRGlyTGlzdCBhcyAkZmlsZU5h bWU9PiRpdGVtKXsNCgkJCQkJaWYoISRra2sgJiYgJGtraz0xKXsNCgkJCQkJCWVjaG8gIjx0 ciBzdHlsZT0nYmFja2dyb3VuZDogI0FBRCc+IjsNCgkJCQkJCWZvcmVhY2goJGl0ZW0gYXMg JGZpZWxkTmFtZT0+JHZhbHVlKQ0KCQkJCQkJCWVjaG8gIjx0ZD4kZmllbGROYW1lPC90ZD4i Ow0KCQkJCQkJZWNobyAnPC90cj4nOw0KCQkJCQl9DQoJCQkJCWVjaG8gIjx0ciBzdHlsZT0n YmFja2dyb3VuZDogI0NDRic+IjsNCgkJCQkJZm9yZWFjaCgkaXRlbSBhcyAkZmllbGROYW1l PT4kdmFsdWUpew0KCQkJCQkJaWYoJGZpZWxkTmFtZSA9PSAnbGFzdG1vZF9kYXRldGltZScp DQoJCQkJCQkJZWNobyAiPHRkIHRpdGxlPSckZmllbGROYW1lJyBub3dyYXA9J25vd3JhcCc+ Ii5kYXRlKCJkL20vWSBIOmk6cyIsICR2YWx1ZSkuIjwvdGQ+IjsNCgkJCQkJCWVsc2UNCgkJ CQkJCQllY2hvICI8dGQgdGl0bGU9JyRmaWVsZE5hbWUnIG5vd3JhcD0nbm93cmFwJz4kdmFs dWU8L3RkPiI7DQoJCQkJCX0NCgkJCQkJZWNobyAiPC90cj4iOw0KCQkJCX0NCgkJCQllY2hv ICI8L3RhYmxlPiI7DQoJCQl9DQoJCQ0KCQkJIy0tLS0tLS0gRGVidWcgZW5kT2ZDZW50cmFs DQoJCQkka2trID0gMDsNCgkJCWlmKHNpemVvZigkdGhpcy0+ZW5kT2ZDZW50cmFsKSl7DQoJ CQkJZWNobyAiPHRhYmxlIGJvcmRlcj0nMCcgc3R5bGU9J2ZvbnQ6IDExcHggVmVyZGFuYScg c3R5bGU9J2JvcmRlcjogMXB4IHNvbGlkICMwMDAnPiI7DQoJCQkJZWNobyAiPHRyIHN0eWxl PSdiYWNrZ3JvdW5kOiAjREFBJz48dGQgY29sc3Bhbj0nMic+ZFVuemlwIC0gRW5kIG9mIGZp bGU8L3RkPjwvdHI+IjsNCgkJCQlmb3JlYWNoKCR0aGlzLT5lbmRPZkNlbnRyYWwgYXMgJGZp ZWxkPT4kdmFsdWUpew0KCQkJCQllY2hvICI8dHI+IjsNCgkJCQkJZWNobyAiPHRkIHN0eWxl PSdiYWNrZ3JvdW5kOiAjRkNDJz4kZmllbGQ8L3RkPiI7DQoJCQkJCWVjaG8gIjx0ZCBzdHls ZT0nYmFja2dyb3VuZDogI0ZERCc+JHZhbHVlPC90ZD4iOw0KCQkJCQllY2hvICI8L3RyPiI7 DQoJCQkJfQ0KCQkJCWVjaG8gIjwvdGFibGU+IjsNCgkJCX0NCgkJfQ0KCQkNCgkJcmV0dXJu ICR0aGlzLT5jb21wcmVzc2VkTGlzdDsNCgl9DQoJRnVuY3Rpb24gZ2V0RXh0cmFJbmZvKCRj b21wcmVzc2VkRmlsZU5hbWUpew0KCQlyZXR1cm4NCgkJCWlzc2V0KCR0aGlzLT5jZW50cmFs RGlyTGlzdFskY29tcHJlc3NlZEZpbGVOYW1lXSk/DQoJCQkkdGhpcy0+Y2VudHJhbERpckxp c3RbJGNvbXByZXNzZWRGaWxlTmFtZV06DQoJCQlmYWxzZTsNCgl9DQoJRnVuY3Rpb24gZ2V0 WmlwSW5mbygkZGV0YWlsPWZhbHNlKXsNCgkJcmV0dXJuICRkZXRhaWw/DQoJCQkkdGhpcy0+ ZW5kT2ZDZW50cmFsWyRkZXRhaWxdOg0KCQkJJHRoaXMtPmVuZE9mQ2VudHJhbDsNCgl9DQoJ DQoJRnVuY3Rpb24gdW56aXAoJGNvbXByZXNzZWRGaWxlTmFtZSwgJHRhcmdldEZpbGVOYW1l PWZhbHNlLCAkYXBwbHlDaG1vZD0wNzc3KXsNCgkJaWYoIXNpemVvZigkdGhpcy0+Y29tcHJl c3NlZExpc3QpKXsNCgkJCSR0aGlzLT5kZWJ1Z01zZygxLCAiVHJ5aW5nIHRvIHVuemlwIGJl Zm9yZSBsb2FkaW5nIGZpbGUgbGlzdC4uLiBMb2FkaW5nIGl0ISIpOw0KCQkJJHRoaXMtPmdl dExpc3QoZmFsc2UsICRjb21wcmVzc2VkRmlsZU5hbWUpOw0KCQl9DQoJCQ0KCQkkZmRldGFp bHMgPSAmJHRoaXMtPmNvbXByZXNzZWRMaXN0WyRjb21wcmVzc2VkRmlsZU5hbWVdOw0KCQlp ZighaXNzZXQoJHRoaXMtPmNvbXByZXNzZWRMaXN0WyRjb21wcmVzc2VkRmlsZU5hbWVdKSl7 DQoJCQkkdGhpcy0+ZGVidWdNc2coMiwgIkZpbGUgJzxiPiRjb21wcmVzc2VkRmlsZU5hbWU8 L2I+JyBpcyBub3QgY29tcHJlc3NlZCBpbiB0aGUgemlwLiIpOw0KCQkJcmV0dXJuIGZhbHNl Ow0KCQl9DQoJCWlmKHN1YnN0cigkY29tcHJlc3NlZEZpbGVOYW1lLCAtMSkgPT0gIi8iKXsN CgkJCSR0aGlzLT5kZWJ1Z01zZygyLCAiVHJ5aW5nIHRvIHVuemlwIGEgZm9sZGVyIG5hbWUg JzxiPiRjb21wcmVzc2VkRmlsZU5hbWU8L2I+Jy4iKTsNCgkJCXJldHVybiBmYWxzZTsNCgkJ fQ0KCQlpZighJGZkZXRhaWxzWyd1bmNvbXByZXNzZWRfc2l6ZSddKXsNCgkJCSR0aGlzLT5k ZWJ1Z01zZygxLCAiRmlsZSAnPGI+JGNvbXByZXNzZWRGaWxlTmFtZTwvYj4nIGlzIGVtcHR5 LiIpOw0KCQkJcmV0dXJuICR0YXJnZXRGaWxlTmFtZT8NCgkJCQlmaWxlX3B1dF9jb250ZW50 cygkdGFyZ2V0RmlsZU5hbWUsICIiKToNCgkJCQkiIjsNCgkJfQ0KCQkNCgkJZnNlZWsoJHRo aXMtPmZoLCAkZmRldGFpbHNbJ2NvbnRlbnRzLXN0YXJ0T2Zmc2V0J10pOw0KCQkkdG9VbmNv bXByZXNzID0gZnJlYWQoJHRoaXMtPmZoLCAkZmRldGFpbHNbJ2NvbXByZXNzZWRfc2l6ZSdd KTsNCgkJJHJldCA9ICR0aGlzLT51bmNvbXByZXNzKA0KCQkJCSR0b1VuY29tcHJlc3MsDQoJ CQkJJGZkZXRhaWxzWydjb21wcmVzc2lvbl9tZXRob2QnXSwNCgkJCQkkZmRldGFpbHNbJ3Vu Y29tcHJlc3NlZF9zaXplJ10sDQoJCQkJJHRhcmdldEZpbGVOYW1lDQoJCQkpOw0KCQl1bnNl dCgkdG9VbmNvbXByZXNzKTsNCgkJaWYoJGFwcGx5Q2htb2QgJiYgJHRhcmdldEZpbGVOYW1l KQ0KCQkJY2htb2QoJHRhcmdldEZpbGVOYW1lLCAwNzc3KTsNCg0KCQlyZXR1cm4gJHJldDsN Cgl9DQoJRnVuY3Rpb24gdW56aXBBbGwoJHRhcmdldERpcj1mYWxzZSwgJGJhc2VEaXI9IiIs ICRtYWludGFpblN0cnVjdHVyZT10cnVlLCAkYXBwbHlDaG1vZD0wNzc3KXsNCgkJaWYoJHRh cmdldERpciA9PT0gZmFsc2UpDQoJCQkkdGFyZ2V0RGlyID0gZGlybmFtZSgkX1NFUlZFUlsn U0NSSVBUX0ZJTEVOQU1FJ10pLiIvIjsNCgkJDQoJCWlmKHN1YnN0cigkdGFyZ2V0RGlyLCAt MSkgPT0gIi8iKQ0KCQkJJHRhcmdldERpciA9IHN1YnN0cigkdGFyZ2V0RGlyLCAwLCAtMSk7 DQoJCQ0KCQkkbGlzdGEgPSAkdGhpcy0+Z2V0TGlzdCgpOw0KCQlpZihzaXplb2YoJGxpc3Rh KSkgZm9yZWFjaCgkbGlzdGEgYXMgJGZpbGVOYW1lPT4kdHJhc2gpew0KCQkJJGRpcm5hbWUg ID0gZGlybmFtZSgkZmlsZU5hbWUpOw0KCQkJJG91dEROICAgID0gIiR0YXJnZXREaXIvJGRp cm5hbWUiOw0KCQkJDQoJCQlpZihzdWJzdHIoJGRpcm5hbWUsIDAsIHN0cmxlbigkYmFzZURp cikpICE9ICRiYXNlRGlyKQ0KCQkJCWNvbnRpbnVlOw0KCQkJDQoJCQlpZighaXNfZGlyKCRv dXRETikgJiYgJG1haW50YWluU3RydWN0dXJlKXsNCgkJCQkkc3RyID0gIiI7DQoJCQkJJGZv bGRlcnMgPSBleHBsb2RlKCIvIiwgJGRpcm5hbWUpOw0KCQkJCWZvcmVhY2goJGZvbGRlcnMg YXMgJGZvbGRlcil7DQoJCQkJCSRzdHIgPSAkc3RyPyIkc3RyLyRmb2xkZXIiOiRmb2xkZXI7 DQoJCQkJCWlmKCFpc19kaXIoIiR0YXJnZXREaXIvJHN0ciIpKXsNCgkJCQkJCSR0aGlzLT5k ZWJ1Z01zZygxLCAiQ3JlYXRpbmcgZm9sZGVyOiAkdGFyZ2V0RGlyLyRzdHIiKTsNCgkJCQkJ CW1rZGlyKCIkdGFyZ2V0RGlyLyRzdHIiKTsNCgkJCQkJCWlmKCRhcHBseUNobW9kKQ0KCQkJ CQkJCWNobW9kKCIkdGFyZ2V0RGlyLyRzdHIiLCAkYXBwbHlDaG1vZCk7DQoJCQkJCX0NCgkJ CQl9DQoJCQl9DQoJCQlpZihzdWJzdHIoJGZpbGVOYW1lLCAtMSwgMSkgPT0gIi8iKQ0KCQkJ CWNvbnRpbnVlOw0KCQkJDQoJCQkkbWFpbnRhaW5TdHJ1Y3R1cmU/DQoJCQkJJHRoaXMtPnVu emlwKCRmaWxlTmFtZSwgIiR0YXJnZXREaXIvJGZpbGVOYW1lIiwgJGFwcGx5Q2htb2QpOg0K CQkJCSR0aGlzLT51bnppcCgkZmlsZU5hbWUsICIkdGFyZ2V0RGlyLyIuYmFzZW5hbWUoJGZp bGVOYW1lKSwgJGFwcGx5Q2htb2QpOw0KCQl9DQoJfQ0KCQ0KCUZ1bmN0aW9uIGNsb3NlKCl7 ICAgICAvLyBGcmVlIHRoZSBmaWxlIHJlc291cmNlDQoJCWlmKCR0aGlzLT5maCkNCgkJCWZj bG9zZSgkdGhpcy0+ZmgpOw0KCX0NCglGdW5jdGlvbiBfX2Rlc3Ryb3koKXsgDQoJCSR0aGlz LT5jbG9zZSgpOw0KCX0NCgkNCgkvLyBQcml2YXRlICh5b3Ugc2hvdWxkIE5PVCBjYWxsIHRo ZXNlIG1ldGhvZHMpOg0KCUZ1bmN0aW9uIHVuY29tcHJlc3MoJiRjb250ZW50LCAkbW9kZSwg JHVuY29tcHJlc3NlZFNpemUsICR0YXJnZXRGaWxlTmFtZT1mYWxzZSl7DQoJCXN3aXRjaCgk bW9kZSl7DQoJCQljYXNlIDA6DQoJCQkJLy8gTm90IGNvbXByZXNzZWQNCgkJCQlyZXR1cm4g JHRhcmdldEZpbGVOYW1lPw0KCQkJCQlmaWxlX3B1dF9jb250ZW50cygkdGFyZ2V0RmlsZU5h bWUsICRjb250ZW50KToNCgkJCQkJJGNvbnRlbnQ7DQoJCQljYXNlIDE6DQoJCQkJJHRoaXMt PmRlYnVnTXNnKDIsICJTaHJ1bmsgbW9kZSBpcyBub3Qgc3VwcG9ydGVkLi4uIHlldD8iKTsN CgkJCQlyZXR1cm4gZmFsc2U7DQoJCQljYXNlIDI6DQoJCQljYXNlIDM6DQoJCQljYXNlIDQ6 DQoJCQljYXNlIDU6DQoJCQkJJHRoaXMtPmRlYnVnTXNnKDIsICJDb21wcmVzc2lvbiBmYWN0 b3IgIi4oJG1vZGUtMSkuIiBpcyBub3Qgc3VwcG9ydGVkLi4uIHlldD8iKTsNCgkJCQlyZXR1 cm4gZmFsc2U7DQoJCQljYXNlIDY6DQoJCQkJJHRoaXMtPmRlYnVnTXNnKDIsICJJbXBsb2Rl IGlzIG5vdCBzdXBwb3J0ZWQuLi4geWV0PyIpOw0KCQkJCXJldHVybiBmYWxzZTsNCgkJCWNh c2UgNzoNCgkJCQkkdGhpcy0+ZGVidWdNc2coMiwgIlRva2VuaXppbmcgY29tcHJlc3Npb24g YWxnb3JpdGhtIGlzIG5vdCBzdXBwb3J0ZWQuLi4geWV0PyIpOw0KCQkJCXJldHVybiBmYWxz ZTsNCgkJCWNhc2UgODoNCgkJCQkvLyBEZWZsYXRlDQoJCQkJcmV0dXJuICR0YXJnZXRGaWxl TmFtZT8NCgkJCQkJZmlsZV9wdXRfY29udGVudHMoJHRhcmdldEZpbGVOYW1lLCBnemluZmxh dGUoJGNvbnRlbnQsICR1bmNvbXByZXNzZWRTaXplKSk6DQoJCQkJCWd6aW5mbGF0ZSgkY29u dGVudCwgJHVuY29tcHJlc3NlZFNpemUpOw0KCQkJY2FzZSA5Og0KCQkJCSR0aGlzLT5kZWJ1 Z01zZygyLCAiRW5oYW5jZWQgRGVmbGF0aW5nIGlzIG5vdCBzdXBwb3J0ZWQuLi4geWV0PyIp Ow0KCQkJCXJldHVybiBmYWxzZTsNCgkJCWNhc2UgMTA6DQoJCQkJJHRoaXMtPmRlYnVnTXNn KDIsICJQS1dBUkUgRGF0ZSBDb21wcmVzc2lvbiBMaWJyYXJ5IEltcG9sb2RpbmcgaXMgbm90 IHN1cHBvcnRlZC4uLiB5ZXQ/Iik7DQoJCQkJcmV0dXJuIGZhbHNlOw0KICAgICAgICAgICBj YXNlIDEyOg0KICAgICAgICAgICAgICAgLy8gQnppcDINCiAgICAgICAgICAgICAgIHJldHVy biAkdGFyZ2V0RmlsZU5hbWU/DQogICAgICAgICAgICAgICAgICAgZmlsZV9wdXRfY29udGVu dHMoJHRhcmdldEZpbGVOYW1lLCBiemRlY29tcHJlc3MoJGNvbnRlbnQpKToNCiAgICAgICAg ICAgICAgICAgICBiemRlY29tcHJlc3MoJGNvbnRlbnQpOw0KCQkJY2FzZSAxODoNCgkJCQkk dGhpcy0+ZGVidWdNc2coMiwgIklCTSBURVJTRSBpcyBub3Qgc3VwcG9ydGVkLi4uIHlldD8i KTsNCgkJCQlyZXR1cm4gZmFsc2U7DQoJCQlkZWZhdWx0Og0KCQkJCSR0aGlzLT5kZWJ1Z01z ZygyLCAiVW5rbm93biB1bmNvbXByZXNzIG1ldGhvZDogJG1vZGUiKTsNCgkJCQlyZXR1cm4g ZmFsc2U7DQoJCX0NCgl9DQoJRnVuY3Rpb24gZGVidWdNc2coJGxldmVsLCAkc3RyaW5nKXsN CgkJaWYoJHRoaXMtPmRlYnVnKXsNCgkJCWlmKCRsZXZlbCA9PSAxKQ0KCQkJCWVjaG8gIjxi IHN0eWxlPSdjb2xvcjogIzc3Nyc+ZFVuemlwMjo8L2I+ICRzdHJpbmc8YnI+IjsNCgkJCQ0K CQkJaWYoJGxldmVsID09IDIpDQoJCQkJZWNobyAiPGIgc3R5bGU9J2NvbG9yOiAjRjAwJz5k VW56aXAyOjwvYj4gJHN0cmluZzxicj4iOw0KCQl9DQoJCSR0aGlzLT5sYXN0RXJyb3IgPSAk c3RyaW5nOw0KCX0NCglGdW5jdGlvbiBnZXRMYXN0RXJyb3IoKXsNCgkJcmV0dXJuICR0aGlz LT5sYXN0RXJyb3I7DQoJfQ0KCQ0KCUZ1bmN0aW9uIF9sb2FkRmlsZUxpc3RCeUVPRigmJGZo LCAkc3RvcE9uRmlsZT1mYWxzZSl7DQoJCS8vIENoZWNrIGlmIHRoZXJlJ3MgYSB2YWxpZCBD ZW50cmFsIERpciBzaWduYXR1cmUuDQoJCS8vIExldCdzIGNvbnNpZGVyIGEgZmlsZSBjb21t ZW50IHNtYWxsZXIgdGhhbiAxMDI0IGNoYXJhY3RlcnMuLi4NCgkJLy8gQWN0dWFsbHksIGl0 IGxlbmd0aCBjYW4gYmUgNjU1MzYuLiBCdXQgd2UncmUgbm90IGdvaW5nIHRvIHN1cHBvcnQg aXQuDQoJCQ0KCQlmb3IoJHggPSAwOyAkeCA8IDEwMjQ7ICR4Kyspew0KCQkJZnNlZWsoJGZo LCAtMjItJHgsIFNFRUtfRU5EKTsNCgkJCQ0KCQkJJHNpZ25hdHVyZSA9IGZyZWFkKCRmaCwg NCk7DQoJCQlpZigkc2lnbmF0dXJlID09ICR0aGlzLT5kaXJTaWduYXR1cmVFKXsNCgkJCQkv LyBJZiBmb3VuZCBFT0YgQ2VudHJhbCBEaXINCgkJCQkkZW9kaXJbJ2Rpc2tfbnVtYmVyX3Ro aXMnXSAgID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIG51bWJlciBvZiB0aGlz IGRpc2sNCgkJCQkkZW9kaXJbJ2Rpc2tfbnVtYmVyJ10gICAgICAgID0gdW5wYWNrKCJ2Iiwg ZnJlYWQoJGZoLCAyKSk7IC8vIG51bWJlciBvZiB0aGUgZGlzayB3aXRoIHRoZSBzdGFydCBv ZiB0aGUgY2VudHJhbCBkaXJlY3RvcnkNCgkJCQkkZW9kaXJbJ3RvdGFsX2VudHJpZXNfdGhp cyddID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIHRvdGFsIG51bWJlciBvZiBl bnRyaWVzIGluIHRoZSBjZW50cmFsIGRpciBvbiB0aGlzIGRpc2sNCgkJCQkkZW9kaXJbJ3Rv dGFsX2VudHJpZXMnXSAgICAgID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIHRv dGFsIG51bWJlciBvZiBlbnRyaWVzIGluDQoJCQkJJGVvZGlyWydzaXplX29mX2NkJ10gICAg ICAgICA9IHVucGFjaygiViIsIGZyZWFkKCRmaCwgNCkpOyAvLyBzaXplIG9mIHRoZSBjZW50 cmFsIGRpcmVjdG9yeQ0KCQkJCSRlb2Rpclsnb2Zmc2V0X3N0YXJ0X2NkJ10gICAgPSB1bnBh Y2soIlYiLCBmcmVhZCgkZmgsIDQpKTsgLy8gb2Zmc2V0IG9mIHN0YXJ0IG9mIGNlbnRyYWwg ZGlyZWN0b3J5IHdpdGggcmVzcGVjdCB0byB0aGUgc3RhcnRpbmcgZGlzayBudW1iZXINCgkJ CQkkemlwRmlsZUNvbW1lbnRMZW5naHQgICAgICAgID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZo LCAyKSk7IC8vIHppcGZpbGUgY29tbWVudCBsZW5ndGgNCgkJCQkkZW9kaXJbJ3ppcGZpbGVf Y29tbWVudCddICAgID0gJHppcEZpbGVDb21tZW50TGVuZ2h0WzFdP2ZyZWFkKCRmaCwgJHpp cEZpbGVDb21tZW50TGVuZ2h0WzFdKTonJzsgLy8gemlwZmlsZSBjb21tZW50DQoJCQkJJHRo aXMtPmVuZE9mQ2VudHJhbCA9IEFycmF5KA0KCQkJCQknZGlza19udW1iZXJfdGhpcyc9PiRl b2RpclsnZGlza19udW1iZXJfdGhpcyddWzFdLA0KCQkJCQknZGlza19udW1iZXInPT4kZW9k aXJbJ2Rpc2tfbnVtYmVyJ11bMV0sDQoJCQkJCSd0b3RhbF9lbnRyaWVzX3RoaXMnPT4kZW9k aXJbJ3RvdGFsX2VudHJpZXNfdGhpcyddWzFdLA0KCQkJCQkndG90YWxfZW50cmllcyc9PiRl b2RpclsndG90YWxfZW50cmllcyddWzFdLA0KCQkJCQknc2l6ZV9vZl9jZCc9PiRlb2Rpclsn c2l6ZV9vZl9jZCddWzFdLA0KCQkJCQknb2Zmc2V0X3N0YXJ0X2NkJz0+JGVvZGlyWydvZmZz ZXRfc3RhcnRfY2QnXVsxXSwNCgkJCQkJJ3ppcGZpbGVfY29tbWVudCc9PiRlb2Rpclsnemlw ZmlsZV9jb21tZW50J10sDQoJCQkJKTsNCgkJCQkNCgkJCQkvLyBUaGVuLCBsb2FkIGZpbGUg bGlzdA0KCQkJCWZzZWVrKCRmaCwgJHRoaXMtPmVuZE9mQ2VudHJhbFsnb2Zmc2V0X3N0YXJ0 X2NkJ10pOw0KCQkJCSRzaWduYXR1cmUgPSBmcmVhZCgkZmgsIDQpOw0KCQkJCQ0KCQkJCXdo aWxlKCRzaWduYXR1cmUgPT0gJHRoaXMtPmRpclNpZ25hdHVyZSl7DQoJCQkJCSRkaXJbJ3Zl cnNpb25fbWFkZWJ5J10gICAgICA9IHVucGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyB2 ZXJzaW9uIG1hZGUgYnkNCgkJCQkJJGRpclsndmVyc2lvbl9uZWVkZWQnXSAgICAgID0gdW5w YWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIHZlcnNpb24gbmVlZGVkIHRvIGV4dHJhY3QN CgkJCQkJJGRpclsnZ2VuZXJhbF9iaXRfZmxhZyddICAgID0gdW5wYWNrKCJ2IiwgZnJlYWQo JGZoLCAyKSk7IC8vIGdlbmVyYWwgcHVycG9zZSBiaXQgZmxhZw0KCQkJCQkkZGlyWydjb21w cmVzc2lvbl9tZXRob2QnXSAgPSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gY29t cHJlc3Npb24gbWV0aG9kDQoJCQkJCSRkaXJbJ2xhc3Rtb2RfdGltZSddICAgICAgICA9IHVu cGFjaygidiIsIGZyZWFkKCRmaCwgMikpOyAvLyBsYXN0IG1vZCBmaWxlIHRpbWUNCgkJCQkJ JGRpclsnbGFzdG1vZF9kYXRlJ10gICAgICAgID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAy KSk7IC8vIGxhc3QgbW9kIGZpbGUgZGF0ZQ0KCQkJCQkkZGlyWydjcmMtMzInXSAgICAgICAg ICAgICAgPSBmcmVhZCgkZmgsIDQpOyAgICAgICAgICAgICAgLy8gY3JjLTMyDQoJCQkJCSRk aXJbJ2NvbXByZXNzZWRfc2l6ZSddICAgICA9IHVucGFjaygiViIsIGZyZWFkKCRmaCwgNCkp OyAvLyBjb21wcmVzc2VkIHNpemUNCgkJCQkJJGRpclsndW5jb21wcmVzc2VkX3NpemUnXSAg ID0gdW5wYWNrKCJWIiwgZnJlYWQoJGZoLCA0KSk7IC8vIHVuY29tcHJlc3NlZCBzaXplDQoJ CQkJCSRmaWxlTmFtZUxlbmd0aCAgICAgICAgICAgICA9IHVucGFjaygidiIsIGZyZWFkKCRm aCwgMikpOyAvLyBmaWxlbmFtZSBsZW5ndGgNCgkJCQkJJGV4dHJhRmllbGRMZW5ndGggICAg ICAgICAgID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIGV4dHJhIGZpZWxkIGxl bmd0aA0KCQkJCQkkZmlsZUNvbW1lbnRMZW5ndGggICAgICAgICAgPSB1bnBhY2soInYiLCBm cmVhZCgkZmgsIDIpKTsgLy8gZmlsZSBjb21tZW50IGxlbmd0aA0KCQkJCQkkZGlyWydkaXNr X251bWJlcl9zdGFydCddICAgPSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gZGlz ayBudW1iZXIgc3RhcnQNCgkJCQkJJGRpclsnaW50ZXJuYWxfYXR0cmlidXRlcyddID0gdW5w YWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIGludGVybmFsIGZpbGUgYXR0cmlidXRlcy1i eXRlMQ0KCQkJCQkkZGlyWydleHRlcm5hbF9hdHRyaWJ1dGVzMSddPSB1bnBhY2soInYiLCBm cmVhZCgkZmgsIDIpKTsgLy8gZXh0ZXJuYWwgZmlsZSBhdHRyaWJ1dGVzLWJ5dGUyDQoJCQkJ CSRkaXJbJ2V4dGVybmFsX2F0dHJpYnV0ZXMyJ109IHVucGFjaygidiIsIGZyZWFkKCRmaCwg MikpOyAvLyBleHRlcm5hbCBmaWxlIGF0dHJpYnV0ZXMNCgkJCQkJJGRpclsncmVsYXRpdmVf b2Zmc2V0J10gICAgID0gdW5wYWNrKCJWIiwgZnJlYWQoJGZoLCA0KSk7IC8vIHJlbGF0aXZl IG9mZnNldCBvZiBsb2NhbCBoZWFkZXINCgkJCQkJJGRpclsnZmlsZV9uYW1lJ10gICAgICAg ICAgID0gZnJlYWQoJGZoLCAkZmlsZU5hbWVMZW5ndGhbMV0pOyAgICAgICAgICAgICAgICAg ICAgICAgICAgICAgLy8gZmlsZW5hbWUNCgkJCQkJJGRpclsnZXh0cmFfZmllbGQnXSAgICAg ICAgID0gJGV4dHJhRmllbGRMZW5ndGhbMV0gP2ZyZWFkKCRmaCwgJGV4dHJhRmllbGRMZW5n dGhbMV0pIDonJzsgLy8gZXh0cmEgZmllbGQNCgkJCQkJJGRpclsnZmlsZV9jb21tZW50J10g ICAgICAgID0gJGZpbGVDb21tZW50TGVuZ3RoWzFdP2ZyZWFkKCRmaCwgJGZpbGVDb21tZW50 TGVuZ3RoWzFdKTonJzsgLy8gZmlsZSBjb21tZW50CQkJDQoJCQkJCQ0KCQkJCQkvLyBDb252 ZXJ0IHRoZSBkYXRlIGFuZCB0aW1lLCBmcm9tIE1TLURPUyBmb3JtYXQgdG8gVU5JWCBUaW1l c3RhbXANCgkJCQkJJEJJTmxhc3Rtb2RfZGF0ZSA9IHN0cl9wYWQoZGVjYmluKCRkaXJbJ2xh c3Rtb2RfZGF0ZSddWzFdKSwgMTYsICcwJywgU1RSX1BBRF9MRUZUKTsNCgkJCQkJJEJJTmxh c3Rtb2RfdGltZSA9IHN0cl9wYWQoZGVjYmluKCRkaXJbJ2xhc3Rtb2RfdGltZSddWzFdKSwg MTYsICcwJywgU1RSX1BBRF9MRUZUKTsNCgkJCQkJJGxhc3Rtb2RfZGF0ZVkgPSBiaW5kZWMo c3Vic3RyKCRCSU5sYXN0bW9kX2RhdGUsICAwLCA3KSkrMTk4MDsNCgkJCQkJJGxhc3Rtb2Rf ZGF0ZU0gPSBiaW5kZWMoc3Vic3RyKCRCSU5sYXN0bW9kX2RhdGUsICA3LCA0KSk7DQoJCQkJ CSRsYXN0bW9kX2RhdGVEID0gYmluZGVjKHN1YnN0cigkQklObGFzdG1vZF9kYXRlLCAxMSwg NSkpOw0KCQkJCQkkbGFzdG1vZF90aW1lSCA9IGJpbmRlYyhzdWJzdHIoJEJJTmxhc3Rtb2Rf dGltZSwgICAwLCA1KSk7DQoJCQkJCSRsYXN0bW9kX3RpbWVNID0gYmluZGVjKHN1YnN0cigk QklObGFzdG1vZF90aW1lLCAgIDUsIDYpKTsNCgkJCQkJJGxhc3Rtb2RfdGltZVMgPSBiaW5k ZWMoc3Vic3RyKCRCSU5sYXN0bW9kX3RpbWUsICAxMSwgNSkpOwkNCgkJCQkJDQoJCQkJCS8v IFNvbWUgcHJvdGVjdGlvbiBhZ2FpbnMgYXR0YWNrcy4uLg0KCQkJCQkkZGlyWydmaWxlX25h bWUnXSAgICAgPSAkdGhpcy0+X2RlY29kZUZpbGVuYW1lKCRkaXJbJ2ZpbGVfbmFtZSddKTsN CgkJCQkJaWYoISRkaXJbJ2ZpbGVfbmFtZSddID0gJHRoaXMtPl9wcm90ZWN0KCRkaXJbJ2Zp bGVfbmFtZSddKSkNCgkJCQkJCWNvbnRpbnVlOw0KCQkJCQkNCgkJCQkJJHRoaXMtPmNlbnRy YWxEaXJMaXN0WyRkaXJbJ2ZpbGVfbmFtZSddXSA9IEFycmF5KA0KCQkJCQkJJ3ZlcnNpb25f bWFkZWJ5Jz0+JGRpclsndmVyc2lvbl9tYWRlYnknXVsxXSwNCgkJCQkJCSd2ZXJzaW9uX25l ZWRlZCc9PiRkaXJbJ3ZlcnNpb25fbmVlZGVkJ11bMV0sDQoJCQkJCQknZ2VuZXJhbF9iaXRf ZmxhZyc9PnN0cl9wYWQoZGVjYmluKCRkaXJbJ2dlbmVyYWxfYml0X2ZsYWcnXVsxXSksIDgs ICcwJywgU1RSX1BBRF9MRUZUKSwNCgkJCQkJCSdjb21wcmVzc2lvbl9tZXRob2QnPT4kZGly Wydjb21wcmVzc2lvbl9tZXRob2QnXVsxXSwNCgkJCQkJCSdsYXN0bW9kX2RhdGV0aW1lJyAg PT5ta3RpbWUoJGxhc3Rtb2RfdGltZUgsICRsYXN0bW9kX3RpbWVNLCAkbGFzdG1vZF90aW1l UywgJGxhc3Rtb2RfZGF0ZU0sICRsYXN0bW9kX2RhdGVELCAkbGFzdG1vZF9kYXRlWSksDQoJ CQkJCQknY3JjLTMyJyAgICAgICAgICAgID0+c3RyX3BhZChkZWNoZXgob3JkKCRkaXJbJ2Ny Yy0zMiddWzNdKSksIDIsICcwJywgU1RSX1BBRF9MRUZUKS4NCgkJCQkJCQkJCQkJICBzdHJf cGFkKGRlY2hleChvcmQoJGRpclsnY3JjLTMyJ11bMl0pKSwgMiwgJzAnLCBTVFJfUEFEX0xF RlQpLg0KCQkJCQkJCQkJCQkgIHN0cl9wYWQoZGVjaGV4KG9yZCgkZGlyWydjcmMtMzInXVsx XSkpLCAyLCAnMCcsIFNUUl9QQURfTEVGVCkuDQoJCQkJCQkJCQkJCSAgc3RyX3BhZChkZWNo ZXgob3JkKCRkaXJbJ2NyYy0zMiddWzBdKSksIDIsICcwJywgU1RSX1BBRF9MRUZUKSwNCgkJ CQkJCSdjb21wcmVzc2VkX3NpemUnPT4kZGlyWydjb21wcmVzc2VkX3NpemUnXVsxXSwNCgkJ CQkJCSd1bmNvbXByZXNzZWRfc2l6ZSc9PiRkaXJbJ3VuY29tcHJlc3NlZF9zaXplJ11bMV0s DQoJCQkJCQknZGlza19udW1iZXJfc3RhcnQnPT4kZGlyWydkaXNrX251bWJlcl9zdGFydCdd WzFdLA0KCQkJCQkJJ2ludGVybmFsX2F0dHJpYnV0ZXMnPT4kZGlyWydpbnRlcm5hbF9hdHRy aWJ1dGVzJ11bMV0sDQoJCQkJCQknZXh0ZXJuYWxfYXR0cmlidXRlczEnPT4kZGlyWydleHRl cm5hbF9hdHRyaWJ1dGVzMSddWzFdLA0KCQkJCQkJJ2V4dGVybmFsX2F0dHJpYnV0ZXMyJz0+ JGRpclsnZXh0ZXJuYWxfYXR0cmlidXRlczInXVsxXSwNCgkJCQkJCSdyZWxhdGl2ZV9vZmZz ZXQnPT4kZGlyWydyZWxhdGl2ZV9vZmZzZXQnXVsxXSwNCgkJCQkJCSdmaWxlX25hbWUnPT4k ZGlyWydmaWxlX25hbWUnXSwNCgkJCQkJCSdleHRyYV9maWVsZCc9PiRkaXJbJ2V4dHJhX2Zp ZWxkJ10sDQoJCQkJCQknZmlsZV9jb21tZW50Jz0+JGRpclsnZmlsZV9jb21tZW50J10sDQoJ CQkJCSk7DQoJCQkJCSRzaWduYXR1cmUgPSBmcmVhZCgkZmgsIDQpOw0KCQkJCX0NCgkJCQkN CgkJCQkvLyBJZiBsb2FkZWQgY2VudHJhbERpcnMsIHRoZW4gdHJ5IHRvIGlkZW50aWZ5IHRo ZSBvZmZzZXRQb3NpdGlvbiBvZiB0aGUgY29tcHJlc3NlZCBkYXRhLg0KCQkJCWlmKCR0aGlz LT5jZW50cmFsRGlyTGlzdCkgZm9yZWFjaCgkdGhpcy0+Y2VudHJhbERpckxpc3QgYXMgJGZp bGVuYW1lPT4kZGV0YWlscyl7DQoJCQkJCSRpID0gJHRoaXMtPl9nZXRGaWxlSGVhZGVySW5m b3JtYXRpb24oJGZoLCAkZGV0YWlsc1sncmVsYXRpdmVfb2Zmc2V0J10pOw0KCQkJCQkkdGhp cy0+Y29tcHJlc3NlZExpc3RbJGZpbGVuYW1lXVsnZmlsZV9uYW1lJ10gICAgICAgICAgPSAk ZmlsZW5hbWU7DQoJCQkJCSR0aGlzLT5jb21wcmVzc2VkTGlzdFskZmlsZW5hbWVdWydjb21w cmVzc2lvbl9tZXRob2QnXSA9ICRkZXRhaWxzWydjb21wcmVzc2lvbl9tZXRob2QnXTsNCgkJ CQkJJHRoaXMtPmNvbXByZXNzZWRMaXN0WyRmaWxlbmFtZV1bJ3ZlcnNpb25fbmVlZGVkJ10g ICAgID0gJGRldGFpbHNbJ3ZlcnNpb25fbmVlZGVkJ107DQoJCQkJCSR0aGlzLT5jb21wcmVz c2VkTGlzdFskZmlsZW5hbWVdWydsYXN0bW9kX2RhdGV0aW1lJ10gICA9ICRkZXRhaWxzWyds YXN0bW9kX2RhdGV0aW1lJ107DQoJCQkJCSR0aGlzLT5jb21wcmVzc2VkTGlzdFskZmlsZW5h bWVdWydjcmMtMzInXSAgICAgICAgICAgICA9ICRkZXRhaWxzWydjcmMtMzInXTsNCgkJCQkJ JHRoaXMtPmNvbXByZXNzZWRMaXN0WyRmaWxlbmFtZV1bJ2NvbXByZXNzZWRfc2l6ZSddICAg ID0gJGRldGFpbHNbJ2NvbXByZXNzZWRfc2l6ZSddOw0KCQkJCQkkdGhpcy0+Y29tcHJlc3Nl ZExpc3RbJGZpbGVuYW1lXVsndW5jb21wcmVzc2VkX3NpemUnXSAgPSAkZGV0YWlsc1sndW5j b21wcmVzc2VkX3NpemUnXTsNCgkJCQkJJHRoaXMtPmNvbXByZXNzZWRMaXN0WyRmaWxlbmFt ZV1bJ2xhc3Rtb2RfZGF0ZXRpbWUnXSAgID0gJGRldGFpbHNbJ2xhc3Rtb2RfZGF0ZXRpbWUn XTsNCgkJCQkJJHRoaXMtPmNvbXByZXNzZWRMaXN0WyRmaWxlbmFtZV1bJ2V4dHJhX2ZpZWxk J10gICAgICAgID0gJGlbJ2V4dHJhX2ZpZWxkJ107DQoJCQkJCSR0aGlzLT5jb21wcmVzc2Vk TGlzdFskZmlsZW5hbWVdWydjb250ZW50cy1zdGFydE9mZnNldCddPSRpWydjb250ZW50cy1z dGFydE9mZnNldCddOw0KCQkJCQlpZihzdHJ0b2xvd2VyKCRzdG9wT25GaWxlKSA9PSBzdHJ0 b2xvd2VyKCRmaWxlbmFtZSkpDQoJCQkJCQlicmVhazsNCgkJCQl9DQoJCQkJcmV0dXJuIHRy dWU7DQoJCQl9DQoJCX0NCgkJcmV0dXJuIGZhbHNlOw0KCX0NCglGdW5jdGlvbiBfbG9hZEZp bGVMaXN0QnlTaWduYXR1cmVzKCYkZmgsICRzdG9wT25GaWxlPWZhbHNlKXsNCgkJZnNlZWso JGZoLCAwKTsNCgkJDQoJCSRyZXR1cm4gPSBmYWxzZTsNCgkJZm9yKDs7KXsNCgkJCSRkZXRh aWxzID0gJHRoaXMtPl9nZXRGaWxlSGVhZGVySW5mb3JtYXRpb24oJGZoKTsNCgkJCWlmKCEk ZGV0YWlscyl7DQoJCQkJJHRoaXMtPmRlYnVnTXNnKDEsICJJbnZhbGlkIHNpZ25hdHVyZS4g VHJ5aW5nIHRvIHZlcmlmeSBpZiBpcyBvbGQgc3R5bGUgRGF0YSBEZXNjcmlwdG9yLi4uIik7 DQoJCQkJZnNlZWsoJGZoLCAxMiAtIDQsIFNFRUtfQ1VSKTsgLy8gMTI6IERhdGEgZGVzY3Jp cHRvciAtIDQ6IFNpZ25hdHVyZSAodGhhdCB3aWxsIGJlIHJlYWQgYWdhaW4pDQoJCQkJJGRl dGFpbHMgPSAkdGhpcy0+X2dldEZpbGVIZWFkZXJJbmZvcm1hdGlvbigkZmgpOw0KCQkJfQ0K CQkJaWYoISRkZXRhaWxzKXsNCgkJCQkkdGhpcy0+ZGVidWdNc2coMSwgIlN0aWxsIGludmFs aWQgc2lnbmF0dXJlLiBQcm9iYWJseSByZWFjaGVkIHRoZSBlbmQgb2YgdGhlIGZpbGUuIik7 DQoJCQkJYnJlYWs7DQoJCQl9DQoJCQkkZmlsZW5hbWUgPSAkZGV0YWlsc1snZmlsZV9uYW1l J107DQoJCQkkdGhpcy0+Y29tcHJlc3NlZExpc3RbJGZpbGVuYW1lXSA9ICRkZXRhaWxzOw0K CQkJJHJldHVybiA9IHRydWU7DQoJCQlpZihzdHJ0b2xvd2VyKCRzdG9wT25GaWxlKSA9PSBz dHJ0b2xvd2VyKCRmaWxlbmFtZSkpDQoJCQkJYnJlYWs7DQoJCX0NCgkJDQoJCXJldHVybiAk cmV0dXJuOw0KCX0NCglGdW5jdGlvbiBfZ2V0RmlsZUhlYWRlckluZm9ybWF0aW9uKCYkZmgs ICRzdGFydE9mZnNldD1mYWxzZSl7DQoJCWlmKCRzdGFydE9mZnNldCAhPT0gZmFsc2UpDQoJ CQlmc2VlaygkZmgsICRzdGFydE9mZnNldCk7DQoJCQ0KCQkkc2lnbmF0dXJlID0gZnJlYWQo JGZoLCA0KTsNCgkJaWYoJHNpZ25hdHVyZSA9PSAkdGhpcy0+emlwU2lnbmF0dXJlKXsNCgkJ CSMgJHRoaXMtPmRlYnVnTXNnKDEsICJaaXAgU2lnbmF0dXJlISIpOw0KCQkJDQoJCQkvLyBH ZXQgaW5mb3JtYXRpb24gYWJvdXQgdGhlIHppcHBlZCBmaWxlDQoJCQkkZmlsZVsndmVyc2lv bl9uZWVkZWQnXSAgICAgPSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gdmVyc2lv biBuZWVkZWQgdG8gZXh0cmFjdA0KCQkJJGZpbGVbJ2dlbmVyYWxfYml0X2ZsYWcnXSAgID0g dW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIGdlbmVyYWwgcHVycG9zZSBiaXQgZmxh Zw0KCQkJJGZpbGVbJ2NvbXByZXNzaW9uX21ldGhvZCddID0gdW5wYWNrKCJ2IiwgZnJlYWQo JGZoLCAyKSk7IC8vIGNvbXByZXNzaW9uIG1ldGhvZA0KCQkJJGZpbGVbJ2xhc3Rtb2RfdGlt ZSddICAgICAgID0gdW5wYWNrKCJ2IiwgZnJlYWQoJGZoLCAyKSk7IC8vIGxhc3QgbW9kIGZp bGUgdGltZQ0KCQkJJGZpbGVbJ2xhc3Rtb2RfZGF0ZSddICAgICAgID0gdW5wYWNrKCJ2Iiwg ZnJlYWQoJGZoLCAyKSk7IC8vIGxhc3QgbW9kIGZpbGUgZGF0ZQ0KCQkJJGZpbGVbJ2NyYy0z MiddICAgICAgICAgICAgID0gZnJlYWQoJGZoLCA0KTsgICAgICAgICAgICAgIC8vIGNyYy0z Mg0KCQkJJGZpbGVbJ2NvbXByZXNzZWRfc2l6ZSddICAgID0gdW5wYWNrKCJWIiwgZnJlYWQo JGZoLCA0KSk7IC8vIGNvbXByZXNzZWQgc2l6ZQ0KCQkJJGZpbGVbJ3VuY29tcHJlc3NlZF9z aXplJ10gID0gdW5wYWNrKCJWIiwgZnJlYWQoJGZoLCA0KSk7IC8vIHVuY29tcHJlc3NlZCBz aXplDQoJCQkkZmlsZU5hbWVMZW5ndGggICAgICAgICAgICAgPSB1bnBhY2soInYiLCBmcmVh ZCgkZmgsIDIpKTsgLy8gZmlsZW5hbWUgbGVuZ3RoDQoJCQkkZXh0cmFGaWVsZExlbmd0aCAg ICAgICAgICAgPSB1bnBhY2soInYiLCBmcmVhZCgkZmgsIDIpKTsgLy8gZXh0cmEgZmllbGQg bGVuZ3RoDQoJCQkkZmlsZVsnZmlsZV9uYW1lJ10gICAgICAgICAgPSBmcmVhZCgkZmgsICRm aWxlTmFtZUxlbmd0aFsxXSk7IC8vIGZpbGVuYW1lDQoJCQkkZmlsZVsnZXh0cmFfZmllbGQn XSAgICAgICAgPSAkZXh0cmFGaWVsZExlbmd0aFsxXT9mcmVhZCgkZmgsICRleHRyYUZpZWxk TGVuZ3RoWzFdKTonJzsgLy8gZXh0cmEgZmllbGQNCgkJCSRmaWxlWydjb250ZW50cy1zdGFy dE9mZnNldCddPSBmdGVsbCgkZmgpOw0KCQkJDQoJCQkvLyBCeXBhc3MgdGhlIHdob2xlIGNv bXByZXNzZWQgY29udGVudHMsIGFuZCBsb29rIGZvciB0aGUgbmV4dCBmaWxlDQoJCQlmc2Vl aygkZmgsICRmaWxlWydjb21wcmVzc2VkX3NpemUnXVsxXSwgU0VFS19DVVIpOw0KCQkJDQoJ CQkvLyBDb252ZXJ0IHRoZSBkYXRlIGFuZCB0aW1lLCBmcm9tIE1TLURPUyBmb3JtYXQgdG8g VU5JWCBUaW1lc3RhbXANCgkJCSRCSU5sYXN0bW9kX2RhdGUgPSBzdHJfcGFkKGRlY2Jpbigk ZmlsZVsnbGFzdG1vZF9kYXRlJ11bMV0pLCAxNiwgJzAnLCBTVFJfUEFEX0xFRlQpOw0KCQkJ JEJJTmxhc3Rtb2RfdGltZSA9IHN0cl9wYWQoZGVjYmluKCRmaWxlWydsYXN0bW9kX3RpbWUn XVsxXSksIDE2LCAnMCcsIFNUUl9QQURfTEVGVCk7DQoJCQkkbGFzdG1vZF9kYXRlWSA9IGJp bmRlYyhzdWJzdHIoJEJJTmxhc3Rtb2RfZGF0ZSwgIDAsIDcpKSsxOTgwOw0KCQkJJGxhc3Rt b2RfZGF0ZU0gPSBiaW5kZWMoc3Vic3RyKCRCSU5sYXN0bW9kX2RhdGUsICA3LCA0KSk7DQoJ CQkkbGFzdG1vZF9kYXRlRCA9IGJpbmRlYyhzdWJzdHIoJEJJTmxhc3Rtb2RfZGF0ZSwgMTEs IDUpKTsNCgkJCSRsYXN0bW9kX3RpbWVIID0gYmluZGVjKHN1YnN0cigkQklObGFzdG1vZF90 aW1lLCAgIDAsIDUpKTsNCgkJCSRsYXN0bW9kX3RpbWVNID0gYmluZGVjKHN1YnN0cigkQklO bGFzdG1vZF90aW1lLCAgIDUsIDYpKTsNCgkJCSRsYXN0bW9kX3RpbWVTID0gYmluZGVjKHN1 YnN0cigkQklObGFzdG1vZF90aW1lLCAgMTEsIDUpKTsNCgkJCQ0KCQkJLy8gU29tZSBwcm90 ZWN0aW9uIGFnYWlucyBhdHRhY2tzLi4uDQoJCQkkZmlsZVsnZmlsZV9uYW1lJ10gICAgID0g JHRoaXMtPl9kZWNvZGVGaWxlbmFtZSgkZmlsZVsnZmlsZV9uYW1lJ10pOw0KCQkJaWYoISRm aWxlWydmaWxlX25hbWUnXSA9ICR0aGlzLT5fcHJvdGVjdCgkZmlsZVsnZmlsZV9uYW1lJ10p KQ0KCQkJCXJldHVybiBmYWxzZTsNCgkJCQ0KCQkJLy8gTW91bnQgZmlsZSB0YWJsZQ0KCQkJ JGkgPSBBcnJheSgNCgkJCQknZmlsZV9uYW1lJyAgICAgICAgID0+JGZpbGVbJ2ZpbGVfbmFt ZSddLA0KCQkJCSdjb21wcmVzc2lvbl9tZXRob2QnPT4kZmlsZVsnY29tcHJlc3Npb25fbWV0 aG9kJ11bMV0sDQoJCQkJJ3ZlcnNpb25fbmVlZGVkJyAgICA9PiRmaWxlWyd2ZXJzaW9uX25l ZWRlZCddWzFdLA0KCQkJCSdsYXN0bW9kX2RhdGV0aW1lJyAgPT5ta3RpbWUoJGxhc3Rtb2Rf dGltZUgsICRsYXN0bW9kX3RpbWVNLCAkbGFzdG1vZF90aW1lUywgJGxhc3Rtb2RfZGF0ZU0s ICRsYXN0bW9kX2RhdGVELCAkbGFzdG1vZF9kYXRlWSksDQoJCQkJJ2NyYy0zMicgICAgICAg ICAgICA9PnN0cl9wYWQoZGVjaGV4KG9yZCgkZmlsZVsnY3JjLTMyJ11bM10pKSwgMiwgJzAn LCBTVFJfUEFEX0xFRlQpLg0KCQkJCQkJCQkJICBzdHJfcGFkKGRlY2hleChvcmQoJGZpbGVb J2NyYy0zMiddWzJdKSksIDIsICcwJywgU1RSX1BBRF9MRUZUKS4NCgkJCQkJCQkJCSAgc3Ry X3BhZChkZWNoZXgob3JkKCRmaWxlWydjcmMtMzInXVsxXSkpLCAyLCAnMCcsIFNUUl9QQURf TEVGVCkuDQoJCQkJCQkJCQkgIHN0cl9wYWQoZGVjaGV4KG9yZCgkZmlsZVsnY3JjLTMyJ11b MF0pKSwgMiwgJzAnLCBTVFJfUEFEX0xFRlQpLA0KCQkJCSdjb21wcmVzc2VkX3NpemUnICAg PT4kZmlsZVsnY29tcHJlc3NlZF9zaXplJ11bMV0sDQoJCQkJJ3VuY29tcHJlc3NlZF9zaXpl JyA9PiRmaWxlWyd1bmNvbXByZXNzZWRfc2l6ZSddWzFdLA0KCQkJCSdleHRyYV9maWVsZCcg ICAgICAgPT4kZmlsZVsnZXh0cmFfZmllbGQnXSwNCgkJCQknZ2VuZXJhbF9iaXRfZmxhZycg ID0+c3RyX3BhZChkZWNiaW4oJGZpbGVbJ2dlbmVyYWxfYml0X2ZsYWcnXVsxXSksIDgsICcw JywgU1RSX1BBRF9MRUZUKSwNCgkJCQknY29udGVudHMtc3RhcnRPZmZzZXQnPT4kZmlsZVsn Y29udGVudHMtc3RhcnRPZmZzZXQnXQ0KCQkJKTsNCgkJCXJldHVybiAkaTsNCgkJfQ0KCQly ZXR1cm4gZmFsc2U7DQoJfQ0KCQ0KCUZ1bmN0aW9uIF9kZWNvZGVGaWxlbmFtZSgkZmlsZW5h bWUpew0KCQkkZnJvbSA9ICJceGI3XHhiNVx4YjZceGM3XHg4ZVx4OGZceDkyXHg4MFx4ZDRc eDkwXHhkMlx4ZDNceGRlXHhkNlx4ZDdceGQ4XHhkMVx4YTVceGUzXHhlMCIuDQoJCSAgICAg ICAgIlx4ZTJceGU1XHg5OVx4OWRceGViXHhlOVx4ZWFceDlhXHhlZFx4ZThceGUxXHg4NVx4 YTBceDgzXHhjNlx4ODRceDg2XHg5MVx4ODdceDhhIi4NCgkJCQkiXHg4Mlx4ODhceDg5XHg4 ZFx4YTFceDhjXHg4Ylx4ZDBceGE0XHg5NVx4YTJceDkzXHhlNFx4OTRceDliXHg5N1x4YTNc eDk2XHhlY1x4ZTciLg0KCQkJCSJceDk4w68iOw0KCQkkdG8gICA9ICLDgMOBw4LDg8OEw4XD hsOHw4jDicOKw4vDjMONw47Dj8OQw5HDksOTw5TDlcOWw5jDmcOaw5vDnMOdw57Dn8Ogw6HD osOjw6TDpcOmw6fDqMOpw6rDq8Osw63DrsOvw7DDscOyw7PDtMO1w7bDuMO5w7rDu8O9w77D v8K0IjsNCg0KCQlyZXR1cm4gc3RydHIoJGZpbGVuYW1lLCAkZnJvbSwgJHRvKTsNCgl9DQoJ RnVuY3Rpb24gX3Byb3RlY3QoJGZ1bGxQYXRoKXsNCgkJLy8gS25vd24gaGFjay1hdHRhY2tz IChmaWxlbmFtZSBsaWtlKToNCgkJLy8gICAvaG9tZS91c3INCgkJLy8gICAuLi8uLi9ob21l L3Vzcg0KCQkvLyAgIGZvbGRlci8uLi8uLi8uLi9ob21lL3Vzcg0KCQkvLyAgIHNhbXBsZS8o eDApLi4vaG9tZS91c3INCgkJDQoJCSRmdWxsUGF0aCA9IHN0cnRyKCRmdWxsUGF0aCwgIjoq PD58XCJceDBcXCIsICIuLi4uLi4uLyIpOw0KCQl3aGlsZSgkZnVsbFBhdGhbMF0gPT0gIi8i KQ0KCQkJJGZ1bGxQYXRoID0gc3Vic3RyKCRmdWxsUGF0aCwgMSk7DQoJCQ0KCQlpZihzdWJz dHIoJGZ1bGxQYXRoLCAtMSkgPT0gIi8iKXsNCgkJCSRiYXNlICAgICA9ICcnOw0KCQkJJGZ1 bGxQYXRoID0gc3Vic3RyKCRmdWxsUGF0aCwgMCwgLTEpOw0KCQl9DQoJCWVsc2V7DQoJCQkk YmFzZSAgICAgPSBiYXNlbmFtZSgkZnVsbFBhdGgpOw0KCQkJJGZ1bGxQYXRoID0gZGlybmFt ZSgkZnVsbFBhdGgpOw0KCQl9DQoJCQ0KCQkkcGFydHMgICA9IGV4cGxvZGUoIi8iLCAkZnVs bFBhdGgpOw0KCQkkbGFzdElkeCA9IGZhbHNlOw0KCQlmb3JlYWNoKCRwYXJ0cyBhcyAkaWR4 PT4kcGFydCl7DQoJCQlpZigkcGFydCA9PSAiLiIpDQoJCQkJdW5zZXQoJHBhcnRzWyRpZHhd KTsNCgkJCWVsc2VpZigkcGFydCA9PSAiLi4iKXsNCgkJCQl1bnNldCgkcGFydHNbJGlkeF0p Ow0KCQkJCWlmKCRsYXN0SWR4ICE9PSBmYWxzZSl7DQoJCQkJCXVuc2V0KCRwYXJ0c1skbGFz dElkeF0pOw0KCQkJCX0NCgkJCX0NCgkJCWVsc2VpZigkcGFydCA9PT0gJycpew0KCQkJCXVu c2V0KCRwYXJ0c1skaWR4XSk7DQoJCQl9DQoJCQllbHNlew0KCQkJCSRsYXN0SWR4ID0gJGlk eDsNCgkJCX0NCgkJfQ0KCQkNCgkJJGZ1bGxQYXRoID0gc2l6ZW9mKCRwYXJ0cyk/aW1wbG9k ZSgiLyIsICRwYXJ0cykuIi8iOiIiOw0KCQlyZXR1cm4gJGZ1bGxQYXRoLiRiYXNlOw0KCX0N Cn0NCg0KY2xhc3Mgc21kX2NydW5jaF9kWmlwew0KCXZhciAkZmlsZW5hbWU7DQoJdmFyICRv dmVyd3JpdGU7DQoNCgl2YXIgJHppcFNpZ25hdHVyZSA9ICJceDUwXHg0Ylx4MDNceDA0Ijsg Ly8gbG9jYWwgZmlsZSBoZWFkZXIgc2lnbmF0dXJlDQoJdmFyICRkaXJTaWduYXR1cmUgPSAi XHg1MFx4NGJceDAxXHgwMiI7IC8vIGNlbnRyYWwgZGlyIGhlYWRlciBzaWduYXR1cmUNCgl2 YXIgJGRpclNpZ25hdHVyZUU9ICJceDUwXHg0Ylx4MDVceDA2IjsgLy8gZW5kIG9mIGNlbnRy YWwgZGlyIHNpZ25hdHVyZQ0KCXZhciAkZmlsZXNfY291bnQgID0gMDsNCgl2YXIgJGZoOw0K DQoJRnVuY3Rpb24gc21kX2NydW5jaF9kWmlwKCRmaWxlbmFtZSwgJG92ZXJ3cml0ZT10cnVl KXsNCgkJJHRoaXMtPmZpbGVuYW1lICA9ICRmaWxlbmFtZTsNCgkJJHRoaXMtPm92ZXJ3cml0 ZSA9ICRvdmVyd3JpdGU7DQoJfQ0KCUZ1bmN0aW9uIGFkZERpcigkZGlybmFtZSwgJGZpbGVD b21tZW50cz0nJyl7DQoJCWlmKHN1YnN0cigkZGlybmFtZSwgLTEpICE9ICcvJykNCgkJCSRk aXJuYW1lIC49ICcvJzsNCgkJJHRoaXMtPmFkZEZpbGUoZmFsc2UsICRkaXJuYW1lLCAkZmls ZUNvbW1lbnRzKTsNCgl9DQoJRnVuY3Rpb24gYWRkRmlsZSgkZmlsZW5hbWUsICRjZmlsZW5h bWUsICRmaWxlQ29tbWVudHM9JycsICRkYXRhPWZhbHNlKXsNCgkJaWYoISgkZmggPSAmJHRo aXMtPmZoKSkNCgkJCSRmaCA9IGZvcGVuKCR0aGlzLT5maWxlbmFtZSwgJHRoaXMtPm92ZXJ3 cml0ZT8nd2InOidhK2InKTsNCgkJDQoJCS8vICRmaWxlbmFtZSBjYW4gYmUgYSBsb2NhbCBm aWxlIE9SIHRoZSBkYXRhIHdpY2ggd2lsbCBiZSBjb21wcmVzc2VkDQoJCWlmKHN1YnN0cigk Y2ZpbGVuYW1lLCAtMSk9PScvJyl7DQoJCQkkZGV0YWlsc1sndW5jc2l6ZSddID0gMDsNCgkJ CSRkYXRhID0gJyc7DQoJCX0NCgkJZWxzZWlmKGZpbGVfZXhpc3RzKCRmaWxlbmFtZSkpew0K CQkJJGRldGFpbHNbJ3VuY3NpemUnXSA9IGZpbGVzaXplKCRmaWxlbmFtZSk7DQoJCQkkZGF0 YSA9IGZpbGVfZ2V0X2NvbnRlbnRzKCRmaWxlbmFtZSk7DQoJCX0NCgkJZWxzZWlmKCRmaWxl bmFtZSl7DQoJCQllY2hvICI8Yj5DYW5ub3QgYWRkICRmaWxlbmFtZS4gRmlsZSBub3QgZm91 bmQ8L2I+PGJyPiI7DQoJCQlyZXR1cm4gZmFsc2U7DQoJCX0NCgkJZWxzZXsNCgkJCSRkZXRh aWxzWyd1bmNzaXplJ10gPSBzdHJsZW4oJGZpbGVuYW1lKTsNCgkJCS8vIERBVEEgaXMgZ2l2 ZW4uLiB1c2UgaXQhIDp8DQoJCX0NCg0KCQkvLyBpZiBkYXRhIHRvIGNvbXByZXNzIGlzIHRv byBzbWFsbCwganVzdCBzdG9yZSBpdA0KCQlpZigkZGV0YWlsc1sndW5jc2l6ZSddIDwgMjU2 KXsNCgkJCSRkZXRhaWxzWydjb21zaXplJ10gPSAkZGV0YWlsc1sndW5jc2l6ZSddOw0KCQkJ JGRldGFpbHNbJ3ZuZWVkZWQnXSA9IDEwOw0KCQkJJGRldGFpbHNbJ2NtZXRob2QnXSA9IDA7 DQoJCQkkemRhdGEgPSAmJGRhdGE7DQoJCX0NCgkJZWxzZXsgLy8gb3RoZXJ3aXNlLCBjb21w cmVzcyBpdA0KCQkJJHpkYXRhID0gZ3pjb21wcmVzcygkZGF0YSk7DQoJCQkkemRhdGEgPSBz dWJzdHIoc3Vic3RyKCR6ZGF0YSwgMCwgc3RybGVuKCR6ZGF0YSkgLSA0KSwgMik7IC8vIGZp eCBjcmMgYnVnICh0aGFua3MgdG8gRXJpYyBNdWVsbGVyKQ0KCQkJJGRldGFpbHNbJ2NvbXNp emUnXSA9IHN0cmxlbigkemRhdGEpOw0KCQkJJGRldGFpbHNbJ3ZuZWVkZWQnXSA9IDEwOw0K CQkJJGRldGFpbHNbJ2NtZXRob2QnXSA9IDg7DQoJCX0NCgkJDQoJCSRkZXRhaWxzWydiaXRm bGFnJ10gPSAwOw0KCQkkZGV0YWlsc1snY3JjXzMyJ10gID0gY3JjMzIoJGRhdGEpOw0KCQkN CgkJLy8gQ29udmVydCBkYXRlIGFuZCB0aW1lIHRvIERPUyBGb3JtYXQsIGFuZCBzZXQgdGhl bg0KCQkkbGFzdG1vZF90aW1lUyAgPSBzdHJfcGFkKGRlY2JpbihkYXRlKCdzJyk+PTMyP2Rh dGUoJ3MnKS0zMjpkYXRlKCdzJykpLCA1LCAnMCcsIFNUUl9QQURfTEVGVCk7DQoJCSRsYXN0 bW9kX3RpbWVNICA9IHN0cl9wYWQoZGVjYmluKGRhdGUoJ2knKSksIDYsICcwJywgU1RSX1BB RF9MRUZUKTsNCgkJJGxhc3Rtb2RfdGltZUggID0gc3RyX3BhZChkZWNiaW4oZGF0ZSgnSCcp KSwgNSwgJzAnLCBTVFJfUEFEX0xFRlQpOw0KCQkkbGFzdG1vZF9kYXRlRCAgPSBzdHJfcGFk KGRlY2JpbihkYXRlKCdkJykpLCA1LCAnMCcsIFNUUl9QQURfTEVGVCk7DQoJCSRsYXN0bW9k X2RhdGVNICA9IHN0cl9wYWQoZGVjYmluKGRhdGUoJ20nKSksIDQsICcwJywgU1RSX1BBRF9M RUZUKTsNCgkJJGxhc3Rtb2RfZGF0ZVkgID0gc3RyX3BhZChkZWNiaW4oZGF0ZSgnWScpLTE5 ODApLCA3LCAnMCcsIFNUUl9QQURfTEVGVCk7DQoJCQ0KCQkjIGVjaG8gIk1vZFRpbWU6ICRs YXN0bW9kX3RpbWVTLSRsYXN0bW9kX3RpbWVNLSRsYXN0bW9kX3RpbWVIICgiLmRhdGUoInMg SCBIIikuIilcbiI7DQoJCSMgZWNobyAiTW9kRGF0ZTogJGxhc3Rtb2RfZGF0ZUQtJGxhc3Rt b2RfZGF0ZU0tJGxhc3Rtb2RfZGF0ZVkgKCIuZGF0ZSgiZCBtIFkiKS4iKVxuIjsNCgkJJGRl dGFpbHNbJ21vZHRpbWUnXSA9IGJpbmRlYygiJGxhc3Rtb2RfdGltZUgkbGFzdG1vZF90aW1l TSRsYXN0bW9kX3RpbWVTIik7DQoJCSRkZXRhaWxzWydtb2RkYXRlJ10gPSBiaW5kZWMoIiRs YXN0bW9kX2RhdGVZJGxhc3Rtb2RfZGF0ZU0kbGFzdG1vZF9kYXRlRCIpOw0KCQkNCgkJJGRl dGFpbHNbJ29mZnNldCddID0gZnRlbGwoJGZoKTsNCgkJZndyaXRlKCRmaCwgJHRoaXMtPnpp cFNpZ25hdHVyZSk7DQoJCWZ3cml0ZSgkZmgsIHBhY2soJ3MnLCAkZGV0YWlsc1sndm5lZWRl ZCddKSk7IC8vIHZlcnNpb25fbmVlZGVkDQoJCWZ3cml0ZSgkZmgsIHBhY2soJ3MnLCAkZGV0 YWlsc1snYml0ZmxhZyddKSk7IC8vIGdlbmVyYWxfYml0X2ZsYWcNCgkJZndyaXRlKCRmaCwg cGFjaygncycsICRkZXRhaWxzWydjbWV0aG9kJ10pKTsgLy8gY29tcHJlc3Npb25fbWV0aG9k DQoJCWZ3cml0ZSgkZmgsIHBhY2soJ3MnLCAkZGV0YWlsc1snbW9kdGltZSddKSk7IC8vIGxh c3Rtb2RfdGltZQ0KCQlmd3JpdGUoJGZoLCBwYWNrKCdzJywgJGRldGFpbHNbJ21vZGRhdGUn XSkpOyAvLyBsYXN0bW9kX2RhdGUNCgkJZndyaXRlKCRmaCwgcGFjaygnVicsICRkZXRhaWxz WydjcmNfMzInXSkpOyAgLy8gY3JjLTMyDQoJCWZ3cml0ZSgkZmgsIHBhY2soJ0knLCAkZGV0 YWlsc1snY29tc2l6ZSddKSk7IC8vIGNvbXByZXNzZWRfc2l6ZQ0KCQlmd3JpdGUoJGZoLCBw YWNrKCdJJywgJGRldGFpbHNbJ3VuY3NpemUnXSkpOyAvLyB1bmNvbXByZXNzZWRfc2l6ZQ0K CQlmd3JpdGUoJGZoLCBwYWNrKCdzJywgc3RybGVuKCRjZmlsZW5hbWUpKSk7ICAgLy8gZmls ZV9uYW1lX2xlbmd0aA0KCQlmd3JpdGUoJGZoLCBwYWNrKCdzJywgMCkpOyAgLy8gZXh0cmFf ZmllbGRfbGVuZ3RoDQoJCWZ3cml0ZSgkZmgsICRjZmlsZW5hbWUpOyAgICAvLyBmaWxlX25h bWUNCgkJLy8gaWdub3JpbmcgZXh0cmFfZmllbGQNCgkJZndyaXRlKCRmaCwgJHpkYXRhKTsN CgkJDQoJCS8vIEFwcGVuZCBpdCB0byBjZW50cmFsIGRpcg0KCQkkZGV0YWlsc1snZXh0ZXJu YWxfYXR0cmlidXRlcyddICA9IChzdWJzdHIoJGNmaWxlbmFtZSwgLTEpPT0nLycmJiEkemRh dGEpPzE2OjMyOyAvLyBEaXJlY3Rvcnkgb3IgZmlsZSBuYW1lDQoJCSRkZXRhaWxzWydjb21t ZW50cyddICAgICAgICAgICAgID0gJGZpbGVDb21tZW50czsNCgkJJHRoaXMtPmFwcGVuZENl bnRyYWxEaXIoJGNmaWxlbmFtZSwgJGRldGFpbHMpOw0KCQkkdGhpcy0+ZmlsZXNfY291bnQr KzsNCgl9DQoJRnVuY3Rpb24gc2V0RXh0cmEoJGZpbGVuYW1lLCAkcHJvcGVydHksICR2YWx1 ZSl7DQoJCSR0aGlzLT5jZW50cmFsZGlyc1skZmlsZW5hbWVdWyRwcm9wZXJ0eV0gPSAkdmFs dWU7DQoJfQ0KCUZ1bmN0aW9uIHNhdmUoJHppcENvbW1lbnRzPScnKXsNCgkJaWYoISgkZmgg PSAmJHRoaXMtPmZoKSkNCgkJCSRmaCA9IGZvcGVuKCR0aGlzLT5maWxlbmFtZSwgJHRoaXMt Pm92ZXJ3cml0ZT8ndyc6J2ErJyk7DQoJCQ0KCQkkY2RyZWMgPSAiIjsNCgkJZm9yZWFjaCgk dGhpcy0+Y2VudHJhbGRpcnMgYXMgJGZpbGVuYW1lPT4kY2Qpew0KCQkJJGNkcmVjIC49ICR0 aGlzLT5kaXJTaWduYXR1cmU7DQoJCQkkY2RyZWMgLj0gIlx4MFx4MCI7ICAgICAgICAgICAg ICAgICAgLy8gdmVyc2lvbiBtYWRlIGJ5DQoJCQkkY2RyZWMgLj0gcGFjaygndicsICRjZFsn dm5lZWRlZCddKTsgLy8gdmVyc2lvbiBuZWVkZWQgdG8gZXh0cmFjdA0KCQkJJGNkcmVjIC49 ICJceDBceDAiOyAgICAgICAgICAgICAgICAgIC8vIGdlbmVyYWwgYml0IGZsYWcNCgkJCSRj ZHJlYyAuPSBwYWNrKCd2JywgJGNkWydjbWV0aG9kJ10pOyAvLyBjb21wcmVzc2lvbiBtZXRo b2QNCgkJCSRjZHJlYyAuPSBwYWNrKCd2JywgJGNkWydtb2R0aW1lJ10pOyAvLyBsYXN0bW9k IHRpbWUNCgkJCSRjZHJlYyAuPSBwYWNrKCd2JywgJGNkWydtb2RkYXRlJ10pOyAvLyBsYXN0 bW9kIGRhdGUNCgkJCSRjZHJlYyAuPSBwYWNrKCdWJywgJGNkWydjcmNfMzInXSk7ICAvLyBj cmMzMg0KCQkJJGNkcmVjIC49IHBhY2soJ1YnLCAkY2RbJ2NvbXNpemUnXSk7IC8vIGNvbXBy ZXNzZWQgZmlsZXNpemUNCgkJCSRjZHJlYyAuPSBwYWNrKCdWJywgJGNkWyd1bmNzaXplJ10p OyAvLyB1bmNvbXByZXNzZWQgZmlsZXNpemUNCgkJCSRjZHJlYyAuPSBwYWNrKCd2Jywgc3Ry bGVuKCRmaWxlbmFtZSkpOyAvLyBmaWxlIGNvbW1lbnQgbGVuZ3RoDQoJCQkkY2RyZWMgLj0g cGFjaygndicsIDApOyAgICAgICAgICAgICAgICAvLyBleHRyYSBmaWVsZCBsZW5ndGgNCgkJ CSRjZHJlYyAuPSBwYWNrKCd2Jywgc3RybGVuKCRjZFsnY29tbWVudHMnXSkpOyAvLyBmaWxl IGNvbW1lbnQgbGVuZ3RoDQoJCQkkY2RyZWMgLj0gcGFjaygndicsIDApOyAvLyBkaXNrIG51 bWJlciBzdGFydA0KCQkJJGNkcmVjIC49IHBhY2soJ3YnLCAwKTsgLy8gaW50ZXJuYWwgZmls ZSBhdHRyaWJ1dGVzDQoJCQkkY2RyZWMgLj0gcGFjaygnVicsICRjZFsnZXh0ZXJuYWxfYXR0 cmlidXRlcyddKTsgLy8gaW50ZXJuYWwgZmlsZSBhdHRyaWJ1dGVzDQoJCQkkY2RyZWMgLj0g cGFjaygnVicsICRjZFsnb2Zmc2V0J10pOyAvLyByZWxhdGl2ZSBvZmZzZXQgb2YgbG9jYWwg aGVhZGVyDQoJCQkkY2RyZWMgLj0gJGZpbGVuYW1lOw0KCQkJJGNkcmVjIC49ICRjZFsnY29t bWVudHMnXTsNCgkJfQ0KCQkkYmVmb3JlX2NkID0gZnRlbGwoJGZoKTsNCgkJZndyaXRlKCRm aCwgJGNkcmVjKTsNCg0KCQkvLyBlbmQgb2YgY2VudHJhbCBkaXINCgkJZndyaXRlKCRmaCwg JHRoaXMtPmRpclNpZ25hdHVyZUUpOw0KCQlmd3JpdGUoJGZoLCBwYWNrKCd2JywgMCkpOyAv LyBudW1iZXIgb2YgdGhpcyBkaXNrDQoJCWZ3cml0ZSgkZmgsIHBhY2soJ3YnLCAwKSk7IC8v IG51bWJlciBvZiB0aGUgZGlzayB3aXRoIHRoZSBzdGFydCBvZiB0aGUgY2VudHJhbCBkaXJl Y3RvcnkNCgkJZndyaXRlKCRmaCwgcGFjaygndicsICR0aGlzLT5maWxlc19jb3VudCkpOyAv LyB0b3RhbCAjIG9mIGVudHJpZXMgIm9uIHRoaXMgZGlzayIgDQoJCWZ3cml0ZSgkZmgsIHBh Y2soJ3YnLCAkdGhpcy0+ZmlsZXNfY291bnQpKTsgLy8gdG90YWwgIyBvZiBlbnRyaWVzIG92 ZXJhbGwgDQoJCWZ3cml0ZSgkZmgsIHBhY2soJ1YnLCBzdHJsZW4oJGNkcmVjKSkpOyAgICAg Ly8gc2l6ZSBvZiBjZW50cmFsIGRpciANCgkJZndyaXRlKCRmaCwgcGFjaygnVicsICRiZWZv cmVfY2QpKTsgICAgICAgICAvLyBvZmZzZXQgdG8gc3RhcnQgb2YgY2VudHJhbCBkaXINCgkJ ZndyaXRlKCRmaCwgcGFjaygndicsIHN0cmxlbigkemlwQ29tbWVudHMpKSk7IC8vIC56aXAg ZmlsZSBjb21tZW50IGxlbmd0aA0KCQlmd3JpdGUoJGZoLCAkemlwQ29tbWVudHMpOw0KCQkN CgkJZmNsb3NlKCRmaCk7DQoJfQ0KCQ0KCS8vIFByaXZhdGUNCglGdW5jdGlvbiBhcHBlbmRD ZW50cmFsRGlyKCRmaWxlbmFtZSwkcHJvcGVydGllcyl7DQoJCSR0aGlzLT5jZW50cmFsZGly c1skZmlsZW5hbWVdID0gJHByb3BlcnRpZXM7DQoJfQ0KfQ0KIjtzOjQ6InR5cGUiO3M6MToi MiI7czo1OiJvcmRlciI7czoxOiI1IjtzOjU6ImZsYWdzIjtzOjE6IjAiO3M6NDoiaGVscCI7 czo1NDY3OiI8ZGl2IGlkPSJzbWRfaGVscCI+CgoJPGgxPnNtZF9jcnVuY2hlcnM8L2gxPgoK CTxwIGNsYXNzPSJpbXBvcnRhbnQiPlJlcXVpcmVzIFBIUDUrPC9wPgoKCTxwPkxpYnJhcnkg b2YgY29tcHJlc3Npb24gLyBkZWNvbXByZXNzaW9uIGFsZ29yaXRobXMgbW9zdGx5IHdyaXR0 ZW4gYnkgb3RoZXIgcGVvcGxlLjwvcD4KCgk8cD5BZnRlciBpbnN0YWxsYXRpb24sIGl0IGVu YWJsZXMgYW55b25lIHRvIGVtcGxveSBiaS1kaXJlY3Rpb25hbCBUYXIsIFppcCwgR3ppcCBh bmQgQnppcDIgbWVjaGFuaXNtcywgc29tZSBvZiB3aGljaCB3b3VsZCBvcmRpbmFyaWx5IHJl bHkgb24gcGFydGljdWxhciBjb21wb25lbnRzIGJlaW5nIGNvbXBpbGVkIGludG8gPHNwYW4g Y2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4uPC9wPgoKCTxwPldoaWxlIGNlcnRhaW4gY29yZSBs aWJyYXJpZXMgYXJlIHN0aWxsIHJlcXVpcmVkIHRvIGJlIGNvbXBpbGVkIGludG8gPHNwYW4g Y2xhc3M9ImNhcHMiPlBIUDwvc3Bhbj4gKGUuZy4gemxpYiksIHRoaXMgcGx1Z2luIG1pdGln YXRlcyB0aGUgbmVlZCBmb3IgYW55IGZ1cnRoZXIgZXh0ZW5zaW9ucyBsaWtlIDxzcGFuIGNs YXNzPSJjYXBzIj5QRUNMPC9zcGFuPiAvIDxzcGFuIGNsYXNzPSJjYXBzIj5QRUFSPC9zcGFu PiB0byBvZmZlciB6aXAgY2FwYWJpbGl0aWVzLiBJbiBsaW1pdGVkIHNlcnZlciBzZXR1cHMg b3IgcGxhY2VzIHdoZXJlIHVzZXJzIGRvbiYjODIxNzt0IGhhdmUgYWNjZXNzIHRvIGNvbmZp Z3VyYXRpb24gZmlsZXMsIHRoaXMgaXMgcmF0aGVyIGhhbmR5LjwvcD4KCgk8aDI+VXNhZ2U8 L2gyPgoKCTxkbD4KCQk8ZHQ+RnVuY3Rpb24gPGNvZGU+c21kX2NydW5jaF9jYXBhYmlsaXRp ZXMoIHR5cGUgKTwvY29kZT48L2R0PgoJCTxkZD5GaW5kIG91dCB3aGljaCBjb21wcmVzc2lv biAvIGRlY29tcHJlc3Npb24gZmFjaWxpdGllcyBhcmUgYXZhaWxhYmxlIG9uIHRoZSBjdXJy ZW50IHNlcnZlciBzZXR1cC4gVGhlIDxjb2RlPnR5cGU8L2NvZGU+IGFyZ3VtZW50IGNhbiBi ZSBlaXRoZXI6Cgk8ZGw+CgkJPGRkPjxjb2RlPmNvbXByZXNzPC9jb2RlPjogdG8gZGV0ZXJt aW5lIHdoaWNoIGNvbXByZXNzaW9uIGZhY2lsaXRpZXMgYXJlIGF2YWlsYWJsZTwvZGQ+CgkJ PGRkPjxjb2RlPmRlY29tcHJlc3M8L2NvZGU+OiB0byBkZXRlcm1pbmUgd2hpY2ggZGVjb21w cmVzc2lvbiBmYWNpbGl0aWVzIGFyZSBhdmFpbGFibGU8L2RkPgoJPC9kbD48L2RkPgoJCTxk ZD5EZWZhdWx0OiA8Y29kZT5jb21wcmVzczwvY29kZT48L2RkPgoJCTxkZD5SZXR1cm5zOiBh biBhcnJheSBjb250YWluaW5nIHplcm8gb3IgbW9yZSBvZjoKCTxkbD4KCQk8ZGQ+PGNvZGU+ dGFyPC9jb2RlPjwvZGQ+CgkJPGRkPjxjb2RlPnppcDwvY29kZT48L2RkPgoJCTxkZD48Y29k ZT5nemlwPC9jb2RlPjwvZGQ+CgkJPGRkPjxjb2RlPmJ6aXAyPC9jb2RlPjwvZGQ+Cgk8L2Rs PjwvZGQ+CgkJPGR0PkNsYXNzIHNtZF9jcnVuY2hfYXJjaGl2ZTwvZHQ+CgkJPGRkPkJhc2Ug Y2xhc3MgZm9yIGFsbCBtYWluIGFyY2hpdmluZyAvIHVuYXJjaGl2aW5nIGZhY2lsaXRpZXMs IDxzdHJvbmc+ZXhjbHVkaW5nIHVuemlwPC9zdHJvbmc+LjwvZGQ+CgkJPGR0PkNsYXNzIHNt ZF9jcnVuY2hfdGFyX2ZpbGU8L2R0PgoJCTxkZD5TcGVjaWZpYyBjbGFzcyBmb3IgaGFuZGxp bmcgKGRlKWNvbXByZXNzaW9uIG9mIC50YXIgZmlsZXM8L2RkPgoJCTxkdD5DbGFzcyBzbWRf Y3J1bmNoX2d6aXBfZmlsZTwvZHQ+CgkJPGRkPlNwZWNpZmljIGNsYXNzIGZvciBoYW5kbGlu ZyAoZGUpY29tcHJlc3Npb24gb2YuZ3ogYW5kIC50Z3ogZmlsZXM8L2RkPgoJCTxkdD5DbGFz cyBzbWRfY3J1bmNoX2J6aXBfZmlsZTwvZHQ+CgkJPGRkPlNwZWNpZmljIGNsYXNzIGZvciBo YW5kbGluZyAoZGUpY29tcHJlc3Npb24gb2YuYnoyIGFuZCAudGJ6MiBmaWxlczwvZGQ+CgkJ PGR0PkNsYXNzIHNtZF9jcnVuY2hfemlwX2ZpbGU8L2R0PgoJCTxkZD5TcGVjaWZpYyBjbGFz cyBmb3IgaGFuZGxpbmcgY29tcHJlc3Npb24gb2YuemlwIGZpbGVzPC9kZD4KCQk8ZHQ+Q2xh c3Mgc21kX2NydW5jaF9kVW56aXAyPC9kdD4KCQk8ZGQ+U3BlY2lmaWMgY2xhc3MgZm9yIGhh bmRsaW5nIGRlY29tcHJlc3Npb24gb2YuemlwIGZpbGVzPC9kZD4KCQk8ZHQ+Q2xhc3Mgc21k X2NydW5jaF9kWmlwPC9kdD4KCQk8ZGQ+QWx0ZXJuYXRpdmUgbWV0aG9kcyBmb3IgY29tcHJl c3NpbmcgLnppcCBmaWxlczwvZGQ+Cgk8L2RsPgoKCTxoMj5FeGFtcGxlIDE6IGNvbXByZXNz IGFsbCBmaWxlcyBpbiBhIGZvbGRlciBhcyB6aXA8L2gyPgoKCTxwPkJ1dCBleGNsdWRlIGFu eSA8Y29kZT4uc3ZuPC9jb2RlPiBkaXJlY3RvcmllcyBpbiB0aGUgcHJvY2Vzcy4gVGhlbiBp bW1lZGlhdGVseSBzZXJ2ZSB0aGUgZmlsZSBhcyBhIGRvd25sb2FkYWJsZSBpdGVtIDxjb2Rl PmZpbGUuemlwPC9jb2RlPi48L3A+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9 ImJsb2NrIj4kYXJjID0gbmV3IHNtZF9jcnVuY2hfemlwX2ZpbGUoJiMzOTtmaWxlLnppcCYj Mzk7KTsKJGFyYy0mZ3Q7c2V0X29wdGlvbnMoYXJyYXkoCiAgICAgJiMzOTtiYXNlZGlyJiMz OTsgICA9Jmd0OyAmIzM5Oy9wYXRoL3RvL2ZpbGVzJiMzOTssCiAgICAgJiMzOTtvdmVyd3Jp dGUmIzM5OyA9Jmd0OyAxLAogICAgICYjMzk7aW5tZW1vcnkmIzM5OyAgPSZndDsgMQogICAp KTsKJGFyYy0mZ3Q7YWRkX2ZpbGVzKCYjMzk7L3BhdGgvdG8vZmlsZXMvKi4qJiMzOTspOwok YXJjLSZndDtleGNsdWRlX2ZpbGVzKCYjMzk7L3BhdGgvdG8vZmlsZXMvKi5zdm4qJiMzOTsp OwokYXJjLSZndDtjcmVhdGVfYXJjaGl2ZSgpOwokYXJjLSZndDtkb3dubG9hZF9maWxlKCk7 CjwvY29kZT48L3ByZT4KCgk8aDI+RXhhbXBsZSAyOiBkZWNvbXByZXNzIGd6aXAgYXJjaGl2 ZTwvaDI+CgoJPHA+VGhpcyBpcyB0aGUgc2FtZSBnZW5lcmljIHByb2NlZHVyZSBmb3IgYWxs IHN1cHBvcnRlZCBjb21wcmVzc2VkIHR5cGVzLjwvcD4KCjxwcmUgY2xhc3M9ImJsb2NrIj48 Y29kZSBjbGFzcz0iYmxvY2siPiRmdWxscGF0aCA9ICYjMzk7L3BhdGgvdG8vZmlsZS5neiYj Mzk7OwokYXJjID0gbmV3IHNtZF9jcnVuY2hfZ3ppcF9maWxlKGJhc2VuYW1lKCRmdWxscGF0 aCkpOwokYXJjLSZndDtzZXRfb3B0aW9ucyhhcnJheSgKICAgICAmIzM5O2Jhc2VkaXImIzM5 OyAgID0mZ3Q7ICYjMzk7L3BhdGgvdG8vZXhwb3J0L2ZvbGRlciYjMzk7LAogICAgICYjMzk7 b3ZlcndyaXRlJiMzOTsgPSZndDsgMQogICApKTsKJGFyYy0mZ3Q7ZXh0cmFjdF9maWxlcygp Owo8L2NvZGU+PC9wcmU+CgoJPGgyPkV4YW1wbGUgMzogZGVjb21wcmVzcyB6aXAgYXJjaGl2 ZTwvaDI+Cgo8cHJlIGNsYXNzPSJibG9jayI+PGNvZGUgY2xhc3M9ImJsb2NrIj4kZnVsbHBh dGggPSAmIzM5Oy9wYXRoL3RvL2ZpbGUuemlwJiMzOTs7CiR6aXAgPSBuZXcgc21kX2NydW5j aF9kVW56aXAyKCRmdWxscGF0aCk7CiRmaWxlbGlzdCA9ICR6aXAtJmd0O2dldExpc3QoKTsK Zm9yZWFjaCgkZmlsZWxpc3QgYXMgJGZuID0mZ3Q7ICR6aXBwZWRGaWxlKSB7CiAgIC8vIERv IGZpbGUgc2l6ZS90eXBlIHZhbGlkYXRpb24gaGVyZT8KICAgZWNobyAmcXVvdDskZm4gKCR6 aXBwZWRGaWxlWyYjMzk7dW5jb21wcmVzc2VkX3NpemUmIzM5O10gYnl0ZXMpJmx0O2JyJmd0 OyZxdW90OzsKfQokemlwLSZndDt1bnppcEFsbCgmIzM5Oy9wYXRoL3RvL2V4cG9ydC9mb2xk ZXImIzM5Oyk7CiR6aXAtJmd0O2Nsb3NlKCk7CjwvY29kZT48L3ByZT4KCgk8aDI+QXV0aG9y IC8gY3JlZGl0czwvaDI+CgoJPHA+PGEgaHJlZj0iaHR0cDovL3N0ZWZkYXdzb24uY29tL2Nv bnRhY3QiPlN0ZWYgRGF3c29uPC9hPi48L3A+CgoJPHA+TGlicmFyaWVzIGZyb20gPGEgaHJl Zj0iaHR0cDovL3BocGNsYXNzZXMub3JnLyI+PHNwYW4gY2xhc3M9ImNhcHMiPlBIUDwvc3Bh bj4gQ2xhc3NlczwvYT4gYnkgRGV2aW4gRG91Y2V0dGUgYW5kIEFsZXhhbmRyZSBUZWRlc2No aS4gTWFueSB0aGFua3MgdG8gdGhvc2UgYXV0aG9ycyBmb3IgYXdlc29tZSBjb2Rpbmcgc2tp bGx6LjwvcD4KCgk8aDI+Q2hhbmdlbG9nPC9oMj4KCgk8dWw+CgkJPGxpPjI5IEphbiAyMDEy IHwgdjAuMTAgfCBJbml0aWFsIHJlbGVhc2U8L2xpPgoJPC91bD4KCjwvZGl2Pgo8IS0tICoq KiBCRUdJTiBQTFVHSU4gQ1NTICoqKiAtLT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KI3Nt ZF9oZWxwIHsgbGluZS1oZWlnaHQ6MS41IDt9CiNzbWRfaGVscCBjb2RlIHsgZm9udC13ZWln aHQ6Ym9sZDsgZm9udDogMTA1JS8xMzAlICJDb3VyaWVyIE5ldyIsIGNvdXJpZXIsIG1vbm9z cGFjZTsgYmFja2dyb3VuZC1jb2xvcjogI2YwZTY4YzsgY29sb3I6IzMzMzsgfQojc21kX2hl bHAgY29kZS5ibG9jayB7IGZvbnQtd2VpZ2h0Om5vcm1hbDsgYm9yZGVyOjFweCBkb3R0ZWQg Izk5OTsgZGlzcGxheTpibG9jazsgbWFyZ2luOjEwcHggMTBweCAyMHB4OyBwYWRkaW5nOjEw cHg7IH0KI3NtZF9oZWxwIGgxIHsgZm9udDogMjJweCBHZW9yZ2lhLCBzZXJpZjsgbWFyZ2lu OiAwOyB0ZXh0LWFsaWduOiBjZW50ZXI7IH0KI3NtZF9oZWxwIGgyIHsgYm9yZGVyLWJvdHRv bTogMXB4IHNvbGlkIGJsYWNrOyBwYWRkaW5nOjEwcHggMCAwOyBmb250OiAxOHB4IEdlb3Jn aWEsIHNlcmlmOyB9CiNzbWRfaGVscCBoMyB7IGZvbnQ6IGJvbGQgMTNweCBHZW9yZ2lhLCBz ZXJpZjsgbGV0dGVyLXNwYWNpbmc6IDFweDsgbWFyZ2luOiAyMHB4IDAgMDsgdGV4dC1kZWNv cmF0aW9uOnVuZGVybGluZTsgfQojc21kX2hlbHAgaDQgeyBmb250OiBib2xkIDEycHggR2Vv cmdpYSwgc2VyaWY7IGxldHRlci1zcGFjaW5nOiAxcHg7IG1hcmdpbjogMTBweCAwIDA7IHRl eHQtdHJhbnNmb3JtOiB1cHBlcmNhc2U7IH0KI3NtZF9oZWxwIC5hdG5tIHsgZm9udC13ZWln aHQ6Ym9sZDsgfQojc21kX2hlbHAgLm1hbmQgeyBiYWNrZ3JvdW5kOiNlZWU7IGJvcmRlcjox cHggZG90dGVkICM5OTk7IH0KI3NtZF9oZWxwIHRhYmxlIHsgd2lkdGg6OTAlOyB0ZXh0LWFs aWduOmNlbnRlcjsgcGFkZGluZy1ib3R0b206MWVtOyBib3JkZXItY29sbGFwc2U6Y29sbGFw c2U7IH0KI3NtZF9oZWxwIHRkLCAjc21kX2hlbHAgdGggeyBib3JkZXI6MXB4IHNvbGlkICM5 OTk7IHBhZGRpbmc6LjVlbTsgfQojc21kX2hlbHAgdWwgeyBsaXN0LXN0eWxlLXR5cGU6c3F1 YXJlOyB9CiNzbWRfaGVscCAuaW1wb3J0YW50IHsgY29sb3I6cmVkOyB9CiNzbWRfaGVscCBs aSB7IG1hcmdpbjo1cHggMjBweCA1cHggMzBweDsgfQojc21kX2hlbHAgLmJyZWFrIHsgbWFy Z2luLXRvcDo1cHg7IH0KI3NtZF9oZWxwIGRsIGRkIHsgbWFyZ2luOjJweCAxNXB4OyB9CiNz bWRfaGVscCBkbCBkZDpiZWZvcmUgeyBjb250ZW50OiAiXDIwMjJcMDBhMCI7IH0KI3NtZF9o ZWxwIGRsIGRkIGRsIHsgcGFkZGluZzogMCAxNXB4OyB9Cjwvc3R5bGU+CjwhLS0gKioqIEVO RCBQTFVHSU4gQ1NTICoqKiAtLT4KIjtzOjM6Im1kNSI7czozMjoiZWYwZjFiYzU4YWMzODMw ZDM0YThkZWJhYjY2Y2JiNDIiO30=