Calendar
1.5.1
OTRS GmbH
http://otrs.org/
GNU GENERAL PUBLIC LICENSE Version 2, June 1991
upgrade to 2.1.x
added resource management
added unit tests
added new security sql quote()
added delete email notify, moved to own css, delete yes/no screen, added event typs in different collors, removed Kernel/Config/Files/Calendar.pm
moved to table content size of 1000 chars
added nb_NO translation, thanks to Espen Stefansen!
new it translation from Giordano Bianchi
added involved user and notification feature
added xml
fixed status selection on update
fixed print modus
added multi view and print modus
added change log
New package
A web calendar.
Ein Web Kalender.
2.1.x
2006-10-18 11:51:18
yourhost.example.com
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSIgPz4KPG90cnNfY29uZmlnIHZlcnNpb249IjEuMCIgaW5pdD0iQXBwbGljYXRpb24iPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FnZW50Q2FsZW5kYXIiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIExhbmc9ImVuIj5BbGwgcGFyYW1ldGVycyBmb3IgdGhlIENhbGVuZGFyIG9iamVjdCBpbiB0aGUgYWdlbnQgaW50ZXJmYWNlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPERlc2NyaXB0aW9uIExhbmc9ImRlIj5BbGxlIFBhcmFtZXRlciBkZXMgQ2FsZW5kYXItT2JqZWt0cyBpbSBBZ2VudC1JbnRlcmZhY2UuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+Q2FsZW5kYXI8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Gcm9udGVuZDo6QWdlbnQ6Ok1vZHVsZVJlZ2lzdHJhdGlvbjwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxGcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5BIHdlYiBjYWxlbmRhcjwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5DYWxlbmRhcjwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgICAgIDxUaXRsZT5DYWxlbmRhcjwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5BIHdlYiBjYWxlbmRhcjwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPE5hbWU+Q2FsZW5kYXI8L05hbWU+CiAgICAgICAgICAgICAgICAgICAgPFR5cGU+TWVudTwvVHlwZT4KICAgICAgICAgICAgICAgICAgICA8QmxvY2s+SXRlbUFyZWE8L0Jsb2NrPgogICAgICAgICAgICAgICAgICAgIDxJbWFnZT5jYWxlbmRhci5wbmc8L0ltYWdlPgogICAgICAgICAgICAgICAgICAgIDxMaW5rPkFjdGlvbj1BZ2VudENhbGVuZGFyPC9MaW5rPgogICAgICAgICAgICAgICAgICAgIDxOYXZCYXI+Q2FsZW5kYXI8L05hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8QWNjZXNzS2V5PmM8L0FjY2Vzc0tleT4KICAgICAgICAgICAgICAgICAgICA8UHJpbz44MDAwPC9QcmlvPgogICAgICAgICAgICAgICAgPC9OYXZCYXI+CiAgICAgICAgICAgICAgICA8TmF2QmFyPgogICAgICAgICAgICAgICAgICAgIDxEZXNjcmlwdGlvbj5Ub2RheTwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPE5hbWU+VG9kYXk8L05hbWU+CiAgICAgICAgICAgICAgICAgICAgPEltYWdlPnRvZGF5LnBuZzwvSW1hZ2U+CiAgICAgICAgICAgICAgICAgICAgPExpbms+QWN0aW9uPUFnZW50Q2FsZW5kYXI8L0xpbms+CiAgICAgICAgICAgICAgICAgICAgPFR5cGU+PC9UeXBlPgogICAgICAgICAgICAgICAgICAgIDxCbG9jaz48L0Jsb2NrPgogICAgICAgICAgICAgICAgICAgIDxOYXZCYXI+Q2FsZW5kYXI8L05hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8QWNjZXNzS2V5Pm88L0FjY2Vzc0tleT4KICAgICAgICAgICAgICAgICAgICA8UHJpbz4xMDA8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhcj4KICAgICAgICAgICAgICAgIDxOYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPjUgRGF5IFdlZWsgVmlldzwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPE5hbWU+NSBEYXk8L05hbWU+CiAgICAgICAgICAgICAgICAgICAgPEltYWdlPjVkYXlzLnBuZzwvSW1hZ2U+CiAgICAgICAgICAgICAgICAgICAgPExpbms+QWN0aW9uPUFnZW50Q2FsZW5kYXImYW1wO1ZpZXc9V2VlazU8L0xpbms+CiAgICAgICAgICAgICAgICAgICAgPFR5cGU+PC9UeXBlPgogICAgICAgICAgICAgICAgICAgIDxCbG9jaz48L0Jsb2NrPgogICAgICAgICAgICAgICAgICAgIDxOYXZCYXI+Q2FsZW5kYXI8L05hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8QWNjZXNzS2V5PjU8L0FjY2Vzc0tleT4KICAgICAgICAgICAgICAgICAgICA8UHJpbz4xMTA8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhcj4KICAgICAgICAgICAgICAgIDxOYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPjcgRGF5IFdlZWsgVmlldzwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPE5hbWU+NyBEYXk8L05hbWU+CiAgICAgICAgICAgICAgICAgICAgPEltYWdlPjdkYXlzLnBuZzwvSW1hZ2U+CiAgICAgICAgICAgICAgICAgICAgPExpbms+QWN0aW9uPUFnZW50Q2FsZW5kYXImYW1wO1ZpZXc9V2Vlazc8L0xpbms+CiAgICAgICAgICAgICAgICAgICAgPFR5cGU+PC9UeXBlPgogICAgICAgICAgICAgICAgICAgIDxCbG9jaz48L0Jsb2NrPgogICAgICAgICAgICAgICAgICAgIDxOYXZCYXI+Q2FsZW5kYXI8L05hdkJhcj4KICAgICAgICAgICAgICAgICAgICA8QWNjZXNzS2V5Pjc8L0FjY2Vzc0tleT4KICAgICAgICAgICAgICAgICAgICA8UHJpbz4xMjA8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhcj4KICAgICAgICAgICAgICAgIDxOYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPjMgTW9udGggVmlldzwvRGVzY3JpcHRpb24+CiAgICAgICAgICAgICAgICAgICAgPE5hbWU+MyBNb250aDwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8SW1hZ2U+bW9udGgucG5nPC9JbWFnZT4KICAgICAgICAgICAgICAgICAgICA8TGluaz5BY3Rpb249QWdlbnRDYWxlbmRhciZhbXA7Vmlldz1Nb250aDwvTGluaz4KICAgICAgICAgICAgICAgICAgICA8TmF2QmFyPkNhbGVuZGFyPC9OYXZCYXI+CiAgICAgICAgICAgICAgICAgICAgPFR5cGU+PC9UeXBlPgogICAgICAgICAgICAgICAgICAgIDxCbG9jaz48L0Jsb2NrPgogICAgICAgICAgICAgICAgICAgIDxBY2Nlc3NLZXk+MzwvQWNjZXNzS2V5PgogICAgICAgICAgICAgICAgICAgIDxQcmlvPjEzMDwvUHJpbz4KICAgICAgICAgICAgICAgIDwvTmF2QmFyPgogICAgICAgICAgICA8L0Zyb250ZW5kTW9kdWxlUmVnPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkZyb250ZW5kOjpOb3RpZnlNb2R1bGUjIyM4MC1TaG93Q2FsZW5kYXJFdmVudHMiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIExhbmc9ImVuIj5UaGlzIG1vZHVsZSBkaXNwbGF5cyBjYWxlbmRhciBldmVudHMgaW4gdGhlIGFnZW50IGludGVyZmFjZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxEZXNjcmlwdGlvbiBMYW5nPSJkZSI+TWl0IGRpZXNlbSBNb2R1bCB3ZXJkZW4gS2FsZW5kZXItRWludHLkZ2UgaW0gQWdlbnQtSW50ZXJmYWNlIGFuZ2V6ZWlndC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5DYWxlbmRhcjwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkZyb250ZW5kOjpBZ2VudDo6TW9kdWxlTm90aWZ5PC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik1vZHVsZSI+S2VybmVsOjpPdXRwdXQ6OkhUTUw6Ok5vdGlmaWNhdGlvbkNhbGVuZGFyPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgo8L290cnNfY29uZmlnPgo=
IyAtLQojIEtlcm5lbC9TeXN0ZW0vQ2FsZW5kYXJFdmVudC5wbSAtIG1hbmFnZSBhbGwgY2FsZW5kYXIgZXZlbnRzCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDYgT1RSUyBHbWJILCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyAkSWQ6IENhbGVuZGFyRXZlbnQucG0sdiAxLjkgMjAwNi8xMC8wNCAyMDowNDo0OCBtYXJ0aW4gRXhwICQKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwudHh0LgojIC0tCgpwYWNrYWdlIEtlcm5lbDo6U3lzdGVtOjpDYWxlbmRhckV2ZW50OwoKdXNlIHN0cmljdDsKdXNlIERhdGU6OlBjYWxjIHF3KDphbGwpOwp1c2UgS2VybmVsOjpTeXN0ZW06OkVtYWlsOwoKdXNlIHZhcnMgcXcoQElTQSAkVkVSU0lPTik7CiRWRVJTSU9OID0gJyRSZXZpc2lvbjogMS45ICQnOwokVkVSU0lPTiA9fiBzL15cJC4qOlxXKC4qKVxXLis/JC8kMS87CgpzdWIgbmV3IHsKICAgIG15ICRUeXBlID0gc2hpZnQ7CiAgICBteSAlUGFyYW0gPSBAXzsKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzICgkU2VsZiwgJFR5cGUpOwogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yZWFjaCAocXcoREJPYmplY3QgQ29uZmlnT2JqZWN0IExvZ09iamVjdCBUaW1lT2JqZWN0IFVzZXJPYmplY3QgVXNlcklEKSkgewogICAgICAgICRTZWxmLT57JF99ID0gJFBhcmFteyRffSB8fCBkaWUgIkdvdCBubyAkXyEiOwogICAgfQogICAgJFNlbGYtPntTZW5kbWFpbE9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6RW1haWwtPm5ldyglUGFyYW0pOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIEV2ZW50QWRkIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CiAgICBteSAlUGFyYW0gPSBAXzsKICAgIG15ICVEQlBhcmFtID0gKCk7CiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yZWFjaCAocXcoVGl0bGUgU3RhcnRUaW1lIEVuZFRpbWUgU2VxdWVuY2VFbmRUaW1lIFN0YXRlIFVzZXJJRHMpKSB7CiAgICAgIGlmICghZGVmaW5lZCAoJFBhcmFteyRffSkpIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZyhQcmlvcml0eSA9PiAnZXJyb3InLCBNZXNzYWdlID0+ICJOZWVkICRfISIpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogICAgIyBjaGVjayBjb250ZW50CiAgICBpZiAoIWRlZmluZWQoJFBhcmFte0NvbnRlbnR9KSkgewogICAgICAgICRQYXJhbXtDb250ZW50fSA9ICctJzsKICAgIH0KICAgICMgZGIgcXVvdGUKICAgIGZvcmVhY2ggKHF3KFRpdGxlIENvbnRlbnQgU3RhcnRUaW1lIEVuZFRpbWUgU2VxdWVuY2VFbmRUaW1lIFNlcXVlbmNlVHlwZSBSZW1pbmRlciBTdGF0ZSkpIHsKICAgICAgICAkREJQYXJhbXskX30gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoJFBhcmFteyRffSk7CiAgICB9CiAgICAjIHNxbAogICAgbXkgJFNRTCA9ICJJTlNFUlQgSU5UTyBjYWxlbmRhcl9ldmVudCAiLgogICAgICAgIiAodGl0bGUsIGNvbnRlbnQsIHN0YXJ0X3RpbWUsIGVuZF90aW1lLCBzZXF1ZW5jZV9lbmRfdGltZSwgc2VxdWVuY2VfdHlwZSwgcmVtaW5kZXIsIG93bmVyX2lkLCBldmVudF9zdGF0dXMpICIuCiAgICAgICAiIFZBTFVFUyAiLgogICAgICAgIiAoJyREQlBhcmFte1RpdGxlfScsICckREJQYXJhbXtDb250ZW50fScsICckREJQYXJhbXtTdGFydFRpbWV9JywgIi4KICAgICAgICIgJyREQlBhcmFte0VuZFRpbWV9JywgJyREQlBhcmFte1NlcXVlbmNlRW5kVGltZX0nLCAnJERCUGFyYW17U2VxdWVuY2VUeXBlfScsICIuCiAgICAgICAiICckREJQYXJhbXtSZW1pbmRlcn0nLCAkU2VsZi0+e1VzZXJJRH0sICckREJQYXJhbXtTdGF0ZX0nKSI7CiAgICBpZiAoJFNlbGYtPntEQk9iamVjdH0tPkRvKFNRTCA9PiAkU1FMKSkgewogICAgICAgIG15ICRFdmVudElEOwogICAgICAgIG15ICRTUUwgPSAiU0VMRUNUIGlkIEZST00gY2FsZW5kYXJfZXZlbnQgV0hFUkUgIi4KICAgICAgICAgICAgIiBzdGFydF90aW1lID0gJyREQlBhcmFte1N0YXJ0VGltZX0nIEFORCBlbmRfdGltZSA9ICckREJQYXJhbXtFbmRUaW1lfScgQU5EICIuCiAgICAgICAgICAgICIgb3duZXJfaWQgPSAkU2VsZi0+e1VzZXJJRH0gQU5EIHRpdGxlID0gJyREQlBhcmFte1RpdGxlfSciOwogICAgICAgICRTZWxmLT57REJPYmplY3R9LT5QcmVwYXJlKFNRTCA9PiAkU1FMKTsKICAgICAgICB3aGlsZSAobXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkpIHsKICAgICAgICAgICAgJEV2ZW50SUQgPSAkUm93WzBdOwogICAgICAgIH0KICAgICAgICAjIHVwZGF0ZWQgZGIKICAgICAgICBteSAkUGFydGljaXBhbnQgPSAnJzsKICAgICAgICBmb3JlYWNoIG15ICRVc2VySUQgKEB7JFBhcmFte1VzZXJJRHN9fSkgewogICAgICAgICAgICAjIG93bmVyIGxvb2t1cAogICAgICAgICAgICBteSAlVXNlciA9ICRTZWxmLT57VXNlck9iamVjdH0tPkdldFVzZXJEYXRhKAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICAkUGFydGljaXBhbnQgLj0gIlxuICAgICAgICAgICAgIG8gJFVzZXJ7VXNlckZpcnN0bmFtZX0gJFVzZXJ7VXNlckxhc3RuYW1lfSAoJFVzZXJ7VXNlckxvZ2lufSkiOwogICAgICAgICAgICAkVXNlcklEID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCRVc2VySUQpOwogICAgICAgICAgICAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oCiAgICAgICAgICAgICAgICBTUUwgPT4gIklOU0VSVCBJTlRPIGNhbGVuZGFyX2V2ZW50X2ludm9sdmVkICIuCiAgICAgICAgICAgICAgICAgIiAoZXZlbnRfaWQsIHVzZXJfaWQpIFZBTFVFUyAoJEV2ZW50SUQsICRVc2VySUQpIiwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgIyBub3RpZnkKICAgICAgICBmb3JlYWNoIG15ICRVc2VySUQgKEB7JFBhcmFte1VzZXJJRHN9fSkgewogICAgICAgICAgICAjIG93bmVyIGxvb2t1cAogICAgICAgICAgICBteSAlVXNlciA9ICRTZWxmLT57VXNlck9iamVjdH0tPkdldFVzZXJEYXRhKAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRVc2VySUQsCiAgICAgICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICBteSAlQ3VycmVudFVzZXIgPSAkU2VsZi0+e1VzZXJPYmplY3R9LT5HZXRVc2VyRGF0YSgKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICAgICBWYWxpZCA9PiAxLAogICAgICAgICAgICApOwogICAgICAgICAgICAjIHNlbmQgbm90aWZpY2F0aW9uCiAgICAgICAgICAgIGlmICgkVXNlcntVc2VyRW1haWx9ICYmICRTZWxmLT57VXNlcklEfSBuZSAkVXNlcklEKSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+e1NlbmRtYWlsT2JqZWN0fS0+U2VuZCgKICAgICAgICAgICAgICAgICAgICBGcm9tID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdOb3RpZmljYXRpb25TZW5kZXJOYW1lJykuCiAgICAgICAgICAgICAgICAgICAgICcgPCcuJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ05vdGlmaWNhdGlvblNlbmRlckVtYWlsJykuJz4nLAogICAgICAgICAgICAgICAgICAgIFRvID0+ICRVc2Vye1VzZXJFbWFpbH0sCiAgICAgICAgICAgICAgICAgICAgU3ViamVjdCA9PiAiW0V2ZW50L05ld10gJFBhcmFte1RpdGxlfSIsCiAgICAgICAgICAgICAgICAgICAgJ1JlcGx5LVRvJyA9PiAkU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnTm90aWZpY2F0aW9uU2VuZGVyRW1haWwnKSwKICAgICAgICAgICAgICAgICAgICBUeXBlID0+ICd0ZXh0L3BsYWluJywKICAgICAgICAgICAgICAgICAgICBDaGFyc2V0ID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdEZWZhdWx0Q2hhcnNldCcpIHx8ICdpc28tODg1OS0xJywKICAgICAgICAgICAgICAgICAgICBCb2R5ID0+ICIKVGl0bGU6ICAgICAgICRQYXJhbXtUaXRsZX0KU3RhcnQ6ICAgICAgICRQYXJhbXtTdGFydFRpbWV9CkVuZDogICAgICAgICAkUGFyYW17RW5kVGltZX0KVHlwZTogICAgICAgICRQYXJhbXtTdGF0ZX0KUGFydGljaXBhbnQ6ICRQYXJ0aWNpcGFudAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiRQYXJhbXtDb250ZW50fQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkNyZWF0ZWQgYnk6ICRDdXJyZW50VXNlcntVc2VyRmlyc3RuYW1lfSAkQ3VycmVudFVzZXJ7VXNlckxhc3RuYW1lfSAoJEN1cnJlbnRVc2Vye1VzZXJMb2dpbn0pCiIsCiAgICAgICAgICAgICAgICAgICAgTG9vcCA9PiAxLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICByZXR1cm4gJEV2ZW50SUQ7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICByZXR1cm47CiAgICB9Cn0KCnN1YiBFdmVudFVwZGF0ZSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwogICAgbXkgJVBhcmFtID0gQF87CiAgICBteSAlREJQYXJhbSA9ICgpOwogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvcmVhY2ggKHF3KEV2ZW50SUQgVGl0bGUgU3RhcnRUaW1lIEVuZFRpbWUgU2VxdWVuY2VFbmRUaW1lIFNlcXVlbmNlVHlwZSBTdGF0ZSBVc2VySURzKSkgewogICAgICBpZiAoIWRlZmluZWQgKCRQYXJhbXskX30pKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coUHJpb3JpdHkgPT4gJ2Vycm9yJywgTWVzc2FnZSA9PiAiTmVlZCAkXyEiKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KICAgICMgY2hlY2sgY29udGVudAogICAgaWYgKCFkZWZpbmVkKCRQYXJhbXtDb250ZW50fSkpIHsKICAgICAgICAkUGFyYW17Q29udGVudH0gPSAnJzsKICAgIH0KICAgICMgZGIgcXVvdGUKICAgIGZvcmVhY2ggKHF3KFRpdGxlIENvbnRlbnQgU3RhcnRUaW1lIEVuZFRpbWUgU2VxdWVuY2VFbmRUaW1lIFNlcXVlbmNlVHlwZSBSZW1pbmRlciBTdGF0ZSkpIHsKICAgICAgICAkREJQYXJhbXskX30gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoJFBhcmFteyRffSk7CiAgICB9CiAgICBmb3JlYWNoIChxdyhFdmVudElEKSkgewogICAgICAgICREQlBhcmFteyRffSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSgkUGFyYW17JF99LCAnSW50ZWdlcicpOwogICAgfQogICAgIyBzcWwKICAgIG15ICRTUUwgPSAiVVBEQVRFIGNhbGVuZGFyX2V2ZW50IFNFVCAiLgogICAgICAgICIgdGl0bGUgPSAnJERCUGFyYW17VGl0bGV9JywgIi4KICAgICAgICAiIGNvbnRlbnQgPSAnJERCUGFyYW17Q29udGVudH0nLCAiLgogICAgICAgICIgc3RhcnRfdGltZSA9ICckREJQYXJhbXtTdGFydFRpbWV9JywgIi4KICAgICAgICAiIGVuZF90aW1lID0gJyREQlBhcmFte0VuZFRpbWV9JywgIi4KICAgICAgICAiIHNlcXVlbmNlX3R5cGUgPSAnJERCUGFyYW17U2VxdWVuY2VUeXBlfScsICIuCiAgICAgICAgIiBzZXF1ZW5jZV9lbmRfdGltZSA9ICckREJQYXJhbXtTZXF1ZW5jZUVuZFRpbWV9JywgIi4KICAgICAgICAiIHJlbWluZGVyID0gJyREQlBhcmFte1JlbWluZGVyfScsICIuCiAgICAgICAgIiBvd25lcl9pZCA9ICRTZWxmLT57VXNlcklEfSwgIi4KICAgICAgICAiIGV2ZW50X3N0YXR1cyA9ICckREJQYXJhbXtTdGF0ZX0nICIuCiAgICAgICAgIiBXSEVSRSAiLgogICAgICAgICIgaWQgPSAkREJQYXJhbXtFdmVudElEfSI7CiAgICBpZiAoJFNlbGYtPntEQk9iamVjdH0tPkRvKFNRTCA9PiAkU1FMKSkgewogICAgICAgICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICAgICAgU1FMID0+ICJERUxFVEUgRlJPTSBjYWxlbmRhcl9ldmVudF9pbnZvbHZlZCBXSEVSRSBldmVudF9pZCA9ICREQlBhcmFte0V2ZW50SUR9IiwKICAgICAgICApOwogICAgICAgICMgdXBkYXRlZCBkYgogICAgICAgIG15ICRQYXJ0aWNpcGFudCA9ICcnOwogICAgICAgIGZvcmVhY2ggbXkgJFVzZXJJRCAoQHskUGFyYW17VXNlcklEc319KSB7CiAgICAgICAgICAgICMgb3duZXIgbG9va3VwCiAgICAgICAgICAgIG15ICVVc2VyID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+R2V0VXNlckRhdGEoCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRQYXJ0aWNpcGFudCAuPSAiXG4gICAgICAgICAgICAgbyAkVXNlcntVc2VyRmlyc3RuYW1lfSAkVXNlcntVc2VyTGFzdG5hbWV9ICgkVXNlcntVc2VyTG9naW59KSI7CiAgICAgICAgICAgICRVc2VySUQgPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoJFVzZXJJRCk7CiAgICAgICAgICAgICRTZWxmLT57REJPYmplY3R9LT5EbygKICAgICAgICAgICAgICAgIFNRTCA9PiAiSU5TRVJUIElOVE8gY2FsZW5kYXJfZXZlbnRfaW52b2x2ZWQgIi4KICAgICAgICAgICAgICAgICAiIChldmVudF9pZCwgdXNlcl9pZCkgVkFMVUVTICgkREJQYXJhbXtFdmVudElEfSwgJFVzZXJJRCkiLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAjIG5vdGlmeQogICAgICAgIGZvcmVhY2ggbXkgJFVzZXJJRCAoQHskUGFyYW17VXNlcklEc319KSB7CiAgICAgICAgICAgICMgb3duZXIgbG9va3VwCiAgICAgICAgICAgIG15ICVVc2VyID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+R2V0VXNlckRhdGEoCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIG15ICVDdXJyZW50VXNlciA9ICRTZWxmLT57VXNlck9iamVjdH0tPkdldFVzZXJEYXRhKAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICMgc2VuZCBub3RpZmljYXRpb24KICAgICAgICAgICAgaWYgKCRVc2Vye1VzZXJFbWFpbH0gJiYgJFNlbGYtPntVc2VySUR9IG5lICRVc2VySUQpIHsKICAgICAgICAgICAgICAgICRTZWxmLT57U2VuZG1haWxPYmplY3R9LT5TZW5kKAogICAgICAgICAgICAgICAgICAgIEZyb20gPT4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ05vdGlmaWNhdGlvblNlbmRlck5hbWUnKS4KICAgICAgICAgICAgICAgICAgICAgJyA8Jy4kU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnTm90aWZpY2F0aW9uU2VuZGVyRW1haWwnKS4nPicsCiAgICAgICAgICAgICAgICAgICAgVG8gPT4gJFVzZXJ7VXNlckVtYWlsfSwKICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICJbRXZlbnQvVXBkYXRlXSAkUGFyYW17VGl0bGV9IiwKICAgICAgICAgICAgICAgICAgICAnUmVwbHktVG8nID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdOb3RpZmljYXRpb25TZW5kZXJFbWFpbCcpLAogICAgICAgICAgICAgICAgICAgIFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIENoYXJzZXQgPT4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0RlZmF1bHRDaGFyc2V0JykgfHwgJ2lzby04ODU5LTEnLAogICAgICAgICAgICAgICAgICAgIEJvZHkgPT4gIgpUaXRsZTogICAgICAgJFBhcmFte1RpdGxlfQpTdGFydDogICAgICAgJFBhcmFte1N0YXJ0VGltZX0KRW5kOiAgICAgICAgICRQYXJhbXtFbmRUaW1lfQpUeXBlOiAgICAgICAgJFBhcmFte1N0YXRlfQpQYXJ0aWNpcGFudDogJFBhcnRpY2lwYW50Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KJFBhcmFte0NvbnRlbnR9Ci0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0KVXBkYXRlZCBieTogJEN1cnJlbnRVc2Vye1VzZXJGaXJzdG5hbWV9ICRDdXJyZW50VXNlcntVc2VyTGFzdG5hbWV9ICgkQ3VycmVudFVzZXJ7VXNlckxvZ2lufSkKIiwKICAgICAgICAgICAgICAgICAgICBMb29wID0+IDEsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIHJldHVybiAxOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgcmV0dXJuOwogICAgfQp9CgpzdWIgRXZlbnREZWxldGUgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKICAgIG15ICVQYXJhbSA9IEBfOwogICAgIyBjaGVjayBuZWVkZWQgc3R1ZmYKICAgIGZvcmVhY2ggKHF3KEV2ZW50SUQpKSB7CiAgICAgIGlmICghZGVmaW5lZCAoJFBhcmFteyRffSkpIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZyhQcmlvcml0eSA9PiAnZXJyb3InLCBNZXNzYWdlID0+ICJOZWVkICRfISIpOwogICAgICAgIHJldHVybjsKICAgICAgfQogICAgfQogICAgIyBzZW5kIGRlbGV0ZSBub3RpZmljYXRpb24KICAgIG15ICVFdmVudCA9ICRTZWxmLT5FdmVudEdldChFdmVudElEID0+ICRQYXJhbXtFdmVudElEfSk7CiAgICAjIG5vdGlmeQogICAgaWYgKCRFdmVudHtVc2VySURzfSkgewogICAgICAgIG15ICRQYXJ0aWNpcGFudCA9ICcnOwogICAgICAgIGZvcmVhY2ggbXkgJFVzZXJJRCAoQHskUGFyYW17VXNlcklEc319KSB7CiAgICAgICAgICAgICMgb3duZXIgbG9va3VwCiAgICAgICAgICAgIG15ICVVc2VyID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+R2V0VXNlckRhdGEoCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRQYXJ0aWNpcGFudCAuPSAiXG4gICAgICAgICAgICAgbyAkVXNlcntVc2VyRmlyc3RuYW1lfSAkVXNlcntVc2VyTGFzdG5hbWV9ICgkVXNlcntVc2VyTG9naW59KSI7CiAgICAgICAgfQogICAgICAgIGZvcmVhY2ggbXkgJFVzZXJJRCAoQHskRXZlbnR7VXNlcklEc319KSB7CiAgICAgICAgICAgICMgb3duZXIgbG9va3VwCiAgICAgICAgICAgIG15ICVVc2VyID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+R2V0VXNlckRhdGEoCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFVzZXJJRCwKICAgICAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgIG15ICVDdXJyZW50VXNlciA9ICRTZWxmLT57VXNlck9iamVjdH0tPkdldFVzZXJEYXRhKAogICAgICAgICAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICMgc2VuZCBub3RpZmljYXRpb24KICAgICAgICAgICAgaWYgKCRVc2Vye1VzZXJFbWFpbH0gJiYgJFNlbGYtPntVc2VySUR9IG5lICRVc2VySUQpIHsKICAgICAgICAgICAgICAgICRTZWxmLT57U2VuZG1haWxPYmplY3R9LT5TZW5kKAogICAgICAgICAgICAgICAgICAgIEZyb20gPT4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ05vdGlmaWNhdGlvblNlbmRlck5hbWUnKS4KICAgICAgICAgICAgICAgICAgICAgJyA8Jy4kU2VsZi0+e0NvbmZpZ09iamVjdH0tPkdldCgnTm90aWZpY2F0aW9uU2VuZGVyRW1haWwnKS4nPicsCiAgICAgICAgICAgICAgICAgICAgVG8gPT4gJFVzZXJ7VXNlckVtYWlsfSwKICAgICAgICAgICAgICAgICAgICBTdWJqZWN0ID0+ICJbRXZlbnQvRGVsZXRlXSAkRXZlbnR7VGl0bGV9IiwKICAgICAgICAgICAgICAgICAgICAnUmVwbHktVG8nID0+ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdOb3RpZmljYXRpb25TZW5kZXJFbWFpbCcpLAogICAgICAgICAgICAgICAgICAgIFR5cGUgPT4gJ3RleHQvcGxhaW4nLAogICAgICAgICAgICAgICAgICAgIENoYXJzZXQgPT4gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ0RlZmF1bHRDaGFyc2V0JykgfHwgJ2lzby04ODU5LTEnLAogICAgICAgICAgICAgICAgICAgIEJvZHkgPT4gIgoqKiogW0V2ZW50L0RlbGV0ZV0gJEV2ZW50e1RpdGxlfSAqKioKVGl0bGU6ICAgICAgICRFdmVudHtUaXRsZX0KU3RhcnQ6ICAgICAgICRFdmVudHtTdGFydFRpbWV9CkVuZDogICAgICAgICAkRXZlbnR7RW5kVGltZX0KVHlwZTogICAgICAgICRFdmVudHtTdGF0ZX0KUGFydGljaXBhbnQ6ICRQYXJ0aWNpcGFudAotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCiRFdmVudHtDb250ZW50fQotLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tCkRlbGV0ZWQgYnk6ICRDdXJyZW50VXNlcntVc2VyRmlyc3RuYW1lfSAkQ3VycmVudFVzZXJ7VXNlckxhc3RuYW1lfSAoJEN1cnJlbnRVc2Vye1VzZXJMb2dpbn0pCiIsCiAgICAgICAgICAgICAgICAgICAgTG9vcCA9PiAxLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgIH0KICAgICMgZGIgcXVvdGUKICAgIGZvcmVhY2ggKHF3KEV2ZW50SUQpKSB7CiAgICAgICAgJFBhcmFteyRffSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSgkUGFyYW17JF99LCAnSW50ZWdlcicpOwogICAgfQogICAgIyBzcWwKICAgIGlmICgkU2VsZi0+e0RCT2JqZWN0fS0+RG8oU1FMID0+ICJERUxFVEUgRlJPTSBjYWxlbmRhcl9ldmVudCBXSEVSRSBpZCA9ICRQYXJhbXtFdmVudElEfSIpKSB7CiAgICAgICAgJFNlbGYtPntEQk9iamVjdH0tPkRvKFNRTCA9PiAiREVMRVRFIEZST00gY2FsZW5kYXJfZXZlbnRfaW52b2x2ZWQgV0hFUkUgZXZlbnRfaWQgPSAkUGFyYW17RXZlbnRJRH0iKTsKICAgICAgICByZXR1cm4gMTsKICAgIH0KICAgIGVsc2UgewogICAgICAgIHJldHVybjsKICAgIH0KfQoKc3ViIEV2ZW50R2V0IHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CiAgICBteSAlUGFyYW0gPSBAXzsKICAgIG15ICVEYXRhID0gKCk7CiAgICBteSBAVXNlcnMgPSAoKTsKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3JlYWNoIChxdyhFdmVudElEKSkgewogICAgICBpZiAoIWRlZmluZWQgKCRQYXJhbXskX30pKSB7CiAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coUHJpb3JpdHkgPT4gJ2Vycm9yJywgTWVzc2FnZSA9PiAiTmVlZCAkXyEiKTsKICAgICAgICByZXR1cm47CiAgICAgIH0KICAgIH0KICAgICMgZGIgcXVvdGUKICAgIGZvcmVhY2ggKHF3KEV2ZW50SUQpKSB7CiAgICAgICAgJFBhcmFteyRffSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSgkUGFyYW17JF99LCAnSW50ZWdlcicpOwogICAgfQogICAgIyBzcWwgZm9yIGV2ZW50CiAgICBteSAkU1FMID0gIlNFTEVDVCB0aXRsZSwgY29udGVudCwgc3RhcnRfdGltZSwgZW5kX3RpbWUsIHNlcXVlbmNlX2VuZF90aW1lLCBzZXF1ZW5jZV90eXBlLCByZW1pbmRlciwgb3duZXJfaWQsIGV2ZW50X3N0YXR1cyAiLgogICAgICAgICIgRlJPTSBjYWxlbmRhcl9ldmVudCBXSEVSRSBpZCA9ICRQYXJhbXtFdmVudElEfSI7CiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZShTUUwgPT4gJFNRTCk7CiAgICB3aGlsZSAobXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkpIHsKICAgICAgICAkRGF0YXtFdmVudElEfSA9ICRQYXJhbXtFdmVudElEfTsKICAgICAgICAkRGF0YXtUaXRsZX0gPSAkUm93WzBdIHx8ICctJzsKICAgICAgICAkRGF0YXtDb250ZW50fSA9ICRSb3dbMV07CiAgICAgICAgJERhdGF7U3RhcnRUaW1lfSA9ICRSb3dbMl07CiAgICAgICAgJERhdGF7RW5kVGltZX0gPSAkUm93WzNdOwogICAgICAgICREYXRhe1NlcXVlbmNlRW5kVGltZX0gPSAkUm93WzRdOwogICAgICAgICREYXRhe1NlcXVlbmNlVHlwZX0gPSAkUm93WzVdIHx8ICdTZXF1ZW5jZVR5cGU6Ok5vbmUnOwogICAgICAgICREYXRhe1JlbWluZGVyfSA9ICRSb3dbNl07CiAgICAgICAgJERhdGF7VXNlcklEfSA9ICRSb3dbN107CiAgICAgICAgJERhdGF7U3RhdGV9ID0gJFJvd1s4XTsKICAgIH0KICAgIGlmICghJERhdGF7RXZlbnRJRH0pIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZyhQcmlvcml0eSA9PiAnZXJyb3InLCBNZXNzYWdlID0+ICJObyBzdWNoIEV2ZW50SUQgJFBhcmFte0V2ZW50SUR9ISIpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgICMgb3duZXIgbG9va3VwCiAgICBteSAlVXNlciA9ICRTZWxmLT57VXNlck9iamVjdH0tPkdldFVzZXJEYXRhKAogICAgICAgIFVzZXJJRCA9PiAkRGF0YXtVc2VySUR9LAogICAgKTsKICAgICMgc3FsIGZvciBpbnZvbHZlZAogICAgJFNRTCA9ICJTRUxFQ1QgdXNlcl9pZCAiLgogICAgICAgICIgRlJPTSBjYWxlbmRhcl9ldmVudF9pbnZvbHZlZCBXSEVSRSBldmVudF9pZCA9ICRQYXJhbXtFdmVudElEfSI7CiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZShTUUwgPT4gJFNRTCk7CiAgICB3aGlsZSAobXkgQFJvdyA9ICRTZWxmLT57REJPYmplY3R9LT5GZXRjaHJvd0FycmF5KCkpIHsKICAgICAgICBwdXNoIChAVXNlcnMsICRSb3dbMF0pOwogICAgfQogICAgJERhdGF7VXNlcklEc30gPSBcQFVzZXJzOwogICAgbXkgJFN0YXJ0VGltZSA9ICRTZWxmLT57VGltZU9iamVjdH0tPlRpbWVTdGFtcDJTeXN0ZW1UaW1lKAogICAgICAgIFN0cmluZyA9PiAkRGF0YXtTdGFydFRpbWV9LAogICAgKTsKICAgICgkRGF0YXtTdGFydFNlY30sICREYXRhe1N0YXJ0TWludXRlfSwgJERhdGF7U3RhcnRIb3VyfSwgJERhdGF7U3RhcnREYXl9LCAkRGF0YXtTdGFydE1vbnRofSwgJERhdGF7U3RhcnRZZWFyfSkgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lMkRhdGUoCiAgICAgICAgU3lzdGVtVGltZSA9PiAkU3RhcnRUaW1lLAogICAgKTsKCiAgICBteSAkRW5kVGltZSA9ICRTZWxmLT57VGltZU9iamVjdH0tPlRpbWVTdGFtcDJTeXN0ZW1UaW1lKAogICAgICAgIFN0cmluZyA9PiAkRGF0YXtFbmRUaW1lfSwKICAgICk7CiAgICAoJERhdGF7RW5kU2VjfSwgJERhdGF7RW5kTWludXRlfSwgJERhdGF7RW5kSG91cn0sICREYXRhe0VuZERheX0sICREYXRhe0VuZE1vbnRofSwgJERhdGF7RW5kWWVhcn0pID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZTJEYXRlKAogICAgICAgIFN5c3RlbVRpbWUgPT4gJEVuZFRpbWUsCiAgICApOwogICAgaWYgKCREYXRhe1NlcXVlbmNlRW5kVGltZX0gJiYgJERhdGF7U2VxdWVuY2VFbmRUaW1lfSAhfiAvXjAwMDAvKSB7CiAgICAgICAgbXkgJFNlcXVlbmNlRW5kVGltZSA9ICRTZWxmLT57VGltZU9iamVjdH0tPlRpbWVTdGFtcDJTeXN0ZW1UaW1lKAogICAgICAgICAgICBTdHJpbmcgPT4gJERhdGF7U2VxdWVuY2VFbmRUaW1lfSwKICAgICAgICApOwogICAgICAgICgkRGF0YXtTZXF1ZW5jZUVuZFNlY30sICREYXRhe1NlcXVlbmNlRW5kTWludXRlfSwgJERhdGF7U2VxdWVuY2VFbmRIb3VyfSwgJERhdGF7U2VxdWVuY2VFbmREYXl9LCAkRGF0YXtTZXF1ZW5jZUVuZE1vbnRofSwgJERhdGF7U2VxdWVuY2VFbmRZZWFyfSkgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lMkRhdGUoCiAgICAgICAgICAgIFN5c3RlbVRpbWUgPT4gJFNlcXVlbmNlRW5kVGltZSwKICAgICAgICApOwogICAgfQoKICAgIHJldHVybiAoJVVzZXIsJURhdGEpOwp9CgpzdWIgRXZlbnRzIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CiAgICBteSAlUGFyYW0gPSBAXzsKICAgIG15IEBFdmVudElEcyA9ICgpOwogICAgbXkgJVVzZWQgPSAoKTsKICAgICMgY2hlY2sgbmVlZGVkIHN0dWZmCiAgICBmb3JlYWNoIChxdyhTdGFydFRpbWUgRW5kVGltZSkpIHsKICAgICAgaWYgKCFkZWZpbmVkICgkUGFyYW17JF99KSkgewogICAgICAgICRTZWxmLT57TG9nT2JqZWN0fS0+TG9nKFByaW9yaXR5ID0+ICdlcnJvcicsIE1lc3NhZ2UgPT4gIk5lZWQgJF8hIik7CiAgICAgICAgcmV0dXJuOwogICAgICB9CiAgICB9CiAgICBteSAkU3RhcnRTeXN0ZW1UaW1lID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+VGltZVN0YW1wMlN5c3RlbVRpbWUoCiAgICAgICAgU3RyaW5nID0+ICRQYXJhbXtTdGFydFRpbWV9LAogICAgKTsKICAgIG15ICRFbmRTeXN0ZW1UaW1lID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+VGltZVN0YW1wMlN5c3RlbVRpbWUoCiAgICAgICAgU3RyaW5nID0+ICRQYXJhbXtFbmRUaW1lfSwKICAgICk7CiAgICBteSAoJFNTZWMsICRTTWluLCAkU0hvdXIsICRTRGF5LCAkU01vbnRoLCAkU1llYXIpID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZTJEYXRlKAogICAgICAgIFN5c3RlbVRpbWUgPT4gJFN0YXJ0U3lzdGVtVGltZSwKICAgICk7CiAgICBteSAoJEVTZWMsICRFTWluLCAkRUhvdXIsICRFRGF5LCAkRU1vbnRoLCAkRVllYXIpID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZTJEYXRlKAogICAgICAgIFN5c3RlbVRpbWUgPT4gJEVuZFN5c3RlbVRpbWUsCiAgICApOwogICAgbXkgJERlbHRhID0gRGVsdGFfRGF5cygkU1llYXIsICRTTW9udGgsICRTRGF5LCAkRVllYXIsICRFTW9udGgsICRFRGF5KTsKCiAgICBmb3JlYWNoICgwLi4kRGVsdGEpIHsKICAgICAgICBteSAoJFllYXIxLCAkTW9udGgxLCAkRGF5MSkgPSBBZGRfRGVsdGFfRGF5cygkU1llYXIsICRTTW9udGgsICRTRGF5LCAkXyk7CiAgICAgICAgbXkgKCRZZWFyMiwgJE1vbnRoMiwgJERheTIpID0gQWRkX0RlbHRhX0RheXMoJFNZZWFyLCAkU01vbnRoLCAkU0RheSwgJF8pOwogICAgICAgIGlmICgkXyA9PSAwKSB7CiAgICAgICAgICAgICRQYXJhbXtTdGFydFRpbWV9ID0gIiRZZWFyMS0kTW9udGgxLSREYXkxICRTSG91cjokU01pbjokU1NlYyI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkUGFyYW17U3RhcnRUaW1lfSA9ICIkWWVhcjEtJE1vbnRoMS0kRGF5MSAwMDowMDowMCI7CiAgICAgICAgfQogICAgICAgIGlmICgkXyA9PSAkRGVsdGEpIHsKICAgICAgICAgICAgJFBhcmFte0VuZFRpbWV9ID0gIiRZZWFyMi0kTW9udGgyLSREYXkyICRFSG91cjokRU1pbjokRVNlYyI7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkUGFyYW17RW5kVGltZX0gPSAiJFllYXIyLSRNb250aDItJERheTIgMjM6NTk6NTkiOwogICAgICAgIH0KICAgICAgICAjIGRiIHF1b3RlCiAgICAgICAgZm9yZWFjaCAocXcoU3RhcnRUaW1lIEVuZFRpbWUpKSB7CiAgICAgICAgICAgICRQYXJhbXskX30gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoJFBhcmFteyRffSk7CiAgICAgICAgfQogICAgICAgICMgc3FsCiAgICAgICAgbXkgJFNRTCA9ICJTRUxFQ1QgZS5pZCwgZS50aXRsZSwgZS5jb250ZW50LCBlLnN0YXJ0X3RpbWUsIGUuZW5kX3RpbWUsIGUuZXZlbnRfc3RhdHVzICIuCiAgICAgICAgICAgICIgRlJPTSBjYWxlbmRhcl9ldmVudCBlICI7CiAgICAgICAgaWYgKCRQYXJhbXtVc2VySURzfSAmJiBAeyRQYXJhbXtVc2VySURzfX0pIHsKICAgICAgICAgICAgJFNRTCAuPSAiICwgY2FsZW5kYXJfZXZlbnRfaW52b2x2ZWQgZWkgIjsKICAgICAgICB9CiAgICAgICAgJFNRTCAuPSAiIFdIRVJFICIuCiMgICAgICAgICAgICAiIEZST00gY2FsZW5kYXJfZXZlbnQgZSwgY2FsZW5kYXJfZXZlbnRfaW52b2x2ZWQgZWkgIi4KIyAgICAgICAgICAgICIgV0hFUkUgIi4KIyAgICAgICAgICAgICIgZS5pZCA9IGVpLmV2ZW50X2lkIEFORCAiLgogICAgICAgICAgICAiICgoZS5zdGFydF90aW1lID49ICckUGFyYW17U3RhcnRUaW1lfScgQU5EIGUuZW5kX3RpbWUgPD0gJyRQYXJhbXtFbmRUaW1lfScpICIuCiAgICAgICAgICAgICIgT1IgIi4KICAgICAgICAgICAgIiAoZS5zdGFydF90aW1lID49ICckUGFyYW17U3RhcnRUaW1lfScgQU5EIGUuc3RhcnRfdGltZSA8PSAnJFBhcmFte0VuZFRpbWV9JykgIi4KICAgICAgICAgICAgIiBPUiAiLgogICAgICAgICAgICAiIChlLmVuZF90aW1lID49ICckUGFyYW17U3RhcnRUaW1lfScgQU5EIGUuZW5kX3RpbWUgPD0gJyRQYXJhbXtFbmRUaW1lfScpICIuCiAgICAgICAgICAgICIgT1IgIi4KICAgICAgICAgICAgIiAoZS5zdGFydF90aW1lIDw9ICckUGFyYW17U3RhcnRUaW1lfScgQU5EIGUuZW5kX3RpbWUgPj0gJyRQYXJhbXtFbmRUaW1lfScpKSAiOwogICAgICAgIGlmICgkUGFyYW17VXNlcklEc30gJiYgQHskUGFyYW17VXNlcklEc319KSB7CiMgICAgICAgICAgICAkU1FMIC49ICIgQU5EIGVpLnVzZXJfaWQgSU4gKCI7CiAgICAgICAgICAgICRTUUwgLj0gIiBBTkQgZS5pZCA9IGVpLmV2ZW50X2lkIEFORCBlaS51c2VyX2lkIElOICgiOwogICAgICAgICAgICBteSAkQ291bnQgPSAwOwogICAgICAgICAgICBmb3JlYWNoIChAeyRQYXJhbXtVc2VySURzfX0pIHsKICAgICAgICAgICAgICAgIGlmICgkQ291bnQpIHsKICAgICAgICAgICAgICAgICAgICAkU1FMIC49ICIsICI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkU1FMIC49ICIkXyI7CiAgICAgICAgICAgICAgICAkQ291bnQrKzsKICAgICAgICAgICAgfQogICAgICAgICAgICAkU1FMIC49ICIpIjsKICAgICAgICB9CiAgICAgICAgJFNRTCAuPSAiIE9SREVSIEJZIGUuc3RhcnRfdGltZSI7CiNwcmludCBTVERFUlIgIlNRTDogJFNRTFxuIjsKICAgICAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZShTUUwgPT4gJFNRTCk7CiAgICAgICAgd2hpbGUgKG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpKSB7CiAgICAgICAgICAgIGlmICghJFVzZWR7JFJvd1swXX0pIHsKICAgICAgICAgICAgICAgIG15ICVFdmVudCA9ICgKICAgICAgICAgICAgICAgICAgICBFdmVudElEID0+ICRSb3dbMF0sCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgPT4gJFJvd1sxXSB8fCAnLScsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAkUm93WzJdLAogICAgICAgICAgICAgICAgICAgIFN0YXJ0VGltZSA9PiAkUm93WzNdLAogICAgICAgICAgICAgICAgICAgIEVuZFRpbWUgPT4gJFJvd1s0XSwKICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiAkUm93WzVdLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIG15ICRTdGFydFRpbWUgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5UaW1lU3RhbXAyU3lzdGVtVGltZSgKICAgICAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJEV2ZW50e1N0YXJ0VGltZX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgbXkgJEVuZFRpbWUgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5UaW1lU3RhbXAyU3lzdGVtVGltZSgKICAgICAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJEV2ZW50e0VuZFRpbWV9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICgkRXZlbnR7U3RhcnRTZWN9LCAkRXZlbnR7U3RhcnRNaW51dGV9LCAkRXZlbnR7U3RhcnRIb3VyfSwgJEV2ZW50e1N0YXJ0RGF5fSwgJEV2ZW50e1N0YXJ0TW9udGh9LCAkRXZlbnR7U3RhcnRZZWFyfSkgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lMkRhdGUoCiAgICAgICAgICAgICAgICAgICAgU3lzdGVtVGltZSA9PiAkU3RhcnRUaW1lLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICgkRXZlbnR7RW5kU2VjfSwgJEV2ZW50e0VuZE1pbnV0ZX0sICRFdmVudHtFbmRIb3VyfSwgJEV2ZW50e0VuZERheX0sICRFdmVudHtFbmRNb250aH0sICRFdmVudHtFbmRZZWFyfSkgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lMkRhdGUoCiAgICAgICAgICAgICAgICAgICAgU3lzdGVtVGltZSA9PiAkRW5kVGltZSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgICAgICBwdXNoIChARXZlbnRJRHMsIFwlRXZlbnQpOwogICAgICAgICAgICAgICAgJFVzZWR7JFJvd1swXX0gPSAxOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIG15ICRTeXN0ZW1UaW1lID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+VGltZVN0YW1wMlN5c3RlbVRpbWUoCiAgICAgICAgICAgIFN0cmluZyA9PiAkUGFyYW17U3RhcnRUaW1lfSwKICAgICAgICApOwogICAgICAgIG15ICgkU1NlYywgJFNNaW4sICRTSG91ciwgJFNEYXksICRTTW9udGgsICRTWWVhcikgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lMkRhdGUoCiAgICAgICAgICAgIFN5c3RlbVRpbWUgPT4gJFN5c3RlbVRpbWUsCiAgICAgICAgKTsKCiAgICAgICAgJFNRTCA9ICJTRUxFQ1QgZS5pZCwgZS5zZXF1ZW5jZV90eXBlLCBlLnRpdGxlLCBlLmNvbnRlbnQsIGUuc3RhcnRfdGltZSwgZS5lbmRfdGltZSwgZS5ldmVudF9zdGF0dXMgIjsKIyAgICAgICAgICAgICIgRlJPTSBjYWxlbmRhcl9ldmVudCBlLCBjYWxlbmRhcl9ldmVudF9pbnZvbHZlZCBlaSAiLgojICAgICAgICAgICAgIiBXSEVSRSAiLgojICAgICAgICAgICAgIiBlLmlkID0gZWkuZXZlbnRfaWQgQU5EICIuCiAgICAgICAgJFNRTCAuPSAiIEZST00gY2FsZW5kYXJfZXZlbnQgZSAiOwogICAgICAgIGlmICgkUGFyYW17VXNlcklEc30gJiYgQHskUGFyYW17VXNlcklEc319KSB7CiAgICAgICAgICAgICRTUUwgLj0gIiAsIGNhbGVuZGFyX2V2ZW50X2ludm9sdmVkIGVpICI7CiAgICAgICAgfQogICAgICAgICRTUUwgLj0gIiBXSEVSRSAiLgogICAgICAgICAgICAiICgoZS5zdGFydF90aW1lID49ICckUGFyYW17U3RhcnRUaW1lfScgQU5EIGUuc2VxdWVuY2VfZW5kX3RpbWUgPD0gJyRQYXJhbXtFbmRUaW1lfScpICIuCiAgICAgICAgICAgICIgT1IgIi4KICAgICAgICAgICAgIiAoZS5zdGFydF90aW1lID49ICckUGFyYW17U3RhcnRUaW1lfScgQU5EIGUuc3RhcnRfdGltZSA8PSAnJFBhcmFte0VuZFRpbWV9JykgIi4KICAgICAgICAgICAgIiBPUiAiLgogICAgICAgICAgICAiIChlLnNlcXVlbmNlX2VuZF90aW1lID49ICckUGFyYW17U3RhcnRUaW1lfScgQU5EIGUuc2VxdWVuY2VfZW5kX3RpbWUgPD0gJyRQYXJhbXtFbmRUaW1lfScpICIuCiAgICAgICAgICAgICIgT1IgIi4KICAgICAgICAgICAgIiAoZS5zdGFydF90aW1lIDw9ICckUGFyYW17U3RhcnRUaW1lfScgQU5EIGUuc2VxdWVuY2VfZW5kX3RpbWUgPj0gJyRQYXJhbXtFbmRUaW1lfScpKSAiOwogICAgICAgIGlmICgkUGFyYW17VXNlcklEc30gJiYgQHskUGFyYW17VXNlcklEc319KSB7CiMgICAgICAgICAgICAkU1FMIC49ICIgQU5EIGVpLnVzZXJfaWQgSU4gKCI7CiAgICAgICAgICAgICRTUUwgLj0gIiBBTkQgZS5pZCA9IGVpLmV2ZW50X2lkIEFORCBlaS51c2VyX2lkIElOICgiOwogICAgICAgICAgICBteSAkQ291bnQgPSAwOwogICAgICAgICAgICBmb3JlYWNoIChAeyRQYXJhbXtVc2VySURzfX0pIHsKICAgICAgICAgICAgICAgIGlmICgkQ291bnQpIHsKICAgICAgICAgICAgICAgICAgICAkU1FMIC49ICIsICI7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAkU1FMIC49ICIkXyI7CiAgICAgICAgICAgICAgICAkQ291bnQrKzsKICAgICAgICAgICAgfQogICAgICAgICAgICAkU1FMIC49ICIpIjsKICAgICAgICB9CiAgICAgICAgJFNRTCAuPSAiIE9SREVSIEJZIGUuc3RhcnRfdGltZSI7CiNwcmludCBTVERFUlIgIlNRTDogJFNRTFxuIjsKICAgICAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZShTUUwgPT4gJFNRTCk7CiAgICAgICAgd2hpbGUgKG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpKSB7CiAgICAgICAgICAgIGlmICghJFVzZWR7JFJvd1swXX0pIHsKICAgICAgICAgICAgICAgIG15ICVFdmVudCA9ICgKICAgICAgICAgICAgICAgICAgICBFdmVudElEID0+ICRSb3dbMF0sCiAgICAgICAgICAgICAgICAgICAgVGl0bGUgPT4gJFJvd1syXSB8fCAnLScsCiAgICAgICAgICAgICAgICAgICAgQ29udGVudCA9PiAkUm93WzNdLAogICAgICAgICAgICAgICAgICAgIFN0YXJ0VGltZSA9PiAkUm93WzRdLAogICAgICAgICAgICAgICAgICAgIEVuZFRpbWUgPT4gJFJvd1s1XSwKICAgICAgICAgICAgICAgICAgICBTdGF0ZSA9PiAkUm93WzZdLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIG15ICRTdGFydFRpbWUgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5UaW1lU3RhbXAyU3lzdGVtVGltZSgKICAgICAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJEV2ZW50e1N0YXJ0VGltZX0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgbXkgJEVuZFRpbWUgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5UaW1lU3RhbXAyU3lzdGVtVGltZSgKICAgICAgICAgICAgICAgICAgICBTdHJpbmcgPT4gJEV2ZW50e0VuZFRpbWV9LAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIG15ICRUb3RhbCA9ICRFbmRUaW1lLSRTdGFydFRpbWU7CiAgICAgICAgICAgICAgICBteSAlRXZlbnRPbGQgPSAoKTsKICAgICAgICAgICAgICAgICgkRXZlbnRPbGR7U3RhcnRTZWN9LCAkRXZlbnRPbGR7U3RhcnRNaW51dGV9LCAkRXZlbnRPbGR7U3RhcnRIb3VyfSwgJEV2ZW50T2xke1N0YXJ0RGF5fSwgJEV2ZW50T2xke1N0YXJ0TW9udGh9LCAkRXZlbnRPbGR7U3RhcnRZZWFyfSkgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lMkRhdGUoCiAgICAgICAgICAgICAgICAgICAgU3lzdGVtVGltZSA9PiAkU3RhcnRUaW1lLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICgkRXZlbnR7U3RhcnRTZWN9LCAkRXZlbnR7U3RhcnRNaW51dGV9LCAkRXZlbnR7U3RhcnRIb3VyfSwgJEV2ZW50e1N0YXJ0RGF5fSwgJEV2ZW50e1N0YXJ0TW9udGh9LCAkRXZlbnR7U3RhcnRZZWFyfSkgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lMkRhdGUoCiAgICAgICAgICAgICAgICAgICAgU3lzdGVtVGltZSA9PiAkU3RhcnRUaW1lLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICRFdmVudHtTdGFydERheX0gPSAkU0RheTsKICAgICAgICAgICAgICAgICRFdmVudHtTdGFydE1vbnRofSA9ICRTTW9udGg7CiAgICAgICAgICAgICAgICAkRXZlbnR7U3RhcnRZZWFyfSA9ICRTWWVhcjsKCiAgICAgICAgICAgICAgICBteSAkTmV3U3RhcnRUaW1lID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+VGltZVN0YW1wMlN5c3RlbVRpbWUoCiAgICAgICAgICAgICAgICAgICAgU3RyaW5nID0+ICIkRXZlbnR7U3RhcnRZZWFyfS0kRXZlbnR7U3RhcnRNb250aH0tJEV2ZW50e1N0YXJ0RGF5fSAkRXZlbnR7U3RhcnRIb3VyfTokRXZlbnR7U3RhcnRNaW51dGV9OiRFdmVudHtTdGFydFNlY30iLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIG15ICROZXdFbmRUaW1lID0gJE5ld1N0YXJ0VGltZSskVG90YWw7CiAgICAgICAgICAgICAgICAoJEV2ZW50e0VuZFNlY30sICRFdmVudHtFbmRNaW51dGV9LCAkRXZlbnR7RW5kSG91cn0sICRFdmVudHtFbmREYXl9LCAkRXZlbnR7RW5kTW9udGh9LCAkRXZlbnR7RW5kWWVhcn0pID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+U3lzdGVtVGltZTJEYXRlKAogICAgICAgICAgICAgICAgICAgIFN5c3RlbVRpbWUgPT4gJE5ld0VuZFRpbWUsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgJEV2ZW50e1N0YXJ0VGltZX0gPSAiJEV2ZW50e1N0YXJ0WWVhcn0tJEV2ZW50e1N0YXJ0TW9udGh9LSRFdmVudHtTdGFydERheX0gJEV2ZW50e1N0YXJ0SG91cn06JEV2ZW50e1N0YXJ0TWludXRlfTokRXZlbnR7U3RhcnRTZWN9IjsKICAgICAgICAgICAgICAgICRFdmVudHtFbmRUaW1lfSA9ICIkRXZlbnR7RW5kWWVhcn0tJEV2ZW50e0VuZE1vbnRofS0kRXZlbnR7RW5kRGF5fSAkRXZlbnR7RW5kSG91cn06JEV2ZW50e0VuZE1pbnV0ZX06JEV2ZW50e0VuZFNlY30iOwoKICAgICAgICAgICAgICAgIGlmICgkUm93WzFdIGVxICdZZWFybHknICYmICRFdmVudE9sZHtTdGFydE1vbnRofSA9PSAkU01vbnRoICYmICRFdmVudE9sZHtTdGFydERheX0gPT0gJFNEYXkgJiYgKCgkTmV3U3RhcnRUaW1lID49ICRTdGFydFN5c3RlbVRpbWUgJiYgJE5ld0VuZFRpbWUgPD0gJEVuZFN5c3RlbVRpbWUpIHx8ICgkTmV3U3RhcnRUaW1lID49ICRTdGFydFN5c3RlbVRpbWUgJiYgJE5ld1N0YXJ0VGltZSA8PSAkRW5kU3lzdGVtVGltZSkgfHwgKCROZXdFbmRUaW1lID49ICRTdGFydFN5c3RlbVRpbWUgJiYgJE5ld0VuZFRpbWUgPD0gJEVuZFN5c3RlbVRpbWUpIHx8ICgkTmV3U3RhcnRUaW1lIDw9ICRTdGFydFN5c3RlbVRpbWUgJiYgJE5ld0VuZFRpbWUgPj0gJEVuZFN5c3RlbVRpbWUpKSkgewojICAgICAgICAgICAgICAgICAgICAkRXZlbnR7U3RhcnRZZWFyfSsrOwojICAgICAgICAgICAgICAgICAgICBteSAkTmV3U3RhcnRUaW1lID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+VGltZVN0YW1wMlN5c3RlbVRpbWUoCiMgICAgICAgICAgICAgICAgICAgICAgICBTdHJpbmcgPT4gIiRFdmVudHtTdGFydFllYXJ9LSRFdmVudHtTdGFydE1vbnRofS0kRXZlbnR7U3RhcnREYXl9ICRFdmVudHtTdGFydEhvdXJ9OiRFdmVudHtTdGFydE1pbnV0ZX06JEV2ZW50e1N0YXJ0U2VjfSIsCiMgICAgICAgICAgICAgICAgICAgICk7CiMgICAgICAgICAgICAgICAgICAgIG15ICROZXdFbmRUaW1lID0gJE5ld1N0YXJ0VGltZSskVG90YWw7CiMgICAgICAgICAgICAgICAgICAgIGlmICgoJE5ld1N0YXJ0VGltZSA+PSAkU3RhcnRTeXN0ZW1UaW1lICYmICROZXdFbmRUaW1lIDw9ICRFbmRTeXN0ZW1UaW1lKSB8fCAoJE5ld1N0YXJ0VGltZSA+PSAkU3RhcnRTeXN0ZW1UaW1lICYmICROZXdTdGFydFRpbWUgPD0gJEVuZFN5c3RlbVRpbWUpIHx8ICgkTmV3RW5kVGltZSA+PSAkU3RhcnRTeXN0ZW1UaW1lICYmICROZXdFbmRUaW1lIDw9ICRFbmRTeXN0ZW1UaW1lKSB8fCAoJE5ld1N0YXJ0VGltZSA8PSAkU3RhcnRTeXN0ZW1UaW1lICYmICROZXdFbmRUaW1lID49ICRFbmRTeXN0ZW1UaW1lKSkgewogICAgICAgICAgICAgICAgICAgICAgIHB1c2ggKEBFdmVudElEcywgXCVFdmVudCk7CiAgICAgICAgICAgICAgICAgICAgICAgJFVzZWR7JFJvd1swXX0gPSAxOwojICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBlbHNpZiAoJFJvd1sxXSA9fiAvXldlZWtseTo6KC4rPykkLyAmJiAoKCROZXdTdGFydFRpbWUgPj0gJFN0YXJ0U3lzdGVtVGltZSAmJiAkTmV3RW5kVGltZSA8PSAkRW5kU3lzdGVtVGltZSkgfHwgKCROZXdTdGFydFRpbWUgPj0gJFN0YXJ0U3lzdGVtVGltZSAmJiAkTmV3U3RhcnRUaW1lIDw9ICRFbmRTeXN0ZW1UaW1lKSB8fCAoJE5ld0VuZFRpbWUgPj0gJFN0YXJ0U3lzdGVtVGltZSAmJiAkTmV3RW5kVGltZSA8PSAkRW5kU3lzdGVtVGltZSkgfHwgKCROZXdTdGFydFRpbWUgPD0gJFN0YXJ0U3lzdGVtVGltZSAmJiAkTmV3RW5kVGltZSA+PSAkRW5kU3lzdGVtVGltZSkpKSB7CiAgICAgICAgICAgICAgICAgICAgbXkgJENEb3cgPSAkMTsKICAgICAgICAgICAgICAgICAgICBteSAkRG93ID0gRGF5X29mX1dlZWtfQWJicmV2aWF0aW9uKERheV9vZl9XZWVrKCRTWWVhciwkU01vbnRoLCRTRGF5KSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCREb3cgZXEgJENEb3cpIHsKICAgICAgICAgICAgICAgICAgICAgICAgcHVzaCAoQEV2ZW50SURzLCBcJUV2ZW50KTsKICAgICAgICAgICAgICAgICAgICAgICAgJFVzZWR7JFJvd1swXX0gPSAxOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2lmICgkUm93WzFdID1+IC9eTW9udGhseTo6KC4rPyk6OiguKz8pJC8gJiYgKCgkTmV3U3RhcnRUaW1lID49ICRTdGFydFN5c3RlbVRpbWUgJiYgJE5ld0VuZFRpbWUgPD0gJEVuZFN5c3RlbVRpbWUpIHx8ICgkTmV3U3RhcnRUaW1lID49ICRTdGFydFN5c3RlbVRpbWUgJiYgJE5ld1N0YXJ0VGltZSA8PSAkRW5kU3lzdGVtVGltZSkgfHwgKCROZXdFbmRUaW1lID49ICRTdGFydFN5c3RlbVRpbWUgJiYgJE5ld0VuZFRpbWUgPD0gJEVuZFN5c3RlbVRpbWUpIHx8ICgkTmV3U3RhcnRUaW1lIDw9ICRTdGFydFN5c3RlbVRpbWUgJiYgJE5ld0VuZFRpbWUgPj0gJEVuZFN5c3RlbVRpbWUpKSkgewogICAgICAgICAgICAgICAgICAgIG15ICRDRG93ID0gJDE7CiAgICAgICAgICAgICAgICAgICAgbXkgJERvd0NvdW50ID0gJDI7CiAgICAgICAgICAgICAgICAgICAgbXkgJERheXMgPSBEYXlzX2luX01vbnRoKCRTWWVhciwkU01vbnRoKTsKICAgICAgICAgICAgICAgICAgICBteSAkRG93ID0gRGF5X29mX1dlZWtfQWJicmV2aWF0aW9uKERheV9vZl9XZWVrKCRTWWVhciwkU01vbnRoLCRTRGF5KSk7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRDRG93IGVxICREb3cpIHsKICAgICAgICAgICAgICAgICAgICAgICAgbXkgJENvdW50ID0gMDsKICAgICAgICAgICAgICAgICAgICAgICAgZm9yZWFjaCBteSAkRGF5ICgxLi4kU0RheSkgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgbXkgJERvdyA9IERheV9vZl9XZWVrX0FiYnJldmlhdGlvbihEYXlfb2ZfV2VlaygkU1llYXIsJFNNb250aCwkRGF5KSk7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBpZiAoJENEb3cgZXEgJERvdykgewogICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICRDb3VudCsrOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgICAgIGlmICgkQ291bnQgPT0gJERvd0NvdW50KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICBwdXNoIChARXZlbnRJRHMsIFwlRXZlbnQpOwogICAgICAgICAgICAgICAgICAgICAgICAgICAgJFVzZWR7JFJvd1swXX0gPSAxOwogICAgICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIEBFdmVudElEczsKCn0KIyBhZGQvZ2V0L3VwZGF0ZQojIHN0YXJ0L3N0b3AgdGl0bGUsIGNvbnRlbnQsIG93bmVyLCBldmVudF9zdGF0dXMgKHB1YmxpYywgcHJpdmF0ZSksIGdyb3VwCiMgcmVxdWlyZWQgYWdlbnQsb3B0aW9uYWwgYWdlbnQKCjE7Cg==
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FnZW50Q2FsZW5kYXIucG0gLSBhIGNhbGVuZGFyCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDYgT1RSUyBHbWJILCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyAkSWQ6IEFnZW50Q2FsZW5kYXIucG0sdiAxLjEyIDIwMDYvMTAvMDQgMjA6MDQ6NDggbWFydGluIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkFnZW50Q2FsZW5kYXI7Cgp1c2Ugc3RyaWN0Owp1c2UgRGF0ZTo6UGNhbGMgcXcoOmFsbCk7CnVzZSBLZXJuZWw6OlN5c3RlbTo6Q2FsZW5kYXJFdmVudDsKCgp1c2UgdmFycyBxdygkVkVSU0lPTik7CiRWRVJTSU9OID0gJyRSZXZpc2lvbjogMS4xMiAkJzsKJFZFUlNJT04gPX4gcy9eXCQuKjpcVyguKilcVy4rPyQvJDEvOwoKIyAtLQpzdWIgbmV3IHsKICAgIG15ICRUeXBlID0gc2hpZnQ7CiAgICBteSAlUGFyYW0gPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyAoJFNlbGYsICRUeXBlKTsKCiAgICBmb3JlYWNoIChrZXlzICVQYXJhbSkgewogICAgICAgICRTZWxmLT57JF99ID0gJFBhcmFteyRffTsKICAgIH0KCiAgICAjIGNoZWNrIG5lZWRlZCBPcGplY3RzCiAgICBmb3JlYWNoIChxdyhQYXJhbU9iamVjdCBEQk9iamVjdCBMYXlvdXRPYmplY3QgTG9nT2JqZWN0IENvbmZpZ09iamVjdCBUaW1lT2JqZWN0KSkgewogICAgICAgIGRpZSAiR290IG5vICRfISIgaWYgKCEkU2VsZi0+eyRffSk7CiAgICB9CiAgICAjIG5lZWRlZCBvYmplY3RzCiAgICAkU2VsZi0+e0NhbGVuZGFyT2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpDYWxlbmRhckV2ZW50LT5uZXcoJVBhcmFtKTsKICAgICMgY29uZmlnIG9wdGlvbnMKICAgICRTZWxmLT57Q0ZETn0gPSBbLTcsIC0yLCArMSwgKzM5LCArNDksICs1MCwgKzYwXTsKICAgICRTZWxmLT57Q0ZEfSA9IFsiUGFsbSBTdW5kYXkiLCAiRWFzdGVyIEZyaWRheSIsICJFYXN0ZXIgTW9uZGF5IiwgIkFzY2Vuc2lvbiBvZiBDaHJpc3QiLCAiV2hpdHN1bmRheSIsICJXaGl0bW9uZGF5IiwgIkZlYXN0IG9mIENvcnB1cyBDaHJpc3RpIl07CiAgICByZXR1cm4gJFNlbGY7Cn0KIyAtLQpzdWIgUnVuIHsKICAgIG15ICRTZWxmID0gc2hpZnQ7CiAgICBteSAlUGFyYW0gPSBAXzsKICAgIG15ICRPdXRwdXQ7CgogICAgIyBwYXJhbSBpbml0LgogICAgJFNlbGYtPntWaWV3fSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbShQYXJhbSA9PiAnVmlldycpIHx8ICRTZWxmLT57Q2FsZW5kYXJWaWV3fSB8fCAnV2VlazUnOwogICAgJFNlbGYtPntZZWFyfSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbShQYXJhbSA9PiAnWWVhcicpIHx8ICcnOwogICAgJFNlbGYtPntNb250aH0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oUGFyYW0gPT4gJ01vbnRoJykgfHwgJyc7CiAgICAkU2VsZi0+e0RheX0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oUGFyYW0gPT4gJ0RheScpIHx8ICcnOwogICAgJFNlbGYtPntCb2R5fSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbShQYXJhbSA9PiAnQm9keScpIHx8ICcnOwogICAgJFNlbGYtPntQcmludH0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oUGFyYW0gPT4gJ1ByaW50JykgfHwgJyc7CiAgICAkU2VsZi0+e01lbWJlcnN9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKFBhcmFtID0+ICdNZW1iZXJzJykgfHwgJFNlbGYtPntDYWxlbmRhclZpZXdNZW1iZXJzfSB8fCAnJzsKCiAgICAjIHN0b3JlIGxhc3Qgc2NyZWVuCiAgICAkU2VsZi0+e1Nlc3Npb25PYmplY3R9LT5VcGRhdGVTZXNzaW9uSUQoCiAgICAgICAgU2Vzc2lvbklEID0+ICRTZWxmLT57U2Vzc2lvbklEfSwKICAgICAgICBLZXkgPT4gJ0NhbGVuZGFyVmlld01lbWJlcnMnLAogICAgICAgIFZhbHVlID0+ICRTZWxmLT57TWVtYmVyc30sCiAgICApOwogICAgJFNlbGYtPntTZXNzaW9uT2JqZWN0fS0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgIFNlc3Npb25JRCA9PiAkU2VsZi0+e1Nlc3Npb25JRH0sCiAgICAgICAgS2V5ID0+ICdDYWxlbmRhclZpZXcnLAogICAgICAgIFZhbHVlID0+ICRTZWxmLT57Vmlld30sCiAgICApOwogICAgJFNlbGYtPntVc2VyT2JqZWN0fS0+U2V0UHJlZmVyZW5jZXMoCiAgICAgICAgVXNlcklEID0+ICRTZWxmLT57VXNlcklEfSwKICAgICAgICBLZXkgPT4gJ0NhbGVuZGFyVmlldycsCiAgICAgICAgVmFsdWUgPT4gJFNlbGYtPntWaWV3fSwKICAgICk7CgoKICAgICMgbXVzdCBmaWVsZHMuCiAgICAjIGdldCB0b2RheQogICAgbXkgKCRTZWMsICRNaW4sICRIb3VyLCAkVERheSwgJFRNb250aCwgJFRZZWFyKSA9ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUyRGF0ZSgKICAgICAgICBTeXN0ZW1UaW1lID0+ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUoKSwKICAgICk7CiAgICBpZiAoICEkU2VsZi0+e1llYXJ9ICkgewogICAgICAgICRTZWxmLT57WWVhcn0gPSAkVFllYXI7CiAgICB9CiAgICBpZiAoICEkU2VsZi0+e01vbnRofSApIHsKICAgICAgICAkU2VsZi0+e01vbnRofSA9ICRUTW9udGg7CiAgICB9CiAgICBpZiAoICEkU2VsZi0+e0RheX0gKSB7CiAgICAgICAgJFNlbGYtPntEYXl9ID0gJFREYXk7CiAgICB9CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGNyZWF0ZSBuZXcgZXZlbnQKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGlmICgkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0NyZWF0ZScpIHsKICAgICAgICBteSAlRnJvbnRlbmQgPSAoKTsKICAgICAgICBteSAlR2V0UGFyYW0gPSAoKTsKICAgICAgICBmb3JlYWNoIChxdyhZZWFyIE1vbnRoIERheSBIb3VyIE1pbnV0ZSkpIHsKICAgICAgICAgICAgJEdldFBhcmFteyJTdGFydCRfIn0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oUGFyYW0gPT4gIlN0YXJ0JF8iKSB8fCAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oUGFyYW0gPT4gJF8pOwogICAgICAgICAgICAkR2V0UGFyYW17IkVuZCRfIn0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oUGFyYW0gPT4gIkVuZCRfIikgfHwgJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKFBhcmFtID0+ICRfKTsKICAgICAgICB9CiAgICAgICAgaWYgKCFkZWZpbmVkKCRHZXRQYXJhbXtTdGFydEhvdXJ9KSkgewogICAgICAgICAgICAkR2V0UGFyYW17U3RhcnRIb3VyfSA9ICcwOCc7CiAgICAgICAgfQogICAgICAgIGlmICghZGVmaW5lZCgkR2V0UGFyYW17RW5kSG91cn0pKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXtFbmRIb3VyfSA9ICcwOSc7CiAgICAgICAgfQogICAgICAgICRGcm9udGVuZHsnU2VxdWVuY2VUeXBlOjpOb25lJ30gPSAnY2hlY2tlZCc7CiAgICAgICAgJEZyb250ZW5ke1N0YXJ0RGF0ZVN0cmluZ30gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkRGF0ZVNlbGVjdGlvbigKICAgICAgICAgICAgRm9ybWF0ID0+ICdEYXRlSW5wdXRGb3JtYXRMb25nJywKICAgICAgICAgICAgUHJlZml4ID0+ICdTdGFydCcsCiMgICAgICAgICAgICBEaWZmVGltZSA9PiA2MCo2MCwKICAgICAgICAgICAgJUdldFBhcmFtLAogICAgICAgICAgICBTdGFydE1pbnV0ZSA9PiAnMDAnLAogICAgICAgICk7CiAgICAgICAgJEZyb250ZW5ke0VuZERhdGVTdHJpbmd9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZERhdGVTZWxlY3Rpb24oCiAgICAgICAgICAgIEZvcm1hdCA9PiAnRGF0ZUlucHV0Rm9ybWF0TG9uZycsCiAgICAgICAgICAgIFByZWZpeCA9PiAnRW5kJywKIyAgICAgICAgICAgIERpZmZUaW1lID0+IDYwKjYwKjIsCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgRW5kTWludXRlID0+ICcwMCcsCiAgICAgICAgKTsKICAgICAgICAkRnJvbnRlbmR7U2VxdWVuY2VFbmREYXRlU3RyaW5nfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGREYXRlU2VsZWN0aW9uKAogICAgICAgICAgICBZZWFyRGlmZiA9PiA1MCwKICAgICAgICAgICAgRm9ybWF0ID0+ICdEYXRlSW5wdXRGb3JtYXRMb25nJywKICAgICAgICAgICAgUHJlZml4ID0+ICdTZXF1ZW5jZUVuZCcsCiMgICAgICAgICAgICBEaWZmVGltZSA9PiA2MCo2MCoyNCozNjUqMTAsCiAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgU2VxdWVuY2VFbmRZZWFyID0+ICcyMDMwJywKICAgICAgICAgICAgU2VxdWVuY2VFbmRIb3VyID0+ICc1OScsCiAgICAgICAgICAgIFNlcXVlbmNlRW5kTWludXRlID0+ICcwMCcsCiAgICAgICAgKTsKICAgICAgICAkRnJvbnRlbmR7U3RhdGV9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PcHRpb25TdHJnSGFzaFJlZigKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBwcml2YXRlID0+ICdwcml2YXRlJywKICAgICAgICAgICAgICAgIHB1YmxpYyA9PiAncHVibGljJywKICAgICAgICAgICAgICAgIHZhY2F0aW9uID0+ICd2YWNhdGlvbicsCiAgICAgICAgICAgICAgICBtZWV0aW5nID0+ICdtZWV0aW5nJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTmFtZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtTdGF0ZX0gfHwgJ3B1YmxpYycsCiAgICAgICAgKTsKICAgICAgICAkRnJvbnRlbmR7TW9udGhseVN0cmluZ30gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk9wdGlvblN0cmdIYXNoUmVmKAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEuIGZpcnN0JywKICAgICAgICAgICAgICAgIDIgPT4gJzIuIHNlY29uZCcsCiAgICAgICAgICAgICAgICAzID0+ICczLiB0aGlyZCcsCiAgICAgICAgICAgICAgICA0ID0+ICc0LiBmb3VydGgnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBOYW1lID0+ICdNb250aGx5VHlwZScsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgPT4gJFBhcmFte01vbnRobHlUeXBlfSB8fCAnJywKICAgICAgICApOwogICAgICAgICRGcm9udGVuZHtSZW1pbmRlcn0gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk9wdGlvblN0cmdIYXNoUmVmKAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICcnID0+ICctJywKICAgICAgICAgICAgICAgIDE1ID0+ICcxNSBNaW51dGVzJywKICAgICAgICAgICAgICAgIDMwID0+ICczMCBNaW51dGVzJywKICAgICAgICAgICAgICAgIDQ1ID0+ICc0NSBNaW51dGVzJywKICAgICAgICAgICAgICAgIDYwID0+ICcxIEhvdXInLAogICAgICAgICAgICAgICAgMTIwID0+ICcyIEhvdXJzJywKICAgICAgICAgICAgICAgIDI0MCA9PiAnNCBIb3VycycsCiAgICAgICAgICAgICAgICAzNjAwID0+ICcxIERheScsCiAgICAgICAgICAgIH0sCiAgICAgICAgICAgIE5hbWUgPT4gJ1JlbWluZGVyJywKICAgICAgICAgICAgU2VsZWN0ZWRJRCA9PiAkUGFyYW17UmVtaW5kZXJ9IHx8ICcnLAogICAgICAgICk7CiAgICAgICAgbXkgJVNob3duVXNlcnMgPSAkU2VsZi0+e1VzZXJPYmplY3R9LT5Vc2VyTGlzdCgKICAgICAgICAgICAgVHlwZSA9PiAnTG9uZycsCiAgICAgICAgICAgIFZhbGlkID0+IDEsCiAgICAgICAgKTsKICAgICAgICAkRnJvbnRlbmR7VXNlckxpc3R9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PcHRpb25TdHJnSGFzaFJlZigKICAgICAgICAgICAgRGF0YSA9PiBcJVNob3duVXNlcnMsCiAgICAgICAgICAgIE5hbWUgPT4gJ1VzZXJJRHMnLAogICAgICAgICAgICBNdWx0aXBsZSA9PiAxLAogICAgICAgICAgICBTaXplID0+IDUsCiAgICAgICAgICAgIFNlbGVjdGVkSURSZWZBcnJheSA9PiBbJFNlbGYtPntVc2VySUR9XSwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdDcmVhdGUnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFllYXIgPT4gJFNlbGYtPntZZWFyfSwKICAgICAgICAgICAgICAgIE1vbnRoID0+ICRTZWxmLT57TW9udGh9LAogICAgICAgICAgICAgICAgRGF5ID0+ICRTZWxmLT57RGF5fSwKICAgICAgICAgICAgICAgICVGcm9udGVuZCwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgICAgICMgZ2VuZXJhdGUgb3V0cHV0CiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKFRpdGxlID0+ICdOZXcnKTsKICAgICAgICAjIGJ1aWxkIE5hdmlnYXRpb25CYXIKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PdXRwdXQoCiAgICAgICAgICAgIFRlbXBsYXRlRmlsZSA9PiAnQWdlbnRDYWxlbmRhcicsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgRGF5ID0+ICRTZWxmLT57RGF5fSwKICAgICAgICAgICAgICAgIE1vbnRoID0+ICRTZWxmLT57TW9udGh9LAogICAgICAgICAgICAgICAgWWVhciA9PiAkU2VsZi0+e1llYXJ9LAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBjcmVhdGUgbmV3IGV2ZW50CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoJFNlbGYtPntTdWJhY3Rpb259IGVxICdDcmVhdGVBY3Rpb24nKSB7CiAgICAgICAgbXkgJUdldFBhcmFtID0gKCk7CiAgICAgICAgZm9yZWFjaCAocXcoWWVhciBNb250aCBEYXkgSG91ciBNaW51dGUpKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXsiU3RhcnQkXyJ9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKFBhcmFtID0+ICJTdGFydCRfIik7CiAgICAgICAgICAgICRHZXRQYXJhbXsiRW5kJF8ifSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbShQYXJhbSA9PiAiRW5kJF8iKTsKICAgICAgICAgICAgJEdldFBhcmFteyJTZXF1ZW5jZUVuZCRfIn0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oUGFyYW0gPT4gIlNlcXVlbmNlRW5kJF8iKTsKICAgICAgICB9CiAgICAgICAgZm9yZWFjaCAocXcoTW9udGggRGF5IEhvdXIgTWludXRlKSkgewogICAgICAgICAgICAkR2V0UGFyYW17IlN0YXJ0JF8ifSA9IHNwcmludGYoIiUwMmQiLCAkR2V0UGFyYW17IlN0YXJ0JF8ifSk7CiAgICAgICAgICAgICRHZXRQYXJhbXsiRW5kJF8ifSA9IHNwcmludGYoIiUwMmQiLCAkR2V0UGFyYW17IkVuZCRfIn0pOwogICAgICAgICAgICAkR2V0UGFyYW17IlNlcXVlbmNlRW5kJF8ifSA9IHNwcmludGYoIiUwMmQiLCAkR2V0UGFyYW17IlNlcXVlbmNlRW5kJF8ifSk7CiAgICAgICAgfQojICAgICAgICBmb3JlYWNoIChxdyhUaXRsZSBDb250ZW50IFN0YXRlIFNlcXVlbmNlVHlwZSBSZW1pbmRlcikpIHsKICAgICAgICBmb3JlYWNoIChxdyhUaXRsZSBDb250ZW50IFN0YXRlIFNlcXVlbmNlVHlwZSkpIHsKICAgICAgICAgICAgJEdldFBhcmFteyRffSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbShQYXJhbSA9PiAkXyk7CiAgICAgICAgfQogICAgICAgICRHZXRQYXJhbXtTdGFydFRpbWV9ID0gIiRHZXRQYXJhbXtTdGFydFllYXJ9LSRHZXRQYXJhbXtTdGFydE1vbnRofS0kR2V0UGFyYW17U3RhcnREYXl9ICRHZXRQYXJhbXtTdGFydEhvdXJ9OiRHZXRQYXJhbXtTdGFydE1pbnV0ZX06MDAiOwogICAgICAgICRHZXRQYXJhbXtFbmRUaW1lfSA9ICIkR2V0UGFyYW17RW5kWWVhcn0tJEdldFBhcmFte0VuZE1vbnRofS0kR2V0UGFyYW17RW5kRGF5fSAkR2V0UGFyYW17RW5kSG91cn06JEdldFBhcmFte0VuZE1pbnV0ZX06MDAiOwogICAgICAgICRHZXRQYXJhbXtTZXF1ZW5jZUVuZFRpbWV9ID0gIiRHZXRQYXJhbXtTZXF1ZW5jZUVuZFllYXJ9LSRHZXRQYXJhbXtTZXF1ZW5jZUVuZE1vbnRofS0kR2V0UGFyYW17U2VxdWVuY2VFbmREYXl9ICRHZXRQYXJhbXtTZXF1ZW5jZUVuZEhvdXJ9OiRHZXRQYXJhbXtTZXF1ZW5jZUVuZE1pbnV0ZX06MDAiOwogICAgICAgIG15IEBVc2VySURzID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldEFycmF5KFBhcmFtID0+ICdVc2VySURzJyk7CiAgICAgICAgJEdldFBhcmFte1VzZXJJRHN9ID0gXEBVc2VySURzOwogICAgICAgIGlmICgkU2VsZi0+e0NhbGVuZGFyT2JqZWN0fS0+RXZlbnRBZGQoJUdldFBhcmFtKSkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5SZWRpcmVjdChPUCA9PiAkU2VsZi0+e0xhc3RTY3JlZW5PdmVydmlld30pOwogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIyBlcnJvciBzY3JlZW4KICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oKTsKICAgICAgICB9CiAgICB9CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIGVkaXQgZXZlbnQKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICgkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ1VwZGF0ZScpIHsKICAgICAgICBteSAlRnJvbnRlbmQgPSAoKTsKICAgICAgICBteSAlR2V0UGFyYW0gPSAoKTsKICAgICAgICBmb3JlYWNoIChxdyhFdmVudElEKSkgewogICAgICAgICAgICAkR2V0UGFyYW17JF99ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKFBhcmFtID0+ICRfKTsKICAgICAgICB9CiAgICAgICAgIyBnZXQgZXZlbnQKICAgICAgICBteSAlRXZlbnQgPSAkU2VsZi0+e0NhbGVuZGFyT2JqZWN0fS0+RXZlbnRHZXQoJUdldFBhcmFtKTsKICAgICAgICAjIGNoZWNrIHBlcm1pc3Npb24KICAgICAgICBpZiAoJEV2ZW50e1N0YXRlfSA9fiAvcHJpdmF0ZS9pICYmICRFdmVudHtVc2VySUR9IG5lICRTZWxmLT57VXNlcklEfSkgewogICAgICAgICAgICBteSAkSGl0ID0gMDsKICAgICAgICAgICAgZm9yZWFjaCAoQHskRXZlbnR7VXNlcklEc319KSB7CiAgICAgICAgICAgICAgICBpZiAoJF8gZXEgJFNlbGYtPntVc2VySUR9KSB7CiAgICAgICAgICAgICAgICAgICAgJEhpdCA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCEkSGl0KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Ob1Blcm1pc3Npb24oV2l0aEhlYWRlciA9PiAneWVzJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgaWYgKCRFdmVudHtTZXF1ZW5jZVR5cGV9ID1+IC9eKE1vbnRobHk6Oi4uLik6OiguKz8pJC8pIHsKICAgICAgICAgICAgJEV2ZW50eydTZXF1ZW5jZVR5cGUnfSA9ICQxOwogICAgICAgICAgICAkRXZlbnR7J01vbnRobHlUeXBlJ30gPSAkMjsKICAgICAgICB9CiAgICAgICAgaWYgKCRFdmVudHtTZXF1ZW5jZVR5cGV9IGVxICdZZWFybHknKSB7CiAgICAgICAgICAgICRGcm9udGVuZHsnU2VxdWVuY2VUeXBlOjpZZWFybHknfSA9ICdjaGVja2VkJzsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCRFdmVudHtTZXF1ZW5jZVR5cGV9IGVxICdXZWVrbHk6Ok1vbicpIHsKICAgICAgICAgICAgJEZyb250ZW5keydTZXF1ZW5jZVR5cGU6OldlZWtseTo6TW9uJ30gPSAnY2hlY2tlZCc7CiAgICAgICAgfQogICAgICAgIGVsc2lmICgkRXZlbnR7U2VxdWVuY2VUeXBlfSBlcSAnV2Vla2x5OjpUdWUnKSB7CiAgICAgICAgICAgICRGcm9udGVuZHsnU2VxdWVuY2VUeXBlOjpXZWVrbHk6OlR1ZSd9ID0gJ2NoZWNrZWQnOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoJEV2ZW50e1NlcXVlbmNlVHlwZX0gZXEgJ1dlZWtseTo6V2VkJykgewogICAgICAgICAgICAkRnJvbnRlbmR7J1NlcXVlbmNlVHlwZTo6V2Vla2x5OjpXZWQnfSA9ICdjaGVja2VkJzsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCRFdmVudHtTZXF1ZW5jZVR5cGV9IGVxICdXZWVrbHk6OlRodScpIHsKICAgICAgICAgICAgJEZyb250ZW5keydTZXF1ZW5jZVR5cGU6OldlZWtseTo6VGh1J30gPSAnY2hlY2tlZCc7CiAgICAgICAgfQogICAgICAgIGVsc2lmICgkRXZlbnR7U2VxdWVuY2VUeXBlfSBlcSAnV2Vla2x5OjpGcmknKSB7CiAgICAgICAgICAgICRGcm9udGVuZHsnU2VxdWVuY2VUeXBlOjpXZWVrbHk6OkZyaSd9ID0gJ2NoZWNrZWQnOwogICAgICAgIH0KICAgICAgICBlbHNpZiAoJEV2ZW50e1NlcXVlbmNlVHlwZX0gZXEgJ1dlZWtseTo6U2F0JykgewogICAgICAgICAgICAkRnJvbnRlbmR7J1NlcXVlbmNlVHlwZTo6V2Vla2x5OjpTYXQnfSA9ICdjaGVja2VkJzsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCRFdmVudHtTZXF1ZW5jZVR5cGV9IGVxICdXZWVrbHk6OlN1bicpIHsKICAgICAgICAgICAgJEZyb250ZW5keydTZXF1ZW5jZVR5cGU6OldlZWtseTo6U3VuJ30gPSAnY2hlY2tlZCc7CiAgICAgICAgfQogICAgICAgIGVsc2lmICgkRXZlbnR7U2VxdWVuY2VUeXBlfSBlcSAnTW9udGhseTo6TW9uJykgewogICAgICAgICAgICAkRnJvbnRlbmR7J1NlcXVlbmNlVHlwZTo6TW9udGhseTo6TW9uJ30gPSAnY2hlY2tlZCc7CiAgICAgICAgfQogICAgICAgIGVsc2lmICgkRXZlbnR7U2VxdWVuY2VUeXBlfSBlcSAnTW9udGhseTo6VHVlJykgewogICAgICAgICAgICAkRnJvbnRlbmR7J1NlcXVlbmNlVHlwZTo6TW9udGhseTo6VHVlJ30gPSAnY2hlY2tlZCc7CiAgICAgICAgfQogICAgICAgIGVsc2lmICgkRXZlbnR7U2VxdWVuY2VUeXBlfSBlcSAnTW9udGhseTo6V2VkJykgewogICAgICAgICAgICAkRnJvbnRlbmR7J1NlcXVlbmNlVHlwZTo6TW9udGhseTo6V2VkJ30gPSAnY2hlY2tlZCc7CiAgICAgICAgfQogICAgICAgIGVsc2lmICgkRXZlbnR7U2VxdWVuY2VUeXBlfSBlcSAnTW9udGhseTo6VGh1JykgewogICAgICAgICAgICAkRnJvbnRlbmR7J1NlcXVlbmNlVHlwZTo6TW9udGhseTo6VGh1J30gPSAnY2hlY2tlZCc7CiAgICAgICAgfQogICAgICAgIGVsc2lmICgkRXZlbnR7U2VxdWVuY2VUeXBlfSBlcSAnTW9udGhseTo6RnJpJykgewogICAgICAgICAgICAkRnJvbnRlbmR7J1NlcXVlbmNlVHlwZTo6TW9udGhseTo6RnJpJ30gPSAnY2hlY2tlZCc7CiAgICAgICAgfQogICAgICAgIGVsc2lmICgkRXZlbnR7U2VxdWVuY2VUeXBlfSBlcSAnTW9udGhseTo6U2F0JykgewogICAgICAgICAgICAkRnJvbnRlbmR7J1NlcXVlbmNlVHlwZTo6TW9udGhseTo6U2F0J30gPSAnY2hlY2tlZCc7CiAgICAgICAgfQogICAgICAgIGVsc2lmICgkRXZlbnR7U2VxdWVuY2VUeXBlfSBlcSAnTW9udGhseTo6U3VuJykgewogICAgICAgICAgICAkRnJvbnRlbmR7J1NlcXVlbmNlVHlwZTo6TW9udGhseTo6U3VuJ30gPSAnY2hlY2tlZCc7CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICAkRnJvbnRlbmR7J1NlcXVlbmNlVHlwZTo6Tm9uZSd9ID0gJ2NoZWNrZWQnOwogICAgICAgIH0KICAgICAgICAkRnJvbnRlbmR7U3RhcnREYXRlU3RyaW5nfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGREYXRlU2VsZWN0aW9uKAogICAgICAgICAgICBGb3JtYXQgPT4gJ0RhdGVJbnB1dEZvcm1hdExvbmcnLAogICAgICAgICAgICBQcmVmaXggPT4gJ1N0YXJ0JywKICAgICAgICAgICAgJUV2ZW50LAogICAgICAgICk7CiAgICAgICAgJEZyb250ZW5ke0VuZERhdGVTdHJpbmd9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CdWlsZERhdGVTZWxlY3Rpb24oCiAgICAgICAgICAgIEZvcm1hdCA9PiAnRGF0ZUlucHV0Rm9ybWF0TG9uZycsCiAgICAgICAgICAgIFByZWZpeCA9PiAnRW5kJywKICAgICAgICAgICAgJUV2ZW50LAogICAgICAgICk7CiAgICAgICAgJEZyb250ZW5ke1NlcXVlbmNlRW5kRGF0ZVN0cmluZ30gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJ1aWxkRGF0ZVNlbGVjdGlvbigKICAgICAgICAgICAgRm9ybWF0ID0+ICdEYXRlSW5wdXRGb3JtYXRMb25nJywKICAgICAgICAgICAgUHJlZml4ID0+ICdTZXF1ZW5jZUVuZCcsCiAgICAgICAgICAgICVFdmVudCwKICAgICAgICAgICAgWWVhckRpZmYgPT4gNTAsCiAgICAgICAgKTsKICAgICAgICAkRnJvbnRlbmR7U3RhdGVTdHJpbmd9ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5PcHRpb25TdHJnSGFzaFJlZigKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICBwcml2YXRlID0+ICdwcml2YXRlJywKICAgICAgICAgICAgICAgIHB1YmxpYyA9PiAncHVibGljJywKICAgICAgICAgICAgICAgIHZhY2F0aW9uID0+ICd2YWNhdGlvbicsCiAgICAgICAgICAgICAgICBtZWV0aW5nID0+ICdtZWV0aW5nJywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTmFtZSA9PiAnU3RhdGUnLAogICAgICAgICAgICBTZWxlY3RlZElEID0+ICRFdmVudHtTdGF0ZX0gfHwgJ3B1YmxpYycsCiAgICAgICAgKTsKICAgICAgICAkRnJvbnRlbmR7TW9udGhseVN0cmluZ30gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk9wdGlvblN0cmdIYXNoUmVmKAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIDEgPT4gJzEuIGZpcnN0JywKICAgICAgICAgICAgICAgIDIgPT4gJzIuIHNlY29uZCcsCiAgICAgICAgICAgICAgICAzID0+ICczLiB0aGlyZCcsCiAgICAgICAgICAgICAgICA0ID0+ICc0LiBmb3VydGgnLAogICAgICAgICAgICB9LAogICAgICAgICAgICBOYW1lID0+ICdNb250aGx5VHlwZScsCiAgICAgICAgICAgIFNlbGVjdGVkSUQgPT4gJEV2ZW50e01vbnRobHlUeXBlfSB8fCAnJywKICAgICAgICApOwogICAgICAgICRGcm9udGVuZHtSZW1pbmRlclN0cmluZ30gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk9wdGlvblN0cmdIYXNoUmVmKAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICcnID0+ICcgIC0gJywKICAgICAgICAgICAgICAgIDE1ID0+ICcgIDE1IE1pbnV0ZXMnLAogICAgICAgICAgICAgICAgMzAgPT4gJyAgMzAgTWludXRlcycsCiAgICAgICAgICAgICAgICA0NSA9PiAnICA0NSBNaW51dGVzJywKICAgICAgICAgICAgICAgIDYwID0+ICcgMSBIb3VyJywKICAgICAgICAgICAgICAgIDEyMCA9PiAnIDIgSG91cnMnLAogICAgICAgICAgICAgICAgMjQwID0+ICcgNCBIb3VycycsCiAgICAgICAgICAgICAgICA0ODAgPT4gJyA4IEhvdXJzJywKICAgICAgICAgICAgICAgIDM2MDAgPT4gJzEgRGF5JywKICAgICAgICAgICAgfSwKICAgICAgICAgICAgTmFtZSA9PiAnUmVtaW5kZXInLAogICAgICAgICAgICBTZWxlY3RlZElEID0+ICRQYXJhbXtSZW1pbmRlcn0gfHwgJycsCiAgICAgICAgKTsKICAgICAgICBteSAlU2hvd25Vc2VycyA9ICRTZWxmLT57VXNlck9iamVjdH0tPlVzZXJMaXN0KAogICAgICAgICAgICBUeXBlID0+ICdMb25nJywKICAgICAgICAgICAgVmFsaWQgPT4gMSwKICAgICAgICApOwogICAgICAgICRGcm9udGVuZHtVc2VyTGlzdH0gPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk9wdGlvblN0cmdIYXNoUmVmKAogICAgICAgICAgICBEYXRhID0+IFwlU2hvd25Vc2VycywKICAgICAgICAgICAgTmFtZSA9PiAnVXNlcklEcycsCiAgICAgICAgICAgIE11bHRpcGxlID0+IDEsCiAgICAgICAgICAgIFNpemUgPT4gNSwKICAgICAgICAgICAgU2VsZWN0ZWRJRFJlZkFycmF5ID0+ICRFdmVudHtVc2VySURzfSwKICAgICAgICApOwoKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdVcGRhdGUnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFllYXIgPT4gJFNlbGYtPntZZWFyfSwKICAgICAgICAgICAgICAgIE1vbnRoID0+ICRTZWxmLT57TW9udGh9LAogICAgICAgICAgICAgICAgRGF5ID0+ICRTZWxmLT57RGF5fSwKICAgICAgICAgICAgICAgICVGcm9udGVuZCwKICAgICAgICAgICAgICAgICVFdmVudCwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgICAgICMgZ2VuZXJhdGUgb3V0cHV0CiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKFRpdGxlID0+ICdFZGl0Jyk7CiAgICAgICAgIyBidWlsZCBOYXZpZ2F0aW9uQmFyCiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50Q2FsZW5kYXInLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIERheSA9PiAkU2VsZi0+e0RheX0sCiAgICAgICAgICAgICAgICBNb250aCA9PiAkU2VsZi0+e01vbnRofSwKICAgICAgICAgICAgICAgIFllYXIgPT4gJFNlbGYtPntZZWFyfSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgdXBkYXRlIGV2ZW50CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoJFNlbGYtPntTdWJhY3Rpb259IGVxICdVcGRhdGVBY3Rpb24nKSB7CiAgICAgICAgbXkgJUdldFBhcmFtID0gKCk7CiAgICAgICAgZm9yZWFjaCAocXcoWWVhciBNb250aCBEYXkgSG91ciBNaW51dGUpKSB7CiAgICAgICAgICAgICRHZXRQYXJhbXsiU3RhcnQkXyJ9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKFBhcmFtID0+ICJTdGFydCRfIik7CiAgICAgICAgICAgICRHZXRQYXJhbXsiRW5kJF8ifSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbShQYXJhbSA9PiAiRW5kJF8iKTsKICAgICAgICAgICAgJEdldFBhcmFteyJTZXF1ZW5jZUVuZCRfIn0gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oUGFyYW0gPT4gIlNlcXVlbmNlRW5kJF8iKTsKICAgICAgICB9CiAgICAgICAgZm9yZWFjaCAocXcoTW9udGggRGF5IEhvdXIgTWludXRlKSkgewogICAgICAgICAgICAkR2V0UGFyYW17IlN0YXJ0JF8ifSA9IHNwcmludGYoIiUwMmQiLCAkR2V0UGFyYW17IlN0YXJ0JF8ifSk7CiAgICAgICAgICAgICRHZXRQYXJhbXsiRW5kJF8ifSA9IHNwcmludGYoIiUwMmQiLCAkR2V0UGFyYW17IkVuZCRfIn0pOwogICAgICAgICAgICAkR2V0UGFyYW17IlNlcXVlbmNlRW5kJF8ifSA9IHNwcmludGYoIiUwMmQiLCAkR2V0UGFyYW17IlNlcXVlbmNlRW5kJF8ifSk7CiAgICAgICAgfQojICAgICAgICBmb3JlYWNoIChxdyhFdmVudElEIFRpdGxlIENvbnRlbnQgU3RhdGUgU2VxdWVuY2VUeXBlIFJlbWluZGVyIERlbGV0ZSBNb250aGx5VHlwZSkpIHsKICAgICAgICBmb3JlYWNoIChxdyhFdmVudElEIFRpdGxlIENvbnRlbnQgU3RhdGUgU2VxdWVuY2VUeXBlIERlbGV0ZSBNb250aGx5VHlwZSkpIHsKICAgICAgICAgICAgJEdldFBhcmFteyRffSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbShQYXJhbSA9PiAkXyk7CiAgICAgICAgfQogICAgICAgIGlmICgkR2V0UGFyYW17U2VxdWVuY2VUeXBlfSA9fiAvXk1vbnRobHk6Oi8pIHsKICAgICAgICAgICAgJEdldFBhcmFte1NlcXVlbmNlVHlwZX0gLj0gJzo6Jy4kR2V0UGFyYW17TW9udGhseVR5cGV9OwogICAgICAgIH0KICAgICAgICAjIGNoZWNrIGRlbGV0ZQogICAgICAgIGlmICgkR2V0UGFyYW17RGVsZXRlfSkgewogICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5SZWRpcmVjdCgKICAgICAgICAgICAgICAgIE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259JlN1YmFjdGlvbj1EZWxldGUmRXZlbnRJRD0kR2V0UGFyYW17RXZlbnRJRH0iLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICBteSBAVXNlcklEcyA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRBcnJheShQYXJhbSA9PiAnVXNlcklEcycpOwogICAgICAgICRHZXRQYXJhbXtVc2VySURzfSA9IFxAVXNlcklEczsKICAgICAgICAjIGNoZWNrIHBlcm1pc3Npb24KICAgICAgICBteSAlRXZlbnQgPSAkU2VsZi0+e0NhbGVuZGFyT2JqZWN0fS0+RXZlbnRHZXQoJUdldFBhcmFtKTsKICAgICAgICBpZiAoJEV2ZW50e1N0YXRlfSA9fiAvcHJpdmF0ZS9pICYmICRFdmVudHtVc2VySUR9IG5lICRTZWxmLT57VXNlcklEfSkgewogICAgICAgICAgICBteSAkSGl0ID0gMDsKICAgICAgICAgICAgZm9yZWFjaCAoQHskRXZlbnR7VXNlcklEc319KSB7CiAgICAgICAgICAgICAgICBpZiAoJF8gZXEgJFNlbGYtPntVc2VySUR9KSB7CiAgICAgICAgICAgICAgICAgICAgJEhpdCA9IDE7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCEkSGl0KSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Ob1Blcm1pc3Npb24oV2l0aEhlYWRlciA9PiAneWVzJyk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgIyBidWlsZCBkYXRlIHN0aW5nCiAgICAgICAgJEdldFBhcmFte1N0YXJ0VGltZX0gPSAiJEdldFBhcmFte1N0YXJ0WWVhcn0tJEdldFBhcmFte1N0YXJ0TW9udGh9LSRHZXRQYXJhbXtTdGFydERheX0gJEdldFBhcmFte1N0YXJ0SG91cn06JEdldFBhcmFte1N0YXJ0TWludXRlfTowMCI7CiAgICAgICAgJEdldFBhcmFte0VuZFRpbWV9ID0gIiRHZXRQYXJhbXtFbmRZZWFyfS0kR2V0UGFyYW17RW5kTW9udGh9LSRHZXRQYXJhbXtFbmREYXl9ICRHZXRQYXJhbXtFbmRIb3VyfTokR2V0UGFyYW17RW5kTWludXRlfTowMCI7CiAgICAgICAgJEdldFBhcmFte1NlcXVlbmNlRW5kVGltZX0gPSAiJEdldFBhcmFte1NlcXVlbmNlRW5kWWVhcn0tJEdldFBhcmFte1NlcXVlbmNlRW5kTW9udGh9LSRHZXRQYXJhbXtTZXF1ZW5jZUVuZERheX0gJEdldFBhcmFte1NlcXVlbmNlRW5kSG91cn06JEdldFBhcmFte1NlcXVlbmNlRW5kTWludXRlfTowMCI7CiAgICAgICAgIyB1cGRhdGUgZXZlbnQKICAgICAgICBpZiAoJFNlbGYtPntDYWxlbmRhck9iamVjdH0tPkV2ZW50VXBkYXRlKCVHZXRQYXJhbSkpIHsKICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UmVkaXJlY3QoT1AgPT4gJFNlbGYtPntMYXN0U2NyZWVuT3ZlcnZpZXd9KTsKICAgICAgICB9CiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICMgZXJyb3Igc2NyZWVuCiAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPkVycm9yU2NyZWVuKCk7CiAgICAgICAgfQogICAgfQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBkZWxldGUgZXZlbnQKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgIGVsc2lmICgkU2VsZi0+e1N1YmFjdGlvbn0gZXEgJ0RlbGV0ZScpIHsKICAgICAgICBteSAlR2V0UGFyYW0gPSAoKTsKICAgICAgICBmb3JlYWNoIChxdyhFdmVudElEKSkgewogICAgICAgICAgICAkR2V0UGFyYW17JF99ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKFBhcmFtID0+ICRfKTsKICAgICAgICB9CiAgICAgICAgbXkgJUV2ZW50ID0gJFNlbGYtPntDYWxlbmRhck9iamVjdH0tPkV2ZW50R2V0KCVHZXRQYXJhbSk7CiAgICAgICAgIyBnZW5lcmF0ZSBvdXRwdXQKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdEZWxldGUnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICVFdmVudCwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcihUaXRsZSA9PiAnRGVsZXRlJyk7CiAgICAgICAgIyBidWlsZCBOYXZpZ2F0aW9uQmFyCiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50Q2FsZW5kYXInLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVHZXRQYXJhbSwKICAgICAgICAgICAgICAgICVFdmVudCwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgZGVsZXRlIGV2ZW50CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoJFNlbGYtPntTdWJhY3Rpb259IGVxICdEZWxldGVBY3Rpb24nKSB7CiAgICAgICAgbXkgJUdldFBhcmFtID0gKCk7CiAgICAgICAgZm9yZWFjaCAocXcoRXZlbnRJRCkpIHsKICAgICAgICAgICAgJEdldFBhcmFteyRffSA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbShQYXJhbSA9PiAkXyk7CiAgICAgICAgfQogICAgICAgICMgZGVsZXRlIGV2ZW50CiAgICAgICAgaWYgKCRHZXRQYXJhbXtFdmVudElEfSkgewogICAgICAgICAgICBpZiAoJFNlbGYtPntDYWxlbmRhck9iamVjdH0tPkV2ZW50RGVsZXRlKCVHZXRQYXJhbSkpIHsKICAgICAgICAgICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259Iik7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICAgICAjIGVycm9yIHNjcmVlbgogICAgICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgIyBlcnJvciBzY3JlZW4KICAgICAgICAgICAgcmV0dXJuICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RXJyb3JTY3JlZW4oCiAgICAgICAgICAgICAgICBNZXNzYWdlID0+ICdOZWVkIEV2ZW50SUQnLAogICAgICAgICAgICApOwogICAgICAgIH0KICAgIH0KICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgc2hvdyBvdmVydmlldwogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBzdG9yZSBsYXN0IHNjcmVlbgogICAgJFNlbGYtPntTZXNzaW9uT2JqZWN0fS0+VXBkYXRlU2Vzc2lvbklEKAogICAgICAgIFNlc3Npb25JRCA9PiAkU2VsZi0+e1Nlc3Npb25JRH0sCiAgICAgICAgS2V5ID0+ICdMYXN0U2NyZWVuT3ZlcnZpZXcnLAogICAgICAgIFZhbHVlID0+ICRTZWxmLT57UmVxdWVzdGVkVVJMfSwKICAgICk7CgogICAgaWYgKCEkU2VsZi0+e1ByaW50fSkgewogICAgICAgICMgc3RhcnQgd2l0aCBwYWdlIGhlYWRlcgogICAgICAgICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcihUaXRsZSA9PiAnT3ZlcnZpZXcnKTsKICAgICAgICAjIGJ1aWxkIE5hdmlnYXRpb25CYXIKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+UHJpbnRIZWFkZXIoKTsKICAgIH0KICAgICMgcHJpbnQgdGhlIG1haW4gdGFibGUuCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3JywKICAgICAgICBEYXRhID0+IHsgfSwKICAgICk7CiAgICBpZiAoISRTZWxmLT57UHJpbnR9KSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdNZW51JywKICAgICAgICAgICAgRGF0YSA9PiB7IH0sCiAgICAgICAgKTsKICAgIH0KICAgIG15ICRSZXF1ZXN0ZWRVUkwgPSAkU2VsZi0+e1JlcXVlc3RlZFVSTH07CiAgICAkUmVxdWVzdGVkVVJMID1+IHMvTWVtYmVycz0oTXl8QWxsKS8vZzsKICAgIGlmICgkU2VsZi0+e01lbWJlcnN9IGVxICdBbGwnKSB7CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdNZW51TXknLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFJlcXVlc3RlZFVSTCA9PiAkUmVxdWVzdGVkVVJMLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlld01lbnVBbGwnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgIFJlcXVlc3RlZFVSTCA9PiAkUmVxdWVzdGVkVVJMLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICB9CiAgICBpZiAoJFNlbGYtPntWaWV3fSBlcSAnV2VlazUnKSB7CiAgICAgICAgIyBuYXZiYXIKICAgICAgICBteSAoJE5leHRZZWFyLCROZXh0TW9udGgsJE5leHREYXkpID0gQWRkX0RlbHRhX0RheXMoJFNlbGYtPntZZWFyfSwkU2VsZi0+e01vbnRofSwkU2VsZi0+e0RheX0sIDcpOwogICAgICAgIG15ICgkTGFzdFllYXIsJExhc3RNb250aCwkTGFzdERheSkgPSBBZGRfRGVsdGFfRGF5cygkU2VsZi0+e1llYXJ9LCRTZWxmLT57TW9udGh9LCRTZWxmLT57RGF5fSwgIi03Iik7CiAgICAgICAgaWYgKCEkU2VsZi0+e1ByaW50fSkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXInLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgTGFzdFllYXIgPT4gJExhc3RZZWFyLAogICAgICAgICAgICAgICAgICAgIExhc3RNb250aCA9PiAkTGFzdE1vbnRoLAogICAgICAgICAgICAgICAgICAgIExhc3REYXkgPT4gJExhc3REYXksCiAgICAgICAgICAgICAgICAgICAgTmV4dFllYXIgPT4gJE5leHRZZWFyLAogICAgICAgICAgICAgICAgICAgIE5leHRNb250aCA9PiAkTmV4dE1vbnRoLAogICAgICAgICAgICAgICAgICAgIE5leHREYXkgPT4gJE5leHREYXksCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAjIHNob3cgZGF5cwogICAgICAgIG15ICREb3cgPSBEYXlfb2ZfV2VlaygkU2VsZi0+e1llYXJ9LCRTZWxmLT57TW9udGh9LCRTZWxmLT57RGF5fSk7CiAgICAgICAgZm9yZWFjaCAoMS4uNSkgewogICAgICAgICAgICBteSAoJFllYXIsJE1vbnRoLCREYXkpID0gQWRkX0RlbHRhX0RheXMoJFNlbGYtPntZZWFyfSwkU2VsZi0+e01vbnRofSwkU2VsZi0+e0RheX0sICgkXy0kRG93KSk7CiAgICAgICAgICAgICRTZWxmLT5DYWxlbmRhclZpZXdEYXkoJFllYXIsJE1vbnRoLCREYXkpOwogICAgICAgIH0KICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50Q2FsZW5kYXInLAogICAgICAgICAgICBEYXRhID0+IHsgfSwKICAgICAgICApOwogICAgfQogICAgZWxzaWYgKCRTZWxmLT57Vmlld30gZXEgJ1dlZWs3JykgewogICAgICAgICMgbmF2YmFyCiAgICAgICAgbXkgKCROZXh0WWVhciwkTmV4dE1vbnRoLCROZXh0RGF5KSA9IEFkZF9EZWx0YV9EYXlzKCRTZWxmLT57WWVhcn0sJFNlbGYtPntNb250aH0sJFNlbGYtPntEYXl9LCA3KTsKICAgICAgICBteSAoJExhc3RZZWFyLCRMYXN0TW9udGgsJExhc3REYXkpID0gQWRkX0RlbHRhX0RheXMoJFNlbGYtPntZZWFyfSwkU2VsZi0+e01vbnRofSwkU2VsZi0+e0RheX0sICItNyIpOwogICAgICAgIGlmICghJFNlbGYtPntQcmludH0pIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TmF2QmFyJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIExhc3RZZWFyID0+ICRMYXN0WWVhciwKICAgICAgICAgICAgICAgICAgICBMYXN0TW9udGggPT4gJExhc3RNb250aCwKICAgICAgICAgICAgICAgICAgICBMYXN0RGF5ID0+ICRMYXN0RGF5LAogICAgICAgICAgICAgICAgICAgIE5leHRZZWFyID0+ICROZXh0WWVhciwKICAgICAgICAgICAgICAgICAgICBOZXh0TW9udGggPT4gJE5leHRNb250aCwKICAgICAgICAgICAgICAgICAgICBOZXh0RGF5ID0+ICROZXh0RGF5LAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKICAgICAgICB9CiAgICAgICAgIyBzaG93IGRheXMKICAgICAgICBteSAkRG93ID0gRGF5X29mX1dlZWsoJFNlbGYtPntZZWFyfSwkU2VsZi0+e01vbnRofSwkU2VsZi0+e0RheX0pOwogICAgICAgIGZvcmVhY2ggKDEuLjcpIHsKICAgICAgICAgICAgbXkgKCRZZWFyLCRNb250aCwkRGF5KSA9IEFkZF9EZWx0YV9EYXlzKCRTZWxmLT57WWVhcn0sJFNlbGYtPntNb250aH0sJFNlbGYtPntEYXl9LCAoJF8tJERvdykpOwogICAgICAgICAgICAkU2VsZi0+Q2FsZW5kYXJWaWV3RGF5KCRZZWFyLCRNb250aCwkRGF5KTsKICAgICAgICB9CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZ2VudENhbGVuZGFyJywKICAgICAgICAgICAgRGF0YSA9PiB7IH0sCiAgICAgICAgKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICMgaGFuZGxlIHRoZSBvbmUgbW9udGggYmFjayBjYWxlbmRhciBkYXRhLgogICAgICAgIG15ICRNb250aExhc3QgPSAkU2VsZi0+e01vbnRofSAtMTsKICAgICAgICBteSAkWWVhckxhc3QgPSAkU2VsZi0+e1llYXJ9OwogICAgICAgIGlmICgkTW9udGhMYXN0IGVxIDApIHsKICAgICAgICAgICAgJE1vbnRoTGFzdCA9IDEyOwogICAgICAgICAgICAkWWVhckxhc3QgPSAkU2VsZi0+e1llYXJ9LTE7CiAgICAgICAgfQogICAgICAgICMgaGFuZGxlIHRoZSBtaWRkbGUgY2FsZW5kYXIgZGF0YS4KICAgICAgICBteSAkTW9udGhOZXh0ID0gJFNlbGYtPntNb250aH0gKzE7CiAgICAgICAgbXkgJFllYXJOZXh0ID0gJFNlbGYtPntZZWFyfTsKICAgICAgICBpZiAoJE1vbnRoTmV4dCBlcSAxMykgewogICAgICAgICAgICAkTW9udGhOZXh0ID0gMTsKICAgICAgICAgICAgJFllYXJOZXh0ID0gJFNlbGYtPntZZWFyfSsxOwogICAgICAgIH0KICAgICAgICAjIGhhbmRlbCB0aGUgcmlndGggY2FsZW5kYXIgZGF0YS4KICAgICAgICBteSAkTW9udGhOZXh0TmV4dCA9ICRTZWxmLT57TW9udGh9ICsyOwogICAgICAgIG15ICRZZWFyTmV4dE5leHQgPSAkU2VsZi0+e1llYXJ9OwogICAgICAgIGlmICgkTW9udGhOZXh0TmV4dCBlcSAxMykgewogICAgICAgICAgICAkTW9udGhOZXh0TmV4dCA9IDE7CiAgICAgICAgICAgICRZZWFyTmV4dE5leHQgPSAkU2VsZi0+e1llYXJ9KzE7CiAgICAgICAgfQogICAgICAgIGlmICgkTW9udGhOZXh0TmV4dCBlcSAxNCkgewogICAgICAgICAgICAkTW9udGhOZXh0TmV4dCA9IDI7CiAgICAgICAgICAgICRZZWFyTmV4dE5leHQgPSAkU2VsZi0+e1llYXJ9KzE7CiAgICAgICAgfQogICAgICAgICMgbmF2YmFyCiAgICAgICAgaWYgKCEkU2VsZi0+e1ByaW50fSkgewogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdOYXZCYXInLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgTGFzdFllYXIgPT4gJFllYXJMYXN0LAogICAgICAgICAgICAgICAgICAgIExhc3RNb250aCA9PiAkTW9udGhMYXN0LAogICAgICAgICAgICAgICAgICAgIE5leHRZZWFyID0+ICRZZWFyTmV4dCwKICAgICAgICAgICAgICAgICAgICBOZXh0TW9udGggPT4gJE1vbnRoTmV4dCwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICRTZWxmLT5DYWxlbmRhclZpZXdNb250aCgkU2VsZi0+e1llYXJ9LCAkU2VsZi0+e01vbnRofSk7CiAgICAgICAgJFNlbGYtPkNhbGVuZGFyVmlld01vbnRoKCRZZWFyTmV4dCwgJE1vbnRoTmV4dCk7CiAgICAgICAgJFNlbGYtPkNhbGVuZGFyVmlld01vbnRoKCRZZWFyTmV4dE5leHQsICRNb250aE5leHROZXh0KTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FnZW50Q2FsZW5kYXInLAogICAgICAgICAgICBEYXRhID0+IHsgfSwKICAgICAgICApOwogICAgfQogICAgaWYgKCEkU2VsZi0+e1ByaW50fSkgewogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKICAgIH0KICAgIGVsc2UgewogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5QcmludEZvb3RlcigpOwogICAgfQogICAgcmV0dXJuICRPdXRwdXQ7Cn0KIyAtLQpzdWIgQ2FsZW5kYXJWaWV3TW9udGggewogICAgbXkgJFNlbGYgPSBzaGlmdDsKICAgIG15ICRZZWFyID0gc2hpZnQ7CiAgICBteSAkTW9udGggPSBzaGlmdDsKICAgIG15ICRNb250aFN0cmluZyA9IE1vbnRoX3RvX1RleHQoJE1vbnRoKTsKICAgICMgc3RhcnQgb2YgdGFibGUuCiAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgIE5hbWUgPT4gJ01vbnRoJywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgTW9udGhTdHJpbmcgPT4gJE1vbnRoU3RyaW5nLAogICAgICAgICAgICBZZWFyID0+ICRZZWFyLAogICAgICAgIH0sCiAgICApOwogICAgbXkgJE91dHB1dCA9ICcnOwogICAgIyBkYXlzIHBlciBtb250aC4KICAgIG15ICREYXlzID0gRGF5c19pbl9Nb250aCgkWWVhciwkTW9udGgpOwogICAgZm9yZWFjaCBteSAkRGF5ICgxLi4kRGF5cykgewogICAgICAgIG15ICVEYXRhID0gJFNlbGYtPl9FdmVudFByZWZlcmVuY2VzKCRZZWFyLCRNb250aCwkRGF5LDAsMCwkWWVhciwkTW9udGgsJERheSwyMyw1OSk7CiAgICAgICAgbXkgJERvdyA9IERheV9vZl9XZWVrKCRZZWFyLCRNb250aCwkRGF5KTsKICAgICAgICBteSAkRGF5U3RyaW5nID0gRGF5X29mX1dlZWtfQWJicmV2aWF0aW9uKCREb3cpOwogICAgICAgICMgJE91dHB1dCAuPSB0aGUgcmVzdWx0IG9mIHggZGF5LgogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ01vbnRoRGF5JywKICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAlRGF0YSwKICAgICAgICAgICAgICAgIFllYXIgPT4gJFllYXIsCiAgICAgICAgICAgICAgICBNb250aCA9PiAkTW9udGgsCiAgICAgICAgICAgICAgICBEYXkgPT4gJERheSwKICAgICAgICAgICAgICAgIERheVN0cmluZyA9PiAkRGF5U3RyaW5nLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICAgICAgbXkgJE5vdGluZyA9IDE7CiAgICAgICAgIyBjcmVhdGUgY2xhbmRhciB3ZWVrIG9mIHllYXIuCiAgICAgICAgaWYgKCREb3cgZXEgMSkgewogICAgICAgICAgICAkTm90aW5nID0gMDsKICAgICAgICAgICAgbXkgKCRDYWxlbmRhcldlZWssICRDYWxlbmRhclllYXIpID0gV2Vla19vZl9ZZWFyKCRZZWFyLCRNb250aCwkRGF5KTsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ01vbnRoV2VlaycsCiAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAlRGF0YSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICMgc2hvdyBkYXkgaW5mbwogICAgICAgIGlmICgkRGF0YXtDRkRFfSkgewogICAgICAgICAgICAkTm90aW5nID0gMDsKICAgICAgICAgICAgZm9yZWFjaCAoQHskRGF0YXtDRkRFfX0pIHsKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnTW9udGhOb3RpY2UnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICBJbmZvID0+ICRfLAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGZvcmVhY2ggKEB7JERhdGF7RXZlbnRJRHN9fSkgewogICAgICAgICAgICAkTm90aW5nID0gMDsKIyAgICAgICAgICAgIG15ICVFdmVudCA9ICRTZWxmLT57Q2FsZW5kYXJPYmplY3R9LT5FdmVudEdldChFdmVudElEID0+ICRfKTsKICAgICAgICAgICAgbXkgJUV2ZW50ID0gJXskX307CiAgICAgICAgICAgIG15ICVFdmVudE9yaWcgPSAkU2VsZi0+e0NhbGVuZGFyT2JqZWN0fS0+RXZlbnRHZXQoRXZlbnRJRCA9PiAkRXZlbnR7RXZlbnRJRH0pOwogICAgICAgICAgICBteSAkUHJlZmZpeCA9ICcnOwogICAgICAgICAgICBmb3JlYWNoIG15ICRVc2VyIChAeyRFdmVudE9yaWd7VXNlcklEc319KSB7CiAgICAgICAgICAgICAgICBteSAlVXNlciA9ICRTZWxmLT57VXNlck9iamVjdH0tPkdldFVzZXJEYXRhKAogICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkVXNlciwKICAgICAgICAgICAgICAgICAgICBDYWNoZSA9PiAxLAogICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIGlmICgkUHJlZmZpeCkgewogICAgICAgICAgICAgICAgICAgICRQcmVmZml4IC49ICcsJzsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgICRQcmVmZml4IC49ICRVc2Vye1VzZXJMb2dpbn07CiAgICAgICAgICAgIH0KICAgICAgICAgICAgaWYgKCRQcmVmZml4KSB7CiAgICAgICAgICAgICAgICAkRXZlbnR7VGl0bGV9ID0gJygnLiRQcmVmZml4LicpICcuJEV2ZW50e1RpdGxlfTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJEV2ZW50e1N0YXRlfSA9fiAvcHJpdmF0ZS9pICYmICRFdmVudHtVc2VySUR9IG5lICRTZWxmLT57VXNlcklEfSkgewogICAgICAgICAgICAgICAgbXkgJEhpdCA9IDA7CiAgICAgICAgICAgICAgICBmb3JlYWNoIChAeyRFdmVudE9yaWd7VXNlcklEc319KSB7CiAgICAgICAgICAgICAgICAgICAgaWYgKCRfIGVxICRTZWxmLT57VXNlcklEfSkgewogICAgICAgICAgICAgICAgICAgICAgICAkSGl0ID0gMTsKICAgICAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgICAgICBpZiAoISRIaXQpIHsKICAgICAgICAgICAgICAgICAgICBteSAlVXNlciA9ICRTZWxmLT57VXNlck9iamVjdH0tPkdldFVzZXJEYXRhKAogICAgICAgICAgICAgICAgICAgICAgICBVc2VySUQgPT4gJEV2ZW50e1VzZXJJRH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdNb250aEV2ZW50UHJpdmF0ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJVVzZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAlRXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ01vbnRoRXZlbnRQdWJsaWMnLAogICAgICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgICAgICVFdmVudCwKICAgICAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdNb250aEV2ZW50UHVibGljJywKICAgICAgICAgICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICAgICAgICAgJUV2ZW50LAogICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICMjIGhhbmRsZSBhIGVtdHkgY2VsbCAobm8gZXZlbnQpLgogICAgICAgIGlmICgkTm90aW5nKSB7CiAgICAgICAgICAgICROb3RpbmcgPSAwOwogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnTW9udGhJbmZvJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIEluZm8gPT4gJy0nLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgfQogICAgfQogICAgcmV0dXJuOwp9CiMgLS0Kc3ViIENhbGVuZGFyVmlld0RheSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwogICAgbXkgJFllYXIgPSBzaGlmdDsKICAgIG15ICRNb250aCA9IHNoaWZ0OwogICAgbXkgJERheSA9IHNoaWZ0OwogICAgbXkgJE1vbnRoU3RyaW5nID0gTW9udGhfdG9fVGV4dCgkTW9udGgpOwogICAgbXkgJERvdyA9IERheV9vZl9XZWVrKCRZZWFyLCRNb250aCwkRGF5KTsKICAgIG15ICREYXlTdHJpbmcgPSBEYXlfb2ZfV2Vla19BYmJyZXZpYXRpb24oJERvdyk7CiAgICBteSAkV2lkdGggPSAwOwogICAgaWYgKCRTZWxmLT57Vmlld30gZXEgJ1dlZWs3JykgewogICAgICAgICRXaWR0aCA9IGludCgxMDAvNyk7CiAgICB9CiAgICBlbHNlIHsKICAgICAgICAkV2lkdGggPSBpbnQoMTAwLzUpOwogICAgfQogICAgIyBzdGFydCBvZiB0YWJsZS4KICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgTmFtZSA9PiAnRGF5JywKICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgTW9udGhTdHJpbmcgPT4gJE1vbnRoU3RyaW5nLAogICAgICAgICAgICBEYXlTdHJpbmcgPT4gJERheVN0cmluZywKICAgICAgICAgICAgRGF5ID0+ICREYXksCiAgICAgICAgICAgIE1vbnRoID0+ICRNb250aCwKICAgICAgICAgICAgWWVhciA9PiAkWWVhciwKICAgICAgICAgICAgV2lkdGggPT4gJFdpZHRoLAogICAgICAgIH0sCiAgICApOwogICAgbXkgKCRTdGFydFllYXIsJFN0YXJ0TW9udGgsJFN0YXJ0RGF5KSA9IEFkZF9EZWx0YV9EYXlzKCRZZWFyLCRNb250aCwkRGF5LCAiLSREb3ciKTsKICAgIG15ICRPdXRwdXQgPSAnJzsKICAgICMgc2hvdyBlYWNoIHdlZWsgZGF5CiAgICBmb3JlYWNoIG15ICRIb3VyICgwLi4yMykgewogICAgICAgIG15ICVEYXRhID0gJFNlbGYtPl9FdmVudFByZWZlcmVuY2VzKCRZZWFyLCRNb250aCwkRGF5LCRIb3VyLDAsJFllYXIsJE1vbnRoLCREYXksJEhvdXIsNTkpOwogICAgICAgICMgJE91dHB1dCAuPSB0aGUgcmVzdWx0IG9mIHggZGF5LgogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ0RheUhvdXInLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVEYXRhLAogICAgICAgICAgICAgICAgWWVhciA9PiAkWWVhciwKICAgICAgICAgICAgICAgIE1vbnRoID0+ICRNb250aCwKICAgICAgICAgICAgICAgIERheSA9PiAkRGF5LAogICAgICAgICAgICAgICAgSG91ciA9PiAkSG91ciwKICAgICAgICAgICAgICAgIE1pbnV0ZSA9PiAnMCcsCiAgICAgICAgICAgICAgICBEYXlTdHJpbmcgPT4gJERheVN0cmluZywKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgICAgIG15ICROb3RpbmcgPSAxOwogICAgICAgICMgY3JlYXRlIGNsYW5kYXIgd2VlayBvZiB5ZWFyLgogICAgICAgIGlmICgkRG93IGVxIDEgJiYgJEhvdXIgPT0gMCkgewogICAgICAgICAgICAkTm90aW5nID0gMDsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0RheVdlZWsnLAogICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgJURhdGEsCiAgICAgICAgICAgICAgICB9LAogICAgICAgICAgICApOwogICAgICAgIH0KICAgICAgICAjIHNob3cgZGF5IGluZm8KICAgICAgICBpZiAoJERhdGF7Q0ZERX0pIHsKICAgICAgICAgICAgJE5vdGluZyA9IDA7CiAgICAgICAgICAgIGZvcmVhY2ggKEB7JERhdGF7Q0ZERX19KSB7CiAgICAgICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0RheU5vdGljZScsCiAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgIEluZm8gPT4gJF8sCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgZm9yZWFjaCAoQHskRGF0YXtFdmVudElEc319KSB7CiAgICAgICAgICAgICROb3RpbmcgPSAwOwojICAgICAgICAgICAgbXkgJUV2ZW50ID0gJFNlbGYtPntDYWxlbmRhck9iamVjdH0tPkV2ZW50R2V0KEV2ZW50SUQgPT4gJF8pOwogICAgICAgICAgICBteSAlRXZlbnQgPSAleyRffTsKICAgICAgICAgICAgbXkgJUV2ZW50T3JpZyA9ICRTZWxmLT57Q2FsZW5kYXJPYmplY3R9LT5FdmVudEdldChFdmVudElEID0+ICRFdmVudHtFdmVudElEfSk7CiAgICAgICAgICAgIG15ICRQcmVmZml4ID0gJyc7CiAgICAgICAgICAgIGZvcmVhY2ggbXkgJFVzZXIgKEB7JEV2ZW50T3JpZ3tVc2VySURzfX0pIHsKICAgICAgICAgICAgICAgIG15ICVVc2VyID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+R2V0VXNlckRhdGEoCiAgICAgICAgICAgICAgICAgICAgVXNlcklEID0+ICRVc2VyLAogICAgICAgICAgICAgICAgICAgIENhY2hlID0+IDEsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgaWYgKCRQcmVmZml4KSB7CiAgICAgICAgICAgICAgICAgICAgJFByZWZmaXggLj0gJywnOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICAgICAgJFByZWZmaXggLj0gJFVzZXJ7VXNlckxvZ2lufTsKICAgICAgICAgICAgfQogICAgICAgICAgICBpZiAoJFByZWZmaXgpIHsKICAgICAgICAgICAgICAgICRFdmVudHtUaXRsZX0gPSAnKCcuJFByZWZmaXguJykgJy4kRXZlbnR7VGl0bGV9OwogICAgICAgICAgICB9CiAgICAgICAgICAgIGlmICgkRXZlbnR7U3RhdGV9ID1+IC9wcml2YXRlL2kgJiYgJEV2ZW50e1VzZXJJRH0gbmUgJFNlbGYtPntVc2VySUR9KSB7CiAgICAgICAgICAgICAgICBteSAkSGl0ID0gMDsKICAgICAgICAgICAgICAgIGZvcmVhY2ggKEB7JEV2ZW50T3JpZ3tVc2VySURzfX0pIHsKICAgICAgICAgICAgICAgICAgICBpZiAoJF8gZXEgJFNlbGYtPntVc2VySUR9KSB7CiAgICAgICAgICAgICAgICAgICAgICAgICRIaXQgPSAxOwogICAgICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGlmICghJEhpdCkgewogICAgICAgICAgICAgICAgICAgIG15ICVVc2VyID0gJFNlbGYtPntVc2VyT2JqZWN0fS0+R2V0VXNlckRhdGEoCiAgICAgICAgICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkRXZlbnR7VXNlcklEfSwKICAgICAgICAgICAgICAgICAgICAgICAgQ2FjaGUgPT4gMSwKICAgICAgICAgICAgICAgICAgICApOwogICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0RheUV2ZW50UHJpdmF0ZScsCiAgICAgICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAgICAgJVVzZXIsCiAgICAgICAgICAgICAgICAgICAgICAgICAgICAlRXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgewogICAgICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0RheUV2ZW50UHVibGljJywKICAgICAgICAgICAgICAgICAgICAgICAgRGF0YSA9PiB7CiAgICAgICAgICAgICAgICAgICAgICAgICAgICAlRXZlbnQsCiAgICAgICAgICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICAgICAgICAgKTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnRGF5RXZlbnRQdWJsaWMnLAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICAgICAlRXZlbnQsCiAgICAgICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgICAgICk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgIyMgaGFuZGxlIGEgZW10eSBjZWxsIChubyBldmVudCkuCiAgICAgICAgaWYgKCROb3RpbmcpIHsKICAgICAgICAgICAgJE5vdGluZyA9IDA7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgICAgICBOYW1lID0+ICdEYXlJbmZvJywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgIEluZm8gPT4gJy0nLAogICAgICAgICAgICAgICAgfSwKICAgICAgICAgICAgKTsKCiAgICAgICAgfQogICAgfQogICAgcmV0dXJuOwp9CgpzdWIgX0V2ZW50UHJlZmVyZW5jZXMgewogICAgbXkgJFNlbGYgPSBzaGlmdDsKICAgIG15ICRTdGFydFllYXIgPSBzaGlmdDsKICAgIG15ICRTdGFydE1vbnRoID0gc3ByaW50ZigiJTAyZCIsc2hpZnQpOwogICAgbXkgJFN0YXJ0RGF5ID0gc3ByaW50ZigiJTAyZCIsc2hpZnQpOwogICAgbXkgJFN0YXJ0SG91ciA9IHNoaWZ0OwogICAgbXkgJFN0YXJ0TWludXRlID0gc2hpZnQ7CiAgICBteSAkRW5kWWVhciA9IHNoaWZ0OwogICAgbXkgJEVuZE1vbnRoID0gc3ByaW50ZigiJTAyZCIsc2hpZnQpOwogICAgbXkgJEVuZERheSA9IHNwcmludGYoIiUwMmQiLHNoaWZ0KTsKICAgIG15ICRFbmRIb3VyID0gc2hpZnQ7CiAgICBteSAkRW5kTWludXRlID0gc2hpZnQ7CgogICAgbXkgKCRTZWMsICRNaW4sICRIb3VyLCAkVERheSwgJFRNb250aCwgJFRZZWFyKSA9ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUyRGF0ZSgKICAgICAgICBTeXN0ZW1UaW1lID0+ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUoKSwKICAgICk7CiAgICBteSAoJENhbGVuZGFyV2VlaywgJENhbGVuZGFyWWVhcikgPSBXZWVrX29mX1llYXIoJFN0YXJ0WWVhciwkU3RhcnRNb250aCwkU3RhcnREYXkpOwogICAgbXkgQENGRE4gPSBAeyRTZWxmLT57Q0ZETn19OwogICAgbXkgQENGRCA9IEB7JFNlbGYtPntDRkR9fTsKICAgIG15ICRNb250aFN0cmluZyA9IE1vbnRoX3RvX1RleHQoJFN0YXJ0TW9udGgpOwogICAgbXkgJERvdyA9IERheV9vZl9XZWVrKCRTdGFydFllYXIsJFN0YXJ0TW9udGgsJFN0YXJ0RGF5KTsKICAgIG15ICREYXlTdHJpbmcgPSBEYXlfb2ZfV2Vla19BYmJyZXZpYXRpb24oJERvdyk7CiAgICBteSBAVXNlcklEcyA9ICgpOwogICAgaWYgKCRTZWxmLT57TWVtYmVyc30gZXEgJ0FsbCcpIHsKICAgICAgICBAVXNlcklEcyA9ICgpOwogICAgfQogICAgZWxzZSB7CiAgICAgICAgQFVzZXJJRHMgPSAoJFNlbGYtPntVc2VySUR9KTsKICAgIH0KICAgIG15IEBFdmVudElEcyA9ICRTZWxmLT57Q2FsZW5kYXJPYmplY3R9LT5FdmVudHMoCiAgICAgICAgU3RhcnRUaW1lID0+ICIkU3RhcnRZZWFyLSRTdGFydE1vbnRoLSRTdGFydERheSAkU3RhcnRIb3VyOiRTdGFydE1pbnV0ZTowMCIsCiAgICAgICAgRW5kVGltZSA9PiAiJEVuZFllYXItJEVuZE1vbnRoLSRFbmREYXkgJEVuZEhvdXI6JEVuZE1pbnV0ZTo1OSIsCiAgICAgICAgVXNlcklEcyA9PiBcQFVzZXJJRHMsCiAgICApOwogICAgIyBoYW5kbGUgdGhlIGNmZGBzCiAgICBteSBAQ0ZERTsKICAgIG15ICRUbXBWYXIgPSAwOwogICAgZm9yZWFjaCAoQENGRE4pIHsKICAgICAgICBteSAoJENZZWFyLCRDTW9udGgsJENEYXkpID0gQWRkX0RlbHRhX0RheXMoRWFzdGVyX1N1bmRheSgkU3RhcnRZZWFyKSwgJFN0YXJ0RGF5KTsKICAgICAgICBpZiAoIiRDWWVhciwkQ01vbnRoLCRDRGF5IiBlcSAiJFN0YXJ0WWVhciwkU3RhcnRNb250aCwkU3RhcnREYXkiKSB7CiAgICAgICAgICAgIHB1c2ggKEBDRkRFLCAkQ0ZEWyRUbXBWYXJdKTsKICAgICAgICB9CiAgICAgICAgJFRtcFZhcisrOwogICAgfQogICAgIyBoYW5kZWwgdGhlIDFzdCBtYXkhISEKICAgIG15ICRUaW1lVmFjYXRpb25EYXlzID0gJFNlbGYtPntDb25maWdPYmplY3R9LT5HZXQoJ1RpbWVWYWNhdGlvbkRheXMnKTsKICAgIG15ICRUaW1lVmFjYXRpb25EYXlzT25lVGltZSA9ICRTZWxmLT57Q29uZmlnT2JqZWN0fS0+R2V0KCdUaW1lVmFjYXRpb25EYXlzT25lVGltZScpOwogICAgaWYgKCRUaW1lVmFjYXRpb25EYXlzLT57JFN0YXJ0TW9udGh9LT57JFN0YXJ0RGF5fSkgewogICAgICAgIHB1c2ggKEBDRkRFLCAkVGltZVZhY2F0aW9uRGF5cy0+eyRTdGFydE1vbnRofS0+eyRTdGFydERheX0pOwogICAgfQogICAgaWYgKCRUaW1lVmFjYXRpb25EYXlzT25lVGltZS0+eyRTdGFydFllYXJ9LT57JFN0YXJ0TW9udGh9LT57JFN0YXJ0RGF5fSkgewogICAgICAgIHB1c2ggKEBDRkRFLCAkVGltZVZhY2F0aW9uRGF5c09uZVRpbWUtPnskU3RhcnRZZWFyfS0+eyRTdGFydE1vbnRofS0+eyRTdGFydERheX0pOwogICAgfQogICAgIyBoYW5kbGUgdGhlIHNhdCwgc3VuLCBjZmQgYW5kIHRvZGF5LgogICAgbXkgJENvdW50ZWRUaW1lID0gJFNlbGYtPntUaW1lT2JqZWN0fS0+V29ya2luZ1RpbWUoCiAgICAgICAgU3RhcnRUaW1lID0+ICRTZWxmLT57VGltZU9iamVjdH0tPkRhdGUyU3lzdGVtVGltZSgKICAgICAgICAgICAgWWVhciA9PiAkU3RhcnRZZWFyLAogICAgICAgICAgICBNb250aCA9PiAkU3RhcnRNb250aCwKICAgICAgICAgICAgRGF5ID0+ICRTdGFydERheSwKICAgICAgICAgICAgSG91ciA9PiAkU3RhcnRIb3VyLAogICAgICAgICAgICBNaW51dGUgPT4gJFN0YXJ0TWludXRlLAogICAgICAgICAgICBTZWNvbmQgPT4gMCwKICAgICAgICApLAogICAgICAgIFN0b3BUaW1lID0+ICRTZWxmLT57VGltZU9iamVjdH0tPkRhdGUyU3lzdGVtVGltZSgKICAgICAgICAgICAgWWVhciA9PiAkRW5kWWVhciwKICAgICAgICAgICAgTW9udGggPT4gJEVuZE1vbnRoLAogICAgICAgICAgICBEYXkgPT4gJEVuZERheSwKICAgICAgICAgICAgSG91ciA9PiAkRW5kSG91ciwKICAgICAgICAgICAgTWludXRlID0+ICRFbmRNaW51dGUsCiAgICAgICAgICAgIFNlY29uZCA9PiAwLAogICAgICAgICksCiAgICApOwoKICAgIG15ICRDbGFzczsKICAgIGlmICgkQ291bnRlZFRpbWUpIHsKICAgICAgICBpZiAoJFREYXkgPT0gJFN0YXJ0RGF5ICYmICRUTW9udGggPT0gJFN0YXJ0TW9udGggJiYgJFRZZWFyID09ICRTdGFydFllYXIpIHsKICAgICAgICAgICAgJENsYXNzID0idG9kYXkiOwogICAgICAgIH0KICAgICAgICAjIyBoaXQgc2F0IG9yIHN1bi4KICAgICAgICBlbHNpZiAoJERvdyBlcSA2KSB7CiAgICAgICAgICAgICRDbGFzcyA9InNhdHVyZGF5IjsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCREb3cgZXEgNykgewogICAgICAgICAgICAkQ2xhc3MgPSJzdW5kYXkiOwogICAgICAgIH0KICAgICAgICAjIyBoaXQgQ0ZELgogICAgICAgIGVsc2lmIChAQ0ZERSkgewogICAgICAgICAgICAkQ2xhc3MgPSJob2xpZGF5IjsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKEBFdmVudElEcykgewojICAgICAgICAgICAgJENsYXNzID0iZXZlbnQiOwogICAgICAgICAgICAkQ2xhc3MgPSJ3ZWVrZGF5IjsKICAgICAgICB9CiAgICAgICAgIyMgZWxzZSBzdGQgY29sb3IuCiAgICAgICAgZWxzZSB7CiAgICAgICAgICAgICRDbGFzcyA9IndlZWtkYXkiOwogICAgICAgIH0KICAgIH0KICAgIGVsc2UgewogICAgICAgIGlmICgkVERheSA9PSAkU3RhcnREYXkgJiYgJFRNb250aCA9PSAkU3RhcnRNb250aCAmJiAkVFllYXIgPT0gJFN0YXJ0WWVhcikgewogICAgICAgICAgICAkQ2xhc3MgPSJ0b2RheW5vdGNvdW50ZWQiOwogICAgICAgIH0KICAgICAgICAjIyBoaXQgc2F0IG9yIHN1bi4KICAgICAgICBlbHNpZiAoJERvdyBlcSA2KSB7CiAgICAgICAgICAgICRDbGFzcyA9InNhdHVyZGF5IjsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKCREb3cgZXEgNykgewogICAgICAgICAgICAkQ2xhc3MgPSJzdW5kYXkiOwogICAgICAgIH0KICAgICAgICAjIyBoaXQgQ0ZELgogICAgICAgIGVsc2lmIChAQ0ZERSkgewogICAgICAgICAgICAkQ2xhc3MgPSJob2xpZGF5IjsKICAgICAgICB9CiAgICAgICAgZWxzaWYgKEBFdmVudElEcykgewojICAgICAgICAgICAgJENsYXNzID0iZXZlbnRub3Rjb3VudGVkIjsKICAgICAgICAgICAgJENsYXNzID0id2Vla2RheW5vdGNvdW50ZWQiOwogICAgICAgIH0KICAgICAgICAjIyBlbHNlIHN0ZCBjb2xvci4KICAgICAgICBlbHNlIHsKICAgICAgICAgICAgJENsYXNzID0id2Vla2RheW5vdGNvdW50ZWQiOwogICAgICAgIH0KICAgIH0KICAgIHJldHVybiAoCiAgICAgICAgQ2xhc3MgPT4gJENsYXNzLAogICAgICAgIENhbGVuZGFyV2VlayA9PiAkQ2FsZW5kYXJXZWVrLAogICAgICAgIENGREUgPT4gXEBDRkRFLAogICAgICAgIEV2ZW50SURzID0+IFxARXZlbnRJRHMsCiAgICApOwp9CgoxOwo=
CnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZGVfQWdlbnRDYWxlbmRhcjsKCnVzZSBzdHJpY3Q7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NXJ30gPSAnS1cnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnVG9kYXknfSA9ICdIZXV0ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUb21vcnJvdyd9ID0gJ01vcmdlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdW5uaW5nJ30gPSAnTGF1ZmVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0ZlYXN0IG9mIENvcnB1cyBDaHJpc3RpJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1doaXRzdW5kYXknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2hpdG1vbmRheSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBc2NlbnNpb24gb2YgQ2hyaXN0J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57JzEgU3QuIE1heSd9ID0gJ0Vyc3RlciBNYWknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ2hyaXN0bWFzJ30gPSAnV2VpaG5hY2h0ZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmlyc3QgQ2hyaXN0bWFzIERheSd9ID0gJ0Vyc3RlciBXZWlobmFjaHRzdGFnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlY29uZCBDaHJpc3RtYXMgRGF5J30gPSAnWndlaXRlciBXZWlobmFjaHRzdGFnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NpbHZlc3Rlcid9ID0gJ1NpbHZlc3Rlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgWWVhclwncyBFdmUhJ30gPSAnTmV1IEphaHIhJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0phbnVhcnknfSA9ICdKYW51YXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmVicnVhcnknfSA9ICdGZWJydWFyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01hcmNoJ30gPSAnTeRyeic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcHJpbCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKdW5lJ30gPSAnSnVuaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKdWx5J30gPSAnSnVsaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBdWd1c3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnU2VwdGVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J09jdG9iZXInfSA9ICdPa3RvYmVyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vdmVtYmVyJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlY2VtYmVyJ30gPSAnRGV6ZW1iZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnNSBEYXknfSA9ICc1IFRhZ2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnNyBEYXknfSA9ICc3IFRhZ2UnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnMyBNb250aCd9ID0gJzMgTW9uYXRlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3B1YmxpYyd9ID0gJ9ZmZmVudGxpY2gnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJpdmF0ZSd9ID0gJ1ByaXZhdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyd2YWNhdGlvbid9ID0gJ0ZyZWl6ZWl0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J21lZXRpbmcnfSA9ICdNZWV0aW5nJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBFdmVudC4uLid9ID0gJ05ldSAuLi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52b2x2ZWQnfSA9ICdJbnZvbHZpZXJ0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05vbmUnfSA9ICdLZWluZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXZWVrbHknfSA9ICdX9mNoZW50bGljaCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNb250aGx5J30gPSAnTW9uYXRsaWNoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1llYXJseSd9ID0gJ0rkaHJsaWNoJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcXVlbmNlJ30gPSAnU2VxdWVueic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXF1ZW5jZSBFbmQnfSA9ICdTZXF1ZW56ZW5kZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eycxLiBmaXJzdCd9ID0gJzEuIGVyc3Rlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eycyLiBzZWNvbmQnfSA9ICcyLiB6d2VpdGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57JzMuIHRoaXJkJ30gPSAnMy4gZHJpdHRlbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyc0LiBmb3VydGgnfSA9ICc0LiB2aWVydGVuJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57Jyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eycnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnJ30gPSAnJzsKCn0KMTsK
CnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6aXRfQWdlbnRDYWxlbmRhcjsKCnVzZSBzdHJpY3Q7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NXJ30gPSAnU2V0dGltYW5hJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvZGF5J30gPSAnT2dnaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUb21vcnJvdyd9ID0gJ0RvbWFuaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSdW5uaW5nJ30gPSAnSW4gY29yc28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmVhc3Qgb2YgQ29ycHVzIENocmlzdGknfSA9ICdDb3JwdXMgQ2hyaXN0aSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaGl0c3VuZGF5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1doaXRtb25kYXknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXNjZW5zaW9uIG9mIENocmlzdCd9ID0gJ0FzY2Vuc2lvbmUgZGkgQ3Jpc3RvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57JzEgU3QuIE1heSd9ID0gJ1ByaW1vIE1hZ2dpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaHJpc3RtYXMnfSA9ICdWaWdpbGlhIGRpIE5hdGFsZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGaXJzdCBDaHJpc3RtYXMgRGF5J30gPSAnTmF0YWxlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlY29uZCBDaHJpc3RtYXMgRGF5J30gPSAnU2FudG8gU3RlZmFubyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaWx2ZXN0ZXInfSA9ICdTYW4gU2lsdmVzdHJvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J05ldyBZZWFyXCdzIEV2ZSEnfSA9ICdDYXBvZGFubm8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSmFudWFyeSd9ID0gJ0dlbm5haW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmVicnVhcnknfSA9ICdGZWJicmFpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydNYXJjaCd9ID0gJ01hcnpvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J01heSd9ID0gJ01hZ2dpbyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBcHJpbCd9ID0gJ0FwcmlsZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydKdW5lJ30gPSAnR2l1Z25vJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0p1bHknfSA9ICdMdWdsaW8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQXVndXN0J30gPSAnQWdvc3RvJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlcHRlbWJlcid9ID0gJ1NldHRlbWJyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydPY3RvYmVyJ30gPSAnT3R0b2JyZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOb3ZlbWJlcid9ID0gJ05vdmVtYnJlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0RlY2VtYmVyJ30gPSAnRGljZW1icmUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnNSBEYXknfSA9ICc1IEdpb3JuaSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyc3IERheSd9ID0gJzcgR2lvcm5pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57JzMgTW9udGgnfSA9ICczIE1lc2knOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHVibGljJ30gPSAncHViYmxpY28nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHJpdmF0ZSd9ID0gJ3ByaXZhdG8nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndmFjYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbWVldGluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgRXZlbnQuLi4nfSA9ICdOdW92by4uLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydJbnZvbHZlZCd9ID0gJ1BhcnRlY2lwYW50ZSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eycnfSA9ICcnOwoKfQoxOwo=
CnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6bmJfTk9fQWdlbnRDYWxlbmRhcjsKCnVzZSBzdHJpY3Q7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0NXJ30gPSAnVWtlJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1RvZGF5J30gPSAnSWRhZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydUb21vcnJvdyd9ID0gJ0ltb3JnZW4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnUnVubmluZyd9ID0gJ0z4cGVuZGUnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmVhc3Qgb2YgQ29ycHVzIENocmlzdGknfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnV2hpdHN1bmRheSd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydXaGl0bW9uZGF5J30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FzY2Vuc2lvbiBvZiBDaHJpc3QnfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnMSBTdC4gTWF5J30gPSAnRvhyc3RlIG1haSc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDaHJpc3RtYXMnfSA9ICdKdWwnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRmlyc3QgQ2hyaXN0bWFzIERheSd9ID0gJ0b4cnN0ZSBqdWxlZGFnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1NlY29uZCBDaHJpc3RtYXMgRGF5J30gPSAnQW5kcmUganVsZWRhZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTaWx2ZXN0ZXInfSA9ICdTaWx2ZXN0ZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTmV3IFllYXJcJ3MgRXZlISd9ID0gJ055dHTlcnNhZnRlbiEnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSmFudWFyeSd9ID0gJ0phbnVhcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydGZWJydWFyeSd9ID0gJ0ZlYnJ1YXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTWFyY2gnfSA9ICdNYXJzJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0FwcmlsJ30gPSAnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0p1bmUnfSA9ICdKdW5pJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0p1bHknfSA9ICdKdWxpJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0F1Z3VzdCd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydTZXB0ZW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnT2N0b2Jlcid9ID0gJ09rdG9iZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnTm92ZW1iZXInfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVjZW1iZXInfSA9ICdEZXNlbWJlcic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eyc1IERheSd9ID0gJzUgZGFnZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnNyBEYXknfSA9ICc3IGRhZ2VyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57JzMgTW9udGgnfSA9ICczIG3lbmVkZXInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsncHVibGljJ30gPSAnb2ZmZW50bGlnJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J3ByaXZhdGUnfSA9ICdwcml2YXQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsndmFjYXRpb24nfSA9ICcnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnbWVldGluZyd9ID0gJyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydOZXcgRXZlbnQuLi4nfSA9ICdOeSAuLi4nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW52b2x2ZWQnfSA9ICdJbnZvbHZlcnQoZSknOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnJ30gPSAnJzsKCn0KMTsK
IyAtLQojIEFnZW50Q2FsZW5kYXIuZHRsIC0gcHJvdmlkZXMgSFRNTCBmb3JtIGZvciBBZ2VudENhbGVuZGFyCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDYgT1RSUyBHbWJILCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyAkSWQ6IEFnZW50Q2FsZW5kYXIuZHRsLHYgMS4xMiAyMDA2LzEwLzA0IDIwOjA0OjQ4IG1hcnRpbiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC50eHQuCiMgLS0KPCEtLSBkdGw6YmxvY2s6Q3JlYXRlIC0tPgo8dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIzIiBjb2xzPSIxIj4KICA8dHI+CiAgICA8dGQgY2xhc3M9Im1haW5oZWFkIj4KICAgICAgJEVudnsiQm94MCJ9JFRleHR7IkNhbGVuZGFyIn0kRW52eyJCb3gxIn0KICAgIDwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQgY2xhc3M9Im1haW5ib2R5Ij4KCiAgICAgIDxicj4KCiAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSIgbmFtZT0iY29tcG9zZSI+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IkNyZWF0ZUFjdGlvbiI+CgogICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSI3MDAiIGFsaWduPSJjZW50ZXIiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iNCI+CiAgICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIiBjbGFzcz0iY29udGVudGhlYWQiPiRUZXh0eyJOZXcifTwvdGQ+CiAgICAgICAgICA8L3RyPgogICAgICAgICAgPHRyPgogICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRib2R5Ij4KICAgICAgICAgICAgICA8dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iMjAlIiBjbGFzcz0iY29udGVudGtleSI+JFRleHR7IlRpdGxlIn06IDwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZCB3aWR0aD0iODAlIiBjbGFzcz0iY29udGVudHZhbHVlIj4gPGlucHV0IHR5cGU9InRleHQiIG5hbWU9IlRpdGxlIiB2YWx1ZT0iJFFEYXRheyJUaXRsZSJ9IiBzaXplPSI3MCI+PC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSI+JFRleHR7IkRlc2NyaXB0aW9uIn06IDwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj4gPHRleHRhcmVhIG5hbWU9IkNvbnRlbnQiIHJvd3M9IjYiIGNvbHM9IjcwIiB3cmFwPSIkRW52eyJCcm93c2VyV3JhcCJ9Ij4kUURhdGF7IkNvbnRlbnQifTwvdGV4dGFyZWE+PC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSI+JFRleHR7IlN0YXJ0In06IDwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj4gJERhdGF7IlN0YXJ0RGF0ZVN0cmluZyJ9PC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSI+JFRleHR7IkVuZCJ9OiA8L3RkPgogICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+ICREYXRheyJFbmREYXRlU3RyaW5nIn08L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiU3RhdGUifTogPC90ZD4KICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPiAkRGF0YXsiU3RhdGUifTwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJTZXF1ZW5jZSJ9OiA8L3RkPgogICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+CiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCI+CiAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4kVGV4dHsiTm9uZSJ9OiA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJTZXF1ZW5jZVR5cGUiIHZhbHVlPSIiICREYXRheyJTZXF1ZW5jZVR5cGU6Ok5vbmUifT48L3RkPgogICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiRUZXh0eyJXZWVrbHkifTogPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPgokVGV4dHsiTW9uIn08aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9IlNlcXVlbmNlVHlwZSIgdmFsdWU9IldlZWtseTo6TW9uIiAkRGF0YXsiU2VxdWVuY2VUeXBlOjpXZWVrbHk6Ok1vbiJ9PgokVGV4dHsiVHVlIn08aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9IlNlcXVlbmNlVHlwZSIgdmFsdWU9IldlZWtseTo6VHVlIiAkRGF0YXsiU2VxdWVuY2VUeXBlOjpXZWVrbHk6OlR1ZSJ9PgokVGV4dHsiV2VkIn08aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9IlNlcXVlbmNlVHlwZSIgdmFsdWU9IldlZWtseTo6V2VkIiAkRGF0YXsiU2VxdWVuY2VUeXBlOjpXZWVrbHk6OldlZCJ9PgokVGV4dHsiVGh1In08aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9IlNlcXVlbmNlVHlwZSIgdmFsdWU9IldlZWtseTo6VGh1IiAkRGF0YXsiU2VxdWVuY2VUeXBlOjpXZWVrbHk6OlRodSJ9PgokVGV4dHsiRnJpIn08aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9IlNlcXVlbmNlVHlwZSIgdmFsdWU9IldlZWtseTo6RnJpIiAkRGF0YXsiU2VxdWVuY2VUeXBlOjpXZWVrbHk6OkZyaSJ9PgokVGV4dHsiU2F0In08aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9IlNlcXVlbmNlVHlwZSIgdmFsdWU9IldlZWtseTo6U2F0IiAkRGF0YXsiU2VxdWVuY2VUeXBlOjpXZWVrbHk6OlNhdCJ9PgokVGV4dHsiU3VuIn08aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9IlNlcXVlbmNlVHlwZSIgdmFsdWU9IldlZWtseTo6U3VuIiAkRGF0YXsiU2VxdWVuY2VUeXBlOjpXZWVrbHk6OlN1biJ9PgogICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiRUZXh0eyJNb250aGx5In06IDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KJERhdGF7Ik1vbnRobHlTdHJpbmcifQokVGV4dHsiTW9uIn08aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9IlNlcXVlbmNlVHlwZSIgdmFsdWU9Ik1vbnRobHk6Ok1vbiIgJERhdGF7IlNlcXVlbmNlVHlwZTo6TW9udGhseTo6TW9uIn0+CiRUZXh0eyJUdWUifTxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iU2VxdWVuY2VUeXBlIiB2YWx1ZT0iTW9udGhseTo6VHVlIiAkRGF0YXsiU2VxdWVuY2VUeXBlOjpNb250aGx5OjpUdWUifT4KJFRleHR7IldlZCJ9PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJTZXF1ZW5jZVR5cGUiIHZhbHVlPSJNb250aGx5OjpXZWQiICREYXRheyJTZXF1ZW5jZVR5cGU6Ok1vbnRobHk6OldlZCJ9PgokVGV4dHsiVGh1In08aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9IlNlcXVlbmNlVHlwZSIgdmFsdWU9Ik1vbnRobHk6OlRodSIgJERhdGF7IlNlcXVlbmNlVHlwZTo6TW9udGhseTo6VGh1In0+CiRUZXh0eyJGcmkifTxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iU2VxdWVuY2VUeXBlIiB2YWx1ZT0iTW9udGhseTo6RnJpIiAkRGF0YXsiU2VxdWVuY2VUeXBlOjpNb250aGx5OjpGcmkifT4KJFRleHR7IlNhdCJ9PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJTZXF1ZW5jZVR5cGUiIHZhbHVlPSJNb250aGx5OjpTYXQiICREYXRheyJTZXF1ZW5jZVR5cGU6Ok1vbnRobHk6OlNhdCJ9PgokVGV4dHsiU3VuIn08aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9IlNlcXVlbmNlVHlwZSIgdmFsdWU9Ik1vbnRobHk6OlN1biIgJERhdGF7IlNlcXVlbmNlVHlwZTo6TW9udGhseTo6U3VuIn0+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQ+JFRleHR7IlllYXJseSJ9OiA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQ+PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJTZXF1ZW5jZVR5cGUiIHZhbHVlPSJZZWFybHkiICREYXRheyJTZXF1ZW5jZVR5cGU6OlllYXJseSJ9PjwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQ+JFRleHR7IlNlcXVlbmNlIEVuZCJ9OiA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQ+JERhdGF7IlNlcXVlbmNlRW5kRGF0ZVN0cmluZyJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSI+JFRleHR7Ikludm9sdmVkIn06IDwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj4gJERhdGF7IlVzZXJMaXN0In08L3RkPgogICAgICAgICAgICAgICAgPC90cj4KIyAgICA8dHI+CiMgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJSZW1pbmRlciJ9OiA8L3RkPgojICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPiAkRGF0YXsiUmVtaW5kZXIifTwvdGQ+CiMgICAgPC90cj4KICAgICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgICA8L3RkPgogICAgICAgICAgPC90cj4KICAgICAgICAgIDx0cj4KICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50Zm9vdGVyIj4KICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImJ1dHRvbiIgYWNjZXNza2V5PSJnIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSIkVGV4dHsiTmV3In0iPgogICAgICAgICAgICA8L3RkPgogICAgICAgICAgPC90cj4KICAgICAgICA8L3RhYmxlPgogICAgICA8L2Zvcm0+CgogICAgICA8YnI+CgogICAgPC90ZD4KICA8L3RyPgo8L3RhYmxlPgo8IS0tIGR0bDpibG9jazpDcmVhdGUgLS0+Cgo8IS0tIGR0bDpibG9jazpVcGRhdGUgLS0+Cjx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjMiIGNvbHM9IjEiPgogIDx0cj4KICAgIDx0ZCBjbGFzcz0ibWFpbmhlYWQiPgogICAgICAkRW52eyJCb3gwIn0kVGV4dHsiQ2FsZW5kYXIifSRFbnZ7IkJveDEifQogICAgPC90ZD4KICA8L3RyPgogIDx0cj4KICAgIDx0ZCBjbGFzcz0ibWFpbmJvZHkiPgoKICAgICAgPGJyPgoKICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJwb3N0IiBlbmN0eXBlPSJtdWx0aXBhcnQvZm9ybS1kYXRhIiBuYW1lPSJjb21wb3NlIj4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJBY3Rpb24iIHZhbHVlPSIkRW52eyJBY3Rpb24ifSI+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iU3ViYWN0aW9uIiB2YWx1ZT0iVXBkYXRlQWN0aW9uIj4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJFdmVudElEIiB2YWx1ZT0iJFFEYXRheyJFdmVudElEIn0iPgoKICAgICAgICA8dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iNzAwIiBhbGlnbj0iY2VudGVyIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjQiPgogICAgICAgICAgPHRyPgogICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiIgY2xhc3M9ImNvbnRlbnRoZWFkIj4kVGV4dHsiRWRpdCJ9PC90ZD4KICAgICAgICAgIDwvdHI+CiAgICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGJvZHkiPgogICAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIHdpZHRoPSIxMDAlIj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIyMCUiIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiVGl0bGUifTogPC90ZD4KICAgICAgICAgICAgICAgICAgPHRkIHdpZHRoPSI4MCUiIGNsYXNzPSJjb250ZW50dmFsdWUiPiA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iVGl0bGUiIHZhbHVlPSIkUURhdGF7IlRpdGxlIn0iIHNpemU9IjcwIj48L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiQ29udGVudCJ9OiA8L3RkPgogICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+IDx0ZXh0YXJlYSBuYW1lPSJDb250ZW50IiByb3dzPSI2IiBjb2xzPSI3MCIgd3JhcD0iJEVudnsiQnJvd3NlcldyYXAifSI+JFFEYXRheyJDb250ZW50In08L3RleHRhcmVhPjwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJTdGFydCJ9OiA8L3RkPgogICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+ICREYXRheyJTdGFydERhdGVTdHJpbmcifTwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJFbmQifTogPC90ZD4KICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPiAkRGF0YXsiRW5kRGF0ZVN0cmluZyJ9PC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSI+JFRleHR7IlN0YXRlIn06IDwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj4gJERhdGF7IlN0YXRlU3RyaW5nIn08L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiU2VxdWVuY2UifTogPC90ZD4KICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPgogICAgICAgICAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjAiPgogICAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQ+JFRleHR7Ik5vbmUifTogPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iU2VxdWVuY2VUeXBlIiB2YWx1ZT0iIiAkRGF0YXsiU2VxdWVuY2VUeXBlOjpOb25lIn0+PC90ZD4KICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4kVGV4dHsiV2Vla2x5In06IDwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4KJFRleHR7Ik1vbiJ9PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJTZXF1ZW5jZVR5cGUiIHZhbHVlPSJXZWVrbHk6Ok1vbiIgJERhdGF7IlNlcXVlbmNlVHlwZTo6V2Vla2x5OjpNb24ifT4KJFRleHR7IlR1ZSJ9PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJTZXF1ZW5jZVR5cGUiIHZhbHVlPSJXZWVrbHk6OlR1ZSIgJERhdGF7IlNlcXVlbmNlVHlwZTo6V2Vla2x5OjpUdWUifT4KJFRleHR7IldlZCJ9PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJTZXF1ZW5jZVR5cGUiIHZhbHVlPSJXZWVrbHk6OldlZCIgJERhdGF7IlNlcXVlbmNlVHlwZTo6V2Vla2x5OjpXZWQifT4KJFRleHR7IlRodSJ9PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJTZXF1ZW5jZVR5cGUiIHZhbHVlPSJXZWVrbHk6OlRodSIgJERhdGF7IlNlcXVlbmNlVHlwZTo6V2Vla2x5OjpUaHUifT4KJFRleHR7IkZyaSJ9PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJTZXF1ZW5jZVR5cGUiIHZhbHVlPSJXZWVrbHk6OkZyaSIgJERhdGF7IlNlcXVlbmNlVHlwZTo6V2Vla2x5OjpGcmkifT4KJFRleHR7IlNhdCJ9PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJTZXF1ZW5jZVR5cGUiIHZhbHVlPSJXZWVrbHk6OlNhdCIgJERhdGF7IlNlcXVlbmNlVHlwZTo6V2Vla2x5OjpTYXQifT4KJFRleHR7IlN1biJ9PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJTZXF1ZW5jZVR5cGUiIHZhbHVlPSJXZWVrbHk6OlN1biIgJERhdGF7IlNlcXVlbmNlVHlwZTo6V2Vla2x5OjpTdW4ifT4KICAgICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZD4kVGV4dHsiTW9udGhseSJ9OiA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8dGQ+CiREYXRheyJNb250aGx5U3RyaW5nIn0KJFRleHR7Ik1vbiJ9PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJTZXF1ZW5jZVR5cGUiIHZhbHVlPSJNb250aGx5OjpNb24iICREYXRheyJTZXF1ZW5jZVR5cGU6Ok1vbnRobHk6Ok1vbiJ9PgokVGV4dHsiVHVlIn08aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9IlNlcXVlbmNlVHlwZSIgdmFsdWU9Ik1vbnRobHk6OlR1ZSIgJERhdGF7IlNlcXVlbmNlVHlwZTo6TW9udGhseTo6VHVlIn0+CiRUZXh0eyJXZWQifTxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iU2VxdWVuY2VUeXBlIiB2YWx1ZT0iTW9udGhseTo6V2VkIiAkRGF0YXsiU2VxdWVuY2VUeXBlOjpNb250aGx5OjpXZWQifT4KJFRleHR7IlRodSJ9PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJTZXF1ZW5jZVR5cGUiIHZhbHVlPSJNb250aGx5OjpUaHUiICREYXRheyJTZXF1ZW5jZVR5cGU6Ok1vbnRobHk6OlRodSJ9PgokVGV4dHsiRnJpIn08aW5wdXQgdHlwZT0icmFkaW8iIG5hbWU9IlNlcXVlbmNlVHlwZSIgdmFsdWU9Ik1vbnRobHk6OkZyaSIgJERhdGF7IlNlcXVlbmNlVHlwZTo6TW9udGhseTo6RnJpIn0+CiRUZXh0eyJTYXQifTxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iU2VxdWVuY2VUeXBlIiB2YWx1ZT0iTW9udGhseTo6U2F0IiAkRGF0YXsiU2VxdWVuY2VUeXBlOjpNb250aGx5OjpTYXQifT4KJFRleHR7IlN1biJ9PGlucHV0IHR5cGU9InJhZGlvIiBuYW1lPSJTZXF1ZW5jZVR5cGUiIHZhbHVlPSJNb250aGx5OjpTdW4iICREYXRheyJTZXF1ZW5jZVR5cGU6Ok1vbnRobHk6OlN1biJ9PgogICAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiRUZXh0eyJZZWFybHkifTogPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPjxpbnB1dCB0eXBlPSJyYWRpbyIgbmFtZT0iU2VxdWVuY2VUeXBlIiB2YWx1ZT0iWWVhcmx5IiAkRGF0YXsiU2VxdWVuY2VUeXBlOjpZZWFybHkifT48L3RkPgogICAgICAgICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiRUZXh0eyJTZXF1ZW5jZSBFbmQifTogPC90ZD4KICAgICAgICAgICAgICAgICAgICAgICAgPHRkPiREYXRheyJTZXF1ZW5jZUVuZERhdGVTdHJpbmcifTwvdGQ+CiAgICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRrZXkiPiRUZXh0eyJJbnZvbHZlZCJ9OiA8L3RkPgogICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSI+ICREYXRheyJVc2VyTGlzdCJ9PC90ZD4KICAgICAgICAgICAgICAgIDwvdHI+CiMgICAgPHRyPgojICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiUmVtaW5kZXIifTogPC90ZD4KIyAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj4gJERhdGF7IlJlbWluZGVyU3RyaW5nIn08L3RkPgojICAgIDwvdHI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSI+JFRleHR7IkNoYW5nZWQifTogPC90ZD4KICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPiAkUURhdGF7IlVzZXJGaXJzdG5hbWUifSAkUURhdGF7IlVzZXJMYXN0bmFtZSJ9ICgkUURhdGF7IlVzZXJMb2dpbiJ9KTwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICA8L3RyPgogICAgICAgICAgPHRyPgogICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRmb290ZXIiPgogICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iYnV0dG9uIiBhY2Nlc3NrZXk9ImQiIHR5cGU9InN1Ym1pdCIgbmFtZT0iRGVsZXRlIiB2YWx1ZT0iJFRleHR7IkRlbGV0ZSJ9Ij4KICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImJ1dHRvbiIgYWNjZXNza2V5PSJnIiB0eXBlPSJzdWJtaXQiIG5hbWU9IlN1Ym1pdCIgdmFsdWU9IiRUZXh0eyJTdWJtaXQifSI+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICA8L3RyPgogICAgICAgIDwvdGFibGU+CiAgICAgIDwvZm9ybT4KCiAgICAgIDxicj4KCiAgICA8L3RkPgogIDwvdHI+CjwvdGFibGU+CjwhLS0gZHRsOmJsb2NrOlVwZGF0ZSAtLT4KCjwhLS0gZHRsOmJsb2NrOkRlbGV0ZSAtLT4KPHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMyI+CiAgPHRyPgogICAgPHRkIGNsYXNzPSJtYWluaGVhZCI+CiAgICAgICRFbnZ7IkJveDAifSRUZXh0eyJEZWxldGUifTogJFRleHR7IkV2ZW50In0gJEVudnsiQm94MSJ9CiAgICA8L3RkPgogIDwvdHI+CiAgPHRyPgogICAgPHRkIGNsYXNzPSJtZW51Ij4KICAgICAgPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj0kRW52eyJBY3Rpb24ifSZTdWJhY3Rpb249VXBkYXRlJkV2ZW50SUQ9JFFEYXRheyJFdmVudElEIn0iIGNsYXNzPSJtZW51aXRlbSI+JFRleHR7IkJhY2sifTwvYT4KICAgIDwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQgY2xhc3M9Im1haW5ib2R5Ij4KICAgICAgPGJyPgogICAgICA8dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iMzUwIiBhbGlnbj0iY2VudGVyIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjQiPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIiBjbGFzcz0iY29udGVudGhlYWQiPiRUZXh0eyJPcHRpb25zIn08L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50Ym9keSI+CiAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMyI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIyNSUiIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiVGl0bGUifTo8L3RkPgogICAgICAgICAgICAgICAgPHRkIHdpZHRoPSI3NSUiIGNsYXNzPSJjb250ZW50dmFsdWUiPiRRRGF0YXsiVGl0bGUifTwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGQgY29sc3Bhbj0iMiI+Jm5ic3A7PC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIiBjbGFzcz0iY29udGVudGtleSI+JFRleHR7IkRvIHlvdSByZWFsbHkgd2FudCB0byBkZWxldGUgdGhpcyBPYmplY3Q/In06PC90ZD4KICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgPC90ZD4KICAgICAgICA8L3RyPgogICAgICAgIDx0cj4KICAgICAgICAgIDx0ZCBjb2xzcGFuPSIyIiBjbGFzcz0iY29udGVudGZvb3RlciI+CiAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjEiPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGZvb3RlciI+CiAgICAgICAgICAgICAgICAgIDxmb3JtIGFjdGlvbj0iJEVudnsiQ0dJSGFuZGxlIn0iIG1ldGhvZD0icG9zdCIgZW5jdHlwZT0ibXVsdGlwYXJ0L2Zvcm0tZGF0YSI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlVwZGF0ZSI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iRXZlbnRJRCIgdmFsdWU9IiRRRGF0YXsiRXZlbnRJRCJ9Ij4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgY2xhc3M9ImJ1dHRvbiIgdHlwZT0ic3VibWl0IiB2YWx1ZT0iJFRleHR7Ik5vIn0iPgogICAgICAgICAgICAgICAgICA8L2Zvcm0+CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkIHdpZHRoPSIxMCIgY2xhc3M9ImNvbnRlbnRmb290ZXIiPgogICAgICAgICAgICAgICAgICA8Zm9ybSBhY3Rpb249IiRFbnZ7IkNHSUhhbmRsZSJ9IiBtZXRob2Q9InBvc3QiIGVuY3R5cGU9Im11bHRpcGFydC9mb3JtLWRhdGEiPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9Ij4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJEZWxldGVBY3Rpb24iPgogICAgICAgICAgICAgICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkV2ZW50SUQiIHZhbHVlPSIkUURhdGF7IkV2ZW50SUQifSI+CiAgICAgICAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJidXR0b24iIHR5cGU9InN1Ym1pdCIgdmFsdWU9IiRUZXh0eyJZZXMifSI+CiAgICAgICAgICAgICAgICAgIDwvZm9ybT4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgIDwvdGQ+CiAgICAgICAgPC90cj4KICAgICAgPC90YWJsZT4KICAgICAgPGJyPgogICAgPC90ZD4KICA8L3RyPgo8L3RhYmxlPgo8IS0tIGR0bDpibG9jazpEZWxldGUgLS0+Cgo8IS0tIGR0bDpibG9jazpPdmVydmlldyAtLT4KPHN0eWxlIHR5cGU9InRleHQvY3NzIj4KPCEtLQoudG9kYXkgewpmb250LWZhbWlseTpHZW5ldmEsSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7CmZvbnQtc2l6ZTo4cHQ7CnZlcnRpY2FsLWFsaWduOnRvcDsKYmFja2dyb3VuZC1jb2xvcjojRkZDQzAwOwpjb2xvcjojMDAwMDAwOwp9Ci50b2RheW5vdGNvdW50ZWQgewpmb250LWZhbWlseTpHZW5ldmEsSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7CmZvbnQtc2l6ZTo4cHQ7CnZlcnRpY2FsLWFsaWduOnRvcDsKYmFja2dyb3VuZC1jb2xvcjojREZCQzAwOwpjb2xvcjojMDAwMDAwOwp9Ci5zdW5kYXkgewpmb250LWZhbWlseTpHZW5ldmEsSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7CmZvbnQtc2l6ZTo4cHQ7CnZlcnRpY2FsLWFsaWduOnRvcDsKYmFja2dyb3VuZC1jb2xvcjojZmZlMGUwOwpjb2xvcjojMDAwMDAwOwp9Ci5zYXR1cmRheSB7CmZvbnQtZmFtaWx5OkdlbmV2YSxIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjsKZm9udC1zaXplOjhwdDsKdmVydGljYWwtYWxpZ246dG9wOwpiYWNrZ3JvdW5kLWNvbG9yOiNmZmUwZTA7CmNvbG9yOiMwMDAwMDA7Cn0KLmhvbGlkYXkgewpmb250LWZhbWlseTpHZW5ldmEsSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7CmZvbnQtc2l6ZTo4cHQ7CnZlcnRpY2FsLWFsaWduOnRvcDsKYmFja2dyb3VuZC1jb2xvcjojRUJDQ0NDOwpjb2xvcjojMDAwMDAwOwp9Ci5ldmVudCB7CmZvbnQtZmFtaWx5OkdlbmV2YSxIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjsKZm9udC1zaXplOjhwdDsKdmVydGljYWwtYWxpZ246dG9wOwpiYWNrZ3JvdW5kLWNvbG9yOiNGRkNDMDA7CmNvbG9yOjAwMDAwMDA7Cn0KLmV2ZW50bm90Y291bnRlZCB7CmZvbnQtZmFtaWx5OkdlbmV2YSxIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjsKZm9udC1zaXplOjhwdDsKdmVydGljYWwtYWxpZ246dG9wOwpiYWNrZ3JvdW5kLWNvbG9yOiNGMkEwMDA7CmNvbG9yOiMwMDAwMDA7Cn0KLndlZWtkYXkgewpmb250LWZhbWlseTpHZW5ldmEsSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7CmZvbnQtc2l6ZTo4cHQ7CnZlcnRpY2FsLWFsaWduOnRvcDsKYmFja2dyb3VuZC1jb2xvcjojRTVGMEZGOwpjb2xvcjojMDAwMDAwOwp9Ci53ZWVrZGF5bm90Y291bnRlZCB7CmZvbnQtZmFtaWx5OkdlbmV2YSxIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjsKZm9udC1zaXplOjhwdDsKdmVydGljYWwtYWxpZ246dG9wOwpiYWNrZ3JvdW5kLWNvbG9yOiNEMEUwRUE7CmNvbG9yOiMwMDAwMDA7Cn0KLnZhY2F0aW9uIHsKZm9udC1mYW1pbHk6R2VuZXZhLEhlbHZldGljYSxBcmlhbCxzYW5zLXNlcmlmOwpmb250LXNpemU6OHB0Owp2ZXJ0aWNhbC1hbGlnbjp0b3A7CiMgICAgICAgIGJhY2tncm91bmQtY29sb3I6I2NkYzcxODsKIyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjojYThiZmVhOwpiYWNrZ3JvdW5kLWNvbG9yOiNiZWNkZTg7Cn0KLm1lZXRpbmcgewpmb250LWZhbWlseTpHZW5ldmEsSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7CmZvbnQtc2l6ZTo4cHQ7CnZlcnRpY2FsLWFsaWduOnRvcDsKIyAgICAgICAgYmFja2dyb3VuZC1jb2xvcjojN2JhZWRlOwpiYWNrZ3JvdW5kLWNvbG9yOiNmZmI3Yjc7Cn0KLnB1YmxpYyB7CmZvbnQtZmFtaWx5OkdlbmV2YSxIZWx2ZXRpY2EsQXJpYWwsc2Fucy1zZXJpZjsKZm9udC1zaXplOjhwdDsKdmVydGljYWwtYWxpZ246dG9wOwpiYWNrZ3JvdW5kLWNvbG9yOiNGRkNDMDA7Cn0KLnByaXZhdGUgewpmb250LWZhbWlseTpHZW5ldmEsSGVsdmV0aWNhLEFyaWFsLHNhbnMtc2VyaWY7CmZvbnQtc2l6ZTo4cHQ7CnZlcnRpY2FsLWFsaWduOnRvcDsKYmFja2dyb3VuZC1jb2xvcjojY2RjZGNkOwp9Ci8vLS0+Cjwvc3R5bGU+CgoKPHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMyIgY29scz0iMSI+CiAgPHRyPgogICAgPHRkIGNsYXNzPSJtYWluaGVhZCI+CiAgICAgICRFbnZ7IkJveDAifSRUZXh0eyJDYWxlbmRhciJ9JEVudnsiQm94MSJ9CiAgICA8L3RkPgogIDwvdHI+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TWVudSAtLT4KICA8dHI+CiAgICA8dGQgY2xhc3M9Im1lbnUiPgogICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9JEVudnsiUmVxdWVzdGVkVVJMIn0mUHJpbnQ9MSIgdGFyZ2V0PSJwcmludCI+JFRleHR7IlByaW50In08L2E+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TWVudUFsbCAtLT4KICAgICAgLSA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9JERhdGF7IlJlcXVlc3RlZFVSTCJ9Jk1lbWJlcnM9QWxsIj4kVGV4dHsiQWxsIEV2ZW50cyJ9PC9hPgo8IS0tIGR0bDpibG9jazpPdmVydmlld01lbnVBbGwgLS0+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TWVudU15IC0tPgogICAgICAtIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn0kRGF0YXsiUmVxdWVzdGVkVVJMIn0mTWVtYmVycz1NeSI+JFRleHR7Ik15IEV2ZW50cyJ9PC9hPgo8IS0tIGR0bDpibG9jazpPdmVydmlld01lbnVNeSAtLT4KICAgIDwvdGQ+CiAgPC90cj4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdNZW51IC0tPgogIDx0cj4KICAgIDx0ZCBjbGFzcz0ibWFpbmJvZHkiPgogICAgICA8Y2VudGVyPgoKPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdOYXZCYXIgLS0+CiAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249QWdlbnRDYWxlbmRhciZNb250aD0kUURhdGF7Ikxhc3RNb250aCJ9JlllYXI9JFFEYXRheyJMYXN0WWVhciJ9JkRheT0kUURhdGF7Ikxhc3REYXkifSI+Jmx0OyZsdDs8L2E+CiAgICAgIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249QWdlbnRDYWxlbmRhciZNb250aD0kUURhdGF7Ik5leHRNb250aCJ9JlllYXI9JFFEYXRheyJOZXh0WWVhciJ9JkRheT0kUURhdGF7Ik5leHREYXkifSI+Jmd0OyZndDs8L2E+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TmF2QmFyIC0tPgoKICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjIiIGNlbGxwYWRkaW5nPSIyIiB3aWR0aD0iODYwIj4KICAgICAgICA8dHIgdmFsaWduPSJ0b3AiPgo8IS0tIGR0bDpibG9jazpNb250aC0tPgogICAgICAgICAgPHRkIHdpZHRoPSIzMyUiPgogICAgICAgICAgICA8dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMiIgY2VsbHBhZGRpbmc9IjEiIHdpZHRoPSIxMDAlIj4KICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICA8dGggY29sc3Bhbj0iMyIgY2xhc3M9ImNvbnRlbnRoZWFkIj4kVGV4dHsiJFFEYXRheyJNb250aFN0cmluZyJ9In0gJFFEYXRheyJZZWFyIn08L3RoPgogICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOk1vbnRoRGF5IC0tPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iJFFEYXRheyJDbGFzcyJ9Ij4KIyBjaGVjayBydy9ybyBhY2Nlc3MKICAgICAgICAgICAgICAgICAgPGR0bCBzZXQgJERhdGF7Ik5ldyJ9ID0gIiRRRGF0YXsiRGF5In0iPgogICAgICAgICAgICAgICAgICA8ZHRsIGlmICgkRW52eyJBY2Nlc3NSdyJ9IGVxICIxIikgeyAkRGF0YXsiTmV3In0gPSAiPGEgaHJlZj0iJEVudnsiQmFzZWxpbmsifUFjdGlvbj1BZ2VudENhbGVuZGFyJlN1YmFjdGlvbj1DcmVhdGUmWWVhcj0kUURhdGF7IlllYXIifSZNb250aD0kUURhdGF7Ik1vbnRoIn0mRGF5PSRRRGF0YXsiRGF5In0iIHRpdGxlPSIkVGV4dHsiTmV3IEV2ZW50Li4uIn0iPiRUZXh0eyIkUURhdGF7IkRheSJ9In08L2E+IjsgfT4KICAgICAgICAgICAgICAgICAgJERhdGF7Ik5ldyJ9CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPHRkIGNsYXNzPSIkUURhdGF7IkNsYXNzIn0iPiRUZXh0eyIkUURhdGF7IkRheVN0cmluZyJ9In0gPC90ZD4KICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iJFFEYXRheyJDbGFzcyJ9IiBhbGlnbj0ibGVmdCIgd2lkdGg9IjIxMCI+CjwhLS0gZHRsOmJsb2NrOk1vbnRoV2VlayAtLT4KICAgICAgICAgICAgICAgICAgPGk+KCRUZXh0eyJDVyJ9ICRRRGF0YXsiQ2FsZW5kYXJXZWVrIn0pPC9pPjxicj4KPCEtLSBkdGw6YmxvY2s6TW9udGhXZWVrIC0tPgo8IS0tIGR0bDpibG9jazpNb250aE5vdGljZSAtLT4KICAgICAgICAgICAgICAgICAgKCRUZXh0eyIkUURhdGF7IkluZm8ifSJ9KTxicj4KPCEtLSBkdGw6YmxvY2s6TW9udGhOb3RpY2UgLS0+CjwhLS0gZHRsOmJsb2NrOk1vbnRoSW5mbyAtLT4KICAgICAgICAgICAgICAgICAgJFFEYXRheyJJbmZvIn0KPCEtLSBkdGw6YmxvY2s6TW9udGhJbmZvIC0tPgo8IS0tIGR0bDpibG9jazpNb250aEV2ZW50UHVibGljIC0tPgogICAgICAgICAgICAgICAgICA8dGFibGUgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjIiIHdpZHRoPSIxMDAlIj4KICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9IiRRRGF0YXsiU3RhdGUifSI+CiMgICAgICAgICAgICBvIDxiPjxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn0mU3ViYWN0aW9uPVVwZGF0ZSZFdmVudElEPSRRRGF0YXsiRXZlbnRJRCJ9IiB0aXRsZT0iKCRUaW1lU2hvcnR7IiREYXRheyJTdGFydFRpbWUifSJ9IC0gJFRpbWVTaG9ydHsiJERhdGF7IkVuZFRpbWUifSJ9KSAkUURhdGF7IlRpdGxlIiwiODAifSI+JFFEYXRheyJUaXRsZSIsIjIyIn08L2E+PC9iPgogICAgICAgICAgICAgICAgICAgICAgICBvIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn0mU3ViYWN0aW9uPVVwZGF0ZSZFdmVudElEPSRRRGF0YXsiRXZlbnRJRCJ9IiB0aXRsZT0iKCRUaW1lU2hvcnR7IiREYXRheyJTdGFydFRpbWUifSJ9IC0gJFRpbWVTaG9ydHsiJERhdGF7IkVuZFRpbWUifSJ9KSAkUURhdGF7IlRpdGxlIiwiMTIwIn0iPiRRRGF0YXsiVGl0bGUiLCIzNiJ9PC9hPgogICAgICAgICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgICAgICA8L3RhYmxlPgo8IS0tIGR0bDpibG9jazpNb250aEV2ZW50UHVibGljIC0tPgo8IS0tIGR0bDpibG9jazpNb250aEV2ZW50UHJpdmF0ZSAtLT4KICAgICAgICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIyIiB3aWR0aD0iMTAwJSI+CiAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSIkUURhdGF7IlN0YXRlIn0iPgogICAgICAgICAgICAgICAgICAgICAgICA8aT5vIDxkaXYgdGl0bGU9IigkVGltZVNob3J0eyIkRGF0YXsiU3RhcnRUaW1lIn0ifSAtICRUaW1lU2hvcnR7IiREYXRheyJFbmRUaW1lIn0ifSkgJmd0OyRUZXh0eyJQcml2YXRlIn0gJFFEYXRheyJVc2VyRmlyc3RuYW1lIiwiODAifSAkUURhdGF7IlVzZXJMYXN0bmFtZSIsIjgwIn0mbHQ7Ij48Zm9udCBjb2xvcj0iIzU2NTY1NiI+PGI+Jmd0OyRUZXh0eyJQcml2YXRlIn0gJFFEYXRheyJVc2VyRmlyc3RuYW1lIiwiODAifSAkUURhdGF7IlVzZXJMYXN0bmFtZSIsIjgwIn0mbHQ7PC9mb250PjwvZGl2PjwvYj48L2k+CiAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgIDwvdGFibGU+CjwhLS0gZHRsOmJsb2NrOk1vbnRoRXZlbnRQcml2YXRlIC0tPgogICAgICAgICAgICAgICAgICAkRGF0YXsiRGF5SW5mb0ZpbmlzaCJ9CiAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOk1vbnRoRGF5IC0tPgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgPC90ZD4KPCEtLSBkdGw6YmxvY2s6TW9udGggLS0+Cgo8IS0tIGR0bDpibG9jazpEYXkgLS0+CiAgICAgICAgICA8dGQgdmFsaWduPSJ0b3AiIHdpZHRoPSIkUURhdGF7IldpZHRoIn0lIj4KICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjIiIGNlbGxwYWRkaW5nPSIyIiB3aWR0aD0iMTAwJSI+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRoIGNvbHNwYW49IjIiIGNsYXNzPSJjb250ZW50aGVhZCI+PGg1PiRUZXh0eyIkUURhdGF7IkRheVN0cmluZyJ9In0gJFFEYXRheyJEYXkifSAkVGV4dHsiJFFEYXRheyJNb250aFN0cmluZyJ9In0gJFFEYXRheyJZZWFyIn08L3RoPgogICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOkRheUhvdXIgLS0+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkIGNsYXNzPSIkUURhdGF7IkNsYXNzIn0iPgojIGNoZWNrIHJ3L3JvIGFjY2VzcwogICAgICAgICAgICAgICAgICA8ZHRsIHNldCAkRGF0YXsiTmV3In0gPSAiJFFEYXRheyJIb3VyIn06OjAwIj4KICAgICAgICAgICAgICAgICAgPGR0bCBpZiAoJEVudnsiQWNjZXNzUncifSBlcSAiMSIpIHsgJERhdGF7Ik5ldyJ9ID0gIjxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249QWdlbnRDYWxlbmRhciZTdWJhY3Rpb249Q3JlYXRlJlllYXI9JFFEYXRheyJZZWFyIn0mTW9udGg9JFFEYXRheyJNb250aCJ9JkRheT0kUURhdGF7IkRheSJ9JkhvdXI9JFFEYXRheyJIb3VyIn0mTWludXRlPSRRRGF0YXsiTWludXRlIn0iIHRpdGxlPSIkVGV4dHsiTmV3IEV2ZW50Li4uIn0iPiRRRGF0YXsiSG91ciJ9OjAwPC9hPiI7IH0+CiAgICAgICAgICAgICAgICAgICREYXRheyJOZXcifQogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iJFFEYXRheyJDbGFzcyJ9IiBhbGlnbj0ibGVmdCIgd2lkdGg9IjIwMCI+CjwhLS0gZHRsOmJsb2NrOkRheVdlZWsgLS0+CiAgICAgICAgICAgICAgICAgIDxpPigkVGV4dHsiQ1cifSAkUURhdGF7IkNhbGVuZGFyV2VlayJ9KTwvaT48YnI+CjwhLS0gZHRsOmJsb2NrOkRheVdlZWsgLS0+CjwhLS0gZHRsOmJsb2NrOkRheU5vdGljZSAtLT4KICAgICAgICAgICAgICAgICAgKCRUZXh0eyIkUURhdGF7IkluZm8ifSJ9KTxicj4KPCEtLSBkdGw6YmxvY2s6RGF5Tm90aWNlIC0tPgo8IS0tIGR0bDpibG9jazpEYXlJbmZvIC0tPgogICAgICAgICAgICAgICAgICAkUURhdGF7IkluZm8ifQo8IS0tIGR0bDpibG9jazpEYXlJbmZvIC0tPgo8IS0tIGR0bDpibG9jazpEYXlFdmVudFB1YmxpYyAtLT4KICAgICAgICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIyIiB3aWR0aD0iMTAwJSI+CiAgICAgICAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSIkUURhdGF7IlN0YXRlIn0iPgogICAgICAgICAgICAgICAgICAgICAgICBvIDxhIGhyZWY9IiRFbnZ7IkJhc2VsaW5rIn1BY3Rpb249JEVudnsiQWN0aW9uIn0mU3ViYWN0aW9uPVVwZGF0ZSZFdmVudElEPSRRRGF0YXsiRXZlbnRJRCJ9IiB0aXRsZT0iKCRUaW1lU2hvcnR7IiREYXRheyJTdGFydFRpbWUifSJ9IC0gJFRpbWVTaG9ydHsiJERhdGF7IkVuZFRpbWUifSJ9KSAkUURhdGF7IlRpdGxlIiwiODAifSI+JFFEYXRheyJUaXRsZSIsIjE2In08L2E+CiAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgIDwvdGFibGU+CjwhLS0gZHRsOmJsb2NrOkRheUV2ZW50UHVibGljIC0tPgo8IS0tIGR0bDpibG9jazpEYXlFdmVudFByaXZhdGUgLS0+CiAgICAgICAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMiIgd2lkdGg9IjEwMCUiPgogICAgICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iJFFEYXRheyJTdGF0ZSJ9Ij4KICAgICAgICAgICAgICAgICAgICAgICAgPGk+byA8ZGl2IHRpdGxlPSIoJFRpbWVTaG9ydHsiJERhdGF7IlN0YXJ0VGltZSJ9In0gLSAkVGltZVNob3J0eyIkRGF0YXsiRW5kVGltZSJ9In0pICZndDskVGV4dHsiUHJpdmF0ZSJ9ICRRRGF0YXsiVXNlckZpcnN0bmFtZSIsIjgwIn0gJFFEYXRheyJVc2VyTGFzdG5hbWUiLCI4MCJ9Jmx0OyI+PGZvbnQgY29sb3I9IiM1NjU2NTYiPiZndDskVGV4dHsiUHJpdmF0ZSJ9ICRRRGF0YXsiVXNlckZpcnN0bmFtZSIsIjgwIn0gJFFEYXRheyJVc2VyTGFzdG5hbWUiLCI4MCJ9Jmx0OzwvZm9udD48L2Rpdj48L2k+CiAgICAgICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgIDwvdGFibGU+CjwhLS0gZHRsOmJsb2NrOkRheUV2ZW50UHJpdmF0ZSAtLT4KICAgICAgICAgICAgICAgICAgJERhdGF7IkRheUluZm9GaW5pc2gifQogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpEYXlIb3VyIC0tPgogICAgICAgICAgICA8L3RhYmxlPgogICAgICAgICAgPC90ZD4KPCEtLSBkdGw6YmxvY2s6RGF5IC0tPgogICAgICAgIDwvdHI+CiAgICAgIDwvdGFibGU+CiAgICAgIDwvY2VudGVyPgoKICAgIDwvdGQ+CiAgPC90cj4KPC90YWJsZT4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXcgLS0+Cg==
IyAtLQojIEtlcm5lbC9PdXRwdXQvSFRNTC9Ob3RpZmljYXRpb25DYWxlbmRhci5wbQojIENvcHlyaWdodCAoQykgMjAwMS0yMDA2IE9UUlMgR21iSCwgaHR0cDovL290cnMub3JnLwojIC0tCiMgJElkOiBOb3RpZmljYXRpb25DYWxlbmRhci5wbSx2IDEuNiAyMDA2LzEwLzA0IDIwOjA4OjA3IG1hcnRpbiBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpPdXRwdXQ6OkhUTUw6Ok5vdGlmaWNhdGlvbkNhbGVuZGFyOwoKdXNlIHN0cmljdDsKdXNlIERhdGU6OlBjYWxjIHF3KDphbGwpOwp1c2UgS2VybmVsOjpTeXN0ZW06OkNhbGVuZGFyRXZlbnQ7Cgp1c2UgdmFycyBxdygkVkVSU0lPTik7CiRWRVJTSU9OID0gJyRSZXZpc2lvbjogMS42ICQnOwokVkVSU0lPTiA9fiBzL15cJC4qOlxXKC4qKVxXLis/JC8kMS87CgpzdWIgbmV3IHsKICAgIG15ICRUeXBlID0gc2hpZnQ7CiAgICBteSAlUGFyYW0gPSBAXzsKCiAgICAjIGFsbG9jYXRlIG5ldyBoYXNoIGZvciBvYmplY3QKICAgIG15ICRTZWxmID0ge307CiAgICBibGVzcyAoJFNlbGYsICRUeXBlKTsKCiAgICAjIGdldCBuZWVkZWQgb2JqZWN0cwogICAgZm9yZWFjaCAocXcoQ29uZmlnT2JqZWN0IExvZ09iamVjdCBEQk9iamVjdCBMYXlvdXRPYmplY3QgVGltZU9iamVjdCBVc2VySUQpKSB7CiAgICAgICAgJFNlbGYtPnskX30gPSAkUGFyYW17JF99IHx8IGRpZSAiR290IG5vICRfISI7CiAgICB9CgogICAgJFNlbGYtPntDYWxlbmRhckV2ZW50T2JqZWN0fSA9IEtlcm5lbDo6U3lzdGVtOjpDYWxlbmRhckV2ZW50LT5uZXcoJVBhcmFtKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgJFNlbGYgPSBzaGlmdDsKICAgIG15ICVQYXJhbSA9IEBfOwoKICAgICMgY2hlY2sgcGVybWlzc2lvbgogICAgaWYgKCRTZWxmLT57QWNjZXNzUm99KSB7CiAgICAgICAgcmV0dXJuOwogICAgfQoKICAgICMgZ2V0IHRpbWUgcmFuZ2UKICAgIG15ICgkU2VjLCAkTWluLCAkSG91ciwgJERheSwgJE1vbnRoLCAkWWVhcikgPSAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lMkRhdGUoCiAgICAgICAgU3lzdGVtVGltZSA9PiAkU2VsZi0+e1RpbWVPYmplY3R9LT5TeXN0ZW1UaW1lKCksCiAgICApOwogICAgbXkgKCRFU2VjLCAkRU1pbiwgJEVIb3VyLCAkRURheSwgJEVNb250aCwgJEVZZWFyKSA9ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUyRGF0ZSgKICAgICAgICBTeXN0ZW1UaW1lID0+ICRTZWxmLT57VGltZU9iamVjdH0tPlN5c3RlbVRpbWUoKSsoNjAqNjAqMjQqNyksCiAgICApOwoKICAgICMgZ2V0IGV2ZW50cwogICAgbXkgQEV2ZW50SURzID0gJFNlbGYtPntDYWxlbmRhckV2ZW50T2JqZWN0fS0+RXZlbnRzKAogICAgICAgIFN0YXJ0VGltZSA9PiAiJFllYXItJE1vbnRoLSREYXkgJEhvdXI6JE1pbjokU2VjIiwKICAgIC