ITSMCore
1.0.1
OTRS GmbH
http://otrs.org/
GNU GENERAL PUBLIC LICENSE Version 2, June 1991
Build for OTRS::ITSM 1.0.1.
Build for OTRS::ITSM 1.0.0 rc2.
Build for OTRS::ITSM 1.0.0 rc1.
Build for OTRS::ITSM 1.0.0 beta4.
Build for OTRS::ITSM 1.0.0 beta3.
Update version number of package.
Testbuild for OTRS::ITSM 1.0.0 beta2.
Updated "PackageRequired" in sopm file.
Code cleanup.
Code cleanup.
Fixed db insert creations.
Fixed db insert creations.
Code cleanup.
Init release.
The OTRS::ITSM core package.
Das OTRS::ITSM Core Paket.
2.2.x
GeneralCatalog
LinkObject2
# change background color of standard theme
my $CssFile = $Self->{ConfigObject}->Get('Home') . "/Kernel/Output/HTML/Standard/css.dtl";
if (!-e $CssFile . ".save" && open (IN, "< $CssFile")) {
my $Content = '';
while (<IN>) {
if ($_ =~ /^body /) {
$_ =~ s/background-color\:\#bbddff\;/background-color\:\#003399\;/;
}
$Content .= $_;
}
close (IN);
if (open (OUT, "> $CssFile")) {
binmode(OUT);
print OUT $Content;
close (OUT);
}
}
# change background color of standard theme back to original
my $CssFile = $Self->{ConfigObject}->Get('Home') . "/Kernel/Output/HTML/Standard/css.dtl";
if (!-e $CssFile . ".save" && open (IN, "< $CssFile")) {
my $Content = '';
while (<IN>) {
if ($_ =~ /^body /) {
$_ =~ s/background-color\:\#003399\;/background-color\:\#bbddff\;/;
}
$Content .= $_;
}
close (IN);
if (open (OUT, "> $CssFile")) {
binmode(OUT);
print OUT $Content;
close (OUT);
}
}
2007-07-02 17:58:04
opms.otrs.com
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSIgPz4KPG90cnNfY29uZmlnIHZlcnNpb249IjEuMCIgaW5pdD0iRnJhbWV3b3JrIj4KICAgIDxDVlM+JElkOiBGcmFtZXdvcmtJVFNNQ29yZS54bWwsdiAxLjEwIDIwMDcvMDcvMDIgMTU6NTY6NTggbWggRXhwICQ8L0NWUz4KICAgIDxDVlM+JE9sZElkOiBGcmFtZXdvcmsueG1sLHYgMS4xNDQgMjAwNy8wNi8xMiAxNTowMzozMCBtaCBFeHAgJDwvQ1ZTPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iUHJvZHVjdE5hbWUiIFJlcXVpcmVkPSIxIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIExhbmc9ImVuIj5UaGUgbmFtZSBvZiB0aGUgYXBwbGljYXRpb24gdGhhdCBpcyBzaG93biBpbiB0aGUgZnJvbnRlbmQuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8RGVzY3JpcHRpb24gTGFuZz0iZGUiPkltIFdlYkZyb250ZW5kIGFuZ2V6ZWlndGVyIE5hbWUgZGVyIFNvZnR3YXJlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8U3RyaW5nIFJlZ2V4PSIiPk9UUlM6OklUU00gMS4wLjE8L1N0cmluZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJQYWNrYWdlOjpSZXBvc2l0b3J5TGlzdCIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gTGFuZz0iZW4iPkxpc3Qgb2Ygb25saW5lIHJlcG9zaXRvcmllcyAoZm9yIGV4YW1wbGUgeW91IGFsc28gY2FuIHVzZSBvdGhlciBpbnN0YWxsYXRpb25zIGFzIHJlcG9zaXRvcml5IGJ5IHVzaW5nIEtleT0iaHR0cDovL2V4YW1wbGUuY29tL290cnMvcHVibGljLnBsP0FjdGlvbj1QdWJsaWNSZXBvc2l0b3J5JmFtcDtGaWxlPSIgYW5kIENvbnRlbnQ9IlNvbWUgTmFtZSIpLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPERlc2NyaXB0aW9uIExhbmc9ImRlIj5MaXN0ZSBkZXIgenVyIFZlcmb8Z3VuZyBzdGVoZW5kZW4gT25saW5lLVF1ZWxsZW4gKGVzIGtvZW5uZW4gei4gQi4gYXVjaCBhbmRlcmUgSW5zdGFsbGF0aW9uZW4gYWxzIE9ubGluZS1RdWVsbGVuIHZlcndlbmRldCB3ZXJkZW4gbWl0IGRlciBWZXJ3ZW5kdW5nIHZvbiBLZXk9Imh0dHA6Ly9leGFtcGxlLmNvbS9vdHJzL3B1YmxpYy5wbD9BY3Rpb249UHVibGljUmVwb3NpdG9yeSZhbXA7RmlsZT0iIGFuZCBDb250ZW50PSJFaW4gTmFtZSIpLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OlBhY2thZ2U8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iaHR0cDovL2Z0cC5vdHJzLm9yZy9wdWIvb3Rycy9pdHNtL3BhY2thZ2VzLyI+Wy0tT1RSUzo6SVRTTSBNYXN0ZXItLV0gaHR0cDovL2Z0cC5vdHJzLm9yZy88L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+Cjwvb3Ryc19jb25maWc+
PD94bWwgdmVyc2lvbj0iMS4wIiBlbmNvZGluZz0iaXNvLTg4NTktMSIgPz4KPG90cnNfY29uZmlnIHZlcnNpb249IjEuMCIgaW5pdD0iQ29uZmlnIj4KICAgIDxDVlM+JElkOiBJVFNNQ29yZS54bWwsdiAxLjUgMjAwNy8wNC8xNiAxMDo1MDozNyBtaCBFeHAgJDwvQ1ZTPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iRnJvbnRlbmQ6Ok1vZHVsZSMjI0FkbWluVGlja2V0UHJpb3JpdHkiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIExhbmc9ImVuIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5UaWNrZXRQcmlvcml0eSBjb25maWd1cmF0aW9uIGluIHRoZSBhZG1pbiBhcmVhLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPERlc2NyaXB0aW9uIExhbmc9ImRlIj5Gcm9udGVuZG1vZHVsLVJlZ2lzdHJhdGlvbiBkZXIgQWRtaW5UaWNrZXRQcmlvcml0eSBLb25maWd1cmF0aW9uIGltIEFkbWluLUJlcmVpY2guPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+VGlja2V0PC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFkbWluOjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXA+YWRtaW48L0dyb3VwPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPkFkbWluPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxUaXRsZT5Qcmlvcml0eTwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5BZG1pbjwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgICAgIDxOYXZCYXJNb2R1bGU+CiAgICAgICAgICAgICAgICAgICAgPE1vZHVsZT5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6TmF2QmFyTW9kdWxlQWRtaW48L01vZHVsZT4KICAgICAgICAgICAgICAgICAgICA8TmFtZT5Qcmlvcml0eTwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8QmxvY2s+QmxvY2szPC9CbG9jaz4KICAgICAgICAgICAgICAgICAgICA8UHJpbz40MjA8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhck1vZHVsZT4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJGcm9udGVuZDo6TW9kdWxlIyMjQWRtaW5JVFNNQ0lQQWxsb2NhdGUiIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIExhbmc9ImVuIj5Gcm9udGVuZCBtb2R1bGUgcmVnaXN0cmF0aW9uIGZvciB0aGUgQWRtaW5JVFNNQ0lQQWxsb2NhdGUgY29uZmlndXJhdGlvbiBpbiB0aGUgYWRtaW4gYXJlYS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxEZXNjcmlwdGlvbiBMYW5nPSJkZSI+RnJvbnRlbmRtb2R1bC1SZWdpc3RyYXRpb24gZGVyIEFkbWluSVRTTUNJUEFsbG9jYXRlIEtvbmZpZ3VyYXRpb24gaW0gQWRtaW4tQmVyZWljaC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5JVFNNPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+RnJvbnRlbmQ6OkFkbWluOjpNb2R1bGVSZWdpc3RyYXRpb248L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8RnJvbnRlbmRNb2R1bGVSZWc+CiAgICAgICAgICAgICAgICA8R3JvdXA+YWRtaW48L0dyb3VwPgogICAgICAgICAgICAgICAgPERlc2NyaXB0aW9uPkFkbWluPC9EZXNjcmlwdGlvbj4KICAgICAgICAgICAgICAgIDxUaXRsZT5Dcml0aWNhbGl0eSAmbHQ7LSZndDsgSW1wYWN0ICZsdDstJmd0OyBQcmlvcml0eTwvVGl0bGU+CiAgICAgICAgICAgICAgICA8TmF2QmFyTmFtZT5BZG1pbjwvTmF2QmFyTmFtZT4KICAgICAgICAgICAgICAgIDxOYXZCYXJNb2R1bGU+CiAgICAgICAgICAgICAgICAgICAgPE1vZHVsZT5LZXJuZWw6Ok91dHB1dDo6SFRNTDo6TmF2QmFyTW9kdWxlQWRtaW48L01vZHVsZT4KICAgICAgICAgICAgICAgICAgICA8TmFtZT5Dcml0aWNhbGl0eSAmbHQ7LSZndDsgSW1wYWN0ICZsdDstJmd0OyBQcmlvcml0eTwvTmFtZT4KICAgICAgICAgICAgICAgICAgICA8QmxvY2s+QmxvY2szPC9CbG9jaz4KICAgICAgICAgICAgICAgICAgICA8UHJpbz40MzA8L1ByaW8+CiAgICAgICAgICAgICAgICA8L05hdkJhck1vZHVsZT4KICAgICAgICAgICAgPC9Gcm9udGVuZE1vZHVsZVJlZz4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0Mjo6VHlwZSMjI1JlbGV2YW50VG8iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIExhbmc9ImVuIj5MaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8RGVzY3JpcHRpb24gTGFuZz0iZGUiPkxpbmsgVHlwLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3QyOjpUeXBlczwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOb3JtYWxOYW1lIj5SZWxldmFudCB0bzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUmV2ZXJzZU5hbWUiPlJlbGV2YW50IHRvPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgogICAgPENvbmZpZ0l0ZW0gTmFtZT0iTGlua09iamVjdDI6OlR5cGUjIyNJbmNsdWRlcyIgUmVxdWlyZWQ9IjAiIFZhbGlkPSIxIj4KICAgICAgICA8RGVzY3JpcHRpb24gTGFuZz0iZW4iPkxpbmsgdHlwZS48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxEZXNjcmlwdGlvbiBMYW5nPSJkZSI+TGluayBUeXAuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8R3JvdXA+RnJhbWV3b3JrPC9Hcm91cD4KICAgICAgICA8U3ViR3JvdXA+Q29yZTo6TGlua09iamVjdDI6OlR5cGVzPC9TdWJHcm91cD4KICAgICAgICA8U2V0dGluZz4KICAgICAgICAgICAgPEhhc2g+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9Ik5vcm1hbE5hbWUiPkluY2x1ZGVzPC9JdGVtPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJSZXZlcnNlTmFtZSI+UGFydCBvZjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3QyOjpUeXBlIyMjRGVwZW5kc09uIiBSZXF1aXJlZD0iMCIgVmFsaWQ9IjEiPgogICAgICAgIDxEZXNjcmlwdGlvbiBMYW5nPSJlbiI+TGluayB0eXBlLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPERlc2NyaXB0aW9uIExhbmc9ImRlIj5MaW5rIFR5cC48L0Rlc2NyaXB0aW9uPgogICAgICAgIDxHcm91cD5GcmFtZXdvcms8L0dyb3VwPgogICAgICAgIDxTdWJHcm91cD5Db3JlOjpMaW5rT2JqZWN0Mjo6VHlwZXM8L1N1Ykdyb3VwPgogICAgICAgIDxTZXR0aW5nPgogICAgICAgICAgICA8SGFzaD4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iTm9ybWFsTmFtZSI+RGVwZW5kcyBvbjwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUmV2ZXJzZU5hbWUiPlJlcXVpcmVkIGZvcjwvSXRlbT4KICAgICAgICAgICAgPC9IYXNoPgogICAgICAgIDwvU2V0dGluZz4KICAgIDwvQ29uZmlnSXRlbT4KICAgIDxDb25maWdJdGVtIE5hbWU9IkxpbmtPYmplY3QyOjpUeXBlIyMjQ29ubmVjdGVkVG8iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIExhbmc9ImVuIj5MaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8RGVzY3JpcHRpb24gTGFuZz0iZGUiPkxpbmsgVHlwLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3QyOjpUeXBlczwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOb3JtYWxOYW1lIj5Db25uZWN0ZWQgdG88L0l0ZW0+CiAgICAgICAgICAgICAgICA8SXRlbSBLZXk9IlJldmVyc2VOYW1lIj5Db25uZWN0ZWQgdG88L0l0ZW0+CiAgICAgICAgICAgIDwvSGFzaD4KICAgICAgICA8L1NldHRpbmc+CiAgICA8L0NvbmZpZ0l0ZW0+CiAgICA8Q29uZmlnSXRlbSBOYW1lPSJMaW5rT2JqZWN0Mjo6VHlwZSMjI0FsdGVybmF0aXZlVG8iIFJlcXVpcmVkPSIwIiBWYWxpZD0iMSI+CiAgICAgICAgPERlc2NyaXB0aW9uIExhbmc9ImVuIj5MaW5rIHR5cGUuPC9EZXNjcmlwdGlvbj4KICAgICAgICA8RGVzY3JpcHRpb24gTGFuZz0iZGUiPkxpbmsgVHlwLjwvRGVzY3JpcHRpb24+CiAgICAgICAgPEdyb3VwPkZyYW1ld29yazwvR3JvdXA+CiAgICAgICAgPFN1Ykdyb3VwPkNvcmU6OkxpbmtPYmplY3QyOjpUeXBlczwvU3ViR3JvdXA+CiAgICAgICAgPFNldHRpbmc+CiAgICAgICAgICAgIDxIYXNoPgogICAgICAgICAgICAgICAgPEl0ZW0gS2V5PSJOb3JtYWxOYW1lIj5BbHRlcm5hdGl2ZSB0bzwvSXRlbT4KICAgICAgICAgICAgICAgIDxJdGVtIEtleT0iUmV2ZXJzZU5hbWUiPkFsdGVybmF0aXZlIHRvPC9JdGVtPgogICAgICAgICAgICA8L0hhc2g+CiAgICAgICAgPC9TZXR0aW5nPgogICAgPC9Db25maWdJdGVtPgo8L290cnNfY29uZmlnPg==
IyAtLQojIEtlcm5lbC9MYW5ndWFnZS9kZV9JVFNNQ29yZS5wbSAtIHRoZSBnZXJtYW4gdHJhbnNsYXRpb24gb2YgSVRTTUNvcmUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNyBPVFJTIEdtYkgsIGh0dHA6Ly9vdHJzLm9yZy8KIyAtLQojICRJZDogZGVfSVRTTUNvcmUucG0sdiAxLjYgMjAwNy8wNy8wMiAxMzoyOToyMCBtaCBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpMYW5ndWFnZTo6ZGVfSVRTTUNvcmU7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7CgpzdWIgRGF0YSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwoKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1ByaW9yaXR5IE1hbmFnZW1lbnQnfSA9ICdQcmlvcml05HQgVmVyd2FsdHVuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgYSBuZXcgUHJpb3JpdHkuJ30gPSAnRWluZSBuZXVlIFByaW9yaXTkdCBoaW56dWb8Z2VuLic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBZGQgUHJpb3JpdHknfSA9ICdQcmlvcml05HQgaGluenVm/Gdlbic7CgogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ3JpdGljYWxpdHknfSA9ICdLcml0aWthbGl05HQnOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnSW1wYWN0J30gPSAnQXVzd2lya3VuZyc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydDcml0aWNhbGl0eSA8LT4gSW1wYWN0IDwtPiBQcmlvcml0eSd9ID0gJ0tyaXRpa2FsaXTkdCA8LT4gQXVzd2lya3VuZyA8LT4gUHJpb3JpdOR0JzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J2FsbG9jYXRlJ30gPSAnenVvcmRuZW4nOwoKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J1JlbGV2YW50IHRvJ30gPSAnUmVsZXZhbnQgZvxyJzsKICAgICRTZWxmLT57VHJhbnNsYXRpb259LT57J0luY2x1ZGVzJ30gPSAnQmVpbmhhbHRldCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydQYXJ0IG9mJ30gPSAnVGVpbCB2b24nOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnRGVwZW5kcyBvbid9ID0gJ0jkbmd0IGFiIHZvbic7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydSZXF1aXJlZCBmb3InfSA9ICdCZW72dGlndCBm/HInOwogICAgJFNlbGYtPntUcmFuc2xhdGlvbn0tPnsnQ29ubmVjdGVkIHRvJ30gPSAnVmVyYnVuZGVuIG1pdCc7CiAgICAkU2VsZi0+e1RyYW5zbGF0aW9ufS0+eydBbHRlcm5hdGl2ZSB0byd9ID0gJ0FsdGVybmF0aXYgenUnOwoKICAgIHJldHVybiAxOwp9CgoxOw==
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FkbWluSVRTTUNJUEFsbG9jYXRlLnBtIC0gYWRtaW4gZnJvbnRlbmQgb2YgY3JpdGljYWxpdHksIGltcGFjdCBhbmQgcHJpb3JpdHkKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNyBPVFJTIEdtYkgsIGh0dHA6Ly9vdHJzLm9yZy8KIyAtLQojICRJZDogQWRtaW5JVFNNQ0lQQWxsb2NhdGUucG0sdiAxLjIgMjAwNy8wNy8wMiAxMzoyOToyMCBtaCBFeHAgJAojIC0tCiMgVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKIyB0aGUgZW5jbG9zZWQgZmlsZSBDT1BZSU5HIGZvciBsaWNlbnNlIGluZm9ybWF0aW9uIChHUEwpLiBJZiB5b3UKIyBkaWQgbm90IHJlY2VpdmUgdGhpcyBmaWxlLCBzZWUgaHR0cDovL3d3dy5nbnUub3JnL2xpY2Vuc2VzL2dwbC50eHQuCiMgLS0KCnBhY2thZ2UgS2VybmVsOjpNb2R1bGVzOjpBZG1pbklUU01DSVBBbGxvY2F0ZTsKCnVzZSBzdHJpY3Q7CnVzZSB3YXJuaW5nczsKCnVzZSBLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2c7CnVzZSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNJUEFsbG9jYXRlOwp1c2UgS2VybmVsOjpTeXN0ZW06OlByaW9yaXR5Owp1c2UgS2VybmVsOjpTeXN0ZW06OlZhbGlkOwoKdXNlIHZhcnMgcXcoJFZFUlNJT04pOwokVkVSU0lPTiA9ICckUmV2aXNpb246IDEuMiAkJzsKJFZFUlNJT04gPX4gcy9eXCQuKjpcVyguKilcVy4rPyQvJDEvOwoKc3ViIG5ldyB7CiAgICBteSAkVHlwZSA9IHNoaWZ0OwogICAgbXkgJVBhcmFtID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MgKCRTZWxmLCAkVHlwZSk7CgogICAgIyBnZXQgY29tbW9uIG9wamVjdHMKICAgIGZvcmVhY2ggKGtleXMgJVBhcmFtKSB7CiAgICAgICAgJFNlbGYtPnskX30gPSAkUGFyYW17JF99OwogICAgfQoKICAgICMgY2hlY2sgYWxsIG5lZWRlZCBvYmplY3RzCiAgICBmb3JlYWNoIChxdyhDb25maWdPYmplY3QgUGFyYW1PYmplY3QgTG9nT2JqZWN0IExheW91dE9iamVjdCkpIHsKICAgICAgICBpZiAoISRTZWxmLT57JF99KSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvcihNZXNzYWdlID0+ICJHb3Qgbm8gJF8hIik7CiAgICAgICAgfQogICAgfQogICAgJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6R2VuZXJhbENhdGFsb2ctPm5ldyglUGFyYW0pOwogICAgJFNlbGYtPntDSVBBbGxvY2F0ZU9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNJUEFsbG9jYXRlLT5uZXcoJVBhcmFtKTsKICAgICRTZWxmLT57UHJpb3JpdHlPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OlByaW9yaXR5LT5uZXcoJVBhcmFtKTsKICAgICRTZWxmLT57VmFsaWRPYmplY3R9ID0gS2VybmVsOjpTeXN0ZW06OlZhbGlkLT5uZXcoJVBhcmFtKTsKCiAgICByZXR1cm4gJFNlbGY7Cn0KCnN1YiBSdW4gewogICAgbXkgJFNlbGYgPSBzaGlmdDsKICAgIG15ICVQYXJhbSA9IEBfOwoKICAgICMgLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tICMKICAgICMgY3JpdGljYWxpdHksIGltcGFjdCBhbmQgcHJpb3JpdHkgYWxsb2NhdGlvbgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgaWYgKCRTZWxmLT57U3ViYWN0aW9ufSBlcSAnQ0lQQWxsb2NhdGUnKSB7CiAgICAgICAgIyBnZXQgb3B0aW9uIGxpc3RzCiAgICAgICAgbXkgJU9iamVjdE9wdGlvbjsKICAgICAgICAkT2JqZWN0T3B0aW9ue0NyaXRpY2FsaXR5TGlzdH0gPSAkU2VsZi0+e0dlbmVyYWxDYXRhbG9nT2JqZWN0fS0+SXRlbUxpc3QoCiAgICAgICAgICAgIENsYXNzID0+ICdJVFNNOjpDb3JlOjpDcml0aWNhbGl0eScsCiAgICAgICAgKTsKICAgICAgICAkT2JqZWN0T3B0aW9ue0ltcGFjdExpc3R9ID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1MaXN0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29yZTo6SW1wYWN0JywKICAgICAgICApOwogICAgICAgIG15ICVPcHRpb25Qcmlvcml0eUxpc3QgPSAkU2VsZi0+e1ByaW9yaXR5T2JqZWN0fS0+UHJpb3JpdHlMaXN0KFVzZXJJRCA9PiAxKTsKICAgICAgICAkT2JqZWN0T3B0aW9ue1ByaW9yaXR5TGlzdH0gPSBcJU9wdGlvblByaW9yaXR5TGlzdDsKCiAgICAgICAgIyBnZXQgYWxsIFByaW9yaXR5SURzIG9mIHRoZSBtYXRyaXgKICAgICAgICBteSAkQWxsb2NhdGVEYXRhOwogICAgICAgIGZvcmVhY2ggbXkgJEltcGFjdElEIChzb3J0IGtleXMgJXskT2JqZWN0T3B0aW9ue0ltcGFjdExpc3R9fSkgewogICAgICAgICAgICBmb3JlYWNoIG15ICRDcml0aWNhbGl0eUlEIChzb3J0IGtleXMgJXskT2JqZWN0T3B0aW9ue0NyaXRpY2FsaXR5TGlzdH19KSB7CiAgICAgICAgICAgICAgICBteSAkUHJpb3JpdHlJRCA9ICRTZWxmLT57UGFyYW1PYmplY3R9LT5HZXRQYXJhbSgKICAgICAgICAgICAgICAgICAgICBQYXJhbSA9PiAiUHJpb3JpdHlJRCIgLiAkSW1wYWN0SUQgLictJy4gJENyaXRpY2FsaXR5SUQsCiAgICAgICAgICAgICAgICApIHx8ICcnOwoKICAgICAgICAgICAgICAgIGlmICgkUHJpb3JpdHlJRCkgewogICAgICAgICAgICAgICAgICAgICRBbGxvY2F0ZURhdGEtPnskSW1wYWN0SUR9LT57JENyaXRpY2FsaXR5SUR9ID0gJFByaW9yaXR5SUQ7CiAgICAgICAgICAgICAgICB9CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgIyB1cGRhdGUgYWxsb2NhdGlvbnMKICAgICAgICAkU2VsZi0+e0NJUEFsbG9jYXRlT2JqZWN0fS0+QWxsb2NhdGVVcGRhdGUoCiAgICAgICAgICAgIEFsbG9jYXRlRGF0YSA9PiAkQWxsb2NhdGVEYXRhLAogICAgICAgICAgICBVc2VySUQgPT4gMSwKICAgICAgICApOwogICAgICAgIHJldHVybiAkU2VsZi0+e0xheW91dE9iamVjdH0tPlJlZGlyZWN0KE9QID0+ICJBY3Rpb249JFNlbGYtPntBY3Rpb259Iik7CiAgICB9CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICAjIG92ZXJ2aWV3CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNlIHsKICAgICAgICAjIG91dHB1dCBoZWFkZXIgYW5kIG5hdmJhcgogICAgICAgIG15ICRPdXRwdXQgPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkhlYWRlcigpOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5OYXZpZ2F0aW9uQmFyKCk7CgogICAgICAgICMgZ2V0IG9wdGlvbiBsaXN0cwogICAgICAgIG15ICVPYmplY3RPcHRpb247CiAgICAgICAgJE9iamVjdE9wdGlvbntDcml0aWNhbGl0eUxpc3R9ID0gJFNlbGYtPntHZW5lcmFsQ2F0YWxvZ09iamVjdH0tPkl0ZW1MaXN0KAogICAgICAgICAgICBDbGFzcyA9PiAnSVRTTTo6Q29yZTo6Q3JpdGljYWxpdHknLAogICAgICAgICk7CiAgICAgICAgJE9iamVjdE9wdGlvbntJbXBhY3RMaXN0fSA9ICRTZWxmLT57R2VuZXJhbENhdGFsb2dPYmplY3R9LT5JdGVtTGlzdCgKICAgICAgICAgICAgQ2xhc3MgPT4gJ0lUU006OkNvcmU6OkltcGFjdCcsCiAgICAgICAgKTsKICAgICAgICBteSAlT3B0aW9uUHJpb3JpdHlMaXN0ID0gJFNlbGYtPntQcmlvcml0eU9iamVjdH0tPlByaW9yaXR5TGlzdChVc2VySUQgPT4gMSk7CiAgICAgICAgJE9iamVjdE9wdGlvbntQcmlvcml0eUxpc3R9ID0gXCVPcHRpb25Qcmlvcml0eUxpc3Q7CgogICAgICAgICMgZ2V0IGFsbG9jYXRpb24gZGF0YQogICAgICAgIG15ICRBbGxvY2F0ZURhdGEgPSAkU2VsZi0+e0NJUEFsbG9jYXRlT2JqZWN0fS0+QWxsb2NhdGVMaXN0KFVzZXJJRCA9PiAxKTsKCiAgICAgICAgbXkgJEFsbG9jYXRlTWF0cml4OwogICAgICAgICRBbGxvY2F0ZU1hdHJpeC0+WzBdLT5bMF0tPntDbGFzc30gPSAnRGVzY3JpcHRpb24nOwogICAgICAgICMgZ2VuZXJhdGUgdGFibGUgZGVzY3JpcHRpb24gKEltcGFjdCkKICAgICAgICBteSAkQ291bnRlcjEgPSAxOwogICAgICAgIGZvcmVhY2ggKHNvcnQgeyRPYmplY3RPcHRpb257SW1wYWN0TGlzdH0tPnskYX0gY21wICRPYmplY3RPcHRpb257SW1wYWN0TGlzdH0tPnskYn19IGtleXMgJXskT2JqZWN0T3B0aW9ue0ltcGFjdExpc3R9fSkgewogICAgICAgICAgICAkQWxsb2NhdGVNYXRyaXgtPlskQ291bnRlcjFdLT5bMF0tPntPYmplY3RUeXBlfSA9ICdJbXBhY3QnOwogICAgICAgICAgICAkQWxsb2NhdGVNYXRyaXgtPlskQ291bnRlcjFdLT5bMF0tPntJbXBhY3RLZXl9ID0gJF87CiAgICAgICAgICAgICRBbGxvY2F0ZU1hdHJpeC0+WyRDb3VudGVyMV0tPlswXS0+e09iamVjdE9wdGlvbn0gPSAkT2JqZWN0T3B0aW9ue0ltcGFjdExpc3R9eyRffTsKICAgICAgICAgICAgJEFsbG9jYXRlTWF0cml4LT5bJENvdW50ZXIxXS0+WzBdLT57Q2xhc3N9ID0gJ0Rlc2NyaXB0aW9uJzsKICAgICAgICAgICAgJENvdW50ZXIxKys7CiAgICAgICAgfQogICAgICAgICMgZ2VuZXJhdGUgdGFibGUgZGVzY3JpcHRpb24gKENyaXRpY2FsaXR5KQogICAgICAgIG15ICRDb3VudGVyMiA9IDE7CiAgICAgICAgZm9yZWFjaCAoc29ydCB7JE9iamVjdE9wdGlvbntDcml0aWNhbGl0eUxpc3R9LT57JGF9IGNtcCAkT2JqZWN0T3B0aW9ue0NyaXRpY2FsaXR5TGlzdH0tPnskYn19IGtleXMgJXskT2JqZWN0T3B0aW9ue0NyaXRpY2FsaXR5TGlzdH19KSB7CiAgICAgICAgICAgICRBbGxvY2F0ZU1hdHJpeC0+WzBdLT5bJENvdW50ZXIyXS0+e09iamVjdFR5cGV9ID0gJ0NyaXRpY2FsaXR5JzsKICAgICAgICAgICAgJEFsbG9jYXRlTWF0cml4LT5bMF0tPlskQ291bnRlcjJdLT57Q3JpdGljYWxpdHlLZXl9ID0gJF87CiAgICAgICAgICAgICRBbGxvY2F0ZU1hdHJpeC0+WzBdLT5bJENvdW50ZXIyXS0+e09iamVjdE9wdGlvbn0gPSAkT2JqZWN0T3B0aW9ue0NyaXRpY2FsaXR5TGlzdH17JF99OwogICAgICAgICAgICAkQWxsb2NhdGVNYXRyaXgtPlswXS0+WyRDb3VudGVyMl0tPntDbGFzc30gPSAnRGVzY3JpcHRpb24nOwogICAgICAgICAgICAkQ291bnRlcjIrKzsKICAgICAgICB9CiAgICAgICAgIyBnZW5lcmF0ZSBjb250ZW50CiAgICAgICAgZm9yZWFjaCBteSAkUm93ICgxLi4oJENvdW50ZXIxLTEpKSB7CiAgICAgICAgICAgIGZvcmVhY2ggbXkgJENvbHVtbiAoMS4uKCRDb3VudGVyMi0xKSkgewogICAgICAgICAgICAgICAgJEFsbG9jYXRlTWF0cml4LT5bJFJvd10tPlskQ29sdW1uXS0+e0NsYXNzfSA9ICdDb250ZW50JzsKICAgICAgICAgICAgICAgICRBbGxvY2F0ZU1hdHJpeC0+WyRSb3ddLT5bJENvbHVtbl0tPntPcHRpb25TdHJnfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3B0aW9uU3RyZ0hhc2hSZWYoCiAgICAgICAgICAgICAgICAgICAgTmFtZSA9PiAnUHJpb3JpdHlJRCcuCiAgICAgICAgICAgICAgICAgICAgICAgICRBbGxvY2F0ZU1hdHJpeC0+WyRSb3ddLT5bMF0tPntJbXBhY3RLZXl9LictJy4KICAgICAgICAgICAgICAgICAgICAgICAgJEFsbG9jYXRlTWF0cml4LT5bMF0tPlskQ29sdW1uXS0+e0NyaXRpY2FsaXR5S2V5fSwKICAgICAgICAgICAgICAgICAgICBEYXRhID0+ICRPYmplY3RPcHRpb257UHJpb3JpdHlMaXN0fSwKICAgICAgICAgICAgICAgICAgICBTZWxlY3RlZElEID0+ICRBbGxvY2F0ZURhdGEtPnskQWxsb2NhdGVNYXRyaXgtPlskUm93XS0+WzBdLT57SW1wYWN0S2V5fX17JEFsbG9jYXRlTWF0cml4LT5bMF0tPlskQ29sdW1uXS0+e0NyaXRpY2FsaXR5S2V5fX0gfHwgJycsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICMgb3V0cHV0IGFsbG9jYXRpb24gbWF0cml4CiAgICAgICAgZm9yZWFjaCBteSAkUm93UmVmIChAeyRBbGxvY2F0ZU1hdHJpeH0pIHsKICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgIE5hbWUgPT4gJ0NJUEFsbG9jYXRlUm93JywKICAgICAgICAgICAgKTsKICAgICAgICAgICAgZm9yZWFjaCBteSAkQ2VsbCAoQHskUm93UmVmfSkgewogICAgICAgICAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgICAgICAgICBOYW1lID0+ICdDSVBBbGxvY2F0ZVJvd0NvbHVtbicuICRDZWxsLT57Q2xhc3N9LAogICAgICAgICAgICAgICAgICAgIERhdGEgPT4gJENlbGwsCiAgICAgICAgICAgICAgICApOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICMgc3RhcnQgdGVtcGxhdGUgb3V0cHV0CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pbklUU01DSVBBbGxvY2F0ZScsCiAgICAgICAgICAgIERhdGEgPT4gXCVQYXJhbSwKICAgICAgICApOwogICAgICAgICRPdXRwdXQgLj0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5Gb290ZXIoKTsKICAgICAgICByZXR1cm4gJE91dHB1dDsKICAgIH0KfQoKMTs=
IyAtLQojIEtlcm5lbC9Nb2R1bGVzL0FkbWluVGlja2V0UHJpb3JpdHkucG0gLSBhZG1pbiBmcm9udGVuZCBvZiB0aWNrZXQgcHJpb3JpdHkKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNyBPVFJTIEdtYkgsIGh0dHA6Ly9vdHJzLm9yZy8KIyAtLQojICRJZDogQWRtaW5UaWNrZXRQcmlvcml0eS5wbSx2IDEuNCAyMDA3LzA3LzAyIDEzOjI5OjIwIG1oIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6Ok1vZHVsZXM6OkFkbWluVGlja2V0UHJpb3JpdHk7Cgp1c2Ugc3RyaWN0Owp1c2Ugd2FybmluZ3M7Cgp1c2UgS2VybmVsOjpTeXN0ZW06OlByaW9yaXR5Owp1c2UgS2VybmVsOjpTeXN0ZW06OlZhbGlkOwoKdXNlIHZhcnMgcXcoJFZFUlNJT04pOwokVkVSU0lPTiA9ICckUmV2aXNpb246IDEuNCAkJzsKJFZFUlNJT04gPX4gcy9eXCQuKjpcVyguKilcVy4rPyQvJDEvOwoKc3ViIG5ldyB7CiAgICBteSAkVHlwZSA9IHNoaWZ0OwogICAgbXkgJVBhcmFtID0gQF87CgogICAgIyBhbGxvY2F0ZSBuZXcgaGFzaCBmb3Igb2JqZWN0CiAgICBteSAkU2VsZiA9IHt9OwogICAgYmxlc3MgKCRTZWxmLCAkVHlwZSk7CgogICAgIyBnZXQgY29tbW9uIG9wamVjdHMKICAgIGZvcmVhY2ggKGtleXMgJVBhcmFtKSB7CiAgICAgICAgJFNlbGYtPnskX30gPSAkUGFyYW17JF99OwogICAgfQoKICAgICMgY2hlY2sgYWxsIG5lZWRlZCBvYmplY3RzCiAgICBmb3JlYWNoIChxdyhDb25maWdPYmplY3QgUGFyYW1PYmplY3QgTG9nT2JqZWN0IExheW91dE9iamVjdCkpIHsKICAgICAgICBpZiAoISRTZWxmLT57JF99KSB7CiAgICAgICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+RmF0YWxFcnJvcihNZXNzYWdlID0+ICJHb3Qgbm8gJF8hIik7CiAgICAgICAgfQogICAgfQogICAgJFNlbGYtPntQcmlvcml0eU9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6UHJpb3JpdHktPm5ldyglUGFyYW0pOwogICAgJFNlbGYtPntWYWxpZE9iamVjdH0gPSBLZXJuZWw6OlN5c3RlbTo6VmFsaWQtPm5ldyglUGFyYW0pOwoKICAgIHJldHVybiAkU2VsZjsKfQoKc3ViIFJ1biB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwogICAgbXkgJVBhcmFtID0gQF87CgogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBwcmlvcml0eSBlZGl0CiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBpZiAoJFNlbGYtPntTdWJhY3Rpb259IGVxICdQcmlvcml0eUVkaXQnKSB7CiAgICAgICAgbXkgJVByaW9yaXR5RGF0YTsKICAgICAgICAjIGdldCBwYXJhbXMKICAgICAgICAkUHJpb3JpdHlEYXRhe1ByaW9yaXR5SUR9ID0gJFNlbGYtPntQYXJhbU9iamVjdH0tPkdldFBhcmFtKFBhcmFtID0+ICJQcmlvcml0eUlEIik7CiAgICAgICAgaWYgKCRQcmlvcml0eURhdGF7UHJpb3JpdHlJRH0gbmUgJ05FVycpIHsKICAgICAgICAgICAgJVByaW9yaXR5RGF0YSA9ICRTZWxmLT57UHJpb3JpdHlPYmplY3R9LT5Qcmlvcml0eUdldCgKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgPT4gJFByaW9yaXR5RGF0YXtQcmlvcml0eUlEfSwKICAgICAgICAgICAgICAgIFVzZXJJRCA9PiAkU2VsZi0+e1VzZXJJRH0sCiAgICAgICAgICAgICk7CiAgICAgICAgICAgICRQcmlvcml0eURhdGF7UHJpb3JpdHlJRH0gPSAkUHJpb3JpdHlEYXRhe0lEfTsKICAgICAgICB9CiAgICAgICAgIyBvdXRwdXQgaGVhZGVyCiAgICAgICAgbXkgJE91dHB1dCA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+SGVhZGVyKCk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk5hdmlnYXRpb25CYXIoKTsKCiAgICAgICAgIyBvdXRwdXQgb3ZlcnZpZXcKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdPdmVydmlldycsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICAgICAgIyBnZW5lcmF0ZSBWYWxpZE9wdGlvblN0cmcKICAgICAgICBteSAlVmFsaWRMaXN0ID0gJFNlbGYtPntWYWxpZE9iamVjdH0tPlZhbGlkTGlzdCgpOwogICAgICAgICRQcmlvcml0eURhdGF7VmFsaWRPcHRpb25TdHJnfSA9ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QnVpbGRTZWxlY3Rpb24oCiAgICAgICAgICAgIERhdGEgPT4gXCVWYWxpZExpc3QsCiAgICAgICAgICAgIE5hbWUgPT4gJ1ZhbGlkSUQnLAogICAgICAgICAgICBTZWxlY3RlZElEID0+ICRQcmlvcml0eURhdGF7VmFsaWRJRH0sCiAgICAgICAgKTsKICAgICAgICAjIG91dHB1dCBzZXJ2aWNlIGVkaXQKICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICBOYW1lID0+ICdQcmlvcml0eUVkaXQnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgICAgICVQcmlvcml0eURhdGEsCgogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICAgICAgIyBnZW5lcmF0ZSBvdXRwdXQKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+T3V0cHV0KAogICAgICAgICAgICBUZW1wbGF0ZUZpbGUgPT4gJ0FkbWluVGlja2V0UHJpb3JpdHknLAogICAgICAgICAgICBEYXRhID0+IFwlUGFyYW0sCiAgICAgICAgKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+Rm9vdGVyKCk7CgogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBwcmlvcml0eSBzYXZlCiAgICAjIC0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLSAjCiAgICBlbHNpZiAoJFNlbGYtPntTdWJhY3Rpb259IGVxICdQcmlvcml0eVNhdmUnKSB7CiAgICAgICAgbXkgJVByaW9yaXR5RGF0YTsKICAgICAgICAjIGdldCBwYXJhbXMKICAgICAgICBmb3JlYWNoIChxdyhQcmlvcml0eUlEIE5hbWUgVmFsaWRJRCkpIHsKICAgICAgICAgICAgJFByaW9yaXR5RGF0YXskX30gPSAkU2VsZi0+e1BhcmFtT2JqZWN0fS0+R2V0UGFyYW0oUGFyYW0gPT4gIiRfIikgfHwgJyc7CiAgICAgICAgfQogICAgICAgICRQcmlvcml0eURhdGF7SUR9ID0gJFByaW9yaXR5RGF0YXtQcmlvcml0eUlEfTsKICAgICAgICAjIHNhdmUgdG8gZGF0YWJhc2UKICAgICAgICBpZiAoJFByaW9yaXR5RGF0YXtQcmlvcml0eUlEfSBlcSAnTkVXJykgewogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRTZWxmLT57UHJpb3JpdHlPYmplY3R9LT5Qcmlvcml0eUFkZCgKICAgICAgICAgICAgICAgICVQcmlvcml0eURhdGEsCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwogICAgICAgICAgICBpZiAoISRTdWNjZXNzKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5FcnJvclNjcmVlbigpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgIGVsc2UgewogICAgICAgICAgICBteSAkU3VjY2VzcyA9ICRTZWxmLT57UHJpb3JpdHlPYmplY3R9LT5Qcmlvcml0eVVwZGF0ZSgKICAgICAgICAgICAgICAgICVQcmlvcml0eURhdGEsCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwogICAgICAgICAgICBpZiAoISRTdWNjZXNzKSB7CiAgICAgICAgICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5FcnJvclNjcmVlbigpOwogICAgICAgICAgICB9CiAgICAgICAgfQogICAgICAgICMgcmVkaXJlY3QgdG8gb3ZlcnZpZXcKICAgICAgICByZXR1cm4gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5SZWRpcmVjdChPUCA9PiAiQWN0aW9uPSRTZWxmLT57QWN0aW9ufSIpOwogICAgfQogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgIyBvdmVydmlldwogICAgIyAtLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0tLS0gIwogICAgZWxzZSB7CiAgICAgICAgIyBvdXRwdXQgaGVhZGVyIGFuZCBuYXZiYXIKICAgICAgICBteSAkT3V0cHV0ID0gJFNlbGYtPntMYXlvdXRPYmplY3R9LT5IZWFkZXIoKTsKICAgICAgICAkT3V0cHV0IC49ICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+TmF2aWdhdGlvbkJhcigpOwogICAgICAgICMgb3V0cHV0IG92ZXJ2aWV3CiAgICAgICAgJFNlbGYtPntMYXlvdXRPYmplY3R9LT5CbG9jaygKICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXcnLAogICAgICAgICAgICBEYXRhID0+IHsKICAgICAgICAgICAgICAgICVQYXJhbSwKICAgICAgICAgICAgfSwKICAgICAgICApOwogICAgICAgICMgb3V0cHV0IG92ZXJ2aWV3IHJlc3VsdAogICAgICAgICRTZWxmLT57TGF5b3V0T2JqZWN0fS0+QmxvY2soCiAgICAgICAgICAgIE5hbWUgPT4gJ092ZXJ2aWV3TGlzdCcsCiAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgJVBhcmFtLAogICAgICAgICAgICB9LAogICAgICAgICk7CiAgICAgICAgIyBnZXQgcHJpb3JpdHkgbGlzdAogICAgICAgIG15ICVQcmlvcml0eUxpc3QgPSAkU2VsZi0+e1ByaW9yaXR5T2JqZWN0fS0+UHJpb3JpdHlMaXN0KAogICAgICAgICAgICBWYWxpZCA9PiAwLAogICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICk7CiAgICAgICAgIyBnZXQgdmFsaWQgbGlzdAogICAgICAgIG15ICVWYWxpZExpc3QgPSAkU2VsZi0+e1ZhbGlkT2JqZWN0fS0+VmFsaWRMaXN0KCk7CgogICAgICAgIG15ICRDc3NDbGFzczsKICAgICAgICBmb3JlYWNoIG15ICRQcmlvcml0eUlEIChzb3J0IHskUHJpb3JpdHlMaXN0eyRhfSBjbXAgJFByaW9yaXR5TGlzdHskYn19IGtleXMgJVByaW9yaXR5TGlzdCkgewogICAgICAgICAgICAjIHNldCBvdXRwdXQgY2xhc3MKICAgICAgICAgICAgaWYgKCRDc3NDbGFzcyAmJiAkQ3NzQ2xhc3MgZXEgJ3NlYXJjaGFjdGl2ZScpIHsKICAgICAgICAgICAgICAgICRDc3NDbGFzcyA9ICdzZWFyY2hwYXNzaXZlJzsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlIHsKICAgICAgICAgICAgICAgICRDc3NDbGFzcyA9ICdzZWFyY2hhY3RpdmUnOwogICAgICAgICAgICB9CiAgICAgICAgICAgICMgZ2V0IHByaW9yaXR5IGRhdGEKICAgICAgICAgICAgbXkgJVByaW9yaXR5RGF0YSA9ICRTZWxmLT57UHJpb3JpdHlPYmplY3R9LT5Qcmlvcml0eUdldCgKICAgICAgICAgICAgICAgIFByaW9yaXR5SUQgPT4gJFByaW9yaXR5SUQsCiAgICAgICAgICAgICAgICBVc2VySUQgPT4gJFNlbGYtPntVc2VySUR9LAogICAgICAgICAgICApOwogICAgICAgICAgICAkU2VsZi0+e0xheW91dE9iamVjdH0tPkJsb2NrKAogICAgICAgICAgICAgICAgTmFtZSA9PiAnT3ZlcnZpZXdMaXN0Um93JywKICAgICAgICAgICAgICAgIERhdGEgPT4gewogICAgICAgICAgICAgICAgICAgICVQcmlvcml0eURhdGEsCiAgICAgICAgICAgICAgICAgICAgUHJpb3JpdHlJRCA9PiAkUHJpb3JpdHlJRCwKICAgICAgICAgICAgICAgICAgICBDc3NDbGFzcyA9PiAkQ3NzQ2xhc3MsCiAgICAgICAgICAgICAgICAgICAgVmFsaWQgPT4gJFZhbGlkTGlzdHskUHJpb3JpdHlEYXRhe1ZhbGlkSUR9fSwKICAgICAgICAgICAgICAgIH0sCiAgICAgICAgICAgICk7CiAgICAgICAgfQogICAgICAgICMgc3RhcnQgdGVtcGxhdGUgb3V0cHV0CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPk91dHB1dCgKICAgICAgICAgICAgVGVtcGxhdGVGaWxlID0+ICdBZG1pblRpY2tldFByaW9yaXR5JywKICAgICAgICAgICAgRGF0YSA9PiBcJVBhcmFtLAogICAgICAgICk7CiAgICAgICAgJE91dHB1dCAuPSAkU2VsZi0+e0xheW91dE9iamVjdH0tPkZvb3RlcigpOwogICAgICAgIHJldHVybiAkT3V0cHV0OwogICAgfQp9CgoxOw==
IyAtLQojIEFkbWluSVRTTUNJUEFsbG9jYXRlLmR0bCAtIHByb3ZpZGVzIEhUTUwgZm9ybSBmb3IgQWRtaW5JVFNNQ0lQQWxsb2NhdGUKIyBDb3B5cmlnaHQgKEMpIDIwMDEtMjAwNyBPVFJTIEdtYkgsIGh0dHA6Ly9vdHJzLm9yZy8KIyAtLQojICRJZDogQWRtaW5JVFNNQ0lQQWxsb2NhdGUuZHRsLHYgMS4yIDIwMDcvMDUvMjIgMDc6NTM6MTggbWggRXhwICQKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwudHh0LgojIC0tCgo8dGFibGUgYm9yZGVyPSIwIiB3aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIzIj4KICA8dHI+CiAgICA8dGQgY29sc3Bhbj0iMiIgY2xhc3M9Im1haW5oZWFkIj4KICAgICAgJEVudnsiQm94MCJ9JFRleHR7IkNyaXRpY2FsaXR5IDwtPiBJbXBhY3QgPC0+IFByaW9yaXR5In0kRW52eyJCb3gxIn0KICAgIDwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQgY2xhc3M9Im1haW5ib2R5IiBhbGlnbj0iY2VudGVyIj4KICAgICAgPGJyPgogICAgICA8Zm9ybSBhY3Rpb249IiRFbnZ7IkNHSUhhbmRsZSJ9IiBtZXRob2Q9InBvc3QiPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9Ij4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJDSVBBbGxvY2F0ZSI+CiAgICAgICAgPHRhYmxlIHdpZHRoPSI4MDAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iNCI+CiAgICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGhlYWQiPgogICAgICAgICAgICAgICRUZXh0eyJQcmlvcml0eSJ9ICRUZXh0eyJhbGxvY2F0ZSJ9OgogICAgICAgICAgICA8L3RkPgogICAgICAgICAgPC90cj4KICAgICAgICAgIDx0cj4KICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50Ym9keSI+CiAgICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIzIiB3aWR0aD0iMTAwJSI+CjwhLS0gZHRsOmJsb2NrOkNJUEFsbG9jYXRlUm93IC0tPgogICAgICAgICAgICAgICAgPHRyPgo8IS0tIGR0bDpibG9jazpDSVBBbGxvY2F0ZVJvd0NvbHVtbkRlc2NyaXB0aW9uIC0tPgogICAgICAgICAgICAgICAgICA8dGQ+CiAgICAgICAgICAgICAgICAgICAgPHRhYmxlIGJvcmRlcj0iMCIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSIwIiB3aWR0aD0iMTAwJSI+CiAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSIgYWxpZ249ImNlbnRlciI+JFRleHR7IiRRRGF0YXsiT2JqZWN0VHlwZSJ9In08L3RkPgogICAgICAgICAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIiBhbGlnbj0iY2VudGVyIj4kVGV4dHsiJFFEYXRheyJPYmplY3RPcHRpb24ifSJ9PC90ZD4KICAgICAgICAgICAgICAgICAgICAgIDwvdHI+CiAgICAgICAgICAgICAgICAgICAgPC90YWJsZT4KICAgICAgICAgICAgICAgICAgPC90ZD4KPCEtLSBkdGw6YmxvY2s6Q0lQQWxsb2NhdGVSb3dDb2x1bW5EZXNjcmlwdGlvbiAtLT4KPCEtLSBkdGw6YmxvY2s6Q0lQQWxsb2NhdGVSb3dDb2x1bW5Db250ZW50IC0tPgogICAgICAgICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnR2YWx1ZSIgYWxpZ249ImNlbnRlciI+JERhdGF7Ik9wdGlvblN0cmcifTwvdGQ+CjwhLS0gZHRsOmJsb2NrOkNJUEFsbG9jYXRlUm93Q29sdW1uQ29udGVudCAtLT4KICAgICAgICAgICAgICAgIDwvdHI+CjwhLS0gZHRsOmJsb2NrOkNJUEFsbG9jYXRlUm93IC0tPgogICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICA8L3RyPgogICAgICAgICAgPHRyPgogICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRmb290ZXIiPgogICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iYnV0dG9uIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSIkVGV4dHsiU2F2ZSJ9Ij4KICAgICAgICAgICAgPC90ZD4KICAgICAgICAgIDwvdHI+CiAgICAgICAgPC90YWJsZT4KICAgICAgPC9mb3JtPgogICAgICA8YnI+CiAgICA8L3RkPgogIDwvdHI+CjwvdGFibGU+Cg==
IyAtLQojIEFkbWluVGlja2V0UHJpb3JpdHkuZHRsIC0gcHJvdmlkZXMgSFRNTCBmb3JtIGZvciBBZG1pblRpY2tldFByaW9yaXR5CiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDcgT1RSUyBHbWJILCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyAkSWQ6IEFkbWluVGlja2V0UHJpb3JpdHkuZHRsLHYgMS40IDIwMDcvMDcvMDIgMTM6Mjk6MjAgbWggRXhwICQKIyAtLQojIFRoaXMgc29mdHdhcmUgY29tZXMgd2l0aCBBQlNPTFVURUxZIE5PIFdBUlJBTlRZLiBGb3IgZGV0YWlscywgc2VlCiMgdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CiMgZGlkIG5vdCByZWNlaXZlIHRoaXMgZmlsZSwgc2VlIGh0dHA6Ly93d3cuZ251Lm9yZy9saWNlbnNlcy9ncGwudHh0LgojIC0tCgo8IS0tIGR0bDpibG9jazpPdmVydmlldyAtLT4KPHRhYmxlIGJvcmRlcj0iMCIgd2lkdGg9IjEwMCUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMyI+CiAgPHRyPgogICAgPHRkIGNvbHNwYW49IjIiIGNsYXNzPSJtYWluaGVhZCI+CiAgICAgICRFbnZ7IkJveDAifSRUZXh0eyJQcmlvcml0eSBNYW5hZ2VtZW50In0kRW52eyJCb3gxIn0KICAgIDwvdGQ+CiAgPC90cj4KICA8dHI+CiAgICA8dGQgd2lkdGg9IjMwJSIgY2xhc3M9Im1haW5ib2R5Ij4KICAgICAgPGZvcm0gYWN0aW9uPSIkRW52eyJDR0lIYW5kbGUifSIgbWV0aG9kPSJnZXQiPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IkFjdGlvbiIgdmFsdWU9IiRFbnZ7IkFjdGlvbiJ9Ij4KICAgICAgICA8aW5wdXQgdHlwZT0iaGlkZGVuIiBuYW1lPSJTdWJhY3Rpb24iIHZhbHVlPSJQcmlvcml0eUVkaXQiPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlByaW9yaXR5SUQiIHZhbHVlPSJORVciPgogICAgICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgY2VsbHNwYWNpbmc9IjAiIGNlbGxwYWRkaW5nPSI0Ij4KICAgICAgICAgIDx0cj4KICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50aGVhZCI+JFRleHR7IkFkZCBQcmlvcml0eSJ9OjwvdGQ+CiAgICAgICAgICA8L3RyPgogICAgICAgICAgPHRyPgogICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRib2R5Ij4kVGV4dHsiQWRkIGEgbmV3IFByaW9yaXR5LiJ9PC90ZD4KICAgICAgICAgIDwvdHI+CiAgICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGZvb3RlciI+CiAgICAgICAgICAgICAgPGlucHV0IGNsYXNzPSJidXR0b24iIHR5cGU9InN1Ym1pdCIgdmFsdWU9IiRUZXh0eyJBZGQifSI+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICA8L3RyPgogICAgICAgIDwvdGFibGU+CiAgICAgIDwvZm9ybT4KICAgIDwvdGQ+CiAgICA8dGQgd2lkdGg9IjcwJSIgY2xhc3M9Im1haW5ib2R5Ij4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXdMaXN0IC0tPgogICAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iNCI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50aGVhZCI+JFRleHR7Ikxpc3QifTo8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50Ym9keSI+CiAgICAgICAgICAgIDx0YWJsZSB3aWR0aD0iMTAwJSIgYm9yZGVyPSIwIiBjZWxsc3BhY2luZz0iMCIgY2VsbHBhZGRpbmc9IjMiPgogICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSIgd2lkdGg9IjYwJSI+JFRleHR7IlByaW9yaXR5In08L3RkPgogICAgICAgICAgICAgICAgPHRkIGFsaWduPSJjZW50ZXIiIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsidmFsaWQifS8kVGV4dHsiaW52YWxpZCJ9PC90ZD4KICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpPdmVydmlld0xpc3RSb3cgLS0+CiAgICAgICAgICAgICAgPHRyPgogICAgICAgICAgICAgICAgPHRkIGNsYXNzPSIkUURhdGF7IkNzc0NsYXNzIn0iPgogICAgICAgICAgICAgICAgICA8YSBocmVmPSIkRW52eyJCYXNlbGluayJ9QWN0aW9uPSRFbnZ7IkFjdGlvbiJ9JlN1YmFjdGlvbj1Qcmlvcml0eUVkaXQmUHJpb3JpdHlJRD0kUURhdGF7IlByaW9yaXR5SUQifSI+CiAgICAgICAgICAgICAgICAgICRRRGF0YXsiTmFtZSJ9CiAgICAgICAgICAgICAgICAgIDwvYT4KICAgICAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICAgICAgICA8dGQgYWxpZ249ImNlbnRlciIgY2xhc3M9IiRRRGF0YXsiQ3NzQ2xhc3MifSI+CiAgICAgICAgICAgICAgICAgICRUZXh0eyIkUURhdGF7IlZhbGlkIn0ifQogICAgICAgICAgICAgICAgPC90ZD4KICAgICAgICAgICAgICA8L3RyPgo8IS0tIGR0bDpibG9jazpPdmVydmlld0xpc3RSb3cgLS0+CiAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgICAgPHRyPgogICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50Zm9vdGVyIj4KICAgICAgICAgICAgJm5ic3A7CiAgICAgICAgICA8L3RkPgogICAgICAgIDwvdHI+CiAgICAgIDwvdGFibGU+CjwhLS0gZHRsOmJsb2NrOk92ZXJ2aWV3TGlzdCAtLT4KPCEtLSBkdGw6YmxvY2s6UHJpb3JpdHlFZGl0IC0tPgogICAgICA8Zm9ybSBhY3Rpb249IiRFbnZ7IkNHSUhhbmRsZSJ9IiBtZXRob2Q9ImdldCI+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iQWN0aW9uIiB2YWx1ZT0iJEVudnsiQWN0aW9uIn0iPgogICAgICAgIDxpbnB1dCB0eXBlPSJoaWRkZW4iIG5hbWU9IlN1YmFjdGlvbiIgdmFsdWU9IlByaW9yaXR5U2F2ZSI+CiAgICAgICAgPGlucHV0IHR5cGU9ImhpZGRlbiIgbmFtZT0iUHJpb3JpdHlJRCIgdmFsdWU9IiRRRGF0YXsiUHJpb3JpdHlJRCJ9Ij4KICAgICAgICA8dGFibGUgd2lkdGg9IjEwMCUiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iNCI+CiAgICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGhlYWQiPiRUZXh0eyJFZGl0In06PC90ZD4KICAgICAgICAgIDwvdHI+CiAgICAgICAgICA8dHI+CiAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGJvZHkiPgogICAgICAgICAgICAgIDx0YWJsZSBib3JkZXI9IjAiIGNlbGxzcGFjaW5nPSIwIiBjZWxscGFkZGluZz0iMyI+CiAgICAgICAgICAgICAgICA8dHI+CiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudGtleSI+JFRleHR7IlByaW9yaXR5In06IDwvdGQ+CiAgICAgICAgICAgICAgICAgIDx0ZCBjbGFzcz0iY29udGVudHZhbHVlIj4KICAgICAgICAgICAgICAgICAgICA8aW5wdXQgdHlwZT0idGV4dCIgbmFtZT0iTmFtZSIgdmFsdWU9IiRRRGF0YXsiTmFtZSJ9IiBzaXplPSI0NSIgbWF4bGVuZ3RoPSIyMDAiPgogICAgICAgICAgICAgICAgICA8L3RkPgogICAgICAgICAgICAgICAgPC90cj4KICAgICAgICAgICAgICAgIDx0cj4KICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50a2V5Ij4kVGV4dHsiVmFsaWQifTogPC90ZD4KICAgICAgICAgICAgICAgICAgPHRkIGNsYXNzPSJjb250ZW50dmFsdWUiPiREYXRheyJWYWxpZE9wdGlvblN0cmcifTwvdGQ+CiAgICAgICAgICAgICAgICA8L3RyPgogICAgICAgICAgICAgIDwvdGFibGU+CiAgICAgICAgICAgIDwvdGQ+CiAgICAgICAgICA8L3RyPgogICAgICAgICAgPHRyPgogICAgICAgICAgICA8dGQgY2xhc3M9ImNvbnRlbnRmb290ZXIiPgogICAgICAgICAgICAgIDxpbnB1dCBjbGFzcz0iYnV0dG9uIiB0eXBlPSJzdWJtaXQiIHZhbHVlPSIkVGV4dHsiU3VibWl0In0iPgogICAgICAgICAgICA8L3RkPgogICAgICAgICAgPC90cj4KICAgICAgICA8L3RhYmxlPgogICAgICA8L2Zvcm0+CjwhLS0gZHRsOmJsb2NrOlByaW9yaXR5RWRpdCAtLT4KICAgIDwvdGQ+CiAgPC90cj4KPC90YWJsZT4KPCEtLSBkdGw6YmxvY2s6T3ZlcnZpZXcgLS0+Cg==
IyAtLQojIEtlcm5lbC9TeXN0ZW0vSVRTTUNJUEFsbG9jYXRlLnBtIC0gYWxsIGNyaXRpY2FsaXR5LCBpbXBhY3QgYW5kIHByaW9yaXR5IGFsbG9jYXRpb24gZnVuY3Rpb25zCiMgQ29weXJpZ2h0IChDKSAyMDAxLTIwMDcgT1RSUyBHbWJILCBodHRwOi8vb3Rycy5vcmcvCiMgLS0KIyAkSWQ6IElUU01DSVBBbGxvY2F0ZS5wbSx2IDEuMyAyMDA3LzA3LzAyIDEzOjI5OjIwIG1oIEV4cCAkCiMgLS0KIyBUaGlzIHNvZnR3YXJlIGNvbWVzIHdpdGggQUJTT0xVVEVMWSBOTyBXQVJSQU5UWS4gRm9yIGRldGFpbHMsIHNlZQojIHRoZSBlbmNsb3NlZCBmaWxlIENPUFlJTkcgZm9yIGxpY2Vuc2UgaW5mb3JtYXRpb24gKEdQTCkuIElmIHlvdQojIGRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLnR4dC4KIyAtLQoKcGFja2FnZSBLZXJuZWw6OlN5c3RlbTo6SVRTTUNJUEFsbG9jYXRlOwoKdXNlIHN0cmljdDsKdXNlIHdhcm5pbmdzOwoKdXNlIHZhcnMgcXcoQElTQSAkVkVSU0lPTik7CiRWRVJTSU9OID0gJyRSZXZpc2lvbjogMS4zICQnOwokVkVSU0lPTiA9fiBzL15cJC4qOlxXKC4qKVxXLis/JC8kMS87Cgo9aGVhZDEgTkFNRQoKS2VybmVsOjpTeXN0ZW06OkNJUEFsbG9jYXRlIC0gY3JpdGljYWxpdHksIGltcGFjdCBhbmQgcHJpb3JpdHkgYWxsb2NhdGlvbiBsaWIKCj1oZWFkMSBTWU5PUFNJUwoKQWxsIGNyaXRpY2FsaXR5LCBpbXBhY3QgYW5kIHByaW9yaXR5IGFsbG9jYXRpb24gZnVuY3Rpb25zLgoKPWhlYWQxIFBVQkxJQyBJTlRFUkZBQ0UKCj1vdmVyIDQKCj1jdXQKCj1pdGVtIG5ldygpCgpjcmVhdGUgYSBvYmplY3QKCiAgICB1c2UgS2VybmVsOjpDb25maWc7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OkxvZzsKICAgIHVzZSBLZXJuZWw6OlN5c3RlbTo6REI7CiAgICB1c2UgS2VybmVsOjpTeXN0ZW06OlByaW9yaXR5OwoKICAgIG15ICRDb25maWdPYmplY3QgPSBLZXJuZWw6OkNvbmZpZy0+bmV3KCk7CiAgICBteSAkTG9nT2JqZWN0ID0gS2VybmVsOjpTeXN0ZW06OkxvZy0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgKTsKICAgIG15ICREQk9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpEQi0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgIExvZ09iamVjdCA9PiAkTG9nT2JqZWN0LAogICAgKTsKICAgIG15ICRDSVBBbGxvY2F0ZU9iamVjdCA9IEtlcm5lbDo6U3lzdGVtOjpDSVBBbGxvY2F0ZS0+bmV3KAogICAgICAgIENvbmZpZ09iamVjdCA9PiAkQ29uZmlnT2JqZWN0LAogICAgICAgIExvZ09iamVjdCA9PiAkTG9nT2JqZWN0LAogICAgICAgIERCT2JqZWN0ID0+ICREQk9iamVjdCwKICAgICk7Cgo9Y3V0CgpzdWIgbmV3IHsKICAgIG15ICRUeXBlID0gc2hpZnQ7CiAgICBteSAlUGFyYW0gPSBAXzsKICAgICMgYWxsb2NhdGUgbmV3IGhhc2ggZm9yIG9iamVjdAogICAgbXkgJFNlbGYgPSB7fTsKICAgIGJsZXNzICgkU2VsZiwgJFR5cGUpOwogICAgIyBjaGVjayBuZWVkZWQgb2JqZWN0cwogICAgZm9yZWFjaCAocXcoREJPYmplY3QgQ29uZmlnT2JqZWN0IExvZ09iamVjdCkpIHsKICAgICAgICAkU2VsZi0+eyRffSA9ICRQYXJhbXskX30gfHwgZGllICJHb3Qgbm8gJF8hIjsKICAgIH0KCiAgICByZXR1cm4gJFNlbGY7Cn0KCj1pdGVtIEFsbG9jYXRlTGlzdCgpCgpyZXR1cm4gYSAyZCBoYXNoIHJlZmVyZW5jZSBvZiBhbGxvY2F0aW9ucwoKICAgIG15ICRMaXN0UmVmID0gJENJUEFsbG9jYXRlT2JqZWN0LT5BbGxvY2F0ZUxpc3QoCiAgICAgICAgVXNlcklEID0+IDEsCiAgICApOwoKPWN1dAoKc3ViIEFsbG9jYXRlTGlzdCB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwogICAgbXkgJVBhcmFtID0gQF87CiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yZWFjaCAocXcoVXNlcklEKSkgewogICAgICAgIGlmICghJFBhcmFteyRffSkgewogICAgICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZyhQcmlvcml0eSA9PiAnZXJyb3InLCBNZXNzYWdlID0+ICJOZWVkICRfISIpOwogICAgICAgICAgICByZXR1cm47CiAgICAgICAgfQogICAgfQogICAgIyBxdW90ZQogICAgZm9yZWFjaCAocXcoVXNlcklEKSkgewogICAgICAgICRQYXJhbXskX30gPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoJFBhcmFteyRffSwgJ0ludGVnZXInKTsKICAgIH0KICAgICMgYXNrIGRhdGFiYXNlCiAgICBteSAlQWxsb2NhdGVEYXRhID0gKCk7CiAgICBpZiAoJFNlbGYtPntEQk9iamVjdH0tPlByZXBhcmUoU1FMID0+ICdTRUxFQ1QgY3JpdGljYWxpdHlfaWQsIGltcGFjdF9pZCwgcHJpb3JpdHlfaWQgRlJPTSBjaXBfYWxsb2NhdGUnKSkgewogICAgICAgIHdoaWxlIChteSBAUm93ID0gJFNlbGYtPntEQk9iamVjdH0tPkZldGNocm93QXJyYXkoKSkgewogICAgICAgICAgICAkQWxsb2NhdGVEYXRheyRSb3dbMV19eyRSb3dbMF19ID0gJFJvd1syXTsKICAgICAgICB9CiAgICB9CgogICAgcmV0dXJuIFwlQWxsb2NhdGVEYXRhOwp9Cgo9aXRlbSBBbGxvY2F0ZVVwZGF0ZSgpCgp1cGRhdGUgdGhlIGFsbG9jYXRpb24gb2YgY3JpdGljYWxpdHksIGltcGFjdCBhbmQgcHJpb3JpdHkKCiAgICBteSAkVHJ1ZSA9ICRDSVBBbGxvY2F0ZU9iamVjdC0+QWxsb2NhdGVVcGRhdGUoCiAgICAgICAgQWxsb2NhdGVEYXRhID0+ICREYXRhUmVmLCAgIyAyRCBoYXNoIHJlZmVyZW5jZQogICAgICAgIFVzZXJJRCA9PiAxLAogICAgKTsKCj1jdXQKCnN1YiBBbGxvY2F0ZVVwZGF0ZSB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwogICAgbXkgJVBhcmFtID0gQF87CiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yZWFjaCAocXcoQWxsb2NhdGVEYXRhIFVzZXJJRCkpIHsKICAgICAgICBpZiAoISRQYXJhbXskX30pIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coUHJpb3JpdHkgPT4gJ2Vycm9yJywgTWVzc2FnZSA9PiAiTmVlZCAkXyEiKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgIGlmICghcmVmKCRQYXJhbXtBbGxvY2F0ZURhdGF9KSBlcSAnSEFTSCcpIHsKICAgICAgICAkU2VsZi0+e0xvZ09iamVjdH0tPkxvZyhQcmlvcml0eSA9PiAnZXJyb3InLCBNZXNzYWdlID0+ICJBbGxvY2F0ZURhdGEgbXVzdCBiZSBhIDJEIGhhc2ggcmVmZXJlbmNlISIpOwogICAgICAgIHJldHVybjsKICAgIH0KICAgICMgcXVvdGUKICAgIGZvcmVhY2ggKHF3KFVzZXJJRCkpIHsKICAgICAgICAkUGFyYW17JF99ID0gJFNlbGYtPntEQk9iamVjdH0tPlF1b3RlKCRQYXJhbXskX30sICdJbnRlZ2VyJyk7CiAgICB9CiAgICAjIGRlbGV0ZSBvbGQgYWxsb2NhdGlvbnMKICAgIG15ICRTUUwgPSAiREVMRVRFIEZST00gY2lwX2FsbG9jYXRlIjsKICAgIG15ICREZWxldGUgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RG8oU1FMID0+ICRTUUwpOwogICAgbXkgJFJldHVybiA9IDA7CgogICAgIyBpbnNlcnQgbmV3IGFsbG9jYXRpb25zCiAgICBpZiAoJERlbGV0ZSkgewogICAgICAgIGZvcmVhY2ggbXkgJEltcGFjdElEIChrZXlzICV7JFBhcmFte0FsbG9jYXRlRGF0YX19KSB7CiAgICAgICAgICAgICMgYWJvcnQgaW5zZXJ0LCBpZiBubyAyZCBoYXNoIHJlZmVyZW5jZSB3YXMgZm91bmQKICAgICAgICAgICAgaWYgKHJlZigkUGFyYW17QWxsb2NhdGVEYXRhfS0+eyRJbXBhY3RJRH0pIG5lICdIQVNIJykgewogICAgICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coUHJpb3JpdHkgPT4gJ2Vycm9yJywgTWVzc2FnZSA9PiAiQWxsb2NhdGVEYXRhIG11c3QgYmUgYSAyRCBoYXNoIHJlZmVyZW5jZSEiKTsKICAgICAgICAgICAgICAgIG5leHQ7CiAgICAgICAgICAgIH0KICAgICAgICAgICAgZm9yZWFjaCBteSAkQ3JpdGljYWxpdHlJRCAoa2V5cyAleyRQYXJhbXtBbGxvY2F0ZURhdGF9LT57JEltcGFjdElEfX0pIHsKICAgICAgICAgICAgICAgIG15ICRQcmlvcml0eUlEID0gJFBhcmFte0FsbG9jYXRlRGF0YX0tPnskSW1wYWN0SUR9LT57JENyaXRpY2FsaXR5SUR9OwogICAgICAgICAgICAgICAgIyBxdW90ZQogICAgICAgICAgICAgICAgJENyaXRpY2FsaXR5SUQgPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoJENyaXRpY2FsaXR5SUQsICdJbnRlZ2VyJyk7CiAgICAgICAgICAgICAgICAkSW1wYWN0SUQgPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoJEltcGFjdElELCAnSW50ZWdlcicpOwogICAgICAgICAgICAgICAgJFByaW9yaXR5SUQgPSAkU2VsZi0+e0RCT2JqZWN0fS0+UXVvdGUoJFByaW9yaXR5SUQsICdJbnRlZ2VyJyk7CgogICAgICAgICAgICAgICAgIyBpbnNlcnQgbmV3IGFsbG9jYXRpb24KICAgICAgICAgICAgICAgIG15ICRTUUwgPSAiSU5TRVJUIElOVE8gY2lwX2FsbG9jYXRlIChjcml0aWNhbGl0eV9pZCwgaW1wYWN0X2lkLCBwcmlvcml0eV9pZCwgIi4KICAgICAgICAgICAgICAgICAgICAiY3JlYXRlX3RpbWUsIGNyZWF0ZV9ieSwgY2hhbmdlX3RpbWUsIGNoYW5nZV9ieSkgVkFMVUVTICIuCiAgICAgICAgICAgICAgICAgICAgIigkQ3JpdGljYWxpdHlJRCwgJEltcGFjdElELCAkUHJpb3JpdHlJRCwgIi4KICAgICAgICAgICAgICAgICAgICAiY3VycmVudF90aW1lc3RhbXAsICRQYXJhbXtVc2VySUR9LCBjdXJyZW50X3RpbWVzdGFtcCwgJFBhcmFte1VzZXJJRH0pIjsKICAgICAgICAgICAgICAgICRTZWxmLT57REJPYmplY3R9LT5EbyhTUUwgPT4gJFNRTCk7CiAgICAgICAgICAgIH0KICAgICAgICB9CiAgICAgICAgJFJldHVybiA9IDE7CiAgICB9CiAgICByZXR1cm4gJFJldHVybjsKfQoKPWl0ZW0gUHJpb3JpdHlBbGxvY2F0aW9uR2V0KCkKCnJldHVybiB0aGUgcHJpb3JpdHkgaWQgb2YgYSBjcml0aWNhbGl0eSBhbmQgYW4gaW1wYWN0CgogICAgbXkgJFByaW9yaXR5SUQgPSAkQ0lQQWxsb2NhdGVPYmplY3QtPlByaW9yaXR5QWxsb2NhdGlvbkdldCgKICAgICAgICBDcml0aWNhbGl0eUlEID0+IDMyMSwKICAgICAgICBJbXBhY3RJRCA9PiAxMjMsCiAgICApOwoKPWN1dAoKc3ViIFByaW9yaXR5QWxsb2NhdGlvbkdldCB7CiAgICBteSAkU2VsZiA9IHNoaWZ0OwogICAgbXkgJVBhcmFtID0gQF87CiAgICAjIGNoZWNrIG5lZWRlZCBzdHVmZgogICAgZm9yZWFjaCAocXcoQ3JpdGljYWxpdHlJRCBJbXBhY3RJRCkpIHsKICAgICAgICBpZiAoISRQYXJhbXskX30pIHsKICAgICAgICAgICAgJFNlbGYtPntMb2dPYmplY3R9LT5Mb2coUHJpb3JpdHkgPT4gJ2Vycm9yJywgTWVzc2FnZSA9PiAiTmVlZCAkXyEiKTsKICAgICAgICAgICAgcmV0dXJuOwogICAgICAgIH0KICAgIH0KICAgICMgcXVvdGUKICAgIGZvcmVhY2ggKHF3KENyaXRpY2FsaXR5SUQgSW1wYWN0SUQpKSB7CiAgICAgICAgJFBhcmFteyRffSA9ICRTZWxmLT57REJPYmplY3R9LT5RdW90ZSgkUGFyYW17JF99LCAnSW50ZWdlcicpOwogICAgfQogICAgIyBnZXQgcHJpb3JpdHkgaWQgZnJvbSBkYgogICAgbXkgJFByaW9yaXR5SUQ7CiAgICAkU2VsZi0+e0RCT2JqZWN0fS0+UHJlcGFyZSgKICAgICAgICBTUUwgPT4gIlNFTEVDVCBwcmlvcml0eV9pZCBGUk9NIGNpcF9hbGxvY2F0ZSAiLgogICAgICAgICAgICAiV0hFUkUgY3JpdGljYWxpdHlfaWQgPSAkUGFyYW17Q3JpdGljYWxpdHlJRH0gQU5EIGltcGFjdF9pZCA9ICRQYXJhbXtJbXBhY3RJRH0iLAogICAgICAgIExpbWl0ID0+IDEsCiAgICApOwogICAgd2hpbGUgKG15IEBSb3cgPSAkU2VsZi0+e0RCT2JqZWN0fS0+RmV0Y2hyb3dBcnJheSgpKSB7CiAgICAgICAgJFByaW9yaXR5SUQgPSAkUm93WzBdOwogICAgfQogICAgcmV0dXJuICRQcmlvcml0eUlEOwp9CgoxOwoKPWJhY2sKCj1oZWFkMSBURVJNUyBBTkQgQ09ORElUSU9OUwoKVGhpcyBTb2Z0d2FyZSBpcyBwYXJ0IG9mIHRoZSBPVFJTIHByb2plY3QgKGh0dHA6Ly9vdHJzLm9yZy8pLgoKVGhpcyBzb2Z0d2FyZSBjb21lcyB3aXRoIEFCU09MVVRFTFkgTk8gV0FSUkFOVFkuIEZvciBkZXRhaWxzLCBzZWUKdGhlIGVuY2xvc2VkIGZpbGUgQ09QWUlORyBmb3IgbGljZW5zZSBpbmZvcm1hdGlvbiAoR1BMKS4gSWYgeW91CmRpZCBub3QgcmVjZWl2ZSB0aGlzIGZpbGUsIHNlZSBodHRwOi8vd3d3LmdudS5vcmcvbGljZW5zZXMvZ3BsLnR4dC4KCj1jdXQKCj1oZWFkMSBWRVJTSU9OCgokUmV2aXNpb246IDEuMyAkICREYXRlOiAyMDA3LzA3LzAyIDEzOjI5OjIwICQKCj1jdXQ=
ITSM::Core::Criticality
1 very low
1
current_timestamp
1
current_timestamp
1
ITSM::Core::Criticality
2 low
1
current_timestamp
1
current_timestamp
1
ITSM::Core::Criticality
3 normal
1
current_timestamp
1
current_timestamp
1
ITSM::Core::Criticality
4 high
1
current_timestamp
1
current_timestamp
1
ITSM::Core::Criticality
5 very high
1
current_timestamp
1
current_timestamp
1
ITSM::Core::Impact
1 very low
1
current_timestamp
1
current_timestamp
1
ITSM::Core::Impact
2 low
1
current_timestamp
1
current_timestamp
1
ITSM::Core::Impact
3 normal
1
current_timestamp
1
current_timestamp
1
ITSM::Core::Impact
4 high
1
current_timestamp
1
current_timestamp
1
ITSM::Core::Impact
5 very high
1
current_timestamp
1
current_timestamp
1
1
6
1
current_timestamp
1
current_timestamp
1
1
7
1
current_timestamp
1
current_timestamp
1
1
8
2
current_timestamp
1
current_timestamp
1
1
9
2
current_timestamp
1
current_timestamp
1
1
10
3
current_timestamp
1
current_timestamp
1
2
6
1
current_timestamp
1
current_timestamp
1
2
7
2
current_timestamp
1
current_timestamp
1
2
8
2
current_timestamp
1
current_timestamp
1
2
9
3
current_timestamp
1
current_timestamp
1
2
10
4
current_timestamp
1
current_timestamp
1
3
6
2
current_timestamp
1
current_timestamp
1
3
7
2
current_timestamp
1
current_timestamp
1
3
8
3
current_timestamp
1
current_timestamp
1
3
9
4
current_timestamp
1
current_timestamp
1
3
10
4
current_timestamp
1
current_timestamp
1
4
6
2
current_timestamp
1
current_timestamp
1
4
7
3
current_timestamp
1
current_timestamp
1
4
8
4
current_timestamp
1
current_timestamp
1
4
9
4
current_timestamp
1
current_timestamp
1
4
10
5
current_timestamp
1
current_timestamp
1
5
6
3
current_timestamp
1
current_timestamp
1
5
7
4
current_timestamp
1
current_timestamp
1
5
8
4
current_timestamp
1
current_timestamp
1
5
9
5
current_timestamp
1
current_timestamp
1
5
10
5
current_timestamp
1
current_timestamp
1