ZGlmZiAtLWdpdCBhL3J1bnRpbWUvZnRwbHVnaW4vZGViY2hhbmdlbG9nLnZpbSBiL3J1bnRpbWUvZnRwbHVnaW4vZGViY2hhbmdlbG9nLnZpbQpuZXcgZmlsZSBtb2RlIDEwMDY0NAppbmRleCAwMDAwMDAwLi4zMmRiNWE3Ci0tLSAvZGV2L251bGwKKysrIGIvcnVudGltZS9mdHBsdWdpbi9kZWJjaGFuZ2Vsb2cudmltCkBAIC0wLDAgKzEsMjA2IEBACisiIFZpbSBmaWxldHlwZSBwbHVnaW4gZmlsZQorIiBMYW5ndWFnZToJRGViaWFuIENoYW5nZWxvZworIiBNYWludGFpbmVyOglNaWNoYWVsIFBpZWZlbCA8cGllZmVsQGluZm9ybWF0aWsuaHUtYmVybGluLmRlPgorIiBMYXN0IENoYW5nZToJMjMgTWFyY2ggMjAwNAorCitpZiBleGlzdHMoImc6ZGlkX2NoYW5nZWxvZ19mdHBsdWdpbiIpCisgIGZpbmlzaAorZW5kaWYKKworIiBEb24ndCBsb2FkIGFub3RoZXIgcGx1Z2luICh0aGlzIGlzIGdsb2JhbCkKK2xldCBnOmRpZF9jaGFuZ2Vsb2dfZnRwbHVnaW4gPSAxCisKKyIgSGVscGVyIGZ1bmN0aW9ucyByZXR1cm5pbmcgdmFyaW91cyBkYXRhLgorIiBSZXR1cm5zIGZ1bGwgbmFtZSwgZWl0aGVyIGZyb20gJERFQkZVTExOQU1FIG9yIGRlYmlhbmZ1bGxuYW1lLgorIiBUT0RPIElzIHRoZXJlIGEgd2F5IHRvIGRldGVybWluZSBuYW1lIGZyb20gYW55d2hlcmUgZWxzZT8KK2Z1bmN0aW9uIDxTSUQ+RnVsbE5hbWUoKQorICAgIGlmIGV4aXN0cygiJERFQkZVTExOQU1FIikKKwlyZXR1cm4gJERFQkZVTExOQU1FCisgICAgZWxzZWlmIGV4aXN0cygiZzpkZWJpYW5mdWxsbmFtZSIpCisJcmV0dXJuIGc6ZGViaWFuZnVsbG5hbWUKKyAgICBlbHNlCisJcmV0dXJuICJZb3VyIE5hbWUiCisgICAgZW5kaWYKK2VuZGZ1bmN0aW9uCisKKyIgUmV0dXJucyBlbWFpbCBhZGRyZXNzLCBmcm9tICRERUJFTUFJTCwgJEVNQUlMIG9yIGRlYmlhbmVtYWlsLgorZnVuY3Rpb24gPFNJRD5FbWFpbCgpCisgICAgaWYgZXhpc3RzKCIkREVCRU1BSUwiKQorCXJldHVybiAkREVCRU1BSUwKKyAgICBlbHNlaWYgZXhpc3RzKCIkRU1BSUwiKQorCXJldHVybiAkRU1BSUwKKyAgICBlbHNlaWYgZXhpc3RzKCJnOmRlYmlhbmVtYWlsIikKKwlyZXR1cm4gZzpkZWJpYW5mdWxsZW1haWwKKyAgICBlbHNlCisJcmV0dXJuICJ5b3VyQGVtYWlsLmFkZHJlc3MiCisgICAgZW5kaWYKK2VuZGZ1bmN0aW9uCisKKyIgUmV0dXJucyBkYXRlIGluIFJGQzgyMiBmb3JtYXQuCitmdW5jdGlvbiA8U0lEPkRhdGUoKQorICAgIGxldCBzYXZlbGFuZyA9IHY6bGNfdGltZQorICAgIGV4ZWN1dGUgImxhbmd1YWdlIHRpbWUgQyIKKyAgICBsZXQgZGF0ZWFuZHRpbWUgPSBzdHJmdGltZSgiJWEsICVkICViICVZICVYICV6IikKKyAgICBleGVjdXRlICJsYW5ndWFnZSB0aW1lICIgLiBzYXZlbGFuZworICAgIHJldHVybiBkYXRlYW5kdGltZQorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24gPFNJRD5XYXJuSWZOb3RVbmZpbmFsaXNlZCgpCisgICAgaWYgbWF0Y2goZ2V0bGluZSgiLiIpLCAiIC0tIFtbOmFscGhhOl1dW1s6YWxudW06XS5dIikhPS0xCisJZWNob2hsIFdhcm5pbmdNc2cKKwllY2hvICJUaGUgZW50cnkgaGFzIG5vdCBiZWVuIHVuZmluYWxpc2VkIGJlZm9yZSBlZGl0aW5nLiIKKwllY2hvaGwgTm9uZQorCXJldHVybiAxCisgICAgZW5kaWYKKyAgICByZXR1cm4gMAorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24gPFNJRD5GaW5hbGlzZWQoKQorICAgIGxldCBzYXZlbGluZW51bSA9IGxpbmUoIi4iKQorICAgIG5vcm1hbCAxRworICAgIGNhbGwgc2VhcmNoKCJeIC0tICIpCisgICAgaWYgbWF0Y2goZ2V0bGluZSgiLiIpLCAiIC0tIFtbOmFscGhhOl1dW1s6YWxudW06XS5dIikhPS0xCisJbGV0IHJldHVybnZhbHVlID0gMQorICAgIGVsc2UKKwlsZXQgcmV0dXJudmFsdWUgPSAwCisgICAgZW5kaWYKKyAgICBleGVjdXRlIHNhdmVsaW5lbnVtCisgICAgcmV0dXJuIHJldHVybnZhbHVlCitlbmRmdW5jdGlvbgorCisiIFRoZXNlIGZ1bmN0aW9ucyBpbXBsZW1lbnQgdGhlIG1lbnVzCitmdW5jdGlvbiBOZXdWZXJzaW9uKCkKKyAgICAiIFRoZSBuZXcgZW50cnkgaXMgdW5maW5hbGlzZWQgYW5kIHNoYWxsIGJlIGNoYW5nZWQKKyAgICBhbWVudSBkaXNhYmxlIENoYW5nZWxvZy5OZXdcIFZlcnNpb24KKyAgICBhbWVudSBlbmFibGUgQ2hhbmdlbG9nLkFkZFwgRW50cnkKKyAgICBhbWVudSBlbmFibGUgQ2hhbmdlbG9nLkNsb3NlXCBCdWcKKyAgICBhbWVudSBlbmFibGUgQ2hhbmdlbG9nLlNldFwgRGlzdHJpYnV0aW9uCisgICAgYW1lbnUgZW5hYmxlIENoYW5nZWxvZy5TZXRcIFVyZ2VuY3kKKyAgICBhbWVudSBkaXNhYmxlIENoYW5nZWxvZy5VbmZpbmFsaXNlCisgICAgYW1lbnUgZW5hYmxlIENoYW5nZWxvZy5GaW5hbGlzZQorICAgIGNhbGwgYXBwZW5kKDAsIHN1YnN0aXR1dGUoZ2V0bGluZSgxKSwnLVwoW1s6ZGlnaXQ6XV1cK1wpKScsICct3FwxKScsICcnKSkKKyAgICBjYWxsIGFwcGVuZCgxLCAiIikKKyAgICBjYWxsIGFwcGVuZCgyLCAiIikKKyAgICBjYWxsIGFwcGVuZCgzLCAiIC0tICIpCisgICAgY2FsbCBhcHBlbmQoNCwgIiIpCisgICAgY2FsbCBEaXN0cmlidXRpb24oInVuc3RhYmxlIikKKyAgICBjYWxsIFVyZ2VuY3koImxvdyIpCisgICAgbm9ybWFsIDFHCisgICAgY2FsbCBzZWFyY2goIikiKQorICAgIG5vcm1hbCBoCisgICAgbm9ybWFsIAEKKyAgICBjYWxsIHNldGxpbmUoMSwgc3Vic3RpdHV0ZShnZXRsaW5lKDEpLCct3FwoW1s6ZGlnaXQ6XV1cK1wpKScsICctXDEpJywgJycpKQorICAgIGNhbGwgQWRkRW50cnkoKQorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24gQWRkRW50cnkoKQorICAgIG5vcm1hbCAxRworICAgIGNhbGwgc2VhcmNoKCJeIC0tICIpCisgICAgbm9ybWFsIGtrCisgICAgY2FsbCBhcHBlbmQoIi4iLCAiICAqICIpCisgICAgbm9ybWFsIGpqagorICAgIGxldCB3YXJuPTxTSUQ+V2FybklmTm90VW5maW5hbGlzZWQoKQorICAgIG5vcm1hbCBraworICAgIGlmIHdhcm4KKwllY2hvaGwgTW9yZU1zZworCWNhbGwgaW5wdXQoIkhpdCBFTlRFUiIpCisJZWNob2hsIE5vbmUKKyAgICBlbmRpZgorICAgIHN0YXJ0aW5zZXJ0IQorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24gQ2xvc2VCdWcoKQorICAgIG5vcm1hbCAxRworICAgIGNhbGwgc2VhcmNoKCJeIC0tICIpCisgICAgbGV0IHdhcm49PFNJRD5XYXJuSWZOb3RVbmZpbmFsaXNlZCgpCisgICAgbm9ybWFsIGtrCisgICAgY2FsbCBhcHBlbmQoIi4iLCAiICAqICAoY2xvc2VzOiAjIiAuIGlucHV0KCJCdWcgbnVtYmVyIHRvIGNsb3NlOiAiKSAuICIpIikKKyAgICBub3JtYWwgal5sbAorICAgIHN0YXJ0aW5zZXJ0CitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiBEaXN0cmlidXRpb24oZGlzdCkKKyAgICBjYWxsIHNldGxpbmUoMSwgc3Vic3RpdHV0ZShnZXRsaW5lKDEpLCAiKSBbWzpsb3dlcjpdIF0qOyIsICIpICIgLiBhOmRpc3QgLiAiOyIsICIiKSkKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uIFVyZ2VuY3kodXJnKQorICAgIGNhbGwgc2V0bGluZSgxLCBzdWJzdGl0dXRlKGdldGxpbmUoMSksICJ1cmdlbmN5PS4qJCIsICJ1cmdlbmN5PSIgLiBhOnVyZywgIiIpKQorZW5kZnVuY3Rpb24KKworZnVuY3Rpb24gPFNJRD5VbmZpbmFsaXNlTWVudSgpCisgICAgIiBUaGlzIG1lYW5zIHRoZSBlbnRyeSBzaGFsbCBiZSBjaGFuZ2VkCisgICAgYW1lbnUgZGlzYWJsZSBDaGFuZ2Vsb2cuTmV3XCBWZXJzaW9uCisgICAgYW1lbnUgZW5hYmxlIENoYW5nZWxvZy5BZGRcIEVudHJ5CisgICAgYW1lbnUgZW5hYmxlIENoYW5nZWxvZy5DbG9zZVwgQnVnCisgICAgYW1lbnUgZW5hYmxlIENoYW5nZWxvZy5TZXRcIERpc3RyaWJ1dGlvbgorICAgIGFtZW51IGVuYWJsZSBDaGFuZ2Vsb2cuU2V0XCBVcmdlbmN5CisgICAgYW1lbnUgZGlzYWJsZSBDaGFuZ2Vsb2cuVW5maW5hbGlzZQorICAgIGFtZW51IGVuYWJsZSBDaGFuZ2Vsb2cuRmluYWxpc2UKK2VuZGZ1bmN0aW9uCisKK2Z1bmN0aW9uIFVuZmluYWxpc2UoKQorICAgIGNhbGwgPFNJRD5VbmZpbmFsaXNlTWVudSgpCisgICAgbm9ybWFsIDFHCisgICAgY2FsbCBzZWFyY2goIl4gLS0gIikKKyAgICBjYWxsIHNldGxpbmUoIi4iLCAiIC0tICIpCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiA8U0lEPkZpbmFsaXNlTWVudSgpCisgICAgIiBUaGlzIG1lYW5zIHRoZSBlbnRyeSBzaG91bGQgbm90IGJlIGNoYW5nZWQgYW55bW9yZQorICAgIGFtZW51IGVuYWJsZSBDaGFuZ2Vsb2cuTmV3XCBWZXJzaW9uCisgICAgYW1lbnUgZGlzYWJsZSBDaGFuZ2Vsb2cuQWRkXCBFbnRyeQorICAgIGFtZW51IGRpc2FibGUgQ2hhbmdlbG9nLkNsb3NlXCBCdWcKKyAgICBhbWVudSBkaXNhYmxlIENoYW5nZWxvZy5TZXRcIERpc3RyaWJ1dGlvbgorICAgIGFtZW51IGRpc2FibGUgQ2hhbmdlbG9nLlNldFwgVXJnZW5jeQorICAgIGFtZW51IGVuYWJsZSBDaGFuZ2Vsb2cuVW5maW5hbGlzZQorICAgIGFtZW51IGRpc2FibGUgQ2hhbmdlbG9nLkZpbmFsaXNlCitlbmRmdW5jdGlvbgorCitmdW5jdGlvbiBGaW5hbGlzZSgpCisgICAgY2FsbCA8U0lEPkZpbmFsaXNlTWVudSgpCisgICAgbm9ybWFsIDFHCisgICAgY2FsbCBzZWFyY2goIl4gLS0gIikKKyAgICBjYWxsIHNldGxpbmUoIi4iLCAiIC0tICIgLiA8U0lEPkZ1bGxOYW1lKCkgLiAiIDwiIC4gPFNJRD5FbWFpbCgpIC4gIj4gICIgLiA8U0lEPkRhdGUoKSkKK2VuZGZ1bmN0aW9uCisKKworZnVuY3Rpb24gPFNJRD5NYWtlTWVudSgpCisgICAgYW1lbnUgJkNoYW5nZWxvZy4mTmV3XCBWZXJzaW9uCQkJOmNhbGwgTmV3VmVyc2lvbigpPENSPgorICAgIGFtZW51IENoYW5nZWxvZy4mQWRkXCBFbnRyeQkJCQk6Y2FsbCBBZGRFbnRyeSgpPENSPgorICAgIGFtZW51IENoYW5nZWxvZy4mQ2xvc2VcIEJ1ZwkJCQk6Y2FsbCBDbG9zZUJ1ZygpPENSPgorICAgIG1lbnUgQ2hhbmdlbG9nLi1zZXAtCQkJCTxudWw+CisKKyAgICBhbWVudSBDaGFuZ2Vsb2cuU2V0XCAmRGlzdHJpYnV0aW9uLiZ1bnN0YWJsZQk6Y2FsbCBEaXN0cmlidXRpb24oInVuc3RhYmxlIik8Q1I+CisgICAgYW1lbnUgQ2hhbmdlbG9nLlNldFwgRGlzdHJpYnV0aW9uLiZmcm96ZW4JCTpjYWxsIERpc3RyaWJ1dGlvbigiZnJvemVuIik8Q1I+CisgICAgYW1lbnUgQ2hhbmdlbG9nLlNldFwgRGlzdHJpYnV0aW9uLiZzdGFibGUJCTpjYWxsIERpc3RyaWJ1dGlvbigic3RhYmxlIik8Q1I+CisgICAgbWVudSBDaGFuZ2Vsb2cuU2V0XCBEaXN0cmlidXRpb24uLXNlcC0JCTxudWw+CisgICAgYW1lbnUgQ2hhbmdlbG9nLlNldFwgRGlzdHJpYnV0aW9uLmZyb3plblwgdW5zdGFibGUJOmNhbGwgRGlzdHJpYnV0aW9uKCJmcm96ZW4gdW5zdGFibGUiKTxDUj4KKyAgICBhbWVudSBDaGFuZ2Vsb2cuU2V0XCBEaXN0cmlidXRpb24uc3RhYmxlXCB1bnN0YWJsZQk6Y2FsbCBEaXN0cmlidXRpb24oInN0YWJsZSB1bnN0YWJsZSIpPENSPgorICAgIGFtZW51IENoYW5nZWxvZy5TZXRcIERpc3RyaWJ1dGlvbi5zdGFibGVcIGZyb3plbgk6Y2FsbCBEaXN0cmlidXRpb24oInN0YWJsZSBmcm96ZW4iKTxDUj4KKyAgICBhbWVudSBDaGFuZ2Vsb2cuU2V0XCBEaXN0cmlidXRpb24uc3RhYmxlXCBmcm96ZW5cIHVuc3RhYmxlCTpjYWxsIERpc3RyaWJ1dGlvbigic3RhYmxlIGZyb3plbiB1bnN0YWJsZSIpPENSPgorCisgICAgYW1lbnUgQ2hhbmdlbG9nLlNldFwgJlVyZ2VuY3kuJmxvdwkJCTpjYWxsIFVyZ2VuY3koImxvdyIpPENSPgorICAgIGFtZW51IENoYW5nZWxvZy5TZXRcIFVyZ2VuY3kuJm1lZGl1bQkJOmNhbGwgVXJnZW5jeSgibWVkaXVtIik8Q1I+CisgICAgYW1lbnUgQ2hhbmdlbG9nLlNldFwgVXJnZW5jeS4maGlnaAkJCTpjYWxsIFVyZ2VuY3koImhpZ2giKTxDUj4KKworICAgIG1lbnUgQ2hhbmdlbG9nLi1zZXAtCQkJCTxudWw+CisgICAgYW1lbnUgQ2hhbmdlbG9nLlUmbmZpbmFsaXNlCQkJCTpjYWxsIFVuZmluYWxpc2UoKTxDUj4KKyAgICBhbWVudSBDaGFuZ2Vsb2cuJkZpbmFsaXNlCQkJCTpjYWxsIEZpbmFsaXNlKCk8Q1I+CisKKyAgICBpZiA8U0lEPkZpbmFsaXNlZCgpCisJY2FsbCA8U0lEPkZpbmFsaXNlTWVudSgpCisgICAgZWxzZQorCWNhbGwgPFNJRD5VbmZpbmFsaXNlTWVudSgpCisgICAgZW5kaWYKK2VuZGZ1bmN0aW9uCisKK2F1Z3JvdXAgY2hhbmdlbG9nTWVudQorYXUgQnVmRW50ZXIgKiBpZiAmZmlsZXR5cGUgPT0gImRlYmNoYW5nZWxvZyIgfCBjYWxsIDxTSUQ+TWFrZU1lbnUoKSB8IGVuZGlmCithdSBCdWZMZWF2ZSAqIGlmICZmaWxldHlwZSA9PSAiZGViY2hhbmdlbG9nIiB8IGF1bm1lbnUgQ2hhbmdlbG9nIHwgZW5kaWYKK2F1Z3JvdXAgRU5ECisKKyIgRGViaWFuIGNoYW5nZWxvZ3MgYXJlIG5vdCBzdXBwb3NlZCB0byBoYXZlIGFueSBvdGhlciB0ZXh0IHdpZHRoLAorIiBzbyB0aGUgdXNlciBjYW5ub3Qgb3ZlcnJpZGUgdGhpcyBzZXR0aW5nCitzZXRsb2NhbCB0dz03OAorc2V0bG9jYWwgY29tbWVudHM9ZjoqIAorbGV0IGI6dW5kb19mdHBsdWdpbiA9ICJzZXRsb2NhbCB0dzwgY29tbWVudHM8Igo=