GeneralCatalog
1.2.3
OTRS AG
http://otrs.org/
GNU GENERAL PUBLIC LICENSE Version 2, June 1991
Build for OTRS::ITSM 1.2.3.
Build for OTRS::ITSM 1.2.2.
Build for OTRS::ITSM 1.2.1.
Build for OTRS::ITSM 1.2.0 rc1.
Build for OTRS::ITSM 1.2.0 beta3.
Build for OTRS::ITSM 1.2.0 beta2.
Build for OTRS::ITSM 1.2.0 beta1.
The general catalog package.
Das General Catalog Paket.
2.3.x
<br>
<b>ATTENTION</b>
<br>
<br>
If you uninstall this package, all database tables that were created during installation will be deleted.
All data from this table will be irrevocably lost.
<br>
<br>
((enjoy))<br>
<br>
<br>
<b>ACHTUNG</b>
<br>
<br>
Bei der Deinstallation werden die von diesem Paket angelegten Datenbank-Tabellen gelöscht.
Alle darin enthaltenen Daten gehen unwiderruflich verloren!
<br>
<br>
((enjoy))<br>
<br>
2009-03-02 11:07:06
opms.otrs.com
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ZMlILj22PKSkeOG29UXU1hoe5/PNTfJYd1W30rsLmIpE7/LlSCcCAACI3yrL/Pb0tn0xssVHz1YfHU1T2Rzn1kXUVseZ7G9JzzdX35OnQK+01p6KxLFq1ydSjgAAAKbk9eE/ywizE4u2rni/CjjvqWbrH9kIpvWIoK3PVG6VLjfJjSHKDwEq7KFwnD+vn35UH2ez/TS72ephXa9vVfOPkQzc2qUiUa4w9UwkAgAAoJn018/kt28fCWR7YtsqlzzfbKWW89sfaXI5m918Wg9Uun5af+r89tv13dWvxRnqqi9VbPW03OTbR3WZP769vd93NldtvYed47z4Y98pbbP9NLjZ68PlRyhabZHev8yubr68PSY3hc+8PSVnVy97juqEVKTpskQRAAAAPZh/uU6u/nz4Ol9nnflmYttq0E65rYFKja23er7Jf3AzT22+uu/083J0UNlxfr2/mP397+vtzqCfbHTQ/f3LXYP9NL27GKhIE9J8eBEAAAC0tmwpD5ezs7v8vKz1iKTrp3mSjcW5nM0uk/fPPxfmpFXst2Krb9XbvI8O+t9rMi/uetmgPt2cnZ3l7jhbaXvxgbfb5OHybt9+Xkr2WXF3i3t6+nV2dZZs5q3NNpPpHp+utz6TzWirfkSnpCLFw/pEAAAAjMTu0KL59lLbhRvkPvsxP2z3n5Vb5TfZulHhbgs73/n81sbN9tPw7rY+s/cfyxltyafxLYqUqEhBaHiNM5EIAAAAwrOzcFShdI2HinRK+1cm2pCHAAAAIFrF8VDjpSJ1r3Zm2SYeyUMAAABAKFSkGlXDhY6ZWSYeAQAAAMGZbkUymwwAAACguWgrkguWAQAAAHQogIq0Z9CQSAQAAAAwjBNXpCbTyvQgAAAAYAjPz8/z+Xzx581N8vg4f324+ff3x9vz5T+/fv5n8/fcp97/zO0kv9Xilqv9fvx1zz0W7mKYh3yIphWp3YAg08oAAACAYMznyc3ZWfL09vhYc8vz28fb5Z/pr5fk947u8fXhnyP2NIBlRepvQJBIBAAAAARk/vj2tvnHeyqar6LSPPf33O1/FAcNbW+VlGxUcY8lG47LsiJpPQAAAADsF8Dq2gAAAACcnIoEAAAAQD0VCQAAAIB6/wfVqptnctMd3wAAAABJRU5ErkJggg==
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSIgPz4KPG90cnNfY29uZmlnIHZlcnNpb249IjEuMCIgaW5pdD0iRnJhbWV3b3JrIj4KICAgIDxDVlM+JElkOiBHZW5lcmFsQ2F0YWxvZy54bWwsdiAxLjMgMjAwOC8wMS8yMyAwODo1ODoyNiBtaCBFeHAgJDwvQ1ZTPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FkbWluR2VuZXJhbENhdGFsb2ciIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIExhbmc9ImVuIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5HZW5lcmFsQ2F0YWxvZyBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPERlc2NyaXB0aW9uIExhbmc9ImRlIj5Gcm9udGVuZG1vZHVsLVJlZ2lzdHJhdGlvbiBkZXIgQWRtaW5HZW5lcmFsQ2F0YWxvZyBLb25maWd1cmF0aW9uIGltIEFkbWluLUJlcmVpY2guPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFkbWluOjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXA+YWRtaW48L0dyb3VwPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPkFkbWluPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxUaXRsZT5HZW5lcmFsIENhdGFsb2c8L1RpdGxlPgogICAgICAgICAgICAgICAgPE5hdkJhck5hbWU+QWRtaW48L05hdkJhck5hbWU+CiAgICAgICAgICAgICAgICA8TmF2QmFyTW9kdWxlPgogICAgICAgICAgICAgICAgICAgIDxNb2R1bGU+S2VybmVsOjpPdXRwdXQ6OkhUTUw6Ok5hdkJhck1vZHVsZUFkbWluPC9Nb2R1bGU+CiAgICAgICAgICAgICAgICAgICAgPE5hbWU+R2VuZXJhbCBDYXRhbG9nPC9OYW1lPgogICAgICAgICAgICAgICAgICAgIDxCbG9jaz5CbG9jazM8L0Jsb2NrPgogICAgICAgICAgICAgICAgICAgIDxQcmlvPjQxMDwvUHJpbz4KICAgICAgICAgICAgICAgIDwvTmF2QmFyTW9kdWxlPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KPC9vdHJzX2NvbmZpZz4=
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9iZ19HZW5lcmFsQ2F0YWxvZy5wbSAtIHRoZSBidWxnYXJpYW4gdHJhbnNsYXRpb24gb2YgR2VuZXJhbENhdGFsb2cKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwOCBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgQ29weXJpZ2h0IChDKSAyMDA3LTIwMDggTWlsZW4gS291dGV2CiMgLS0KIyAkSWQ6IGJnX0dlbmVyYWxDYXRhbG9nLnBtLHYgMS4xMCAyMDA4LzA4LzE0IDExOjAwOjIzIG1oIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTIuMC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6YmdfR2VuZXJhbENhdGFsb2c7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgdmFycyBxdygkVkVSU0lPTik7CiRWRVJTSU9OID0gcXcoJFJldmlzaW9uOiAxLjEwICQpIFsxXTsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgbXkgJExhbmcgPSAkU2VsZi0+e1RyYW5zbGF0aW9ufTsKCiAgICByZXR1cm4gaWYgcmVmICRMYW5nIG5lICdIQVNIJzsKCiAgICAkTGFuZy0+eydHZW5lcmFsIENhdGFsb2cnfSAgICAgICAgICAgID0gJ87x7e7i5e0g6uDy4Ovu4yc7CiAgICAkTGFuZy0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ9Pv8ODi6+Xt6OUg7eAg7vHt7uLt6P8g6uDy4Ovu4yc7CiAgICAkTGFuZy0+eydDYXRhbG9nIENsYXNzJ30gICAgICAgICAgICAgID0gJ8rr4PHu4uUg4iDq4PLg6+7j4Cc7CiAgICAkTGFuZy0+eydBZGQgYSBuZXcgQ2F0YWxvZyBDbGFzcy4nfSAgID0gJ8Tu4eDi6CDt7uIg6uvg8SDiIOrg8uDr7uPgLic7CiAgICAkTGFuZy0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gICAgICAgICAgID0gJ8Tu4eDi6CDl6+Xs5e3yIOr67CDq4PLg6+7j4Cc7CiAgICAkTGFuZy0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ICAgICAgICAgID0gJ8Tu4eDi6CDq6+DxIOIg6uDy4Ovu4+AnOwogICAgJExhbmctPnsnRnVuY3Rpb25hbGl0eSd9ICAgICAgICAgICAgICA9ICfU8+3q9uju7eDr7e7x8ic7CgogICAgcmV0dXJuIDE7Cn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9jdF9HZW5lcmFsQ2F0YWxvZy5wbSAtIHRoZSBjYXRhbGFuIHRyYW5zbGF0aW9uIG9mIEdlbmVyYWxDYXRhbG9nCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDggT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIENvcHlyaWdodCAoQykgMjAwOCBTaXN0ZW1lcyBPVElDIChpYnNhbHV0KSAtIEFudG9uaW8gTGluZGUKIyAtLQojICRJZDogY3RfR2VuZXJhbENhdGFsb2cucG0sdiAxLjIgMjAwOC8wOC8xNCAxMTowMDo0NyBtaCBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmN0X0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIHZhcnMgcXcoJFZFUlNJT04pOwokVkVSU0lPTiA9IHF3KCRSZXZpc2lvbjogMS4yICQpIFsxXTsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgbXkgJExhbmcgPSAkU2VsZi0+e1RyYW5zbGF0aW9ufTsKCiAgICByZXR1cm4gaWYgcmVmICRMYW5nIG5lICdIQVNIJzsKCiAgICAkTGFuZy0+eydHZW5lcmFsIENhdGFsb2cnfSAgICAgICAgICAgID0gJ0NhdOBsZWcgZ2VuZXJhbCc7CiAgICAkTGFuZy0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ0dlc3Rp8yBkZWwgY2F04GxlZyBnZW5lcmFsJzsKICAgICRMYW5nLT57J0NhdGFsb2cgQ2xhc3MnfSAgICAgICAgICAgICAgPSAnQ2xhc3NlIGRlIGNhdOFsZWcnOwogICAgJExhbmctPnsnQWRkIGEgbmV3IENhdGFsb2cgQ2xhc3MuJ30gICA9ICdBZmVnaXIgdW5hIG5vdmEgY2xhc3NlIGRlIGNhdOBsZWcnOwogICAgJExhbmctPnsnQWRkIENhdGFsb2cgSXRlbSd9ICAgICAgICAgICA9ICdBZmVnaXIgYXJ0aWNsZSBkZSBjYXTgbGVnJzsKICAgICRMYW5nLT57J0FkZCBDYXRhbG9nIENsYXNzJ30gICAgICAgICAgPSAnQWZlZ2lyIGNsYXNzZSBkZSBjYXTgbGVnJzsKICAgICRMYW5nLT57J0Z1bmN0aW9uYWxpdHknfSAgICAgICAgICAgICAgPSAnRnVuY2lvbmFsaXRhdCc7CgogICAgcmV0dXJuIDE7Cn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9jel9HZW5lcmFsQ2F0YWxvZy5wbSAtIHRoZSBjemVjaCB0cmFuc2xhdGlvbiBvZiBHZW5lcmFsQ2F0YWxvZwojIENvcHlyaWdodCAoQykgMjAwMS0yMDA4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy8KIyBDb3B5cmlnaHQgKEMpIDIwMDctMjAwOCBNaWxlbiBLb3V0ZXYKIyAtLQojICRJZDogY3pfR2VuZXJhbENhdGFsb2cucG0sdiAxLjggMjAwOC8wOC8xNCAxMTowMDo0NyBtaCBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TGFuZ3VhZ2U6OmN6X0dlbmVyYWxDYXRhbG9nOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIHZhcnMgcXcoJFZFUlNJT04pOwokVkVSU0lPTiA9IHF3KCRSZXZpc2lvbjogMS44ICQpIFsxXTsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgbXkgJExhbmcgPSAkU2VsZi0+e1RyYW5zbGF0aW9ufTsKCiAgICByZXR1cm4gaWYgcmVmICRMYW5nIG5lICdIQVNIJzsKCiAgICAkTGFuZy0+eydHZW5lcmFsIENhdGFsb2cnfSAgICAgICAgICAgID0gJ1bFoWVvYmVjbsO9IGthdGFsb2cnOwogICAgJExhbmctPnsnR2VuZXJhbCBDYXRhbG9nIE1hbmFnZW1lbnQnfSA9ICfFmMOtemVuw60gdsWhZW9iZWNuw6lobyBrYXRhbG9ndSc7CiAgICAkTGFuZy0+eydDYXRhbG9nIENsYXNzJ30gICAgICAgICAgICAgID0gJ1TFmcOtZHkgdiBrYXRhbG9ndSc7CiAgICAkTGFuZy0+eydBZGQgYSBuZXcgQ2F0YWxvZyBDbGFzcy4nfSAgID0gJ1DFmWlkYXQgbm92b3UgdMWZw61kdSBkbyBrYXRhbG9ndS4nOwogICAgJExhbmctPnsnQWRkIENhdGFsb2cgSXRlbSd9ICAgICAgICAgICA9ICdQxZlpZGF0IHBydmVrIGRvIGthdGFsb2d1JzsKICAgICRMYW5nLT57J0FkZCBDYXRhbG9nIENsYXNzJ30gICAgICAgICAgPSAnUMWZaWRhdCB0xZnDrWR1IGRvIGthdGFsb2d1JzsKICAgICRMYW5nLT57J0Z1bmN0aW9uYWxpdHknfSAgICAgICAgICAgICAgPSAnRnVua2Npb25hbGl0YSc7CgogICAgcmV0dXJuIDE7Cn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9kZV9HZW5lcmFsQ2F0YWxvZy5wbSAtIHRoZSBnZXJtYW4gdHJhbnNsYXRpb24gb2YgR2VuZXJhbENhdGFsb2cKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwOCBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyAkSWQ6IGRlX0dlbmVyYWxDYXRhbG9nLnBtLHYgMS4xMyAyMDA4LzA1LzIxIDA4OjM2OjM3IG1oIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTIuMC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZGVfR2VuZXJhbENhdGFsb2c7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgdmFycyBxdygkVkVSU0lPTik7CiRWRVJTSU9OID0gcXcoJFJldmlzaW9uOiAxLjEzICQpIFsxXTsKCnN1YiBEYXRhIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CgogICAgbXkgJExhbmcgPSAkU2VsZi0+e1RyYW5zbGF0aW9ufTsKCiAgICByZXR1cm4gaWYgcmVmICRMYW5nIG5lICdIQVNIJzsKCiAgICAkTGFuZy0+eydHZW5lcmFsIENhdGFsb2cnfSAgICAgICAgICAgID0gJ0dlbmVyYWwgQ2F0YWxvZyc7CiAgICAkTGFuZy0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ0dlbmVyYWwgQ2F0YWxvZyBWZXJ3YWx0dW5nJzsKICAgICRMYW5nLT57J0NhdGFsb2cgQ2xhc3MnfSAgICAgICAgICAgICAgPSAnS2F0YWxvZyBLbGFzc2UnOwogICAgJExhbmctPnsnQWRkIGEgbmV3IENhdGFsb2cgQ2xhc3MuJ30gICA9ICdFaW5lIG5ldWUgS2F0YWxvZyBLbGFzc2UgaGluenVm/Gdlbi4nOwogICAgJExhbmctPnsnQWRkIENhdGFsb2cgSXRlbSd9ICAgICAgICAgICA9ICdLYXRhbG9nIEVpbnRyYWcgaGluenVm/Gdlbic7CiAgICAkTGFuZy0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ICAgICAgICAgID0gJ0thdGFsb2cgS2xhc3NlIGhpbnp1ZvxnZW4nOwogICAgJExhbmctPnsnRnVuY3Rpb25hbGl0eSd9ICAgICAgICAgICAgICA9ICdGdW5rdGlvbmFsaXTkdCc7CgogICAgcmV0dXJuIDE7Cn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9lc19HZW5lcmFsQ2F0YWxvZy5wbSAtIHRoZSBzcGFuaXNoIHRyYW5zbGF0aW9uIG9mIEdlbmVyYWxDYXRhbG9nCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDggT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIENvcHlyaWdodCAoQykgMjAwOCBBcXVpbGVzIENvaGVuCiMgLS0KIyAkSWQ6IGVzX0dlbmVyYWxDYXRhbG9nLnBtLHYgMS40IDIwMDgvMDgvMjAgMTA6NTg6MzIgbWggRXhwICQKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMi4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjplc19HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSB2YXJzIHF3KCRWRVJTSU9OKTsKJFZFUlNJT04gPSBxdygkUmV2aXNpb246IDEuNCAkKSBbMV07CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgIG15ICRMYW5nID0gJFNlbGYtPntUcmFuc2xhdGlvbn07CgogICAgcmV0dXJuIGlmIHJlZiAkTGFuZyBuZSAnSEFTSCc7CgogICAgJExhbmctPnsnR2VuZXJhbCBDYXRhbG9nJ30gICAgICAgICAgICA9ICdDYXRhbG9nbyBHZW5lcmFsJzsKICAgICRMYW5nLT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAnR2VzdGnzbiBkZWwgQ2F0YWxvZ28gR2VuZXJhbCc7CiAgICAkTGFuZy0+eydDYXRhbG9nIENsYXNzJ30gICAgICAgICAgICAgID0gJ0NsYXNlIGRlIENhdGFsb2dvJzsKICAgICRMYW5nLT57J0FkZCBhIG5ldyBDYXRhbG9nIENsYXNzLid9ICAgPSAnQfFhZGlyIHVuYSBudWV2YSBDbGFzZSBhbCBDYXRhbG9nbyc7CiAgICAkTGFuZy0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gICAgICAgICAgID0gJ0HxYWRpciBFbGVtZW50byBhbCBDYXRhbG9nbyc7CiAgICAkTGFuZy0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ICAgICAgICAgID0gJ0HxYWRpciBDbGFzZSBhbCBDYXRhbG9nbyc7CiAgICAkTGFuZy0+eydGdW5jdGlvbmFsaXR5J30gICAgICAgICAgICAgID0gJ0Z1bmNpb25hbGlkYWQnOwoKICAgIHJldHVybiAxOwp9CgoxOwo=
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9wbF9HZW5lcmFsQ2F0YWxvZy5wbSAtIHRoZSBwb2xpc2ggdHJhbnNsYXRpb24gb2YgR2VuZXJhbENhdGFsb2cKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwOCBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgQ29weXJpZ2h0IChDKSAyMDA4IE1hY2llaiBMb3N6YWpjCiMgLS0KIyAkSWQ6IHBsX0dlbmVyYWxDYXRhbG9nLnBtLHYgMS4zIDIwMDgvMDgvMTQgMTE6MDA6NDcgbWggRXhwICQKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMi4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpwbF9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSB2YXJzIHF3KCRWRVJTSU9OKTsKJFZFUlNJT04gPSBxdygkUmV2aXNpb246IDEuMyAkKSBbMV07CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgIG15ICRMYW5nID0gJFNlbGYtPntUcmFuc2xhdGlvbn07CgogICAgcmV0dXJuIGlmIHJlZiAkTGFuZyBuZSAnSEFTSCc7CgogICAgJExhbmctPnsnR2VuZXJhbCBDYXRhbG9nJ30gICAgICAgICAgICA9ICdLYXRhbG9nIGez83dueSc7CiAgICAkTGFuZy0+eydHZW5lcmFsIENhdGFsb2cgTWFuYWdlbWVudCd9ID0gJ1phcnqxZHphbmllIGthdGFsb2dpZW0gZ7Pzd255bSc7CiAgICAkTGFuZy0+eydDYXRhbG9nIENsYXNzJ30gICAgICAgICAgICAgID0gJyc7CiAgICAkTGFuZy0+eydBZGQgYSBuZXcgQ2F0YWxvZyBDbGFzcy4nfSAgID0gJyc7CiAgICAkTGFuZy0+eydBZGQgQ2F0YWxvZyBJdGVtJ30gICAgICAgICAgID0gJ0RvZGFqIGVsZW1lbnQga2F0YWxvZ3UnOwogICAgJExhbmctPnsnQWRkIENhdGFsb2cgQ2xhc3MnfSAgICAgICAgICA9ICcnOwogICAgJExhbmctPnsnRnVuY3Rpb25hbGl0eSd9ICAgICAgICAgICAgICA9ICdGdW5rY2pvbmFsbm+25ic7CgogICAgcmV0dXJuIDE7Cn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9ydV9HZW5lcmFsQ2F0YWxvZy5wbSAtIHRoZSBydXNzaWFuIHRyYW5zbGF0aW9uIG9mIEdlbmVyYWxDYXRhbG9nCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDggT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIENvcHlyaWdodCAoQykgMjAwOCBFZ29yIFRzaWxlbmtvIDxiZzhzIGF0IHN5bWxpbmsucnU+CiMgLS0KIyAkSWQ6IHJ1X0dlbmVyYWxDYXRhbG9nLnBtLHYgMS4xIDIwMDgvMDgvMTUgMTQ6NDY6MzEgbWggRXhwICQKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMi4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Okxhbmd1YWdlOjpydV9HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSB2YXJzIHF3KCRWRVJTSU9OKTsKJFZFUlNJT04gPSBxdygkUmV2aXNpb246IDEuMSAkKSBbMV07CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgIG15ICRMYW5nID0gJFNlbGYtPntUcmFuc2xhdGlvbn07CgogICAgcmV0dXJuIGlmIHJlZiAkTGFuZyBuZSAnSEFTSCc7CgogICAgJExhbmctPnsnR2VuZXJhbCBDYXRhbG9nJ30gICAgICAgICAgICA9ICfO4fno6SDq4PLg6+7jJzsKICAgICRMYW5nLT57J0dlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50J30gPSAn0+/w4OLr5e3o5SDu4fno7CDq4PLg6+7j7uwnOwogICAgJExhbmctPnsnQ2F0YWxvZyBDbGFzcyd9ICAgICAgICAgICAgICA9ICfK6+Dx8SDq4PLg6+7j4Cc7CiAgICAkTGFuZy0+eydBZGQgYSBuZXcgQ2F0YWxvZyBDbGFzcy4nfSAgID0gJ8Tu4eDi6PL8IO3u4vvpIOrr4PHxIOrg8uDr7uPgJzsKICAgICRMYW5nLT57J0FkZCBDYXRhbG9nIEl0ZW0nfSAgICAgICAgICAgPSAnxO7h4OLr5e3o5SD96+Xs5e3y4CDq4PLg6+7j4Cc7CiAgICAkTGFuZy0+eydBZGQgQ2F0YWxvZyBDbGFzcyd9ICAgICAgICAgID0gJ8Tu4eDi6+Xt6OUg6uvg8fHgIOrg8uDr7uPgJzsKICAgICRMYW5nLT57J0Z1bmN0aW9uYWxpdHknfSAgICAgICAgICAgICAgPSAn1PPt6vbo7u3g6/zt7vHy/Cc7CgogICAgcmV0dXJuIDE7Cn0KCjE7Cg==
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FkbWluR2VuZXJhbENhdGFsb2cucG0gLSBhZG1pbiBmcm9udGVuZCBvZiBnZW5lcmFsIGNhdGFsb2cgbWFuYWdlbWVudAojIENvcHlyaWdodCAoQykgMjAwMS0yMDA4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy8KIyAtLQojICRJZDogQWRtaW5HZW5lcmFsQ2F0YWxvZy5wbSx2IDEuMjEgMjAwOC8wMy8wNiAxNDoyODowNCBtaCBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6TW9kdWxlczo6QWRtaW5HZW5lcmFsQ2F0YWxvZzsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2c7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VmFsaWQ7Cgp1c2UgdmFycyBxdygkVkVSU0lPTik7CiRWRVJTSU9OID0gcXcoJFJldmlzaW9uOiAxLjIxICQpIFsxXTsKCnN1YiBuZXcgewogICAgbXkgKCAkVHlwZSwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0geyVQYXJhbX07CiAgICBibGVzcyggJFNlbGYsICRUeXBlICk7CgogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yIG15ICRPYmplY3QgKHF3KENvbmZpZ09iamVjdCBQYXJhbU9iamVjdCBMb2dPYmplY3QgTGF5b3V0T2JqZWN0KSkgewogICAgICAgIGlmICggISRTZWxmLT57JE9iamVjdH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvciggTWVzc2FnZSA9PiAiR290IG5vICRPYmplY3QhIiApOwogICAgICAgIH0KICAgIH0KICAgICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nLT5uZXcoJVBhcmFtKTsKICAgICRTZWxmLT57VmFsaWRPYmplY3R9ICAgICAgICAgID0gS2VybmVsOjpTeXN0ZW06OlZhbGlkLT5uZXcoJVBhcmFtKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGNhdGFsb2cgaXRlbSBsaXN0CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnSXRlbUxpc3QnICkgewogICAgICAgIG15ICRDbGFzcyA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIkNsYXNzIiApIHx8ICcnOwoKICAgICAgICAjIGNoZWNrIG5lZWRlZCBjbGFzcwogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KCBPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufSIgKSBpZiAhJENsYXNzOwoKICAgICAgICAjIGdldCBjYXRhbG9nIGNsYXNzIGxpc3QKICAgICAgICBteSAkQ2xhc3NMaXN0ICAgICAgID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkNsYXNzTGlzdCgpOwogICAgICAgIG15ICRDbGFzc09wdGlvblN0cmcgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBOYW1lICAgICAgICAgPT4gJ0NsYXNzJywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+ICRDbGFzc0xpc3QsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgICA9PiAkQ2xhc3MsCiAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBvdmVydmlldwogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICBDbGFzc09wdGlvblN0cmcgPT4gJENsYXNzT3B0aW9uU3RyZywKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3SXRlbScsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgQ2xhc3MgPT4gJENsYXNzLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgICMgZ2V0IGF2YWlsYWJpbGl0eSBsaXN0CiAgICAgICAgbXkgJVZhbGlkTGlzdCA9ICRTZWxmLT57VmFsaWRPYmplY3R9LT5WYWxpZExpc3QoKTsKCiAgICAgICAgIyBnZXQgY2F0YWxvZyBpdGVtIGxpc3QKICAgICAgICBteSAkSXRlbUlETGlzdCA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtTGlzdCgKICAgICAgICAgICAgQ2xhc3MgPT4gJENsYXNzLAogICAgICAgICAgICBWYWxpZCA9PiAwLAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgaXRlbSBsaXN0CiAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oKQogICAgICAgICAgICBpZiAhJEl0ZW1JRExpc3QgfHwgISV7JEl0ZW1JRExpc3R9OwoKICAgICAgICBteSAkQ3NzQ2xhc3MgPSAnJzsKICAgICAgICBmb3IgbXkgJEl0ZW1JRCAoIHNvcnQgeyAkSXRlbUlETGlzdC0+eyRhfSBjbXAgJEl0ZW1JRExpc3QtPnskYn0gfSBrZXlzICV7JEl0ZW1JRExpc3R9ICkgewoKICAgICAgICAgICAgIyBzZXQgb3V0cHV0IGNsYXNzCiAgICAgICAgICAgICRDc3NDbGFzcyA9ICRDc3NDbGFzcyBlcSAnc2VhcmNoYWN0aXZlJyA/ICdzZWFyY2hwYXNzaXZlJyA6ICdzZWFyY2hhY3RpdmUnOwoKICAgICAgICAgICAgIyBnZXQgaXRlbSBkYXRhCiAgICAgICAgICAgIG15ICRJdGVtRGF0YSA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtR2V0KAogICAgICAgICAgICAgICAgSXRlbUlEID0+ICRJdGVtSUQsCiAgICAgICAgICAgICk7CgogICAgICAgICAgICAjIG91dHB1dCBvdmVydmlldyBpdGVtIGxpc3QKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3SXRlbUxpc3QnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJXskSXRlbURhdGF9LAogICAgICAgICAgICAgICAgICAgIENzc0NsYXNzICAgICAgPT4gJENzc0NsYXNzLAogICAgICAgICAgICAgICAgICAgIEZ1bmN0aW9uYWxpdHkgPT4gJEl0ZW1EYXRhLT57RnVuY3Rpb25hbGl0eX0gfHwgJy0nLAogICAgICAgICAgICAgICAgICAgIFZhbGlkICAgICAgICAgPT4gJFZhbGlkTGlzdHsgJEl0ZW1EYXRhLT57VmFsaWRJRH0gfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIG91dHB1dCBoZWFkZXIgYW5kIG5hdmJhcgogICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgY3JlYXRlIG91dHB1dCBzdHJpbmcKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluR2VuZXJhbENhdGFsb2cnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gXCVQYXJhbSwKICAgICAgICApOwoKICAgICAgICAjIGFkZCBmb290ZXIKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CgogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgY2F0YWxvZyBpdGVtIGVkaXQKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICggJFNlbGYtPntTdWJhY3Rpb259IGVxICdJdGVtRWRpdCcgKSB7CiAgICAgICAgbXkgJUl0ZW1EYXRhOwoKICAgICAgICAjIGdldCBwYXJhbXMKICAgICAgICAkSXRlbURhdGF7SXRlbUlEfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIkl0ZW1JRCIgKTsKICAgICAgICBpZiAoICRJdGVtRGF0YXtJdGVtSUR9IGVxICdORVcnICkgewoKICAgICAgICAgICAgIyBnZXQgY2xhc3MKICAgICAgICAgICAgJEl0ZW1EYXRhe0NsYXNzfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSggUGFyYW0gPT4gIkNsYXNzIiApOwoKICAgICAgICAgICAgIyByZWRpcmVjdCB0byBvdmVydmlldwogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5SZWRpcmVjdCggT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn0iICkKICAgICAgICAgICAgICAgIGlmICEkSXRlbURhdGF7Q2xhc3N9OwogICAgICAgIH0KICAgICAgICBlbHNlIHsKCiAgICAgICAgICAgICMgZ2V0IGl0ZW0gZGF0YQogICAgICAgICAgICBteSAkSXRlbURhdGFSZWYgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUdldCgKICAgICAgICAgICAgICAgIEl0ZW1JRCA9PiAkSXRlbURhdGF7SXRlbUlEfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgICAgICMgY2hlY2sgaXRlbSBkYXRhCiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKCkKICAgICAgICAgICAgICAgIGlmICEkSXRlbURhdGFSZWY7CgogICAgICAgICAgICAlSXRlbURhdGEgPSAleyRJdGVtRGF0YVJlZn07CiAgICAgICAgfQoKICAgICAgICAjIGdlbmVyYXRlIENsYXNzT3B0aW9uU3RyZwogICAgICAgIG15ICRDbGFzc0xpc3QgICAgICAgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+Q2xhc3NMaXN0KCk7CiAgICAgICAgbXkgJENsYXNzT3B0aW9uU3RyZyA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIE5hbWUgICAgICAgICA9PiAnQ2xhc3MnLAogICAgICAgICAgICBEYXRhICAgICAgICAgPT4gJENsYXNzTGlzdCwKICAgICAgICAgICAgU2VsZWN0ZWRJRCAgID0+ICRJdGVtRGF0YXtDbGFzc30sCiAgICAgICAgICAgIFBvc3NpYmxlTm9uZSA9PiAxLAogICAgICAgICAgICBUcmFuc2xhdGlvbiAgPT4gMCwKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBvdmVydmlldwogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgICAgICBDbGFzc09wdGlvblN0cmcgPT4gJENsYXNzT3B0aW9uU3RyZywKICAgICAgICAgICAgfSwKICAgICAgICApOwoKICAgICAgICAjIGdldCBmdW5jdGlvbmFsaXR5IGxpc3QKICAgICAgICBteSAkRnVuY3Rpb25hbGl0eVJlZiA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5GdW5jdGlvbmFsaXR5TGlzdCgKICAgICAgICAgICAgQ2xhc3MgPT4gJEl0ZW1EYXRhe0NsYXNzfSwKICAgICAgICApOwoKICAgICAgICAjIHByZXBhcmUgZnVuY3Rpb25hbGl0eSBsaXN0CiAgICAgICAgbXkgJUZ1bmN0aW9uYWxpdHlMaXN0OwogICAgICAgIGZvciBteSAkRnVuY3Rpb25hbGl0eSAoIEB7JEZ1bmN0aW9uYWxpdHlSZWZ9ICkgewogICAgICAgICAgICAkRnVuY3Rpb25hbGl0eUxpc3R7JEZ1bmN0aW9uYWxpdHl9ID0gJEZ1bmN0aW9uYWxpdHkgfHwgJy0nOwogICAgICAgIH0KICAgICAgICBpZiAoICElRnVuY3Rpb25hbGl0eUxpc3QgKSB7CiAgICAgICAgICAgICVGdW5jdGlvbmFsaXR5TGlzdCA9ICgKICAgICAgICAgICAgICAgICcnID0+ICctJywKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2VuZXJhdGUgRnVuY3Rpb25hbGl0eU9wdGlvblN0cmcKICAgICAgICBteSAkRnVuY3Rpb25hbGl0eU9wdGlvblN0cmcgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkU2VsZWN0aW9uKAogICAgICAgICAgICBOYW1lICAgICAgICA9PiAnRnVuY3Rpb25hbGl0eScsCiAgICAgICAgICAgIERhdGEgICAgICAgID0+IFwlRnVuY3Rpb25hbGl0eUxpc3QsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgID0+ICRJdGVtRGF0YXtGdW5jdGlvbmFsaXR5fSB8fCAnJywKICAgICAgICAgICAgVHJhbnNsYXRpb24gPT4gMCwKICAgICAgICApOwoKICAgICAgICAjIGdlbmVyYXRlIFZhbGlkT3B0aW9uU3RyZwogICAgICAgIG15ICVWYWxpZExpc3QgICAgICAgID0gJFNlbGYtPntWYWxpZE9iamVjdH0tPlZhbGlkTGlzdCgpOwogICAgICAgIG15ICVWYWxpZExpc3RSZXZlcnNlID0gcmV2ZXJzZSAlVmFsaWRMaXN0OwogICAgICAgIG15ICRWYWxpZE9wdGlvblN0cmcgID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgTmFtZSAgICAgICA9PiAnVmFsaWRJRCcsCiAgICAgICAgICAgIERhdGEgICAgICAgPT4gXCVWYWxpZExpc3QsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgPT4gJEl0ZW1EYXRhe1ZhbGlkSUR9IHx8ICRWYWxpZExpc3RSZXZlcnNle3ZhbGlkfSwKICAgICAgICApOwoKICAgICAgICAjIG91dHB1dCBJdGVtRWRpdAogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0l0ZW1FZGl0JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlSXRlbURhdGEsCiAgICAgICAgICAgICAgICBGdW5jdGlvbmFsaXR5T3B0aW9uU3RyZyA9PiAkRnVuY3Rpb25hbGl0eU9wdGlvblN0cmcsCiAgICAgICAgICAgICAgICBWYWxpZE9wdGlvblN0cmcgICAgICAgICA9PiAkVmFsaWRPcHRpb25TdHJnLAogICAgICAgICAgICB9LAogICAgICAgICk7CgogICAgICAgIGlmICggJEl0ZW1EYXRhe0NsYXNzfSBlcSAnTkVXJyApIHsKCiAgICAgICAgICAgICMgb3V0cHV0IEl0ZW1FZGl0Q2xhc3NBZGQKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0l0ZW1FZGl0Q2xhc3NBZGQnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgQ2xhc3MgPT4gJEl0ZW1EYXRhe0NsYXNzfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewoKICAgICAgICAgICAgIyBvdXRwdXQgSXRlbUVkaXRDbGFzc0V4aXN0CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdJdGVtRWRpdENsYXNzRXhpc3QnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgQ2xhc3MgPT4gJEl0ZW1EYXRhe0NsYXNzfSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQoKICAgICAgICAjIG91dHB1dCBoZWFkZXIKICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwoKICAgICAgICAjIGNyZWF0ZSBvdXRwdXQgc3RyaW5nCiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pbkdlbmVyYWxDYXRhbG9nJywKICAgICAgICAgICAgRGF0YSAgICAgICAgID0+IFwlUGFyYW0sCiAgICAgICAgKTsKCiAgICAgICAgIyBhZGQgZm9vdGVyCiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwoKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGNhdGFsb2cgaXRlbSBzYXZlCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoICRTZWxmLT57U3ViYWN0aW9ufSBlcSAnSXRlbVNhdmUnICkgewogICAgICAgIG15ICVJdGVtRGF0YTsKCiAgICAgICAgIyBnZXQgcGFyYW1zCiAgICAgICAgZm9yIG15ICRQYXJhbSAocXcoQ2xhc3MgSXRlbUlEIE5hbWUgRnVuY3Rpb25hbGl0eSBWYWxpZElEIENvbW1lbnQpKSB7CiAgICAgICAgICAgICRJdGVtRGF0YXskUGFyYW19ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKCBQYXJhbSA9PiAkUGFyYW0gKSB8fCAnJzsKICAgICAgICB9CgogICAgICAgICMgY2hlY2sgY2xhc3MKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5SZWRpcmVjdCggT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn0iICkKICAgICAgICAgICAgaWYgISRJdGVtRGF0YXtDbGFzc30gfHwgJEl0ZW1EYXRhe0NsYXNzfSBlcSAnTkVXJzsKCiAgICAgICAgIyBzYXZlIHRvIGRhdGFiYXNlCiAgICAgICAgbXkgJFN1Y2Nlc3M7CiAgICAgICAgaWYgKCAkSXRlbURhdGF7SXRlbUlEfSBlcSAnTkVXJyApIHsKICAgICAgICAgICAgJFN1Y2Nlc3MgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUFkZCgKICAgICAgICAgICAgICAgICVJdGVtRGF0YSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkU3VjY2VzcyA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtVXBkYXRlKAogICAgICAgICAgICAgICAgJUl0ZW1EYXRhLAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKCkgaWYgISRTdWNjZXNzOwoKICAgICAgICAjIHJlZGlyZWN0IHRvIG92ZXJ2aWV3IGNsYXNzIGxpc3QKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5SZWRpcmVjdCgKICAgICAgICAgICAgT1AgPT4gIkFjdGlvbj0kU2VsZi0+e0FjdGlvbn0mU3ViYWN0aW9uPUl0ZW1MaXN0JkNsYXNzPSRJdGVtRGF0YXtDbGFzc30iCiAgICAgICAgKTsKICAgIH0KCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIG92ZXJ2aWV3CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNlIHsKCiAgICAgICAgIyBnZXQgY2F0YWxvZyBjbGFzcyBsaXN0CiAgICAgICAgbXkgJENsYXNzTGlzdCAgICAgICA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5DbGFzc0xpc3QoKTsKICAgICAgICBteSAkQ2xhc3NPcHRpb25TdHJnID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZFNlbGVjdGlvbigKICAgICAgICAgICAgTmFtZSAgICAgICAgID0+ICdDbGFzcycsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiAkQ2xhc3NMaXN0LAogICAgICAgICAgICBQb3NzaWJsZU5vbmUgPT4gMSwKICAgICAgICAgICAgVHJhbnNsYXRpb24gID0+IDAsCiAgICAgICAgKTsKCiAgICAgICAgIyBvdXRwdXQgb3ZlcnZpZXcKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICAgICAgQ2xhc3NPcHRpb25TdHJnID0+ICRDbGFzc09wdGlvblN0cmcsCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld0NsYXNzJywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlUGFyYW0sCiAgICAgICAgICAgIH0sCiAgICAgICAgKTsKCiAgICAgICAgbXkgJENzc0NsYXNzID0gJyc7CiAgICAgICAgZm9yIG15ICRDbGFzcyAoIEB7JENsYXNzTGlzdH0gKSB7CgogICAgICAgICAgICAjIHNldCBvdXRwdXQgY2xhc3MKICAgICAgICAgICAgJENzc0NsYXNzID0gJENzc0NsYXNzIGVxICdzZWFyY2hhY3RpdmUnID8gJ3NlYXJjaHBhc3NpdmUnIDogJ3NlYXJjaGFjdGl2ZSc7CgogICAgICAgICAgICAjIG91dHB1dCBvdmVydmlldyBjbGFzcyBsaXN0CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld0NsYXNzTGlzdCcsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICBDbGFzcyAgICA9PiAkQ2xhc3MsCiAgICAgICAgICAgICAgICAgICAgQ3NzQ2xhc3MgPT4gJENzc0NsYXNzLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgb3V0cHV0IGhlYWRlciBhbmQgbmF2YmFyCiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBjcmVhdGUgb3V0cHV0IHN0cmluZwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWRtaW5HZW5lcmFsQ2F0YWxvZycsCiAgICAgICAgICAgIERhdGEgICAgICAgICA9PiBcJVBhcmFtLAogICAgICAgICk7CgogICAgICAgICMgYWRkIGZvb3RlcgogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKCiAgICAgICAgcmV0dXJuICRPdXRwdXQ7CiAgICB9Cn0KCjE7Cg==
IyAtLQojIEFkbWluR2VuZXJhbENhdGFsb2cuZHRsIC0gcHJvdmlkZXMgSFRNTCBmb3JtIGZvciBBZG1pbkdlbmVyYWxDYXRhbG9nCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDggT1RSUyBBRywgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBBZG1pbkdlbmVyYWxDYXRhbG9nLmR0bCx2IDEuNiAyMDA4LzAxLzI4IDE0OjU4OjQ1IG1oIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLTIuMC50eHQuCiMgLS0KCjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3IC0tPgo8dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIzIj4KICA8dHI+CiAgICA8dGQgY29sc3Bhbj0iMiIgY2xhc3M9Im1haW5oZWFkIj4KICAgICAgJEVudnsiQm94MCJ9JFRleHR7IkdlbmVyYWwgQ2F0YWxvZyBNYW5hZ2VtZW50In0kRW52eyJCb3gxIn0KICAgIDwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQgd2lkdGg9IjMwJSIgY2xhc3M9Im1haW5ib2R5Ij4KICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJnZXQiPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9Ij4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJJdGVtRWRpdCI+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iSXRlbUlEIiB2YWx1ZT0iTkVXIj4KICAgICAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iNCI+CiAgICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGhlYWQiPiRUZXh0eyJBZGQgQ2F0YWxvZyBJdGVtIn06PC90ZD4KICAgICAgICAgIDwvdHI+CiAgICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGJvZHkiPgogICAgICAgICAgICAgIDx0YWJsZT4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiQ2F0YWxvZyBDbGFzcyJ9OjwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj4kRGF0YXsiQ2xhc3NPcHRpb25TdHJnIn08L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICA8L3RkPgogICAgICAgICAgPC90cj4KICAgICAgICAgIDx0cj4KICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50Zm9vdGVyIj4KICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImJ1dHRvbiIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iJFRleHR7IkFkZCJ9Ij4KICAgICAgICAgICAgPC90ZD4KICAgICAgICAgIDwvdHI+CiAgICAgICAgPC90YWJsZT4KICAgICAgPC9mb3JtPgogICAgICA8YnI+CiAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0iZ2V0Ij4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSIkRW52eyJBY3Rpb24ifSI+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iSXRlbUVkaXQiPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Ikl0ZW1JRCIgdmFsdWU9Ik5FVyI+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQ2xhc3MiIHZhbHVlPSJORVciPgogICAgICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSI0Ij4KICAgICAgICAgIDx0cj4KICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50aGVhZCI+JFRleHR7IkFkZCBDYXRhbG9nIENsYXNzIn06PC90ZD4KICAgICAgICAgIDwvdHI+CiAgICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGJvZHkiPiRUZXh0eyJBZGQgYSBuZXcgQ2F0YWxvZyBDbGFzcy4ifTwvdGQ+CiAgICAgICAgICA8L3RyPgogICAgICAgICAgPHRyPgogICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRmb290ZXIiPgogICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iYnV0dG9uIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSIkVGV4dHsiQWRkIn0iPgogICAgICAgICAgICA8L3RkPgogICAgICAgICAgPC90cj4KICAgICAgICA8L3RhYmxlPgogICAgICA8L2Zvcm0+CiAgICA8L3RkPgogICAgPHRkIHdpZHRoPSI3MCUiIGNsYXNzPSJtYWluYm9keSI+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3Q2xhc3MgLS0+CiAgICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSI0Ij4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRoZWFkIj4kVGV4dHsiTGlzdCJ9OjwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRib2R5Ij4KICAgICAgICAgICAgPHRhYmxlIHdpZHRoPSIxMDAlIiBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMyI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5IiB3aWR0aD0iNjAlIj4kVGV4dHsiQ2F0YWxvZyBDbGFzcyJ9PC90ZD4KICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpPdmVydmlld0NsYXNzTGlzdCAtLT4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IiRRRGF0YXsiQ3NzQ2xhc3MifSI+CiAgICAgICAgICAgICAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn0mU3ViYWN0aW9uPUl0ZW1MaXN0JkNsYXNzPSRMUURhdGF7IkNsYXNzIn0iPgogICAgICAgICAgICAgICAgICAkUURhdGF7IkNsYXNzIn0KICAgICAgICAgICAgICAgICAgPC9hPgogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpPdmVydmlld0NsYXNzTGlzdCAtLT4KICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgICA8dHI+CiAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRmb290ZXIiPgogICAgICAgICAgICAmbmJzcDsKICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgPC90YWJsZT4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdDbGFzcyAtLT4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdJdGVtIC0tPgogICAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iNCI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50aGVhZCI+JFRleHR7Ikxpc3QifTo8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50Ym9keSI+CiAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjMiPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSIgd2lkdGg9IjYwJSI+JFFEYXRheyJDbGFzcyJ9PC90ZD4KICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSIgYWxpZ249ImNlbnRlciI+JFRleHR7IkZ1bmN0aW9uYWxpdHkifTwvdGQ+CiAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiIGFsaWduPSJjZW50ZXIiPiRUZXh0eyJWYWxpZCJ9PC90ZD4KICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpPdmVydmlld0l0ZW1MaXN0IC0tPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iJFFEYXRheyJDc3NDbGFzcyJ9Ij4KICAgICAgICAgICAgICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifSZTdWJhY3Rpb249SXRlbUVkaXQmSXRlbUlEPSRRRGF0YXsiSXRlbUlEIn0iPgogICAgICAgICAgICAgICAgICAkUURhdGF7Ik5hbWUifQogICAgICAgICAgICAgICAgICA8L2E+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkIGNsYXNzPSIkUURhdGF7IkNzc0NsYXNzIn0iIGFsaWduPSJjZW50ZXIiPgogICAgICAgICAgICAgICAgICAkUURhdGF7IkZ1bmN0aW9uYWxpdHkifQogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iJFFEYXRheyJDc3NDbGFzcyJ9IiBhbGlnbj0iY2VudGVyIj4KICAgICAgICAgICAgICAgICAgJFRleHR7IiRRRGF0YXsiVmFsaWQifSJ9CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3SXRlbUxpc3QgLS0+CiAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50Zm9vdGVyIj4KICAgICAgICAgICAgJm5ic3A7CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgIDwvdGFibGU+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3SXRlbSAtLT4KPCEtLSBkdGw6YmxvY2s6SXRlbUVkaXQgLS0+CiAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0iZ2V0Ij4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSIkRW52eyJBY3Rpb24ifSI+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iSXRlbVNhdmUiPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9Ikl0ZW1JRCIgdmFsdWU9IiRRRGF0YXsiSXRlbUlEIn0iPgogICAgICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSI0Ij4KICAgICAgICAgIDx0cj4KICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50aGVhZCI+JFRleHR7Ikl0ZW0ifSAkVGV4dHsiRWRpdCJ9OjwvdGQ+CiAgICAgICAgICA8L3RyPgogICAgICAgICAgPHRyPgogICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRib2R5Ij4KICAgICAgICAgICAgICA8dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjMiPgo8IS0tIGR0bDpibG9jazpJdGVtRWRpdENsYXNzQWRkIC0tPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJDYXRhbG9nIENsYXNzIn06IDwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iQ2xhc3MiIHZhbHVlPSIkUURhdGF7Ik5hbWUifSIgc2l6ZT0iNDUiIG1heGxlbmd0aD0iMTAwIj4KICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOkl0ZW1FZGl0Q2xhc3NBZGQgLS0+CjwhLS0gZHRsOmJsb2NrOkl0ZW1FZGl0Q2xhc3NFeGlzdCAtLT4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiQ2F0YWxvZyBDbGFzcyJ9OiA8L3RkPgogICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+CiAgICAgICAgICAgICAgICAgICAgJFFEYXRheyJDbGFzcyJ9CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQ2xhc3MiIHZhbHVlPSIkUURhdGF7IkNsYXNzIn0iPgogICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KPCEtLSBkdGw6YmxvY2s6SXRlbUVkaXRDbGFzc0V4aXN0IC0tPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJOYW1lIn06IDwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iTmFtZSIgdmFsdWU9IiRRRGF0YXsiTmFtZSJ9IiBzaXplPSI0NSIgbWF4bGVuZ3RoPSIxMDAiPgogICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiRnVuY3Rpb25hbGl0eSJ9OiA8L3RkPgogICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+JERhdGF7IkZ1bmN0aW9uYWxpdHlPcHRpb25TdHJnIn08L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiVmFsaWQifTogPC90ZD4KICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPiREYXRheyJWYWxpZE9wdGlvblN0cmcifTwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJDb21tZW50In06IDwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iQ29tbWVudCIgdmFsdWU9IiRRRGF0YXsiQ29tbWVudCJ9IiBzaXplPSI1MCIgbWF4bGVuZ3RoPSIyMDAiPgogICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICA8L3RkPgogICAgICAgICAgPC90cj4KICAgICAgICAgIDx0cj4KICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50Zm9vdGVyIj4KICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImJ1dHRvbiIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iJFRleHR7IlN1Ym1pdCJ9Ij4KICAgICAgICAgICAgPC90ZD4KICAgICAgICAgIDwvdHI+CiAgICAgICAgPC90YWJsZT4KICAgICAgPC9mb3JtPgo8IS0tIGR0bDpibG9jazpJdGVtRWRpdCAtLT4KICAgIDwvdGQ+CiAgPC90cj4KPC90YWJsZT4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXcgLS0+Cg==
IyAtLQojIEtlcm5lbC9TeXN0ZW0vR2VuZXJhbENhdGFsb2cucG0gLSBhbGwgZ2VuZXJhbCBjYXRhbG9nIGZ1bmN0aW9ucwojIENvcHlyaWdodCAoQykgMjAwMS0yMDA4IE9UUlMgQUcsIGh0dHA6Ly9vdHJzLm9yZy8KIyAtLQojICRJZDogR2VuZXJhbENhdGFsb2cucG0sdiAxLjQzIDIwMDgvMDcvMjMgMDk6MDI6MDIgdWIgRXhwICQKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMi4wLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2c7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlZhbGlkOwp1c2UgS2VybmVsOjpTeXN0ZW06OkNoZWNrSXRlbTsKCnVzZSB2YXJzIHF3KCRWRVJTSU9OKTsKJFZFUlNJT04gPSBxdygkUmV2aXNpb246IDEuNDMgJCkgWzFdOwoKPWhlYWQxIE5BTUUKCktlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZyAtIGdlbmVyYWwgY2F0YWxvZyBsaWIKCj1oZWFkMSBTWU5PUFNJUwoKQWxsIGdlbmVyYWwgY2F0YWxvZyBmdW5jdGlvbnMuCgo9aGVhZDEgUFVCTElDIElOVEVSRkFDRQoKPW92ZXIgNAoKPWN1dAoKPWl0ZW0gbmV3KCkKCmNyZWF0ZSBhbiBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpDb25maWc7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OkRCOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpHZW5lcmFsQ2F0YWxvZzsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6TG9nOwogICAgdXNlIEtlcm5lbDo6U3lzdGVtOjpNYWluOwoKICAgIG15ICRDb25maWdPYmplY3QgPSBLZXJuZWw6OkNvbmZpZy0+bmV3KCk7CiAgICBteSAkTG9nT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OkxvZy0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgKTsKICAgIG15ICRNYWluT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06Ok1haW4tPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICk7CiAgICBteSAkREJPYmplY3QgPSBLZXJuZWw6OlN5c3RlbTo6REItPm5ldygKICAgICAgICBDb25maWdPYmplY3QgPT4gJENvbmZpZ09iamVjdCwKICAgICAgICBMb2dPYmplY3QgICAgPT4gJExvZ09iamVjdCwKICAgICAgICBNYWluT2JqZWN0ICAgPT4gJE1haW5PYmplY3QsCiAgICApOwogICAgbXkgJEdlbmVyYWxDYXRhbG9nT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nLT5uZXcoCiAgICAgICAgQ29uZmlnT2JqZWN0ID0+ICRDb25maWdPYmplY3QsCiAgICAgICAgTG9nT2JqZWN0ICAgID0+ICRMb2dPYmplY3QsCiAgICAgICAgREJPYmplY3QgICAgID0+ICREQk9iamVjdCwKICAgICAgICBNYWluT2JqZWN0ICAgPT4gJE1haW5PYmplY3QsCiAgICApOwoKPWN1dAoKc3ViIG5ldyB7CiAgICBteSAoICRUeXBlLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzKCAkU2VsZiwgJFR5cGUgKTsKCiAgICAjIGNoZWNrIG5lZWRlZCBvYmplY3RzCiAgICBmb3IgbXkgJE9iamVjdCAocXcoREJPYmplY3QgQ29uZmlnT2JqZWN0IExvZ09iamVjdCBNYWluT2JqZWN0KSkgewogICAgICAgICRTZWxmLT57JE9iamVjdH0gPSAkUGFyYW17JE9iamVjdH0gfHwgZGllICJHb3Qgbm8gJE9iamVjdCEiOwogICAgfQogICAgJFNlbGYtPntWYWxpZE9iamVjdH0gICAgID0gS2VybmVsOjpTeXN0ZW06OlZhbGlkLT5uZXcoICV7JFNlbGZ9ICk7CiAgICAkU2VsZi0+e0NoZWNrSXRlbU9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6Q2hlY2tJdGVtLT5uZXcoICV7JFNlbGZ9ICk7CgogICAgcmV0dXJuICRTZWxmOwp9Cgo9aXRlbSBDbGFzc0xpc3QoKQoKcmV0dXJuIGFuIGFycmF5IHJlZmVyZW5jZSBvZiBhbGwgZ2VuZXJhbCBjYXRhbG9nIGNsYXNzZXMKCiAgICBteSAkQXJyYXlSZWYgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkNsYXNzTGlzdCgpOwoKPWN1dAoKc3ViIENsYXNzTGlzdCB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgYXNrIGRhdGFiYXNlCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBESVNUSU5DVChnZW5lcmFsX2NhdGFsb2dfY2xhc3MpICcKICAgICAgICAgICAgLiAnRlJPTSBnZW5lcmFsX2NhdGFsb2cgT1JERVIgQlkgZ2VuZXJhbF9jYXRhbG9nX2NsYXNzJywKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSBAQ2xhc3NMaXN0OwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICBwdXNoIEBDbGFzc0xpc3QsICRSb3dbMF07CiAgICB9CgogICAgcmV0dXJuIFxAQ2xhc3NMaXN0Owp9Cgo9aXRlbSBDbGFzc1JlbmFtZSgpCgpyZW5hbWUgYSBnZW5lcmFsIGNhdGFsb2cgY2xhc3MKCiAgICBteSAkVHJ1ZSA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+Q2xhc3NSZW5hbWUoCiAgICAgICAgQ2xhc3NPbGQgPT4gJ0lUU006OkNvbmZpZ0l0ZW06OlN0YXRlJywKICAgICAgICBDbGFzc05ldyA9PiAnSVRTTTo6Q29uZmlnSXRlbTo6RGVwbG95bWVudFN0YXRlJywKICAgICk7Cgo9Y3V0CgpzdWIgQ2xhc3NSZW5hbWUgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ2xhc3NPbGQgQ2xhc3NOZXcpKSB7CiAgICAgICAgaWYgKCAhJFBhcmFteyRBcmd1bWVudH0gKSB7CiAgICAgICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgICAgIE1lc3NhZ2UgID0+ICJOZWVkICRBcmd1bWVudCEiLAogICAgICAgICAgICApOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQoKICAgICMgY2xlYW51cCBnaXZlbiBwYXJhbXMKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KENsYXNzT2xkIENsYXNzTmV3KSkgewogICAgICAgICRTZWxmLT57Q2hlY2tJdGVtT2JqZWN0fS0+U3RyaW5nQ2xlYW4oCiAgICAgICAgICAgIFN0cmluZ1JlZiAgICAgICAgID0+IFwkUGFyYW17JEFyZ3VtZW50fSwKICAgICAgICAgICAgUmVtb3ZlQWxsTmV3bGluZXMgPT4gMSwKICAgICAgICAgICAgUmVtb3ZlQWxsVGFicyAgICAgPT4gMSwKICAgICAgICAgICAgUmVtb3ZlQWxsU3BhY2VzICAgPT4gMSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAxIGlmICRQYXJhbXtDbGFzc05ld30gZXEgJFBhcmFte0NsYXNzT2xkfTsKCiAgICAjIGNoZWNrIGlmIG5ldyBjbGFzcyBuYW1lIGFscmVhZHkgZXhpc3RzCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGlkIEZST00gZ2VuZXJhbF9jYXRhbG9nIFdIRVJFIGdlbmVyYWxfY2F0YWxvZ19jbGFzcyA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtDbGFzc05ld30gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICRBbHJlYWR5RXhpc3RzID0gMDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJEFscmVhZHlFeGlzdHMgPSAxOwogICAgfQoKICAgIGlmICgkQWxyZWFkeUV4aXN0cykgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2FuJ3QgcmVuYW1lIGNsYXNzICRQYXJhbXtDbGFzc09sZH0hIE5ldyBjbGFzc25hbWUgYWxyZWFkeSBleGlzdHMuIgogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgcmVzZXQgY2FjaGUKICAgIGRlbGV0ZSAkU2VsZi0+e0NhY2hlfS0+e0l0ZW1HZXR9LT57Q2xhc3N9LT57ICRQYXJhbXtDbGFzc09sZH0gfTsKICAgIGRlbGV0ZSAkU2VsZi0+e0NhY2hlfS0+e0l0ZW1HZXR9LT57Q2xhc3N9LT57ICRQYXJhbXtDbGFzc05ld30gfTsKICAgIGRlbGV0ZSAkU2VsZi0+e0NhY2hlfS0+e0l0ZW1HZXR9LT57SXRlbUlEfTsKICAgIGRlbGV0ZSAkU2VsZi0+e0NhY2hlfS0+e0l0ZW1MaXN0fTsKCiAgICAjIHJlbmFtZSBnZW5lcmFsIGNhdGFsb2cgY2xhc3MKICAgIHJldHVybiAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMID0+ICdVUERBVEUgZ2VuZXJhbF9jYXRhbG9nIFNFVCBnZW5lcmFsX2NhdGFsb2dfY2xhc3MgPSA/ICcKICAgICAgICAgICAgLiAnV0hFUkUgZ2VuZXJhbF9jYXRhbG9nX2NsYXNzID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkUGFyYW17Q2xhc3NOZXd9LCBcJFBhcmFte0NsYXNzT2xkfSBdLAogICAgKTsKfQoKPWl0ZW0gSXRlbUxpc3QoKQoKcmV0dXJuIGEgbGlzdCBhcyBoYXNoIHJlZmVyZW5jZSBvZiBvbmUgZ2VuZXJhbCBjYXRhbG9nIGNsYXNzCgogICAgbXkgJEhhc2hSZWYgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1MaXN0KAogICAgICAgIENsYXNzICAgICAgICAgPT4gJ0lUU006OlNlcnZpY2U6OlR5cGUnLAogICAgICAgIEZ1bmN0aW9uYWxpdHkgPT4gJ2FjdGl2ZScsICAgICAgICAgICAgICAgIyAob3B0aW9uYWwpIHN0cmluZyBvciBhcnJheSByZWZlcmVuY2UKICAgICAgICBWYWxpZCAgICAgICAgID0+IDAsICAgICAgICAgICAgICAgICAgICAgICMgKG9wdGlvbmFsKSBkZWZhdWx0IDEKICAgICk7Cgo9Y3V0CgpzdWIgSXRlbUxpc3QgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0NsYXNzfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ05lZWQgQ2xhc3MhJwogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgc2V0IGRlZmF1bHQgdmFsdWUKICAgIGlmICggIWRlZmluZWQgJFBhcmFte1ZhbGlkfSApIHsKICAgICAgICAkUGFyYW17VmFsaWR9ID0gMTsKICAgIH0KCiAgICAjIGNyZWF0ZSBzcWwgc3RyaW5nCiAgICBteSAkU1FMICA9ICdTRUxFQ1QgaWQsIG5hbWUgRlJPTSBnZW5lcmFsX2NhdGFsb2cgV0hFUkUgZ2VuZXJhbF9jYXRhbG9nX2NsYXNzID0gPyAnOwogICAgbXkgQEJJTkQgPSAoIFwkUGFyYW17Q2xhc3N9ICk7CgogICAgIyBhZGQgdmFsaWQgc3RyaW5nIHRvIHNxbCBzdHJpbmcKICAgIGlmICggJFBhcmFte1ZhbGlkfSApIHsKICAgICAgICAkU1FMIC49ICdBTkQgdmFsaWRfaWQgPSAxICc7CiAgICB9CgogICAgIyBjcmVhdGUgY2FjaGUga2V5CiAgICBteSAkQ2FjaGVLZXkgPSAkUGFyYW17Q2xhc3N9IC4gJyMjIyMnIC4gJFBhcmFte1ZhbGlkfSAuICcjIyMjJzsKCiAgICAjIGFkZCBmdW5jdGlvbmFsaXR5IHRvIHNxbCBzdHJpbmcKICAgIGlmICggJFBhcmFte0Z1bmN0aW9uYWxpdHl9ICkgewoKICAgICAgICAjIGNyZWF0ZSBhcnJheSByZWZlcmVuY2UsIGlmIGZ1bmN0aW9uYWxpdHkgaXMgZ2l2ZSBhcyBzdGluZwogICAgICAgIGlmICggcmVmICRQYXJhbXtGdW5jdGlvbmFsaXR5fSBuZSAnQVJSQVknICkgewogICAgICAgICAgICAkUGFyYW17RnVuY3Rpb25hbGl0eX0gPSBbICRQYXJhbXtGdW5jdGlvbmFsaXR5fSBdOwogICAgICAgIH0KCiAgICAgICAgIyBjcmVhdGUgZnVuY3Rpb25hbGl0eSBzdHJpbmcKICAgICAgICBteSAkRnVuY3Rpb25hbGl0eVN0cmluZyA9IGpvaW4gcXssIH0sIG1hcCB7Jz8nfSBAeyAkUGFyYW17RnVuY3Rpb25hbGl0eX0gfTsKCiAgICAgICAgIyBhZGQgZnVuY3Rpb25hbGl0eSBsaXN0IHRvIGNhY2hlIGtleQogICAgICAgICRDYWNoZUtleSAuPSBqb2luIHF7IyMjI30sIG1hcCB7JF99IEB7ICRQYXJhbXtGdW5jdGlvbmFsaXR5fSB9OwoKICAgICAgICAjIGNyZWF0ZSBhbmQgYWRkIGJpbmQgcGFyYW1ldGVycwogICAgICAgIG15IEBCaW5kUGFyYW1zID0gbWFwIHsgXCRfIH0gQHsgJFBhcmFte0Z1bmN0aW9uYWxpdHl9IH07CiAgICAgICAgcHVzaCBAQklORCwgQEJpbmRQYXJhbXM7CgogICAgICAgICMgYWRkIGZ1bmN0aW9uYWxpdHkgc3RyaW5nIHRvIHNxbCBzdHJpbmcKICAgICAgICAkU1FMIC49ICJBTkQgZnVuY3Rpb25hbGl0eSBJTiAoJEZ1bmN0aW9uYWxpdHlTdHJpbmcpIjsKICAgIH0KCiAgICAjIGNoZWNrIGlmIHJlc3VsdCBpcyBhbHJlYWR5IGNhY2hlZAogICAgcmV0dXJuICRTZWxmLT57Q2FjaGV9LT57SXRlbUxpc3R9LT57JENhY2hlS2V5fQogICAgICAgIGlmICRTZWxmLT57Q2FjaGV9LT57SXRlbUxpc3R9LT57JENhY2hlS2V5fTsKCiAgICAjIGFzayBkYXRhYmFzZQogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMICA9PiAkU1FMLAogICAgICAgIEJpbmQgPT4gXEBCSU5ELAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICVEYXRhOwogICAgd2hpbGUgKCBteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkRGF0YXsgJFJvd1swXSB9ID0gJFJvd1sxXTsKICAgIH0KCiAgICAjIGNoZWNrIGl0ZW0KICAgIGlmICggISVEYXRhICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAnQ2xhc3Mgbm90IGZvdW5kIGluIGRhdGFiYXNlIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjYWNoZSB0aGUgcmVzdWx0CiAgICAkU2VsZi0+e0NhY2hlfS0+e0l0ZW1MaXN0fS0+eyRDYWNoZUtleX0gPSBcJURhdGE7CgogICAgcmV0dXJuIFwlRGF0YTsKfQoKPWl0ZW0gRnVuY3Rpb25hbGl0eUxpc3QoKQoKcmV0dXJuIGFuIGFycmF5IHJlZmVyZW5jZSBvZiBhbGwgZnVuY3Rpb25hbGl0aWVzIG9mIGEgZ2VuZXJhbCBjYXRhbG9nIGNsYXNzCgogICAgbXkgJEFycmF5UmVmID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5GdW5jdGlvbmFsaXR5TGlzdCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6U2VydmljZTo6VHlwZScsCiAgICApOwoKPWN1dAoKc3ViIEZ1bmN0aW9uYWxpdHlMaXN0IHsKICAgIG15ICggJFNlbGYsICVQYXJhbSApID0gQF87CgogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGlmICggISRQYXJhbXtDbGFzc30gKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIENsYXNzIScKICAgICAgICApOwogICAgICAgIHJldHVybjsKICAgIH0KCiAgICAjIGFzayBkYXRhYmFzZQogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgRElTVElOQ1QoZnVuY3Rpb25hbGl0eSkgRlJPTSBnZW5lcmFsX2NhdGFsb2cgJwogICAgICAgICAgICAuICdXSEVSRSBnZW5lcmFsX2NhdGFsb2dfY2xhc3MgPSA/IE9SREVSIEJZIGZ1bmN0aW9uYWxpdHknLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0NsYXNzfSBdLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15IEBGdW5jdGlvbmFsaXR5TGlzdDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJFJvd1swXSB8fD0gJyc7CiAgICAgICAgcHVzaCBARnVuY3Rpb25hbGl0eUxpc3QsICRSb3dbMF07CiAgICB9CgogICAgcmV0dXJuIFxARnVuY3Rpb25hbGl0eUxpc3Q7Cn0KCj1pdGVtIEl0ZW1HZXQoKQoKZ2V0IGEgZ2VuZXJhbCBjYXRhbG9nIGl0ZW0KClJldHVybgogICAgJEl0ZW1EYXRhe0l0ZW1JRH0KICAgICRJdGVtRGF0YXtDbGFzc30KICAgICRJdGVtRGF0YXtOYW1lfQogICAgJEl0ZW1EYXRhe0Z1bmN0aW9uYWxpdHl9CiAgICAkSXRlbURhdGF7VmFsaWRJRH0KICAgICRJdGVtRGF0YXtDb21tZW50fQogICAgJEl0ZW1EYXRhe0NyZWF0ZVRpbWV9CiAgICAkSXRlbURhdGF7Q3JlYXRlQnl9CiAgICAkSXRlbURhdGF7Q2hhbmdlVGltZX0KICAgICRJdGVtRGF0YXtDaGFuZ2VCeX0KCiAgICBteSAkSXRlbURhdGFSZWYgPSAkR2VuZXJhbENhdGFsb2dPYmplY3QtPkl0ZW1HZXQoCiAgICAgICAgSXRlbUlEICA9PiAzLAogICAgKTsKCiAgICBvcgoKICAgIG15ICRJdGVtRGF0YVJlZiA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbUdldCgKICAgICAgICBDbGFzcyA9PiAnSVRTTTo6U2VydmljZTo6VHlwZScsCiAgICAgICAgTmFtZSAgPT4gJ0l0ZW0gTmFtZScsCiAgICApOwoKPWN1dAoKc3ViIEl0ZW1HZXQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgaWYgKCAhJFBhcmFte0l0ZW1JRH0gJiYgKCAhJFBhcmFte0NsYXNzfSB8fCAhJFBhcmFte05hbWV9ICkgKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgIFByaW9yaXR5ID0+ICdlcnJvcicsCiAgICAgICAgICAgIE1lc3NhZ2UgID0+ICdOZWVkIEl0ZW1JRCBPUiBDbGFzcyBhbmQgTmFtZSEnCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjcmVhdGUgc3FsIHN0cmluZwogICAgbXkgJFNRTCA9ICdTRUxFQ1QgaWQsIGdlbmVyYWxfY2F0YWxvZ19jbGFzcywgbmFtZSwgZnVuY3Rpb25hbGl0eSwgdmFsaWRfaWQsIGNvbW1lbnRzLCAnCiAgICAgICAgLiAnY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSBGUk9NIGdlbmVyYWxfY2F0YWxvZyBXSEVSRSAnOwogICAgbXkgQEJJTkQ7CgogICAgIyBhZGQgb3B0aW9ucyB0byBzcWwgc3RyaW5nCiAgICBpZiAoICRQYXJhbXtDbGFzc30gJiYgJFBhcmFte05hbWV9ICkgewoKICAgICAgICAjIGNoZWNrIGlmIHJlc3VsdCBpcyBhbHJlYWR5IGNhY2hlZAogICAgICAgIHJldHVybiAkU2VsZi0+e0NhY2hlfS0+e0l0ZW1HZXR9LT57Q2xhc3N9LT57ICRQYXJhbXtDbGFzc30gfS0+eyAkUGFyYW17TmFtZX0gfQogICAgICAgICAgICBpZiAkU2VsZi0+e0NhY2hlfS0+e0l0ZW1HZXR9LT57Q2xhc3N9LT57ICRQYXJhbXtDbGFzc30gfS0+eyAkUGFyYW17TmFtZX0gfTsKCiAgICAgICAgIyBhZGQgY2xhc3MgYW5kIG5hbWUgdG8gc3FsIHN0cmluZwogICAgICAgICRTUUwgLj0gJ2dlbmVyYWxfY2F0YWxvZ19jbGFzcyA9ID8gQU5EIG5hbWUgPSA/JzsKICAgICAgICBwdXNoIEBCSU5ELCAoIFwkUGFyYW17Q2xhc3N9LCBcJFBhcmFte05hbWV9ICk7CiAgICB9CiAgICBlbHNlIHsKCiAgICAgICAgIyBjaGVjayBpZiByZXN1bHQgaXMgYWxyZWFkeSBjYWNoZWQKICAgICAgICByZXR1cm4gJFNlbGYtPntDYWNoZX0tPntJdGVtR2V0fS0+e0l0ZW1JRH0tPnsgJFBhcmFte0l0ZW1JRH0gfQogICAgICAgICAgICBpZiAkU2VsZi0+e0NhY2hlfS0+e0l0ZW1HZXR9LT57SXRlbUlEfS0+eyAkUGFyYW17SXRlbUlEfSB9OwoKICAgICAgICAjIGFkZCBpdGVtIGlkIHRvIHNxbCBzdHJpbmcKICAgICAgICAkU1FMIC49ICdpZCA9ID8nOwogICAgICAgIHB1c2ggQEJJTkQsIFwkUGFyYW17SXRlbUlEfTsKICAgIH0KCiAgICAjIGFzayBkYXRhYmFzZQogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJFNRTCwKICAgICAgICBCaW5kICA9PiBcQEJJTkQsCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAlSXRlbURhdGE7CiAgICB3aGlsZSAoIG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpICkgewogICAgICAgICRJdGVtRGF0YXtJdGVtSUR9ICAgICAgICA9ICRSb3dbMF07CiAgICAgICAgJEl0ZW1EYXRhe0NsYXNzfSAgICAgICAgID0gJFJvd1sxXTsKICAgICAgICAkSXRlbURhdGF7TmFtZX0gICAgICAgICAgPSAkUm93WzJdOwogICAgICAgICRJdGVtRGF0YXtGdW5jdGlvbmFsaXR5fSA9ICRSb3dbM10gfHwgJyc7CiAgICAgICAgJEl0ZW1EYXRhe1ZhbGlkSUR9ICAgICAgID0gJFJvd1s0XTsKICAgICAgICAkSXRlbURhdGF7Q29tbWVudH0gICAgICAgPSAkUm93WzVdIHx8ICcnOwogICAgICAgICRJdGVtRGF0YXtDcmVhdGVUaW1lfSAgICA9ICRSb3dbNl07CiAgICAgICAgJEl0ZW1EYXRhe0NyZWF0ZUJ5fSAgICAgID0gJFJvd1s3XTsKICAgICAgICAkSXRlbURhdGF7Q2hhbmdlVGltZX0gICAgPSAkUm93WzhdOwogICAgICAgICRJdGVtRGF0YXtDaGFuZ2VCeX0gICAgICA9ICRSb3dbOV07CiAgICB9CgogICAgIyBjaGVjayBpdGVtCiAgICBpZiAoICEkSXRlbURhdGF7SXRlbUlEfSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSAgPT4gJ0l0ZW0gbm90IGZvdW5kIGluIGRhdGFiYXNlIScsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjYWNoZSB0aGUgcmVzdWx0CiAgICAkU2VsZi0+e0NhY2hlfS0+e0l0ZW1HZXR9LT57Q2xhc3N9LT57ICRJdGVtRGF0YXtDbGFzc30gfS0+eyAkSXRlbURhdGF7TmFtZX0gfSA9IFwlSXRlbURhdGE7CiAgICAkU2VsZi0+e0NhY2hlfS0+e0l0ZW1HZXR9LT57SXRlbUlEfS0+eyAkSXRlbURhdGF7SXRlbUlEfSB9ID0gXCVJdGVtRGF0YTsKCiAgICByZXR1cm4gXCVJdGVtRGF0YTsKfQoKPWl0ZW0gSXRlbUFkZCgpCgphZGQgYSBuZXcgZ2VuZXJhbCBjYXRhbG9nIGl0ZW0KCiAgICBteSAkSXRlbUlEID0gJEdlbmVyYWxDYXRhbG9nT2JqZWN0LT5JdGVtQWRkKAogICAgICAgIENsYXNzICAgICAgICAgPT4gJ0lUU006OlNlcnZpY2U6OlR5cGUnLAogICAgICAgIE5hbWUgICAgICAgICAgPT4gJ0l0ZW0gTmFtZScsCiAgICAgICAgRnVuY3Rpb25hbGl0eSA9PiAnRnVuYzMnLCAgICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBWYWxpZElEICAgICAgID0+IDEsCiAgICAgICAgQ29tbWVudCAgICAgICA9PiAnQ29tbWVudCcsICAgICAgICAgICAgICAjIChvcHRpb25hbCkKICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIEl0ZW1BZGQgewogICAgbXkgKCAkU2VsZiwgJVBhcmFtICkgPSBAXzsKCiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ2xhc3MgTmFtZSBWYWxpZElEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCB2YWx1ZXMKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEZ1bmN0aW9uYWxpdHkgQ29tbWVudCkpIHsKICAgICAgICAkUGFyYW17JEFyZ3VtZW50fSB8fD0gJyc7CiAgICB9CgogICAgIyBjbGVhbnVwIGdpdmVuIHBhcmFtcwogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ2xhc3MgRnVuY3Rpb25hbGl0eSkpIHsKICAgICAgICAkU2VsZi0+e0NoZWNrSXRlbU9iamVjdH0tPlN0cmluZ0NsZWFuKAogICAgICAgICAgICBTdHJpbmdSZWYgICAgICAgICA9PiBcJFBhcmFteyRBcmd1bWVudH0sCiAgICAgICAgICAgIFJlbW92ZUFsbE5ld2xpbmVzID0+IDEsCiAgICAgICAgICAgIFJlbW92ZUFsbFRhYnMgICAgID0+IDEsCiAgICAgICAgICAgIFJlbW92ZUFsbFNwYWNlcyAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE5hbWUgQ29tbWVudCkpIHsKICAgICAgICAkU2VsZi0+e0NoZWNrSXRlbU9iamVjdH0tPlN0cmluZ0NsZWFuKAogICAgICAgICAgICBTdHJpbmdSZWYgICAgICAgICA9PiBcJFBhcmFteyRBcmd1bWVudH0sCiAgICAgICAgICAgIFJlbW92ZUFsbE5ld2xpbmVzID0+IDEsCiAgICAgICAgICAgIFJlbW92ZUFsbFRhYnMgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGZpbmQgZXhpdGluZyBpdGVtIHdpdGggc2FtZSBuYW1lCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gJ1NFTEVDVCBpZCBGUk9NIGdlbmVyYWxfY2F0YWxvZyAnCiAgICAgICAgICAgIC4gJ1dIRVJFIGdlbmVyYWxfY2F0YWxvZ19jbGFzcyA9ID8gQU5EIG5hbWUgPSA/JywKICAgICAgICBCaW5kID0+IFsgXCRQYXJhbXtDbGFzc30sIFwkUGFyYW17TmFtZX0gXSwKICAgICAgICBMaW1pdCA9PiAxLAogICAgKTsKCiAgICAjIGZldGNoIHRoZSByZXN1bHQKICAgIG15ICROb0FkZDsKICAgIHdoaWxlICggJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSApIHsKICAgICAgICAkTm9BZGQgPSAxOwogICAgfQoKICAgICMgYWJvcnQgaW5zZXJ0IG9mIG5ldyBpdGVtLCBpZiBpdGVtIG5hbWUgYWxyZWFkeSBleGlzdHMKICAgIGlmICgkTm9BZGQpIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgIkNhbid0IGFkZCBuZXcgaXRlbSEgR2VuZXJhbCBjYXRhbG9nIGl0ZW0gd2l0aCBzYW1lIG5hbWUgYWxyZWFkeSBleGlzdHMgaW4gdGhpcyBjbGFzcy4iLAogICAgICAgICk7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgcmVzZXQgY2FjaGUKICAgIGRlbGV0ZSAkU2VsZi0+e0NhY2hlfS0+e0l0ZW1MaXN0fTsKCiAgICAjIGluc2VydCBuZXcgaXRlbQogICAgcmV0dXJuIGlmICEkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgU1FMID0+ICdJTlNFUlQgSU5UTyBnZW5lcmFsX2NhdGFsb2cgJwogICAgICAgICAgICAuICcoZ2VuZXJhbF9jYXRhbG9nX2NsYXNzLCBuYW1lLCBmdW5jdGlvbmFsaXR5LCB2YWxpZF9pZCwgY29tbWVudHMsICcKICAgICAgICAgICAgLiAnY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSkgVkFMVUVTICcKICAgICAgICAgICAgLiAnKD8sID8sID8sID8sID8sIGN1cnJlbnRfdGltZXN0YW1wLCA/LCBjdXJyZW50X3RpbWVzdGFtcCwgPyknLAogICAgICAgIEJpbmQgPT4gWwogICAgICAgICAgICBcJFBhcmFte0NsYXNzfSwgICAgICAgICBcJFBhcmFte05hbWV9LAogICAgICAgICAgICBcJFBhcmFte0Z1bmN0aW9uYWxpdHl9LCBcJFBhcmFte1ZhbGlkSUR9LAogICAgICAgICAgICBcJFBhcmFte0NvbW1lbnR9LCAgICAgICBcJFBhcmFte1VzZXJJRH0sCiAgICAgICAgICAgIFwkUGFyYW17VXNlcklEfSwKICAgICAgICBdLAogICAgKTsKCiAgICAjIGZpbmQgaWQgb2YgbmV3IGl0ZW0KICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKAogICAgICAgIFNRTCA9PiAnU0VMRUNUIGlkIEZST00gZ2VuZXJhbF9jYXRhbG9nICcKICAgICAgICAgICAgLiAnV0hFUkUgZ2VuZXJhbF9jYXRhbG9nX2NsYXNzID0gPyBBTkQgbmFtZSA9ID8nLAogICAgICAgIEJpbmQgPT4gWyBcJFBhcmFte0NsYXNzfSwgXCRQYXJhbXtOYW1lfSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJEl0ZW1JRDsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJEl0ZW1JRCA9ICRSb3dbMF07CiAgICB9CgogICAgcmV0dXJuICRJdGVtSUQ7Cn0KCj1pdGVtIEl0ZW1VcGRhdGUoKQoKdXBkYXRlIGEgZXhpc3RpbmcgZ2VuZXJhbCBjYXRhbG9nIGl0ZW0KCiAgICBteSAkVHJ1ZSA9ICRHZW5lcmFsQ2F0YWxvZ09iamVjdC0+SXRlbVVwZGF0ZSgKICAgICAgICBJdGVtSUQgICAgICAgID0+IDEyMywKICAgICAgICBOYW1lICAgICAgICAgID0+ICdJdGVtIE5hbWUnLAogICAgICAgIEZ1bmN0aW9uYWxpdHkgPT4gJ0Z1bmMzJywgICAgICAjIChvcHRpb25hbCkKICAgICAgICBWYWxpZElEICAgICAgID0+IDEsCiAgICAgICAgQ29tbWVudCAgICAgICA9PiAnQ29tbWVudCcsICAgICMgKG9wdGlvbmFsKQogICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICk7Cgo9Y3V0CgpzdWIgSXRlbVVwZGF0ZSB7CiAgICBteSAoICRTZWxmLCAlUGFyYW0gKSA9IEBfOwoKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3IgbXkgJEFyZ3VtZW50IChxdyhJdGVtSUQgTmFtZSBWYWxpZElEIFVzZXJJRCkpIHsKICAgICAgICBpZiAoICEkUGFyYW17JEFyZ3VtZW50fSApIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coCiAgICAgICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICAgICAgTWVzc2FnZSAgPT4gIk5lZWQgJEFyZ3VtZW50ISIsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIHJldHVybjsKICAgICAgICB9CiAgICB9CgogICAgIyBzZXQgZGVmYXVsdCB2YWx1ZXMKICAgIGZvciBteSAkQXJndW1lbnQgKHF3KEZ1bmN0aW9uYWxpdHkgQ29tbWVudCkpIHsKICAgICAgICAkUGFyYW17JEFyZ3VtZW50fSB8fD0gJyc7CiAgICB9CgogICAgIyBjbGVhbnVwIGdpdmVuIHBhcmFtcwogICAgZm9yIG15ICRBcmd1bWVudCAocXcoQ2xhc3MgRnVuY3Rpb25hbGl0eSkpIHsKICAgICAgICAkU2VsZi0+e0NoZWNrSXRlbU9iamVjdH0tPlN0cmluZ0NsZWFuKAogICAgICAgICAgICBTdHJpbmdSZWYgICAgICAgICA9PiBcJFBhcmFteyRBcmd1bWVudH0sCiAgICAgICAgICAgIFJlbW92ZUFsbE5ld2xpbmVzID0+IDEsCiAgICAgICAgICAgIFJlbW92ZUFsbFRhYnMgICAgID0+IDEsCiAgICAgICAgICAgIFJlbW92ZUFsbFNwYWNlcyAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KICAgIGZvciBteSAkQXJndW1lbnQgKHF3KE5hbWUgQ29tbWVudCkpIHsKICAgICAgICAkU2VsZi0+e0NoZWNrSXRlbU9iamVjdH0tPlN0cmluZ0NsZWFuKAogICAgICAgICAgICBTdHJpbmdSZWYgICAgICAgICA9PiBcJFBhcmFteyRBcmd1bWVudH0sCiAgICAgICAgICAgIFJlbW92ZUFsbE5ld2xpbmVzID0+IDEsCiAgICAgICAgICAgIFJlbW92ZUFsbFRhYnMgICAgID0+IDEsCiAgICAgICAgKTsKICAgIH0KCiAgICAjIGdldCBjbGFzcyBvZiBpdGVtCiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgICA9PiAnU0VMRUNUIGdlbmVyYWxfY2F0YWxvZ19jbGFzcywgZnVuY3Rpb25hbGl0eSBGUk9NIGdlbmVyYWxfY2F0YWxvZyBXSEVSRSBpZCA9ID8nLAogICAgICAgIEJpbmQgID0+IFsgXCRQYXJhbXtJdGVtSUR9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkQ2xhc3M7CiAgICBteSAkT2xkRnVuY3Rpb25hbGl0eTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgJENsYXNzID0gJFJvd1swXTsKICAgICAgICAkT2xkRnVuY3Rpb25hbGl0eSA9ICRSb3dbMV0gfHwgJyc7CiAgICB9CgogICAgaWYgKCAhJENsYXNzICkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlICA9PiAiQ2FuJ3QgdXBkYXRlIGl0ZW0hIEdlbmVyYWwgY2F0YWxvZyBpdGVtIG5vdCBmb3VuZCBpbiB0aGlzIGNsYXNzLiIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBmaW5kIGV4aXRpbmcgaXRlbSB3aXRoIHNhbWUgbmFtZQogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMICAgPT4gJ1NFTEVDVCBpZCBGUk9NIGdlbmVyYWxfY2F0YWxvZyBXSEVSRSBnZW5lcmFsX2NhdGFsb2dfY2xhc3MgPSA/IEFORCBuYW1lID0gPycsCiAgICAgICAgQmluZCAgPT4gWyBcJENsYXNzLCBcJFBhcmFte05hbWV9IF0sCiAgICAgICAgTGltaXQgPT4gMSwKICAgICk7CgogICAgIyBmZXRjaCB0aGUgcmVzdWx0CiAgICBteSAkVXBkYXRlID0gMTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgaWYgKCAkUGFyYW17SXRlbUlEfSBuZSAkUm93WzBdICkgewogICAgICAgICAgICAkVXBkYXRlID0gMDsKICAgICAgICB9CiAgICB9CgogICAgaWYgKCAhJFVwZGF0ZSApIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZygKICAgICAgICAgICAgUHJpb3JpdHkgPT4gJ2Vycm9yJywKICAgICAgICAgICAgTWVzc2FnZSA9PgogICAgICAgICAgICAgICAgIkNhbid0IHVwZGF0ZSBpdGVtISBHZW5lcmFsIGNhdGFsb2cgaXRlbSB3aXRoIHNhbWUgbmFtZSBhbHJlYWR5IGV4aXN0cyBpbiB0aGlzIGNsYXNzLiIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyBjb3VudCB0aGUgZnVuY3Rpb25hbGl0eQogICAgJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoCiAgICAgICAgU1FMID0+ICdTRUxFQ1QgQ09VTlQoZnVuY3Rpb25hbGl0eSkgRlJPTSBnZW5lcmFsX2NhdGFsb2cgJwogICAgICAgICAgICAuICdXSEVSRSBnZW5lcmFsX2NhdGFsb2dfY2xhc3MgPSA/IEFORCBmdW5jdGlvbmFsaXR5ID0gPycsCiAgICAgICAgQmluZCA9PiBbIFwkQ2xhc3MsIFwkT2xkRnVuY3Rpb25hbGl0eSBdLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwoKICAgICMgZmV0Y2ggdGhlIHJlc3VsdAogICAgbXkgJExhc3RGdW5jdGlvbmFsaXR5ID0gMTsKICAgIHdoaWxlICggbXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkgKSB7CiAgICAgICAgaWYgKCAkUm93WzBdID4gMSB8fCAkUGFyYW17RnVuY3Rpb25hbGl0eX0gZXEgJE9sZEZ1bmN0aW9uYWxpdHkgKSB7CiAgICAgICAgICAgICRMYXN0RnVuY3Rpb25hbGl0eSA9IDA7CiAgICAgICAgfQogICAgfQoKICAgICMgYWJvcnQgdXBkYXRlLCBpZiBmdW5jdGlvbmFsaXR5IGlzIHRoZSBsYXN0IG9uZQogICAgaWYgKCRMYXN0RnVuY3Rpb25hbGl0eSkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKAogICAgICAgICAgICBQcmlvcml0eSA9PiAnZXJyb3InLAogICAgICAgICAgICBNZXNzYWdlID0+CiAgICAgICAgICAgICAgICAiQ2FuJ3QgdXBkYXRlIGl0ZW0hIFRoZSBmdW5jdGlvbmFsaXR5IG9mIHRoaXMgaXRlbSBpcyB0aGUgbGFzdCBpbiB0aGlzIGNsYXNzLiIsCiAgICAgICAgKTsKICAgICAgICByZXR1cm47CiAgICB9CgogICAgIyByZXNldCBjYWNoZQogICAgZGVsZXRlICRTZWxmLT57Q2FjaGV9LT57SXRlbUdldH0tPntDbGFzc30tPnskQ2xhc3N9LT57ICRQYXJhbXtOYW1lfSB9OwogICAgZGVsZXRlICRTZWxmLT57Q2FjaGV9LT57SXRlbUdldH0tPntJdGVtSUR9LT57ICRQYXJhbXtJdGVtSUR9IH07CiAgICBkZWxldGUgJFNlbGYtPntDYWNoZX0tPntJdGVtTGlzdH07CgogICAgcmV0dXJuICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICBTUUwgPT4gJ1VQREFURSBnZW5lcmFsX2NhdGFsb2cgU0VUICcKICAgICAgICAgICAgLiAnbmFtZSA9ID8sIGZ1bmN0aW9uYWxpdHkgPSA/LCcKICAgICAgICAgICAgLiAndmFsaWRfaWQgPSA/LCBjb21tZW50cyA9ID8sICcKICAgICAgICAgICAgLiAnY2hhbmdlX3RpbWUgPSBjdXJyZW50X3RpbWVzdGFtcCwgY2hhbmdlX2J5ID0gPyAnCiAgICAgICAgICAgIC4gJ1dIRVJFIGlkID0gPycsCiAgICAgICAgQmluZCA9PiBbCiAgICAgICAgICAgIFwkUGFyYW17TmFtZX0sICAgIFwkUGFyYW17RnVuY3Rpb25hbGl0eX0sCiAgICAgICAgICAgIFwkUGFyYW17VmFsaWRJRH0sIFwkUGFyYW17Q29tbWVudH0sCiAgICAgICAgICAgIFwkUGFyYW17VXNlcklEfSwgIFwkUGFyYW17SXRlbUlEfSwKICAgICAgICBdLAogICAgKTsKfQoKMTsKCj1iYWNrCgo9aGVhZDEgVEVSTVMgQU5EIENPTkRJVElPTlMKClRoaXMgU29mdHdhcmUgaXMgcGFydCBvZiB0aGUgT1RSUyBwcm9qZWN0IChodHRwOi8vb3Rycy5vcmcvKS4KClRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCnRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQpkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC0yLjAudHh0LgoKPWN1dAoKPWhlYWQxIFZFUlNJT04KCiRSZXZpc2lvbjogMS40MyAkICREYXRlOiAyMDA4LzA3LzIzIDA5OjAyOjAyICQKCj1jdXQK
IyAtLQojIEdlbmVyYWxDYXRhbG9nLnQgLSBnZW5lcmFsIGNhdGFsb2cgdGVzdHMKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwOCBPVFJTIEFHLCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyAkSWQ6IEdlbmVyYWxDYXRhbG9nLnQsdiAxLjE3IDIwMDgvMDMvMTkgMTU6MDY6MTQgbWggRXhwICQKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwtMi4wLnR4dC4KIyAtLQoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwp1c2UgdXRmODsKCnVzZSB2YXJzIHF3KCRTZWxmKTsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2c7CnVzZSBLZXJuZWw6OlN5c3RlbTo6VXNlcjsKCiRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OkdlbmVyYWxDYXRhbG9nLT5uZXcoICV7JFNlbGZ9ICk7CiRTZWxmLT57VXNlck9iamVjdH0gICAgICAgICAgID0gS2VybmVsOjpTeXN0ZW06OlVzZXItPm5ldyggJXskU2VsZn0gKTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBtYWtlIHByZXBhcmF0aW9ucwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgojIGNyZWF0ZSBuZWVkZWQgdXNlcnMKbXkgQFVzZXJJRHM7CnsKCiAgICAjIGRpc2FibGUgZW1haWwgY2hlY2tzIHRvIGNyZWF0ZSBuZXcgdXNlcgogICAgbXkgJENoZWNrRW1haWxBZGRyZXNzZXNPcmcgPSAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnQ2hlY2tFbWFpbEFkZHJlc3NlcycpIHx8IDE7CiAgICAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPlNldCgKICAgICAgICBLZXkgICA9PiAnQ2hlY2tFbWFpbEFkZHJlc3NlcycsCiAgICAgICAgVmFsdWUgPT4gMCwKICAgICk7CgogICAgZm9yIG15ICRDb3VudGVyICggMSAuLiAyICkgewoKICAgICAgICAjIGNyZWF0ZSBuZXcgdXNlcnMgZm9yIHRoZSB0ZXN0cwogICAgICAgIG15ICRVc2VySUQgPSAkU2VsZi0+e1VzZXJPYmplY3R9LT5Vc2VyQWRkKAogICAgICAgICAgICBVc2VyRmlyc3RuYW1lID0+ICdHZW5lcmFsQ2F0YWxvZycgLiAkQ291bnRlciwKICAgICAgICAgICAgVXNlckxhc3RuYW1lICA9PiAnVW5pdFRlc3QnLAogICAgICAgICAgICBVc2VyTG9naW4gICAgID0+ICdVbml0VGVzdC1HZW5lcmFsQ2F0YWxvZy0nIC4gJENvdW50ZXIgLiBpbnQgcmFuZCAxXzAwMF8wMDAsCiAgICAgICAgICAgIFVzZXJFbWFpbCAgICAgPT4gJ1VuaXRUZXN0LUdlbmVyYWxDYXRhbG9nLScgLiAkQ291bnRlciAuICdAbG9jYWxob3N0JywKICAgICAgICAgICAgVmFsaWRJRCAgICAgICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VVc2VySUQgID0+IDEsCiAgICAgICAgKTsKCiAgICAgICAgcHVzaCBAVXNlcklEcywgJFVzZXJJRDsKICAgIH0KCiAgICAjIHJlc3RvcmUgb3JpZ2luYWwgZW1haWwgY2hlY2sgcGFyYW0KICAgICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+U2V0KAogICAgICAgIEtleSAgID0+ICdDaGVja0VtYWlsQWRkcmVzc2VzJywKICAgICAgICBWYWx1ZSA9PiAkQ2hlY2tFbWFpbEFkZHJlc3Nlc09yZywKICAgICk7Cn0KCiMgY3JlYXRlIG5lZWRlZCByYW5kb20gY2xhc3NlcwpteSBAQ2xhc3NSYW5kOwoKZm9yIG15ICRDb3VudGVyICggMSAuLiAzICkgewoKICAgIHB1c2ggQENsYXNzUmFuZCwgaW50IHJhbmQgMV8wMDBfMDAwOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgZGVmaW5lIGdlbmVyYWwgdGVzdHMKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKbXkgJEl0ZW1EYXRhID0gWwoKICAgICMgdGhpcyBpdGVtIGlzIE5PVCBjb21wbGV0ZSBhbmQgbXVzdCBub3QgYmUgYWRkZWQKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICdUZXN0SXRlbTEnLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgaXRlbSBpcyBOT1QgY29tcGxldGUgYW5kIG11c3Qgbm90IGJlIGFkZGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgQ2xhc3MgICA9PiAnVW5pdFRlc3Q6OlRlc3RDbGFzcycgLiAkQ2xhc3NSYW5kWzBdLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgaXRlbSBpcyBOT1QgY29tcGxldGUgYW5kIG11c3Qgbm90IGJlIGFkZGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgQ2xhc3MgID0+ICdVbml0VGVzdDo6VGVzdENsYXNzJyAuICRDbGFzc1JhbmRbMF0sCiAgICAgICAgICAgIE5hbWUgICA9PiAnVGVzdEl0ZW0yJywKICAgICAgICAgICAgVXNlcklEID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIGl0ZW0gaXMgTk9UIGNvbXBsZXRlIGFuZCBtdXN0IG5vdCBiZSBhZGRlZAogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIENsYXNzICAgPT4gJ1VuaXRUZXN0OjpUZXN0Q2xhc3MnIC4gJENsYXNzUmFuZFswXSwKICAgICAgICAgICAgTmFtZSAgICA9PiAnVGVzdEl0ZW0zJywKICAgICAgICAgICAgVmFsaWRJRCA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBpdGVtIG11c3QgYmUgaW5zZXJ0ZWQgc3VjZXNzZnVsbHkKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBDbGFzcyAgID0+ICdVbml0VGVzdDo6VGVzdENsYXNzJyAuICRDbGFzc1JhbmRbMF0sCiAgICAgICAgICAgIE5hbWUgICAgPT4gJ1Rlc3RJdGVtNCcsCiAgICAgICAgICAgIFZhbGlkSUQgPT4gMSwKICAgICAgICAgICAgVXNlcklEICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgQ2xhc3MgICAgICAgICA9PiAnVW5pdFRlc3Q6OlRlc3RDbGFzcycgLiAkQ2xhc3NSYW5kWzBdLAogICAgICAgICAgICBOYW1lICAgICAgICAgID0+ICdUZXN0SXRlbTQnLAogICAgICAgICAgICBGdW5jdGlvbmFsaXR5ID0+ICcnLAogICAgICAgICAgICBWYWxpZElEICAgICAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgPT4gJycsCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgICAgICA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBpdGVtIGhhdmUgdGhlIHNhbWUgbmFtZSBhcyBvbmUgdGVzdCBiZWZvcmUgYW5kIG11c3Qgbm90IGJlIGFkZGVkCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgQ2xhc3MgICA9PiAnVW5pdFRlc3Q6OlRlc3RDbGFzcycgLiAkQ2xhc3NSYW5kWzBdLAogICAgICAgICAgICBOYW1lICAgID0+ICdUZXN0SXRlbTQnLAogICAgICAgICAgICBWYWxpZElEID0+IDEsCiAgICAgICAgICAgIFVzZXJJRCAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBpdGVtIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoRnVuYyAnJyBpcyB0aGUgbGFzdCBpbiB0aGlzIGNsYXNzKQogICAgewogICAgICAgIFVwZGF0ZSA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgICAgICAgPT4gJ1Rlc3RJdGVtNFVQREFURTEnLAogICAgICAgICAgICBGdW5jdGlvbmFsaXR5ID0+ICdUZXN0JywKICAgICAgICAgICAgVmFsaWRJRCAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgaXRlbSBtdXN0IGJlIGluc2VydGVkIHN1Y2Vzc2Z1bGx5CiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgQ2xhc3MgICAgICAgICA9PiAnVW5pdFRlc3Q6OlRlc3RDbGFzcycgLiAkQ2xhc3NSYW5kWzBdLAogICAgICAgICAgICBOYW1lICAgICAgICAgID0+ICdUZXN0SXRlbTUnLAogICAgICAgICAgICBGdW5jdGlvbmFsaXR5ID0+ICdUZXN0MScsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgQ2xhc3MgICAgICAgICA9PiAnVW5pdFRlc3Q6OlRlc3RDbGFzcycgLiAkQ2xhc3NSYW5kWzBdLAogICAgICAgICAgICBOYW1lICAgICAgICAgID0+ICdUZXN0SXRlbTUnLAogICAgICAgICAgICBGdW5jdGlvbmFsaXR5ID0+ICdUZXN0MScsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgICAgICA9PiAnJywKICAgICAgICAgICAgQ3JlYXRlQnkgICAgICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgICAgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgaXRlbSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgTk9UIHVwZGF0ZWQgKGl0ZW0gdXBkYXRlIGFyZ3VtZW50cyBOT1QgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgVmFsaWRJRCA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgVXNlcklEICA9PiAkVXNlcklEc1swXSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBpdGVtIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSBOT1QgdXBkYXRlZCAoaXRlbSB1cGRhdGUgYXJndW1lbnRzIE5PVCBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgPT4gJ1Rlc3RJdGVtNVVQREFURTEnLAogICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgaXRlbSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgTk9UIHVwZGF0ZWQgKGl0ZW0gdXBkYXRlIGFyZ3VtZW50cyBOT1QgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgRnVuY3Rpb25hbGl0eSA9PiAnVGVzdDEnLAogICAgICAgICAgICBWYWxpZElEICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIGl0ZW0gb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIE5PVCB1cGRhdGVkIChGdW5jICd0ZXN0MScgaXMgdGhlIGxhc3QgaW4gdGhpcyBjbGFzcykKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgID0+ICdUZXN0SXRlbTUnLAogICAgICAgICAgICBWYWxpZElEID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICBVc2VySUQgID0+ICRVc2VySURzWzBdLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIGl0ZW0gb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIE5PVCB1cGRhdGVkIChGdW5jICd0ZXN0MScgaXMgdGhlIGxhc3QgaW4gdGhpcyBjbGFzcykKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgICAgICAgID0+ICdUZXN0SXRlbTUnLAogICAgICAgICAgICBGdW5jdGlvbmFsaXR5ID0+ICdUZXN0MicsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gJFVzZXJJRHNbMF0sCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgaXRlbSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgdXBkYXRlZCAoaXRlbSB1cGRhdGUgYXJndW1lbnRzIGFyZSBjb21wbGV0ZSkKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgICAgICAgID0+ICdUZXN0SXRlbTVVUERBVEUyJywKICAgICAgICAgICAgRnVuY3Rpb25hbGl0eSA9PiAnVGVzdDEnLAogICAgICAgICAgICBWYWxpZElEICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgIH0sCiAgICAgICAgVXBkYXRlR2V0ID0+IHsKICAgICAgICAgICAgTmFtZSAgICAgICAgICA9PiAnVGVzdEl0ZW01VVBEQVRFMicsCiAgICAgICAgICAgIEZ1bmN0aW9uYWxpdHkgPT4gJ1Rlc3QxJywKICAgICAgICAgICAgVmFsaWRJRCAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICAgICAgQ29tbWVudCAgICAgICA9PiAnJywKICAgICAgICAgICAgQ3JlYXRlQnkgICAgICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIGl0ZW0gb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIHVwZGF0ZWQgKGl0ZW0gdXBkYXRlIGFyZ3VtZW50cyBhcmUgY29tcGxldGUpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICAgICAgICA9PiAnVGVzdEl0ZW01VVBEQVRFMycsCiAgICAgICAgICAgIEZ1bmN0aW9uYWxpdHkgPT4gJ1Rlc3QxJywKICAgICAgICAgICAgVmFsaWRJRCAgICAgICA9PiAxLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBVcGRhdGVHZXQgPT4gewogICAgICAgICAgICBOYW1lICAgICAgICAgID0+ICdUZXN0SXRlbTVVUERBVEUzJywKICAgICAgICAgICAgRnVuY3Rpb25hbGl0eSA9PiAnVGVzdDEnLAogICAgICAgICAgICBWYWxpZElEICAgICAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgPT4gJycsCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgICAgICA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyB0ZW1wbGF0ZSBtdXN0IGJlIGluc2VydGVkIHN1Y2Vzc2Z1bGx5IChjaGVjayBzdHJpbmcgY2xlYW5lciBmdW5jdGlvbikKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBDbGFzcyAgICAgICAgID0+ICIgXHQgXG4gXHIgVW5pdCBUZXN0IDo6IFRlc3QgQ2xhc3MgXHQgXG4gXHIgIiAuICRDbGFzc1JhbmRbMF0sCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgPT4gIiBcdCBcbiBcciBUZXN0IEl0ZW0gXHQgXG4gXHIgIiwKICAgICAgICAgICAgRnVuY3Rpb25hbGl0eSA9PiAiIFx0IFxuIFxyIFRlc3QgRnVuY3Rpb25hbGl0eSBcdCBcbiBcciAiLAogICAgICAgICAgICBWYWxpZElEICAgICAgID0+IDEsCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgPT4gIiBcdCBcbiBcciBUZXN0IENvbW1lbnQgXHQgXG4gXHIgIiwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgQ2xhc3MgICAgICAgICA9PiAnVW5pdFRlc3Q6OlRlc3RDbGFzcycgLiAkQ2xhc3NSYW5kWzBdLAogICAgICAgICAgICBOYW1lICAgICAgICAgID0+ICdUZXN0IEl0ZW0nLAogICAgICAgICAgICBGdW5jdGlvbmFsaXR5ID0+ICdUZXN0RnVuY3Rpb25hbGl0eScsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgICAgICA9PiAnVGVzdCBDb21tZW50JywKICAgICAgICAgICAgQ3JlYXRlQnkgICAgICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgICAgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgaXRlbSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgdXBkYXRlZCBzdWNlc3NmdWxseSAoY2hlY2sgc3RyaW5nIGNsZWFuZXIgZnVuY3Rpb24pCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICAgICAgICA9PiAiIFx0IFxuIFxyIFRlc3QgSXRlbSBVUERBVEUxIFx0IFxuIFxyICIsCiAgICAgICAgICAgIEZ1bmN0aW9uYWxpdHkgPT4gIiBcdCBcbiBcciBUZXN0IEZ1bmMgdGlvbmEgbGl0eSBcdCBcbiBcciAiLAogICAgICAgICAgICBWYWxpZElEICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICBDb21tZW50ICAgICAgID0+ICIgXHQgXG4gXHIgVGVzdCBDb21tZW50IFVQREFURTEgXHQgXG4gXHIgIiwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICB9LAogICAgICAgIFVwZGF0ZUdldCA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgICAgICAgPT4gJ1Rlc3QgSXRlbSBVUERBVEUxJywKICAgICAgICAgICAgRnVuY3Rpb25hbGl0eSA9PiAnVGVzdEZ1bmN0aW9uYWxpdHknLAogICAgICAgICAgICBWYWxpZElEICAgICAgID0+ICRVc2VySURzWzBdLAogICAgICAgICAgICBDb21tZW50ICAgICAgID0+ICdUZXN0IENvbW1lbnQgVVBEQVRFMScsCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgICAgICA9PiAkVXNlcklEc1swXSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoaXMgaXRlbSBtdXN0IGJlIGluc2VydGVkIHN1Y2Vzc2Z1bGx5ICh1bmljb2RlIGNoZWNrcykKICAgIHsKICAgICAgICBBZGQgPT4gewogICAgICAgICAgICBDbGFzcyAgICAgICAgID0+ICdVbml0VGVzdDo6VGVzdENsYXNzwqknIC4gJENsYXNzUmFuZFsxXSwKICAgICAgICAgICAgTmFtZSAgICAgICAgICA9PiAnIM+SIM+hIFRlc3QgSXRlbSDGqSDPniAnLAogICAgICAgICAgICBGdW5jdGlvbmFsaXR5ID0+ICcg0aAg0aQgVGVzdEZ1bmN0aW9uYWxpdHkgz6AgzqkgJywKICAgICAgICAgICAgVmFsaWRJRCAgICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICAgID0+ICcgz6Ag0K8gVGVzdCBDb21tZW50INGsINGgICcsCiAgICAgICAgICAgIFVzZXJJRCAgICAgICAgPT4gMSwKICAgICAgICB9LAogICAgICAgIEFkZEdldCA9PiB7CiAgICAgICAgICAgIENsYXNzICAgICAgICAgPT4gJ1VuaXRUZXN0OjpUZXN0Q2xhc3PCqScgLiAkQ2xhc3NSYW5kWzFdLAogICAgICAgICAgICBOYW1lICAgICAgICAgID0+ICfPkiDPoSBUZXN0IEl0ZW0gxqkgz54nLAogICAgICAgICAgICBGdW5jdGlvbmFsaXR5ID0+ICfRoNGkVGVzdEZ1bmN0aW9uYWxpdHnPoM6pJywKICAgICAgICAgICAgVmFsaWRJRCAgICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICAgID0+ICfPoCDQryBUZXN0IENvbW1lbnQg0awg0aAnLAogICAgICAgICAgICBDcmVhdGVCeSAgICAgID0+IDEsCiAgICAgICAgICAgIENoYW5nZUJ5ICAgICAgPT4gMSwKICAgICAgICB9LAogICAgfSwKCiAgICAjIHRoZSBpdGVtIG9uZSBhZGQtdGVzdCBiZWZvcmUgbXVzdCBiZSB1cGRhdGVkIHN1Y2Vzc2Z1bGx5ICh1bmljb2RlIGNoZWNrcykKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgICAgICAgID0+ICdUZXN0IEl0ZW0gxqkgyaQgVVBEQVRFMScsCiAgICAgICAgICAgIEZ1bmN0aW9uYWxpdHkgPT4gJyDRoCDRpCBUZXN0RnVuY3Rpb25hbGl0eSDPoCDOqSAnLAogICAgICAgICAgICBWYWxpZElEICAgICAgID0+ICRVc2VySURzWzFdLAogICAgICAgICAgICBDb21tZW50ICAgICAgID0+ICcgVGVzdCBDb21tZW50INGZINGSIFVQREFURTEgJywKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAkVXNlcklEc1sxXSwKICAgICAgICB9LAogICAgICAgIFVwZGF0ZUdldCA9PiB7CiAgICAgICAgICAgIE5hbWUgICAgICAgICAgPT4gJ1Rlc3QgSXRlbSDGqSDJpCBVUERBVEUxJywKICAgICAgICAgICAgRnVuY3Rpb25hbGl0eSA9PiAn0aDRpFRlc3RGdW5jdGlvbmFsaXR5z6DOqScsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgPT4gJFVzZXJJRHNbMV0sCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgPT4gJ1Rlc3QgQ29tbWVudCDRmSDRkiBVUERBVEUxJywKICAgICAgICAgICAgQ3JlYXRlQnkgICAgICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgICAgID0+ICRVc2VySURzWzFdLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhpcyBpdGVtIG11c3QgYmUgaW5zZXJ0ZWQgc3VjZXNzZnVsbHkgKGEgc2Vjb25kIGl0ZW0gd2l0aCBGdW5jdGlvbmFsaXR5ICd0ZXN0MScpCiAgICB7CiAgICAgICAgQWRkID0+IHsKICAgICAgICAgICAgQ2xhc3MgICAgICAgICA9PiAnVW5pdFRlc3Q6OlRlc3RDbGFzcycgLiAkQ2xhc3NSYW5kWzBdLAogICAgICAgICAgICBOYW1lICAgICAgICAgID0+ICdUZXN0SXRlbTYnLAogICAgICAgICAgICBGdW5jdGlvbmFsaXR5ID0+ICdUZXN0MScsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgQWRkR2V0ID0+IHsKICAgICAgICAgICAgQ2xhc3MgICAgICAgICA9PiAnVW5pdFRlc3Q6OlRlc3RDbGFzcycgLiAkQ2xhc3NSYW5kWzBdLAogICAgICAgICAgICBOYW1lICAgICAgICAgID0+ICdUZXN0SXRlbTYnLAogICAgICAgICAgICBGdW5jdGlvbmFsaXR5ID0+ICdUZXN0MScsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgICAgICA9PiAnJywKICAgICAgICAgICAgQ3JlYXRlQnkgICAgICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgICAgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGUgaXRlbSBvbmUgYWRkLXRlc3QgYmVmb3JlIG11c3QgYmUgdXBkYXRlZCAoc2V0IGZ1bmN0aW9uYWxpdHkgdG8gJycpCiAgICB7CiAgICAgICAgVXBkYXRlID0+IHsKICAgICAgICAgICAgTmFtZSAgICAgICAgICA9PiAnVGVzdEl0ZW02VVBEQVRFMScsCiAgICAgICAgICAgIEZ1bmN0aW9uYWxpdHkgPT4gJycsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgPT4gMSwKICAgICAgICAgICAgVXNlcklEICAgICAgICA9PiAxLAogICAgICAgIH0sCiAgICAgICAgVXBkYXRlR2V0ID0+IHsKICAgICAgICAgICAgTmFtZSAgICAgICAgICA9PiAnVGVzdEl0ZW02VVBEQVRFMScsCiAgICAgICAgICAgIEZ1bmN0aW9uYWxpdHkgPT4gJycsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgICAgICA9PiAnJywKICAgICAgICAgICAgQ3JlYXRlQnkgICAgICA9PiAxLAogICAgICAgICAgICBDaGFuZ2VCeSAgICAgID0+IDEsCiAgICAgICAgfSwKICAgIH0sCgogICAgIyB0aGlzIGl0ZW0gbXVzdCBiZSBpbnNlcnRlZCBzdWNlc3NmdWxseSAoc3BlY2lhbCBjaGFyYWN0ZXIgY2hlY2tzKQogICAgewogICAgICAgIEFkZCA9PiB7CiAgICAgICAgICAgIENsYXNzICAgICAgICAgPT4gJ1VuaXRUZXN0OjpUZXN0Q2xhc3NbdGVzdF0lKlxcJyAuICRDbGFzc1JhbmRbMV0sCiAgICAgICAgICAgIE5hbWUgICAgICAgICAgPT4gJyBbdGVzdF0lKlxcIFRlc3QgSXRlbSBbdGVzdF0lKlxcICcsCiAgICAgICAgICAgIEZ1bmN0aW9uYWxpdHkgPT4gJyBbdGVzdF0lKlxcIFRlc3RGdW5jdGlvbmFsaXR5IFt0ZXN0XSUqXFwgJywKICAgICAgICAgICAgVmFsaWRJRCAgICAgICA9PiAxLAogICAgICAgICAgICBDb21tZW50ICAgICAgID0+ICcgW3Rlc3RdJSpcXCBUZXN0IENvbW1lbnQgW3Rlc3RdJSpcXCAnLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+IDEsCiAgICAgICAgfSwKICAgICAgICBBZGRHZXQgPT4gewogICAgICAgICAgICBDbGFzcyAgICAgICAgID0+ICdVbml0VGVzdDo6VGVzdENsYXNzW3Rlc3RdJSpcXCcgLiAkQ2xhc3NSYW5kWzFdLAogICAgICAgICAgICBOYW1lICAgICAgICAgID0+ICdbdGVzdF0lKlxcIFRlc3QgSXRlbSBbdGVzdF0lKlxcJywKICAgICAgICAgICAgRnVuY3Rpb25hbGl0eSA9PiAnW3Rlc3RdJSpcXFRlc3RGdW5jdGlvbmFsaXR5W3Rlc3RdJSpcXCcsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgPT4gMSwKICAgICAgICAgICAgQ29tbWVudCAgICAgICA9PiAnW3Rlc3RdJSpcXCBUZXN0IENvbW1lbnQgW3Rlc3RdJSpcXCcsCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgICAgICA9PiAxLAogICAgICAgIH0sCiAgICB9LAoKICAgICMgdGhlIGl0ZW0gb25lIGFkZC10ZXN0IGJlZm9yZSBtdXN0IGJlIHVwZGF0ZWQgc3VjZXNzZnVsbHkgKHNwZWNpYWwgY2hhcmFjdGVyIGNoZWNrcykKICAgIHsKICAgICAgICBVcGRhdGUgPT4gewogICAgICAgICAgICBOYW1lICAgICAgICAgID0+ICcgW3Rlc3RdJSpcXCBUZXN0IEl0ZW0gVVBEQVRFMSBbdGVzdF0lKlxcICcsCiAgICAgICAgICAgIEZ1bmN0aW9uYWxpdHkgPT4gJyBbdGVzdF0lKlxcIFRlc3RGdW5jdGlvbmFsaXR5IFt0ZXN0XSUqXFwgJywKICAgICAgICAgICAgVmFsaWRJRCAgICAgICA9PiAkVXNlcklEc1sxXSwKICAgICAgICAgICAgQ29tbWVudCAgICAgICA9PiAnIFt0ZXN0XSUqXFwgVGVzdCBDb21tZW50IFVQREFURTEgW3Rlc3RdJSpcXCAnLAogICAgICAgICAgICBVc2VySUQgICAgICAgID0+ICRVc2VySURzWzFdLAogICAgICAgIH0sCiAgICAgICAgVXBkYXRlR2V0ID0+IHsKICAgICAgICAgICAgTmFtZSAgICAgICAgICA9PiAnW3Rlc3RdJSpcXCBUZXN0IEl0ZW0gVVBEQVRFMSBbdGVzdF0lKlxcJywKICAgICAgICAgICAgRnVuY3Rpb25hbGl0eSA9PiAnW3Rlc3RdJSpcXFRlc3RGdW5jdGlvbmFsaXR5W3Rlc3RdJSpcXCcsCiAgICAgICAgICAgIFZhbGlkSUQgICAgICAgPT4gJFVzZXJJRHNbMV0sCiAgICAgICAgICAgIENvbW1lbnQgICAgICAgPT4gJ1t0ZXN0XSUqXFwgVGVzdCBDb21tZW50IFVQREFURTEgW3Rlc3RdJSpcXCcsCiAgICAgICAgICAgIENyZWF0ZUJ5ICAgICAgPT4gMSwKICAgICAgICAgICAgQ2hhbmdlQnkgICAgICA9PiAkVXNlcklEc1sxXSwKICAgICAgICB9LAogICAgfSwKXTsKCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKIyBydW4gZ2VuZXJhbCB0ZXN0cwojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAkVGVzdENvdW50ID0gMTsKbXkgJExhc3RBZGRlZEl0ZW1JRDsKbXkgJUFkZGVkSXRlbUNvdW50ZXI7Cgpmb3IgbXkgJEl0ZW0gKCBAeyRJdGVtRGF0YX0gKSB7CgogICAgaWYgKCAkSXRlbS0+e0FkZH0gKSB7CgogICAgICAgICMgYWRkIG5ldyBpdGVtCiAgICAgICAgbXkgJEl0ZW1JRCA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtQWRkKAogICAgICAgICAgICAleyAkSXRlbS0+e0FkZH0gfSwKICAgICAgICApOwoKICAgICAgICAjIGNoZWNrIGlmIGl0ZW0gd2FzIGFkZGVkIHN1Y2Nlc3NmdWxseSBvciBub3QKICAgICAgICBpZiAoICRJdGVtLT57QWRkR2V0fSApIHsKCiAgICAgICAgICAgICRTZWxmLT5UcnVlKAogICAgICAgICAgICAgICAgJEl0ZW1JRCwKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IEl0ZW1BZGQoKSAtIEl0ZW1LZXk6ICRJdGVtSUQiLAogICAgICAgICAgICApOwoKICAgICAgICAgICAgaWYgKCRJdGVtSUQpIHsKCiAgICAgICAgICAgICAgICAjIHNldCBsYXN0IGl0ZW0gaWQgdmFyaWFibGUKICAgICAgICAgICAgICAgICRMYXN0QWRkZWRJdGVtSUQgPSAkSXRlbUlEOwoKICAgICAgICAgICAgICAgICMgaW5jcmVtZW50IHRoZSBhZGRlZCBpdGVtIGNvdW50ZXIKICAgICAgICAgICAgICAgICRBZGRlZEl0ZW1Db3VudGVyeyAkSXRlbS0+e0FkZEdldH0tPntDbGFzc30gfSsrOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICAgICAkSXRlbUlELAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogSXRlbUFkZCgpIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGl0ZW0gZGF0YSB0byBjaGVjayB0aGUgdmFsdWVzIGFmdGVyIGNyZWF0aW9uIG9mIGl0ZW0KICAgICAgICBteSAkSXRlbUdldCA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtR2V0KAogICAgICAgICAgICBJdGVtSUQgPT4gJEl0ZW1JRCwKICAgICAgICAgICAgVXNlcklEID0+ICRJdGVtLT57QWRkfS0+e1VzZXJJRH0sCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBpdGVtIGRhdGEgYWZ0ZXIgY3JlYXRpb24gb2YgaXRlbQogICAgICAgIGZvciBteSAkSXRlbUF0dHJpYnV0ZSAoIGtleXMgJXsgJEl0ZW0tPntBZGRHZXR9IH0gKSB7CiAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICRJdGVtR2V0LT57JEl0ZW1BdHRyaWJ1dGV9IHx8ICcnLAogICAgICAgICAgICAgICAgJEl0ZW0tPntBZGRHZXR9LT57JEl0ZW1BdHRyaWJ1dGV9IHx8ICcnLAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogSXRlbUdldCgpIC0gJEl0ZW1BdHRyaWJ1dGUiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KCiAgICBpZiAoICRJdGVtLT57VXBkYXRlfSApIHsKCiAgICAgICAgIyBjaGVjayBsYXN0IGl0ZW0gaWQgdmFyYWlibGUKICAgICAgICBpZiAoICEkTGFzdEFkZGVkSXRlbUlEICkgewogICAgICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICAgICAxLAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogTk8gTEFTVCBJVEVNIElEIEdJVkVOIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgdXBkYXRlIHRoZSBpdGVtCiAgICAgICAgbXkgJFVwZGF0ZVN1Y2VzcyA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtVXBkYXRlKAogICAgICAgICAgICAleyAkSXRlbS0+e1VwZGF0ZX0gfSwKICAgICAgICAgICAgSXRlbUlEID0+ICRMYXN0QWRkZWRJdGVtSUQsCiAgICAgICAgKTsKCiAgICAgICAgIyBjaGVjayBpZiBpdGVtIHdhcyB1cGRhdGVkIHN1Y2Nlc3NmdWxseSBvciBub3QKICAgICAgICBpZiAoICRJdGVtLT57VXBkYXRlR2V0fSApIHsKICAgICAgICAgICAgJFNlbGYtPlRydWUoCiAgICAgICAgICAgICAgICAkVXBkYXRlU3VjZXNzLAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogSXRlbVVwZGF0ZSgpIC0gSXRlbUtleTogJExhc3RBZGRlZEl0ZW1JRCIsCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgICAgICAkVXBkYXRlU3VjZXNzLAogICAgICAgICAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogSXRlbVVwZGF0ZSgpIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CgogICAgICAgICMgZ2V0IGl0ZW0gZGF0YSB0byBjaGVjayB0aGUgdmFsdWVzIGFmdGVyIHRoZSB1cGRhdGUKICAgICAgICBteSAkSXRlbUdldDIgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUdldCgKICAgICAgICAgICAgSXRlbUlEID0+ICRMYXN0QWRkZWRJdGVtSUQsCiAgICAgICAgICAgIFVzZXJJRCA9PiAkSXRlbS0+e1VwZGF0ZX0tPntVc2VySUR9LAogICAgICAgICk7CgogICAgICAgICMgY2hlY2sgaXRlbSBkYXRhIGFmdGVyIHVwZGF0ZQogICAgICAgIGZvciBteSAkSXRlbUF0dHJpYnV0ZSAoIGtleXMgJXsgJEl0ZW0tPntVcGRhdGVHZXR9IH0gKSB7CiAgICAgICAgICAgICRTZWxmLT5JcygKICAgICAgICAgICAgICAgICRJdGVtR2V0Mi0+eyRJdGVtQXR0cmlidXRlfSB8fCAnJywKICAgICAgICAgICAgICAgICRJdGVtLT57VXBkYXRlR2V0fS0+eyRJdGVtQXR0cmlidXRlfSB8fCAnJywKICAgICAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IEl0ZW1HZXQoKSAtICRJdGVtQXR0cmlidXRlIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICB9CgogICAgJFRlc3RDb3VudCsrOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgbWFrZSBwcmVwYXJhdGlvbnMgZm9yIGxhdGVyIHRlc3RzCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiMgY3JlYXRlIG5lZWRlZCBhcnJheXMKbXkgJUV4aXN0aW5nQ2xhc3Nlc1RtcDsKSVRFTToKZm9yIG15ICRJdGVtICggQHskSXRlbURhdGF9ICkgewogICAgbmV4dCBJVEVNIGlmICEkSXRlbS0+e0FkZEdldH0tPntDbGFzc307CiAgICAkRXhpc3RpbmdDbGFzc2VzVG1weyAkSXRlbS0+e0FkZEdldH0tPntDbGFzc30gfSA9IDE7Cn0KbXkgQEV4aXN0aW5nQ2xhc3NlcyA9IHNvcnQga2V5cyAlRXhpc3RpbmdDbGFzc2VzVG1wOwoKbXkgJUV4aXN0aW5nRnVuY3Rpb25hbGl0aWVzVG1wOwpJVEVNOgpmb3IgbXkgJEl0ZW0gKCBAeyRJdGVtRGF0YX0gKSB7CiAgICAkSXRlbS0+e1VwZGF0ZUdldH0tPntGdW5jdGlvbmFsaXR5fSB8fD0gJyc7CiAgICAkRXhpc3RpbmdGdW5jdGlvbmFsaXRpZXNUbXB7ICRJdGVtLT57VXBkYXRlR2V0fS0+e0Z1bmN0aW9uYWxpdHl9IH0gPSAxOwp9Cm15IEBFeGlzdGluZ0Z1bmN0aW9uYWxpdGllcyA9IHNvcnQga2V5cyAlRXhpc3RpbmdGdW5jdGlvbmFsaXRpZXNUbXA7CgpteSBATm9uRXhpc3RpbmdDbGFzc2VzID0gKCAnVW5pdFRlc3Q6Ok5vRXhpc3RpbmdDbGFzczEnLCAnVW5pdFRlc3Q6Ok5vRXhpc3RpbmdDbGFzczInICk7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgQ2xhc3NMaXN0IHRlc3QgMQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpteSAkQ2xhc3NMaXN0MSA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5DbGFzc0xpc3QoKTsKCmZvciBteSAkQ2xhc3MgKEBFeGlzdGluZ0NsYXNzZXMpIHsKCiAgICBteSAkQ2xhc3NDb3VudCA9IDA7CiAgICBpZiAoICRDbGFzc0xpc3QxICYmIHJlZiAkQ2xhc3NMaXN0MSBlcSAnQVJSQVknICkgewogICAgICAgICRDbGFzc0NvdW50ID0gZ3JlcCB7ICRfIGVxICRDbGFzcyB9IEB7JENsYXNzTGlzdDF9OwogICAgfQoKICAgICRTZWxmLT5JcygKICAgICAgICAkQ2xhc3NDb3VudCwKICAgICAgICAxLAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IENsYXNzTGlzdCgpIC0gJENsYXNzIGxpc3RlZCIsCiAgICApOwoKICAgICRUZXN0Q291bnQrKzsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIEl0ZW1MaXN0IHRlc3QgMQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpmb3IgbXkgJENsYXNzIChATm9uRXhpc3RpbmdDbGFzc2VzKSB7CgogICAgbXkgJEl0ZW1MaXN0ID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICRDbGFzcywKICAgICAgICBWYWxpZCA9PiAwLAogICAgKTsKCiAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgJEl0ZW1MaXN0LAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IEl0ZW1MaXN0KCkgLSAkQ2xhc3Mgbm90IGV4aXN0cyIsCiAgICApOwoKICAgICRUZXN0Q291bnQrKzsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIEl0ZW1MaXN0IHRlc3QgMgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpmb3IgbXkgJENsYXNzIChARXhpc3RpbmdDbGFzc2VzKSB7CgogICAgbXkgJEl0ZW1MaXN0ID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICRDbGFzcywKICAgICAgICBWYWxpZCA9PiAwLAogICAgKTsKCiAgICBteSAkTGlzdENvdW50ID0gJ05VTEwnOwogICAgaWYgKCBkZWZpbmVkICRJdGVtTGlzdCAmJiByZWYgJEl0ZW1MaXN0IGVxICdIQVNIJyApIHsKICAgICAgICAkTGlzdENvdW50ID0ga2V5cyAleyRJdGVtTGlzdH07CiAgICB9CgogICAgJFNlbGYtPklzKAogICAgICAgICRMaXN0Q291bnQsCiAgICAgICAgJEFkZGVkSXRlbUNvdW50ZXJ7JENsYXNzfSwKICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBJdGVtTGlzdCgpIC0gJENsYXNzIGNvcnJlY3QgbnVtYmVyIG9mIGl0ZW1zIiwKICAgICk7CgogICAgJFRlc3RDb3VudCsrOwp9CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgRnVuY3Rpb25hbGl0eUxpc3QgdGVzdCAxCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCm15ICVGdW5jdGlvbmFsaXR5TGlzdDE7Cm1hcCB7ICRGdW5jdGlvbmFsaXR5TGlzdDF7JF99ID0gMSB9IEBFeGlzdGluZ0Z1bmN0aW9uYWxpdGllczsKCmZvciBteSAkQ2xhc3MgKEBFeGlzdGluZ0NsYXNzZXMpIHsKCiAgICBteSAkRnVuY3Rpb25hbGl0eUxpc3QgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+RnVuY3Rpb25hbGl0eUxpc3QoCiAgICAgICAgQ2xhc3MgPT4gJENsYXNzLAogICAgKTsKCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAkRnVuY3Rpb25hbGl0eUxpc3QgJiYgcmVmICRGdW5jdGlvbmFsaXR5TGlzdCBlcSAnQVJSQVknLAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IEZ1bmN0aW9uYWxpdHlMaXN0KCkgLSByZXR1cm4gYSBhcnJheSByZWZlcmVuY2UiLAogICAgKTsKCiAgICBmb3IgbXkgJEZ1bmN0aW9uYWxpdHkgKCBAeyRGdW5jdGlvbmFsaXR5TGlzdH0gKSB7CiAgICAgICAgZGVsZXRlICRGdW5jdGlvbmFsaXR5TGlzdDF7JEZ1bmN0aW9uYWxpdHl9OwogICAgfQoKICAgICRUZXN0Q291bnQrKzsKfQoKJFNlbGYtPlRydWUoCiAgICAha2V5cyAlRnVuY3Rpb25hbGl0eUxpc3QxLAogICAgIlRlc3QgJFRlc3RDb3VudDogRnVuY3Rpb25hbGl0eUxpc3QoKSIsCik7CgokVGVzdENvdW50Kys7CgojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiMgQ2xhc3NSZW5hbWUgdGVzdCAxIChjaGVjayBub3JtYWwgcmVuYW1lKQojIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCgpDTEFTUzoKZm9yIG15ICRDbGFzcyAoQEV4aXN0aW5nQ2xhc3NlcykgewoKICAgIG15ICRPbGRJdGVtTGlzdCA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAkQ2xhc3MsCiAgICAgICAgVmFsaWQgPT4gMCwKICAgICk7CgogICAgbXkgJFN1Y2Nlc3MgPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+Q2xhc3NSZW5hbWUoCiAgICAgICAgQ2xhc3NPbGQgPT4gJENsYXNzLAogICAgICAgIENsYXNzTmV3ID0+ICRDbGFzcyAuICdSRU5BTUUxJywKICAgICk7CgogICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAxLAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBDbGFzc1JlbmFtZSgpIC0gUmVuYW1lIGZhaWxlZCIsCiAgICAgICAgKTsKICAgICAgICBuZXh0IENMQVNTOwogICAgfQoKICAgIG15ICROZXdJdGVtTGlzdCA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAkQ2xhc3MgLiAnUkVOQU1FMScsCiAgICAgICAgVmFsaWQgPT4gMCwKICAgICk7CgogICAgaWYgKAogICAgICAgICEkT2xkSXRlbUxpc3QKICAgICAgICB8fCAhJE5ld0l0ZW1MaXN0CiAgICAgICAgfHwgcmVmICRPbGRJdGVtTGlzdCBuZSAnSEFTSCcKICAgICAgICB8fCByZWYgJE5ld0l0ZW1MaXN0IG5lICdIQVNIJwogICAgICAgICkKICAgIHsKICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgIDEsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IENsYXNzUmVuYW1lKCkgLSBJdGVtTGlzdCBmYWlsZWQiLAogICAgICAgICk7CiAgICAgICAgbmV4dCBDTEFTUzsKICAgIH0KCiAgICBPTERLRVk6CiAgICBmb3IgbXkgJE9sZEtleSAoIGtleXMgJXskT2xkSXRlbUxpc3R9ICkgewoKICAgICAgICBpZiAoICFleGlzdHMgJE5ld0l0ZW1MaXN0LT57JE9sZEtleX0gKSB7CiAgICAgICAgICAgICROZXdJdGVtTGlzdC0+e0ZhaWxlZER1bW15fSA9IDE7CiAgICAgICAgICAgIG5leHQgT0xES0VZOwogICAgICAgIH0KCiAgICAgICAgbmV4dCBPTERLRVkgaWYgJE9sZEl0ZW1MaXN0LT57JE9sZEtleX0gbmUgJE5ld0l0ZW1MaXN0LT57JE9sZEtleX07CgogICAgICAgIGRlbGV0ZSAkTmV3SXRlbUxpc3QtPnskT2xkS2V5fTsKICAgIH0KCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAha2V5cyAleyROZXdJdGVtTGlzdH0sCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogQ2xhc3NSZW5hbWUoKSIsCiAgICApOwoKICAgICRUZXN0Q291bnQrKzsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIENsYXNzUmVuYW1lIHRlc3QgMiAoY2hlY2sgc3RyaW5nIGNsZWFuZXIgZnVuY3Rpb24pCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCkNMQVNTOgpmb3IgbXkgJENsYXNzIChARXhpc3RpbmdDbGFzc2VzKSB7CgogICAgbXkgJE9sZEl0ZW1MaXN0ID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1MaXN0KAogICAgICAgIENsYXNzID0+ICRDbGFzcyAuICdSRU5BTUUxJywKICAgICAgICBWYWxpZCA9PiAwLAogICAgKTsKCiAgICBteSAkU3VjY2VzcyA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5DbGFzc1JlbmFtZSgKICAgICAgICBDbGFzc09sZCA9PiAkQ2xhc3MgLiAnUkVOQU1FMScsCiAgICAgICAgQ2xhc3NOZXcgPT4gJyAnIC4gJENsYXNzIC4gIlJFIE5BIE1FIDIgXG4gXHIgXHQgIiwKICAgICk7CgogICAgaWYgKCAhJFN1Y2Nlc3MgKSB7CiAgICAgICAgJFNlbGYtPkZhbHNlKAogICAgICAgICAgICAxLAogICAgICAgICAgICAiVGVzdCAkVGVzdENvdW50OiBDbGFzc1JlbmFtZSgpIC0gUmVuYW1lIGZhaWxlZCIsCiAgICAgICAgKTsKICAgICAgICBuZXh0IENMQVNTOwogICAgfQoKICAgIG15ICROZXdJdGVtTGlzdCA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtTGlzdCgKICAgICAgICBDbGFzcyA9PiAkQ2xhc3MgLiAnUkVOQU1FMicsCiAgICAgICAgVmFsaWQgPT4gMCwKICAgICk7CgogICAgaWYgKAogICAgICAgICEkT2xkSXRlbUxpc3QKICAgICAgICB8fCAhJE5ld0l0ZW1MaXN0CiAgICAgICAgfHwgcmVmICRPbGRJdGVtTGlzdCBuZSAnSEFTSCcKICAgICAgICB8fCByZWYgJE5ld0l0ZW1MaXN0IG5lICdIQVNIJwogICAgICAgICkKICAgIHsKICAgICAgICAkU2VsZi0+RmFsc2UoCiAgICAgICAgICAgIDEsCiAgICAgICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IENsYXNzUmVuYW1lKCkgLSBJdGVtTGlzdCBmYWlsZWQiLAogICAgICAgICk7CiAgICAgICAgbmV4dCBDTEFTUzsKICAgIH0KCiAgICBPTERLRVk6CiAgICBmb3IgbXkgJE9sZEtleSAoIGtleXMgJXskT2xkSXRlbUxpc3R9ICkgewoKICAgICAgICBpZiAoICFleGlzdHMgJE5ld0l0ZW1MaXN0LT57JE9sZEtleX0gKSB7CiAgICAgICAgICAgICROZXdJdGVtTGlzdC0+e0ZhaWxlZER1bW15fSA9IDE7CiAgICAgICAgICAgIG5leHQgT0xES0VZOwogICAgICAgIH0KCiAgICAgICAgbmV4dCBPTERLRVkgaWYgJE9sZEl0ZW1MaXN0LT57JE9sZEtleX0gbmUgJE5ld0l0ZW1MaXN0LT57JE9sZEtleX07CgogICAgICAgIGRlbGV0ZSAkTmV3SXRlbUxpc3QtPnskT2xkS2V5fTsKICAgIH0KCiAgICAkU2VsZi0+VHJ1ZSgKICAgICAgICAha2V5cyAleyROZXdJdGVtTGlzdH0sCiAgICAgICAgIlRlc3QgJFRlc3RDb3VudDogQ2xhc3NSZW5hbWUoKSIsCiAgICApOwoKICAgICRUZXN0Q291bnQrKzsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIENsYXNzUmVuYW1lIHRlc3QgMiAoaWRlbnRpY2FsIG5hbWUgdGVzdCkKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwoKZm9yIG15ICRDbGFzcyAoQEV4aXN0aW5nQ2xhc3NlcykgewoKICAgIG15ICRTdWNjZXNzID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkNsYXNzUmVuYW1lKAogICAgICAgIENsYXNzT2xkID0+ICRDbGFzcyAuICdSRU5BTUUyJywKICAgICAgICBDbGFzc05ldyA9PiAkQ2xhc3MgLiAnUkVOQU1FMicsCiAgICApOwoKICAgICRTZWxmLT5UcnVlKAogICAgICAgICRTdWNjZXNzLAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IENsYXNzUmVuYW1lKCkgLSBvbGRuYW1lIGFuZCBuZXduYW1lIGlkZW50aWNhbCIsCiAgICApOwoKICAgICRUZXN0Q291bnQrKzsKfQoKIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwojIENsYXNzUmVuYW1lIHRlc3QgMyAobmV3IGNsYXNzIG5hbWUgYWxyZWFkeSBleGlzdHMpCiMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKCiRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtQWRkKAogICAgQ2xhc3MgICAgICAgICA9PiAnVW5pdFRlc3Q6OlRlc3RDbGFzcycgLiAkQ2xhc3NSYW5kWzJdLAogICAgTmFtZSAgICAgICAgICA9PiAnRHVtbXknLAogICAgRnVuY3Rpb25hbGl0eSA9PiAnJywKICAgIFZhbGlkSUQgICAgICAgPT4gMSwKICAgIFVzZXJJRCAgICAgICAgPT4gMSwKKTsKCmZvciBteSAkQ2xhc3MgKEBFeGlzdGluZ0NsYXNzZXMpIHsKCiAgICBteSAkU3VjY2VzcyA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5DbGFzc1JlbmFtZSgKICAgICAgICBDbGFzc09sZCA9PiAkQ2xhc3MgLiAnUkVOQU1FMicsCiAgICAgICAgQ2xhc3NOZXcgPT4gJ1VuaXRUZXN0OjpUZXN0Q2xhc3MnIC4gJENsYXNzUmFuZFsyXSwKICAgICk7CgogICAgJFNlbGYtPkZhbHNlKAogICAgICAgICRTdWNjZXNzLAogICAgICAgICJUZXN0ICRUZXN0Q291bnQ6IENsYXNzUmVuYW1lKCkgLSBuZXcgY2xhc3MgbmFtZSBhbHJlYWR5IGV4aXN0cyIsCiAgICApOwoKICAgICRUZXN0Q291bnQrKzsKfQoKMTsK